@codingame/monaco-editor-wrapper 3.9.3 → 3.10.0-monaco-update.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -15
- package/dist/{_monaco-editor_commonjs-external.js → _virtual/_commonjsHelpers.js} +2 -9
- package/dist/_virtual/_monaco-editor.js +6 -0
- package/dist/_virtual/actions.js +3 -0
- package/dist/_virtual/basicInput.js +3 -0
- package/dist/_virtual/cm_adapter.js +3 -0
- package/dist/_virtual/commands.js +3 -0
- package/dist/_virtual/editor.api.js +6 -0
- package/dist/_virtual/index.js +3 -0
- package/dist/_virtual/index2.js +3 -0
- package/dist/_virtual/index3.js +3 -0
- package/dist/_virtual/keymap_vim.js +3 -0
- package/dist/_virtual/shiftCommand.js +6 -0
- package/dist/_virtual/state.js +3 -0
- package/dist/_virtual/statusbar.js +3 -0
- package/dist/_virtual/util.js +3 -0
- package/dist/assets/Angular.ng-template-16.1.8.vsix/expression-c051cd51.json +834 -0
- package/dist/assets/Angular.ng-template-16.1.8.vsix/inline-styles-59ea31e9.json +92 -0
- package/dist/assets/Angular.ng-template-16.1.8.vsix/inline-template-f0c3f556.json +76 -0
- package/dist/assets/Angular.ng-template-16.1.8.vsix/template-e24e3ba1.json +195 -0
- package/dist/assets/Dart-Code.dart-code-3.75.20231009.vsix/dart-bea1db40.json +534 -0
- package/dist/assets/Dart-Code.dart-code-3.75.20231009.vsix/dart-language-configuration-c4b1f694.json +29 -0
- package/dist/assets/Dart-Code.dart-code-3.75.20231009.vsix/flutter_activity_bar-17811551.svg +14 -0
- package/dist/assets/IMCTradingBV.svlangserver-0.4.1.vsix/codeblock-67e70f41.json +81 -0
- package/dist/assets/IMCTradingBV.svlangserver-0.4.1.vsix/language-configuration-3467c3a6.json +57 -0
- package/dist/assets/IMCTradingBV.svlangserver-0.4.1.vsix/systemverilog-ff001e9f.json +349 -0
- package/dist/assets/IMCTradingBV.svlangserver-0.4.1.vsix/systemverilog.tmLanguage-31a99a46.json +1246 -0
- package/dist/assets/IMCTradingBV.svlangserver-0.4.1.vsix/tasks.schema-832643df.json +30 -0
- package/dist/assets/JakeBecker.elixir-ls-0.17.1.vsix/eex-e9a5e762.json +41 -0
- package/dist/assets/JakeBecker.elixir-ls-0.17.1.vsix/eex-language-configuration-6fb789e3.json +58 -0
- package/dist/assets/JakeBecker.elixir-ls-0.17.1.vsix/elixir-7cb5db44.json +2580 -0
- package/dist/assets/JakeBecker.elixir-ls-0.17.1.vsix/elixir-language-configuration-4bd217f4.json +74 -0
- package/dist/assets/JakeBecker.elixir-ls-0.17.1.vsix/html-eex-3079072a.json +25 -0
- package/dist/assets/JuanBlanco.solidity-0.0.165.vsix/solidity-1f693465.json +213 -0
- package/dist/assets/JuanBlanco.solidity-0.0.165.vsix/solidity-642a30e7.json +1215 -0
- package/dist/assets/JuanBlanco.solidity-0.0.165.vsix/solidity.configuration-d0229207.json +32 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/Markdown Redcarpet-12881a56.json +146 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/RMarkdown-0bbb72c0.json +13 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/Rcpp-cea57c6d.json +34 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/Rd (R Documentation)-555f4e62.json +117 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/Rlogo-6d3318a6.svg +14 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/dcf-3d561f42.json +82 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/dcf-configuration-d58bba2d.json +24 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/r-configuration-78e137e5.json +33 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/r-fe2a45c3.json +647 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/r-snippets-9e46c45c.json +475 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/rbuildignore-9cfe22f1.json +27 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/rbuildignore-configuration-8eb95bcb.json +2 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/rd-configuration-194dd9d9.json +27 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/rmarkdown-dea1e283.json +459 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/rmd-configuration-b4c6dc23.json +27 -0
- package/dist/assets/REditorSupport.r-2.8.2.vsix/rnamespace-290042cd.json +222 -0
- package/dist/assets/alefragnani.pascal-9.6.0.vsix/package.nls-8c1cec26.json +24 -0
- package/dist/assets/alefragnani.pascal-9.6.0.vsix/package.nls.pt-br-50a237c2.json +24 -0
- package/dist/assets/alefragnani.pascal-9.6.0.vsix/pascal-365151a8.json +414 -0
- package/dist/assets/alefragnani.pascal-9.6.0.vsix/pascal-93ca5af8.tmLanguage +243 -0
- package/dist/assets/alefragnani.pascal-9.6.0.vsix/pascal.configuration-650e481b.json +32 -0
- package/dist/assets/batisteo.vscode-django-1.14.0.vsix/django-html.tmLanguage-a755b992.json +701 -0
- package/dist/assets/batisteo.vscode-django-1.14.0.vsix/django-txt.tmLanguage-856346a9.json +255 -0
- package/dist/assets/batisteo.vscode-django-1.14.0.vsix/filters-f60b575d.json +339 -0
- package/dist/assets/batisteo.vscode-django-1.14.0.vsix/language-configuration-f8af0b2f.json +63 -0
- package/dist/assets/batisteo.vscode-django-1.14.0.vsix/tags-43e8b685.json +496 -0
- package/dist/assets/bitwisecook.tcl-0.4.3.vsix/language-configuration-e9539ff0.json +75 -0
- package/dist/assets/bitwisecook.tcl-0.4.3.vsix/tcl-10fb1e40.json +142 -0
- package/dist/assets/bitwisecook.tcl-0.4.3.vsix/tcl-d73ae460.json +5474 -0
- package/dist/assets/broadcomMFD.cobol-language-support-2.0.3.vsix/COBOL.tmLanguage-67e1eefb.json +216 -0
- package/dist/assets/broadcomMFD.cobol-language-support-2.0.3.vsix/lang-config-a301d1b9.json +27 -0
- package/dist/assets/broadcomMFD.cobol-language-support-2.0.3.vsix/pgm_conf.schema-f8558717.json +24 -0
- package/dist/assets/broadcomMFD.cobol-language-support-2.0.3.vsix/proc_grps.schema-428d2a80.json +55 -0
- package/dist/assets/ckolkman.vscode-postgres-1.4.3.vsix/language-configuration-b3cf7aac.json +25 -0
- package/dist/assets/ckolkman.vscode-postgres-1.4.3.vsix/pgsql-a84fddae.tmLanguage +413 -0
- package/dist/assets/ckolkman.vscode-postgres-1.4.3.vsix/postgres-explorer-ce4bf408.svg +100 -0
- package/dist/assets/golang.Go-0.39.1.vsix/go-71588b74.json +274 -0
- package/dist/assets/golang.Go-0.39.1.vsix/go.mod.language-configuration-0301a994.json +5 -0
- package/dist/assets/golang.Go-0.39.1.vsix/go.mod.tmGrammar-6cbef28b.json +171 -0
- package/dist/assets/golang.Go-0.39.1.vsix/go.sum.tmGrammar-36d4acfd.json +44 -0
- package/dist/assets/golang.Go-0.39.1.vsix/govulncheck.tmGrammar-3741e2c9.json +123 -0
- package/dist/assets/johnsoncodehk.vscode-angular-1.0.22.vsix/angular-directives-77c45bf9.json +123 -0
- package/dist/assets/johnsoncodehk.vscode-angular-1.0.22.vsix/angular-interpolations-b1f89745.json +44 -0
- package/dist/assets/johnsoncodehk.vscode-angular-1.0.22.vsix/angular-template-language-configuration-4cd1b761.json +8 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/C2Hs-c12145c8.json +23 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/C2Hs-configuration-dc72a3f0.json +29 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/Hsc2Hs-685ef114.json +23 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/Hsc2Hs-configuration-15e5e5c3.json +30 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/alex-07217e37.json +236 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/cabal-8f2b8b9f.json +53 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/cabal-configuration-64e517a3.json +6 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/codeblock-cabal-34484e34.json +28 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/codeblock-haskell-138d661e.json +28 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/codeblock-literate-haskell-90d8db8f.json +28 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/happy-3cd8fa35.json +196 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/haskell-192ef944.json +2525 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/haskell-configuration-54079281.json +29 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/literate-haskell-configuration-23cbb80e.json +29 -0
- package/dist/assets/justusadam.language-haskell-3.6.0.vsix/literateHaskell-0a08d9f7.json +56 -0
- package/dist/assets/mathiasfrohlich.Kotlin-1.7.1.vsix/Kotlin-5d2aa580.tmLanguage +1067 -0
- package/dist/assets/mathiasfrohlich.Kotlin-1.7.1.vsix/codeblock-8be87145.json +22 -0
- package/dist/assets/mathiasfrohlich.Kotlin-1.7.1.vsix/kotlin-9f43cb02.json +107 -0
- package/dist/assets/mathiasfrohlich.Kotlin-1.7.1.vsix/kotlin.configuration-1d328649.json +35 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/aspnetcorerazor.tmLanguage-7002af3f.json +1812 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/csharp-a17ace76.json +493 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/language-configuration-f8b16509.json +24 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls-b9937871.json +419 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls.cs-80b9e0b3.json +201 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls.de-2f7710c0.json +201 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls.es-d1bd829b.json +201 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls.fr-e0bc41f9.json +201 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls.it-0e21bedf.json +201 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls.ja-2384013f.json +201 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls.ko-621d3dfe.json +201 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls.pl-bd72e09e.json +201 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls.pt-br-a446b36f.json +201 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls.ru-923ade42.json +201 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls.tr-10253fa3.json +201 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls.zh-cn-00cb169d.json +201 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/package.nls.zh-tw-1c34b33a.json +201 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/vs2019_dark-a56f6e51.json +783 -0
- package/dist/assets/ms-dotnettools.csharp-2.6.24.vsix/vs2019_light-fd29b4ae.json +807 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/conda-environment-3aa03e16.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/conda-meta-e7f42ee0.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/condarc-8ad258e5.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls-c97ce436.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.cs-5dee4ffc.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.de-b852e3ec.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.es-66adbb9e.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.fr-6abf0276.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.it-12650beb.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.ja-de4ee3bd.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.ko-254d6467.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.pl-f957d6c6.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.pt-br-d02ca4d9.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.qps-ploc-f24b5e76.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.ru-e6ba5e62.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.tr-05d98040.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.zh-cn-f41941e0.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/package.nls.zh-tw-02c30e90.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/pip-requirements-85cd5b06.json +1 -0
- package/dist/assets/ms-python.python-2023.19.12861011.vsix/pip-requirements.tmLanguage-5dcdde1f.json +1 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls-faad5326.json +1006 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls.cs-1c63e64b.json +441 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls.de-a80f3548.json +441 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls.es-ed5f9669.json +441 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls.fr-0a6f6680.json +441 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls.it-690d744e.json +441 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls.ja-9e548ee8.json +441 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls.ko-b7c6d97d.json +441 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls.pl-fac1f880.json +441 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls.pt-br-618e6fff.json +441 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls.ru-b8aa8e97.json +441 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls.tr-61b293ea.json +441 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls.zh-cn-2fb473f1.json +441 -0
- package/dist/assets/ms-vscode.cpptools-1.18.0.vsix/package.nls.zh-tw-bd960e98.json +441 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/META-a4e7fa6f.json +56 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/META-e71a284d.json +10 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/atd-03beef93.json +57 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/cram-947e10d8.json +167 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/dune-3f9df928.json +24 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/dune-ac59c79b.json +2949 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/dune-b84b8558.json +30 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/dune-project-1f8165b1.json +26 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/dune-project-c3d6414c.json +326 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/dune-workspace-714d48f4.json +191 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/logo-1ec58c70.svg +3 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/menhir-318b208e.json +349 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/menhir-action-1de9ecfe.json +29 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/menhir-ba3ffd84.json +27 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/merlin-68658127.json +73 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/oasis-6cb9104d.json +6 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/oasis-b3731651.json +69 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/ocaml-2b852e88.json +54 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/ocaml-721ae493.json +654 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/ocaml-8263d04c.json +49 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/ocaml-markdown-codeblock-d59b1879.json +24 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/ocaml.interface-82c9d397.json +161 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/ocamlbuild-28c2016d.json +110 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/ocamlbuild-68c3ee9d.json +16 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/ocamldoc-68623cf8.json +31 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/ocamlformat-12d00ff4.json +5 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/ocamlformat-566f44ca.json +191 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/ocamllex-16f56b53.json +6 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/ocamllex-2f54f6a7.json +21 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/ocamllex-9eea3c0f.json +108 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/opam-051cc018.json +24 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/opam-a3126c97.json +111 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/opam-install-24f044a3.json +23 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/opam-install-5c433c27.json +19 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/reason-46868a8a.json +2357 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/reason-e5da4a73.json +25 -0
- package/dist/assets/ocamllabs.ocaml-platform-1.13.1.vsix/reason-markdown-codeblock-80e4eeb5.json +24 -0
- package/dist/assets/pgourlain.erlang-0.9.7.vsix/Erlang-dc87abbd.plist +2719 -0
- package/dist/assets/pgourlain.erlang-0.9.7.vsix/erlang-ceac2319.json +197 -0
- package/dist/assets/pgourlain.erlang-0.9.7.vsix/erlang.configuration-52d0fdab.json +25 -0
- package/dist/assets/redhat.java-1.24.2023101604.vsix/JavaProperties.tmLanguage-0a8c48eb.json +103 -0
- package/dist/assets/redhat.java-1.24.2023101604.vsix/java-properties-configuration-97f1db18.json +67 -0
- package/dist/assets/redhat.java-1.24.2023101604.vsix/java.tmLanguage-7cffeca4.json +1892 -0
- package/dist/assets/redhat.java-1.24.2023101604.vsix/language-configuration-054e92b8.json +92 -0
- package/dist/assets/redhat.java-1.24.2023101604.vsix/package.nls-2147d73e.json +29 -0
- package/dist/assets/redhat.java-1.24.2023101604.vsix/package.nls.ko-a7811004.json +26 -0
- package/dist/assets/redhat.java-1.24.2023101604.vsix/package.nls.zh-cn-5b3edff8.json +27 -0
- package/dist/assets/redhat.java-1.24.2023101604.vsix/package.nls.zh-tw-236ee4a0.json +26 -0
- package/dist/assets/redhat.java-1.24.2023101604.vsix/package.schema-58232c4f.json +28 -0
- package/dist/assets/scala-lang.scala-0.5.7.vsix/Scala.tmLanguage-e9b79520.json +1 -0
- package/dist/assets/scala-lang.scala-0.5.7.vsix/language-configuration-acc80ed1.json +33 -0
- package/dist/assets/scalameta.metals-1.25.2.vsix/book-dark-6f0d6908.svg +5 -0
- package/dist/assets/scalameta.metals-1.25.2.vsix/book-light-ba883494.svg +1 -0
- package/dist/assets/scalameta.metals-1.25.2.vsix/buildtarget-73bbface.json +37 -0
- package/dist/assets/scalameta.metals-1.25.2.vsix/file_type_java-36bb31ca.svg +1 -0
- package/dist/assets/scalameta.metals-1.25.2.vsix/file_type_scala-b6c14b23.svg +1 -0
- package/dist/assets/scalameta.metals-1.25.2.vsix/jvm-bytecode-cab4d04e.json +395 -0
- package/dist/assets/scalameta.metals-1.25.2.vsix/jvm-bytecode-verbose-3611fa8e.json +745 -0
- package/dist/assets/scalameta.metals-1.25.2.vsix/scalameta-5e510695.svg +11 -0
- package/dist/assets/scalameta.metals-1.25.2.vsix/scalameta-logo-f3b7b0bf.png +0 -0
- package/dist/assets/scalameta.metals-1.25.2.vsix/semanticdb-44c14f33.json +37 -0
- package/dist/assets/scalameta.metals-1.25.2.vsix/tasty-c2b151f2.json +56 -0
- package/dist/assets/sumneko.lua-3.7.0.vsix/package.nls-f1576108.json +231 -0
- package/dist/assets/sumneko.lua-3.7.0.vsix/package.nls.pt-br-44d0849d.json +231 -0
- package/dist/assets/sumneko.lua-3.7.0.vsix/package.nls.zh-cn-3f634909.json +231 -0
- package/dist/assets/sumneko.lua-3.7.0.vsix/package.nls.zh-tw-144dc848.json +231 -0
- package/dist/assets/sumneko.lua-3.7.0.vsix/schema-dedfd658.json +3421 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/javascript-7aebc91a.json +43 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/language-configuration-3cb1f78d.json +38 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/markdown-svelte-4cd58a41.json +45 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/markdown-svelte-css-0fdc510e.json +23 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/markdown-svelte-js-cd568059.json +23 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/package-json-schema-ec2f7bd4.json +9 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/postcss-05883dcd.json +377 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/prettier-options-schema-9e36a684.json +112 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/pug-svelte-04246371.json +293 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/pug-svelte-dotblock-b92db507.json +55 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/pug-svelte-tags-65124af1.json +201 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/svelte-a1bb47f3.json +22 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/svelte.tmLanguage-aec82be9.json +1163 -0
- package/dist/assets/svelte.svelte-vscode-107.12.0.vsix/typescript-bd1c0ff1.json +37 -0
- package/dist/assets/webfreak.code-d-0.23.2.vsix/d-2da26fd0.json +3163 -0
- package/dist/assets/webfreak.code-d-0.23.2.vsix/d-316cb838.json +90 -0
- package/dist/assets/webfreak.code-d-0.23.2.vsix/diet-0b761e76.json +87 -0
- package/dist/assets/webfreak.code-d-0.23.2.vsix/diet-7fe4fdb7.json +92 -0
- package/dist/assets/webfreak.code-d-0.23.2.vsix/diet-83c1bebc.json +742 -0
- package/dist/assets/webfreak.code-d-0.23.2.vsix/dml-ef6957d3.json +157 -0
- package/dist/assets/webfreak.code-d-0.23.2.vsix/dub.schema-77c2f417.json +377 -0
- package/dist/assets/webfreak.code-d-0.23.2.vsix/general-7b927912.json +84 -0
- package/dist/assets/webfreak.code-d-0.23.2.vsix/sdl-b6c61596.json +149 -0
- package/dist/configuration/index.d.ts +1 -2
- package/dist/configuration/index.js +45 -0
- package/dist/editor/autofold.js +24 -0
- package/dist/editor/cobol.js +67 -0
- package/dist/editor/index.js +9 -0
- package/dist/extensions/Angular.ng-template-16.1.8.vsix.js +16 -0
- package/dist/extensions/Dart-Code.dart-code-3.75.20231009.vsix.js +14 -0
- package/dist/extensions/IMCTradingBV.svlangserver-0.4.1.vsix.js +18 -0
- package/dist/extensions/JakeBecker.elixir-ls-0.17.1.vsix.js +18 -0
- package/dist/extensions/JuanBlanco.solidity-0.0.165.vsix.js +14 -0
- package/dist/extensions/REditorSupport.r-2.8.2.vsix.js +42 -0
- package/dist/extensions/alefragnani.pascal-9.6.0.vsix.js +18 -0
- package/dist/extensions/batisteo.vscode-django-1.14.0.vsix.js +18 -0
- package/dist/extensions/bitwisecook.tcl-0.4.3.vsix.js +14 -0
- package/dist/extensions/broadcomMFD.cobol-language-support-2.0.3.vsix.js +16 -0
- package/dist/extensions/castwide.solargraph-0.24.0.vsix.js +5 -0
- package/dist/extensions/ckolkman.vscode-postgres-1.4.3.vsix.js +14 -0
- package/dist/extensions/golang.Go-0.39.1.vsix.js +18 -0
- package/dist/extensions/johnsoncodehk.vscode-angular-1.0.22.vsix.js +14 -0
- package/dist/extensions/justusadam.language-haskell-3.6.0.vsix.js +38 -0
- package/dist/extensions/mathiasfrohlich.Kotlin-1.7.1.vsix.js +16 -0
- package/dist/extensions/ms-dotnettools.csharp-2.6.24.vsix.js +46 -0
- package/dist/extensions/ms-python.python-2023.19.12861011.vsix.js +48 -0
- package/dist/extensions/ms-vscode.cpptools-1.18.0.vsix.js +36 -0
- package/dist/extensions/ocamllabs.ocaml-platform-1.13.1.vsix.js +82 -0
- package/dist/extensions/pgourlain.erlang-0.9.7.vsix.js +14 -0
- package/dist/extensions/redhat.java-1.24.2023101604.vsix.js +26 -0
- package/dist/extensions/scala-lang.scala-0.5.7.vsix.js +12 -0
- package/dist/extensions/scalameta.metals-1.25.2.vsix.js +30 -0
- package/dist/extensions/sumneko.lua-3.7.0.vsix.js +18 -0
- package/dist/extensions/svelte.svelte-vscode-107.12.0.vsix.js +36 -0
- package/dist/extensions/webfreak.code-d-0.23.2.vsix.js +26 -0
- package/dist/extensions.d.ts +36 -0
- package/dist/features/debug.js +6 -0
- package/dist/features/extensionHostWorker.js +11 -0
- package/dist/features/search.d.ts +1 -0
- package/dist/features/search.js +7 -0
- package/dist/features/viewPanels.d.ts +1 -0
- package/dist/features/viewPanels.js +11 -0
- package/dist/features/views.d.ts +4 -0
- package/dist/features/views.js +27 -0
- package/dist/index.d.ts +3 -3
- package/dist/keybindings/index.js +36 -0
- package/dist/keybindings/vim.js +82 -0
- package/dist/languages/index.d.ts +0 -2
- package/dist/languages/index.js +40 -0
- package/dist/main.js +9 -3564
- package/dist/monaco.d.ts +6 -10
- package/dist/monaco.js +93 -0
- package/dist/node_modules/lodash.kebabcase/index.js +439 -0
- package/dist/node_modules/lodash.throttle/index.js +443 -0
- package/dist/node_modules/monaco-emacs/lib/emacs/actions.js +596 -0
- package/dist/node_modules/monaco-emacs/lib/emacs/basicInput.js +113 -0
- package/dist/node_modules/monaco-emacs/lib/emacs/commands.js +184 -0
- package/dist/node_modules/monaco-emacs/lib/emacs/index.js +186 -0
- package/dist/node_modules/monaco-emacs/lib/emacs/state.js +116 -0
- package/dist/node_modules/monaco-emacs/lib/emacs/util.js +112 -0
- package/dist/node_modules/monaco-emacs/lib/index.js +31 -0
- package/dist/{vim.js → node_modules/monaco-vim/lib/cm/keymap_vim.js} +4 -1790
- package/dist/node_modules/monaco-vim/lib/cm_adapter.js +1393 -0
- package/dist/node_modules/monaco-vim/lib/index.js +71 -0
- package/dist/node_modules/monaco-vim/lib/statusbar.js +239 -0
- package/dist/services.d.ts +8 -0
- package/dist/services.js +73 -0
- package/dist/style.js +12 -0
- package/dist/theme/index.d.ts +1 -4
- package/dist/theme/index.js +21 -0
- package/dist/tools/EditorOpenHandlerRegistry.d.ts +3 -2
- package/dist/tools/EditorOpenHandlerRegistry.js +108 -0
- package/dist/tools/FakeWorker.d.ts +5 -0
- package/dist/tools/FakeWorker.js +8 -0
- package/dist/tools.js +235 -0
- package/dist/worker.d.ts +1 -10
- package/dist/worker.js +11 -43
- package/package.json +127 -67
- package/stats.html +90 -1429
- package/dist/COBOL.tmLanguage.js +0 -172
- package/dist/Erlang.plist.js +0 -1752
- package/dist/HTML (Eex)2.js +0 -100
- package/dist/JSON.tmLanguage.js +0 -221
- package/dist/JSONC.tmLanguage.js +0 -221
- package/dist/JavaProperties.tmLanguage.js +0 -116
- package/dist/JavaScript.tmLanguage.js +0 -5929
- package/dist/JavaScriptReact.tmLanguage.js +0 -5929
- package/dist/Kotlin.tmLanguage.js +0 -724
- package/dist/META.js +0 -100
- package/dist/MagicPython.tmLanguage.js +0 -4221
- package/dist/MagicRegExp.tmLanguage.js +0 -505
- package/dist/Markdown Redcarpet.js +0 -221
- package/dist/RMarkdown.js +0 -25
- package/dist/Rcpp.js +0 -50
- package/dist/Rd (R Documentation).js +0 -131
- package/dist/Regular Expressions (JavaScript).tmLanguage.js +0 -166
- package/dist/Scala.tmLanguage.js +0 -1324
- package/dist/TypeScript.tmLanguage.js +0 -5680
- package/dist/TypeScriptReact.tmLanguage.js +0 -5929
- package/dist/_rollupPluginBabelHelpers.js +0 -51
- package/dist/angular.js +0 -62
- package/dist/asp-vb-net.tmlanguage.js +0 -247
- package/dist/aspnetcorerazor.js +0 -72
- package/dist/aspnetcorerazor.tmLanguage.js +0 -1825
- package/dist/atd.js +0 -110
- package/dist/atd2.js +0 -114
- package/dist/buildignore.r.js +0 -5
- package/dist/buildtarget.js +0 -53
- package/dist/c.js +0 -101
- package/dist/c.tmLanguage.js +0 -3565
- package/dist/cabal.js +0 -10
- package/dist/cabal.tmLanguage.js +0 -66
- package/dist/clojure.js +0 -68
- package/dist/clojure.tmLanguage.js +0 -439
- package/dist/cobol.js +0 -6
- package/dist/cobol2.js +0 -341
- package/dist/codeblock-cabal.js +0 -42
- package/dist/codeblock-haskell.js +0 -42
- package/dist/codeblock-literate-haskell.js +0 -42
- package/dist/codeblock.js +0 -59
- package/dist/codeblock2.js +0 -36
- package/dist/codeblock3.js +0 -95
- package/dist/coffeescript-coffeescript.code-snippets.js +0 -18
- package/dist/coffeescript.js +0 -91
- package/dist/coffeescript.tmLanguage.js +0 -1324
- package/dist/configuration/files.d.ts +0 -6
- package/dist/cpp-c.code-snippets.js +0 -18
- package/dist/cpp-cpp.code-snippets.js +0 -18
- package/dist/cpp.js +0 -101
- package/dist/cpp.tmLanguage.js +0 -16648
- package/dist/cpptools.js +0 -2631
- package/dist/cram.js +0 -257
- package/dist/csharp.js +0 -92
- package/dist/csharp.tmLanguage.js +0 -4992
- package/dist/css.js +0 -106
- package/dist/css.tmLanguage.js +0 -1873
- package/dist/css.worker.js +0 -6
- package/dist/cuda-cpp.js +0 -101
- package/dist/cuda-cpp.tmLanguage.js +0 -19993
- package/dist/d-diet.js +0 -92
- package/dist/d.js +0 -3212
- package/dist/d2.js +0 -97
- package/dist/d3.js +0 -609
- package/dist/dart.js +0 -543
- package/dist/dart2.js +0 -103
- package/dist/dart3.js +0 -1130
- package/dist/dcf.js +0 -93
- package/dist/debian-control.r.js +0 -69
- package/dist/diet.js +0 -758
- package/dist/diet2.js +0 -100
- package/dist/django-html.js +0 -155
- package/dist/django-html.tmLanguage.js +0 -715
- package/dist/django-txt.js +0 -155
- package/dist/django-txt.tmLanguage.js +0 -269
- package/dist/dml.js +0 -169
- package/dist/dml2.js +0 -90
- package/dist/dockercompose.js +0 -82
- package/dist/dpp.js +0 -97
- package/dist/dscript.js +0 -90
- package/dist/dune-project.js +0 -481
- package/dist/dune-project2.js +0 -65
- package/dist/dune-workspace.js +0 -298
- package/dist/dune-workspace2.js +0 -65
- package/dist/dune.js +0 -2962
- package/dist/dune2.js +0 -65
- package/dist/eex.js +0 -55
- package/dist/elixir-snippets.js +0 -184
- package/dist/elixir.js +0 -2341
- package/dist/elixir2.js +0 -69
- package/dist/elixir3.js +0 -40
- package/dist/erlang-erlang.js +0 -195
- package/dist/erlang.js +0 -81
- package/dist/erlang2.js +0 -86
- package/dist/expression.js +0 -846
- package/dist/features/cssContribution.d.ts +0 -1
- package/dist/features/cssContribution.js +0 -7
- package/dist/features/extensionConfigurations.d.ts +0 -1
- package/dist/features/extensionConfigurations.js +0 -44
- package/dist/features/htmlContribution.d.ts +0 -4
- package/dist/features/htmlContribution.js +0 -112
- package/dist/features/jsonContribution.d.ts +0 -6
- package/dist/features/jsonContribution.js +0 -43
- package/dist/features/typescriptContribution.d.ts +0 -1
- package/dist/features/typescriptContribution.js +0 -32
- package/dist/fsharp-fsharp.code-snippets.js +0 -18
- package/dist/fsharp.js +0 -80
- package/dist/fsharp.tmLanguage.js +0 -1844
- package/dist/go.js +0 -103
- package/dist/go.mod.js +0 -8
- package/dist/go.mod.tmGrammar.js +0 -182
- package/dist/go.sum.tmGrammar.js +0 -55
- package/dist/go.tmLanguage.js +0 -1025
- package/dist/go.work.js +0 -8
- package/dist/govulncheck.tmGrammar.js +0 -138
- package/dist/groovy-groovy.code-snippets.js +0 -229
- package/dist/groovy.js +0 -79
- package/dist/groovy.tmLanguage.js +0 -1391
- package/dist/haskell.js +0 -88
- package/dist/haskell.tmLanguage.js +0 -629
- package/dist/haskell2.js +0 -16
- package/dist/html (eex).js +0 -31
- package/dist/html-derivative.tmLanguage.js +0 -57
- package/dist/html-html.code-snippets.js +0 -20
- package/dist/html.js +0 -11
- package/dist/html.tmLanguage.js +0 -2652
- package/dist/html.tmLanguage2.js +0 -107
- package/dist/html.worker.js +0 -6
- package/dist/index.js +0 -2207
- package/dist/index2.js +0 -1398
- package/dist/inline-styles.js +0 -104
- package/dist/inline-template.js +0 -88
- package/dist/jade.js +0 -11
- package/dist/java-java.js +0 -125
- package/dist/java-properties.js +0 -73
- package/dist/java.js +0 -98
- package/dist/java.tmLanguage.js +0 -1863
- package/dist/java2.js +0 -917
- package/dist/javascript-javascript.code-snippets.js +0 -205
- package/dist/javascript.js +0 -197
- package/dist/javascriptreact.js +0 -197
- package/dist/jsdoc.js.injection.tmLanguage.js +0 -32
- package/dist/jsdoc.ts.injection.tmLanguage.js +0 -32
- package/dist/json.js +0 -75
- package/dist/json.worker.js +0 -6
- package/dist/jsonc.js +0 -75
- package/dist/jsx-tags.js +0 -158
- package/dist/julia.js +0 -89
- package/dist/julia.tmLanguage.js +0 -954
- package/dist/jvm-bytecode-verbose.js +0 -1231
- package/dist/jvm-bytecode.js +0 -565
- package/dist/kotlin-kotlin.js +0 -117
- package/dist/kotlin.js +0 -103
- package/dist/kotlinscript.js +0 -103
- package/dist/languages/extensions/extensionConfigurationLoader.d.ts +0 -3
- package/dist/languages/extensions/grammarLoader.d.ts +0 -2
- package/dist/languages/extensions/languageConfigurationLoader.d.ts +0 -2
- package/dist/languages/extensions/snippetLoader.d.ts +0 -2
- package/dist/languages/extensions/themeLoader.d.ts +0 -2
- package/dist/languages/textMate/index.d.ts +0 -1
- package/dist/literate haskell.js +0 -88
- package/dist/literateHaskell.tmLanguage.js +0 -70
- package/dist/lua.js +0 -84
- package/dist/lua.tmLanguage.js +0 -914
- package/dist/lua2.js +0 -2853
- package/dist/markdown-basics-markdown.code-snippets.js +0 -121
- package/dist/markdown-svelte-css.js +0 -37
- package/dist/markdown-svelte-js.js +0 -37
- package/dist/markdown-svelte.js +0 -59
- package/dist/markdown-vue.js +0 -54
- package/dist/markdown.js +0 -49
- package/dist/markdown.tmLanguage.js +0 -3042
- package/dist/menhir-action.js +0 -51
- package/dist/menhir.js +0 -597
- package/dist/merlin.js +0 -111
- package/dist/namespace.r.js +0 -88
- package/dist/oasis.js +0 -99
- package/dist/objective-c.js +0 -79
- package/dist/objective-c.tmLanguage.js +0 -3763
- package/dist/objective-cpp.js +0 -79
- package/dist/ocaml-dune-project.js +0 -38
- package/dist/ocaml-dune.js +0 -53
- package/dist/ocaml-markdown-codeblock.js +0 -42
- package/dist/ocaml-ocaml.js +0 -88
- package/dist/ocaml-ocamllex.js +0 -12
- package/dist/ocaml.META.js +0 -29
- package/dist/ocaml.interface.js +0 -292
- package/dist/ocaml.interface2.js +0 -114
- package/dist/ocaml.js +0 -903
- package/dist/ocaml.menhir.js +0 -81
- package/dist/ocaml.oasis.js +0 -18
- package/dist/ocaml.ocamlbuild.js +0 -45
- package/dist/ocaml.ocamlformat.js +0 -8
- package/dist/ocaml.ocamllex.js +0 -60
- package/dist/ocaml.opam-install.js +0 -49
- package/dist/ocaml.opam.js +0 -69
- package/dist/ocaml2.js +0 -114
- package/dist/ocaml3.js +0 -136
- package/dist/ocamlbuild.js +0 -189
- package/dist/ocamldoc.js +0 -54
- package/dist/ocamlformat.js +0 -206
- package/dist/ocamllex.js +0 -133
- package/dist/omnisharp-csharp.js +0 -508
- package/dist/omnisharp.js +0 -594
- package/dist/opam-install.js +0 -40
- package/dist/opam.js +0 -140
- package/dist/pascal-pascal.js +0 -382
- package/dist/pascal.js +0 -80
- package/dist/pascal.tmLanguage.js +0 -169
- package/dist/pascal2.js +0 -26
- package/dist/perl.js +0 -93
- package/dist/perl.tmLanguage.js +0 -2986
- package/dist/perl6.js +0 -86
- package/dist/perl6.tmLanguage.js +0 -323
- package/dist/pgsql.tmLanguage.js +0 -284
- package/dist/php-php.code-snippets.js +0 -267
- package/dist/php.js +0 -154
- package/dist/php.tmLanguage.js +0 -4036
- package/dist/pip-requirements.js +0 -8
- package/dist/pip-requirements.tmLanguage.js +0 -89
- package/dist/plaintext.js +0 -11
- package/dist/platform.tmLanguage.js +0 -1135
- package/dist/postcss.src.yaml.js +0 -393
- package/dist/postgres.js +0 -80
- package/dist/postgresql.js +0 -75
- package/dist/powershell.js +0 -107
- package/dist/powershell.tmLanguage.js +0 -1037
- package/dist/pug-svelte-dotblock.js +0 -69
- package/dist/pug-svelte-tags.js +0 -215
- package/dist/pug-svelte.js +0 -307
- package/dist/python.js +0 -236
- package/dist/r.js +0 -664
- package/dist/r2.js +0 -88
- package/dist/rbuildignore.js +0 -39
- package/dist/rd.js +0 -81
- package/dist/reason-markdown-codeblock.js +0 -42
- package/dist/reason.js +0 -79
- package/dist/rmd.js +0 -84
- package/dist/rnamespace.js +0 -283
- package/dist/ruby.js +0 -95
- package/dist/ruby.tmLanguage.js +0 -2784
- package/dist/rust.js +0 -84
- package/dist/rust.tmLanguage.js +0 -1178
- package/dist/sassdoc.tmLanguage.js +0 -362
- package/dist/scala.js +0 -85
- package/dist/scalameta.js +0 -224
- package/dist/scss.js +0 -117
- package/dist/scss.tmLanguage.js +0 -1887
- package/dist/sdl.js +0 -162
- package/dist/sdl2.js +0 -90
- package/dist/semanticdb.js +0 -62
- package/dist/shell-unix-bash.tmLanguage.js +0 -2038
- package/dist/shellscript.js +0 -93
- package/dist/solargraph.js +0 -192
- package/dist/solidity-solidity.js +0 -213
- package/dist/solidity.js +0 -1224
- package/dist/solidity2.js +0 -71
- package/dist/solidity3.js +0 -143
- package/dist/sql.js +0 -99
- package/dist/sql.tmLanguage.js +0 -636
- package/dist/svelte.js +0 -120
- package/dist/svelte.svelte-vscode-javascript.js +0 -45
- package/dist/svelte.svelte-vscode-svelte.js +0 -46
- package/dist/svelte.svelte-vscode-typescript.js +0 -43
- package/dist/svelte.svelte-vscode.js +0 -383
- package/dist/svelte.tmLanguage.src.yaml.js +0 -1099
- package/dist/svlangserver-systemverilog.js +0 -395
- package/dist/svlangserver.js +0 -85
- package/dist/swift-swift.code-snippets.js +0 -183
- package/dist/swift.js +0 -90
- package/dist/swift.tmLanguage.js +0 -3312
- package/dist/systemverilog.js +0 -187
- package/dist/systemverilog.tmLanguage.js +0 -1259
- package/dist/tasty.js +0 -72
- package/dist/tcl-tcl.js +0 -151
- package/dist/tcl.js +0 -78
- package/dist/tcl.tmlanguage.yaml.js +0 -5490
- package/dist/template.js +0 -207
- package/dist/theme-defaults~dark_plus.js +0 -210
- package/dist/theme-defaults~dark_plus_experimental.js +0 -145
- package/dist/theme-defaults~dark_vs.js +0 -412
- package/dist/theme-defaults~hc_black.js +0 -471
- package/dist/theme-defaults~hc_light.js +0 -595
- package/dist/theme-defaults~light_plus.js +0 -212
- package/dist/theme-defaults~light_plus_experimental.js +0 -158
- package/dist/theme-defaults~light_vs.js +0 -441
- package/dist/ts.worker.js +0 -6
- package/dist/typescript-basics-typescript.code-snippets.js +0 -313
- package/dist/typescript-language-features.js +0 -1103
- package/dist/typescript.js +0 -216
- package/dist/typescriptreact.js +0 -216
- package/dist/vb-vb.code-snippets.js +0 -88
- package/dist/vb.js +0 -79
- package/dist/verilog.js +0 -187
- package/dist/volar-vue.js +0 -289
- package/dist/vscode-R-r-snippets.js +0 -534
- package/dist/vscode-R-rmarkdown.js +0 -461
- package/dist/vscode-R.js +0 -660
- package/dist/vscode-django-filters.js +0 -340
- package/dist/vscode-django.js +0 -37
- package/dist/vscode-go-go.js +0 -276
- package/dist/vscode-go.js +0 -1610
- package/dist/vscode-groovy.js +0 -28
- package/dist/vscode-python.js +0 -706
- package/dist/vue-directives.js +0 -25
- package/dist/vue-interpolations.js +0 -25
- package/dist/vue-sfc-style-variable-injection.js +0 -63
- package/dist/vue.js +0 -151
- package/dist/vue.tmLanguage.js +0 -1218
- package/dist/xml.js +0 -116
- package/dist/xml.tmLanguage.js +0 -395
- package/dist/xsl.js +0 -39
- package/dist/xsl.tmLanguage.js +0 -102
- package/dist/yaml.js +0 -82
- package/dist/yaml.tmLanguage.js +0 -629
- /package/dist/{extensions → editor}/autofold.d.ts +0 -0
- /package/dist/{extensions → editor}/cobol.d.ts +0 -0
- /package/dist/{extensions → editor}/index.d.ts +0 -0
- /package/dist/{languages/snippets/index.d.ts → features/debug.d.ts} +0 -0
- /package/dist/{languages/textMate/semanticTokens.d.ts → features/extensionHostWorker.d.ts} +0 -0
package/dist/json.worker.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { c as createBase64WorkerFactory } from './worker.js';
|
|
2
|
-
|
|
3
|
-
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y29uc3QgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24oZSl7c2V0VGltZW91dCgoKCk9PntpZihlLnN0YWNrKXtpZihvLmlzRXJyb3JOb1RlbGVtZXRyeShlKSl0aHJvdyBuZXcgbyhlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spO3Rocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spfXRocm93IGV9KSwwKX19ZW1pdChlKXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKCh0PT57dChlKX0pKX1vblVuZXhwZWN0ZWRFcnJvcihlKXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSksdGhpcy5lbWl0KGUpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpfX07ZnVuY3Rpb24gdCh0KXsoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGkpcmV0dXJuITA7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09ciYmZS5tZXNzYWdlPT09cn0pKHQpfHxlLm9uVW5leHBlY3RlZEVycm9yKHQpfWZ1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOmUuc3RhY2t0cmFjZXx8ZS5zdGFjayxub1RlbGVtZXRyeTpvLmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3Qgcj0iQ2FuY2VsZWQiO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHIpLHRoaXMubmFtZT10aGlzLm1lc3NhZ2V9fWNsYXNzIG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9IkVycm9yTm9UZWxlbWV0cnkifXN0YXRpYyBmcm9tRXJyb3IoZSl7aWYoZSBpbnN0YW5jZW9mIG8pcmV0dXJuIGU7Y29uc3QgdD1uZXcgbztyZXR1cm4gdC5tZXNzYWdlPWUubWVzc2FnZSx0LnN0YWNrPWUuc3RhY2ssdH1zdGF0aWMgaXNFcnJvck5vVGVsZW1ldHJ5KGUpe3JldHVybiJFcnJvck5vVGVsZW1ldHJ5Ij09PWUubmFtZX19ZnVuY3Rpb24gYShlKXtjb25zdCB0PXRoaXM7bGV0IG4scj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcnx8KHI9ITAsbj1lLmFwcGx5KHQsYXJndW1lbnRzKSksbn19dmFyIHM7IWZ1bmN0aW9uKGUpe2UuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbU3ltYm9sLml0ZXJhdG9yXX07Y29uc3QgdD1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbiBuKHQsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe2NvbnN0IHI9W107aWYoMD09PW4pcmV0dXJuW3IsdF07Y29uc3QgaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IobGV0IHQ9MDt0PG47dCsrKXtjb25zdCB0PWkubmV4dCgpO2lmKHQuZG9uZSlyZXR1cm5bcixlLmVtcHR5KCldO3IucHVzaCh0LnZhbHVlKX1yZXR1cm5bcix7W1N5bWJvbC5pdGVyYXRvcl06KCk9Pml9XX1lLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUuc2luZ2xlPWZ1bmN0aW9uKihlKXt5aWVsZCBlfSxlLmZyb209ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fHR9LGUuaXNFbXB0eT1mdW5jdGlvbihlKXtyZXR1cm4hZXx8ITA9PT1lW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkuZG9uZX0sZS5maXJzdD1mdW5jdGlvbihlKXtyZXR1cm4gZVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLnZhbHVlfSxlLnNvbWU9ZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiBlKWlmKHQobikpcmV0dXJuITA7cmV0dXJuITF9LGUuZmluZD1mdW5jdGlvbihlLHQpe2Zvcihjb25zdCBuIG9mIGUpaWYodChuKSlyZXR1cm4gbn0sZS5maWx0ZXI9ZnVuY3Rpb24qKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSl0KG4pJiYoeWllbGQgbil9LGUubWFwPWZ1bmN0aW9uKihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl5aWVsZCB0KHIsbisrKX0sZS5jb25jYXQ9ZnVuY3Rpb24qKC4uLmUpe2Zvcihjb25zdCB0IG9mIGUpZm9yKGNvbnN0IGUgb2YgdCl5aWVsZCBlfSxlLmNvbmNhdE5lc3RlZD1mdW5jdGlvbiooZSl7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgZSBvZiB0KXlpZWxkIGV9LGUucmVkdWNlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1uO2Zvcihjb25zdCBuIG9mIGUpcj10KHIsbik7cmV0dXJuIHJ9LGUuZm9yRWFjaD1mdW5jdGlvbihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl0KHIsbisrKX0sZS5zbGljZT1mdW5jdGlvbiooZSx0LG49ZS5sZW5ndGgpe2Zvcih0PDAmJih0Kz1lLmxlbmd0aCksbjwwP24rPWUubGVuZ3RoOm4+ZS5sZW5ndGgmJihuPWUubGVuZ3RoKTt0PG47dCsrKXlpZWxkIGVbdF19LGUuY29uc3VtZT1uLGUuY29sbGVjdD1mdW5jdGlvbihlKXtyZXR1cm4gbihlKVswXX0sZS5lcXVhbHM9ZnVuY3Rpb24oZSx0LG49KChlLHQpPT5lPT09dCkpe2NvbnN0IHI9ZVtTeW1ib2wuaXRlcmF0b3JdKCksaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOzspe2NvbnN0IGU9ci5uZXh0KCksdD1pLm5leHQoKTtpZihlLmRvbmUhPT10LmRvbmUpcmV0dXJuITE7aWYoZS5kb25lKXJldHVybiEwO2lmKCFuKGUudmFsdWUsdC52YWx1ZSkpcmV0dXJuITF9fX0oc3x8KHM9e30pKTtjbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUuIEVycm9yczogWyR7ZS5qb2luKCIsICIpfV1gKSx0aGlzLmVycm9ycz1lfX1mdW5jdGlvbiBsKGUpe2lmKHMuaXMoZSkpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSlpZihuKXRyeXtuLmRpc3Bvc2UoKX1jYXRjaChlKXt0LnB1c2goZSl9aWYoMT09PXQubGVuZ3RoKXRocm93IHRbMF07aWYodC5sZW5ndGg+MSl0aHJvdyBuZXcgYyh0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bXTplfWlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gdShlKXtyZXR1cm57ZGlzcG9zZTphKCgoKT0+e2UoKX0pKX19Y2xhc3MgaHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvRGlzcG9zZT1uZXcgU2V0LHRoaXMuX2lzRGlzcG9zZWQ9ITF9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9pc0Rpc3Bvc2VkPSEwLHRoaXMuY2xlYXIoKSl9Z2V0IGlzRGlzcG9zZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZH1jbGVhcigpe3RyeXtsKHRoaXMuX3RvRGlzcG9zZS52YWx1ZXMoKSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKGUpe2lmKCFlKXJldHVybiBlO2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/aC5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkd8fGNvbnNvbGUud2FybihuZXcgRXJyb3IoIlRyeWluZyB0byBhZGQgYSBkaXNwb3NhYmxlIHRvIGEgRGlzcG9zYWJsZVN0b3JlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi4gVGhlIGFkZGVkIG9iamVjdCB3aWxsIGJlIGxlYWtlZCEiKS5zdGFjayk6dGhpcy5fdG9EaXNwb3NlLmFkZChlKSxlfX1oLkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyBme2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RvcmU9bmV3IGgsdGhpcy5fc3RvcmV9ZGlzcG9zZSgpe3RoaXMuX3N0b3JlLmRpc3Bvc2UoKX1fcmVnaXN0ZXIoZSl7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5fc3RvcmUuYWRkKGUpfX1mLk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtjbGFzcyBke2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwb3NlPSgpPT57fSx0aGlzLnVuc2V0PSgpPT57fSx0aGlzLmlzc2V0PSgpPT4hMX1zZXQoZSl7bGV0IHQ9ZTtyZXR1cm4gdGhpcy51bnNldD0oKT0+dD12b2lkIDAsdGhpcy5pc3NldD0oKT0+dm9pZCAwIT09dCx0aGlzLmRpc3Bvc2U9KCk9Pnt0JiYodCgpLHQ9dm9pZCAwKX0sdGhpc319Y2xhc3MgbXtjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm5leHQ9bS5VbmRlZmluZWQsdGhpcy5wcmV2PW0uVW5kZWZpbmVkfX1tLlVuZGVmaW5lZD1uZXcgbSh2b2lkIDApO2NsYXNzIGd7Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1tLlVuZGVmaW5lZCx0aGlzLl9sYXN0PW0uVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1tLlVuZGVmaW5lZH1jbGVhcigpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl7Y29uc3QgdD1lLm5leHQ7ZS5wcmV2PW0uVW5kZWZpbmVkLGUubmV4dD1tLlVuZGVmaW5lZCxlPXR9dGhpcy5fZmlyc3Q9bS5VbmRlZmluZWQsdGhpcy5fbGFzdD1tLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdChlKXtyZXR1cm4gdGhpcy5faW5zZXJ0KGUsITEpfXB1c2goZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCEwKX1faW5zZXJ0KGUsdCl7Y29uc3Qgbj1uZXcgbShlKTtpZih0aGlzLl9maXJzdD09PW0uVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PW4sdGhpcy5fbGFzdD1uO2Vsc2UgaWYodCl7Y29uc3QgZT10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9bixuLnByZXY9ZSxlLm5leHQ9bn1lbHNle2NvbnN0IGU9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9bixuLm5leHQ9ZSxlLnByZXY9bn10aGlzLl9zaXplKz0xO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5fcmVtb3ZlKG4pKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksZX19cG9wKCl7aWYodGhpcy5fbGFzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLGV9fV9yZW1vdmUoZSl7aWYoZS5wcmV2IT09bS5VbmRlZmluZWQmJmUubmV4dCE9PW0uVW5kZWZpbmVkKXtjb25zdCB0PWUucHJldjt0Lm5leHQ9ZS5uZXh0LGUubmV4dC5wcmV2PXR9ZWxzZSBlLnByZXY9PT1tLlVuZGVmaW5lZCYmZS5uZXh0PT09bS5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PW0uVW5kZWZpbmVkLHRoaXMuX2xhc3Q9bS5VbmRlZmluZWQpOmUubmV4dD09PW0uVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9bS5VbmRlZmluZWQpOmUucHJldj09PW0uVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PW0uVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl5aWVsZCBlLmVsZW1lbnQsZT1lLm5leHR9fWxldCBwPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmxvY2F0aW9uJiZkb2N1bWVudC5sb2NhdGlvbi5oYXNoLmluZGV4T2YoInBzZXVkbz10cnVlIik+PTA7dmFyIGI7Y29uc3Qgdj0iZW4iO2xldCB5LEMsdyxfPSExLFM9ITEsQT0hMSxFPSExLHg9djtjb25zdCBOPSJvYmplY3QiPT10eXBlb2Ygc2VsZj9zZWxmOiJvYmplY3QiPT10eXBlb2YgZ2xvYmFsP2dsb2JhbDp7fTtsZXQgazt2b2lkIDAhPT1OLnZzY29kZSYmdm9pZCAwIT09Ti52c2NvZGUucHJvY2Vzcz9rPU4udnNjb2RlLnByb2Nlc3M6InVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzJiYoaz1wcm9jZXNzKTtjb25zdCBMPSJzdHJpbmciPT10eXBlb2YobnVsbD09PShiPW51bGw9PWs/dm9pZCAwOmsudmVyc2lvbnMpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLmVsZWN0cm9uKSYmInJlbmRlcmVyIj09PShudWxsPT1rP3ZvaWQgMDprLnR5cGUpO2lmKCJvYmplY3QiIT10eXBlb2YgbmF2aWdhdG9yfHxMKWlmKCJvYmplY3QiPT10eXBlb2Ygayl7Xz0id2luMzIiPT09ay5wbGF0Zm9ybSxTPSJkYXJ3aW4iPT09ay5wbGF0Zm9ybSxBPSJsaW51eCI9PT1rLnBsYXRmb3JtLEEmJmsuZW52LlNOQVAmJmsuZW52LlNOQVBfUkVWSVNJT04say5lbnYuQ0l8fGsuZW52LkJVSUxEX0FSVElGQUNUU1RBR0lOR0RJUkVDVE9SWSx5PXYseD12O2NvbnN0IGU9ay5lbnYuVlNDT0RFX05MU19DT05GSUc7aWYoZSl0cnl7Y29uc3QgdD1KU09OLnBhcnNlKGUpLG49dC5hdmFpbGFibGVMYW5ndWFnZXNbIioiXTt5PXQubG9jYWxlLHg9bnx8dixDPXQuX3RyYW5zbGF0aW9uc0NvbmZpZ0ZpbGV9Y2F0Y2goZSl7fX1lbHNlIGNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2Vsc2Ugdz1uYXZpZ2F0b3IudXNlckFnZW50LF89dy5pbmRleE9mKCJXaW5kb3dzIik+PTAsUz13LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wLCh3LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wfHx3LmluZGV4T2YoImlQYWQiKT49MHx8dy5pbmRleE9mKCJpUGhvbmUiKT49MCkmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzLEE9dy5pbmRleE9mKCJMaW51eCIpPj0wLEU9ITAsZnVuY3Rpb24oZSx0LC4uLm4peyFmdW5jdGlvbihlLHQpe2xldCBuO249MD09PXQubGVuZ3RoP2U6ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoKGUsbik9Pntjb25zdCByPW5bMF0saT10W3JdO2xldCBvPWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBpP289aToibnVtYmVyIiE9dHlwZW9mIGkmJiJib29sZWFuIiE9dHlwZW9mIGkmJm51bGwhPWl8fChvPVN0cmluZyhpKSksb30pKSxwJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKX0odCxuKX0oMCwiXyIpLHk9dix4PXk7Y29uc3QgVD1fLE89UztFJiZOLmltcG9ydFNjcmlwdHM7Y29uc3QgST13LE09ImZ1bmN0aW9uIj09dHlwZW9mIE4ucG9zdE1lc3NhZ2UmJiFOLmltcG9ydFNjcmlwdHM7KCgpPT57aWYoTSl7Y29uc3QgZT1bXTtOLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh0PT57aWYodC5kYXRhJiZ0LmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspZm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXtjb25zdCByPWVbbl07aWYoci5pZD09PXQuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylyZXR1cm4gZS5zcGxpY2UobiwxKSx2b2lkIHIuY2FsbGJhY2soKX19KSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IHI9Kyt0O2UucHVzaCh7aWQ6cixjYWxsYmFjazpufSksTi5wb3N0TWVzc2FnZSh7dnNjb2RlU2NoZWR1bGVBc3luY1dvcms6cn0sIioiKX19fSkoKTtjb25zdCBQPSEhKEkmJkkuaW5kZXhPZigiQ2hyb21lIik+PTApO0kmJkkuaW5kZXhPZigiRmlyZWZveCIpLCFQJiZJJiZJLmluZGV4T2YoIlNhZmFyaSIpLEkmJkkuaW5kZXhPZigiRWRnLyIpLEkmJkkuaW5kZXhPZigiQW5kcm9pZCIpO2NvbnN0IFI9Ti5wZXJmb3JtYW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIE4ucGVyZm9ybWFuY2Uubm93O2NsYXNzIFZ7Y29uc3RydWN0b3IoZSl7dGhpcy5faGlnaFJlc29sdXRpb249UiYmZSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RhdGljIGNyZWF0ZShlPSEwKXtyZXR1cm4gbmV3IFYoZSl9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfWVsYXBzZWQoKXtyZXR1cm4tMSE9PXRoaXMuX3N0b3BUaW1lP3RoaXMuX3N0b3BUaW1lLXRoaXMuX3N0YXJ0VGltZTp0aGlzLl9ub3coKS10aGlzLl9zdGFydFRpbWV9X25vdygpe3JldHVybiB0aGlzLl9oaWdoUmVzb2x1dGlvbj9OLnBlcmZvcm1hbmNlLm5vdygpOkRhdGUubm93KCl9fXZhciBGLEQ7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQsbj1udWxsLHIpPT57bGV0IGksbz0hMTtyZXR1cm4gaT1lKChlPT57aWYoIW8pcmV0dXJuIGk/aS5kaXNwb3NlKCk6bz0hMCx0LmNhbGwobixlKX0pLG51bGwsciksbyYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+bi5jYWxsKHIsdChlKSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBhKCgobixyPW51bGwsaSk9PmUoKGU9Pnt0KGUpLG4uY2FsbChyLGUpfSksbnVsbCxpKSksbil9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+dChlKSYmbi5jYWxsKHIsZSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIG8oZSx0LHIsaSl7bGV0IG89cjtyZXR1cm4gbihlLChlPT4obz10KG8sZSksbykpLGkpfWZ1bmN0aW9uIGEoZSx0KXtsZXQgbjtjb25zdCByPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtuPWUoci5maXJlLHIpfSxvbkxhc3RMaXN0ZW5lclJlbW92ZSgpe251bGw9PW58fG4uZGlzcG9zZSgpfX0pO3JldHVybiBudWxsPT10fHx0LmFkZChyKSxyLmV2ZW50fWZ1bmN0aW9uIHMoZSx0LG49MTAwLHI9ITEsaSxvKXtsZXQgYSxzLGMsbD0wO2NvbnN0IHU9bmV3IEIoe2xlYWtXYXJuaW5nVGhyZXNob2xkOmksb25GaXJzdExpc3RlbmVyQWRkKCl7YT1lKChlPT57bCsrLHM9dChzLGUpLHImJiFjJiYodS5maXJlKHMpLHM9dm9pZCAwKSxjbGVhclRpbWVvdXQoYyksYz1zZXRUaW1lb3V0KCgoKT0+e2NvbnN0IGU9cztzPXZvaWQgMCxjPXZvaWQgMCwoIXJ8fGw+MSkmJnUuZmlyZShlKSxsPTB9KSxuKX0pKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXthLmRpc3Bvc2UoKX19KTtyZXR1cm4gbnVsbD09b3x8by5hZGQodSksdS5ldmVudH1mdW5jdGlvbiBjKGUsdD0oKGUsdCk9PmU9PT10KSxuKXtsZXQgcixvPSEwO3JldHVybiBpKGUsKGU9Pntjb25zdCBuPW98fCF0KGUscik7cmV0dXJuIG89ITEscj1lLG59KSxuKX1lLk5vbmU9KCk9PmYuTm9uZSxlLm9uY2U9dCxlLm1hcD1uLGUuZm9yRWFjaD1yLGUuZmlsdGVyPWksZS5zaWduYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuYW55PWZ1bmN0aW9uKC4uLmUpe3JldHVybih0LG49bnVsbCxyKT0+ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIHUoKCgpPT5sKGUpKSl9KC4uLmUubWFwKChlPT5lKChlPT50LmNhbGwobixlKSksbnVsbCxyKSkpKX0sZS5yZWR1Y2U9byxlLmRlYm91bmNlPXMsZS5sYXRjaD1jLGUuc3BsaXQ9ZnVuY3Rpb24odCxuLHIpe3JldHVybltlLmZpbHRlcih0LG4sciksZS5maWx0ZXIodCwoZT0+IW4oZSkpLHIpXX0sZS5idWZmZXI9ZnVuY3Rpb24oZSx0PSExLG49W10pe2xldCByPW4uc2xpY2UoKSxpPWUoKGU9PntyP3IucHVzaChlKTphLmZpcmUoZSl9KSk7Y29uc3Qgbz0oKT0+e251bGw9PXJ8fHIuZm9yRWFjaCgoZT0+YS5maXJlKGUpKSkscj1udWxsfSxhPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtpfHwoaT1lKChlPT5hLmZpcmUoZSkpKSl9LG9uRmlyc3RMaXN0ZW5lckRpZEFkZCgpe3ImJih0P3NldFRpbWVvdXQobyk6bygpKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXtpJiZpLmRpc3Bvc2UoKSxpPW51bGx9fSk7cmV0dXJuIGEuZXZlbnR9O2NsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5ldmVudD1lLHRoaXMuZGlzcG9zYWJsZXM9bmV3IGh9bWFwKGUpe3JldHVybiBuZXcgZChuKHRoaXMuZXZlbnQsZSx0aGlzLmRpc3Bvc2FibGVzKSl9Zm9yRWFjaChlKXtyZXR1cm4gbmV3IGQocih0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfWZpbHRlcihlKXtyZXR1cm4gbmV3IGQoaSh0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfXJlZHVjZShlLHQpe3JldHVybiBuZXcgZChvKHRoaXMuZXZlbnQsZSx0LHRoaXMuZGlzcG9zYWJsZXMpKX1sYXRjaCgpe3JldHVybiBuZXcgZChjKHRoaXMuZXZlbnQsdm9pZCAwLHRoaXMuZGlzcG9zYWJsZXMpKX1kZWJvdW5jZShlLHQ9MTAwLG49ITEscil7cmV0dXJuIG5ldyBkKHModGhpcy5ldmVudCxlLHQsbixyLHRoaXMuZGlzcG9zYWJsZXMpKX1vbihlLHQsbil7cmV0dXJuIHRoaXMuZXZlbnQoZSx0LG4pfW9uY2UoZSxuLHIpe3JldHVybiB0KHRoaXMuZXZlbnQpKGUsbixyKX1kaXNwb3NlKCl7dGhpcy5kaXNwb3NhYmxlcy5kaXNwb3NlKCl9fWUuY2hhaW49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkKGUpfSxlLmZyb21Ob2RlRXZlbnRFbWl0dGVyPWZ1bmN0aW9uKGUsdCxuPShlPT5lKSl7Y29uc3Qgcj0oLi4uZSk9PmkuZmlyZShuKC4uLmUpKSxpPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQ6KCk9PmUub24odCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVMaXN0ZW5lcih0LHIpfSk7cmV0dXJuIGkuZXZlbnR9LGUuZnJvbURPTUV2ZW50RW1pdHRlcj1mdW5jdGlvbihlLHQsbj0oZT0+ZSkpe2NvbnN0IHI9KC4uLmUpPT5pLmZpcmUobiguLi5lKSksaT1uZXcgQih7b25GaXJzdExpc3RlbmVyQWRkOigpPT5lLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQscil9KTtyZXR1cm4gaS5ldmVudH0sZS50b1Byb21pc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChuPT50KGUpKG4pKSl9LGUucnVuQW5kU3Vic2NyaWJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQodm9pZCAwKSxlKChlPT50KGUpKSl9LGUucnVuQW5kU3Vic2NyaWJlV2l0aFN0b3JlPWZ1bmN0aW9uKGUsdCl7bGV0IG49bnVsbDtmdW5jdGlvbiByKGUpe251bGw9PW58fG4uZGlzcG9zZSgpLG49bmV3IGgsdChlLG4pfXIodm9pZCAwKTtjb25zdCBpPWUoKGU9PnIoZSkpKTtyZXR1cm4gdSgoKCk9PntpLmRpc3Bvc2UoKSxudWxsPT1ufHxuLmRpc3Bvc2UoKX0pKX07Y2xhc3MgbXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMub2JzPWUsdGhpcy5fY291bnRlcj0wLHRoaXMuX2hhc0NoYW5nZWQ9ITE7Y29uc3Qgbj17b25GaXJzdExpc3RlbmVyQWRkOigpPT57ZS5hZGRPYnNlcnZlcih0aGlzKX0sb25MYXN0TGlzdGVuZXJSZW1vdmU6KCk9PntlLnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyBCKG4pLHQmJnQuYWRkKHRoaXMuZW1pdHRlcil9YmVnaW5VcGRhdGUoZSl7dGhpcy5fY291bnRlcisrfWhhbmRsZUNoYW5nZShlLHQpe3RoaXMuX2hhc0NoYW5nZWQ9ITB9ZW5kVXBkYXRlKGUpezA9PS0tdGhpcy5fY291bnRlciYmdGhpcy5faGFzQ2hhbmdlZCYmKHRoaXMuX2hhc0NoYW5nZWQ9ITEsdGhpcy5lbWl0dGVyLmZpcmUodGhpcy5vYnMuZ2V0KCkpKX19ZS5mcm9tT2JzZXJ2YWJsZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbShlLHQpLmVtaXR0ZXIuZXZlbnR9fShGfHwoRj17fSkpO2NsYXNzIEt7Y29uc3RydWN0b3IoZSl7dGhpcy5fbGlzdGVuZXJDb3VudD0wLHRoaXMuX2ludm9jYXRpb25Db3VudD0wLHRoaXMuX2VsYXBzZWRPdmVyYWxsPTAsdGhpcy5fbmFtZT1gJHtlfV8ke0suX2lkUG9vbCsrfWB9c3RhcnQoZSl7dGhpcy5fc3RvcFdhdGNoPW5ldyBWKCEwKSx0aGlzLl9saXN0ZW5lckNvdW50PWV9c3RvcCgpe2lmKHRoaXMuX3N0b3BXYXRjaCl7Y29uc3QgZT10aGlzLl9zdG9wV2F0Y2guZWxhcHNlZCgpO3RoaXMuX2VsYXBzZWRPdmVyYWxsKz1lLHRoaXMuX2ludm9jYXRpb25Db3VudCs9MSxjb25zb2xlLmluZm8oYGRpZCBGSVJFICR7dGhpcy5fbmFtZX06IGVsYXBzZWRfbXM6ICR7ZS50b0ZpeGVkKDUpfSwgbGlzdGVuZXI6ICR7dGhpcy5fbGlzdGVuZXJDb3VudH0gKGVsYXBzZWRfb3ZlcmFsbDogJHt0aGlzLl9lbGFwc2VkT3ZlcmFsbC50b0ZpeGVkKDIpfSwgaW52b2NhdGlvbnM6ICR7dGhpcy5faW52b2NhdGlvbkNvdW50fSlgKSx0aGlzLl9zdG9wV2F0Y2g9dm9pZCAwfX19Sy5faWRQb29sPTA7Y2xhc3Mgantjb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlPWV9c3RhdGljIGNyZWF0ZSgpe3ZhciBlO3JldHVybiBuZXcgaihudWxsIT09KGU9KG5ldyBFcnJvcikuc3RhY2spJiZ2b2lkIDAhPT1lP2U6IiIpfXByaW50KCl7Y29uc29sZS53YXJuKHRoaXMudmFsdWUuc3BsaXQoIlxuIikuc2xpY2UoMikuam9pbigiXG4iKSl9fWNsYXNzIFV7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuY2FsbGJhY2s9ZSx0aGlzLmNhbGxiYWNrVGhpcz10LHRoaXMuc3RhY2s9bix0aGlzLnN1YnNjcmlwdGlvbj1uZXcgZH1pbnZva2UoZSl7dGhpcy5jYWxsYmFjay5jYWxsKHRoaXMuY2FsbGJhY2tUaGlzLGUpfX1jbGFzcyBCe2NvbnN0cnVjdG9yKGUpe3ZhciB0LG47dGhpcy5fZGlzcG9zZWQ9ITEsdGhpcy5fb3B0aW9ucz1lLHRoaXMuX2xlYWthZ2VNb249dm9pZCAwLHRoaXMuX3BlcmZNb249KG51bGw9PT0odD10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09dD92b2lkIDA6dC5fcHJvZk5hbWUpP25ldyBLKHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT1udWxsPT09KG49dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dmFyIGUsdCxuLHI7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCx0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVycy5jbGVhcigpLG51bGw9PT0oZT10aGlzLl9kZWxpdmVyeVF1ZXVlKXx8dm9pZCAwPT09ZXx8ZS5jbGVhcih0aGlzKSxudWxsPT09KG49bnVsbD09PSh0PXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm9uTGFzdExpc3RlbmVyUmVtb3ZlKXx8dm9pZCAwPT09bnx8bi5jYWxsKHQpLG51bGw9PT0ocj10aGlzLl9sZWFrYWdlTW9uKXx8dm9pZCAwPT09cnx8ci5kaXNwb3NlKCkpfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PShlLHQsbik9Pnt2YXIgcixpLG87dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBnKTtjb25zdCBhPXRoaXMuX2xpc3RlbmVycy5pc0VtcHR5KCk7bGV0IHMsYzthJiYobnVsbD09PShyPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm9uRmlyc3RMaXN0ZW5lckFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkKHRoaXMpLHRoaXMuX2xlYWthZ2VNb24mJnRoaXMuX2xpc3RlbmVycy5zaXplPj0zMCYmKGM9ai5jcmVhdGUoKSxzPXRoaXMuX2xlYWthZ2VNb24uY2hlY2soYyx0aGlzLl9saXN0ZW5lcnMuc2l6ZSsxKSk7Y29uc3QgbD1uZXcgVShlLHQsYyksdT10aGlzLl9saXN0ZW5lcnMucHVzaChsKTthJiYobnVsbD09PShpPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLm9uRmlyc3RMaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyRGlkQWRkKHRoaXMpLChudWxsPT09KG89dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ub25MaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25MaXN0ZW5lckRpZEFkZCh0aGlzLGUsdCk7Y29uc3QgZj1sLnN1YnNjcmlwdGlvbi5zZXQoKCgpPT57aWYobnVsbD09c3x8cygpLCF0aGlzLl9kaXNwb3NlZCYmKHUoKSx0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlKSl7dGhpcy5fbGlzdGVuZXJzJiYhdGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKXx8dGhpcy5fb3B0aW9ucy5vbkxhc3RMaXN0ZW5lclJlbW92ZSh0aGlzKX19KSk7cmV0dXJuIG4gaW5zdGFuY2VvZiBoP24uYWRkKGYpOkFycmF5LmlzQXJyYXkobikmJm4ucHVzaChmKSxmfSksdGhpcy5fZXZlbnR9ZmlyZShlKXt2YXIgdCxuO2lmKHRoaXMuX2xpc3RlbmVycyl7dGhpcy5fZGVsaXZlcnlRdWV1ZXx8KHRoaXMuX2RlbGl2ZXJ5UXVldWU9bmV3ICQpO2Zvcihjb25zdCB0IG9mIHRoaXMuX2xpc3RlbmVycyl0aGlzLl9kZWxpdmVyeVF1ZXVlLnB1c2godGhpcyx0LGUpO251bGw9PT0odD10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09dHx8dC5zdGFydCh0aGlzLl9kZWxpdmVyeVF1ZXVlLnNpemUpLHRoaXMuX2RlbGl2ZXJ5UXVldWUuZGVsaXZlcigpLG51bGw9PT0obj10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09bnx8bi5zdG9wKCl9fX1jbGFzcyBxe2NvbnN0cnVjdG9yKCl7dGhpcy5fcXVldWU9bmV3IGd9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fcXVldWUuc2l6ZX1wdXNoKGUsdCxuKXt0aGlzLl9xdWV1ZS5wdXNoKG5ldyBXKGUsdCxuKSl9Y2xlYXIoZSl7Y29uc3QgdD1uZXcgZztmb3IoY29uc3QgbiBvZiB0aGlzLl9xdWV1ZSluLmVtaXR0ZXIhPT1lJiZ0LnB1c2gobik7dGhpcy5fcXVldWU9dH1kZWxpdmVyKCl7Zm9yKDt0aGlzLl9xdWV1ZS5zaXplPjA7KXtjb25zdCBlPXRoaXMuX3F1ZXVlLnNoaWZ0KCk7dHJ5e2UubGlzdGVuZXIuaW52b2tlKGUuZXZlbnQpfWNhdGNoKGUpe3QoZSl9fX19Y2xhc3MgJCBleHRlbmRzIHF7Y2xlYXIoZSl7dGhpcy5fcXVldWUuY2xlYXIoKX19Y2xhc3MgV3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbWl0dGVyPWUsdGhpcy5saXN0ZW5lcj10LHRoaXMuZXZlbnQ9bn19ZnVuY3Rpb24gSChlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGZ1bmN0aW9uKGUpe2xldCB0PVtdLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO2Zvcig7T2JqZWN0LnByb3RvdHlwZSE9PW47KXQ9dC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikpLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiB0fShlKSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIHooZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1jbGFzcyBHe2NvbnN0cnVjdG9yKGUpe3RoaXMuZXhlY3V0b3I9ZSx0aGlzLl9kaWRSdW49ITF9aGFzVmFsdWUoKXtyZXR1cm4gdGhpcy5fZGlkUnVufWdldFZhbHVlKCl7aWYoIXRoaXMuX2RpZFJ1bil0cnl7dGhpcy5fdmFsdWU9dGhpcy5leGVjdXRvcigpfWNhdGNoKGUpe3RoaXMuX2Vycm9yPWV9ZmluYWxseXt0aGlzLl9kaWRSdW49ITB9aWYodGhpcy5fZXJyb3IpdGhyb3cgdGhpcy5fZXJyb3I7cmV0dXJuIHRoaXMuX3ZhbHVlfWdldCByYXdWYWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX19ZnVuY3Rpb24gSihlKXtyZXR1cm4gZT49NjUmJmU8PTkwfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBaKGUsdCxuKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTtpZihYKHIpJiZuKzE8dCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobisxKTtpZihmdW5jdGlvbihlKXtyZXR1cm4gNTYzMjA8PWUmJmU8PTU3MzQzfSh0KSlyZXR1cm4gdC01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fXJldHVybiByfWNvbnN0IFk9L15bXHRcblxyXHgyMC1ceDdFXSokLztjbGFzcyBRe2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9ZX1zdGF0aWMgZ2V0SW5zdGFuY2UoZSl7cmV0dXJuIFEuY2FjaGUuZ2V0KEFycmF5LmZyb20oZSkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIFEuX2xvY2FsZXMuZ2V0VmFsdWUoKX1pc0FtYmlndW91cyhlKXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXMoZSl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUoZSl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KGUpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX1EPVEsUS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhPW5ldyBHKCgoKT0+SlNPTi5wYXJzZSgneyJfY29tbW9uIjpbODIzMiwzMiw4MjMzLDMyLDU3NjAsMzIsODE5MiwzMiw4MTkzLDMyLDgxOTQsMzIsODE5NSwzMiw4MTk2LDMyLDgxOTcsMzIsODE5OCwzMiw4MjAwLDMyLDgyMDEsMzIsODIwMiwzMiw4Mjg3LDMyLDgxOTksMzIsODIzOSwzMiwyMDQyLDk1LDY1MTAxLDk1LDY1MTAyLDk1LDY1MTAzLDk1LDgyMDgsNDUsODIwOSw0NSw4MjEwLDQ1LDY1MTEyLDQ1LDE3NDgsNDUsODI1OSw0NSw3MjcsNDUsODcyMiw0NSwxMDEzNCw0NSwxMTQ1MCw0NSwxNTQ5LDQ0LDE2NDMsNDQsODIxOCw0NCwxODQsNDQsNDIyMzMsNDQsODk0LDU5LDIzMDcsNTgsMjY5MSw1OCwxNDE3LDU4LDE3OTUsNTgsMTc5Niw1OCw1ODY4LDU4LDY1MDcyLDU4LDYxNDcsNTgsNjE1Myw1OCw4MjgyLDU4LDE0NzUsNTgsNzYwLDU4LDQyODg5LDU4LDg3NTgsNTgsNzIwLDU4LDQyMjM3LDU4LDQ1MSwzMywxMTYwMSwzMyw2NjAsNjMsNTc3LDYzLDI0MjksNjMsNTAzOCw2Myw0MjczMSw2MywxMTkxNDksNDYsODIyOCw0NiwxNzkzLDQ2LDE3OTQsNDYsNDI1MTAsNDYsNjgxNzYsNDYsMTYzMiw0NiwxNzc2LDQ2LDQyMjMyLDQ2LDEzNzMsOTYsNjUyODcsOTYsODIxOSw5Niw4MjQyLDk2LDEzNzAsOTYsMTUyMyw5Niw4MTc1LDk2LDY1MzQ0LDk2LDkwMCw5Niw4MTg5LDk2LDgxMjUsOTYsODEyNyw5Niw4MTkwLDk2LDY5Nyw5Niw4ODQsOTYsNzEyLDk2LDcxNCw5Niw3MTUsOTYsNzU2LDk2LDY5OSw5Niw3MDEsOTYsNzAwLDk2LDcwMiw5Niw0Mjg5Miw5NiwxNDk3LDk2LDIwMzYsOTYsMjAzNyw5Niw1MTk0LDk2LDU4MzYsOTYsOTQwMzMsOTYsOTQwMzQsOTYsNjUzMzksOTEsMTAwODgsNDAsMTAwOTgsNDAsMTIzMDgsNDAsNjQ4MzAsNDAsNjUzNDEsOTMsMTAwODksNDEsMTAwOTksNDEsMTIzMDksNDEsNjQ4MzEsNDEsMTAxMDAsMTIzLDExOTA2MCwxMjMsMTAxMDEsMTI1LDY1MzQyLDk0LDgyNzAsNDIsMTY0NSw0Miw4NzI3LDQyLDY2MzM1LDQyLDU5NDEsNDcsODI1Nyw0Nyw4NzI1LDQ3LDgyNjAsNDcsOTU4NSw0NywxMDE4Nyw0NywxMDc0NCw0NywxMTkzNTQsNDcsMTI3NTUsNDcsMTIzMzksNDcsMTE0NjIsNDcsMjAwMzEsNDcsMTIwMzUsNDcsNjUzNDAsOTIsNjUxMjgsOTIsODcyNiw5MiwxMDE4OSw5MiwxMDc0MSw5MiwxMDc0NSw5MiwxMTkzMTEsOTIsMTE5MzU1LDkyLDEyNzU2LDkyLDIwMDIyLDkyLDEyMDM0LDkyLDQyODcyLDM4LDcwOCw5NCw3MTAsOTQsNTg2OSw0MywxMDEzMyw0Myw2NjIwMyw0Myw4MjQ5LDYwLDEwMDk0LDYwLDcwNiw2MCwxMTkzNTAsNjAsNTE3Niw2MCw1ODEwLDYwLDUxMjAsNjEsMTE4NDAsNjEsMTI0NDgsNjEsNDIyMzksNjEsODI1MCw2MiwxMDA5NSw2Miw3MDcsNjIsMTE5MzUxLDYyLDUxNzEsNjIsOTQwMTUsNjIsODI3NSwxMjYsNzMyLDEyNiw4MTI4LDEyNiw4NzY0LDEyNiw2NTM3MiwxMjQsNjUyOTMsNDUsMTIwNzg0LDUwLDEyMDc5NCw1MCwxMjA4MDQsNTAsMTIwODE0LDUwLDEyMDgyNCw1MCwxMzAwMzQsNTAsNDI4NDIsNTAsNDIzLDUwLDEwMDAsNTAsNDI1NjQsNTAsNTMxMSw1MCw0MjczNSw1MCwxMTkzMDIsNTEsMTIwNzg1LDUxLDEyMDc5NSw1MSwxMjA4MDUsNTEsMTIwODE1LDUxLDEyMDgyNSw1MSwxMzAwMzUsNTEsNDI5MjMsNTEsNTQwLDUxLDQzOSw1MSw0Mjg1OCw1MSwxMTQ2OCw1MSwxMjQ4LDUxLDk0MDExLDUxLDcxODgyLDUxLDEyMDc4Niw1MiwxMjA3OTYsNTIsMTIwODA2LDUyLDEyMDgxNiw1MiwxMjA4MjYsNTIsMTMwMDM2LDUyLDUwNzAsNTIsNzE4NTUsNTIsMTIwNzg3LDUzLDEyMDc5Nyw1MywxMjA4MDcsNTMsMTIwODE3LDUzLDEyMDgyNyw1MywxMzAwMzcsNTMsNDQ0LDUzLDcxODY3LDUzLDEyMDc4OCw1NCwxMjA3OTgsNTQsMTIwODA4LDU0LDEyMDgxOCw1NCwxMjA4MjgsNTQsMTMwMDM4LDU0LDExNDc0LDU0LDUxMDIsNTQsNzE4OTMsNTQsMTE5MzE0LDU1LDEyMDc4OSw1NSwxMjA3OTksNTUsMTIwODA5LDU1LDEyMDgxOSw1NSwxMjA4MjksNTUsMTMwMDM5LDU1LDY2NzcwLDU1LDcxODc4LDU1LDI4MTksNTYsMjUzOCw1NiwyNjY2LDU2LDEyNTEzMSw1NiwxMjA3OTAsNTYsMTIwODAwLDU2LDEyMDgxMCw1NiwxMjA4MjAsNTYsMTIwODMwLDU2LDEzMDA0MCw1Niw1NDcsNTYsNTQ2LDU2LDY2MzMwLDU2LDI2NjMsNTcsMjkyMCw1NywyNTQxLDU3LDM0MzcsNTcsMTIwNzkxLDU3LDEyMDgwMSw1NywxMjA4MTEsNTcsMTIwODIxLDU3LDEyMDgzMSw1NywxMzAwNDEsNTcsNDI4NjIsNTcsMTE0NjYsNTcsNzE4ODQsNTcsNzE4NTIsNTcsNzE4OTQsNTcsOTA4Miw5Nyw2NTM0NSw5NywxMTk4MzQsOTcsMTE5ODg2LDk3LDExOTkzOCw5NywxMTk5OTAsOTcsMTIwMDQyLDk3LDEyMDA5NCw5NywxMjAxNDYsOTcsMTIwMTk4LDk3LDEyMDI1MCw5NywxMjAzMDIsOTcsMTIwMzU0LDk3LDEyMDQwNiw5NywxMjA0NTgsOTcsNTkzLDk3LDk0NSw5NywxMjA1MTQsOTcsMTIwNTcyLDk3LDEyMDYzMCw5NywxMjA2ODgsOTcsMTIwNzQ2LDk3LDY1MzEzLDY1LDExOTgwOCw2NSwxMTk4NjAsNjUsMTE5OTEyLDY1LDExOTk2NCw2NSwxMjAwMTYsNjUsMTIwMDY4LDY1LDEyMDEyMCw2NSwxMjAxNzIsNjUsMTIwMjI0LDY1LDEyMDI3Niw2NSwxMjAzMjgsNjUsMTIwMzgwLDY1LDEyMDQzMiw2NSw5MTMsNjUsMTIwNDg4LDY1LDEyMDU0Niw2NSwxMjA2MDQsNjUsMTIwNjYyLDY1LDEyMDcyMCw2NSw1MDM0LDY1LDU1NzMsNjUsNDIyMjIsNjUsOTQwMTYsNjUsNjYyMDgsNjUsMTE5ODM1LDk4LDExOTg4Nyw5OCwxMTk5MzksOTgsMTE5OTkxLDk4LDEyMDA0Myw5OCwxMjAwOTUsOTgsMTIwMTQ3LDk4LDEyMDE5OSw5OCwxMjAyNTEsOTgsMTIwMzAzLDk4LDEyMDM1NSw5OCwxMjA0MDcsOTgsMTIwNDU5LDk4LDM4OCw5OCw1MDcxLDk4LDUyMzQsOTgsNTU1MSw5OCw2NTMxNCw2Niw4NDkyLDY2LDExOTgwOSw2NiwxMTk4NjEsNjYsMTE5OTEzLDY2LDEyMDAxNyw2NiwxMjAwNjksNjYsMTIwMTIxLDY2LDEyMDE3Myw2NiwxMjAyMjUsNjYsMTIwMjc3LDY2LDEyMDMyOSw2NiwxMjAzODEsNjYsMTIwNDMzLDY2LDQyOTMyLDY2LDkxNCw2NiwxMjA0ODksNjYsMTIwNTQ3LDY2LDEyMDYwNSw2NiwxMjA2NjMsNjYsMTIwNzIxLDY2LDUxMDgsNjYsNTYyMyw2Niw0MjE5Miw2Niw2NjE3OCw2Niw2NjIwOSw2Niw2NjMwNSw2Niw2NTM0Nyw5OSw4NTczLDk5LDExOTgzNiw5OSwxMTk4ODgsOTksMTE5OTQwLDk5LDExOTk5Miw5OSwxMjAwNDQsOTksMTIwMDk2LDk5LDEyMDE0OCw5OSwxMjAyMDAsOTksMTIwMjUyLDk5LDEyMDMwNCw5OSwxMjAzNTYsOTksMTIwNDA4LDk5LDEyMDQ2MCw5OSw3NDI4LDk5LDEwMTAsOTksMTE0MjksOTksNDM5NTEsOTksNjY2MjEsOTksMTI4ODQ0LDY3LDcxOTIyLDY3LDcxOTEzLDY3LDY1MzE1LDY3LDg1NTcsNjcsODQ1MCw2Nyw4NDkzLDY3LDExOTgxMCw2NywxMTk4NjIsNjcsMTE5OTE0LDY3LDExOTk2Niw2NywxMjAwMTgsNjcsMTIwMTc0LDY3LDEyMDIyNiw2NywxMjAyNzgsNjcsMTIwMzMwLDY3LDEyMDM4Miw2NywxMjA0MzQsNjcsMTAxNyw2NywxMTQyOCw2Nyw1MDg3LDY3LDQyMjAyLDY3LDY2MjEwLDY3LDY2MzA2LDY3LDY2NTgxLDY3LDY2ODQ0LDY3LDg1NzQsMTAwLDg1MTgsMTAwLDExOTgzNywxMDAsMTE5ODg5LDEwMCwxMTk5NDEsMTAwLDExOTk5MywxMDAsMTIwMDQ1LDEwMCwxMjAwOTcsMTAwLDEyMDE0OSwxMDAsMTIwMjAxLDEwMCwxMjAyNTMsMTAwLDEyMDMwNSwxMDAsMTIwMzU3LDEwMCwxMjA0MDksMTAwLDEyMDQ2MSwxMDAsMTI4MSwxMDAsNTA5NSwxMDAsNTIzMSwxMDAsNDIxOTQsMTAwLDg1NTgsNjgsODUxNyw2OCwxMTk4MTEsNjgsMTE5ODYzLDY4LDExOTkxNSw2OCwxMTk5NjcsNjgsMTIwMDE5LDY4LDEyMDA3MSw2OCwxMjAxMjMsNjgsMTIwMTc1LDY4LDEyMDIyNyw2OCwxMjAyNzksNjgsMTIwMzMxLDY4LDEyMDM4Myw2OCwxMjA0MzUsNjgsNTAyNCw2OCw1NTk4LDY4LDU2MTAsNjgsNDIxOTUsNjgsODQ5NCwxMDEsNjUzNDksMTAxLDg0OTUsMTAxLDg1MTksMTAxLDExOTgzOCwxMDEsMTE5ODkwLDEwMSwxMTk5NDIsMTAxLDEyMDA0NiwxMDEsMTIwMDk4LDEwMSwxMjAxNTAsMTAxLDEyMDIwMiwxMDEsMTIwMjU0LDEwMSwxMjAzMDYsMTAxLDEyMDM1OCwxMDEsMTIwNDEwLDEwMSwxMjA0NjIsMTAxLDQzODI2LDEwMSwxMjEzLDEwMSw4OTU5LDY5LDY1MzE3LDY5LDg0OTYsNjksMTE5ODEyLDY5LDExOTg2NCw2OSwxMTk5MTYsNjksMTIwMDIwLDY5LDEyMDA3Miw2OSwxMjAxMjQsNjksMTIwMTc2LDY5LDEyMDIyOCw2OSwxMjAyODAsNjksMTIwMzMyLDY5LDEyMDM4NCw2OSwxMjA0MzYsNjksOTE3LDY5LDEyMDQ5Miw2OSwxMjA1NTAsNjksMTIwNjA4LDY5LDEyMDY2Niw2OSwxMjA3MjQsNjksMTE1NzcsNjksNTAzNiw2OSw0MjIyNCw2OSw3MTg0Niw2OSw3MTg1NCw2OSw2NjE4Miw2OSwxMTk4MzksMTAyLDExOTg5MSwxMDIsMTE5OTQzLDEwMiwxMTk5OTUsMTAyLDEyMDA0NywxMDIsMTIwMDk5LDEwMiwxMjAxNTEsMTAyLDEyMDIwMywxMDIsMTIwMjU1LDEwMiwxMjAzMDcsMTAyLDEyMDM1OSwxMDIsMTIwNDExLDEwMiwxMjA0NjMsMTAyLDQzODI5LDEwMiw0MjkwNSwxMDIsMzgzLDEwMiw3ODM3LDEwMiwxNDEyLDEwMiwxMTkzMTUsNzAsODQ5Nyw3MCwxMTk4MTMsNzAsMTE5ODY1LDcwLDExOTkxNyw3MCwxMjAwMjEsNzAsMTIwMDczLDcwLDEyMDEyNSw3MCwxMjAxNzcsNzAsMTIwMjI5LDcwLDEyMDI4MSw3MCwxMjAzMzMsNzAsMTIwMzg1LDcwLDEyMDQzNyw3MCw0MjkwNCw3MCw5ODgsNzAsMTIwNzc4LDcwLDU1NTYsNzAsNDIyMDUsNzAsNzE4NzQsNzAsNzE4NDIsNzAsNjYxODMsNzAsNjYyMTMsNzAsNjY4NTMsNzAsNjUzNTEsMTAzLDg0NTgsMTAzLDExOTg0MCwxMDMsMTE5ODkyLDEwMywxMTk5NDQsMTAzLDEyMDA0OCwxMDMsMTIwMTAwLDEwMywxMjAxNTIsMTAzLDEyMDIwNCwxMDMsMTIwMjU2LDEwMywxMjAzMDgsMTAzLDEyMDM2MCwxMDMsMTIwNDEyLDEwMywxMjA0NjQsMTAzLDYwOSwxMDMsNzU1NSwxMDMsMzk3LDEwMywxNDA5LDEwMywxMTk4MTQsNzEsMTE5ODY2LDcxLDExOTkxOCw3MSwxMTk5NzAsNzEsMTIwMDIyLDcxLDEyMDA3NCw3MSwxMjAxMjYsNzEsMTIwMTc4LDcxLDEyMDIzMCw3MSwxMjAyODIsNzEsMTIwMzM0LDcxLDEyMDM4Niw3MSwxMjA0MzgsNzEsMTI5Miw3MSw1MDU2LDcxLDUxMDcsNzEsNDIxOTgsNzEsNjUzNTIsMTA0LDg0NjIsMTA0LDExOTg0MSwxMDQsMTE5OTQ1LDEwNCwxMTk5OTcsMTA0LDEyMDA0OSwxMDQsMTIwMTAxLDEwNCwxMjAxNTMsMTA0LDEyMDIwNSwxMDQsMTIwMjU3LDEwNCwxMjAzMDksMTA0LDEyMDM2MSwxMDQsMTIwNDEzLDEwNCwxMjA0NjUsMTA0LDEyMTEsMTA0LDEzOTIsMTA0LDUwNTgsMTA0LDY1MzIwLDcyLDg0NTksNzIsODQ2MCw3Miw4NDYxLDcyLDExOTgxNSw3MiwxMTk4NjcsNzIsMTE5OTE5LDcyLDEyMDAyMyw3MiwxMjAxNzksNzIsMTIwMjMxLDcyLDEyMDI4Myw3MiwxMjAzMzUsNzIsMTIwMzg3LDcyLDEyMDQzOSw3Miw5MTksNzIsMTIwNDk0LDcyLDEyMDU1Miw3MiwxMjA2MTAsNzIsMTIwNjY4LDcyLDEyMDcyNiw3MiwxMTQwNiw3Miw1MDUxLDcyLDU1MDAsNzIsNDIyMTUsNzIsNjYyNTUsNzIsNzMxLDEwNSw5MDc1LDEwNSw2NTM1MywxMDUsODU2MCwxMDUsODUwNSwxMDUsODUyMCwxMDUsMTE5ODQyLDEwNSwxMTk4OTQsMTA1LDExOTk0NiwxMDUsMTE5OTk4LDEwNSwxMjAwNTAsMTA1LDEyMDEwMiwxMDUsMTIwMTU0LDEwNSwxMjAyMDYsMTA1LDEyMDI1OCwxMDUsMTIwMzEwLDEwNSwxMjAzNjIsMTA1LDEyMDQxNCwxMDUsMTIwNDY2LDEwNSwxMjA0ODQsMTA1LDYxOCwxMDUsNjE3LDEwNSw5NTMsMTA1LDgxMjYsMTA1LDg5MCwxMDUsMTIwNTIyLDEwNSwxMjA1ODAsMTA1LDEyMDYzOCwxMDUsMTIwNjk2LDEwNSwxMjA3NTQsMTA1LDExMTAsMTA1LDQyNTY3LDEwNSwxMjMxLDEwNSw0Mzg5MywxMDUsNTAyOSwxMDUsNzE4NzUsMTA1LDY1MzU0LDEwNiw4NTIxLDEwNiwxMTk4NDMsMTA2LDExOTg5NSwxMDYsMTE5OTQ3LDEwNiwxMTk5OTksMTA2LDEyMDA1MSwxMDYsMTIwMTAzLDEwNiwxMjAxNTUsMTA2LDEyMDIwNywxMDYsMTIwMjU5LDEwNiwxMjAzMTEsMTA2LDEyMDM2MywxMDYsMTIwNDE1LDEwNiwxMjA0NjcsMTA2LDEwMTEsMTA2LDExMTIsMTA2LDY1MzIyLDc0LDExOTgxNyw3NCwxMTk4NjksNzQsMTE5OTIxLDc0LDExOTk3Myw3NCwxMjAwMjUsNzQsMTIwMDc3LDc0LDEyMDEyOSw3NCwxMjAxODEsNzQsMTIwMjMzLDc0LDEyMDI4NSw3NCwxMjAzMzcsNzQsMTIwMzg5LDc0LDEyMDQ0MSw3NCw0MjkzMCw3NCw4OTUsNzQsMTAzMiw3NCw1MDM1LDc0LDUyNjEsNzQsNDIyMDEsNzQsMTE5ODQ0LDEwNywxMTk4OTYsMTA3LDExOTk0OCwxMDcsMTIwMDAwLDEwNywxMjAwNTIsMTA3LDEyMDEwNCwxMDcsMTIwMTU2LDEwNywxMjAyMDgsMTA3LDEyMDI2MCwxMDcsMTIwMzEyLDEwNywxMjAzNjQsMTA3LDEyMDQxNiwxMDcsMTIwNDY4LDEwNyw4NDkwLDc1LDY1MzIzLDc1LDExOTgxOCw3NSwxMTk4NzAsNzUsMTE5OTIyLDc1LDExOTk3NCw3NSwxMjAwMjYsNzUsMTIwMDc4LDc1LDEyMDEzMCw3NSwxMjAxODIsNzUsMTIwMjM0LDc1LDEyMDI4Niw3NSwxMjAzMzgsNzUsMTIwMzkwLDc1LDEyMDQ0Miw3NSw5MjIsNzUsMTIwNDk3LDc1LDEyMDU1NSw3NSwxMjA2MTMsNzUsMTIwNjcxLDc1LDEyMDcyOSw3NSwxMTQxMiw3NSw1MDk0LDc1LDU4NDUsNzUsNDIxOTksNzUsNjY4NDAsNzUsMTQ3MiwxMDgsODczOSw3Myw5MjEzLDczLDY1NTEyLDczLDE2MzMsMTA4LDE3NzcsNzMsNjYzMzYsMTA4LDEyNTEyNywxMDgsMTIwNzgzLDczLDEyMDc5Myw3MywxMjA4MDMsNzMsMTIwODEzLDczLDEyMDgyMyw3MywxMzAwMzMsNzMsNjUzMjEsNzMsODU0NCw3Myw4NDY0LDczLDg0NjUsNzMsMTE5ODE2LDczLDExOTg2OCw3MywxMTk5MjAsNzMsMTIwMDI0LDczLDEyMDEyOCw3MywxMjAxODAsNzMsMTIwMjMyLDczLDEyMDI4NCw3MywxMjAzMzYsNzMsMTIwMzg4LDczLDEyMDQ0MCw3Myw2NTM1NiwxMDgsODU3Miw3Myw4NDY3LDEwOCwxMTk4NDUsMTA4LDExOTg5NywxMDgsMTE5OTQ5LDEwOCwxMjAwMDEsMTA4LDEyMDA1MywxMDgsMTIwMTA1LDczLDEyMDE1Nyw3MywxMjAyMDksNzMsMTIwMjYxLDczLDEyMDMxMyw3MywxMjAzNjUsNzMsMTIwNDE3LDczLDEyMDQ2OSw3Myw0NDgsNzMsMTIwNDk2LDczLDEyMDU1NCw3MywxMjA2MTIsNzMsMTIwNjcwLDczLDEyMDcyOCw3MywxMTQxMCw3MywxMDMwLDczLDEyMTYsNzMsMTQ5MywxMDgsMTUwMywxMDgsMTU3NSwxMDgsMTI2NDY0LDEwOCwxMjY1OTIsMTA4LDY1MTY2LDEwOCw2NTE2NSwxMDgsMTk5NCwxMDgsMTE1OTksNzMsNTgyNSw3Myw0MjIyNiw3Myw5Mzk5Miw3Myw2NjE4NiwxMjQsNjYzMTMsMTI0LDExOTMzOCw3Niw4NTU2LDc2LDg0NjYsNzYsMTE5ODE5LDc2LDExOTg3MSw3NiwxMTk5MjMsNzYsMTIwMDI3LDc2LDEyMDA3OSw3NiwxMjAxMzEsNzYsMTIwMTgzLDc2LDEyMDIzNSw3NiwxMjAyODcsNzYsMTIwMzM5LDc2LDEyMDM5MSw3NiwxMjA0NDMsNzYsMTE0NzIsNzYsNTA4Niw3Niw1MjkwLDc2LDQyMjA5LDc2LDkzOTc0LDc2LDcxODQzLDc2LDcxODU4LDc2LDY2NTg3LDc2LDY2ODU0LDc2LDY1MzI1LDc3LDg1NTksNzcsODQ5OSw3NywxMTk4MjAsNzcsMTE5ODcyLDc3LDExOTkyNCw3NywxMjAwMjgsNzcsMTIwMDgwLDc3LDEyMDEzMiw3NywxMjAxODQsNzcsMTIwMjM2LDc3LDEyMDI4OCw3NywxMjAzNDAsNzcsMTIwMzkyLDc3LDEyMDQ0NCw3Nyw5MjQsNzcsMTIwNDk5LDc3LDEyMDU1Nyw3NywxMjA2MTUsNzcsMTIwNjczLDc3LDEyMDczMSw3NywxMDE4LDc3LDExNDE2LDc3LDUwNDcsNzcsNTYxNiw3Nyw1ODQ2LDc3LDQyMjA3LDc3LDY2MjI0LDc3LDY2MzIxLDc3LDExOTg0NywxMTAsMTE5ODk5LDExMCwxMTk5NTEsMTEwLDEyMDAwMywxMTAsMTIwMDU1LDExMCwxMjAxMDcsMTEwLDEyMDE1OSwxMTAsMTIwMjExLDExMCwxMjAyNjMsMTEwLDEyMDMxNSwxMTAsMTIwMzY3LDExMCwxMjA0MTksMTEwLDEyMDQ3MSwxMTAsMTQwMCwxMTAsMTQwNCwxMTAsNjUzMjYsNzgsODQ2OSw3OCwxMTk4MjEsNzgsMTE5ODczLDc4LDExOTkyNSw3OCwxMTk5NzcsNzgsMTIwMDI5LDc4LDEyMDA4MSw3OCwxMjAxODUsNzgsMTIwMjM3LDc4LDEyMDI4OSw3OCwxMjAzNDEsNzgsMTIwMzkzLDc4LDEyMDQ0NSw3OCw5MjUsNzgsMTIwNTAwLDc4LDEyMDU1OCw3OCwxMjA2MTYsNzgsMTIwNjc0LDc4LDEyMDczMiw3OCwxMTQxOCw3OCw0MjIwOCw3OCw2NjgzNSw3OCwzMDc0LDExMSwzMjAyLDExMSwzMzMwLDExMSwzNDU4LDExMSwyNDA2LDExMSwyNjYyLDExMSwyNzkwLDExMSwzMDQ2LDExMSwzMTc0LDExMSwzMzAyLDExMSwzNDMwLDExMSwzNjY0LDExMSwzNzkyLDExMSw0MTYwLDExMSwxNjM3LDExMSwxNzgxLDExMSw2NTM1OSwxMTEsODUwMCwxMTEsMTE5ODQ4LDExMSwxMTk5MDAsMTExLDExOTk1MiwxMTEsMTIwMDU2LDExMSwxMjAxMDgsMTExLDEyMDE2MCwxMTEsMTIwMjEyLDExMSwxMjAyNjQsMTExLDEyMDMxNiwxMTEsMTIwMzY4LDExMSwxMjA0MjAsMTExLDEyMDQ3MiwxMTEsNzQzOSwxMTEsNzQ0MSwxMTEsNDM4MzcsMTExLDk1OSwxMTEsMTIwNTI4LDExMSwxMjA1ODYsMTExLDEyMDY0NCwxMTEsMTIwNzAyLDExMSwxMjA3NjAsMTExLDk2MywxMTEsMTIwNTMyLDExMSwxMjA1OTAsMTExLDEyMDY0OCwxMTEsMTIwNzA2LDExMSwxMjA3NjQsMTExLDExNDIzLDExMSw0MzUxLDExMSwxNDEzLDExMSwxNTA1LDExMSwxNjA3LDExMSwxMjY1MDAsMTExLDEyNjU2NCwxMTEsMTI2NTk2LDExMSw2NTI1OSwxMTEsNjUyNjAsMTExLDY1MjU4LDExMSw2NTI1NywxMTEsMTcyNiwxMTEsNjQ0MjgsMTExLDY0NDI5LDExMSw2NDQyNywxMTEsNjQ0MjYsMTExLDE3MjksMTExLDY0NDI0LDExMSw2NDQyNSwxMTEsNjQ0MjMsMTExLDY0NDIyLDExMSwxNzQ5LDExMSwzMzYwLDExMSw0MTI1LDExMSw2Njc5NCwxMTEsNzE4ODAsMTExLDcxODk1LDExMSw2NjYwNCwxMTEsMTk4NCw3OSwyNTM0LDc5LDI5MTgsNzksMTIyOTUsNzksNzA4NjQsNzksNzE5MDQsNzksMTIwNzgyLDc5LDEyMDc5Miw3OSwxMjA4MDIsNzksMTIwODEyLDc5LDEyMDgyMiw3OSwxMzAwMzIsNzksNjUzMjcsNzksMTE5ODIyLDc5LDExOTg3NCw3OSwxMTk5MjYsNzksMTE5OTc4LDc5LDEyMDAzMCw3OSwxMjAwODIsNzksMTIwMTM0LDc5LDEyMDE4Niw3OSwxMjAyMzgsNzksMTIwMjkwLDc5LDEyMDM0Miw3OSwxMjAzOTQsNzksMTIwNDQ2LDc5LDkyNyw3OSwxMjA1MDIsNzksMTIwNTYwLDc5LDEyMDYxOCw3OSwxMjA2NzYsNzksMTIwNzM0LDc5LDExNDIyLDc5LDEzNjUsNzksMTE2MDQsNzksNDgxNiw3OSwyODQ4LDc5LDY2NzU0LDc5LDQyMjI3LDc5LDcxODYxLDc5LDY2MTk0LDc5LDY2MjE5LDc5LDY2NTY0LDc5LDY2ODM4LDc5LDkwNzYsMTEyLDY1MzYwLDExMiwxMTk4NDksMTEyLDExOTkwMSwxMTIsMTE5OTUzLDExMiwxMjAwMDUsMTEyLDEyMDA1NywxMTIsMTIwMTA5LDExMiwxMjAxNjEsMTEyLDEyMDIxMywxMTIsMTIwMjY1LDExMiwxMjAzMTcsMTEyLDEyMDM2OSwxMTIsMTIwNDIxLDExMiwxMjA0NzMsMTEyLDk2MSwxMTIsMTIwNTMwLDExMiwxMjA1NDQsMTEyLDEyMDU4OCwxMTIsMTIwNjAyLDExMiwxMjA2NDYsMTEyLDEyMDY2MCwxMTIsMTIwNzA0LDExMiwxMjA3MTgsMTEyLDEyMDc2MiwxMTIsMTIwNzc2LDExMiwxMTQyNywxMTIsNjUzMjgsODAsODQ3Myw4MCwxMTk4MjMsODAsMTE5ODc1LDgwLDExOTkyNyw4MCwxMTk5NzksODAsMTIwMDMxLDgwLDEyMDA4Myw4MCwxMjAxODcsODAsMTIwMjM5LDgwLDEyMDI5MSw4MCwxMjAzNDMsODAsMTIwMzk1LDgwLDEyMDQ0Nyw4MCw5MjksODAsMTIwNTA0LDgwLDEyMDU2Miw4MCwxMjA2MjAsODAsMTIwNjc4LDgwLDEyMDczNiw4MCwxMTQyNiw4MCw1MDkwLDgwLDUyMjksODAsNDIxOTMsODAsNjYxOTcsODAsMTE5ODUwLDExMywxMTk5MDIsMTEzLDExOTk1NCwxMTMsMTIwMDA2LDExMywxMjAwNTgsMTEzLDEyMDExMCwxMTMsMTIwMTYyLDExMywxMjAyMTQsMTEzLDEyMDI2NiwxMTMsMTIwMzE4LDExMywxMjAzNzAsMTEzLDEyMDQyMiwxMTMsMTIwNDc0LDExMywxMzA3LDExMywxMzc5LDExMywxMzgyLDExMyw4NDc0LDgxLDExOTgyNCw4MSwxMTk4NzYsODEsMTE5OTI4LDgxLDExOTk4MCw4MSwxMjAwMzIsODEsMTIwMDg0LDgxLDEyMDE4OCw4MSwxMjAyNDAsODEsMTIwMjkyLDgxLDEyMDM0NCw4MSwxMjAzOTYsODEsMTIwNDQ4LDgxLDExNjA1LDgxLDExOTg1MSwxMTQsMTE5OTAzLDExNCwxMTk5NTUsMTE0LDEyMDAwNywxMTQsMTIwMDU5LDExNCwxMjAxMTEsMTE0LDEyMDE2MywxMTQsMTIwMjE1LDExNCwxMjAyNjcsMTE0LDEyMDMxOSwxMTQsMTIwMzcxLDExNCwxMjA0MjMsMTE0LDEyMDQ3NSwxMTQsNDM4NDcsMTE0LDQzODQ4LDExNCw3NDYyLDExNCwxMTM5NywxMTQsNDM5MDUsMTE0LDExOTMxOCw4Miw4NDc1LDgyLDg0NzYsODIsODQ3Nyw4MiwxMTk4MjUsODIsMTE5ODc3LDgyLDExOTkyOSw4MiwxMjAwMzMsODIsMTIwMTg5LDgyLDEyMDI0MSw4MiwxMjAyOTMsODIsMTIwMzQ1LDgyLDEyMDM5Nyw4MiwxMjA0NDksODIsNDIyLDgyLDUwMjUsODIsNTA3NCw4Miw2Njc0MCw4Miw1NTExLDgyLDQyMjExLDgyLDk0MDA1LDgyLDY1MzYzLDExNSwxMTk4NTIsMTE1LDExOTkwNCwxMTUsMTE5OTU2LDExNSwxMjAwMDgsMTE1LDEyMDA2MCwxMTUsMTIwMTEyLDExNSwxMjAxNjQsMTE1LDEyMDIxNiwxMTUsMTIwMjY4LDExNSwxMjAzMjAsMTE1LDEyMDM3MiwxMTUsMTIwNDI0LDExNSwxMjA0NzYsMTE1LDQyODAxLDExNSw0NDUsMTE1LDExMDksMTE1LDQzOTQ2LDExNSw3MTg3MywxMTUsNjY2MzIsMTE1LDY1MzMxLDgzLDExOTgyNiw4MywxMTk4NzgsODMsMTE5OTMwLDgzLDExOTk4Miw4MywxMjAwMzQsODMsMTIwMDg2LDgzLDEyMDEzOCw4MywxMjAxOTAsODMsMTIwMjQyLDgzLDEyMDI5NCw4MywxMjAzNDYsODMsMTIwMzk4LDgzLDEyMDQ1MCw4MywxMDI5LDgzLDEzNTksODMsNTA3Nyw4Myw1MDgyLDgzLDQyMjEwLDgzLDk0MDEwLDgzLDY2MTk4LDgzLDY2NTkyLDgzLDExOTg1MywxMTYsMTE5OTA1LDExNiwxMTk5NTcsMTE2LDEyMDAwOSwxMTYsMTIwMDYxLDExNiwxMjAxMTMsMTE2LDEyMDE2NSwxMTYsMTIwMjE3LDExNiwxMjAyNjksMTE2LDEyMDMyMSwxMTYsMTIwMzczLDExNiwxMjA0MjUsMTE2LDEyMDQ3NywxMTYsODg2OCw4NCwxMDIwMSw4NCwxMjg4NzIsODQsNjUzMzIsODQsMTE5ODI3LDg0LDExOTg3OSw4NCwxMTk5MzEsODQsMTE5OTgzLDg0LDEyMDAzNSw4NCwxMjAwODcsODQsMTIwMTM5LDg0LDEyMDE5MSw4NCwxMjAyNDMsODQsMTIwMjk1LDg0LDEyMDM0Nyw4NCwxMjAzOTksODQsMTIwNDUxLDg0LDkzMiw4NCwxMjA1MDcsODQsMTIwNTY1LDg0LDEyMDYyMyw4NCwxMjA2ODEsODQsMTIwNzM5LDg0LDExNDMwLDg0LDUwMjYsODQsNDIxOTYsODQsOTM5NjIsODQsNzE4NjgsODQsNjYxOTksODQsNjYyMjUsODQsNjYzMjUsODQsMTE5ODU0LDExNywxMTk5MDYsMTE3LDExOTk1OCwxMTcsMTIwMDEwLDExNywxMjAwNjIsMTE3LDEyMDExNCwxMTcsMTIwMTY2LDExNywxMjAyMTgsMTE3LDEyMDI3MCwxMTcsMTIwMzIyLDExNywxMjAzNzQsMTE3LDEyMDQyNiwxMTcsMTIwNDc4LDExNyw0MjkxMSwxMTcsNzQ1MiwxMTcsNDM4NTQsMTE3LDQzODU4LDExNyw2NTEsMTE3LDk2NSwxMTcsMTIwNTM0LDExNywxMjA1OTIsMTE3LDEyMDY1MCwxMTcsMTIwNzA4LDExNywxMjA3NjYsMTE3LDE0MDUsMTE3LDY2ODA2LDExNyw3MTg5NiwxMTcsODc0Niw4NSw4ODk5LDg1LDExOTgyOCw4NSwxMTk4ODAsODUsMTE5OTMyLDg1LDExOTk4NCw4NSwxMjAwMzYsODUsMTIwMDg4LDg1LDEyMDE0MCw4NSwxMjAxOTIsODUsMTIwMjQ0LDg1LDEyMDI5Niw4NSwxMjAzNDgsODUsMTIwNDAwLDg1LDEyMDQ1Miw4NSwxMzU3LDg1LDQ2MDgsODUsNjY3NjYsODUsNTE5Niw4NSw0MjIyOCw4NSw5NDAxOCw4NSw3MTg2NCw4NSw4NzQ0LDExOCw4ODk3LDExOCw2NTM2NiwxMTgsODU2NCwxMTgsMTE5ODU1LDExOCwxMTk5MDcsMTE4LDExOTk1OSwxMTgsMTIwMDExLDExOCwxMjAwNjMsMTE4LDEyMDExNSwxMTgsMTIwMTY3LDExOCwxMjAyMTksMTE4LDEyMDI3MSwxMTgsMTIwMzIzLDExOCwxMjAzNzUsMTE4LDEyMDQyNywxMTgsMTIwNDc5LDExOCw3NDU2LDExOCw5NTcsMTE4LDEyMDUyNiwxMTgsMTIwNTg0LDExOCwxMjA2NDIsMTE4LDEyMDcwMCwxMTgsMTIwNzU4LDExOCwxMTQxLDExOCwxNDk2LDExOCw3MTQzMCwxMTgsNDM5NDUsMTE4LDcxODcyLDExOCwxMTkzMDksODYsMTYzOSw4NiwxNzgzLDg2LDg1NDgsODYsMTE5ODI5LDg2LDExOTg4MSw4NiwxMTk5MzMsODYsMTE5OTg1LDg2LDEyMDAzNyw4NiwxMjAwODksODYsMTIwMTQxLDg2LDEyMDE5Myw4NiwxMjAyNDUsODYsMTIwMjk3LDg2LDEyMDM0OSw4NiwxMjA0MDEsODYsMTIwNDUzLDg2LDExNDAsODYsMTE1NzYsODYsNTA4MSw4Niw1MTY3LDg2LDQyNzE5LDg2LDQyMjE0LDg2LDkzOTYwLDg2LDcxODQwLDg2LDY2ODQ1LDg2LDYyMywxMTksMTE5ODU2LDExOSwxMTk5MDgsMTE5LDExOTk2MCwxMTksMTIwMDEyLDExOSwxMjAwNjQsMTE5LDEyMDExNiwxMTksMTIwMTY4LDExOSwxMjAyMjAsMTE5LDEyMDI3MiwxMTksMTIwMzI0LDExOSwxMjAzNzYsMTE5LDEyMDQyOCwxMTksMTIwNDgwLDExOSw3NDU3LDExOSwxMTIxLDExOSwxMzA5LDExOSwxMzc3LDExOSw3MTQzNCwxMTksNzE0MzgsMTE5LDcxNDM5LDExOSw0MzkwNywxMTksNzE5MTksODcsNzE5MTAsODcsMTE5ODMwLDg3LDExOTg4Miw4NywxMTk5MzQsODcsMTE5OTg2LDg3LDEyMDAzOCw4NywxMjAwOTAsODcsMTIwMTQyLDg3LDEyMDE5NCw4NywxMjAyNDYsODcsMTIwMjk4LDg3LDEyMDM1MCw4NywxMjA0MDIsODcsMTIwNDU0LDg3LDEzMDgsODcsNTA0Myw4Nyw1MDc2LDg3LDQyMjE4LDg3LDU3NDIsMTIwLDEwNTM5LDEyMCwxMDU0MCwxMjAsMTA3OTksMTIwLDY1MzY4LDEyMCw4NTY5LDEyMCwxMTk4NTcsMTIwLDExOTkwOSwxMjAsMTE5OTYxLDEyMCwxMjAwMTMsMTIwLDEyMDA2NSwxMjAsMTIwMTE3LDEyMCwxMjAxNjksMTIwLDEyMDIyMSwxMjAsMTIwMjczLDEyMCwxMjAzMjUsMTIwLDEyMDM3NywxMjAsMTIwNDI5LDEyMCwxMjA0ODEsMTIwLDU0NDEsMTIwLDU1MDEsMTIwLDU3NDEsODgsOTU4Nyw4OCw2NjMzOCw4OCw3MTkxNiw4OCw2NTMzNiw4OCw4NTUzLDg4LDExOTgzMSw4OCwxMTk4ODMsODgsMTE5OTM1LDg4LDExOTk4Nyw4OCwxMjAwMzksODgsMTIwMDkxLDg4LDEyMDE0Myw4OCwxMjAxOTUsODgsMTIwMjQ3LDg4LDEyMDI5OSw4OCwxMjAzNTEsODgsMTIwNDAzLDg4LDEyMDQ1NSw4OCw0MjkzMSw4OCw5MzUsODgsMTIwNTEwLDg4LDEyMDU2OCw4OCwxMjA2MjYsODgsMTIwNjg0LDg4LDEyMDc0Miw4OCwxMTQzNiw4OCwxMTYxMyw4OCw1ODE1LDg4LDQyMjE5LDg4LDY2MTkyLDg4LDY2MjI4LDg4LDY2MzI3LDg4LDY2ODU1LDg4LDYxMSwxMjEsNzU2NCwxMjEsNjUzNjksMTIxLDExOTg1OCwxMjEsMTE5OTEwLDEyMSwxMTk5NjIsMTIxLDEyMDAxNCwxMjEsMTIwMDY2LDEyMSwxMjAxMTgsMTIxLDEyMDE3MCwxMjEsMTIwMjIyLDEyMSwxMjAyNzQsMTIxLDEyMDMyNiwxMjEsMTIwMzc4LDEyMSwxMjA0MzAsMTIxLDEyMDQ4MiwxMjEsNjU1LDEyMSw3OTM1LDEyMSw0Mzg2NiwxMjEsOTQ3LDEyMSw4NTA5LDEyMSwxMjA1MTYsMTIxLDEyMDU3NCwxMjEsMTIwNjMyLDEyMSwxMjA2OTAsMTIxLDEyMDc0OCwxMjEsMTE5OSwxMjEsNDMyNywxMjEsNzE5MDAsMTIxLDY1MzM3LDg5LDExOTgzMiw4OSwxMTk4ODQsODksMTE5OTM2LDg5LDExOTk4OCw4OSwxMjAwNDAsODksMTIwMDkyLDg5LDEyMDE0NCw4OSwxMjAxOTYsODksMTIwMjQ4LDg5LDEyMDMwMCw4OSwxMjAzNTIsODksMTIwNDA0LDg5LDEyMDQ1Niw4OSw5MzMsODksOTc4LDg5LDEyMDUwOCw4OSwxMjA1NjYsODksMTIwNjI0LDg5LDEyMDY4Miw4OSwxMjA3NDAsODksMTE0MzIsODksMTE5OCw4OSw1MDMzLDg5LDUwNTMsODksNDIyMjAsODksOTQwMTksODksNzE4NDQsODksNjYyMjYsODksMTE5ODU5LDEyMiwxMTk5MTEsMTIyLDExOTk2MywxMjIsMTIwMDE1LDEyMiwxMjAwNjcsMTIyLDEyMDExOSwxMjIsMTIwMTcxLDEyMiwxMjAyMjMsMTIyLDEyMDI3NSwxMjIsMTIwMzI3LDEyMiwxMjAzNzksMTIyLDEyMDQzMSwxMjIsMTIwNDgzLDEyMiw3NDU4LDEyMiw0MzkyMywxMjIsNzE4NzYsMTIyLDY2MjkzLDkwLDcxOTA5LDkwLDY1MzM4LDkwLDg0ODQsOTAsODQ4OCw5MCwxMTk4MzMsOTAsMTE5ODg1LDkwLDExOTkzNyw5MCwxMTk5ODksOTAsMTIwMDQxLDkwLDEyMDE5Nyw5MCwxMjAyNDksOTAsMTIwMzAxLDkwLDEyMDM1Myw5MCwxMjA0MDUsOTAsMTIwNDU3LDkwLDkxOCw5MCwxMjA0OTMsOTAsMTIwNTUxLDkwLDEyMDYwOSw5MCwxMjA2NjcsOTAsMTIwNzI1LDkwLDUwNTksOTAsNDIyMDQsOTAsNzE4NDksOTAsNjUyODIsMzQsNjUyODQsMzYsNjUyODUsMzcsNjUyODYsMzgsNjUyOTAsNDIsNjUyOTEsNDMsNjUyOTQsNDYsNjUyOTUsNDcsNjUyOTYsNDgsNjUyOTcsNDksNjUyOTgsNTAsNjUyOTksNTEsNjUzMDAsNTIsNjUzMDEsNTMsNjUzMDIsNTQsNjUzMDMsNTUsNjUzMDQsNTYsNjUzMDUsNTcsNjUzMDgsNjAsNjUzMDksNjEsNjUzMTAsNjIsNjUzMTIsNjQsNjUzMTYsNjgsNjUzMTgsNzAsNjUzMTksNzEsNjUzMjQsNzYsNjUzMjksODEsNjUzMzAsODIsNjUzMzMsODUsNjUzMzQsODYsNjUzMzUsODcsNjUzNDMsOTUsNjUzNDYsOTgsNjUzNDgsMTAwLDY1MzUwLDEwMiw2NTM1NSwxMDcsNjUzNTcsMTA5LDY1MzU4LDExMCw2NTM2MSwxMTMsNjUzNjIsMTE0LDY1MzY0LDExNiw2NTM2NSwxMTcsNjUzNjcsMTE5LDY1MzcwLDEyMiw2NTM3MSwxMjMsNjUzNzMsMTI1XSwiX2RlZmF1bHQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiY3MiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImRlIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJlcyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJmciI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJpdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiamEiOls4MjExLDQ1LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI5Miw0NCw2NTMwNyw1OV0sImtvIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwbCI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwdC1CUiI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJxcHMtcGxvYyI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJydSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMzA1LDEwNSw5MjEsNzMsMTAwOSwxMTIsMjE1LDEyMCw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInRyIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInpoLWhhbnMiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODgsNDAsNjUyODksNDFdLCJ6aC1oYW50IjpbODIxMSw0NSw2NTM3NCwxMjYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MzA3LDU5XX0nKSkpLFEuY2FjaGU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZm49ZSx0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQoZSl7Y29uc3QgdD1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gdGhpcy5sYXN0QXJnS2V5IT09dCYmKHRoaXMubGFzdEFyZ0tleT10LHRoaXMubGFzdENhY2hlPXRoaXMuZm4oZSkpLHRoaXMubGFzdENhY2hlfX0oKGU9PntmdW5jdGlvbiB0KGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTIpdC5zZXQoZVtuXSxlW24rMV0pO3JldHVybiB0fWZ1bmN0aW9uIG4oZSx0KXtpZighZSlyZXR1cm4gdDtjb25zdCBuPW5ldyBNYXA7Zm9yKGNvbnN0W3IsaV1vZiBlKXQuaGFzKHIpJiZuLnNldChyLGkpO3JldHVybiBufWNvbnN0IHI9RC5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCk7bGV0IGksbz1lLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpJiZlIGluIHIpKTswPT09by5sZW5ndGgmJihvPVsiX2RlZmF1bHQiXSk7Zm9yKGNvbnN0IGUgb2Ygbyl7aT1uKGksdChyW2VdKSl9Y29uc3QgYT1mdW5jdGlvbihlLHQpe2NvbnN0IG49bmV3IE1hcChlKTtmb3IoY29uc3RbZSxyXW9mIHQpbi5zZXQoZSxyKTtyZXR1cm4gbn0odChyLl9jb21tb24pLGkpO3JldHVybiBuZXcgUShhKX0pKSxRLl9sb2NhbGVzPW5ldyBHKCgoKT0+T2JqZWN0LmtleXMoUS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCkpLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpKSkpKTtjbGFzcyBlZXtzdGF0aWMgZ2V0UmF3RGF0YSgpe3JldHVybiBKU09OLnBhcnNlKCJbOSwxMCwxMSwxMiwxMywzMiwxMjcsMTYwLDE3Myw4NDcsMTU2NCw0NDQ3LDQ0NDgsNjA2OCw2MDY5LDYxNTUsNjE1Niw2MTU3LDYxNTgsNzM1NSw3MzU2LDgxOTIsODE5Myw4MTk0LDgxOTUsODE5Niw4MTk3LDgxOTgsODE5OSw4MjAwLDgyMDEsODIwMiw4MjAzLDgyMDQsODIwNSw4MjA2LDgyMDcsODIzNCw4MjM1LDgyMzYsODIzNyw4MjM4LDgyMzksODI4Nyw4Mjg4LDgyODksODI5MCw4MjkxLDgyOTIsODI5Myw4Mjk0LDgyOTUsODI5Niw4Mjk3LDgyOTgsODI5OSw4MzAwLDgzMDEsODMwMiw4MzAzLDEwMjQwLDEyMjg4LDEyNjQ0LDY1MDI0LDY1MDI1LDY1MDI2LDY1MDI3LDY1MDI4LDY1MDI5LDY1MDMwLDY1MDMxLDY1MDMyLDY1MDMzLDY1MDM0LDY1MDM1LDY1MDM2LDY1MDM3LDY1MDM4LDY1MDM5LDY1Mjc5LDY1NDQwLDY1NTIwLDY1NTIxLDY1NTIyLDY1NTIzLDY1NTI0LDY1NTI1LDY1NTI2LDY1NTI3LDY1NTI4LDY1NTMyLDc4ODQ0LDExOTE1NSwxMTkxNTYsMTE5MTU3LDExOTE1OCwxMTkxNTksMTE5MTYwLDExOTE2MSwxMTkxNjIsOTE3NTA0LDkxNzUwNSw5MTc1MDYsOTE3NTA3LDkxNzUwOCw5MTc1MDksOTE3NTEwLDkxNzUxMSw5MTc1MTIsOTE3NTEzLDkxNzUxNCw5MTc1MTUsOTE3NTE2LDkxNzUxNyw5MTc1MTgsOTE3NTE5LDkxNzUyMCw5MTc1MjEsOTE3NTIyLDkxNzUyMyw5MTc1MjQsOTE3NTI1LDkxNzUyNiw5MTc1MjcsOTE3NTI4LDkxNzUyOSw5MTc1MzAsOTE3NTMxLDkxNzUzMiw5MTc1MzMsOTE3NTM0LDkxNzUzNSw5MTc1MzYsOTE3NTM3LDkxNzUzOCw5MTc1MzksOTE3NTQwLDkxNzU0MSw5MTc1NDIsOTE3NTQzLDkxNzU0NCw5MTc1NDUsOTE3NTQ2LDkxNzU0Nyw5MTc1NDgsOTE3NTQ5LDkxNzU1MCw5MTc1NTEsOTE3NTUyLDkxNzU1Myw5MTc1NTQsOTE3NTU1LDkxNzU1Niw5MTc1NTcsOTE3NTU4LDkxNzU1OSw5MTc1NjAsOTE3NTYxLDkxNzU2Miw5MTc1NjMsOTE3NTY0LDkxNzU2NSw5MTc1NjYsOTE3NTY3LDkxNzU2OCw5MTc1NjksOTE3NTcwLDkxNzU3MSw5MTc1NzIsOTE3NTczLDkxNzU3NCw5MTc1NzUsOTE3NTc2LDkxNzU3Nyw5MTc1NzgsOTE3NTc5LDkxNzU4MCw5MTc1ODEsOTE3NTgyLDkxNzU4Myw5MTc1ODQsOTE3NTg1LDkxNzU4Niw5MTc1ODcsOTE3NTg4LDkxNzU4OSw5MTc1OTAsOTE3NTkxLDkxNzU5Miw5MTc1OTMsOTE3NTk0LDkxNzU5NSw5MTc1OTYsOTE3NTk3LDkxNzU5OCw5MTc1OTksOTE3NjAwLDkxNzYwMSw5MTc2MDIsOTE3NjAzLDkxNzYwNCw5MTc2MDUsOTE3NjA2LDkxNzYwNyw5MTc2MDgsOTE3NjA5LDkxNzYxMCw5MTc2MTEsOTE3NjEyLDkxNzYxMyw5MTc2MTQsOTE3NjE1LDkxNzYxNiw5MTc2MTcsOTE3NjE4LDkxNzYxOSw5MTc2MjAsOTE3NjIxLDkxNzYyMiw5MTc2MjMsOTE3NjI0LDkxNzYyNSw5MTc2MjYsOTE3NjI3LDkxNzYyOCw5MTc2MjksOTE3NjMwLDkxNzYzMSw5MTc3NjAsOTE3NzYxLDkxNzc2Miw5MTc3NjMsOTE3NzY0LDkxNzc2NSw5MTc3NjYsOTE3NzY3LDkxNzc2OCw5MTc3NjksOTE3NzcwLDkxNzc3MSw5MTc3NzIsOTE3NzczLDkxNzc3NCw5MTc3NzUsOTE3Nzc2LDkxNzc3Nyw5MTc3NzgsOTE3Nzc5LDkxNzc4MCw5MTc3ODEsOTE3NzgyLDkxNzc4Myw5MTc3ODQsOTE3Nzg1LDkxNzc4Niw5MTc3ODcsOTE3Nzg4LDkxNzc4OSw5MTc3OTAsOTE3NzkxLDkxNzc5Miw5MTc3OTMsOTE3Nzk0LDkxNzc5NSw5MTc3OTYsOTE3Nzk3LDkxNzc5OCw5MTc3OTksOTE3ODAwLDkxNzgwMSw5MTc4MDIsOTE3ODAzLDkxNzgwNCw5MTc4MDUsOTE3ODA2LDkxNzgwNyw5MTc4MDgsOTE3ODA5LDkxNzgxMCw5MTc4MTEsOTE3ODEyLDkxNzgxMyw5MTc4MTQsOTE3ODE1LDkxNzgxNiw5MTc4MTcsOTE3ODE4LDkxNzgxOSw5MTc4MjAsOTE3ODIxLDkxNzgyMiw5MTc4MjMsOTE3ODI0LDkxNzgyNSw5MTc4MjYsOTE3ODI3LDkxNzgyOCw5MTc4MjksOTE3ODMwLDkxNzgzMSw5MTc4MzIsOTE3ODMzLDkxNzgzNCw5MTc4MzUsOTE3ODM2LDkxNzgzNyw5MTc4MzgsOTE3ODM5LDkxNzg0MCw5MTc4NDEsOTE3ODQyLDkxNzg0Myw5MTc4NDQsOTE3ODQ1LDkxNzg0Niw5MTc4NDcsOTE3ODQ4LDkxNzg0OSw5MTc4NTAsOTE3ODUxLDkxNzg1Miw5MTc4NTMsOTE3ODU0LDkxNzg1NSw5MTc4NTYsOTE3ODU3LDkxNzg1OCw5MTc4NTksOTE3ODYwLDkxNzg2MSw5MTc4NjIsOTE3ODYzLDkxNzg2NCw5MTc4NjUsOTE3ODY2LDkxNzg2Nyw5MTc4NjgsOTE3ODY5LDkxNzg3MCw5MTc4NzEsOTE3ODcyLDkxNzg3Myw5MTc4NzQsOTE3ODc1LDkxNzg3Niw5MTc4NzcsOTE3ODc4LDkxNzg3OSw5MTc4ODAsOTE3ODgxLDkxNzg4Miw5MTc4ODMsOTE3ODg0LDkxNzg4NSw5MTc4ODYsOTE3ODg3LDkxNzg4OCw5MTc4ODksOTE3ODkwLDkxNzg5MSw5MTc4OTIsOTE3ODkzLDkxNzg5NCw5MTc4OTUsOTE3ODk2LDkxNzg5Nyw5MTc4OTgsOTE3ODk5LDkxNzkwMCw5MTc5MDEsOTE3OTAyLDkxNzkwMyw5MTc5MDQsOTE3OTA1LDkxNzkwNiw5MTc5MDcsOTE3OTA4LDkxNzkwOSw5MTc5MTAsOTE3OTExLDkxNzkxMiw5MTc5MTMsOTE3OTE0LDkxNzkxNSw5MTc5MTYsOTE3OTE3LDkxNzkxOCw5MTc5MTksOTE3OTIwLDkxNzkyMSw5MTc5MjIsOTE3OTIzLDkxNzkyNCw5MTc5MjUsOTE3OTI2LDkxNzkyNyw5MTc5MjgsOTE3OTI5LDkxNzkzMCw5MTc5MzEsOTE3OTMyLDkxNzkzMyw5MTc5MzQsOTE3OTM1LDkxNzkzNiw5MTc5MzcsOTE3OTM4LDkxNzkzOSw5MTc5NDAsOTE3OTQxLDkxNzk0Miw5MTc5NDMsOTE3OTQ0LDkxNzk0NSw5MTc5NDYsOTE3OTQ3LDkxNzk0OCw5MTc5NDksOTE3OTUwLDkxNzk1MSw5MTc5NTIsOTE3OTUzLDkxNzk1NCw5MTc5NTUsOTE3OTU2LDkxNzk1Nyw5MTc5NTgsOTE3OTU5LDkxNzk2MCw5MTc5NjEsOTE3OTYyLDkxNzk2Myw5MTc5NjQsOTE3OTY1LDkxNzk2Niw5MTc5NjcsOTE3OTY4LDkxNzk2OSw5MTc5NzAsOTE3OTcxLDkxNzk3Miw5MTc5NzMsOTE3OTc0LDkxNzk3NSw5MTc5NzYsOTE3OTc3LDkxNzk3OCw5MTc5NzksOTE3OTgwLDkxNzk4MSw5MTc5ODIsOTE3OTgzLDkxNzk4NCw5MTc5ODUsOTE3OTg2LDkxNzk4Nyw5MTc5ODgsOTE3OTg5LDkxNzk5MCw5MTc5OTEsOTE3OTkyLDkxNzk5Myw5MTc5OTQsOTE3OTk1LDkxNzk5Niw5MTc5OTcsOTE3OTk4LDkxNzk5OV0iKX1zdGF0aWMgZ2V0RGF0YSgpe3JldHVybiB0aGlzLl9kYXRhfHwodGhpcy5fZGF0YT1uZXcgU2V0KGVlLmdldFJhd0RhdGEoKSkpLHRoaXMuX2RhdGF9c3RhdGljIGlzSW52aXNpYmxlQ2hhcmFjdGVyKGUpe3JldHVybiBlZS5nZXREYXRhKCkuaGFzKGUpfXN0YXRpYyBnZXQgY29kZVBvaW50cygpe3JldHVybiBlZS5nZXREYXRhKCl9fWVlLl9kYXRhPXZvaWQgMDtjbGFzcyB0ZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLm1ldGhvZD1uLHRoaXMuYXJncz1yLHRoaXMudHlwZT0wfX1jbGFzcyBuZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5zZXE9dCx0aGlzLnJlcz1uLHRoaXMuZXJyPXIsdGhpcy50eXBlPTF9fWNsYXNzIHJle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnROYW1lPW4sdGhpcy5hcmc9cix0aGlzLnR5cGU9Mn19Y2xhc3MgaWV7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnQ9bix0aGlzLnR5cGU9M319Y2xhc3Mgb2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLnR5cGU9NH19Y2xhc3MgYWV7Y29uc3RydWN0b3IoZSl7dGhpcy5fd29ya2VySWQ9LTEsdGhpcy5faGFuZGxlcj1lLHRoaXMuX2xhc3RTZW50UmVxPTAsdGhpcy5fcGVuZGluZ1JlcGxpZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9wZW5kaW5nRW1pdHRlcnM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nRXZlbnRzPW5ldyBNYXB9c2V0V29ya2VySWQoZSl7dGhpcy5fd29ya2VySWQ9ZX1zZW5kTWVzc2FnZShlLHQpe2NvbnN0IG49U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpO3JldHVybiBuZXcgUHJvbWlzZSgoKHIsaSk9Pnt0aGlzLl9wZW5kaW5nUmVwbGllc1tuXT17cmVzb2x2ZTpyLHJlamVjdDppfSx0aGlzLl9zZW5kKG5ldyB0ZSh0aGlzLl93b3JrZXJJZCxuLGUsdCkpfSkpfWxpc3RlbihlLHQpe2xldCBuPW51bGw7Y29uc3Qgcj1uZXcgQih7b25GaXJzdExpc3RlbmVyQWRkOigpPT57bj1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzLnNldChuLHIpLHRoaXMuX3NlbmQobmV3IHJlKHRoaXMuX3dvcmtlcklkLG4sZSx0KSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT57dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmRlbGV0ZShuKSx0aGlzLl9zZW5kKG5ldyBvZSh0aGlzLl93b3JrZXJJZCxuKSksbj1udWxsfX0pO3JldHVybiByLmV2ZW50fWhhbmRsZU1lc3NhZ2UoZSl7ZSYmZS52c1dvcmtlciYmKC0xIT09dGhpcy5fd29ya2VySWQmJmUudnNXb3JrZXIhPT10aGlzLl93b3JrZXJJZHx8dGhpcy5faGFuZGxlTWVzc2FnZShlKSl9X2hhbmRsZU1lc3NhZ2UoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLl9oYW5kbGVSZXBseU1lc3NhZ2UoZSk7Y2FzZSAwOnJldHVybiB0aGlzLl9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKTtjYXNlIDI6cmV0dXJuIHRoaXMuX2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKTtjYXNlIDM6cmV0dXJuIHRoaXMuX2hhbmRsZUV2ZW50TWVzc2FnZShlKTtjYXNlIDQ6cmV0dXJuIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpfX1faGFuZGxlUmVwbHlNZXNzYWdlKGUpe2lmKCF0aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV0pcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJHb3QgcmVwbHkgdG8gdW5rbm93biBzZXEiKTtjb25zdCB0PXRoaXMuX3BlbmRpbmdSZXBsaWVzW2Uuc2VxXTtpZihkZWxldGUgdGhpcy5fcGVuZGluZ1JlcGxpZXNbZS5zZXFdLGUuZXJyKXtsZXQgbj1lLmVycjtyZXR1cm4gZS5lcnIuJGlzRXJyb3ImJihuPW5ldyBFcnJvcixuLm5hbWU9ZS5lcnIubmFtZSxuLm1lc3NhZ2U9ZS5lcnIubWVzc2FnZSxuLnN0YWNrPWUuZXJyLnN0YWNrKSx2b2lkIHQucmVqZWN0KG4pfXQucmVzb2x2ZShlLnJlcyl9X2hhbmRsZVJlcXVlc3RNZXNzYWdlKGUpe2NvbnN0IHQ9ZS5yZXE7dGhpcy5faGFuZGxlci5oYW5kbGVNZXNzYWdlKGUubWV0aG9kLGUuYXJncykudGhlbigoZT0+e3RoaXMuX3NlbmQobmV3IG5lKHRoaXMuX3dvcmtlcklkLHQsZSx2b2lkIDApKX0pLChlPT57ZS5kZXRhaWwgaW5zdGFuY2VvZiBFcnJvciYmKGUuZGV0YWlsPW4oZS5kZXRhaWwpKSx0aGlzLl9zZW5kKG5ldyBuZSh0aGlzLl93b3JrZXJJZCx0LHZvaWQgMCxuKGUpKSl9KSl9X2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKXtjb25zdCB0PWUucmVxLG49dGhpcy5faGFuZGxlci5oYW5kbGVFdmVudChlLmV2ZW50TmFtZSxlLmFyZykoKGU9Pnt0aGlzLl9zZW5kKG5ldyBpZSh0aGlzLl93b3JrZXJJZCx0LGUpKX0pKTt0aGlzLl9wZW5kaW5nRXZlbnRzLnNldCh0LG4pfV9oYW5kbGVFdmVudE1lc3NhZ2UoZSl7dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmhhcyhlLnJlcSk/dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmdldChlLnJlcSkuZmlyZShlLmV2ZW50KTpjb25zb2xlLndhcm4oIkdvdCBldmVudCBmb3IgdW5rbm93biByZXEiKX1faGFuZGxlVW5zdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSl7dGhpcy5fcGVuZGluZ0V2ZW50cy5oYXMoZS5yZXEpPyh0aGlzLl9wZW5kaW5nRXZlbnRzLmdldChlLnJlcSkuZGlzcG9zZSgpLHRoaXMuX3BlbmRpbmdFdmVudHMuZGVsZXRlKGUucmVxKSk6Y29uc29sZS53YXJuKCJHb3QgdW5zdWJzY3JpYmUgZm9yIHVua25vd24gcmVxIil9X3NlbmQoZSl7Y29uc3QgdD1bXTtpZigwPT09ZS50eXBlKWZvcihsZXQgbj0wO248ZS5hcmdzLmxlbmd0aDtuKyspZS5hcmdzW25daW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdC5wdXNoKGUuYXJnc1tuXSk7ZWxzZSAxPT09ZS50eXBlJiZlLnJlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZ0LnB1c2goZS5yZXMpO3RoaXMuX2hhbmRsZXIuc2VuZE1lc3NhZ2UoZSx0KX19ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIm8iPT09ZVswXSYmIm4iPT09ZVsxXSYmSihlLmNoYXJDb2RlQXQoMikpfWZ1bmN0aW9uIGNlKGUpe3JldHVybi9eb25EeW5hbWljLy50ZXN0KGUpJiZKKGUuY2hhckNvZGVBdCg5KSl9Y2xhc3MgbGV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk9dCx0aGlzLl9yZXF1ZXN0SGFuZGxlcj1udWxsLHRoaXMuX3Byb3RvY29sPW5ldyBhZSh7c2VuZE1lc3NhZ2U6KHQsbik9PntlKHQsbil9LGhhbmRsZU1lc3NhZ2U6KGUsdCk9PnRoaXMuX2hhbmRsZU1lc3NhZ2UoZSx0KSxoYW5kbGVFdmVudDooZSx0KT0+dGhpcy5faGFuZGxlRXZlbnQoZSx0KX0pfW9ubWVzc2FnZShlKXt0aGlzLl9wcm90b2NvbC5oYW5kbGVNZXNzYWdlKGUpfV9oYW5kbGVNZXNzYWdlKGUsdCl7aWYoIiRpbml0aWFsaXplIj09PWUpcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlcltlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0uYXBwbHkodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19X2hhbmRsZUV2ZW50KGUsdCl7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciIpO2lmKGNlKGUpKXtjb25zdCBuPXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmNhbGwodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGR5bmFtaWMgZXZlbnQgJHtlfSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIG59aWYoc2UoZSkpe2NvbnN0IHQ9dGhpcy5fcmVxdWVzdEhhbmRsZXJbZV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiB0fXRocm93IG5ldyBFcnJvcihgTWFsZm9ybWVkIGV2ZW50IG5hbWUgJHtlfWApfWluaXRpYWxpemUoZSx0LG4scil7dGhpcy5fcHJvdG9jb2wuc2V0V29ya2VySWQoZSk7Y29uc3QgaT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1lPT5mdW5jdGlvbigpe2NvbnN0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0KGUsbil9LGk9ZT0+ZnVuY3Rpb24odCl7cmV0dXJuIG4oZSx0KX0sbz17fTtmb3IoY29uc3QgdCBvZiBlKWNlKHQpP29bdF09aSh0KTpzZSh0KT9vW3RdPW4odCx2b2lkIDApOm9bdF09cih0KTtyZXR1cm4gb30ociwoKGUsdCk9PnRoaXMuX3Byb3RvY29sLnNlbmRNZXNzYWdlKGUsdCkpLCgoZSx0KT0+dGhpcy5fcHJvdG9jb2wubGlzdGVuKGUsdCkpKTtyZXR1cm4gdGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5Pyh0aGlzLl9yZXF1ZXN0SGFuZGxlcj10aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3RvcnkoaSksUHJvbWlzZS5yZXNvbHZlKEgodGhpcy5fcmVxdWVzdEhhbmRsZXIpKSk6KHQmJih2b2lkIDAhPT10LmJhc2VVcmwmJmRlbGV0ZSB0LmJhc2VVcmwsdm9pZCAwIT09dC5wYXRocyYmdm9pZCAwIT09dC5wYXRocy52cyYmZGVsZXRlIHQucGF0aHMudnMsdm9pZCAwIT09dHlwZW9mIHQudHJ1c3RlZFR5cGVzUG9saWN5JiZkZWxldGUgdC50cnVzdGVkVHlwZXNQb2xpY3ksdC5jYXRjaEVycm9yPSEwLE4ucmVxdWlyZS5jb25maWcodCkpLG5ldyBQcm9taXNlKCgoZSx0KT0+eygwLE4ucmVxdWlyZSkoW25dLChuPT57dGhpcy5fcmVxdWVzdEhhbmRsZXI9bi5jcmVhdGUoaSksdGhpcy5fcmVxdWVzdEhhbmRsZXI/ZShIKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSk6dChuZXcgRXJyb3IoIk5vIFJlcXVlc3RIYW5kbGVyISIpKX0pLHQpfSkpKX19Y2xhc3MgdWV7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5vcmlnaW5hbFN0YXJ0PWUsdGhpcy5vcmlnaW5hbExlbmd0aD10LHRoaXMubW9kaWZpZWRTdGFydD1uLHRoaXMubW9kaWZpZWRMZW5ndGg9cn1nZXRPcmlnaW5hbEVuZCgpe3JldHVybiB0aGlzLm9yaWdpbmFsU3RhcnQrdGhpcy5vcmlnaW5hbExlbmd0aH1nZXRNb2RpZmllZEVuZCgpe3JldHVybiB0aGlzLm1vZGlmaWVkU3RhcnQrdGhpcy5tb2RpZmllZExlbmd0aH19ZnVuY3Rpb24gaGUoZSx0KXtyZXR1cm4odDw8NSktdCtlfDB9ZnVuY3Rpb24gZmUoZSx0KXt0PWhlKDE0OTQxNyx0KTtmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspdD1oZShlLmNoYXJDb2RlQXQobiksdCk7cmV0dXJuIHR9Y2xhc3MgZGV7Y29uc3RydWN0b3IoZSl7dGhpcy5zb3VyY2U9ZX1nZXRFbGVtZW50cygpe2NvbnN0IGU9dGhpcy5zb3VyY2UsdD1uZXcgSW50MzJBcnJheShlLmxlbmd0aCk7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRbbl09ZS5jaGFyQ29kZUF0KG4pO3JldHVybiB0fX1mdW5jdGlvbiBtZShlLHQsbil7cmV0dXJuIG5ldyB2ZShuZXcgZGUoZSksbmV3IGRlKHQpKS5Db21wdXRlRGlmZihuKS5jaGFuZ2VzfWNsYXNzIGdle3N0YXRpYyBBc3NlcnQoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodCl9fWNsYXNzIHBle3N0YXRpYyBDb3B5KGUsdCxuLHIsaSl7Zm9yKGxldCBvPTA7bzxpO28rKyluW3Irb109ZVt0K29dfXN0YXRpYyBDb3B5MihlLHQsbixyLGkpe2ZvcihsZXQgbz0wO288aTtvKyspbltyK29dPWVbdCtvXX19Y2xhc3MgYmV7Y29uc3RydWN0b3IoKXt0aGlzLm1fY2hhbmdlcz1bXSx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wfU1hcmtOZXh0Q2hhbmdlKCl7KHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLm1fY2hhbmdlcy5wdXNoKG5ldyB1ZSh0aGlzLm1fb3JpZ2luYWxTdGFydCx0aGlzLm1fb3JpZ2luYWxDb3VudCx0aGlzLm1fbW9kaWZpZWRTdGFydCx0aGlzLm1fbW9kaWZpZWRDb3VudCkpLHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MCx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjR9QWRkT3JpZ2luYWxFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX29yaWdpbmFsQ291bnQrK31BZGRNb2RpZmllZEVsZW1lbnQoZSx0KXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCxlKSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRDb3VudCsrfWdldENoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlc31nZXRSZXZlcnNlQ2hhbmdlcygpe3JldHVybih0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzLnJldmVyc2UoKSx0aGlzLm1fY2hhbmdlc319Y2xhc3MgdmV7Y29uc3RydWN0b3IoZSx0LG49bnVsbCl7dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGU9bix0aGlzLl9vcmlnaW5hbFNlcXVlbmNlPWUsdGhpcy5fbW9kaWZpZWRTZXF1ZW5jZT10O2NvbnN0W3IsaSxvXT12ZS5fZ2V0RWxlbWVudHMoZSksW2EscyxjXT12ZS5fZ2V0RWxlbWVudHModCk7dGhpcy5faGFzU3RyaW5ncz1vJiZjLHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHM9cix0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoPWksdGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50cz1hLHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2g9cyx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdfXN0YXRpYyBfaXNTdHJpbmdBcnJheShlKXtyZXR1cm4gZS5sZW5ndGg+MCYmInN0cmluZyI9PXR5cGVvZiBlWzBdfXN0YXRpYyBfZ2V0RWxlbWVudHMoZSl7Y29uc3QgdD1lLmdldEVsZW1lbnRzKCk7aWYodmUuX2lzU3RyaW5nQXJyYXkodCkpe2NvbnN0IGU9bmV3IEludDMyQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllW25dPWZlKHRbbl0sMCk7cmV0dXJuW3QsZSwhMF19cmV0dXJuIHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5P1tbXSx0LCExXTpbW10sbmV3IEludDMyQXJyYXkodCksITFdfUVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfUVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoZSx0KXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKGUsdCkpcmV0dXJuITE7cmV0dXJuIHZlLl9nZXRTdHJpY3RFbGVtZW50KHRoaXMuX29yaWdpbmFsU2VxdWVuY2UsZSk9PT12ZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9tb2RpZmllZFNlcXVlbmNlLHQpfXN0YXRpYyBfZ2V0U3RyaWN0RWxlbWVudChlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldFN0cmljdEVsZW1lbnQ/ZS5nZXRTdHJpY3RFbGVtZW50KHQpOm51bGx9T3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3RdKX1Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfUNvbXB1dGVEaWZmKGUpe3JldHVybiB0aGlzLl9Db21wdXRlRGlmZigwLHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTEsMCx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLGUpfV9Db21wdXRlRGlmZihlLHQsbixyLGkpe2NvbnN0IG89WyExXTtsZXQgYT10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKGUsdCxuLHIsbyk7cmV0dXJuIGkmJihhPXRoaXMuUHJldHRpZnlDaGFuZ2VzKGEpKSx7cXVpdEVhcmx5Om9bMF0sY2hhbmdlczphfX1Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLHQsbixyLGkpe2ZvcihpWzBdPSExO2U8PXQmJm48PXImJnRoaXMuRWxlbWVudHNBcmVFcXVhbChlLG4pOyllKyssbisrO2Zvcig7dD49ZSYmcj49biYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQscik7KXQtLSxyLS07aWYoZT50fHxuPnIpe2xldCBpO3JldHVybiBuPD1yPyhnZS5Bc3NlcnQoZT09PXQrMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksaT1bbmV3IHVlKGUsMCxuLHItbisxKV0pOmU8PXQ/KGdlLkFzc2VydChuPT09cisxLCJtb2RpZmllZFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gbW9kaWZpZWRFbmQiKSxpPVtuZXcgdWUoZSx0LWUrMSxuLDApXSk6KGdlLkFzc2VydChlPT09dCsxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxnZS5Bc3NlcnQobj09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksaT1bXSksaX1jb25zdCBvPVswXSxhPVswXSxzPXRoaXMuQ29tcHV0ZVJlY3Vyc2lvblBvaW50KGUsdCxuLHIsbyxhLGkpLGM9b1swXSxsPWFbMF07aWYobnVsbCE9PXMpcmV0dXJuIHM7aWYoIWlbMF0pe2NvbnN0IG89dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLGMsbixsLGkpO2xldCBhPVtdO3JldHVybiBhPWlbMF0/W25ldyB1ZShjKzEsdC0oYysxKSsxLGwrMSxyLShsKzEpKzEpXTp0aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKGMrMSx0LGwrMSxyLGkpLHRoaXMuQ29uY2F0ZW5hdGVDaGFuZ2VzKG8sYSl9cmV0dXJuW25ldyB1ZShlLHQtZSsxLG4sci1uKzEpXX1XQUxLVFJBQ0UoZSx0LG4scixpLG8sYSxzLGMsbCx1LGgsZixkLG0sZyxwLGIpe2xldCB2PW51bGwseT1udWxsLEM9bmV3IGJlLHc9dCxfPW4sUz1mWzBdLWdbMF0tcixBPS0xMDczNzQxODI0LEU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5Lmxlbmd0aC0xO2Rve2NvbnN0IHQ9UytlO3Q9PT13fHx0PF8mJmNbdC0xXTxjW3QrMV0/KGQ9KHU9Y1t0KzFdKS1TLXIsdTxBJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT11LEMuQWRkTW9kaWZpZWRFbGVtZW50KHUrMSxkKSxTPXQrMS1lKTooZD0odT1jW3QtMV0rMSktUy1yLHU8QSYmQy5NYXJrTmV4dENoYW5nZSgpLEE9dS0xLEMuQWRkT3JpZ2luYWxFbGVtZW50KHUsZCsxKSxTPXQtMS1lKSxFPj0wJiYoZT0oYz10aGlzLm1fZm9yd2FyZEhpc3RvcnlbRV0pWzBdLHc9MSxfPWMubGVuZ3RoLTEpfXdoaWxlKC0tRT49LTEpO2lmKHY9Qy5nZXRSZXZlcnNlQ2hhbmdlcygpLGJbMF0pe2xldCBlPWZbMF0rMSx0PWdbMF0rMTtpZihudWxsIT09diYmdi5sZW5ndGg+MCl7Y29uc3Qgbj12W3YubGVuZ3RoLTFdO2U9TWF0aC5tYXgoZSxuLmdldE9yaWdpbmFsRW5kKCkpLHQ9TWF0aC5tYXgodCxuLmdldE1vZGlmaWVkRW5kKCkpfXk9W25ldyB1ZShlLGgtZSsxLHQsbS10KzEpXX1lbHNle0M9bmV3IGJlLHc9byxfPWEsUz1mWzBdLWdbMF0tcyxBPTEwNzM3NDE4MjQsRT1wP3RoaXMubV9yZXZlcnNlSGlzdG9yeS5sZW5ndGgtMTp0aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTI7ZG97Y29uc3QgZT1TK2k7ZT09PXd8fGU8XyYmbFtlLTFdPj1sW2UrMV0/KGQ9KHU9bFtlKzFdLTEpLVMtcyx1PkEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUrMSxDLkFkZE9yaWdpbmFsRWxlbWVudCh1KzEsZCsxKSxTPWUrMS1pKTooZD0odT1sW2UtMV0pLVMtcyx1PkEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUsQy5BZGRNb2RpZmllZEVsZW1lbnQodSsxLGQrMSksUz1lLTEtaSksRT49MCYmKGk9KGw9dGhpcy5tX3JldmVyc2VIaXN0b3J5W0VdKVswXSx3PTEsXz1sLmxlbmd0aC0xKX13aGlsZSgtLUU+PS0xKTt5PUMuZ2V0Q2hhbmdlcygpfXJldHVybiB0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyh2LHkpfUNvbXB1dGVSZWN1cnNpb25Qb2ludChlLHQsbixyLGksbyxhKXtsZXQgcz0wLGM9MCxsPTAsdT0wLGg9MCxmPTA7ZS0tLG4tLSxpWzBdPTAsb1swXT0wLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W107Y29uc3QgZD10LWUrKHItbiksbT1kKzEsZz1uZXcgSW50MzJBcnJheShtKSxwPW5ldyBJbnQzMkFycmF5KG0pLGI9ci1uLHY9dC1lLHk9ZS1uLEM9dC1yLHc9KHYtYiklMj09MDtnW2JdPWUscFt2XT10LGFbMF09ITE7Zm9yKGxldCBfPTE7Xzw9ZC8yKzE7XysrKXtsZXQgZD0wLFM9MDtsPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoYi1fLF8sYixtKSx1PXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoYitfLF8sYixtKTtmb3IobGV0IGU9bDtlPD11O2UrPTIpe3M9ZT09PWx8fGU8dSYmZ1tlLTFdPGdbZSsxXT9nW2UrMV06Z1tlLTFdKzEsYz1zLShlLWIpLXk7Y29uc3Qgbj1zO2Zvcig7czx0JiZjPHImJnRoaXMuRWxlbWVudHNBcmVFcXVhbChzKzEsYysxKTspcysrLGMrKztpZihnW2VdPXMscytjPmQrUyYmKGQ9cyxTPWMpLCF3JiZNYXRoLmFicyhlLXYpPD1fLTEmJnM+PXBbZV0pcmV0dXJuIGlbMF09cyxvWzBdPWMsbjw9cFtlXSYmXzw9MTQ0OD90aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSk6bnVsbH1jb25zdCBBPShkLWUrKFMtbiktXykvMjtpZihudWxsIT09dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUmJiF0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZShkLEEpKXJldHVybiBhWzBdPSEwLGlbMF09ZCxvWzBdPVMsQT4wJiZfPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKGIsbCx1LHksdixoLGYsQyxnLHAscyx0LGksYyxyLG8sdyxhKTooZSsrLG4rKyxbbmV3IHVlKGUsdC1lKzEsbixyLW4rMSldKTtoPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQodi1fLF8sdixtKSxmPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoditfLF8sdixtKTtmb3IobGV0IGQ9aDtkPD1mO2QrPTIpe3M9ZD09PWh8fGQ8ZiYmcFtkLTFdPj1wW2QrMV0/cFtkKzFdLTE6cFtkLTFdLGM9cy0oZC12KS1DO2NvbnN0IG09cztmb3IoO3M+ZSYmYz5uJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwocyxjKTspcy0tLGMtLTtpZihwW2RdPXMsdyYmTWF0aC5hYnMoZC1iKTw9XyYmczw9Z1tkXSlyZXR1cm4gaVswXT1zLG9bMF09YyxtPj1nW2RdJiZfPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKGIsbCx1LHksdixoLGYsQyxnLHAscyx0LGksYyxyLG8sdyxhKTpudWxsfWlmKF88PTE0NDcpe2xldCBlPW5ldyBJbnQzMkFycmF5KHUtbCsyKTtlWzBdPWItbCsxLHBlLkNvcHkyKGcsbCxlLDEsdS1sKzEpLHRoaXMubV9mb3J3YXJkSGlzdG9yeS5wdXNoKGUpLGU9bmV3IEludDMyQXJyYXkoZi1oKzIpLGVbMF09di1oKzEscGUuQ29weTIocCxoLGUsMSxmLWgrMSksdGhpcy5tX3JldmVyc2VIaXN0b3J5LnB1c2goZSl9fXJldHVybiB0aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSl9UHJldHRpZnlDaGFuZ2VzKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBuPWVbdF0scj10PGUubGVuZ3RoLTE/ZVt0KzFdLm9yaWdpbmFsU3RhcnQ6dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgsaT10PGUubGVuZ3RoLTE/ZVt0KzFdLm1vZGlmaWVkU3RhcnQ6dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgsbz1uLm9yaWdpbmFsTGVuZ3RoPjAsYT1uLm1vZGlmaWVkTGVuZ3RoPjA7Zm9yKDtuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aDxyJiZuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aDxpJiYoIW98fHRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKG4ub3JpZ2luYWxTdGFydCxuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCkpJiYoIWF8fHRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKG4ubW9kaWZpZWRTdGFydCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCkpOyl7Y29uc3QgZT10aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwobi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRTdGFydCk7aWYodGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKSYmIWUpYnJlYWs7bi5vcmlnaW5hbFN0YXJ0Kyssbi5tb2RpZmllZFN0YXJ0Kyt9Y29uc3Qgcz1bbnVsbF07dDxlLmxlbmd0aC0xJiZ0aGlzLkNoYW5nZXNPdmVybGFwKGVbdF0sZVt0KzFdLHMpJiYoZVt0XT1zWzBdLGUuc3BsaWNlKHQrMSwxKSx0LS0pfWZvcihsZXQgdD1lLmxlbmd0aC0xO3Q+PTA7dC0tKXtjb25zdCBuPWVbdF07bGV0IHI9MCxpPTA7aWYodD4wKXtjb25zdCBuPWVbdC0xXTtyPW4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLGk9bi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGh9Y29uc3Qgbz1uLm9yaWdpbmFsTGVuZ3RoPjAsYT1uLm1vZGlmaWVkTGVuZ3RoPjA7bGV0IHM9MCxjPXRoaXMuX2JvdW5kYXJ5U2NvcmUobi5vcmlnaW5hbFN0YXJ0LG4ub3JpZ2luYWxMZW5ndGgsbi5tb2RpZmllZFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGgpO2ZvcihsZXQgZT0xOztlKyspe2NvbnN0IHQ9bi5vcmlnaW5hbFN0YXJ0LWUsbD1uLm1vZGlmaWVkU3RhcnQtZTtpZih0PHJ8fGw8aSlicmVhaztpZihvJiYhdGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwodCx0K24ub3JpZ2luYWxMZW5ndGgpKWJyZWFrO2lmKGEmJiF0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChsLGwrbi5tb2RpZmllZExlbmd0aCkpYnJlYWs7Y29uc3QgdT0odD09PXImJmw9PT1pPzU6MCkrdGhpcy5fYm91bmRhcnlTY29yZSh0LG4ub3JpZ2luYWxMZW5ndGgsbCxuLm1vZGlmaWVkTGVuZ3RoKTt1PmMmJihjPXUscz1lKX1uLm9yaWdpbmFsU3RhcnQtPXMsbi5tb2RpZmllZFN0YXJ0LT1zO2NvbnN0IGw9W251bGxdO3Q+MCYmdGhpcy5DaGFuZ2VzT3ZlcmxhcChlW3QtMV0sZVt0XSxsKSYmKGVbdC0xXT1sWzBdLGUuc3BsaWNlKHQsMSksdCsrKX1pZih0aGlzLl9oYXNTdHJpbmdzKWZvcihsZXQgdD0xLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1lW3QtMV0scj1lW3RdLGk9ci5vcmlnaW5hbFN0YXJ0LW4ub3JpZ2luYWxTdGFydC1uLm9yaWdpbmFsTGVuZ3RoLG89bi5vcmlnaW5hbFN0YXJ0LGE9ci5vcmlnaW5hbFN0YXJ0K3Iub3JpZ2luYWxMZW5ndGgscz1hLW8sYz1uLm1vZGlmaWVkU3RhcnQsbD1yLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aCx1PWwtYztpZihpPDUmJnM8MjAmJnU8MjApe2NvbnN0IGU9dGhpcy5fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShvLHMsYyx1LGkpO2lmKGUpe2NvbnN0W3Qsb109ZTt0PT09bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgmJm89PT1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aHx8KG4ub3JpZ2luYWxMZW5ndGg9dC1uLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZExlbmd0aD1vLW4ubW9kaWZpZWRTdGFydCxyLm9yaWdpbmFsU3RhcnQ9dCtpLHIubW9kaWZpZWRTdGFydD1vK2ksci5vcmlnaW5hbExlbmd0aD1hLXIub3JpZ2luYWxTdGFydCxyLm1vZGlmaWVkTGVuZ3RoPWwtci5tb2RpZmllZFN0YXJ0KX19fXJldHVybiBlfV9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKGUsdCxuLHIsaSl7aWYodDxpfHxyPGkpcmV0dXJuIG51bGw7Y29uc3Qgbz1lK3QtaSsxLGE9bityLWkrMTtsZXQgcz0wLGM9MCxsPTA7Zm9yKGxldCB0PWU7dDxvO3QrKylmb3IobGV0IGU9bjtlPGE7ZSsrKXtjb25zdCBuPXRoaXMuX2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKHQsZSxpKTtuPjAmJm4+cyYmKHM9bixjPXQsbD1lKX1yZXR1cm4gcz4wP1tjLGxdOm51bGx9X2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKGUsdCxuKXtsZXQgcj0wO2ZvcihsZXQgaT0wO2k8bjtpKyspe2lmKCF0aGlzLkVsZW1lbnRzQXJlRXF1YWwoZStpLHQraSkpcmV0dXJuIDA7cis9dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlK2ldLmxlbmd0aH1yZXR1cm4gcn1fT3JpZ2luYWxJc0JvdW5kYXJ5KGUpe3JldHVybiBlPD0wfHxlPj10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xfHx0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXSl9X09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeShlLHQpe2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShlKXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGUtMSkpcmV0dXJuITA7aWYodD4wKXtjb25zdCBuPWUrdDtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkobi0xKXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KG4pKXJldHVybiEwfXJldHVybiExfV9Nb2RpZmllZElzQm91bmRhcnkoZSl7cmV0dXJuIGU8PTB8fGU+PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTF8fHRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW2VdKX1fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KGUsdCl7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGUpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoZS0xKSlyZXR1cm4hMDtpZih0PjApe2NvbnN0IG49ZSt0O2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShuLTEpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkobikpcmV0dXJuITB9cmV0dXJuITF9X2JvdW5kYXJ5U2NvcmUoZSx0LG4scil7cmV0dXJuKHRoaXMuX09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeShlLHQpPzE6MCkrKHRoaXMuX01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeShuLHIpPzE6MCl9Q29uY2F0ZW5hdGVDaGFuZ2VzKGUsdCl7Y29uc3Qgbj1bXTtpZigwPT09ZS5sZW5ndGh8fDA9PT10Lmxlbmd0aClyZXR1cm4gdC5sZW5ndGg+MD90OmU7aWYodGhpcy5DaGFuZ2VzT3ZlcmxhcChlW2UubGVuZ3RoLTFdLHRbMF0sbikpe2NvbnN0IHI9bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoLTEpO3JldHVybiBwZS5Db3B5KGUsMCxyLDAsZS5sZW5ndGgtMSkscltlLmxlbmd0aC0xXT1uWzBdLHBlLkNvcHkodCwxLHIsZS5sZW5ndGgsdC5sZW5ndGgtMSkscn17Y29uc3Qgbj1uZXcgQXJyYXkoZS5sZW5ndGgrdC5sZW5ndGgpO3JldHVybiBwZS5Db3B5KGUsMCxuLDAsZS5sZW5ndGgpLHBlLkNvcHkodCwwLG4sZS5sZW5ndGgsdC5sZW5ndGgpLG59fUNoYW5nZXNPdmVybGFwKGUsdCxuKXtpZihnZS5Bc3NlcnQoZS5vcmlnaW5hbFN0YXJ0PD10Lm9yaWdpbmFsU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksZ2UuQXNzZXJ0KGUubW9kaWZpZWRTdGFydDw9dC5tb2RpZmllZFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoPj10Lm9yaWdpbmFsU3RhcnR8fGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoPj10Lm1vZGlmaWVkU3RhcnQpe2NvbnN0IHI9ZS5vcmlnaW5hbFN0YXJ0O2xldCBpPWUub3JpZ2luYWxMZW5ndGg7Y29uc3Qgbz1lLm1vZGlmaWVkU3RhcnQ7bGV0IGE9ZS5tb2RpZmllZExlbmd0aDtyZXR1cm4gZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGg+PXQub3JpZ2luYWxTdGFydCYmKGk9dC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtZS5vcmlnaW5hbFN0YXJ0KSxlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aD49dC5tb2RpZmllZFN0YXJ0JiYoYT10Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC1lLm1vZGlmaWVkU3RhcnQpLG5bMF09bmV3IHVlKHIsaSxvLGEpLCEwfXJldHVybiBuWzBdPW51bGwsITF9Q2xpcERpYWdvbmFsQm91bmQoZSx0LG4scil7aWYoZT49MCYmZTxyKXJldHVybiBlO2NvbnN0IGk9dCUyPT0wO2lmKGU8MCl7cmV0dXJuIGk9PT0obiUyPT0wKT8wOjF9cmV0dXJuIGk9PT0oKHItbi0xKSUyPT0wKT9yLTE6ci0yfX1sZXQgeWU7aWYodm9pZCAwIT09Ti52c2NvZGUmJnZvaWQgMCE9PU4udnNjb2RlLnByb2Nlc3Mpe2NvbnN0IGU9Ti52c2NvZGUucHJvY2Vzczt5ZT17Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIGUucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIGUuYXJjaH0sZ2V0IGVudigpe3JldHVybiBlLmVudn0sY3dkOigpPT5lLmN3ZCgpfX1lbHNlIHllPSJ1bmRlZmluZWQiIT10eXBlb2YgcHJvY2Vzcz97Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIHByb2Nlc3MucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIHByb2Nlc3MuYXJjaH0sZ2V0IGVudigpe3JldHVybiBwcm9jZXNzLmVudn0sY3dkOigpPT5wcm9jZXNzLmVudi5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfTp7Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIFQ/IndpbjMyIjpPPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZDooKT0+Ii8ifTtjb25zdCBDZT15ZS5jd2Qsd2U9eWUuZW52LF9lPXllLnBsYXRmb3JtLFNlPTQ2LEFlPTQ3LEVlPTkyLHhlPTU4O2NsYXNzIE5lIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LG4pe2xldCByOyJzdHJpbmciPT10eXBlb2YgdCYmMD09PXQuaW5kZXhPZigibm90ICIpPyhyPSJtdXN0IG5vdCBiZSIsdD10LnJlcGxhY2UoL15ub3QgLywiIikpOnI9Im11c3QgYmUiO2NvbnN0IGk9LTEhPT1lLmluZGV4T2YoIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7bGV0IG89YFRoZSAiJHtlfSIgJHtpfSAke3J9IG9mIHR5cGUgJHt0fWA7bys9Ii4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBuLHN1cGVyKG8pLHRoaXMuY29kZT0iRVJSX0lOVkFMSURfQVJHX1RZUEUifX1mdW5jdGlvbiBrZShlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgTmUodCwic3RyaW5nIixlKX1mdW5jdGlvbiBMZShlKXtyZXR1cm4gZT09PUFlfHxlPT09RWV9ZnVuY3Rpb24gVGUoZSl7cmV0dXJuIGU9PT1BZX1mdW5jdGlvbiBPZShlKXtyZXR1cm4gZT49NjUmJmU8PTkwfHxlPj05NyYmZTw9MTIyfWZ1bmN0aW9uIEllKGUsdCxuLHIpe2xldCBpPSIiLG89MCxhPS0xLHM9MCxjPTA7Zm9yKGxldCBsPTA7bDw9ZS5sZW5ndGg7KytsKXtpZihsPGUubGVuZ3RoKWM9ZS5jaGFyQ29kZUF0KGwpO2Vsc2V7aWYocihjKSlicmVhaztjPUFlfWlmKHIoYykpe2lmKGE9PT1sLTF8fDE9PT1zKTtlbHNlIGlmKDI9PT1zKXtpZihpLmxlbmd0aDwyfHwyIT09b3x8aS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09U2V8fGkuY2hhckNvZGVBdChpLmxlbmd0aC0yKSE9PVNlKXtpZihpLmxlbmd0aD4yKXtjb25zdCBlPWkubGFzdEluZGV4T2Yobik7LTE9PT1lPyhpPSIiLG89MCk6KGk9aS5zbGljZSgwLGUpLG89aS5sZW5ndGgtMS1pLmxhc3RJbmRleE9mKG4pKSxhPWwscz0wO2NvbnRpbnVlfWlmKDAhPT1pLmxlbmd0aCl7aT0iIixvPTAsYT1sLHM9MDtjb250aW51ZX19dCYmKGkrPWkubGVuZ3RoPjA/YCR7bn0uLmA6Ii4uIixvPTIpfWVsc2UgaS5sZW5ndGg+MD9pKz1gJHtufSR7ZS5zbGljZShhKzEsbCl9YDppPWUuc2xpY2UoYSsxLGwpLG89bC1hLTE7YT1sLHM9MH1lbHNlIGM9PT1TZSYmLTEhPT1zPysrczpzPS0xfXJldHVybiBpfWZ1bmN0aW9uIE1lKGUsdCl7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBuZXcgTmUoInBhdGhPYmplY3QiLCJPYmplY3QiLHQpO2NvbnN0IG49dC5kaXJ8fHQucm9vdCxyPXQuYmFzZXx8YCR7dC5uYW1lfHwiIn0ke3QuZXh0fHwiIn1gO3JldHVybiBuP249PT10LnJvb3Q/YCR7bn0ke3J9YDpgJHtufSR7ZX0ke3J9YDpyfWNvbnN0IFBlPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49IiIscj0hMTtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0tMTtpLS0pe2xldCBvO2lmKGk+PTApe2lmKG89ZVtpXSxrZShvLCJwYXRoIiksMD09PW8ubGVuZ3RoKWNvbnRpbnVlfWVsc2UgMD09PXQubGVuZ3RoP289Q2UoKToobz13ZVtgPSR7dH1gXXx8Q2UoKSwodm9pZCAwPT09b3x8by5zbGljZSgwLDIpLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkmJm8uY2hhckNvZGVBdCgyKT09PUVlKSYmKG89YCR7dH1cXGApKTtjb25zdCBhPW8ubGVuZ3RoO2xldCBzPTAsYz0iIixsPSExO2NvbnN0IHU9by5jaGFyQ29kZUF0KDApO2lmKDE9PT1hKUxlKHUpJiYocz0xLGw9ITApO2Vsc2UgaWYoTGUodSkpaWYobD0hMCxMZShvLmNoYXJDb2RlQXQoMSkpKXtsZXQgZT0yLHQ9ZTtmb3IoO2U8YSYmIUxlKG8uY2hhckNvZGVBdChlKSk7KWUrKztpZihlPGEmJmUhPT10KXtjb25zdCBuPW8uc2xpY2UodCxlKTtmb3IodD1lO2U8YSYmTGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8YSYmZSE9PXQpe2Zvcih0PWU7ZTxhJiYhTGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2UhPT1hJiZlPT09dHx8KGM9YFxcXFwke259XFwke28uc2xpY2UodCxlKX1gLHM9ZSl9fX1lbHNlIHM9MTtlbHNlIE9lKHUpJiZvLmNoYXJDb2RlQXQoMSk9PT14ZSYmKGM9by5zbGljZSgwLDIpLHM9MixhPjImJkxlKG8uY2hhckNvZGVBdCgyKSkmJihsPSEwLHM9MykpO2lmKGMubGVuZ3RoPjApaWYodC5sZW5ndGg+MCl7aWYoYy50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWVsc2UgdD1jO2lmKHIpe2lmKHQubGVuZ3RoPjApYnJlYWt9ZWxzZSBpZihuPWAke28uc2xpY2Uocyl9XFwke259YCxyPWwsbCYmdC5sZW5ndGg+MClicmVha31yZXR1cm4gbj1JZShuLCFyLCJcXCIsTGUpLHI/YCR7dH1cXCR7bn1gOmAke3R9JHtufWB8fCIuIn0sbm9ybWFsaXplKGUpe2tlKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKDA9PT10KXJldHVybiIuIjtsZXQgbixyPTAsaT0hMTtjb25zdCBvPWUuY2hhckNvZGVBdCgwKTtpZigxPT09dClyZXR1cm4gVGUobyk/IlxcIjplO2lmKExlKG8pKWlmKGk9ITAsTGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiFMZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Y29uc3QgYT1lLnNsaWNlKG8saSk7Zm9yKG89aTtpPHQmJkxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIUxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm5gXFxcXCR7YX1cXCR7ZS5zbGljZShvKX1cXGA7aSE9PW8mJihuPWBcXFxcJHthfVxcJHtlLnNsaWNlKG8saSl9YCxyPWkpfX19ZWxzZSByPTE7ZWxzZSBPZShvKSYmZS5jaGFyQ29kZUF0KDEpPT09eGUmJihuPWUuc2xpY2UoMCwyKSxyPTIsdD4yJiZMZShlLmNoYXJDb2RlQXQoMikpJiYoaT0hMCxyPTMpKTtsZXQgYT1yPHQ/SWUoZS5zbGljZShyKSwhaSwiXFwiLExlKToiIjtyZXR1cm4gMCE9PWEubGVuZ3RofHxpfHwoYT0iLiIpLGEubGVuZ3RoPjAmJkxlKGUuY2hhckNvZGVBdCh0LTEpKSYmKGErPSJcXCIpLHZvaWQgMD09PW4/aT9gXFwke2F9YDphOmk/YCR7bn1cXCR7YX1gOmAke259JHthfWB9LGlzQWJzb2x1dGUoZSl7a2UoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuITE7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIExlKG4pfHx0PjImJk9lKG4pJiZlLmNoYXJDb2RlQXQoMSk9PT14ZSYmTGUoZS5jaGFyQ29kZUF0KDIpKX0sam9pbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2xldCB0LG47Zm9yKGxldCByPTA7cjxlLmxlbmd0aDsrK3Ipe2NvbnN0IGk9ZVtyXTtrZShpLCJwYXRoIiksaS5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1uPWk6dCs9YFxcJHtpfWApfWlmKHZvaWQgMD09PXQpcmV0dXJuIi4iO2xldCByPSEwLGk9MDtpZigic3RyaW5nIj09dHlwZW9mIG4mJkxlKG4uY2hhckNvZGVBdCgwKSkpeysraTtjb25zdCBlPW4ubGVuZ3RoO2U+MSYmTGUobi5jaGFyQ29kZUF0KDEpKSYmKCsraSxlPjImJihMZShuLmNoYXJDb2RlQXQoMikpPysraTpyPSExKSl9aWYocil7Zm9yKDtpPHQubGVuZ3RoJiZMZSh0LmNoYXJDb2RlQXQoaSkpOylpKys7aT49MiYmKHQ9YFxcJHt0LnNsaWNlKGkpfWApfXJldHVybiBQZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoa2UoZSwiZnJvbSIpLGtlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj1QZS5yZXNvbHZlKGUpLHI9UGUucmVzb2x2ZSh0KTtpZihuPT09cilyZXR1cm4iIjtpZigoZT1uLnRvTG93ZXJDYXNlKCkpPT09KHQ9ci50b0xvd2VyQ2FzZSgpKSlyZXR1cm4iIjtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KGkpPT09RWU7KWkrKztsZXQgbz1lLmxlbmd0aDtmb3IoO28tMT5pJiZlLmNoYXJDb2RlQXQoby0xKT09PUVlOylvLS07Y29uc3QgYT1vLWk7bGV0IHM9MDtmb3IoO3M8dC5sZW5ndGgmJnQuY2hhckNvZGVBdChzKT09PUVlOylzKys7bGV0IGM9dC5sZW5ndGg7Zm9yKDtjLTE+cyYmdC5jaGFyQ29kZUF0KGMtMSk9PT1FZTspYy0tO2NvbnN0IGw9Yy1zLHU9YTxsP2E6bDtsZXQgaD0tMSxmPTA7Zm9yKDtmPHU7ZisrKXtjb25zdCBuPWUuY2hhckNvZGVBdChpK2YpO2lmKG4hPT10LmNoYXJDb2RlQXQocytmKSlicmVhaztuPT09RWUmJihoPWYpfWlmKGYhPT11KXtpZigtMT09PWgpcmV0dXJuIHJ9ZWxzZXtpZihsPnUpe2lmKHQuY2hhckNvZGVBdChzK2YpPT09RWUpcmV0dXJuIHIuc2xpY2UocytmKzEpO2lmKDI9PT1mKXJldHVybiByLnNsaWNlKHMrZil9YT51JiYoZS5jaGFyQ29kZUF0KGkrZik9PT1FZT9oPWY6Mj09PWYmJihoPTMpKSwtMT09PWgmJihoPTApfWxldCBkPSIiO2ZvcihmPWkraCsxO2Y8PW87KytmKWYhPT1vJiZlLmNoYXJDb2RlQXQoZikhPT1FZXx8KGQrPTA9PT1kLmxlbmd0aD8iLi4iOiJcXC4uIik7cmV0dXJuIHMrPWgsZC5sZW5ndGg+MD9gJHtkfSR7ci5zbGljZShzLGMpfWA6KHIuY2hhckNvZGVBdChzKT09PUVlJiYrK3Msci5zbGljZShzLGMpKX0sdG9OYW1lc3BhY2VkUGF0aChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIGU7aWYoMD09PWUubGVuZ3RoKXJldHVybiIiO2NvbnN0IHQ9UGUucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1FZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09RWUpe2NvbnN0IGU9dC5jaGFyQ29kZUF0KDIpO2lmKDYzIT09ZSYmZSE9PVNlKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihPZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT14ZSYmdC5jaGFyQ29kZUF0KDIpPT09RWUpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4iLiI7bGV0IG49LTEscj0wO2NvbnN0IGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT10KXJldHVybiBMZShpKT9lOiIuIjtpZihMZShpKSl7aWYobj1yPTEsTGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiFMZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Zm9yKG89aTtpPHQmJkxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIUxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm4gZTtpIT09byYmKG49cj1pKzEpfX19fWVsc2UgT2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PXhlJiYobj10PjImJkxlKGUuY2hhckNvZGVBdCgyKSk/MzoyLHI9bik7bGV0IG89LTEsYT0hMDtmb3IobGV0IG49dC0xO24+PXI7LS1uKWlmKExlKGUuY2hhckNvZGVBdChuKSkpe2lmKCFhKXtvPW47YnJlYWt9fWVsc2UgYT0hMTtpZigtMT09PW8pe2lmKC0xPT09bilyZXR1cm4iLiI7bz1ufXJldHVybiBlLnNsaWNlKDAsbyl9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYoZS5sZW5ndGg+PTImJk9lKGUuY2hhckNvZGVBdCgwKSkmJmUuY2hhckNvZGVBdCgxKT09PXhlJiYocj0yKSx2b2lkIDAhPT10JiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBhPXQubGVuZ3RoLTEscz0tMTtmb3Iobj1lLmxlbmd0aC0xO24+PXI7LS1uKXtjb25zdCBjPWUuY2hhckNvZGVBdChuKTtpZihMZShjKSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1zJiYobz0hMSxzPW4rMSksYT49MCYmKGM9PT10LmNoYXJDb2RlQXQoYSk/LTE9PS0tYSYmKGk9bik6KGE9LTEsaT1zKSl9cmV0dXJuIHI9PT1pP2k9czotMT09PWkmJihpPWUubGVuZ3RoKSxlLnNsaWNlKHIsaSl9Zm9yKG49ZS5sZW5ndGgtMTtuPj1yOy0tbilpZihMZShlLmNoYXJDb2RlQXQobikpKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0wLG49LTEscj0wLGk9LTEsbz0hMCxhPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PXhlJiZPZShlLmNoYXJDb2RlQXQoMCkpJiYodD1yPTIpO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PXQ7LS1zKXtjb25zdCB0PWUuY2hhckNvZGVBdChzKTtpZihMZSh0KSl7aWYoIW8pe3I9cysxO2JyZWFrfX1lbHNlLTE9PT1pJiYobz0hMSxpPXMrMSksdD09PVNlPy0xPT09bj9uPXM6MSE9PWEmJihhPTEpOi0xIT09biYmKGE9LTEpfXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09YXx8MT09PWEmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6TWUuYmluZChudWxsLCJcXCIpLHBhcnNlKGUpe2tlKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7Y29uc3Qgbj1lLmxlbmd0aDtsZXQgcj0wLGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiBMZShpKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZihMZShpKSl7aWYocj0xLExlKGUuY2hhckNvZGVBdCgxKSkpe2xldCB0PTIsaT10O2Zvcig7dDxuJiYhTGUoZS5jaGFyQ29kZUF0KHQpKTspdCsrO2lmKHQ8biYmdCE9PWkpe2ZvcihpPXQ7dDxuJiZMZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7aWYodDxuJiZ0IT09aSl7Zm9yKGk9dDt0PG4mJiFMZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7dD09PW4/cj10OnQhPT1pJiYocj10KzEpfX19fWVsc2UgaWYoT2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PXhlKXtpZihuPD0yKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O2lmKHI9MixMZShlLmNoYXJDb2RlQXQoMikpKXtpZigzPT09bilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtyPTN9fXI+MCYmKHQucm9vdD1lLnNsaWNlKDAscikpO2xldCBvPS0xLGE9cixzPS0xLGM9ITAsbD1lLmxlbmd0aC0xLHU9MDtmb3IoO2w+PXI7LS1sKWlmKGk9ZS5jaGFyQ29kZUF0KGwpLExlKGkpKXtpZighYyl7YT1sKzE7YnJlYWt9fWVsc2UtMT09PXMmJihjPSExLHM9bCsxKSxpPT09U2U/LTE9PT1vP289bDoxIT09dSYmKHU9MSk6LTEhPT1vJiYodT0tMSk7cmV0dXJuLTEhPT1zJiYoLTE9PT1vfHwwPT09dXx8MT09PXUmJm89PT1zLTEmJm89PT1hKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGEscyk6KHQubmFtZT1lLnNsaWNlKGEsbyksdC5iYXNlPWUuc2xpY2UoYSxzKSx0LmV4dD1lLnNsaWNlKG8scykpKSx0LmRpcj1hPjAmJmEhPT1yP2Uuc2xpY2UoMCxhLTEpOnQucm9vdCx0fSxzZXA6IlxcIixkZWxpbWl0ZXI6IjsiLHdpbjMyOm51bGwscG9zaXg6bnVsbH0sUmU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0hMTtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0tMSYmIW47ci0tKXtjb25zdCBpPXI+PTA/ZVtyXTpDZSgpO2tlKGksInBhdGgiKSwwIT09aS5sZW5ndGgmJih0PWAke2l9LyR7dH1gLG49aS5jaGFyQ29kZUF0KDApPT09QWUpfXJldHVybiB0PUllKHQsIW4sIi8iLFRlKSxuP2AvJHt0fWA6dC5sZW5ndGg+MD90OiIuIn0sbm9ybWFsaXplKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09QWUsbj1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk9PT1BZTtyZXR1cm4gMD09PShlPUllKGUsIXQsIi8iLFRlKSkubGVuZ3RoP3Q/Ii8iOm4/Ii4vIjoiLiI6KG4mJihlKz0iLyIpLHQ/YC8ke2V9YDplKX0saXNBYnNvbHV0ZTplPT4oa2UoZSwicGF0aCIpLGUubGVuZ3RoPjAmJmUuY2hhckNvZGVBdCgwKT09PUFlKSxqb2luKC4uLmUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDsrK24pe2NvbnN0IHI9ZVtuXTtrZShyLCJwYXRoIiksci5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1yOnQrPWAvJHtyfWApfXJldHVybiB2b2lkIDA9PT10PyIuIjpSZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoa2UoZSwiZnJvbSIpLGtlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7aWYoKGU9UmUucmVzb2x2ZShlKSk9PT0odD1SZS5yZXNvbHZlKHQpKSlyZXR1cm4iIjtjb25zdCBuPWUubGVuZ3RoLHI9bi0xLGk9dC5sZW5ndGgtMSxvPXI8aT9yOmk7bGV0IGE9LTEscz0wO2Zvcig7czxvO3MrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMStzKTtpZihuIT09dC5jaGFyQ29kZUF0KDErcykpYnJlYWs7bj09PUFlJiYoYT1zKX1pZihzPT09bylpZihpPm8pe2lmKHQuY2hhckNvZGVBdCgxK3MpPT09QWUpcmV0dXJuIHQuc2xpY2UoMStzKzEpO2lmKDA9PT1zKXJldHVybiB0LnNsaWNlKDErcyl9ZWxzZSByPm8mJihlLmNoYXJDb2RlQXQoMStzKT09PUFlP2E9czowPT09cyYmKGE9MCkpO2xldCBjPSIiO2ZvcihzPTErYSsxO3M8PW47KytzKXMhPT1uJiZlLmNoYXJDb2RlQXQocykhPT1BZXx8KGMrPTA9PT1jLmxlbmd0aD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtjfSR7dC5zbGljZSgxK2EpfWB9LHRvTmFtZXNwYWNlZFBhdGg6ZT0+ZSxkaXJuYW1lKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09QWU7bGV0IG49LTEscj0hMDtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0xOy0tdClpZihlLmNoYXJDb2RlQXQodCk9PT1BZSl7aWYoIXIpe249dDticmVha319ZWxzZSByPSExO3JldHVybi0xPT09bj90PyIvIjoiLiI6dCYmMT09PW4/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYodm9pZCAwIT09dCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLHM9LTE7Zm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7Y29uc3QgYz1lLmNoYXJDb2RlQXQobik7aWYoYz09PUFlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PXMmJihvPSExLHM9bisxKSxhPj0wJiYoYz09PXQuY2hhckNvZGVBdChhKT8tMT09LS1hJiYoaT1uKTooYT0tMSxpPXMpKX1yZXR1cm4gcj09PWk/aT1zOi0xPT09aSYmKGk9ZS5sZW5ndGgpLGUuc2xpY2UocixpKX1mb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWlmKGUuY2hhckNvZGVBdChuKT09PUFlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0tMSxuPTAscj0tMSxpPSEwLG89MDtmb3IobGV0IGE9ZS5sZW5ndGgtMTthPj0wOy0tYSl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQoYSk7aWYocyE9PUFlKS0xPT09ciYmKGk9ITEscj1hKzEpLHM9PT1TZT8tMT09PXQ/dD1hOjEhPT1vJiYobz0xKTotMSE9PXQmJihvPS0xKTtlbHNlIGlmKCFpKXtuPWErMTticmVha319cmV0dXJuLTE9PT10fHwtMT09PXJ8fDA9PT1vfHwxPT09byYmdD09PXItMSYmdD09PW4rMT8iIjplLnNsaWNlKHQscil9LGZvcm1hdDpNZS5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09QWU7bGV0IHI7bj8odC5yb290PSIvIixyPTEpOnI9MDtsZXQgaT0tMSxvPTAsYT0tMSxzPSEwLGM9ZS5sZW5ndGgtMSxsPTA7Zm9yKDtjPj1yOy0tYyl7Y29uc3QgdD1lLmNoYXJDb2RlQXQoYyk7aWYodCE9PUFlKS0xPT09YSYmKHM9ITEsYT1jKzEpLHQ9PT1TZT8tMT09PWk/aT1jOjEhPT1sJiYobD0xKTotMSE9PWkmJihsPS0xKTtlbHNlIGlmKCFzKXtvPWMrMTticmVha319aWYoLTEhPT1hKXtjb25zdCByPTA9PT1vJiZuPzE6bzstMT09PWl8fDA9PT1sfHwxPT09bCYmaT09PWEtMSYmaT09PW8rMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UocixhKToodC5uYW1lPWUuc2xpY2UocixpKSx0LmJhc2U9ZS5zbGljZShyLGEpLHQuZXh0PWUuc2xpY2UoaSxhKSl9cmV0dXJuIG8+MD90LmRpcj1lLnNsaWNlKDAsby0xKTpuJiYodC5kaXI9Ii8iKSx0fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtSZS53aW4zMj1QZS53aW4zMj1QZSxSZS5wb3NpeD1QZS5wb3NpeD1SZSwid2luMzIiPT09X2U/UGUubm9ybWFsaXplOlJlLm5vcm1hbGl6ZSwid2luMzIiPT09X2U/UGUucmVzb2x2ZTpSZS5yZXNvbHZlLCJ3aW4zMiI9PT1fZT9QZS5yZWxhdGl2ZTpSZS5yZWxhdGl2ZSwid2luMzIiPT09X2U/UGUuZGlybmFtZTpSZS5kaXJuYW1lLCJ3aW4zMiI9PT1fZT9QZS5iYXNlbmFtZTpSZS5iYXNlbmFtZSwid2luMzIiPT09X2U/UGUuZXh0bmFtZTpSZS5leHRuYW1lLCJ3aW4zMiI9PT1fZT9QZS5zZXA6UmUuc2VwO2NvbnN0IFZlPS9eXHdbXHdcZCsuLV0qJC8sRmU9L15cLy8sRGU9L15cL1wvLztmdW5jdGlvbiBLZShlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIVZlLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFGZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihEZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9Y29uc3QgamU9IiIsVWU9Ii8iLEJlPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2xldCBxZT1jbGFzcyBle2NvbnN0cnVjdG9yKGUsdCxuLHIsaSxvPSExKXsib2JqZWN0Ij09dHlwZW9mIGU/KHRoaXMuc2NoZW1lPWUuc2NoZW1lfHxqZSx0aGlzLmF1dGhvcml0eT1lLmF1dGhvcml0eXx8amUsdGhpcy5wYXRoPWUucGF0aHx8amUsdGhpcy5xdWVyeT1lLnF1ZXJ5fHxqZSx0aGlzLmZyYWdtZW50PWUuZnJhZ21lbnR8fGplKToodGhpcy5zY2hlbWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXx8dD9lOiJmaWxlIn0oZSxvKSx0aGlzLmF1dGhvcml0eT10fHxqZSx0aGlzLnBhdGg9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJodHRwcyI6Y2FzZSJodHRwIjpjYXNlImZpbGUiOnQ/dFswXSE9PVVlJiYodD1VZSt0KTp0PVVlfXJldHVybiB0fSh0aGlzLnNjaGVtZSxufHxqZSksdGhpcy5xdWVyeT1yfHxqZSx0aGlzLmZyYWdtZW50PWl8fGplLEtlKHRoaXMsbykpfXN0YXRpYyBpc1VyaSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fCEhdCYmKCJzdHJpbmciPT10eXBlb2YgdC5hdXRob3JpdHkmJiJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudCYmInN0cmluZyI9PXR5cGVvZiB0LnBhdGgmJiJzdHJpbmciPT10eXBlb2YgdC5xdWVyeSYmInN0cmluZyI9PXR5cGVvZiB0LnNjaGVtZSYmInN0cmluZyI9PXR5cGVvZiB0LmZzUGF0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQud2l0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQudG9TdHJpbmcpfWdldCBmc1BhdGgoKXtyZXR1cm4gSmUodGhpcywhMSl9d2l0aChlKXtpZighZSlyZXR1cm4gdGhpcztsZXR7c2NoZW1lOnQsYXV0aG9yaXR5Om4scGF0aDpyLHF1ZXJ5OmksZnJhZ21lbnQ6b309ZTtyZXR1cm4gdm9pZCAwPT09dD90PXRoaXMuc2NoZW1lOm51bGw9PT10JiYodD1qZSksdm9pZCAwPT09bj9uPXRoaXMuYXV0aG9yaXR5Om51bGw9PT1uJiYobj1qZSksdm9pZCAwPT09cj9yPXRoaXMucGF0aDpudWxsPT09ciYmKHI9amUpLHZvaWQgMD09PWk/aT10aGlzLnF1ZXJ5Om51bGw9PT1pJiYoaT1qZSksdm9pZCAwPT09bz9vPXRoaXMuZnJhZ21lbnQ6bnVsbD09PW8mJihvPWplKSx0PT09dGhpcy5zY2hlbWUmJm49PT10aGlzLmF1dGhvcml0eSYmcj09PXRoaXMucGF0aCYmaT09PXRoaXMucXVlcnkmJm89PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IFdlKHQsbixyLGksbyl9c3RhdGljIHBhcnNlKGUsdD0hMSl7Y29uc3Qgbj1CZS5leGVjKGUpO3JldHVybiBuP25ldyBXZShuWzJdfHxqZSxRZShuWzRdfHxqZSksUWUobls1XXx8amUpLFFlKG5bN118fGplKSxRZShuWzldfHxqZSksdCk6bmV3IFdlKGplLGplLGplLGplLGplKX1zdGF0aWMgZmlsZShlKXtsZXQgdD1qZTtpZihUJiYoZT1lLnJlcGxhY2UoL1xcL2csVWUpKSxlWzBdPT09VWUmJmVbMV09PT1VZSl7Y29uc3Qgbj1lLmluZGV4T2YoVWUsMik7LTE9PT1uPyh0PWUuc3Vic3RyaW5nKDIpLGU9VWUpOih0PWUuc3Vic3RyaW5nKDIsbiksZT1lLnN1YnN0cmluZyhuKXx8VWUpfXJldHVybiBuZXcgV2UoImZpbGUiLHQsZSxqZSxqZSl9c3RhdGljIGZyb20oZSl7Y29uc3QgdD1uZXcgV2UoZS5zY2hlbWUsZS5hdXRob3JpdHksZS5wYXRoLGUucXVlcnksZS5mcmFnbWVudCk7cmV0dXJuIEtlKHQsITApLHR9c3RhdGljIGpvaW5QYXRoKHQsLi4ubil7aWYoIXQucGF0aCl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IGNhbm5vdCBjYWxsIGpvaW5QYXRoIG9uIFVSSSB3aXRob3V0IHBhdGgiKTtsZXQgcjtyZXR1cm4gcj1UJiYiZmlsZSI9PT10LnNjaGVtZT9lLmZpbGUoUGUuam9pbihKZSh0LCEwKSwuLi5uKSkucGF0aDpSZS5qb2luKHQucGF0aCwuLi5uKSx0LndpdGgoe3BhdGg6cn0pfXRvU3RyaW5nKGU9ITEpe3JldHVybiBYZSh0aGlzLGUpfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUodCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuIHQ7e2NvbnN0IGU9bmV3IFdlKHQpO3JldHVybiBlLl9mb3JtYXR0ZWQ9dC5leHRlcm5hbCxlLl9mc1BhdGg9dC5fc2VwPT09JGU/dC5mc1BhdGg6bnVsbCxlfX1yZXR1cm4gdH19O2NvbnN0ICRlPVQ/MTp2b2lkIDA7Y2xhc3MgV2UgZXh0ZW5kcyBxZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZm9ybWF0dGVkPW51bGwsdGhpcy5fZnNQYXRoPW51bGx9Z2V0IGZzUGF0aCgpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9SmUodGhpcywhMSkpLHRoaXMuX2ZzUGF0aH10b1N0cmluZyhlPSExKXtyZXR1cm4gZT9YZSh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPVhlKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfXRvSlNPTigpe2NvbnN0IGU9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGUuZnNQYXRoPXRoaXMuX2ZzUGF0aCxlLl9zZXA9JGUpLHRoaXMuX2Zvcm1hdHRlZCYmKGUuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihlLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGUuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGUuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoZS5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoZS5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxlfX1jb25zdCBIZT17NTg6IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIHplKGUsdCl7bGV0IG4scj0tMTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7Y29uc3Qgbz1lLmNoYXJDb2RlQXQoaSk7aWYobz49OTcmJm88PTEyMnx8bz49NjUmJm88PTkwfHxvPj00OCYmbzw9NTd8fDQ1PT09b3x8NDY9PT1vfHw5NT09PW98fDEyNj09PW98fHQmJjQ3PT09byktMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksdm9pZCAwIT09biYmKG4rPWUuY2hhckF0KGkpKTtlbHNle3ZvaWQgMD09PW4mJihuPWUuc3Vic3RyKDAsaSkpO2NvbnN0IHQ9SGVbb107dm9pZCAwIT09dD8oLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLG4rPXQpOi0xPT09ciYmKHI9aSl9fXJldHVybi0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyKSkpLHZvaWQgMCE9PW4/bjplfWZ1bmN0aW9uIEdlKGUpe2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTszNT09PXJ8fDYzPT09cj8odm9pZCAwPT09dCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9SGVbcl0pOnZvaWQgMCE9PXQmJih0Kz1lW25dKX1yZXR1cm4gdm9pZCAwIT09dD90OmV9ZnVuY3Rpb24gSmUoZSx0KXtsZXQgbjtyZXR1cm4gbj1lLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiYiZmlsZSI9PT1lLnNjaGVtZT9gLy8ke2UuYXV0aG9yaXR5fSR7ZS5wYXRofWA6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3Q/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aCxUJiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gWGUoZSx0KXtjb25zdCBuPXQ/R2U6emU7bGV0IHI9IiIse3NjaGVtZTppLGF1dGhvcml0eTpvLHBhdGg6YSxxdWVyeTpzLGZyYWdtZW50OmN9PWU7aWYoaSYmKHIrPWkscis9IjoiKSwob3x8ImZpbGUiPT09aSkmJihyKz1VZSxyKz1VZSksbyl7bGV0IGU9by5pbmRleE9mKCJAIik7aWYoLTEhPT1lKXtjb25zdCB0PW8uc3Vic3RyKDAsZSk7bz1vLnN1YnN0cihlKzEpLGU9dC5pbmRleE9mKCI6IiksLTE9PT1lP3IrPW4odCwhMSk6KHIrPW4odC5zdWJzdHIoMCxlKSwhMSkscis9IjoiLHIrPW4odC5zdWJzdHIoZSsxKSwhMSkpLHIrPSJAIn1vPW8udG9Mb3dlckNhc2UoKSxlPW8uaW5kZXhPZigiOiIpLC0xPT09ZT9yKz1uKG8sITEpOihyKz1uKG8uc3Vic3RyKDAsZSksITEpLHIrPW8uc3Vic3RyKGUpKX1pZihhKXtpZihhLmxlbmd0aD49MyYmNDc9PT1hLmNoYXJDb2RlQXQoMCkmJjU4PT09YS5jaGFyQ29kZUF0KDIpKXtjb25zdCBlPWEuY2hhckNvZGVBdCgxKTtlPj02NSYmZTw9OTAmJihhPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGUrMzIpfToke2Euc3Vic3RyKDMpfWApfWVsc2UgaWYoYS5sZW5ndGg+PTImJjU4PT09YS5jaGFyQ29kZUF0KDEpKXtjb25zdCBlPWEuY2hhckNvZGVBdCgwKTtlPj02NSYmZTw9OTAmJihhPWAke1N0cmluZy5mcm9tQ2hhckNvZGUoZSszMil9OiR7YS5zdWJzdHIoMil9YCl9cis9bihhLCEwKX1yZXR1cm4gcyYmKHIrPSI/IixyKz1uKHMsITEpKSxjJiYocis9IiMiLHIrPXQ/Yzp6ZShjLCExKSkscn1mdW5jdGlvbiBaZShlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK1plKGUuc3Vic3RyKDMpKTplfX1jb25zdCBZZT0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBRZShlKXtyZXR1cm4gZS5tYXRjaChZZSk/ZS5yZXBsYWNlKFllLChlPT5aZShlKSkpOmV9bGV0IGV0PWNsYXNzIGV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmxpbmVOdW1iZXI9ZSx0aGlzLmNvbHVtbj10fXdpdGgodD10aGlzLmxpbmVOdW1iZXIsbj10aGlzLmNvbHVtbil7cmV0dXJuIHQ9PT10aGlzLmxpbmVOdW1iZXImJm49PT10aGlzLmNvbHVtbj90aGlzOm5ldyBlKHQsbil9ZGVsdGEoZT0wLHQ9MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrZSx0aGlzLmNvbHVtbit0KX1lcXVhbHModCl7cmV0dXJuIGUuZXF1YWxzKHRoaXMsdCl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiFlJiYhdHx8ISFlJiYhIXQmJmUubGluZU51bWJlcj09PXQubGluZU51bWJlciYmZS5jb2x1bW49PT10LmNvbHVtbn1pc0JlZm9yZSh0KXtyZXR1cm4gZS5pc0JlZm9yZSh0aGlzLHQpfXN0YXRpYyBpc0JlZm9yZShlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjx0LmNvbHVtbn1pc0JlZm9yZU9yRXF1YWwodCl7cmV0dXJuIGUuaXNCZWZvcmVPckVxdWFsKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbChlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjw9dC5jb2x1bW59c3RhdGljIGNvbXBhcmUoZSx0KXtjb25zdCBuPTB8ZS5saW5lTnVtYmVyLHI9MHx0LmxpbmVOdW1iZXI7aWYobj09PXIpe3JldHVybigwfGUuY29sdW1uKS0oMHx0LmNvbHVtbil9cmV0dXJuIG4tcn1jbG9uZSgpe3JldHVybiBuZXcgZSh0aGlzLmxpbmVOdW1iZXIsdGhpcy5jb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMubGluZU51bWJlcisiLCIrdGhpcy5jb2x1bW4rIikifXN0YXRpYyBsaWZ0KHQpe3JldHVybiBuZXcgZSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBpc0lQb3NpdGlvbihlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLmxpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5jb2x1bW59fSx0dD1jbGFzcyBle2NvbnN0cnVjdG9yKGUsdCxuLHIpe2U+bnx8ZT09PW4mJnQ+cj8odGhpcy5zdGFydExpbmVOdW1iZXI9bix0aGlzLnN0YXJ0Q29sdW1uPXIsdGhpcy5lbmRMaW5lTnVtYmVyPWUsdGhpcy5lbmRDb2x1bW49dCk6KHRoaXMuc3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zdGFydENvbHVtbj10LHRoaXMuZW5kTGluZU51bWJlcj1uLHRoaXMuZW5kQ29sdW1uPXIpfWlzRW1wdHkoKXtyZXR1cm4gZS5pc0VtcHR5KHRoaXMpfXN0YXRpYyBpc0VtcHR5KGUpe3JldHVybiBlLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1ufWNvbnRhaW5zUG9zaXRpb24odCl7cmV0dXJuIGUuY29udGFpbnNQb3NpdGlvbih0aGlzLHQpfXN0YXRpYyBjb250YWluc1Bvc2l0aW9uKGUsdCl7cmV0dXJuISh0LmxpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQubGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LmxpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5jb2x1bW48ZS5zdGFydENvbHVtbikmJiEodC5saW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmNvbHVtbj5lLmVuZENvbHVtbikpfXN0YXRpYyBzdHJpY3RDb250YWluc1Bvc2l0aW9uKGUsdCl7cmV0dXJuISh0LmxpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQubGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LmxpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5jb2x1bW48PWUuc3RhcnRDb2x1bW4pJiYhKHQubGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5jb2x1bW4+PWUuZW5kQ29sdW1uKSl9Y29udGFpbnNSYW5nZSh0KXtyZXR1cm4gZS5jb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPGUuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW4+ZS5lbmRDb2x1bW4pKSl9c3RyaWN0Q29udGFpbnNSYW5nZSh0KXtyZXR1cm4gZS5zdHJpY3RDb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIHN0cmljdENvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPD1lLnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPj1lLmVuZENvbHVtbikpKX1wbHVzUmFuZ2UodCl7cmV0dXJuIGUucGx1c1JhbmdlKHRoaXMsdCl9c3RhdGljIHBsdXNSYW5nZSh0LG4pe2xldCByLGksbyxhO3JldHVybiBuLnN0YXJ0TGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcj8ocj1uLnN0YXJ0TGluZU51bWJlcixpPW4uc3RhcnRDb2x1bW4pOm4uc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/KHI9bi5zdGFydExpbmVOdW1iZXIsaT1NYXRoLm1pbihuLnN0YXJ0Q29sdW1uLHQuc3RhcnRDb2x1bW4pKToocj10LnN0YXJ0TGluZU51bWJlcixpPXQuc3RhcnRDb2x1bW4pLG4uZW5kTGluZU51bWJlcj50LmVuZExpbmVOdW1iZXI/KG89bi5lbmRMaW5lTnVtYmVyLGE9bi5lbmRDb2x1bW4pOm4uZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj8obz1uLmVuZExpbmVOdW1iZXIsYT1NYXRoLm1heChuLmVuZENvbHVtbix0LmVuZENvbHVtbikpOihvPXQuZW5kTGluZU51bWJlcixhPXQuZW5kQ29sdW1uKSxuZXcgZShyLGksbyxhKX1pbnRlcnNlY3RSYW5nZXModCl7cmV0dXJuIGUuaW50ZXJzZWN0UmFuZ2VzKHRoaXMsdCl9c3RhdGljIGludGVyc2VjdFJhbmdlcyh0LG4pe2xldCByPXQuc3RhcnRMaW5lTnVtYmVyLGk9dC5zdGFydENvbHVtbixvPXQuZW5kTGluZU51bWJlcixhPXQuZW5kQ29sdW1uO2NvbnN0IHM9bi5zdGFydExpbmVOdW1iZXIsYz1uLnN0YXJ0Q29sdW1uLGw9bi5lbmRMaW5lTnVtYmVyLHU9bi5lbmRDb2x1bW47cmV0dXJuIHI8cz8ocj1zLGk9Yyk6cj09PXMmJihpPU1hdGgubWF4KGksYykpLG8+bD8obz1sLGE9dSk6bz09PWwmJihhPU1hdGgubWluKGEsdSkpLHI+b3x8cj09PW8mJmk+YT9udWxsOm5ldyBlKHIsaSxvLGEpfWVxdWFsc1JhbmdlKHQpe3JldHVybiBlLmVxdWFsc1JhbmdlKHRoaXMsdCl9c3RhdGljIGVxdWFsc1JhbmdlKGUsdCl7cmV0dXJuISFlJiYhIXQmJmUuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuc3RhcnRDb2x1bW49PT10LnN0YXJ0Q29sdW1uJiZlLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPT09dC5lbmRDb2x1bW59Z2V0RW5kUG9zaXRpb24oKXtyZXR1cm4gZS5nZXRFbmRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0RW5kUG9zaXRpb24oZSl7cmV0dXJuIG5ldyBldChlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4pfWdldFN0YXJ0UG9zaXRpb24oKXtyZXR1cm4gZS5nZXRTdGFydFBvc2l0aW9uKHRoaXMpfXN0YXRpYyBnZXRTdGFydFBvc2l0aW9uKGUpe3JldHVybiBuZXcgZXQoZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMuZW5kTGluZU51bWJlcisiLCIrdGhpcy5lbmRDb2x1bW4rIl0ifXNldEVuZFBvc2l0aW9uKHQsbil7cmV0dXJuIG5ldyBlKHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sdCxuKX1zZXRTdGFydFBvc2l0aW9uKHQsbil7cmV0dXJuIG5ldyBlKHQsbix0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pfWNvbGxhcHNlVG9TdGFydCgpe3JldHVybiBlLmNvbGxhcHNlVG9TdGFydCh0aGlzKX1zdGF0aWMgY29sbGFwc2VUb1N0YXJ0KHQpe3JldHVybiBuZXcgZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKHQsbj10KXtyZXR1cm4gbmV3IGUodC5saW5lTnVtYmVyLHQuY29sdW1uLG4ubGluZU51bWJlcixuLmNvbHVtbil9c3RhdGljIGxpZnQodCl7cmV0dXJuIHQ/bmV3IGUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbix0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pOm51bGx9c3RhdGljIGlzSVJhbmdlKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUuc3RhcnRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuc3RhcnRDb2x1bW4mJiJudW1iZXIiPT10eXBlb2YgZS5lbmRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuZW5kQ29sdW1ufXN0YXRpYyBhcmVJbnRlcnNlY3RpbmdPclRvdWNoaW5nKGUsdCl7cmV0dXJuIShlLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fGUuZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbjx0LnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjxlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgYXJlSW50ZXJzZWN0aW5nKGUsdCl7cmV0dXJuIShlLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fGUuZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbjw9dC5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48PWUuc3RhcnRDb2x1bW4pfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdTdGFydHMoZSx0KXtpZihlJiZ0KXtjb25zdCBuPTB8ZS5zdGFydExpbmVOdW1iZXIscj0wfHQuc3RhcnRMaW5lTnVtYmVyO2lmKG49PT1yKXtjb25zdCBuPTB8ZS5zdGFydENvbHVtbixyPTB8dC5zdGFydENvbHVtbjtpZihuPT09cil7Y29uc3Qgbj0wfGUuZW5kTGluZU51bWJlcixyPTB8dC5lbmRMaW5lTnVtYmVyO2lmKG49PT1yKXtyZXR1cm4oMHxlLmVuZENvbHVtbiktKDB8dC5lbmRDb2x1bW4pfXJldHVybiBuLXJ9cmV0dXJuIG4tcn1yZXR1cm4gbi1yfXJldHVybihlPzE6MCktKHQ/MTowKX1zdGF0aWMgY29tcGFyZVJhbmdlc1VzaW5nRW5kcyhlLHQpe3JldHVybiBlLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXI/ZS5lbmRDb2x1bW49PT10LmVuZENvbHVtbj9lLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyP2Uuc3RhcnRDb2x1bW4tdC5zdGFydENvbHVtbjplLnN0YXJ0TGluZU51bWJlci10LnN0YXJ0TGluZU51bWJlcjplLmVuZENvbHVtbi10LmVuZENvbHVtbjplLmVuZExpbmVOdW1iZXItdC5lbmRMaW5lTnVtYmVyfXN0YXRpYyBzcGFuc011bHRpcGxlTGluZXMoZSl7cmV0dXJuIGUuZW5kTGluZU51bWJlcj5lLnN0YXJ0TGluZU51bWJlcn10b0pTT04oKXtyZXR1cm4gdGhpc319O2Z1bmN0aW9uIG50KGUsdCxuLHIpe3JldHVybiBuZXcgdmUoZSx0LG4pLkNvbXB1dGVEaWZmKHIpfWNsYXNzIHJ0e2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9W10sbj1bXTtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspdFtyXT1jdChlW3JdLDEpLG5bcl09bHQoZVtyXSwxKTt0aGlzLmxpbmVzPWUsdGhpcy5fc3RhcnRDb2x1bW5zPXQsdGhpcy5fZW5kQ29sdW1ucz1ufWdldEVsZW1lbnRzKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxuPXRoaXMubGluZXMubGVuZ3RoO3Q8bjt0KyspZVt0XT10aGlzLmxpbmVzW3RdLnN1YnN0cmluZyh0aGlzLl9zdGFydENvbHVtbnNbdF0tMSx0aGlzLl9lbmRDb2x1bW5zW3RdLTEpO3JldHVybiBlfWdldFN0cmljdEVsZW1lbnQoZSl7cmV0dXJuIHRoaXMubGluZXNbZV19Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiBlKzF9Z2V0RW5kTGluZU51bWJlcihlKXtyZXR1cm4gZSsxfWNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQsbil7Y29uc3Qgcj1bXSxpPVtdLG89W107bGV0IGE9MDtmb3IobGV0IHM9dDtzPD1uO3MrKyl7Y29uc3QgdD10aGlzLmxpbmVzW3NdLGM9ZT90aGlzLl9zdGFydENvbHVtbnNbc106MSxsPWU/dGhpcy5fZW5kQ29sdW1uc1tzXTp0Lmxlbmd0aCsxO2ZvcihsZXQgZT1jO2U8bDtlKyspclthXT10LmNoYXJDb2RlQXQoZS0xKSxpW2FdPXMrMSxvW2FdPWUsYSsrOyFlJiZzPG4mJihyW2FdPTEwLGlbYV09cysxLG9bYV09dC5sZW5ndGgrMSxhKyspfXJldHVybiBuZXcgaXQocixpLG8pfX1jbGFzcyBpdHtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5fY2hhckNvZGVzPWUsdGhpcy5fbGluZU51bWJlcnM9dCx0aGlzLl9jb2x1bW5zPW59dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5fY2hhckNvZGVzLm1hcCgoKGUsdCk9PigxMD09PWU/IlxcbiI6U3RyaW5nLmZyb21DaGFyQ29kZShlKSkrYC0oJHt0aGlzLl9saW5lTnVtYmVyc1t0XX0sJHt0aGlzLl9jb2x1bW5zW3RdfSlgKSkuam9pbigiLCAiKSsiXSJ9X2Fzc2VydEluZGV4KGUsdCl7aWYoZTwwfHxlPj10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgaW5kZXgiKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLl9jaGFyQ29kZXN9Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiBlPjAmJmU9PT10aGlzLl9saW5lTnVtYmVycy5sZW5ndGg/dGhpcy5nZXRFbmRMaW5lTnVtYmVyKGUtMSk6KHRoaXMuX2Fzc2VydEluZGV4KGUsdGhpcy5fbGluZU51bWJlcnMpLHRoaXMuX2xpbmVOdW1iZXJzW2VdKX1nZXRFbmRMaW5lTnVtYmVyKGUpe3JldHVybi0xPT09ZT90aGlzLmdldFN0YXJ0TGluZU51bWJlcihlKzEpOih0aGlzLl9hc3NlcnRJbmRleChlLHRoaXMuX2xpbmVOdW1iZXJzKSwxMD09PXRoaXMuX2NoYXJDb2Rlc1tlXT90aGlzLl9saW5lTnVtYmVyc1tlXSsxOnRoaXMuX2xpbmVOdW1iZXJzW2VdKX1nZXRTdGFydENvbHVtbihlKXtyZXR1cm4gZT4wJiZlPT09dGhpcy5fY29sdW1ucy5sZW5ndGg/dGhpcy5nZXRFbmRDb2x1bW4oZS0xKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9jb2x1bW5zKSx0aGlzLl9jb2x1bW5zW2VdKX1nZXRFbmRDb2x1bW4oZSl7cmV0dXJuLTE9PT1lP3RoaXMuZ2V0U3RhcnRDb2x1bW4oZSsxKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9jb2x1bW5zKSwxMD09PXRoaXMuX2NoYXJDb2Rlc1tlXT8xOnRoaXMuX2NvbHVtbnNbZV0rMSl9fWNsYXNzIG90e2NvbnN0cnVjdG9yKGUsdCxuLHIsaSxvLGEscyl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj1lLHRoaXMub3JpZ2luYWxTdGFydENvbHVtbj10LHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdGhpcy5vcmlnaW5hbEVuZENvbHVtbj1yLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9aSx0aGlzLm1vZGlmaWVkU3RhcnRDb2x1bW49byx0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1hLHRoaXMubW9kaWZpZWRFbmRDb2x1bW49c31zdGF0aWMgY3JlYXRlRnJvbURpZmZDaGFuZ2UoZSx0LG4pe2NvbnN0IHI9dC5nZXRTdGFydExpbmVOdW1iZXIoZS5vcmlnaW5hbFN0YXJ0KSxpPXQuZ2V0U3RhcnRDb2x1bW4oZS5vcmlnaW5hbFN0YXJ0KSxvPXQuZ2V0RW5kTGluZU51bWJlcihlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aC0xKSxhPXQuZ2V0RW5kQ29sdW1uKGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoLTEpLHM9bi5nZXRTdGFydExpbmVOdW1iZXIoZS5tb2RpZmllZFN0YXJ0KSxjPW4uZ2V0U3RhcnRDb2x1bW4oZS5tb2RpZmllZFN0YXJ0KSxsPW4uZ2V0RW5kTGluZU51bWJlcihlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aC0xKSx1PW4uZ2V0RW5kQ29sdW1uKGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoLTEpO3JldHVybiBuZXcgb3QocixpLG8sYSxzLGMsbCx1KX19Y2xhc3MgYXR7Y29uc3RydWN0b3IoZSx0LG4scixpKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCx0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPW4sdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9cix0aGlzLmNoYXJDaGFuZ2VzPWl9c3RhdGljIGNyZWF0ZUZyb21EaWZmUmVzdWx0KGUsdCxuLHIsaSxvLGEpe2xldCBzLGMsbCx1LGg7aWYoMD09PXQub3JpZ2luYWxMZW5ndGg/KHM9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KS0xLGM9MCk6KHM9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KSxjPW4uZ2V0RW5kTGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSksMD09PXQubW9kaWZpZWRMZW5ndGg/KGw9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KS0xLHU9MCk6KGw9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KSx1PXIuZ2V0RW5kTGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKSksbyYmdC5vcmlnaW5hbExlbmd0aD4wJiZ0Lm9yaWdpbmFsTGVuZ3RoPDIwJiZ0Lm1vZGlmaWVkTGVuZ3RoPjAmJnQubW9kaWZpZWRMZW5ndGg8MjAmJmkoKSl7Y29uc3Qgbz1uLmNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQub3JpZ2luYWxTdGFydCx0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxzPXIuY3JlYXRlQ2hhclNlcXVlbmNlKGUsdC5tb2RpZmllZFN0YXJ0LHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpO2lmKG8uZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCYmcy5nZXRFbGVtZW50cygpLmxlbmd0aD4wKXtsZXQgZT1udChvLHMsaSwhMCkuY2hhbmdlczthJiYoZT1mdW5jdGlvbihlKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCB0PVtlWzBdXTtsZXQgbj10WzBdO2ZvcihsZXQgcj0xLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3QgaT1lW3JdLG89aS5vcmlnaW5hbFN0YXJ0LShuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCksYT1pLm1vZGlmaWVkU3RhcnQtKG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKTtNYXRoLm1pbihvLGEpPDM/KG4ub3JpZ2luYWxMZW5ndGg9aS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGgtbi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGg9aS5tb2RpZmllZFN0YXJ0K2kubW9kaWZpZWRMZW5ndGgtbi5tb2RpZmllZFN0YXJ0KToodC5wdXNoKGkpLG49aSl9cmV0dXJuIHR9KGUpKSxoPVtdO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyloLnB1c2gob3QuY3JlYXRlRnJvbURpZmZDaGFuZ2UoZVt0XSxvLHMpKX19cmV0dXJuIG5ldyBhdChzLGMsbCx1LGgpfX1jbGFzcyBzdHtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXM9bi5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzPW4uc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlPW4uc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZj1uLnNob3VsZE1ha2VQcmV0dHlEaWZmLHRoaXMub3JpZ2luYWxMaW5lcz1lLHRoaXMubW9kaWZpZWRMaW5lcz10LHRoaXMub3JpZ2luYWw9bmV3IHJ0KGUpLHRoaXMubW9kaWZpZWQ9bmV3IHJ0KHQpLHRoaXMuY29udGludWVMaW5lRGlmZj11dChuLm1heENvbXB1dGF0aW9uVGltZSksdGhpcy5jb250aW51ZUNoYXJEaWZmPXV0KDA9PT1uLm1heENvbXB1dGF0aW9uVGltZT8wOk1hdGgubWluKG4ubWF4Q29tcHV0YXRpb25UaW1lLDVlMykpfWNvbXB1dGVEaWZmKCl7aWYoMT09PXRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoJiYwPT09dGhpcy5vcmlnaW5hbC5saW5lc1swXS5sZW5ndGgpcmV0dXJuIDE9PT10aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoP3txdWl0RWFybHk6ITEsY2hhbmdlczpbXX06e3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MSxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjp0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCxjaGFyQ2hhbmdlczpbe21vZGlmaWVkRW5kQ29sdW1uOjAsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjAsbW9kaWZpZWRTdGFydENvbHVtbjowLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjAsb3JpZ2luYWxFbmRDb2x1bW46MCxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MCxvcmlnaW5hbFN0YXJ0Q29sdW1uOjAsb3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MH1dfV19O2lmKDE9PT10aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoKXJldHVybntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOnRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjEsY2hhckNoYW5nZXM6W3ttb2RpZmllZEVuZENvbHVtbjowLG1vZGlmaWVkRW5kTGluZU51bWJlcjowLG1vZGlmaWVkU3RhcnRDb2x1bW46MCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjowLG9yaWdpbmFsRW5kQ29sdW1uOjAsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjAsb3JpZ2luYWxTdGFydENvbHVtbjowLG9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjB9XX1dfTtjb25zdCBlPW50KHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlTGluZURpZmYsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZiksdD1lLmNoYW5nZXMsbj1lLnF1aXRFYXJseTtpZih0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlKXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllLnB1c2goYXQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSx0W25dLHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSk7cmV0dXJue3F1aXRFYXJseTpuLGNoYW5nZXM6ZX19Y29uc3Qgcj1bXTtsZXQgaT0wLG89MDtmb3IobGV0IGU9LTEsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBhPWUrMTxuP3RbZSsxXTpudWxsLHM9YT9hLm9yaWdpbmFsU3RhcnQ6dGhpcy5vcmlnaW5hbExpbmVzLmxlbmd0aCxjPWE/YS5tb2RpZmllZFN0YXJ0OnRoaXMubW9kaWZpZWRMaW5lcy5sZW5ndGg7Zm9yKDtpPHMmJm88Yzspe2NvbnN0IGU9dGhpcy5vcmlnaW5hbExpbmVzW2ldLHQ9dGhpcy5tb2RpZmllZExpbmVzW29dO2lmKGUhPT10KXt7bGV0IG49Y3QoZSwxKSxhPWN0KHQsMSk7Zm9yKDtuPjEmJmE+MTspe2lmKGUuY2hhckNvZGVBdChuLTIpIT09dC5jaGFyQ29kZUF0KGEtMikpYnJlYWs7bi0tLGEtLX0obj4xfHxhPjEpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHIsaSsxLDEsbixvKzEsMSxhKX17bGV0IG49bHQoZSwxKSxhPWx0KHQsMSk7Y29uc3Qgcz1lLmxlbmd0aCsxLGM9dC5sZW5ndGgrMTtmb3IoO248cyYmYTxjOyl7aWYoZS5jaGFyQ29kZUF0KG4tMSkhPT1lLmNoYXJDb2RlQXQoYS0xKSlicmVhaztuKyssYSsrfShuPHN8fGE8YykmJnRoaXMuX3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UocixpKzEsbixzLG8rMSxhLGMpfX1pKyssbysrfWEmJihyLnB1c2goYXQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSxhLHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSksaSs9YS5vcmlnaW5hbExlbmd0aCxvKz1hLm1vZGlmaWVkTGVuZ3RoKX1yZXR1cm57cXVpdEVhcmx5Om4sY2hhbmdlczpyfX1fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQsbixyLGksbyxhKXtpZih0aGlzLl9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQsbixyLGksbyxhKSlyZXR1cm47bGV0IHM7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJihzPVtuZXcgb3QodCxuLHQscixpLG8saSxhKV0pLGUucHVzaChuZXcgYXQodCx0LGksaSxzKSl9X21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGUsdCxuLHIsaSxvLGEpe2NvbnN0IHM9ZS5sZW5ndGg7aWYoMD09PXMpcmV0dXJuITE7Y29uc3QgYz1lW3MtMV07cmV0dXJuIDAhPT1jLm9yaWdpbmFsRW5kTGluZU51bWJlciYmMCE9PWMubW9kaWZpZWRFbmRMaW5lTnVtYmVyJiYoYy5vcmlnaW5hbEVuZExpbmVOdW1iZXIrMT09PXQmJmMubW9kaWZpZWRFbmRMaW5lTnVtYmVyKzE9PT1pJiYoYy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCxjLm1vZGlmaWVkRW5kTGluZU51bWJlcj1pLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiZjLmNoYXJDaGFuZ2VzJiZjLmNoYXJDaGFuZ2VzLnB1c2gobmV3IG90KHQsbix0LHIsaSxvLGksYSkpLCEwKSl9fWZ1bmN0aW9uIGN0KGUsdCl7Y29uc3Qgbj1mdW5jdGlvbihlKXtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KHQpO2lmKDMyIT09biYmOSE9PW4pcmV0dXJuIHR9cmV0dXJuLTF9KGUpO3JldHVybi0xPT09bj90Om4rMX1mdW5jdGlvbiBsdChlLHQpe2NvbnN0IG49ZnVuY3Rpb24oZSx0PWUubGVuZ3RoLTEpe2ZvcihsZXQgbj10O24+PTA7bi0tKXtjb25zdCB0PWUuY2hhckNvZGVBdChuKTtpZigzMiE9PXQmJjkhPT10KXJldHVybiBufXJldHVybi0xfShlKTtyZXR1cm4tMT09PW4/dDpuKzJ9ZnVuY3Rpb24gdXQoZSl7aWYoMD09PWUpcmV0dXJuKCk9PiEwO2NvbnN0IHQ9RGF0ZS5ub3coKTtyZXR1cm4oKT0+RGF0ZS5ub3coKS10PGV9dmFyIGh0O2Z1bmN0aW9uIGZ0KGUpe3JldHVybiBlPDA/MDplPjI1NT8yNTU6MHxlfWZ1bmN0aW9uIGR0KGUpe3JldHVybiBlPDA/MDplPjQyOTQ5NjcyOTU/NDI5NDk2NzI5NTowfGV9IWZ1bmN0aW9uKGUpe2UuaXNMZXNzVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gZTwwfSxlLmlzR3JlYXRlclRoYW49ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MH0sZS5pc05laXRoZXJMZXNzT3JHcmVhdGVyVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gMD09PWV9LGUuZ3JlYXRlclRoYW49MSxlLmxlc3NUaGFuPS0xLGUubmVpdGhlckxlc3NPckdyZWF0ZXJUaGFuPTB9KGh0fHwoaHQ9e30pKTtjbGFzcyBtdHtjb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlcz1lLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheShlLmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4PW5ldyBJbnQzMkFycmF5KDEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT0tMX1pbnNlcnRWYWx1ZXMoZSx0KXtlPWR0KGUpO2NvbnN0IG49dGhpcy52YWx1ZXMscj10aGlzLnByZWZpeFN1bSxpPXQubGVuZ3RoO3JldHVybiAwIT09aSYmKHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aCtpKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheSgwLGUpLDApLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KGUpLGUraSksdGhpcy52YWx1ZXMuc2V0KHQsZSksZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1zZXRWYWx1ZShlLHQpe3JldHVybiBlPWR0KGUpLHQ9ZHQodCksdGhpcy52YWx1ZXNbZV0hPT10JiYodGhpcy52YWx1ZXNbZV09dCxlLTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPWUtMSksITApfXJlbW92ZVZhbHVlcyhlLHQpe2U9ZHQoZSksdD1kdCh0KTtjb25zdCBuPXRoaXMudmFsdWVzLHI9dGhpcy5wcmVmaXhTdW07aWYoZT49bi5sZW5ndGgpcmV0dXJuITE7Y29uc3QgaT1uLmxlbmd0aC1lO3JldHVybiB0Pj1pJiYodD1pKSwwIT09dCYmKHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aC10KSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheSgwLGUpLDApLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KGUrdCksZSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1nZXRUb3RhbFN1bSgpe3JldHVybiAwPT09dGhpcy52YWx1ZXMubGVuZ3RoPzA6dGhpcy5fZ2V0UHJlZml4U3VtKHRoaXMudmFsdWVzLmxlbmd0aC0xKX1nZXRQcmVmaXhTdW0oZSl7cmV0dXJuIGU8MD8wOihlPWR0KGUpLHRoaXMuX2dldFByZWZpeFN1bShlKSl9X2dldFByZWZpeFN1bShlKXtpZihlPD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0pcmV0dXJuIHRoaXMucHJlZml4U3VtW2VdO2xldCB0PXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxOzA9PT10JiYodGhpcy5wcmVmaXhTdW1bMF09dGhpcy52YWx1ZXNbMF0sdCsrKSxlPj10aGlzLnZhbHVlcy5sZW5ndGgmJihlPXRoaXMudmFsdWVzLmxlbmd0aC0xKTtmb3IobGV0IG49dDtuPD1lO24rKyl0aGlzLnByZWZpeFN1bVtuXT10aGlzLnByZWZpeFN1bVtuLTFdK3RoaXMudmFsdWVzW25dO3JldHVybiB0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09TWF0aC5tYXgodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdLGUpLHRoaXMucHJlZml4U3VtW2VdfWdldEluZGV4T2YoZSl7ZT1NYXRoLmZsb29yKGUpLHRoaXMuZ2V0VG90YWxTdW0oKTtsZXQgdD0wLG49dGhpcy52YWx1ZXMubGVuZ3RoLTEscj0wLGk9MCxvPTA7Zm9yKDt0PD1uOylpZihyPXQrKG4tdCkvMnwwLGk9dGhpcy5wcmVmaXhTdW1bcl0sbz1pLXRoaXMudmFsdWVzW3JdLGU8byluPXItMTtlbHNle2lmKCEoZT49aSkpYnJlYWs7dD1yKzF9cmV0dXJuIG5ldyBndChyLGUtbyl9fWNsYXNzIGd0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5pbmRleD1lLHRoaXMucmVtYWluZGVyPXQsdGhpcy5fcHJlZml4U3VtSW5kZXhPZlJlc3VsdEJyYW5kPXZvaWQgMCx0aGlzLmluZGV4PWUsdGhpcy5yZW1haW5kZXI9dH19Y2xhc3MgcHR7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGluZXM9dCx0aGlzLl9lb2w9bix0aGlzLl92ZXJzaW9uSWQ9cix0aGlzLl9saW5lU3RhcnRzPW51bGwsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX2xpbmVzLmxlbmd0aD0wfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb25JZH1nZXRUZXh0KCl7cmV0dXJuIG51bGw9PT10aGlzLl9jYWNoZWRUZXh0VmFsdWUmJih0aGlzLl9jYWNoZWRUZXh0VmFsdWU9dGhpcy5fbGluZXMuam9pbih0aGlzLl9lb2wpKSx0aGlzLl9jYWNoZWRUZXh0VmFsdWV9b25FdmVudHMoZSl7ZS5lb2wmJmUuZW9sIT09dGhpcy5fZW9sJiYodGhpcy5fZW9sPWUuZW9sLHRoaXMuX2xpbmVTdGFydHM9bnVsbCk7Y29uc3QgdD1lLmNoYW5nZXM7Zm9yKGNvbnN0IGUgb2YgdCl0aGlzLl9hY2NlcHREZWxldGVSYW5nZShlLnJhbmdlKSx0aGlzLl9hY2NlcHRJbnNlcnRUZXh0KG5ldyBldChlLnJhbmdlLnN0YXJ0TGluZU51bWJlcixlLnJhbmdlLnN0YXJ0Q29sdW1uKSxlLnRleHQpO3RoaXMuX3ZlcnNpb25JZD1lLnZlcnNpb25JZCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1fZW5zdXJlTGluZVN0YXJ0cygpe2lmKCF0aGlzLl9saW5lU3RhcnRzKXtjb25zdCBlPXRoaXMuX2VvbC5sZW5ndGgsdD10aGlzLl9saW5lcy5sZW5ndGgsbj1uZXcgVWludDMyQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyluW3JdPXRoaXMuX2xpbmVzW3JdLmxlbmd0aCtlO3RoaXMuX2xpbmVTdGFydHM9bmV3IG10KG4pfX1fc2V0TGluZVRleHQoZSx0KXt0aGlzLl9saW5lc1tlXT10LHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuc2V0VmFsdWUoZSx0aGlzLl9saW5lc1tlXS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aCl9X2FjY2VwdERlbGV0ZVJhbmdlKGUpe2lmKGUuc3RhcnRMaW5lTnVtYmVyIT09ZS5lbmRMaW5lTnVtYmVyKXRoaXMuX3NldExpbmVUZXh0KGUuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1tlLmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UoZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyLWUuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyhlLnN0YXJ0TGluZU51bWJlcixlLmVuZExpbmVOdW1iZXItZS5zdGFydExpbmVOdW1iZXIpO2Vsc2V7aWYoZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1uKXJldHVybjt0aGlzLl9zZXRMaW5lVGV4dChlLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKX19X2FjY2VwdEluc2VydFRleHQoZSx0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IG49dC5zcGxpdCgvXHJcbnxccnxcbi8pO2lmKDE9PT1uLmxlbmd0aClyZXR1cm4gdm9pZCB0aGlzLl9zZXRMaW5lVGV4dChlLmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5jb2x1bW4tMSkrblswXSt0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpKTtuW24ubGVuZ3RoLTFdKz10aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpLHRoaXMuX3NldExpbmVUZXh0KGUubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLmNvbHVtbi0xKStuWzBdKTtjb25zdCByPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aC0xKTtmb3IobGV0IHQ9MTt0PG4ubGVuZ3RoO3QrKyl0aGlzLl9saW5lcy5zcGxpY2UoZS5saW5lTnVtYmVyK3QtMSwwLG5bdF0pLHJbdC0xXT1uW3RdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoO3RoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuaW5zZXJ0VmFsdWVzKGUubGluZU51bWJlcixyKX19Y29uc3QgYnQ9ZnVuY3Rpb24oZT0iIil7bGV0IHQ9IigtP1xcZCpcXC5cXGRcXHcqKXwoW14iO2Zvcihjb25zdCBuIG9mImB+IUAjJCVeJiooKS09K1t7XX1cXHw7OidcIiwuPD4vPyIpZS5pbmRleE9mKG4pPj0wfHwodCs9IlxcIituKTtyZXR1cm4gdCs9Ilxcc10rKSIsbmV3IFJlZ0V4cCh0LCJnIil9KCk7Y29uc3QgdnQ9bmV3IGc7ZnVuY3Rpb24geXQoZSx0LG4scixpKXtpZihpfHwoaT1zLmZpcnN0KHZ0KSksbi5sZW5ndGg+aS5tYXhMZW4pe2xldCBvPWUtaS5tYXhMZW4vMjtyZXR1cm4gbzwwP289MDpyKz1vLHl0KGUsdCxuPW4uc3Vic3RyaW5nKG8sZStpLm1heExlbi8yKSxyLGkpfWNvbnN0IG89RGF0ZS5ub3coKSxhPWUtMS1yO2xldCBjPS0xLGw9bnVsbDtmb3IobGV0IGU9MTshKERhdGUubm93KCktbz49aS50aW1lQnVkZ2V0KTtlKyspe2NvbnN0IHI9YS1pLndpbmRvd1NpemUqZTt0Lmxhc3RJbmRleD1NYXRoLm1heCgwLHIpO2NvbnN0IG89Q3QodCxuLGEsYyk7aWYoIW8mJmwpYnJlYWs7aWYobD1vLHI8PTApYnJlYWs7Yz1yfWlmKGwpe2NvbnN0IGU9e3dvcmQ6bFswXSxzdGFydENvbHVtbjpyKzErbC5pbmRleCxlbmRDb2x1bW46cisxK2wuaW5kZXgrbFswXS5sZW5ndGh9O3JldHVybiB0Lmxhc3RJbmRleD0wLGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ3QoZSx0LG4scil7bGV0IGk7Zm9yKDtpPWUuZXhlYyh0KTspe2NvbnN0IHQ9aS5pbmRleHx8MDtpZih0PD1uJiZlLmxhc3RJbmRleD49bilyZXR1cm4gaTtpZihyPjAmJnQ+cilyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH12dC51bnNoaWZ0KHttYXhMZW46MWUzLHdpbmRvd1NpemU6MTUsdGltZUJ1ZGdldDoxNTB9KTtjbGFzcyB3dHtjb25zdHJ1Y3RvcihlKXtjb25zdCB0PWZ0KGUpO3RoaXMuX2RlZmF1bHRWYWx1ZT10LHRoaXMuX2FzY2lpTWFwPXd0Ll9jcmVhdGVBc2NpaU1hcCh0KSx0aGlzLl9tYXA9bmV3IE1hcH1zdGF0aWMgX2NyZWF0ZUFzY2lpTWFwKGUpe2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IG49MDtuPDI1NjtuKyspdFtuXT1lO3JldHVybiB0fXNldChlLHQpe2NvbnN0IG49ZnQodCk7ZT49MCYmZTwyNTY/dGhpcy5fYXNjaWlNYXBbZV09bjp0aGlzLl9tYXAuc2V0KGUsbil9Z2V0KGUpe3JldHVybiBlPj0wJiZlPDI1Nj90aGlzLl9hc2NpaU1hcFtlXTp0aGlzLl9tYXAuZ2V0KGUpfHx0aGlzLl9kZWZhdWx0VmFsdWV9fWNsYXNzIF90e2NvbnN0cnVjdG9yKGUsdCxuKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUqdCk7Zm9yKGxldCBpPTAsbz1lKnQ7aTxvO2krKylyW2ldPW47dGhpcy5fZGF0YT1yLHRoaXMucm93cz1lLHRoaXMuY29scz10fWdldChlLHQpe3JldHVybiB0aGlzLl9kYXRhW2UqdGhpcy5jb2xzK3RdfXNldChlLHQsbil7dGhpcy5fZGF0YVtlKnRoaXMuY29scyt0XT1ufX1jbGFzcyBTdHtjb25zdHJ1Y3RvcihlKXtsZXQgdD0wLG49MDtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0W2ksbyxhXT1lW3JdO28+dCYmKHQ9byksaT5uJiYobj1pKSxhPm4mJihuPWEpfXQrKyxuKys7Y29uc3Qgcj1uZXcgX3Qobix0LDApO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3RbbixpLG9dPWVbdF07ci5zZXQobixpLG8pfXRoaXMuX3N0YXRlcz1yLHRoaXMuX21heENoYXJDb2RlPXR9bmV4dFN0YXRlKGUsdCl7cmV0dXJuIHQ8MHx8dD49dGhpcy5fbWF4Q2hhckNvZGU/MDp0aGlzLl9zdGF0ZXMuZ2V0KGUsdCl9fWxldCBBdD1udWxsO2xldCBFdD1udWxsO2NsYXNzIHh0e3N0YXRpYyBfY3JlYXRlTGluayhlLHQsbixyLGkpe2xldCBvPWktMTtkb3tjb25zdCBuPXQuY2hhckNvZGVBdChvKTtpZigyIT09ZS5nZXQobikpYnJlYWs7by0tfXdoaWxlKG8+cik7aWYocj4wKXtjb25zdCBlPXQuY2hhckNvZGVBdChyLTEpLG49dC5jaGFyQ29kZUF0KG8pOyg0MD09PWUmJjQxPT09bnx8OTE9PT1lJiY5Mz09PW58fDEyMz09PWUmJjEyNT09PW4pJiZvLS19cmV0dXJue3JhbmdlOntzdGFydExpbmVOdW1iZXI6bixzdGFydENvbHVtbjpyKzEsZW5kTGluZU51bWJlcjpuLGVuZENvbHVtbjpvKzJ9LHVybDp0LnN1YnN0cmluZyhyLG8rMSl9fXN0YXRpYyBjb21wdXRlTGlua3MoZSx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT1BdCYmKEF0PW5ldyBTdChbWzEsMTA0LDJdLFsxLDcyLDJdLFsxLDEwMiw2XSxbMSw3MCw2XSxbMiwxMTYsM10sWzIsODQsM10sWzMsMTE2LDRdLFszLDg0LDRdLFs0LDExMiw1XSxbNCw4MCw1XSxbNSwxMTUsOV0sWzUsODMsOV0sWzUsNTgsMTBdLFs2LDEwNSw3XSxbNiw3Myw3XSxbNywxMDgsOF0sWzcsNzYsOF0sWzgsMTAxLDldLFs4LDY5LDldLFs5LDU4LDEwXSxbMTAsNDcsMTFdLFsxMSw0NywxMl1dKSksQXR9KCkpe2NvbnN0IG49ZnVuY3Rpb24oKXtpZihudWxsPT09RXQpe0V0PW5ldyB3dCgwKTtjb25zdCBlPSIgXHQ8PidcIuOAgeOAgu+9oe+9pO+8jO+8ju+8mu+8m+KAmOOAiOOAjOOAjuOAlO+8iO+8u++9m++9ou+9o++9ne+8ve+8ieOAleOAj+OAjeOAieKAme+9gO+9nuKApiI7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspRXQuc2V0KGUuY2hhckNvZGVBdCh0KSwxKTtjb25zdCB0PSIuLDs6Ijtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylFdC5zZXQodC5jaGFyQ29kZUF0KGUpLDIpfXJldHVybiBFdH0oKSxyPVtdO2ZvcihsZXQgaT0xLG89ZS5nZXRMaW5lQ291bnQoKTtpPD1vO2krKyl7Y29uc3Qgbz1lLmdldExpbmVDb250ZW50KGkpLGE9by5sZW5ndGg7bGV0IHM9MCxjPTAsbD0wLHU9MSxoPSExLGY9ITEsZD0hMSxtPSExO2Zvcig7czxhOyl7bGV0IGU9ITE7Y29uc3QgYT1vLmNoYXJDb2RlQXQocyk7aWYoMTM9PT11KXtsZXQgdDtzd2l0Y2goYSl7Y2FzZSA0MDpoPSEwLHQ9MDticmVhaztjYXNlIDQxOnQ9aD8wOjE7YnJlYWs7Y2FzZSA5MTpkPSEwLGY9ITAsdD0wO2JyZWFrO2Nhc2UgOTM6ZD0hMSx0PWY/MDoxO2JyZWFrO2Nhc2UgMTIzOm09ITAsdD0wO2JyZWFrO2Nhc2UgMTI1OnQ9bT8wOjE7YnJlYWs7Y2FzZSAzOTp0PTM5PT09bD8xOjA7YnJlYWs7Y2FzZSAzNDp0PTM0PT09bD8xOjA7YnJlYWs7Y2FzZSA5Njp0PTk2PT09bD8xOjA7YnJlYWs7Y2FzZSA0Mjp0PTQyPT09bD8xOjA7YnJlYWs7Y2FzZSAxMjQ6dD0xMjQ9PT1sPzE6MDticmVhaztjYXNlIDMyOnQ9ZD8wOjE7YnJlYWs7ZGVmYXVsdDp0PW4uZ2V0KGEpfTE9PT10JiYoci5wdXNoKHh0Ll9jcmVhdGVMaW5rKG4sbyxpLGMscykpLGU9ITApfWVsc2UgaWYoMTI9PT11KXtsZXQgdDs5MT09PWE/KGY9ITAsdD0wKTp0PW4uZ2V0KGEpLDE9PT10P2U9ITA6dT0xM31lbHNlIHU9dC5uZXh0U3RhdGUodSxhKSwwPT09dSYmKGU9ITApO2UmJih1PTEsaD0hMSxmPSExLG09ITEsYz1zKzEsbD1hKSxzKyt9MTM9PT11JiZyLnB1c2goeHQuX2NyZWF0ZUxpbmsobixvLGksYyxhKSl9cmV0dXJuIHJ9fWNsYXNzIE50e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGVmYXVsdFZhbHVlU2V0PVtbInRydWUiLCJmYWxzZSJdLFsiVHJ1ZSIsIkZhbHNlIl0sWyJQcml2YXRlIiwiUHVibGljIiwiRnJpZW5kIiwiUmVhZE9ubHkiLCJQYXJ0aWFsIiwiUHJvdGVjdGVkIiwiV3JpdGVPbmx5Il0sWyJwdWJsaWMiLCJwcm90ZWN0ZWQiLCJwcml2YXRlIl1dfW5hdmlnYXRlVmFsdWVTZXQoZSx0LG4scixpKXtpZihlJiZ0KXtjb25zdCBuPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KHQsaSk7aWYobilyZXR1cm57cmFuZ2U6ZSx2YWx1ZTpufX1pZihuJiZyKXtjb25zdCBlPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KHIsaSk7aWYoZSlyZXR1cm57cmFuZ2U6bix2YWx1ZTplfX1yZXR1cm4gbnVsbH1kb05hdmlnYXRlVmFsdWVTZXQoZSx0KXtjb25zdCBuPXRoaXMubnVtYmVyUmVwbGFjZShlLHQpO3JldHVybiBudWxsIT09bj9uOnRoaXMudGV4dFJlcGxhY2UoZSx0KX1udW1iZXJSZXBsYWNlKGUsdCl7Y29uc3Qgbj1NYXRoLnBvdygxMCxlLmxlbmd0aC0oZS5sYXN0SW5kZXhPZigiLiIpKzEpKTtsZXQgcj1OdW1iZXIoZSk7Y29uc3QgaT1wYXJzZUZsb2F0KGUpO3JldHVybiBpc05hTihyKXx8aXNOYU4oaSl8fHIhPT1pP251bGw6MCE9PXJ8fHQ/KHI9TWF0aC5mbG9vcihyKm4pLHIrPXQ/bjotbixTdHJpbmcoci9uKSk6bnVsbH10ZXh0UmVwbGFjZShlLHQpe3JldHVybiB0aGlzLnZhbHVlU2V0c1JlcGxhY2UodGhpcy5fZGVmYXVsdFZhbHVlU2V0LGUsdCl9dmFsdWVTZXRzUmVwbGFjZShlLHQsbil7bGV0IHI9bnVsbDtmb3IobGV0IGk9MCxvPWUubGVuZ3RoO251bGw9PT1yJiZpPG87aSsrKXI9dGhpcy52YWx1ZVNldFJlcGxhY2UoZVtpXSx0LG4pO3JldHVybiByfXZhbHVlU2V0UmVwbGFjZShlLHQsbil7bGV0IHI9ZS5pbmRleE9mKHQpO3JldHVybiByPj0wPyhyKz1uPzE6LTEscjwwP3I9ZS5sZW5ndGgtMTpyJT1lLmxlbmd0aCxlW3JdKTpudWxsfX1OdC5JTlNUQU5DRT1uZXcgTnQ7Y29uc3Qga3Q9T2JqZWN0LmZyZWV6ZSgoZnVuY3Rpb24oZSx0KXtjb25zdCBuPXNldFRpbWVvdXQoZS5iaW5kKHQpLDApO3JldHVybntkaXNwb3NlKCl7Y2xlYXJUaW1lb3V0KG4pfX19KSk7dmFyIEx0OyFmdW5jdGlvbihlKXtlLmlzQ2FuY2VsbGF0aW9uVG9rZW49ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lLk5vbmV8fHQ9PT1lLkNhbmNlbGxlZHx8KHQgaW5zdGFuY2VvZiBUdHx8ISghdHx8Im9iamVjdCIhPXR5cGVvZiB0KSYmKCJib29sZWFuIj09dHlwZW9mIHQuaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKSl9LGUuTm9uZT1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMSxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpGLk5vbmV9KSxlLkNhbmNlbGxlZD1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMCxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDprdH0pfShMdHx8KEx0PXt9KSk7Y2xhc3MgVHR7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0NhbmNlbGxlZD0hMSx0aGlzLl9lbWl0dGVyPW51bGx9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP2t0Oih0aGlzLl9lbWl0dGVyfHwodGhpcy5fZW1pdHRlcj1uZXcgQiksdGhpcy5fZW1pdHRlci5ldmVudCl9ZGlzcG9zZSgpe3RoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmRpc3Bvc2UoKSx0aGlzLl9lbWl0dGVyPW51bGwpfX1jbGFzcyBPdHtjb25zdHJ1Y3RvcihlKXt0aGlzLl90b2tlbj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPWUmJmUub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQodGhpcy5jYW5jZWwsdGhpcyl9Z2V0IHRva2VuKCl7cmV0dXJuIHRoaXMuX3Rva2VufHwodGhpcy5fdG9rZW49bmV3IFR0KSx0aGlzLl90b2tlbn1jYW5jZWwoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIFR0JiZ0aGlzLl90b2tlbi5jYW5jZWwoKTp0aGlzLl90b2tlbj1MdC5DYW5jZWxsZWR9ZGlzcG9zZShlPSExKXtlJiZ0aGlzLmNhbmNlbCgpLHRoaXMuX3BhcmVudExpc3RlbmVyJiZ0aGlzLl9wYXJlbnRMaXN0ZW5lci5kaXNwb3NlKCksdGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBUdCYmdGhpcy5fdG9rZW4uZGlzcG9zZSgpOnRoaXMuX3Rva2VuPUx0Lk5vbmV9fWNsYXNzIEl0e2NvbnN0cnVjdG9yKCl7dGhpcy5fa2V5Q29kZVRvU3RyPVtdLHRoaXMuX3N0clRvS2V5Q29kZT1PYmplY3QuY3JlYXRlKG51bGwpfWRlZmluZShlLHQpe3RoaXMuX2tleUNvZGVUb1N0cltlXT10LHRoaXMuX3N0clRvS2V5Q29kZVt0LnRvTG93ZXJDYXNlKCldPWV9a2V5Q29kZVRvU3RyKGUpe3JldHVybiB0aGlzLl9rZXlDb2RlVG9TdHJbZV19c3RyVG9LZXlDb2RlKGUpe3JldHVybiB0aGlzLl9zdHJUb0tleUNvZGVbZS50b0xvd2VyQ2FzZSgpXXx8MH19Y29uc3QgTXQ9bmV3IEl0LFB0PW5ldyBJdCxSdD1uZXcgSXQsVnQ9bmV3IEFycmF5KDIzMCksRnQ9T2JqZWN0LmNyZWF0ZShudWxsKSxEdD1PYmplY3QuY3JlYXRlKG51bGwpO3ZhciBLdCxqdDshZnVuY3Rpb24oKXtjb25zdCBlPSIiLHQ9W1swLDEsMCwiTm9uZSIsMCwidW5rbm93biIsMCwiVktfVU5LTk9XTiIsZSxlXSxbMCwxLDEsIkh5cGVyIiwwLGUsMCxlLGUsZV0sWzAsMSwyLCJTdXBlciIsMCxlLDAsZSxlLGVdLFswLDEsMywiRm4iLDAsZSwwLGUsZSxlXSxbMCwxLDQsIkZuTG9jayIsMCxlLDAsZSxlLGVdLFswLDEsNSwiU3VzcGVuZCIsMCxlLDAsZSxlLGVdLFswLDEsNiwiUmVzdW1lIiwwLGUsMCxlLGUsZV0sWzAsMSw3LCJUdXJibyIsMCxlLDAsZSxlLGVdLFswLDEsOCwiU2xlZXAiLDAsZSwwLCJWS19TTEVFUCIsZSxlXSxbMCwxLDksIldha2VVcCIsMCxlLDAsZSxlLGVdLFszMSwwLDEwLCJLZXlBIiwzMSwiQSIsNjUsIlZLX0EiLGUsZV0sWzMyLDAsMTEsIktleUIiLDMyLCJCIiw2NiwiVktfQiIsZSxlXSxbMzMsMCwxMiwiS2V5QyIsMzMsIkMiLDY3LCJWS19DIixlLGVdLFszNCwwLDEzLCJLZXlEIiwzNCwiRCIsNjgsIlZLX0QiLGUsZV0sWzM1LDAsMTQsIktleUUiLDM1LCJFIiw2OSwiVktfRSIsZSxlXSxbMzYsMCwxNSwiS2V5RiIsMzYsIkYiLDcwLCJWS19GIixlLGVdLFszNywwLDE2LCJLZXlHIiwzNywiRyIsNzEsIlZLX0ciLGUsZV0sWzM4LDAsMTcsIktleUgiLDM4LCJIIiw3MiwiVktfSCIsZSxlXSxbMzksMCwxOCwiS2V5SSIsMzksIkkiLDczLCJWS19JIixlLGVdLFs0MCwwLDE5LCJLZXlKIiw0MCwiSiIsNzQsIlZLX0oiLGUsZV0sWzQxLDAsMjAsIktleUsiLDQxLCJLIiw3NSwiVktfSyIsZSxlXSxbNDIsMCwyMSwiS2V5TCIsNDIsIkwiLDc2LCJWS19MIixlLGVdLFs0MywwLDIyLCJLZXlNIiw0MywiTSIsNzcsIlZLX00iLGUsZV0sWzQ0LDAsMjMsIktleU4iLDQ0LCJOIiw3OCwiVktfTiIsZSxlXSxbNDUsMCwyNCwiS2V5TyIsNDUsIk8iLDc5LCJWS19PIixlLGVdLFs0NiwwLDI1LCJLZXlQIiw0NiwiUCIsODAsIlZLX1AiLGUsZV0sWzQ3LDAsMjYsIktleVEiLDQ3LCJRIiw4MSwiVktfUSIsZSxlXSxbNDgsMCwyNywiS2V5UiIsNDgsIlIiLDgyLCJWS19SIixlLGVdLFs0OSwwLDI4LCJLZXlTIiw0OSwiUyIsODMsIlZLX1MiLGUsZV0sWzUwLDAsMjksIktleVQiLDUwLCJUIiw4NCwiVktfVCIsZSxlXSxbNTEsMCwzMCwiS2V5VSIsNTEsIlUiLDg1LCJWS19VIixlLGVdLFs1MiwwLDMxLCJLZXlWIiw1MiwiViIsODYsIlZLX1YiLGUsZV0sWzUzLDAsMzIsIktleVciLDUzLCJXIiw4NywiVktfVyIsZSxlXSxbNTQsMCwzMywiS2V5WCIsNTQsIlgiLDg4LCJWS19YIixlLGVdLFs1NSwwLDM0LCJLZXlZIiw1NSwiWSIsODksIlZLX1kiLGUsZV0sWzU2LDAsMzUsIktleVoiLDU2LCJaIiw5MCwiVktfWiIsZSxlXSxbMjIsMCwzNiwiRGlnaXQxIiwyMiwiMSIsNDksIlZLXzEiLGUsZV0sWzIzLDAsMzcsIkRpZ2l0MiIsMjMsIjIiLDUwLCJWS18yIixlLGVdLFsyNCwwLDM4LCJEaWdpdDMiLDI0LCIzIiw1MSwiVktfMyIsZSxlXSxbMjUsMCwzOSwiRGlnaXQ0IiwyNSwiNCIsNTIsIlZLXzQiLGUsZV0sWzI2LDAsNDAsIkRpZ2l0NSIsMjYsIjUiLDUzLCJWS181IixlLGVdLFsyNywwLDQxLCJEaWdpdDYiLDI3LCI2Iiw1NCwiVktfNiIsZSxlXSxbMjgsMCw0MiwiRGlnaXQ3IiwyOCwiNyIsNTUsIlZLXzciLGUsZV0sWzI5LDAsNDMsIkRpZ2l0OCIsMjksIjgiLDU2LCJWS184IixlLGVdLFszMCwwLDQ0LCJEaWdpdDkiLDMwLCI5Iiw1NywiVktfOSIsZSxlXSxbMjEsMCw0NSwiRGlnaXQwIiwyMSwiMCIsNDgsIlZLXzAiLGUsZV0sWzMsMSw0NiwiRW50ZXIiLDMsIkVudGVyIiwxMywiVktfUkVUVVJOIixlLGVdLFs5LDEsNDcsIkVzY2FwZSIsOSwiRXNjYXBlIiwyNywiVktfRVNDQVBFIixlLGVdLFsxLDEsNDgsIkJhY2tzcGFjZSIsMSwiQmFja3NwYWNlIiw4LCJWS19CQUNLIixlLGVdLFsyLDEsNDksIlRhYiIsMiwiVGFiIiw5LCJWS19UQUIiLGUsZV0sWzEwLDEsNTAsIlNwYWNlIiwxMCwiU3BhY2UiLDMyLCJWS19TUEFDRSIsZSxlXSxbODMsMCw1MSwiTWludXMiLDgzLCItIiwxODksIlZLX09FTV9NSU5VUyIsIi0iLCJPRU1fTUlOVVMiXSxbODEsMCw1MiwiRXF1YWwiLDgxLCI9IiwxODcsIlZLX09FTV9QTFVTIiwiPSIsIk9FTV9QTFVTIl0sWzg3LDAsNTMsIkJyYWNrZXRMZWZ0Iiw4NywiWyIsMjE5LCJWS19PRU1fNCIsIlsiLCJPRU1fNCJdLFs4OSwwLDU0LCJCcmFja2V0UmlnaHQiLDg5LCJdIiwyMjEsIlZLX09FTV82IiwiXSIsIk9FTV82Il0sWzg4LDAsNTUsIkJhY2tzbGFzaCIsODgsIlxcIiwyMjAsIlZLX09FTV81IiwiXFwiLCJPRU1fNSJdLFswLDAsNTYsIkludGxIYXNoIiwwLGUsMCxlLGUsZV0sWzgwLDAsNTcsIlNlbWljb2xvbiIsODAsIjsiLDE4NiwiVktfT0VNXzEiLCI7IiwiT0VNXzEiXSxbOTAsMCw1OCwiUXVvdGUiLDkwLCInIiwyMjIsIlZLX09FTV83IiwiJyIsIk9FTV83Il0sWzg2LDAsNTksIkJhY2txdW90ZSIsODYsImAiLDE5MiwiVktfT0VNXzMiLCJgIiwiT0VNXzMiXSxbODIsMCw2MCwiQ29tbWEiLDgyLCIsIiwxODgsIlZLX09FTV9DT01NQSIsIiwiLCJPRU1fQ09NTUEiXSxbODQsMCw2MSwiUGVyaW9kIiw4NCwiLiIsMTkwLCJWS19PRU1fUEVSSU9EIiwiLiIsIk9FTV9QRVJJT0QiXSxbODUsMCw2MiwiU2xhc2giLDg1LCIvIiwxOTEsIlZLX09FTV8yIiwiLyIsIk9FTV8yIl0sWzgsMSw2MywiQ2Fwc0xvY2siLDgsIkNhcHNMb2NrIiwyMCwiVktfQ0FQSVRBTCIsZSxlXSxbNTksMSw2NCwiRjEiLDU5LCJGMSIsMTEyLCJWS19GMSIsZSxlXSxbNjAsMSw2NSwiRjIiLDYwLCJGMiIsMTEzLCJWS19GMiIsZSxlXSxbNjEsMSw2NiwiRjMiLDYxLCJGMyIsMTE0LCJWS19GMyIsZSxlXSxbNjIsMSw2NywiRjQiLDYyLCJGNCIsMTE1LCJWS19GNCIsZSxlXSxbNjMsMSw2OCwiRjUiLDYzLCJGNSIsMTE2LCJWS19GNSIsZSxlXSxbNjQsMSw2OSwiRjYiLDY0LCJGNiIsMTE3LCJWS19GNiIsZSxlXSxbNjUsMSw3MCwiRjciLDY1LCJGNyIsMTE4LCJWS19GNyIsZSxlXSxbNjYsMSw3MSwiRjgiLDY2LCJGOCIsMTE5LCJWS19GOCIsZSxlXSxbNjcsMSw3MiwiRjkiLDY3LCJGOSIsMTIwLCJWS19GOSIsZSxlXSxbNjgsMSw3MywiRjEwIiw2OCwiRjEwIiwxMjEsIlZLX0YxMCIsZSxlXSxbNjksMSw3NCwiRjExIiw2OSwiRjExIiwxMjIsIlZLX0YxMSIsZSxlXSxbNzAsMSw3NSwiRjEyIiw3MCwiRjEyIiwxMjMsIlZLX0YxMiIsZSxlXSxbMCwxLDc2LCJQcmludFNjcmVlbiIsMCxlLDAsZSxlLGVdLFs3OSwxLDc3LCJTY3JvbGxMb2NrIiw3OSwiU2Nyb2xsTG9jayIsMTQ1LCJWS19TQ1JPTEwiLGUsZV0sWzcsMSw3OCwiUGF1c2UiLDcsIlBhdXNlQnJlYWsiLDE5LCJWS19QQVVTRSIsZSxlXSxbMTksMSw3OSwiSW5zZXJ0IiwxOSwiSW5zZXJ0Iiw0NSwiVktfSU5TRVJUIixlLGVdLFsxNCwxLDgwLCJIb21lIiwxNCwiSG9tZSIsMzYsIlZLX0hPTUUiLGUsZV0sWzExLDEsODEsIlBhZ2VVcCIsMTEsIlBhZ2VVcCIsMzMsIlZLX1BSSU9SIixlLGVdLFsyMCwxLDgyLCJEZWxldGUiLDIwLCJEZWxldGUiLDQ2LCJWS19ERUxFVEUiLGUsZV0sWzEzLDEsODMsIkVuZCIsMTMsIkVuZCIsMzUsIlZLX0VORCIsZSxlXSxbMTIsMSw4NCwiUGFnZURvd24iLDEyLCJQYWdlRG93biIsMzQsIlZLX05FWFQiLGUsZV0sWzE3LDEsODUsIkFycm93UmlnaHQiLDE3LCJSaWdodEFycm93IiwzOSwiVktfUklHSFQiLCJSaWdodCIsZV0sWzE1LDEsODYsIkFycm93TGVmdCIsMTUsIkxlZnRBcnJvdyIsMzcsIlZLX0xFRlQiLCJMZWZ0IixlXSxbMTgsMSw4NywiQXJyb3dEb3duIiwxOCwiRG93bkFycm93Iiw0MCwiVktfRE9XTiIsIkRvd24iLGVdLFsxNiwxLDg4LCJBcnJvd1VwIiwxNiwiVXBBcnJvdyIsMzgsIlZLX1VQIiwiVXAiLGVdLFs3OCwxLDg5LCJOdW1Mb2NrIiw3OCwiTnVtTG9jayIsMTQ0LCJWS19OVU1MT0NLIixlLGVdLFsxMDgsMSw5MCwiTnVtcGFkRGl2aWRlIiwxMDgsIk51bVBhZF9EaXZpZGUiLDExMSwiVktfRElWSURFIixlLGVdLFsxMDMsMSw5MSwiTnVtcGFkTXVsdGlwbHkiLDEwMywiTnVtUGFkX011bHRpcGx5IiwxMDYsIlZLX01VTFRJUExZIixlLGVdLFsxMDYsMSw5MiwiTnVtcGFkU3VidHJhY3QiLDEwNiwiTnVtUGFkX1N1YnRyYWN0IiwxMDksIlZLX1NVQlRSQUNUIixlLGVdLFsxMDQsMSw5MywiTnVtcGFkQWRkIiwxMDQsIk51bVBhZF9BZGQiLDEwNywiVktfQUREIixlLGVdLFszLDEsOTQsIk51bXBhZEVudGVyIiwzLGUsMCxlLGUsZV0sWzk0LDEsOTUsIk51bXBhZDEiLDk0LCJOdW1QYWQxIiw5NywiVktfTlVNUEFEMSIsZSxlXSxbOTUsMSw5NiwiTnVtcGFkMiIsOTUsIk51bVBhZDIiLDk4LCJWS19OVU1QQUQyIixlLGVdLFs5NiwxLDk3LCJOdW1wYWQzIiw5NiwiTnVtUGFkMyIsOTksIlZLX05VTVBBRDMiLGUsZV0sWzk3LDEsOTgsIk51bXBhZDQiLDk3LCJOdW1QYWQ0IiwxMDAsIlZLX05VTVBBRDQiLGUsZV0sWzk4LDEsOTksIk51bXBhZDUiLDk4LCJOdW1QYWQ1IiwxMDEsIlZLX05VTVBBRDUiLGUsZV0sWzk5LDEsMTAwLCJOdW1wYWQ2Iiw5OSwiTnVtUGFkNiIsMTAyLCJWS19OVU1QQUQ2IixlLGVdLFsxMDAsMSwxMDEsIk51bXBhZDciLDEwMCwiTnVtUGFkNyIsMTAzLCJWS19OVU1QQUQ3IixlLGVdLFsxMDEsMSwxMDIsIk51bXBhZDgiLDEwMSwiTnVtUGFkOCIsMTA0LCJWS19OVU1QQUQ4IixlLGVdLFsxMDIsMSwxMDMsIk51bXBhZDkiLDEwMiwiTnVtUGFkOSIsMTA1LCJWS19OVU1QQUQ5IixlLGVdLFs5MywxLDEwNCwiTnVtcGFkMCIsOTMsIk51bVBhZDAiLDk2LCJWS19OVU1QQUQwIixlLGVdLFsxMDcsMSwxMDUsIk51bXBhZERlY2ltYWwiLDEwNywiTnVtUGFkX0RlY2ltYWwiLDExMCwiVktfREVDSU1BTCIsZSxlXSxbOTIsMCwxMDYsIkludGxCYWNrc2xhc2giLDkyLCJPRU1fMTAyIiwyMjYsIlZLX09FTV8xMDIiLGUsZV0sWzU4LDEsMTA3LCJDb250ZXh0TWVudSIsNTgsIkNvbnRleHRNZW51Iiw5MyxlLGUsZV0sWzAsMSwxMDgsIlBvd2VyIiwwLGUsMCxlLGUsZV0sWzAsMSwxMDksIk51bXBhZEVxdWFsIiwwLGUsMCxlLGUsZV0sWzcxLDEsMTEwLCJGMTMiLDcxLCJGMTMiLDEyNCwiVktfRjEzIixlLGVdLFs3MiwxLDExMSwiRjE0Iiw3MiwiRjE0IiwxMjUsIlZLX0YxNCIsZSxlXSxbNzMsMSwxMTIsIkYxNSIsNzMsIkYxNSIsMTI2LCJWS19GMTUiLGUsZV0sWzc0LDEsMTEzLCJGMTYiLDc0LCJGMTYiLDEyNywiVktfRjE2IixlLGVdLFs3NSwxLDExNCwiRjE3Iiw3NSwiRjE3IiwxMjgsIlZLX0YxNyIsZSxlXSxbNzYsMSwxMTUsIkYxOCIsNzYsIkYxOCIsMTI5LCJWS19GMTgiLGUsZV0sWzc3LDEsMTE2LCJGMTkiLDc3LCJGMTkiLDEzMCwiVktfRjE5IixlLGVdLFswLDEsMTE3LCJGMjAiLDAsZSwwLCJWS19GMjAiLGUsZV0sWzAsMSwxMTgsIkYyMSIsMCxlLDAsIlZLX0YyMSIsZSxlXSxbMCwxLDExOSwiRjIyIiwwLGUsMCwiVktfRjIyIixlLGVdLFswLDEsMTIwLCJGMjMiLDAsZSwwLCJWS19GMjMiLGUsZV0sWzAsMSwxMjEsIkYyNCIsMCxlLDAsIlZLX0YyNCIsZSxlXSxbMCwxLDEyMiwiT3BlbiIsMCxlLDAsZSxlLGVdLFswLDEsMTIzLCJIZWxwIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjQsIlNlbGVjdCIsMCxlLDAsZSxlLGVdLFswLDEsMTI1LCJBZ2FpbiIsMCxlLDAsZSxlLGVdLFswLDEsMTI2LCJVbmRvIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjcsIkN1dCIsMCxlLDAsZSxlLGVdLFswLDEsMTI4LCJDb3B5IiwwLGUsMCxlLGUsZV0sWzAsMSwxMjksIlBhc3RlIiwwLGUsMCxlLGUsZV0sWzAsMSwxMzAsIkZpbmQiLDAsZSwwLGUsZSxlXSxbMCwxLDEzMSwiQXVkaW9Wb2x1bWVNdXRlIiwxMTIsIkF1ZGlvVm9sdW1lTXV0ZSIsMTczLCJWS19WT0xVTUVfTVVURSIsZSxlXSxbMCwxLDEzMiwiQXVkaW9Wb2x1bWVVcCIsMTEzLCJBdWRpb1ZvbHVtZVVwIiwxNzUsIlZLX1ZPTFVNRV9VUCIsZSxlXSxbMCwxLDEzMywiQXVkaW9Wb2x1bWVEb3duIiwxMTQsIkF1ZGlvVm9sdW1lRG93biIsMTc0LCJWS19WT0xVTUVfRE9XTiIsZSxlXSxbMTA1LDEsMTM0LCJOdW1wYWRDb21tYSIsMTA1LCJOdW1QYWRfU2VwYXJhdG9yIiwxMDgsIlZLX1NFUEFSQVRPUiIsZSxlXSxbMTEwLDAsMTM1LCJJbnRsUm8iLDExMCwiQUJOVF9DMSIsMTkzLCJWS19BQk5UX0MxIixlLGVdLFswLDEsMTM2LCJLYW5hTW9kZSIsMCxlLDAsZSxlLGVdLFswLDAsMTM3LCJJbnRsWWVuIiwwLGUsMCxlLGUsZV0sWzAsMSwxMzgsIkNvbnZlcnQiLDAsZSwwLGUsZSxlXSxbMCwxLDEzOSwiTm9uQ29udmVydCIsMCxlLDAsZSxlLGVdLFswLDEsMTQwLCJMYW5nMSIsMCxlLDAsZSxlLGVdLFswLDEsMTQxLCJMYW5nMiIsMCxlLDAsZSxlLGVdLFswLDEsMTQyLCJMYW5nMyIsMCxlLDAsZSxlLGVdLFswLDEsMTQzLCJMYW5nNCIsMCxlLDAsZSxlLGVdLFswLDEsMTQ0LCJMYW5nNSIsMCxlLDAsZSxlLGVdLFswLDEsMTQ1LCJBYm9ydCIsMCxlLDAsZSxlLGVdLFswLDEsMTQ2LCJQcm9wcyIsMCxlLDAsZSxlLGVdLFswLDEsMTQ3LCJOdW1wYWRQYXJlbkxlZnQiLDAsZSwwLGUsZSxlXSxbMCwxLDE0OCwiTnVtcGFkUGFyZW5SaWdodCIsMCxlLDAsZSxlLGVdLFswLDEsMTQ5LCJOdW1wYWRCYWNrc3BhY2UiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MCwiTnVtcGFkTWVtb3J5U3RvcmUiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MSwiTnVtcGFkTWVtb3J5UmVjYWxsIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTIsIk51bXBhZE1lbW9yeUNsZWFyIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTMsIk51bXBhZE1lbW9yeUFkZCIsMCxlLDAsZSxlLGVdLFswLDEsMTU0LCJOdW1wYWRNZW1vcnlTdWJ0cmFjdCIsMCxlLDAsZSxlLGVdLFswLDEsMTU1LCJOdW1wYWRDbGVhciIsMTI2LCJDbGVhciIsMTIsIlZLX0NMRUFSIixlLGVdLFswLDEsMTU2LCJOdW1wYWRDbGVhckVudHJ5IiwwLGUsMCxlLGUsZV0sWzUsMSwwLGUsNSwiQ3RybCIsMTcsIlZLX0NPTlRST0wiLGUsZV0sWzQsMSwwLGUsNCwiU2hpZnQiLDE2LCJWS19TSElGVCIsZSxlXSxbNiwxLDAsZSw2LCJBbHQiLDE4LCJWS19NRU5VIixlLGVdLFs1NywxLDAsZSw1NywiTWV0YSIsMCwiVktfQ09NTUFORCIsZSxlXSxbNSwxLDE1NywiQ29udHJvbExlZnQiLDUsZSwwLCJWS19MQ09OVFJPTCIsZSxlXSxbNCwxLDE1OCwiU2hpZnRMZWZ0Iiw0LGUsMCwiVktfTFNISUZUIixlLGVdLFs2LDEsMTU5LCJBbHRMZWZ0Iiw2LGUsMCwiVktfTE1FTlUiLGUsZV0sWzU3LDEsMTYwLCJNZXRhTGVmdCIsNTcsZSwwLCJWS19MV0lOIixlLGVdLFs1LDEsMTYxLCJDb250cm9sUmlnaHQiLDUsZSwwLCJWS19SQ09OVFJPTCIsZSxlXSxbNCwxLDE2MiwiU2hpZnRSaWdodCIsNCxlLDAsIlZLX1JTSElGVCIsZSxlXSxbNiwxLDE2MywiQWx0UmlnaHQiLDYsZSwwLCJWS19STUVOVSIsZSxlXSxbNTcsMSwxNjQsIk1ldGFSaWdodCIsNTcsZSwwLCJWS19SV0lOIixlLGVdLFswLDEsMTY1LCJCcmlnaHRuZXNzVXAiLDAsZSwwLGUsZSxlXSxbMCwxLDE2NiwiQnJpZ2h0bmVzc0Rvd24iLDAsZSwwLGUsZSxlXSxbMCwxLDE2NywiTWVkaWFQbGF5IiwwLGUsMCxlLGUsZV0sWzAsMSwxNjgsIk1lZGlhUmVjb3JkIiwwLGUsMCxlLGUsZV0sWzAsMSwxNjksIk1lZGlhRmFzdEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMCwxLDE3MCwiTWVkaWFSZXdpbmQiLDAsZSwwLGUsZSxlXSxbMTE0LDEsMTcxLCJNZWRpYVRyYWNrTmV4dCIsMTE5LCJNZWRpYVRyYWNrTmV4dCIsMTc2LCJWS19NRURJQV9ORVhUX1RSQUNLIixlLGVdLFsxMTUsMSwxNzIsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTIwLCJNZWRpYVRyYWNrUHJldmlvdXMiLDE3NywiVktfTUVESUFfUFJFVl9UUkFDSyIsZSxlXSxbMTE2LDEsMTczLCJNZWRpYVN0b3AiLDEyMSwiTWVkaWFTdG9wIiwxNzgsIlZLX01FRElBX1NUT1AiLGUsZV0sWzAsMSwxNzQsIkVqZWN0IiwwLGUsMCxlLGUsZV0sWzExNywxLDE3NSwiTWVkaWFQbGF5UGF1c2UiLDEyMiwiTWVkaWFQbGF5UGF1c2UiLDE3OSwiVktfTUVESUFfUExBWV9QQVVTRSIsZSxlXSxbMCwxLDE3NiwiTWVkaWFTZWxlY3QiLDEyMywiTGF1bmNoTWVkaWFQbGF5ZXIiLDE4MSwiVktfTUVESUFfTEFVTkNIX01FRElBX1NFTEVDVCIsZSxlXSxbMCwxLDE3NywiTGF1bmNoTWFpbCIsMTI0LCJMYXVuY2hNYWlsIiwxODAsIlZLX01FRElBX0xBVU5DSF9NQUlMIixlLGVdLFswLDEsMTc4LCJMYXVuY2hBcHAyIiwxMjUsIkxhdW5jaEFwcDIiLDE4MywiVktfTUVESUFfTEFVTkNIX0FQUDIiLGUsZV0sWzAsMSwxNzksIkxhdW5jaEFwcDEiLDAsZSwwLCJWS19NRURJQV9MQVVOQ0hfQVBQMSIsZSxlXSxbMCwxLDE4MCwiU2VsZWN0VGFzayIsMCxlLDAsZSxlLGVdLFswLDEsMTgxLCJMYXVuY2hTY3JlZW5TYXZlciIsMCxlLDAsZSxlLGVdLFswLDEsMTgyLCJCcm93c2VyU2VhcmNoIiwxMTUsIkJyb3dzZXJTZWFyY2giLDE3MCwiVktfQlJPV1NFUl9TRUFSQ0giLGUsZV0sWzAsMSwxODMsIkJyb3dzZXJIb21lIiwxMTYsIkJyb3dzZXJIb21lIiwxNzIsIlZLX0JST1dTRVJfSE9NRSIsZSxlXSxbMTEyLDEsMTg0LCJCcm93c2VyQmFjayIsMTE3LCJCcm93c2VyQmFjayIsMTY2LCJWS19CUk9XU0VSX0JBQ0siLGUsZV0sWzExMywxLDE4NSwiQnJvd3NlckZvcndhcmQiLDExOCwiQnJvd3NlckZvcndhcmQiLDE2NywiVktfQlJPV1NFUl9GT1JXQVJEIixlLGVdLFswLDEsMTg2LCJCcm93c2VyU3RvcCIsMCxlLDAsIlZLX0JST1dTRVJfU1RPUCIsZSxlXSxbMCwxLDE4NywiQnJvd3NlclJlZnJlc2giLDAsZSwwLCJWS19CUk9XU0VSX1JFRlJFU0giLGUsZV0sWzAsMSwxODgsIkJyb3dzZXJGYXZvcml0ZXMiLDAsZSwwLCJWS19CUk9XU0VSX0ZBVk9SSVRFUyIsZSxlXSxbMCwxLDE4OSwiWm9vbVRvZ2dsZSIsMCxlLDAsZSxlLGVdLFswLDEsMTkwLCJNYWlsUmVwbHkiLDAsZSwwLGUsZSxlXSxbMCwxLDE5MSwiTWFpbEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMCwxLDE5MiwiTWFpbFNlbmQiLDAsZSwwLGUsZSxlXSxbMTA5LDEsMCxlLDEwOSwiS2V5SW5Db21wb3NpdGlvbiIsMjI5LGUsZSxlXSxbMTExLDEsMCxlLDExMSwiQUJOVF9DMiIsMTk0LCJWS19BQk5UX0MyIixlLGVdLFs5MSwxLDAsZSw5MSwiT0VNXzgiLDIyMywiVktfT0VNXzgiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0tBTkEiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0hBTkdVTCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfSlVOSkEiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0ZJTkFMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19IQU5KQSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfS0FOSkkiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0NPTlZFUlQiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX05PTkNPTlZFUlQiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0FDQ0VQVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfTU9ERUNIQU5HRSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfU0VMRUNUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19QUklOVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfRVhFQ1VURSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfU05BUFNIT1QiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0hFTFAiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0FQUFMiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BST0NFU1NLRVkiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BBQ0tFVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfREJFX1NCQ1NDSEFSIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19EQkVfREJDU0NIQVIiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0FUVE4iLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0NSU0VMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19FWFNFTCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfRVJFT0YiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BMQVkiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1pPT00iLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX05PTkFNRSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUEExIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19PRU1fQ0xFQVIiLGUsZV1dLG49W10scj1bXTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdFt0LGksbyxhLHMsYyxsLHUsaCxmXT1lO2lmKHJbb118fChyW29dPSEwLEZ0W2FdPW8sRHRbYS50b0xvd2VyQ2FzZSgpXT1vKSwhbltzXSl7aWYobltzXT0hMCwhYyl0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyByZXByZXNlbnRhdGlvbiBtaXNzaW5nIGZvciBrZXkgY29kZSAke3N9IGFyb3VuZCBzY2FuIGNvZGUgJHthfWApO010LmRlZmluZShzLGMpLFB0LmRlZmluZShzLGh8fGMpLFJ0LmRlZmluZShzLGZ8fGh8fGMpfWwmJihWdFtsXT1zKX19KCksZnVuY3Rpb24oZSl7ZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gTXQua2V5Q29kZVRvU3RyKGUpfSxlLmZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIE10LnN0clRvS2V5Q29kZShlKX0sZS50b1VzZXJTZXR0aW5nc1VTPWZ1bmN0aW9uKGUpe3JldHVybiBQdC5rZXlDb2RlVG9TdHIoZSl9LGUudG9Vc2VyU2V0dGluZ3NHZW5lcmFsPWZ1bmN0aW9uKGUpe3JldHVybiBSdC5rZXlDb2RlVG9TdHIoZSl9LGUuZnJvbVVzZXJTZXR0aW5ncz1mdW5jdGlvbihlKXtyZXR1cm4gUHQuc3RyVG9LZXlDb2RlKGUpfHxSdC5zdHJUb0tleUNvZGUoZSl9LGUudG9FbGVjdHJvbkFjY2VsZXJhdG9yPWZ1bmN0aW9uKGUpe2lmKGU+PTkzJiZlPD0xMDgpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2UgMTY6cmV0dXJuIlVwIjtjYXNlIDE4OnJldHVybiJEb3duIjtjYXNlIDE1OnJldHVybiJMZWZ0IjtjYXNlIDE3OnJldHVybiJSaWdodCJ9cmV0dXJuIE10LmtleUNvZGVUb1N0cihlKX19KEt0fHwoS3Q9e30pKTtjbGFzcyBVdCBleHRlbmRzIHR0e2NvbnN0cnVjdG9yKGUsdCxuLHIpe3N1cGVyKGUsdCxuLHIpLHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj10LHRoaXMucG9zaXRpb25MaW5lTnVtYmVyPW4sdGhpcy5wb3NpdGlvbkNvbHVtbj1yfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLnBvc2l0aW9uTGluZU51bWJlcisiLCIrdGhpcy5wb3NpdGlvbkNvbHVtbisiXSJ9ZXF1YWxzU2VsZWN0aW9uKGUpe3JldHVybiBVdC5zZWxlY3Rpb25zRXF1YWwodGhpcyxlKX1zdGF0aWMgc2VsZWN0aW9uc0VxdWFsKGUsdCl7cmV0dXJuIGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJmUuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10LnNlbGVjdGlvblN0YXJ0Q29sdW1uJiZlLnBvc2l0aW9uTGluZU51bWJlcj09PXQucG9zaXRpb25MaW5lTnVtYmVyJiZlLnBvc2l0aW9uQ29sdW1uPT09dC5wb3NpdGlvbkNvbHVtbn1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10aGlzLnN0YXJ0TGluZU51bWJlciYmdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj09PXRoaXMuc3RhcnRDb2x1bW4/MDoxfXNldEVuZFBvc2l0aW9uKGUsdCl7cmV0dXJuIDA9PT10aGlzLmdldERpcmVjdGlvbigpP25ldyBVdCh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLGUsdCk6bmV3IFV0KGUsdCx0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uKX1nZXRQb3NpdGlvbigpe3JldHVybiBuZXcgZXQodGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIsdGhpcy5wb3NpdGlvbkNvbHVtbil9Z2V0U2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gbmV3IGV0KHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4pfXNldFN0YXJ0UG9zaXRpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuZ2V0RGlyZWN0aW9uKCk/bmV3IFV0KGUsdCx0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pOm5ldyBVdCh0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4sZSx0KX1zdGF0aWMgZnJvbVBvc2l0aW9ucyhlLHQ9ZSl7cmV0dXJuIG5ldyBVdChlLmxpbmVOdW1iZXIsZS5jb2x1bW4sdC5saW5lTnVtYmVyLHQuY29sdW1uKX1zdGF0aWMgZnJvbVJhbmdlKGUsdCl7cmV0dXJuIDA9PT10P25ldyBVdChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbik6bmV3IFV0KGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbixlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgbGlmdFNlbGVjdGlvbihlKXtyZXR1cm4gbmV3IFV0KGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLGUuc2VsZWN0aW9uU3RhcnRDb2x1bW4sZS5wb3NpdGlvbkxpbmVOdW1iZXIsZS5wb3NpdGlvbkNvbHVtbil9c3RhdGljIHNlbGVjdGlvbnNBcnJFcXVhbChlLHQpe2lmKGUmJiF0fHwhZSYmdClyZXR1cm4hMTtpZighZSYmIXQpcmV0dXJuITA7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoIXRoaXMuc2VsZWN0aW9uc0VxdWFsKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9c3RhdGljIGlzSVNlbGVjdGlvbihlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0Q29sdW1uJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25MaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25Db2x1bW59c3RhdGljIGNyZWF0ZVdpdGhEaXJlY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gMD09PWk/bmV3IFV0KGUsdCxuLHIpOm5ldyBVdChuLHIsZSx0KX19Y2xhc3MgQnR7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuaWQ9ZSx0aGlzLmRlZmluaXRpb249dCx0aGlzLmRlc2NyaXB0aW9uPW4sQnQuX2FsbENvZGljb25zLnB1c2godGhpcyl9Z2V0IGNsYXNzTmFtZXMoKXtyZXR1cm4iY29kaWNvbiBjb2RpY29uLSIrdGhpcy5pZH1nZXQgY2xhc3NOYW1lc0FycmF5KCl7cmV0dXJuWyJjb2RpY29uIiwiY29kaWNvbi0iK3RoaXMuaWRdfWdldCBjc3NTZWxlY3Rvcigpe3JldHVybiIuY29kaWNvbi5jb2RpY29uLSIrdGhpcy5pZH1zdGF0aWMgZ2V0QWxsKCl7cmV0dXJuIEJ0Ll9hbGxDb2RpY29uc319QnQuX2FsbENvZGljb25zPVtdLEJ0LmFkZD1uZXcgQnQoImFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MCJ9KSxCdC5wbHVzPW5ldyBCdCgicGx1cyIsQnQuYWRkLmRlZmluaXRpb24pLEJ0Lmdpc3ROZXc9bmV3IEJ0KCJnaXN0LW5ldyIsQnQuYWRkLmRlZmluaXRpb24pLEJ0LnJlcG9DcmVhdGU9bmV3IEJ0KCJyZXBvLWNyZWF0ZSIsQnQuYWRkLmRlZmluaXRpb24pLEJ0LmxpZ2h0YnVsYj1uZXcgQnQoImxpZ2h0YnVsYiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MSJ9KSxCdC5saWdodEJ1bGI9bmV3IEJ0KCJsaWdodC1idWxiIix7Zm9udENoYXJhY3RlcjoiXFxlYTYxIn0pLEJ0LnJlcG89bmV3IEJ0KCJyZXBvIix7Zm9udENoYXJhY3RlcjoiXFxlYTYyIn0pLEJ0LnJlcG9EZWxldGU9bmV3IEJ0KCJyZXBvLWRlbGV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MiJ9KSxCdC5naXN0Rm9yaz1uZXcgQnQoImdpc3QtZm9yayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MyJ9KSxCdC5yZXBvRm9ya2VkPW5ldyBCdCgicmVwby1mb3JrZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjMifSksQnQuZ2l0UHVsbFJlcXVlc3Q9bmV3IEJ0KCJnaXQtcHVsbC1yZXF1ZXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTY0In0pLEJ0LmdpdFB1bGxSZXF1ZXN0QWJhbmRvbmVkPW5ldyBCdCgiZ2l0LXB1bGwtcmVxdWVzdC1hYmFuZG9uZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjQifSksQnQucmVjb3JkS2V5cz1uZXcgQnQoInJlY29yZC1rZXlzIix7Zm9udENoYXJhY3RlcjoiXFxlYTY1In0pLEJ0LmtleWJvYXJkPW5ldyBCdCgia2V5Ym9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjUifSksQnQudGFnPW5ldyBCdCgidGFnIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLEJ0LnRhZ0FkZD1uZXcgQnQoInRhZy1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjYifSksQnQudGFnUmVtb3ZlPW5ldyBCdCgidGFnLXJlbW92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NiJ9KSxCdC5wZXJzb249bmV3IEJ0KCJwZXJzb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksQnQucGVyc29uRm9sbG93PW5ldyBCdCgicGVyc29uLWZvbGxvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxCdC5wZXJzb25PdXRsaW5lPW5ldyBCdCgicGVyc29uLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksQnQucGVyc29uRmlsbGVkPW5ldyBCdCgicGVyc29uLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxCdC5naXRCcmFuY2g9bmV3IEJ0KCJnaXQtYnJhbmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLEJ0LmdpdEJyYW5jaENyZWF0ZT1uZXcgQnQoImdpdC1icmFuY2gtY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLEJ0LmdpdEJyYW5jaERlbGV0ZT1uZXcgQnQoImdpdC1icmFuY2gtZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLEJ0LnNvdXJjZUNvbnRyb2w9bmV3IEJ0KCJzb3VyY2UtY29udHJvbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxCdC5taXJyb3I9bmV3IEJ0KCJtaXJyb3IiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjkifSksQnQubWlycm9yUHVibGljPW5ldyBCdCgibWlycm9yLXB1YmxpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OSJ9KSxCdC5zdGFyPW5ldyBCdCgic3RhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxCdC5zdGFyQWRkPW5ldyBCdCgic3Rhci1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksQnQuc3RhckRlbGV0ZT1uZXcgQnQoInN0YXItZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLEJ0LnN0YXJFbXB0eT1uZXcgQnQoInN0YXItZW1wdHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksQnQuY29tbWVudD1uZXcgQnQoImNvbW1lbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmIifSksQnQuY29tbWVudEFkZD1uZXcgQnQoImNvbW1lbnQtYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTZiIn0pLEJ0LmFsZXJ0PW5ldyBCdCgiYWxlcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmMifSksQnQud2FybmluZz1uZXcgQnQoIndhcm5pbmciLHtmb250Q2hhcmFjdGVyOiJcXGVhNmMifSksQnQuc2VhcmNoPW5ldyBCdCgic2VhcmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTZkIn0pLEJ0LnNlYXJjaFNhdmU9bmV3IEJ0KCJzZWFyY2gtc2F2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZCJ9KSxCdC5sb2dPdXQ9bmV3IEJ0KCJsb2ctb3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZlIn0pLEJ0LnNpZ25PdXQ9bmV3IEJ0KCJzaWduLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZSJ9KSxCdC5sb2dJbj1uZXcgQnQoImxvZy1pbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZiJ9KSxCdC5zaWduSW49bmV3IEJ0KCJzaWduLWluIix7Zm9udENoYXJhY3RlcjoiXFxlYTZmIn0pLEJ0LmV5ZT1uZXcgQnQoImV5ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxCdC5leWVVbndhdGNoPW5ldyBCdCgiZXllLXVud2F0Y2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNzAifSksQnQuZXllV2F0Y2g9bmV3IEJ0KCJleWUtd2F0Y2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNzAifSksQnQuY2lyY2xlRmlsbGVkPW5ldyBCdCgiY2lyY2xlLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxCdC5wcmltaXRpdmVEb3Q9bmV3IEJ0KCJwcmltaXRpdmUtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LmNsb3NlRGlydHk9bmV3IEJ0KCJjbG9zZS1kaXJ0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LmRlYnVnQnJlYWtwb2ludERpc2FibGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxCdC5kZWJ1Z0hpbnQ9bmV3IEJ0KCJkZWJ1Zy1oaW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LnByaW1pdGl2ZVNxdWFyZT1uZXcgQnQoInByaW1pdGl2ZS1zcXVhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzIifSksQnQuZWRpdD1uZXcgQnQoImVkaXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzMifSksQnQucGVuY2lsPW5ldyBCdCgicGVuY2lsIix7Zm9udENoYXJhY3RlcjoiXFxlYTczIn0pLEJ0LmluZm89bmV3IEJ0KCJpbmZvIix7Zm9udENoYXJhY3RlcjoiXFxlYTc0In0pLEJ0Lmlzc3VlT3BlbmVkPW5ldyBCdCgiaXNzdWUtb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTc0In0pLEJ0Lmdpc3RQcml2YXRlPW5ldyBCdCgiZ2lzdC1wcml2YXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc1In0pLEJ0LmdpdEZvcmtQcml2YXRlPW5ldyBCdCgiZ2l0LWZvcmstcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxCdC5sb2NrPW5ldyBCdCgibG9jayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxCdC5taXJyb3JQcml2YXRlPW5ldyBCdCgibWlycm9yLXByaXZhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksQnQuY2xvc2U9bmV3IEJ0KCJjbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxCdC5yZW1vdmVDbG9zZT1uZXcgQnQoInJlbW92ZS1jbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxCdC54PW5ldyBCdCgieCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxCdC5yZXBvU3luYz1uZXcgQnQoInJlcG8tc3luYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NyJ9KSxCdC5zeW5jPW5ldyBCdCgic3luYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NyJ9KSxCdC5jbG9uZT1uZXcgQnQoImNsb25lIix7Zm9udENoYXJhY3RlcjoiXFxlYTc4In0pLEJ0LmRlc2t0b3BEb3dubG9hZD1uZXcgQnQoImRlc2t0b3AtZG93bmxvYWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzgifSksQnQuYmVha2VyPW5ldyBCdCgiYmVha2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYTc5In0pLEJ0Lm1pY3Jvc2NvcGU9bmV3IEJ0KCJtaWNyb3Njb3BlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc5In0pLEJ0LnZtPW5ldyBCdCgidm0iLHtmb250Q2hhcmFjdGVyOiJcXGVhN2EifSksQnQuZGV2aWNlRGVza3RvcD1uZXcgQnQoImRldmljZS1kZXNrdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYTdhIn0pLEJ0LmZpbGU9bmV3IEJ0KCJmaWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTdiIn0pLEJ0LmZpbGVUZXh0PW5ldyBCdCgiZmlsZS10ZXh0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdiIn0pLEJ0Lm1vcmU9bmV3IEJ0KCJtb3JlIix7Zm9udENoYXJhY3RlcjoiXFxlYTdjIn0pLEJ0LmVsbGlwc2lzPW5ldyBCdCgiZWxsaXBzaXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2MifSksQnQua2ViYWJIb3Jpem9udGFsPW5ldyBCdCgia2ViYWItaG9yaXpvbnRhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxCdC5tYWlsUmVwbHk9bmV3IEJ0KCJtYWlsLXJlcGx5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdkIn0pLEJ0LnJlcGx5PW5ldyBCdCgicmVwbHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2QifSksQnQub3JnYW5pemF0aW9uPW5ldyBCdCgib3JnYW5pemF0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLEJ0Lm9yZ2FuaXphdGlvbkZpbGxlZD1uZXcgQnQoIm9yZ2FuaXphdGlvbi1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2UifSksQnQub3JnYW5pemF0aW9uT3V0bGluZT1uZXcgQnQoIm9yZ2FuaXphdGlvbi1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLEJ0Lm5ld0ZpbGU9bmV3IEJ0KCJuZXctZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZiJ9KSxCdC5maWxlQWRkPW5ldyBCdCgiZmlsZS1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2YifSksQnQubmV3Rm9sZGVyPW5ldyBCdCgibmV3LWZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MCJ9KSxCdC5maWxlRGlyZWN0b3J5Q3JlYXRlPW5ldyBCdCgiZmlsZS1kaXJlY3RvcnktY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTgwIn0pLEJ0LnRyYXNoPW5ldyBCdCgidHJhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVhODEifSksQnQudHJhc2hjYW49bmV3IEJ0KCJ0cmFzaGNhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MSJ9KSxCdC5oaXN0b3J5PW5ldyBCdCgiaGlzdG9yeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MiJ9KSxCdC5jbG9jaz1uZXcgQnQoImNsb2NrIix7Zm9udENoYXJhY3RlcjoiXFxlYTgyIn0pLEJ0LmZvbGRlcj1uZXcgQnQoImZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MyJ9KSxCdC5maWxlRGlyZWN0b3J5PW5ldyBCdCgiZmlsZS1kaXJlY3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksQnQuc3ltYm9sRm9sZGVyPW5ldyBCdCgic3ltYm9sLWZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MyJ9KSxCdC5sb2dvR2l0aHViPW5ldyBCdCgibG9nby1naXRodWIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODQifSksQnQubWFya0dpdGh1Yj1uZXcgQnQoIm1hcmstZ2l0aHViIix7Zm9udENoYXJhY3RlcjoiXFxlYTg0In0pLEJ0LmdpdGh1Yj1uZXcgQnQoImdpdGh1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NCJ9KSxCdC50ZXJtaW5hbD1uZXcgQnQoInRlcm1pbmFsIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLEJ0LmNvbnNvbGU9bmV3IEJ0KCJjb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLEJ0LnJlcGw9bmV3IEJ0KCJyZXBsIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLEJ0LnphcD1uZXcgQnQoInphcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NiJ9KSxCdC5zeW1ib2xFdmVudD1uZXcgQnQoInN5bWJvbC1ldmVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NiJ9KSxCdC5lcnJvcj1uZXcgQnQoImVycm9yIix7Zm9udENoYXJhY3RlcjoiXFxlYTg3In0pLEJ0LnN0b3A9bmV3IEJ0KCJzdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYTg3In0pLEJ0LnZhcmlhYmxlPW5ldyBCdCgidmFyaWFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODgifSksQnQuc3ltYm9sVmFyaWFibGU9bmV3IEJ0KCJzeW1ib2wtdmFyaWFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODgifSksQnQuYXJyYXk9bmV3IEJ0KCJhcnJheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YSJ9KSxCdC5zeW1ib2xBcnJheT1uZXcgQnQoInN5bWJvbC1hcnJheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YSJ9KSxCdC5zeW1ib2xNb2R1bGU9bmV3IEJ0KCJzeW1ib2wtbW9kdWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLEJ0LnN5bWJvbFBhY2thZ2U9bmV3IEJ0KCJzeW1ib2wtcGFja2FnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxCdC5zeW1ib2xOYW1lc3BhY2U9bmV3IEJ0KCJzeW1ib2wtbmFtZXNwYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLEJ0LnN5bWJvbE9iamVjdD1uZXcgQnQoInN5bWJvbC1vYmplY3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGIifSksQnQuc3ltYm9sTWV0aG9kPW5ldyBCdCgic3ltYm9sLW1ldGhvZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxCdC5zeW1ib2xGdW5jdGlvbj1uZXcgQnQoInN5bWJvbC1mdW5jdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxCdC5zeW1ib2xDb25zdHJ1Y3Rvcj1uZXcgQnQoInN5bWJvbC1jb25zdHJ1Y3RvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxCdC5zeW1ib2xCb29sZWFuPW5ldyBCdCgic3ltYm9sLWJvb2xlYW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhOGYifSksQnQuc3ltYm9sTnVsbD1uZXcgQnQoInN5bWJvbC1udWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYThmIn0pLEJ0LnN5bWJvbE51bWVyaWM9bmV3IEJ0KCJzeW1ib2wtbnVtZXJpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MCJ9KSxCdC5zeW1ib2xOdW1iZXI9bmV3IEJ0KCJzeW1ib2wtbnVtYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTkwIn0pLEJ0LnN5bWJvbFN0cnVjdHVyZT1uZXcgQnQoInN5bWJvbC1zdHJ1Y3R1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTEifSksQnQuc3ltYm9sU3RydWN0PW5ldyBCdCgic3ltYm9sLXN0cnVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MSJ9KSxCdC5zeW1ib2xQYXJhbWV0ZXI9bmV3IEJ0KCJzeW1ib2wtcGFyYW1ldGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTkyIn0pLEJ0LnN5bWJvbFR5cGVQYXJhbWV0ZXI9bmV3IEJ0KCJzeW1ib2wtdHlwZS1wYXJhbWV0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTIifSksQnQuc3ltYm9sS2V5PW5ldyBCdCgic3ltYm9sLWtleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MyJ9KSxCdC5zeW1ib2xUZXh0PW5ldyBCdCgic3ltYm9sLXRleHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTMifSksQnQuc3ltYm9sUmVmZXJlbmNlPW5ldyBCdCgic3ltYm9sLXJlZmVyZW5jZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NCJ9KSxCdC5nb1RvRmlsZT1uZXcgQnQoImdvLXRvLWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTQifSksQnQuc3ltYm9sRW51bT1uZXcgQnQoInN5bWJvbC1lbnVtIix7Zm9udENoYXJhY3RlcjoiXFxlYTk1In0pLEJ0LnN5bWJvbFZhbHVlPW5ldyBCdCgic3ltYm9sLXZhbHVlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk1In0pLEJ0LnN5bWJvbFJ1bGVyPW5ldyBCdCgic3ltYm9sLXJ1bGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTk2In0pLEJ0LnN5bWJvbFVuaXQ9bmV3IEJ0KCJzeW1ib2wtdW5pdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NiJ9KSxCdC5hY3RpdmF0ZUJyZWFrcG9pbnRzPW5ldyBCdCgiYWN0aXZhdGUtYnJlYWtwb2ludHMiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTcifSksQnQuYXJjaGl2ZT1uZXcgQnQoImFyY2hpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTgifSksQnQuYXJyb3dCb3RoPW5ldyBCdCgiYXJyb3ctYm90aCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5OSJ9KSxCdC5hcnJvd0Rvd249bmV3IEJ0KCJhcnJvdy1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYTlhIn0pLEJ0LmFycm93TGVmdD1uZXcgQnQoImFycm93LWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWIifSksQnQuYXJyb3dSaWdodD1uZXcgQnQoImFycm93LXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTljIn0pLEJ0LmFycm93U21hbGxEb3duPW5ldyBCdCgiYXJyb3ctc21hbGwtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZCJ9KSxCdC5hcnJvd1NtYWxsTGVmdD1uZXcgQnQoImFycm93LXNtYWxsLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWUifSksQnQuYXJyb3dTbWFsbFJpZ2h0PW5ldyBCdCgiYXJyb3ctc21hbGwtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWYifSksQnQuYXJyb3dTbWFsbFVwPW5ldyBCdCgiYXJyb3ctc21hbGwtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTAifSksQnQuYXJyb3dVcD1uZXcgQnQoImFycm93LXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWExIn0pLEJ0LmJlbGw9bmV3IEJ0KCJiZWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWEyIn0pLEJ0LmJvbGQ9bmV3IEJ0KCJib2xkIix7Zm9udENoYXJhY3RlcjoiXFxlYWEzIn0pLEJ0LmJvb2s9bmV3IEJ0KCJib29rIix7Zm9udENoYXJhY3RlcjoiXFxlYWE0In0pLEJ0LmJvb2ttYXJrPW5ldyBCdCgiYm9va21hcmsiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTUifSksQnQuZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxVbnZlcmlmaWVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE2In0pLEJ0LmRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNyJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNyJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnREYXRhVW52ZXJpZmllZD1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE4In0pLEJ0LmRlYnVnQnJlYWtwb2ludERhdGE9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWRhdGEiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTkifSksQnQuZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1kYXRhLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE5In0pLEJ0LmRlYnVnQnJlYWtwb2ludExvZ1VudmVyaWZpZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWxvZy11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWFhIn0pLEJ0LmRlYnVnQnJlYWtwb2ludExvZz1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtbG9nIix7Zm9udENoYXJhY3RlcjoiXFxlYWFiIn0pLEJ0LmRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1sb2ctZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWIifSksQnQuYnJpZWZjYXNlPW5ldyBCdCgiYnJpZWZjYXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYWFjIn0pLEJ0LmJyb2FkY2FzdD1uZXcgQnQoImJyb2FkY2FzdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhZCJ9KSxCdC5icm93c2VyPW5ldyBCdCgiYnJvd3NlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhZSJ9KSxCdC5idWc9bmV3IEJ0KCJidWciLHtmb250Q2hhcmFjdGVyOiJcXGVhYWYifSksQnQuY2FsZW5kYXI9bmV3IEJ0KCJjYWxlbmRhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMCJ9KSxCdC5jYXNlU2Vuc2l0aXZlPW5ldyBCdCgiY2FzZS1zZW5zaXRpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjEifSksQnQuY2hlY2s9bmV3IEJ0KCJjaGVjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMiJ9KSxCdC5jaGVja2xpc3Q9bmV3IEJ0KCJjaGVja2xpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjMifSksQnQuY2hldnJvbkRvd249bmV3IEJ0KCJjaGV2cm9uLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhYjQifSksQnQuZHJvcERvd25CdXR0b249bmV3IEJ0KCJkcm9wLWRvd24tYnV0dG9uIixCdC5jaGV2cm9uRG93bi5kZWZpbml0aW9uKSxCdC5jaGV2cm9uTGVmdD1uZXcgQnQoImNoZXZyb24tbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNSJ9KSxCdC5jaGV2cm9uUmlnaHQ9bmV3IEJ0KCJjaGV2cm9uLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWI2In0pLEJ0LmNoZXZyb25VcD1uZXcgQnQoImNoZXZyb24tdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjcifSksQnQuY2hyb21lQ2xvc2U9bmV3IEJ0KCJjaHJvbWUtY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjgifSksQnQuY2hyb21lTWF4aW1pemU9bmV3IEJ0KCJjaHJvbWUtbWF4aW1pemUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjkifSksQnQuY2hyb21lTWluaW1pemU9bmV3IEJ0KCJjaHJvbWUtbWluaW1pemUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmEifSksQnQuY2hyb21lUmVzdG9yZT1uZXcgQnQoImNocm9tZS1yZXN0b3JlIix7Zm9udENoYXJhY3RlcjoiXFxlYWJiIn0pLEJ0LmNpcmNsZU91dGxpbmU9bmV3IEJ0KCJjaXJjbGUtb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYyJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnRVbnZlcmlmaWVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWJjIn0pLEJ0LmNpcmNsZVNsYXNoPW5ldyBCdCgiY2lyY2xlLXNsYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYWJkIn0pLEJ0LmNpcmN1aXRCb2FyZD1uZXcgQnQoImNpcmN1aXQtYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmUifSksQnQuY2xlYXJBbGw9bmV3IEJ0KCJjbGVhci1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmYifSksQnQuY2xpcHB5PW5ldyBCdCgiY2xpcHB5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWMwIn0pLEJ0LmNsb3NlQWxsPW5ldyBCdCgiY2xvc2UtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWMxIn0pLEJ0LmNsb3VkRG93bmxvYWQ9bmV3IEJ0KCJjbG91ZC1kb3dubG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMiJ9KSxCdC5jbG91ZFVwbG9hZD1uZXcgQnQoImNsb3VkLXVwbG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMyJ9KSxCdC5jb2RlPW5ldyBCdCgiY29kZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNCJ9KSxCdC5jb2xsYXBzZUFsbD1uZXcgQnQoImNvbGxhcHNlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNSJ9KSxCdC5jb2xvck1vZGU9bmV3IEJ0KCJjb2xvci1tb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWM2In0pLEJ0LmNvbW1lbnREaXNjdXNzaW9uPW5ldyBCdCgiY29tbWVudC1kaXNjdXNzaW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYWM3In0pLEJ0LmNvbXBhcmVDaGFuZ2VzPW5ldyBCdCgiY29tcGFyZS1jaGFuZ2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYWZkIn0pLEJ0LmNyZWRpdENhcmQ9bmV3IEJ0KCJjcmVkaXQtY2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjOSJ9KSxCdC5kYXNoPW5ldyBCdCgiZGFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjYyJ9KSxCdC5kYXNoYm9hcmQ9bmV3IEJ0KCJkYXNoYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhY2QifSksQnQuZGF0YWJhc2U9bmV3IEJ0KCJkYXRhYmFzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZSJ9KSxCdC5kZWJ1Z0NvbnRpbnVlPW5ldyBCdCgiZGVidWctY29udGludWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhY2YifSksQnQuZGVidWdEaXNjb25uZWN0PW5ldyBCdCgiZGVidWctZGlzY29ubmVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMCJ9KSxCdC5kZWJ1Z1BhdXNlPW5ldyBCdCgiZGVidWctcGF1c2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDEifSksQnQuZGVidWdSZXN0YXJ0PW5ldyBCdCgiZGVidWctcmVzdGFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMiJ9KSxCdC5kZWJ1Z1N0YXJ0PW5ldyBCdCgiZGVidWctc3RhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDMifSksQnQuZGVidWdTdGVwSW50bz1uZXcgQnQoImRlYnVnLXN0ZXAtaW50byIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNCJ9KSxCdC5kZWJ1Z1N0ZXBPdXQ9bmV3IEJ0KCJkZWJ1Zy1zdGVwLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNSJ9KSxCdC5kZWJ1Z1N0ZXBPdmVyPW5ldyBCdCgiZGVidWctc3RlcC1vdmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYWQ2In0pLEJ0LmRlYnVnU3RvcD1uZXcgQnQoImRlYnVnLXN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDcifSksQnQuZGVidWc9bmV3IEJ0KCJkZWJ1ZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkOCJ9KSxCdC5kZXZpY2VDYW1lcmFWaWRlbz1uZXcgQnQoImRldmljZS1jYW1lcmEtdmlkZW8iLHtmb250Q2hhcmFjdGVyOiJcXGVhZDkifSksQnQuZGV2aWNlQ2FtZXJhPW5ldyBCdCgiZGV2aWNlLWNhbWVyYSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYSJ9KSxCdC5kZXZpY2VNb2JpbGU9bmV3IEJ0KCJkZXZpY2UtbW9iaWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYWRiIn0pLEJ0LmRpZmZBZGRlZD1uZXcgQnQoImRpZmYtYWRkZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGMifSksQnQuZGlmZklnbm9yZWQ9bmV3IEJ0KCJkaWZmLWlnbm9yZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGQifSksQnQuZGlmZk1vZGlmaWVkPW5ldyBCdCgiZGlmZi1tb2RpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkZSJ9KSxCdC5kaWZmUmVtb3ZlZD1uZXcgQnQoImRpZmYtcmVtb3ZlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkZiJ9KSxCdC5kaWZmUmVuYW1lZD1uZXcgQnQoImRpZmYtcmVuYW1lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMCJ9KSxCdC5kaWZmPW5ldyBCdCgiZGlmZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMSJ9KSxCdC5kaXNjYXJkPW5ldyBCdCgiZGlzY2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMiJ9KSxCdC5lZGl0b3JMYXlvdXQ9bmV3IEJ0KCJlZGl0b3ItbGF5b3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWUzIn0pLEJ0LmVtcHR5V2luZG93PW5ldyBCdCgiZW1wdHktd2luZG93Iix7Zm9udENoYXJhY3RlcjoiXFxlYWU0In0pLEJ0LmV4Y2x1ZGU9bmV3IEJ0KCJleGNsdWRlIix7Zm9udENoYXJhY3RlcjoiXFxlYWU1In0pLEJ0LmV4dGVuc2lvbnM9bmV3IEJ0KCJleHRlbnNpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYWU2In0pLEJ0LmV5ZUNsb3NlZD1uZXcgQnQoImV5ZS1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTcifSksQnQuZmlsZUJpbmFyeT1uZXcgQnQoImZpbGUtYmluYXJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWU4In0pLEJ0LmZpbGVDb2RlPW5ldyBCdCgiZmlsZS1jb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWU5In0pLEJ0LmZpbGVNZWRpYT1uZXcgQnQoImZpbGUtbWVkaWEiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWEifSksQnQuZmlsZVBkZj1uZXcgQnQoImZpbGUtcGRmIix7Zm9udENoYXJhY3RlcjoiXFxlYWViIn0pLEJ0LmZpbGVTdWJtb2R1bGU9bmV3IEJ0KCJmaWxlLXN1Ym1vZHVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlYyJ9KSxCdC5maWxlU3ltbGlua0RpcmVjdG9yeT1uZXcgQnQoImZpbGUtc3ltbGluay1kaXJlY3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWQifSksQnQuZmlsZVN5bWxpbmtGaWxlPW5ldyBCdCgiZmlsZS1zeW1saW5rLWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWUifSksQnQuZmlsZVppcD1uZXcgQnQoImZpbGUtemlwIix7Zm9udENoYXJhY3RlcjoiXFxlYWVmIn0pLEJ0LmZpbGVzPW5ldyBCdCgiZmlsZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjAifSksQnQuZmlsdGVyPW5ldyBCdCgiZmlsdGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYWYxIn0pLEJ0LmZsYW1lPW5ldyBCdCgiZmxhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjIifSksQnQuZm9sZERvd249bmV3IEJ0KCJmb2xkLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhZjMifSksQnQuZm9sZFVwPW5ldyBCdCgiZm9sZC11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNCJ9KSxCdC5mb2xkPW5ldyBCdCgiZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNSJ9KSxCdC5mb2xkZXJBY3RpdmU9bmV3IEJ0KCJmb2xkZXItYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYWY2In0pLEJ0LmZvbGRlck9wZW5lZD1uZXcgQnQoImZvbGRlci1vcGVuZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjcifSksQnQuZ2Vhcj1uZXcgQnQoImdlYXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjgifSksQnQuZ2lmdD1uZXcgQnQoImdpZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjkifSksQnQuZ2lzdFNlY3JldD1uZXcgQnQoImdpc3Qtc2VjcmV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZhIn0pLEJ0Lmdpc3Q9bmV3IEJ0KCJnaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZiIn0pLEJ0LmdpdENvbW1pdD1uZXcgQnQoImdpdC1jb21taXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmMifSksQnQuZ2l0Q29tcGFyZT1uZXcgQnQoImdpdC1jb21wYXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYWZkIn0pLEJ0LmdpdE1lcmdlPW5ldyBCdCgiZ2l0LW1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYWZlIn0pLEJ0LmdpdGh1YkFjdGlvbj1uZXcgQnQoImdpdGh1Yi1hY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhZmYifSksQnQuZ2l0aHViQWx0PW5ldyBCdCgiZ2l0aHViLWFsdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMCJ9KSxCdC5nbG9iZT1uZXcgQnQoImdsb2JlIix7Zm9udENoYXJhY3RlcjoiXFxlYjAxIn0pLEJ0LmdyYWJiZXI9bmV3IEJ0KCJncmFiYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjAyIn0pLEJ0LmdyYXBoPW5ldyBCdCgiZ3JhcGgiLHtmb250Q2hhcmFjdGVyOiJcXGViMDMifSksQnQuZ3JpcHBlcj1uZXcgQnQoImdyaXBwZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMDQifSksQnQuaGVhcnQ9bmV3IEJ0KCJoZWFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNSJ9KSxCdC5ob21lPW5ldyBCdCgiaG9tZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNiJ9KSxCdC5ob3Jpem9udGFsUnVsZT1uZXcgQnQoImhvcml6b250YWwtcnVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNyJ9KSxCdC5odWJvdD1uZXcgQnQoImh1Ym90Iix7Zm9udENoYXJhY3RlcjoiXFxlYjA4In0pLEJ0LmluYm94PW5ldyBCdCgiaW5ib3giLHtmb250Q2hhcmFjdGVyOiJcXGViMDkifSksQnQuaXNzdWVDbG9zZWQ9bmV3IEJ0KCJpc3N1ZS1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTQifSksQnQuaXNzdWVSZW9wZW5lZD1uZXcgQnQoImlzc3VlLXJlb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjBiIn0pLEJ0Lmlzc3Vlcz1uZXcgQnQoImlzc3VlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwYyJ9KSxCdC5pdGFsaWM9bmV3IEJ0KCJpdGFsaWMiLHtmb250Q2hhcmFjdGVyOiJcXGViMGQifSksQnQuamVyc2V5PW5ldyBCdCgiamVyc2V5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjBlIn0pLEJ0Lmpzb249bmV3IEJ0KCJqc29uIix7Zm9udENoYXJhY3RlcjoiXFxlYjBmIn0pLEJ0LmtlYmFiVmVydGljYWw9bmV3IEJ0KCJrZWJhYi12ZXJ0aWNhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMCJ9KSxCdC5rZXk9bmV3IEJ0KCJrZXkiLHtmb250Q2hhcmFjdGVyOiJcXGViMTEifSksQnQubGF3PW5ldyBCdCgibGF3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjEyIn0pLEJ0LmxpZ2h0YnVsYkF1dG9maXg9bmV3IEJ0KCJsaWdodGJ1bGItYXV0b2ZpeCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMyJ9KSxCdC5saW5rRXh0ZXJuYWw9bmV3IEJ0KCJsaW5rLWV4dGVybmFsIix7Zm9udENoYXJhY3RlcjoiXFxlYjE0In0pLEJ0Lmxpbms9bmV3IEJ0KCJsaW5rIix7Zm9udENoYXJhY3RlcjoiXFxlYjE1In0pLEJ0Lmxpc3RPcmRlcmVkPW5ldyBCdCgibGlzdC1vcmRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjE2In0pLEJ0Lmxpc3RVbm9yZGVyZWQ9bmV3IEJ0KCJsaXN0LXVub3JkZXJlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNyJ9KSxCdC5saXZlU2hhcmU9bmV3IEJ0KCJsaXZlLXNoYXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYjE4In0pLEJ0LmxvYWRpbmc9bmV3IEJ0KCJsb2FkaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjE5In0pLEJ0LmxvY2F0aW9uPW5ldyBCdCgibG9jYXRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWEifSksQnQubWFpbFJlYWQ9bmV3IEJ0KCJtYWlsLXJlYWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMWIifSksQnQubWFpbD1uZXcgQnQoIm1haWwiLHtmb250Q2hhcmFjdGVyOiJcXGViMWMifSksQnQubWFya2Rvd249bmV3IEJ0KCJtYXJrZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxZCJ9KSxCdC5tZWdhcGhvbmU9bmV3IEJ0KCJtZWdhcGhvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMWUifSksQnQubWVudGlvbj1uZXcgQnQoIm1lbnRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWYifSksQnQubWlsZXN0b25lPW5ldyBCdCgibWlsZXN0b25lIix7Zm9udENoYXJhY3RlcjoiXFxlYjIwIn0pLEJ0Lm1vcnRhckJvYXJkPW5ldyBCdCgibW9ydGFyLWJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYjIxIn0pLEJ0Lm1vdmU9bmV3IEJ0KCJtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjIyIn0pLEJ0Lm11bHRpcGxlV2luZG93cz1uZXcgQnQoIm11bHRpcGxlLXdpbmRvd3MiLHtmb250Q2hhcmFjdGVyOiJcXGViMjMifSksQnQubXV0ZT1uZXcgQnQoIm11dGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjQifSksQnQubm9OZXdsaW5lPW5ldyBCdCgibm8tbmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNSJ9KSxCdC5ub3RlPW5ldyBCdCgibm90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNiJ9KSxCdC5vY3RvZmFjZT1uZXcgQnQoIm9jdG9mYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjI3In0pLEJ0Lm9wZW5QcmV2aWV3PW5ldyBCdCgib3Blbi1wcmV2aWV3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjI4In0pLEJ0LnBhY2thZ2VfPW5ldyBCdCgicGFja2FnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyOSJ9KSxCdC5wYWludGNhbj1uZXcgQnQoInBhaW50Y2FuIix7Zm9udENoYXJhY3RlcjoiXFxlYjJhIn0pLEJ0LnBpbj1uZXcgQnQoInBpbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYiJ9KSxCdC5wbGF5PW5ldyBCdCgicGxheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYyJ9KSxCdC5ydW49bmV3IEJ0KCJydW4iLHtmb250Q2hhcmFjdGVyOiJcXGViMmMifSksQnQucGx1Zz1uZXcgQnQoInBsdWciLHtmb250Q2hhcmFjdGVyOiJcXGViMmQifSksQnQucHJlc2VydmVDYXNlPW5ldyBCdCgicHJlc2VydmUtY2FzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyZSJ9KSxCdC5wcmV2aWV3PW5ldyBCdCgicHJldmlldyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyZiJ9KSxCdC5wcm9qZWN0PW5ldyBCdCgicHJvamVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMCJ9KSxCdC5wdWxzZT1uZXcgQnQoInB1bHNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjMxIn0pLEJ0LnF1ZXN0aW9uPW5ldyBCdCgicXVlc3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMzIifSksQnQucXVvdGU9bmV3IEJ0KCJxdW90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMyJ9KSxCdC5yYWRpb1Rvd2VyPW5ldyBCdCgicmFkaW8tdG93ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMzQifSksQnQucmVhY3Rpb25zPW5ldyBCdCgicmVhY3Rpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYjM1In0pLEJ0LnJlZmVyZW5jZXM9bmV3IEJ0KCJyZWZlcmVuY2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYjM2In0pLEJ0LnJlZnJlc2g9bmV3IEJ0KCJyZWZyZXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjM3In0pLEJ0LnJlZ2V4PW5ldyBCdCgicmVnZXgiLHtmb250Q2hhcmFjdGVyOiJcXGViMzgifSksQnQucmVtb3RlRXhwbG9yZXI9bmV3IEJ0KCJyZW1vdGUtZXhwbG9yZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMzkifSksQnQucmVtb3RlPW5ldyBCdCgicmVtb3RlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNhIn0pLEJ0LnJlbW92ZT1uZXcgQnQoInJlbW92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzYiJ9KSxCdC5yZXBsYWNlQWxsPW5ldyBCdCgicmVwbGFjZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViM2MifSksQnQucmVwbGFjZT1uZXcgQnQoInJlcGxhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViM2QifSksQnQucmVwb0Nsb25lPW5ldyBCdCgicmVwby1jbG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzZSJ9KSxCdC5yZXBvRm9yY2VQdXNoPW5ldyBCdCgicmVwby1mb3JjZS1wdXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjNmIn0pLEJ0LnJlcG9QdWxsPW5ldyBCdCgicmVwby1wdWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjQwIn0pLEJ0LnJlcG9QdXNoPW5ldyBCdCgicmVwby1wdXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjQxIn0pLEJ0LnJlcG9ydD1uZXcgQnQoInJlcG9ydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MiJ9KSxCdC5yZXF1ZXN0Q2hhbmdlcz1uZXcgQnQoInJlcXVlc3QtY2hhbmdlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MyJ9KSxCdC5yb2NrZXQ9bmV3IEJ0KCJyb2NrZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViNDQifSksQnQucm9vdEZvbGRlck9wZW5lZD1uZXcgQnQoInJvb3QtZm9sZGVyLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NSJ9KSxCdC5yb290Rm9sZGVyPW5ldyBCdCgicm9vdC1mb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNDYifSksQnQucnNzPW5ldyBCdCgicnNzIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ3In0pLEJ0LnJ1Ynk9bmV3IEJ0KCJydWJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjQ4In0pLEJ0LnNhdmVBbGw9bmV3IEJ0KCJzYXZlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0OSJ9KSxCdC5zYXZlQXM9bmV3IEJ0KCJzYXZlLWFzIix7Zm9udENoYXJhY3RlcjoiXFxlYjRhIn0pLEJ0LnNhdmU9bmV3IEJ0KCJzYXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjRiIn0pLEJ0LnNjcmVlbkZ1bGw9bmV3IEJ0KCJzY3JlZW4tZnVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0YyJ9KSxCdC5zY3JlZW5Ob3JtYWw9bmV3IEJ0KCJzY3JlZW4tbm9ybWFsIix7Zm9udENoYXJhY3RlcjoiXFxlYjRkIn0pLEJ0LnNlYXJjaFN0b3A9bmV3IEJ0KCJzZWFyY2gtc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0ZSJ9KSxCdC5zZXJ2ZXI9bmV3IEJ0KCJzZXJ2ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNTAifSksQnQuc2V0dGluZ3NHZWFyPW5ldyBCdCgic2V0dGluZ3MtZ2VhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MSJ9KSxCdC5zZXR0aW5ncz1uZXcgQnQoInNldHRpbmdzIix7Zm9udENoYXJhY3RlcjoiXFxlYjUyIn0pLEJ0LnNoaWVsZD1uZXcgQnQoInNoaWVsZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MyJ9KSxCdC5zbWlsZXk9bmV3IEJ0KCJzbWlsZXkiLHtmb250Q2hhcmFjdGVyOiJcXGViNTQifSksQnQuc29ydFByZWNlZGVuY2U9bmV3IEJ0KCJzb3J0LXByZWNlZGVuY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViNTUifSksQnQuc3BsaXRIb3Jpem9udGFsPW5ldyBCdCgic3BsaXQtaG9yaXpvbnRhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NiJ9KSxCdC5zcGxpdFZlcnRpY2FsPW5ldyBCdCgic3BsaXQtdmVydGljYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTcifSksQnQuc3F1aXJyZWw9bmV3IEJ0KCJzcXVpcnJlbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1OCJ9KSxCdC5zdGFyRnVsbD1uZXcgQnQoInN0YXItZnVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1OSJ9KSxCdC5zdGFySGFsZj1uZXcgQnQoInN0YXItaGFsZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YSJ9KSxCdC5zeW1ib2xDbGFzcz1uZXcgQnQoInN5bWJvbC1jbGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YiJ9KSxCdC5zeW1ib2xDb2xvcj1uZXcgQnQoInN5bWJvbC1jb2xvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YyJ9KSxCdC5zeW1ib2xDdXN0b21Db2xvcj1uZXcgQnQoInN5bWJvbC1jdXN0b21jb2xvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YyJ9KSxCdC5zeW1ib2xDb25zdGFudD1uZXcgQnQoInN5bWJvbC1jb25zdGFudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZCJ9KSxCdC5zeW1ib2xFbnVtTWVtYmVyPW5ldyBCdCgic3ltYm9sLWVudW0tbWVtYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjVlIn0pLEJ0LnN5bWJvbEZpZWxkPW5ldyBCdCgic3ltYm9sLWZpZWxkIix7Zm9udENoYXJhY3RlcjoiXFxlYjVmIn0pLEJ0LnN5bWJvbEZpbGU9bmV3IEJ0KCJzeW1ib2wtZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MCJ9KSxCdC5zeW1ib2xJbnRlcmZhY2U9bmV3IEJ0KCJzeW1ib2wtaW50ZXJmYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjYxIn0pLEJ0LnN5bWJvbEtleXdvcmQ9bmV3IEJ0KCJzeW1ib2wta2V5d29yZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MiJ9KSxCdC5zeW1ib2xNaXNjPW5ldyBCdCgic3ltYm9sLW1pc2MiLHtmb250Q2hhcmFjdGVyOiJcXGViNjMifSksQnQuc3ltYm9sT3BlcmF0b3I9bmV3IEJ0KCJzeW1ib2wtb3BlcmF0b3IiLHtmb250Q2hhcmFjdGVyOiJcXGViNjQifSksQnQuc3ltYm9sUHJvcGVydHk9bmV3IEJ0KCJzeW1ib2wtcHJvcGVydHkiLHtmb250Q2hhcmFjdGVyOiJcXGViNjUifSksQnQud3JlbmNoPW5ldyBCdCgid3JlbmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLEJ0LndyZW5jaFN1YmFjdGlvbj1uZXcgQnQoIndyZW5jaC1zdWJhY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViNjUifSksQnQuc3ltYm9sU25pcHBldD1uZXcgQnQoInN5bWJvbC1zbmlwcGV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjY2In0pLEJ0LnRhc2tsaXN0PW5ldyBCdCgidGFza2xpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGViNjcifSksQnQudGVsZXNjb3BlPW5ldyBCdCgidGVsZXNjb3BlIix7Zm9udENoYXJhY3RlcjoiXFxlYjY4In0pLEJ0LnRleHRTaXplPW5ldyBCdCgidGV4dC1zaXplIix7Zm9udENoYXJhY3RlcjoiXFxlYjY5In0pLEJ0LnRocmVlQmFycz1uZXcgQnQoInRocmVlLWJhcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViNmEifSksQnQudGh1bWJzZG93bj1uZXcgQnQoInRodW1ic2Rvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViNmIifSksQnQudGh1bWJzdXA9bmV3IEJ0KCJ0aHVtYnN1cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2YyJ9KSxCdC50b29scz1uZXcgQnQoInRvb2xzIix7Zm9udENoYXJhY3RlcjoiXFxlYjZkIn0pLEJ0LnRyaWFuZ2xlRG93bj1uZXcgQnQoInRyaWFuZ2xlLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViNmUifSksQnQudHJpYW5nbGVMZWZ0PW5ldyBCdCgidHJpYW5nbGUtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2ZiJ9KSxCdC50cmlhbmdsZVJpZ2h0PW5ldyBCdCgidHJpYW5nbGUtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzAifSksQnQudHJpYW5nbGVVcD1uZXcgQnQoInRyaWFuZ2xlLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYjcxIn0pLEJ0LnR3aXR0ZXI9bmV3IEJ0KCJ0d2l0dGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjcyIn0pLEJ0LnVuZm9sZD1uZXcgQnQoInVuZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MyJ9KSxCdC51bmxvY2s9bmV3IEJ0KCJ1bmxvY2siLHtmb250Q2hhcmFjdGVyOiJcXGViNzQifSksQnQudW5tdXRlPW5ldyBCdCgidW5tdXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYjc1In0pLEJ0LnVudmVyaWZpZWQ9bmV3IEJ0KCJ1bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjc2In0pLEJ0LnZlcmlmaWVkPW5ldyBCdCgidmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzcifSksQnQudmVyc2lvbnM9bmV3IEJ0KCJ2ZXJzaW9ucyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3OCJ9KSxCdC52bUFjdGl2ZT1uZXcgQnQoInZtLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3OSJ9KSxCdC52bU91dGxpbmU9bmV3IEJ0KCJ2bS1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYjdhIn0pLEJ0LnZtUnVubmluZz1uZXcgQnQoInZtLXJ1bm5pbmciLHtmb250Q2hhcmFjdGVyOiJcXGViN2IifSksQnQud2F0Y2g9bmV3IEJ0KCJ3YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YyJ9KSxCdC53aGl0ZXNwYWNlPW5ldyBCdCgid2hpdGVzcGFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZCJ9KSxCdC53aG9sZVdvcmQ9bmV3IEJ0KCJ3aG9sZS13b3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYjdlIn0pLEJ0LndpbmRvdz1uZXcgQnQoIndpbmRvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZiJ9KSxCdC53b3JkV3JhcD1uZXcgQnQoIndvcmQtd3JhcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MCJ9KSxCdC56b29tSW49bmV3IEJ0KCJ6b29tLWluIix7Zm9udENoYXJhY3RlcjoiXFxlYjgxIn0pLEJ0Lnpvb21PdXQ9bmV3IEJ0KCJ6b29tLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MiJ9KSxCdC5saXN0RmlsdGVyPW5ldyBCdCgibGlzdC1maWx0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViODMifSksQnQubGlzdEZsYXQ9bmV3IEJ0KCJsaXN0LWZsYXQiLHtmb250Q2hhcmFjdGVyOiJcXGViODQifSksQnQubGlzdFNlbGVjdGlvbj1uZXcgQnQoImxpc3Qtc2VsZWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg1In0pLEJ0LnNlbGVjdGlvbj1uZXcgQnQoInNlbGVjdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NSJ9KSxCdC5saXN0VHJlZT1uZXcgQnQoImxpc3QtdHJlZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NiJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvblVudmVyaWZpZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViODcifSksQnQuZGVidWdCcmVha3BvaW50RnVuY3Rpb249bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg4In0pLEJ0LmRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uRGlzYWJsZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjg4In0pLEJ0LmRlYnVnU3RhY2tmcmFtZUFjdGl2ZT1uZXcgQnQoImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjg5In0pLEJ0LmNpcmNsZVNtYWxsRmlsbGVkPW5ldyBCdCgiY2lyY2xlLXNtYWxsLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YSJ9KSxCdC5kZWJ1Z1N0YWNrZnJhbWVEb3Q9bmV3IEJ0KCJkZWJ1Zy1zdGFja2ZyYW1lLWRvdCIsQnQuY2lyY2xlU21hbGxGaWxsZWQuZGVmaW5pdGlvbiksQnQuZGVidWdTdGFja2ZyYW1lPW5ldyBCdCgiZGVidWctc3RhY2tmcmFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YiJ9KSxCdC5kZWJ1Z1N0YWNrZnJhbWVGb2N1c2VkPW5ldyBCdCgiZGVidWctc3RhY2tmcmFtZS1mb2N1c2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYjhiIn0pLEJ0LmRlYnVnQnJlYWtwb2ludFVuc3VwcG9ydGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC11bnN1cHBvcnRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YyJ9KSxCdC5zeW1ib2xTdHJpbmc9bmV3IEJ0KCJzeW1ib2wtc3RyaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjhkIn0pLEJ0LmRlYnVnUmV2ZXJzZUNvbnRpbnVlPW5ldyBCdCgiZGVidWctcmV2ZXJzZS1jb250aW51ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4ZSJ9KSxCdC5kZWJ1Z1N0ZXBCYWNrPW5ldyBCdCgiZGVidWctc3RlcC1iYWNrIix7Zm9udENoYXJhY3RlcjoiXFxlYjhmIn0pLEJ0LmRlYnVnUmVzdGFydEZyYW1lPW5ldyBCdCgiZGVidWctcmVzdGFydC1mcmFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MCJ9KSxCdC5jYWxsSW5jb21pbmc9bmV3IEJ0KCJjYWxsLWluY29taW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjkyIn0pLEJ0LmNhbGxPdXRnb2luZz1uZXcgQnQoImNhbGwtb3V0Z29pbmciLHtmb250Q2hhcmFjdGVyOiJcXGViOTMifSksQnQubWVudT1uZXcgQnQoIm1lbnUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTQifSksQnQuZXhwYW5kQWxsPW5ldyBCdCgiZXhwYW5kLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5NSJ9KSxCdC5mZWVkYmFjaz1uZXcgQnQoImZlZWRiYWNrIix7Zm9udENoYXJhY3RlcjoiXFxlYjk2In0pLEJ0Lmdyb3VwQnlSZWZUeXBlPW5ldyBCdCgiZ3JvdXAtYnktcmVmLXR5cGUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTcifSksQnQudW5ncm91cEJ5UmVmVHlwZT1uZXcgQnQoInVuZ3JvdXAtYnktcmVmLXR5cGUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTgifSksQnQuYWNjb3VudD1uZXcgQnQoImFjY291bnQiLHtmb250Q2hhcmFjdGVyOiJcXGViOTkifSksQnQuYmVsbERvdD1uZXcgQnQoImJlbGwtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYjlhIn0pLEJ0LmRlYnVnQ29uc29sZT1uZXcgQnQoImRlYnVnLWNvbnNvbGUiLHtmb250Q2hhcmFjdGVyOiJcXGViOWIifSksQnQubGlicmFyeT1uZXcgQnQoImxpYnJhcnkiLHtmb250Q2hhcmFjdGVyOiJcXGViOWMifSksQnQub3V0cHV0PW5ldyBCdCgib3V0cHV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjlkIn0pLEJ0LnJ1bkFsbD1uZXcgQnQoInJ1bi1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViOWUifSksQnQuc3luY0lnbm9yZWQ9bmV3IEJ0KCJzeW5jLWlnbm9yZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViOWYifSksQnQucGlubmVkPW5ldyBCdCgicGlubmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmEwIn0pLEJ0LmdpdGh1YkludmVydGVkPW5ldyBCdCgiZ2l0aHViLWludmVydGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmExIn0pLEJ0LmRlYnVnQWx0PW5ldyBCdCgiZGVidWctYWx0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjkxIn0pLEJ0LnNlcnZlclByb2Nlc3M9bmV3IEJ0KCJzZXJ2ZXItcHJvY2VzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMiJ9KSxCdC5zZXJ2ZXJFbnZpcm9ubWVudD1uZXcgQnQoInNlcnZlci1lbnZpcm9ubWVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMyJ9KSxCdC5wYXNzPW5ldyBCdCgicGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNCJ9KSxCdC5zdG9wQ2lyY2xlPW5ldyBCdCgic3RvcC1jaXJjbGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYTUifSksQnQucGxheUNpcmNsZT1uZXcgQnQoInBsYXktY2lyY2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYmE2In0pLEJ0LnJlY29yZD1uZXcgQnQoInJlY29yZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNyJ9KSxCdC5kZWJ1Z0FsdFNtYWxsPW5ldyBCdCgiZGVidWctYWx0LXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmE4In0pLEJ0LnZtQ29ubmVjdD1uZXcgQnQoInZtLWNvbm5lY3QiLHtmb250Q2hhcmFjdGVyOiJcXGViYTkifSksQnQuY2xvdWQ9bmV3IEJ0KCJjbG91ZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhYSJ9KSxCdC5tZXJnZT1uZXcgQnQoIm1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYmFiIn0pLEJ0LmV4cG9ydEljb249bmV3IEJ0KCJleHBvcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWMifSksQnQuZ3JhcGhMZWZ0PW5ldyBCdCgiZ3JhcGgtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhZCJ9KSxCdC5tYWduZXQ9bmV3IEJ0KCJtYWduZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWUifSksQnQubm90ZWJvb2s9bmV3IEJ0KCJub3RlYm9vayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhZiJ9KSxCdC5yZWRvPW5ldyBCdCgicmVkbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMCJ9KSxCdC5jaGVja0FsbD1uZXcgQnQoImNoZWNrLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMSJ9KSxCdC5waW5uZWREaXJ0eT1uZXcgQnQoInBpbm5lZC1kaXJ0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMiJ9KSxCdC5wYXNzRmlsbGVkPW5ldyBCdCgicGFzcy1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYjMifSksQnQuY2lyY2xlTGFyZ2VGaWxsZWQ9bmV3IEJ0KCJjaXJjbGUtbGFyZ2UtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmI0In0pLEJ0LmNpcmNsZUxhcmdlT3V0bGluZT1uZXcgQnQoImNpcmNsZS1sYXJnZS1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmI1In0pLEJ0LmNvbWJpbmU9bmV3IEJ0KCJjb21iaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmI2In0pLEJ0LmdhdGhlcj1uZXcgQnQoImdhdGhlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNiJ9KSxCdC50YWJsZT1uZXcgQnQoInRhYmxlIix7Zm9udENoYXJhY3RlcjoiXFxlYmI3In0pLEJ0LnZhcmlhYmxlR3JvdXA9bmV3IEJ0KCJ2YXJpYWJsZS1ncm91cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiOCJ9KSxCdC50eXBlSGllcmFyY2h5PW5ldyBCdCgidHlwZS1oaWVyYXJjaHkiLHtmb250Q2hhcmFjdGVyOiJcXGViYjkifSksQnQudHlwZUhpZXJhcmNoeVN1Yj1uZXcgQnQoInR5cGUtaGllcmFyY2h5LXN1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiYSJ9KSxCdC50eXBlSGllcmFyY2h5U3VwZXI9bmV3IEJ0KCJ0eXBlLWhpZXJhcmNoeS1zdXBlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiYiJ9KSxCdC5naXRQdWxsUmVxdWVzdENyZWF0ZT1uZXcgQnQoImdpdC1wdWxsLXJlcXVlc3QtY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYmJjIn0pLEJ0LnJ1bkFib3ZlPW5ldyBCdCgicnVuLWFib3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYmJkIn0pLEJ0LnJ1bkJlbG93PW5ldyBCdCgicnVuLWJlbG93Iix7Zm9udENoYXJhY3RlcjoiXFxlYmJlIn0pLEJ0Lm5vdGVib29rVGVtcGxhdGU9bmV3IEJ0KCJub3RlYm9vay10ZW1wbGF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZiJ9KSxCdC5kZWJ1Z1JlcnVuPW5ldyBCdCgiZGVidWctcmVydW4iLHtmb250Q2hhcmFjdGVyOiJcXGViYzAifSksQnQud29ya3NwYWNlVHJ1c3RlZD1uZXcgQnQoIndvcmtzcGFjZS10cnVzdGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMxIn0pLEJ0LndvcmtzcGFjZVVudHJ1c3RlZD1uZXcgQnQoIndvcmtzcGFjZS11bnRydXN0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzIifSksQnQud29ya3NwYWNlVW5zcGVjaWZpZWQ9bmV3IEJ0KCJ3b3Jrc3BhY2UtdW5zcGVjaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzMifSksQnQudGVybWluYWxDbWQ9bmV3IEJ0KCJ0ZXJtaW5hbC1jbWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzQifSksQnQudGVybWluYWxEZWJpYW49bmV3IEJ0KCJ0ZXJtaW5hbC1kZWJpYW4iLHtmb250Q2hhcmFjdGVyOiJcXGViYzUifSksQnQudGVybWluYWxMaW51eD1uZXcgQnQoInRlcm1pbmFsLWxpbnV4Iix7Zm9udENoYXJhY3RlcjoiXFxlYmM2In0pLEJ0LnRlcm1pbmFsUG93ZXJzaGVsbD1uZXcgQnQoInRlcm1pbmFsLXBvd2Vyc2hlbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViYzcifSksQnQudGVybWluYWxUbXV4PW5ldyBCdCgidGVybWluYWwtdG11eCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjOCJ9KSxCdC50ZXJtaW5hbFVidW50dT1uZXcgQnQoInRlcm1pbmFsLXVidW50dSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjOSJ9KSxCdC50ZXJtaW5hbEJhc2g9bmV3IEJ0KCJ0ZXJtaW5hbC1iYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYmNhIn0pLEJ0LmFycm93U3dhcD1uZXcgQnQoImFycm93LXN3YXAiLHtmb250Q2hhcmFjdGVyOiJcXGViY2IifSksQnQuY29weT1uZXcgQnQoImNvcHkiLHtmb250Q2hhcmFjdGVyOiJcXGViY2MifSksQnQucGVyc29uQWRkPW5ldyBCdCgicGVyc29uLWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZCJ9KSxCdC5maWx0ZXJGaWxsZWQ9bmV3IEJ0KCJmaWx0ZXItZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmNlIn0pLEJ0LndhbmQ9bmV3IEJ0KCJ3YW5kIix7Zm9udENoYXJhY3RlcjoiXFxlYmNmIn0pLEJ0LmRlYnVnTGluZUJ5TGluZT1uZXcgQnQoImRlYnVnLWxpbmUtYnktbGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMCJ9KSxCdC5pbnNwZWN0PW5ldyBCdCgiaW5zcGVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMSJ9KSxCdC5sYXllcnM9bmV3IEJ0KCJsYXllcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViZDIifSksQnQubGF5ZXJzRG90PW5ldyBCdCgibGF5ZXJzLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMyJ9KSxCdC5sYXllcnNBY3RpdmU9bmV3IEJ0KCJsYXllcnMtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ0In0pLEJ0LmNvbXBhc3M9bmV3IEJ0KCJjb21wYXNzIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ1In0pLEJ0LmNvbXBhc3NEb3Q9bmV3IEJ0KCJjb21wYXNzLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNiJ9KSxCdC5jb21wYXNzQWN0aXZlPW5ldyBCdCgiY29tcGFzcy1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDcifSksQnQuYXp1cmU9bmV3IEJ0KCJhenVyZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkOCJ9KSxCdC5pc3N1ZURyYWZ0PW5ldyBCdCgiaXNzdWUtZHJhZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZDkifSksQnQuZ2l0UHVsbFJlcXVlc3RDbG9zZWQ9bmV3IEJ0KCJnaXQtcHVsbC1yZXF1ZXN0LWNsb3NlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkYSJ9KSxCdC5naXRQdWxsUmVxdWVzdERyYWZ0PW5ldyBCdCgiZ2l0LXB1bGwtcmVxdWVzdC1kcmFmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkYiJ9KSxCdC5kZWJ1Z0FsbD1uZXcgQnQoImRlYnVnLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkYyJ9KSxCdC5kZWJ1Z0NvdmVyYWdlPW5ldyBCdCgiZGVidWctY292ZXJhZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGViZGQifSksQnQucnVuRXJyb3JzPW5ldyBCdCgicnVuLWVycm9ycyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkZSJ9KSxCdC5mb2xkZXJMaWJyYXJ5PW5ldyBCdCgiZm9sZGVyLWxpYnJhcnkiLHtmb250Q2hhcmFjdGVyOiJcXGViZGYifSksQnQuZGVidWdDb250aW51ZVNtYWxsPW5ldyBCdCgiZGVidWctY29udGludWUtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZTAifSksQnQuYmVha2VyU3RvcD1uZXcgQnQoImJlYWtlci1zdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYmUxIn0pLEJ0LmdyYXBoTGluZT1uZXcgQnQoImdyYXBoLWxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZTIifSksQnQuZ3JhcGhTY2F0dGVyPW5ldyBCdCgiZ3JhcGgtc2NhdHRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMyJ9KSxCdC5waWVDaGFydD1uZXcgQnQoInBpZS1jaGFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNCJ9KSxCdC5icmFja2V0PW5ldyBCdCgiYnJhY2tldCIsQnQuanNvbi5kZWZpbml0aW9uKSxCdC5icmFja2V0RG90PW5ldyBCdCgiYnJhY2tldC1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZTUifSksQnQuYnJhY2tldEVycm9yPW5ldyBCdCgiYnJhY2tldC1lcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNiJ9KSxCdC5sb2NrU21hbGw9bmV3IEJ0KCJsb2NrLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmU3In0pLEJ0LmF6dXJlRGV2b3BzPW5ldyBCdCgiYXp1cmUtZGV2b3BzIix7Zm9udENoYXJhY3RlcjoiXFxlYmU4In0pLEJ0LnZlcmlmaWVkRmlsbGVkPW5ldyBCdCgidmVyaWZpZWQtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmU5In0pLEJ0Lm5ld0xpbmU9bmV3IEJ0KCJuZXdsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmVhIn0pLEJ0LmxheW91dD1uZXcgQnQoImxheW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYiJ9KSxCdC5sYXlvdXRBY3Rpdml0eWJhckxlZnQ9bmV3IEJ0KCJsYXlvdXQtYWN0aXZpdHliYXItbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYyJ9KSxCdC5sYXlvdXRBY3Rpdml0eWJhclJpZ2h0PW5ldyBCdCgibGF5b3V0LWFjdGl2aXR5YmFyLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmVkIn0pLEJ0LmxheW91dFBhbmVsTGVmdD1uZXcgQnQoImxheW91dC1wYW5lbC1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmVlIn0pLEJ0LmxheW91dFBhbmVsQ2VudGVyPW5ldyBCdCgibGF5b3V0LXBhbmVsLWNlbnRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZiJ9KSxCdC5sYXlvdXRQYW5lbEp1c3RpZnk9bmV3IEJ0KCJsYXlvdXQtcGFuZWwtanVzdGlmeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMCJ9KSxCdC5sYXlvdXRQYW5lbFJpZ2h0PW5ldyBCdCgibGF5b3V0LXBhbmVsLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmYxIn0pLEJ0LmxheW91dFBhbmVsPW5ldyBCdCgibGF5b3V0LXBhbmVsIix7Zm9udENoYXJhY3RlcjoiXFxlYmYyIn0pLEJ0LmxheW91dFNpZGViYXJMZWZ0PW5ldyBCdCgibGF5b3V0LXNpZGViYXItbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMyJ9KSxCdC5sYXlvdXRTaWRlYmFyUmlnaHQ9bmV3IEJ0KCJsYXlvdXQtc2lkZWJhci1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmNCJ9KSxCdC5sYXlvdXRTdGF0dXNiYXI9bmV3IEJ0KCJsYXlvdXQtc3RhdHVzYmFyIix7Zm9udENoYXJhY3RlcjoiXFxlYmY1In0pLEJ0LmxheW91dE1lbnViYXI9bmV3IEJ0KCJsYXlvdXQtbWVudWJhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmNiJ9KSxCdC5sYXlvdXRDZW50ZXJlZD1uZXcgQnQoImxheW91dC1jZW50ZXJlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmNyJ9KSxCdC5sYXlvdXRTaWRlYmFyUmlnaHRPZmY9bmV3IEJ0KCJsYXlvdXQtc2lkZWJhci1yaWdodC1vZmYiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDAifSksQnQubGF5b3V0UGFuZWxPZmY9bmV3IEJ0KCJsYXlvdXQtcGFuZWwtb2ZmIix7Zm9udENoYXJhY3RlcjoiXFxlYzAxIn0pLEJ0LmxheW91dFNpZGViYXJMZWZ0T2ZmPW5ldyBCdCgibGF5b3V0LXNpZGViYXItbGVmdC1vZmYiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDIifSksQnQudGFyZ2V0PW5ldyBCdCgidGFyZ2V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmY4In0pLEJ0LmluZGVudD1uZXcgQnQoImluZGVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmOSJ9KSxCdC5yZWNvcmRTbWFsbD1uZXcgQnQoInJlY29yZC1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmYSJ9KSxCdC5lcnJvclNtYWxsPW5ldyBCdCgiZXJyb3Itc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZmIifSksQnQuYXJyb3dDaXJjbGVEb3duPW5ldyBCdCgiYXJyb3ctY2lyY2xlLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViZmMifSksQnQuYXJyb3dDaXJjbGVMZWZ0PW5ldyBCdCgiYXJyb3ctY2lyY2xlLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZmQifSksQnQuYXJyb3dDaXJjbGVSaWdodD1uZXcgQnQoImFycm93LWNpcmNsZS1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmZSJ9KSxCdC5hcnJvd0NpcmNsZVVwPW5ldyBCdCgiYXJyb3ctY2lyY2xlLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYmZmIn0pLEJ0LmhlYXJ0RmlsbGVkPW5ldyBCdCgiaGVhcnQtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYzA0In0pLEJ0Lm1hcD1uZXcgQnQoIm1hcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwNSJ9KSxCdC5tYXBGaWxsZWQ9bmV3IEJ0KCJtYXAtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYzA2In0pLEJ0LmNpcmNsZVNtYWxsPW5ldyBCdCgiY2lyY2xlLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYzA3In0pLEJ0LmJlbGxTbGFzaD1uZXcgQnQoImJlbGwtc2xhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVjMDgifSksQnQuYmVsbFNsYXNoRG90PW5ldyBCdCgiYmVsbC1zbGFzaC1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDkifSksQnQuY29tbWVudFVucmVzb2x2ZWQ9bmV3IEJ0KCJjb21tZW50LXVucmVzb2x2ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVjMGEifSksQnQuZ2l0UHVsbFJlcXVlc3RHb1RvQ2hhbmdlcz1uZXcgQnQoImdpdC1wdWxsLXJlcXVlc3QtZ28tdG8tY2hhbmdlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwYiJ9KSxCdC5naXRQdWxsUmVxdWVzdE5ld0NoYW5nZXM9bmV3IEJ0KCJnaXQtcHVsbC1yZXF1ZXN0LW5ldy1jaGFuZ2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYzBjIn0pLEJ0LmRpYWxvZ0Vycm9yPW5ldyBCdCgiZGlhbG9nLWVycm9yIixCdC5lcnJvci5kZWZpbml0aW9uKSxCdC5kaWFsb2dXYXJuaW5nPW5ldyBCdCgiZGlhbG9nLXdhcm5pbmciLEJ0Lndhcm5pbmcuZGVmaW5pdGlvbiksQnQuZGlhbG9nSW5mbz1uZXcgQnQoImRpYWxvZy1pbmZvIixCdC5pbmZvLmRlZmluaXRpb24pLEJ0LmRpYWxvZ0Nsb3NlPW5ldyBCdCgiZGlhbG9nLWNsb3NlIixCdC5jbG9zZS5kZWZpbml0aW9uKSxCdC50cmVlSXRlbUV4cGFuZGVkPW5ldyBCdCgidHJlZS1pdGVtLWV4cGFuZGVkIixCdC5jaGV2cm9uRG93bi5kZWZpbml0aW9uKSxCdC50cmVlRmlsdGVyT25UeXBlT249bmV3IEJ0KCJ0cmVlLWZpbHRlci1vbi10eXBlLW9uIixCdC5saXN0RmlsdGVyLmRlZmluaXRpb24pLEJ0LnRyZWVGaWx0ZXJPblR5cGVPZmY9bmV3IEJ0KCJ0cmVlLWZpbHRlci1vbi10eXBlLW9mZiIsQnQubGlzdFNlbGVjdGlvbi5kZWZpbml0aW9uKSxCdC50cmVlRmlsdGVyQ2xlYXI9bmV3IEJ0KCJ0cmVlLWZpbHRlci1jbGVhciIsQnQuY2xvc2UuZGVmaW5pdGlvbiksQnQudHJlZUl0ZW1Mb2FkaW5nPW5ldyBCdCgidHJlZS1pdGVtLWxvYWRpbmciLEJ0LmxvYWRpbmcuZGVmaW5pdGlvbiksQnQubWVudVNlbGVjdGlvbj1uZXcgQnQoIm1lbnUtc2VsZWN0aW9uIixCdC5jaGVjay5kZWZpbml0aW9uKSxCdC5tZW51U3VibWVudT1uZXcgQnQoIm1lbnUtc3VibWVudSIsQnQuY2hldnJvblJpZ2h0LmRlZmluaXRpb24pLEJ0Lm1lbnVCYXJNb3JlPW5ldyBCdCgibWVudWJhci1tb3JlIixCdC5tb3JlLmRlZmluaXRpb24pLEJ0LnNjcm9sbGJhckJ1dHRvbkxlZnQ9bmV3IEJ0KCJzY3JvbGxiYXItYnV0dG9uLWxlZnQiLEJ0LnRyaWFuZ2xlTGVmdC5kZWZpbml0aW9uKSxCdC5zY3JvbGxiYXJCdXR0b25SaWdodD1uZXcgQnQoInNjcm9sbGJhci1idXR0b24tcmlnaHQiLEJ0LnRyaWFuZ2xlUmlnaHQuZGVmaW5pdGlvbiksQnQuc2Nyb2xsYmFyQnV0dG9uVXA9bmV3IEJ0KCJzY3JvbGxiYXItYnV0dG9uLXVwIixCdC50cmlhbmdsZVVwLmRlZmluaXRpb24pLEJ0LnNjcm9sbGJhckJ1dHRvbkRvd249bmV3IEJ0KCJzY3JvbGxiYXItYnV0dG9uLWRvd24iLEJ0LnRyaWFuZ2xlRG93bi5kZWZpbml0aW9uKSxCdC50b29sQmFyTW9yZT1uZXcgQnQoInRvb2xiYXItbW9yZSIsQnQubW9yZS5kZWZpbml0aW9uKSxCdC5xdWlja0lucHV0QmFjaz1uZXcgQnQoInF1aWNrLWlucHV0LWJhY2siLEJ0LmFycm93TGVmdC5kZWZpbml0aW9uKSxmdW5jdGlvbihlKXtlLmljb25OYW1lU2VnbWVudD0iW0EtWmEtejAtOV0rIixlLmljb25OYW1lRXhwcmVzc2lvbj0iW0EtWmEtejAtOS1dKyIsZS5pY29uTW9kaWZpZXJFeHByZXNzaW9uPSJ+W0EtWmEtel0rIixlLmljb25OYW1lQ2hhcmFjdGVyPSJbQS1aYS16MC05fi1dIjtjb25zdCB0PW5ldyBSZWdFeHAoYF4oJHtlLmljb25OYW1lRXhwcmVzc2lvbn0pKCR7ZS5pY29uTW9kaWZpZXJFeHByZXNzaW9ufSk/JGApO2Z1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIEJ0KXJldHVyblsiY29kaWNvbiIsImNvZGljb24tIitlLmlkXTtjb25zdCByPXQuZXhlYyhlLmlkKTtpZighcilyZXR1cm4gbihCdC5lcnJvcik7Y29uc3RbLGksb109cixhPVsiY29kaWNvbiIsImNvZGljb24tIitpXTtyZXR1cm4gbyYmYS5wdXNoKCJjb2RpY29uLW1vZGlmaWVyLSIrby5zdWJzdHIoMSkpLGF9ZS5hc0NsYXNzTmFtZUFycmF5PW4sZS5hc0NsYXNzTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gbihlKS5qb2luKCIgIil9LGUuYXNDU1NTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4iLiIrbihlKS5qb2luKCIuIil9fShqdHx8KGp0PXt9KSk7dmFyIHF0LCR0LFd0LEh0LHp0LEd0LEp0LFh0LFp0LFl0LFF0LGVuLHRuLG5uLHJuLG9uLGFuLHNuLGNuLGxuLHVuLGhuLGZuLGRuLG1uLGduLHBuLGJuLHZuLHluLENuLHduLF9uLFNuLEFuLEVuLHhuLE5uLGtuLExuLFRuLE9uLEluLE1uLFBuLFJuLFZuLEZuLERuPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjbGFzcyBLbiBleHRlbmRzIGZ7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKCksdGhpcy5fcmVnaXN0cnk9ZSx0aGlzLl9sYW5ndWFnZUlkPXQsdGhpcy5fZmFjdG9yeT1uLHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5fcmVzb2x2ZVByb21pc2U9bnVsbCx0aGlzLl9pc1Jlc29sdmVkPSExfWdldCBpc1Jlc29sdmVkKCl7cmV0dXJuIHRoaXMuX2lzUmVzb2x2ZWR9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWQ9ITAsc3VwZXIuZGlzcG9zZSgpfXJlc29sdmUoKXtyZXR1cm4gRG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVByb21pc2V8fCh0aGlzLl9yZXNvbHZlUHJvbWlzZT10aGlzLl9jcmVhdGUoKSksdGhpcy5fcmVzb2x2ZVByb21pc2V9KSl9X2NyZWF0ZSgpe3JldHVybiBEbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZhY3RvcnkuY3JlYXRlVG9rZW5pemF0aW9uU3VwcG9ydCgpKTt0aGlzLl9pc1Jlc29sdmVkPSEwLGUmJiF0aGlzLl9pc0Rpc3Bvc2VkJiZ0aGlzLl9yZWdpc3Rlcih0aGlzLl9yZWdpc3RyeS5yZWdpc3Rlcih0aGlzLl9sYW5ndWFnZUlkLGUpKX0pKX19Y2xhc3Mgam57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuX3Rva2VuQnJhbmQ9dm9pZCAwLHRoaXMub2Zmc2V0PWUsdGhpcy50eXBlPXQsdGhpcy5sYW5ndWFnZT1ufXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMub2Zmc2V0KyIsICIrdGhpcy50eXBlKyIpIn19IWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLEJ0LnN5bWJvbE1ldGhvZCksdC5zZXQoMSxCdC5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMixCdC5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoMyxCdC5zeW1ib2xGaWVsZCksdC5zZXQoNCxCdC5zeW1ib2xWYXJpYWJsZSksdC5zZXQoNSxCdC5zeW1ib2xDbGFzcyksdC5zZXQoNixCdC5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDcsQnQuc3ltYm9sSW50ZXJmYWNlKSx0LnNldCg4LEJ0LnN5bWJvbE1vZHVsZSksdC5zZXQoOSxCdC5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoMTAsQnQuc3ltYm9sRXZlbnQpLHQuc2V0KDExLEJ0LnN5bWJvbE9wZXJhdG9yKSx0LnNldCgxMixCdC5zeW1ib2xVbml0KSx0LnNldCgxMyxCdC5zeW1ib2xWYWx1ZSksdC5zZXQoMTUsQnQuc3ltYm9sRW51bSksdC5zZXQoMTQsQnQuc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE1LEJ0LnN5bWJvbEVudW0pLHQuc2V0KDE2LEJ0LnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDE3LEJ0LnN5bWJvbEtleXdvcmQpLHQuc2V0KDI3LEJ0LnN5bWJvbFNuaXBwZXQpLHQuc2V0KDE4LEJ0LnN5bWJvbFRleHQpLHQuc2V0KDE5LEJ0LnN5bWJvbENvbG9yKSx0LnNldCgyMCxCdC5zeW1ib2xGaWxlKSx0LnNldCgyMSxCdC5zeW1ib2xSZWZlcmVuY2UpLHQuc2V0KDIyLEJ0LnN5bWJvbEN1c3RvbUNvbG9yKSx0LnNldCgyMyxCdC5zeW1ib2xGb2xkZXIpLHQuc2V0KDI0LEJ0LnN5bWJvbFR5cGVQYXJhbWV0ZXIpLHQuc2V0KDI1LEJ0LmFjY291bnQpLHQuc2V0KDI2LEJ0Lmlzc3VlcyksZS50b0ljb249ZnVuY3Rpb24oZSl7bGV0IG49dC5nZXQoZSk7cmV0dXJuIG58fChjb25zb2xlLmluZm8oIk5vIGNvZGljb24gZm91bmQgZm9yIENvbXBsZXRpb25JdGVtS2luZCAiK2UpLG49QnQuc3ltYm9sUHJvcGVydHkpLG59O2NvbnN0IG49bmV3IE1hcDtuLnNldCgibWV0aG9kIiwwKSxuLnNldCgiZnVuY3Rpb24iLDEpLG4uc2V0KCJjb25zdHJ1Y3RvciIsMiksbi5zZXQoImZpZWxkIiwzKSxuLnNldCgidmFyaWFibGUiLDQpLG4uc2V0KCJjbGFzcyIsNSksbi5zZXQoInN0cnVjdCIsNiksbi5zZXQoImludGVyZmFjZSIsNyksbi5zZXQoIm1vZHVsZSIsOCksbi5zZXQoInByb3BlcnR5Iiw5KSxuLnNldCgiZXZlbnQiLDEwKSxuLnNldCgib3BlcmF0b3IiLDExKSxuLnNldCgidW5pdCIsMTIpLG4uc2V0KCJ2YWx1ZSIsMTMpLG4uc2V0KCJjb25zdGFudCIsMTQpLG4uc2V0KCJlbnVtIiwxNSksbi5zZXQoImVudW0tbWVtYmVyIiwxNiksbi5zZXQoImVudW1NZW1iZXIiLDE2KSxuLnNldCgia2V5d29yZCIsMTcpLG4uc2V0KCJzbmlwcGV0IiwyNyksbi5zZXQoInRleHQiLDE4KSxuLnNldCgiY29sb3IiLDE5KSxuLnNldCgiZmlsZSIsMjApLG4uc2V0KCJyZWZlcmVuY2UiLDIxKSxuLnNldCgiY3VzdG9tY29sb3IiLDIyKSxuLnNldCgiZm9sZGVyIiwyMyksbi5zZXQoInR5cGUtcGFyYW1ldGVyIiwyNCksbi5zZXQoInR5cGVQYXJhbWV0ZXIiLDI0KSxuLnNldCgiYWNjb3VudCIsMjUpLG4uc2V0KCJpc3N1ZSIsMjYpLGUuZnJvbVN0cmluZz1mdW5jdGlvbihlLHQpe2xldCByPW4uZ2V0KGUpO3JldHVybiB2b2lkIDAhPT1yfHx0fHwocj05KSxyfX0ocXR8fChxdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KCR0fHwoJHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KFd0fHwoV3Q9e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifShIdHx8KEh0PXt9KSksZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3Quc2V0KDAsQnQuc3ltYm9sRmlsZSksdC5zZXQoMSxCdC5zeW1ib2xNb2R1bGUpLHQuc2V0KDIsQnQuc3ltYm9sTmFtZXNwYWNlKSx0LnNldCgzLEJ0LnN5bWJvbFBhY2thZ2UpLHQuc2V0KDQsQnQuc3ltYm9sQ2xhc3MpLHQuc2V0KDUsQnQuc3ltYm9sTWV0aG9kKSx0LnNldCg2LEJ0LnN5bWJvbFByb3BlcnR5KSx0LnNldCg3LEJ0LnN5bWJvbEZpZWxkKSx0LnNldCg4LEJ0LnN5bWJvbENvbnN0cnVjdG9yKSx0LnNldCg5LEJ0LnN5bWJvbEVudW0pLHQuc2V0KDEwLEJ0LnN5bWJvbEludGVyZmFjZSksdC5zZXQoMTEsQnQuc3ltYm9sRnVuY3Rpb24pLHQuc2V0KDEyLEJ0LnN5bWJvbFZhcmlhYmxlKSx0LnNldCgxMyxCdC5zeW1ib2xDb25zdGFudCksdC5zZXQoMTQsQnQuc3ltYm9sU3RyaW5nKSx0LnNldCgxNSxCdC5zeW1ib2xOdW1iZXIpLHQuc2V0KDE2LEJ0LnN5bWJvbEJvb2xlYW4pLHQuc2V0KDE3LEJ0LnN5bWJvbEFycmF5KSx0LnNldCgxOCxCdC5zeW1ib2xPYmplY3QpLHQuc2V0KDE5LEJ0LnN5bWJvbEtleSksdC5zZXQoMjAsQnQuc3ltYm9sTnVsbCksdC5zZXQoMjEsQnQuc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMjIsQnQuc3ltYm9sU3RydWN0KSx0LnNldCgyMyxCdC5zeW1ib2xFdmVudCksdC5zZXQoMjQsQnQuc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDI1LEJ0LnN5bWJvbFR5cGVQYXJhbWV0ZXIpLGUudG9JY29uPWZ1bmN0aW9uKGUpe2xldCBuPXQuZ2V0KGUpO3JldHVybiBufHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBTeW1ib2xLaW5kICIrZSksbj1CdC5zeW1ib2xQcm9wZXJ0eSksbn19KHp0fHwoenQ9e30pKSxmdW5jdGlvbihlKXtlLmlzPWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCJvYmplY3QiIT10eXBlb2YgZSkmJigic3RyaW5nIj09dHlwZW9mIGUuaWQmJiJzdHJpbmciPT10eXBlb2YgZS50aXRsZSl9fShHdHx8KEd0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KEp0fHwoSnQ9e30pKSxuZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcCx0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcCx0aGlzLl9vbkRpZENoYW5nZT1uZXcgQix0aGlzLm9uRGlkQ2hhbmdlPXRoaXMuX29uRGlkQ2hhbmdlLmV2ZW50LHRoaXMuX2NvbG9yTWFwPW51bGx9ZmlyZShlKXt0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOmUsY2hhbmdlZENvbG9yTWFwOiExfSl9cmVnaXN0ZXIoZSx0KXtyZXR1cm4gdGhpcy5fbWFwLnNldChlLHQpLHRoaXMuZmlyZShbZV0pLHUoKCgpPT57dGhpcy5fbWFwLmdldChlKT09PXQmJih0aGlzLl9tYXAuZGVsZXRlKGUpLHRoaXMuZmlyZShbZV0pKX0pKX1yZWdpc3RlckZhY3RvcnkoZSx0KXt2YXIgbjtudWxsPT09KG49dGhpcy5fZmFjdG9yaWVzLmdldChlKSl8fHZvaWQgMD09PW58fG4uZGlzcG9zZSgpO2NvbnN0IHI9bmV3IEtuKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5fZmFjdG9yaWVzLnNldChlLHIpLHUoKCgpPT57Y29uc3QgdD10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3QmJnQ9PT1yJiYodGhpcy5fZmFjdG9yaWVzLmRlbGV0ZShlKSx0LmRpc3Bvc2UoKSl9KSl9Z2V0T3JDcmVhdGUoZSl7cmV0dXJuIERuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD10aGlzLmdldChlKTtpZih0KXJldHVybiB0O2NvbnN0IG49dGhpcy5fZmFjdG9yaWVzLmdldChlKTtyZXR1cm4hbnx8bi5pc1Jlc29sdmVkP251bGw6KHlpZWxkIG4ucmVzb2x2ZSgpLHRoaXMuZ2V0KGUpKX0pKX1nZXQoZSl7cmV0dXJuIHRoaXMuX21hcC5nZXQoZSl8fG51bGx9aXNSZXNvbHZlZChlKXtpZih0aGlzLmdldChlKSlyZXR1cm4hMDtjb25zdCB0PXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSk7cmV0dXJuISh0JiYhdC5pc1Jlc29sdmVkKX1zZXRDb2xvck1hcChlKXt0aGlzLl9jb2xvck1hcD1lLHRoaXMuX29uRGlkQ2hhbmdlLmZpcmUoe2NoYW5nZWRMYW5ndWFnZXM6QXJyYXkuZnJvbSh0aGlzLl9tYXAua2V5cygpKSxjaGFuZ2VkQ29sb3JNYXA6ITB9KX1nZXRDb2xvck1hcCgpe3JldHVybiB0aGlzLl9jb2xvck1hcH1nZXREZWZhdWx0QmFja2dyb3VuZCgpe3JldHVybiB0aGlzLl9jb2xvck1hcCYmdGhpcy5fY29sb3JNYXAubGVuZ3RoPjI/dGhpcy5fY29sb3JNYXBbMl06bnVsbH19LGZ1bmN0aW9uKGUpe2VbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuRGlzYWJsZWQ9MV09IkRpc2FibGVkIixlW2UuRW5hYmxlZD0yXT0iRW5hYmxlZCJ9KFh0fHwoWHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5BdXRvPTJdPSJBdXRvIn0oWnR8fChadD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5LZWVwV2hpdGVzcGFjZT0xXT0iS2VlcFdoaXRlc3BhY2UiLGVbZS5JbnNlcnRBc1NuaXBwZXQ9NF09Ikluc2VydEFzU25pcHBldCJ9KFl0fHwoWXQ9e30pKSxmdW5jdGlvbihlKXtlW2UuTWV0aG9kPTBdPSJNZXRob2QiLGVbZS5GdW5jdGlvbj0xXT0iRnVuY3Rpb24iLGVbZS5Db25zdHJ1Y3Rvcj0yXT0iQ29uc3RydWN0b3IiLGVbZS5GaWVsZD0zXT0iRmllbGQiLGVbZS5WYXJpYWJsZT00XT0iVmFyaWFibGUiLGVbZS5DbGFzcz01XT0iQ2xhc3MiLGVbZS5TdHJ1Y3Q9Nl09IlN0cnVjdCIsZVtlLkludGVyZmFjZT03XT0iSW50ZXJmYWNlIixlW2UuTW9kdWxlPThdPSJNb2R1bGUiLGVbZS5Qcm9wZXJ0eT05XT0iUHJvcGVydHkiLGVbZS5FdmVudD0xMF09IkV2ZW50IixlW2UuT3BlcmF0b3I9MTFdPSJPcGVyYXRvciIsZVtlLlVuaXQ9MTJdPSJVbml0IixlW2UuVmFsdWU9MTNdPSJWYWx1ZSIsZVtlLkNvbnN0YW50PTE0XT0iQ29uc3RhbnQiLGVbZS5FbnVtPTE1XT0iRW51bSIsZVtlLkVudW1NZW1iZXI9MTZdPSJFbnVtTWVtYmVyIixlW2UuS2V5d29yZD0xN109IktleXdvcmQiLGVbZS5UZXh0PTE4XT0iVGV4dCIsZVtlLkNvbG9yPTE5XT0iQ29sb3IiLGVbZS5GaWxlPTIwXT0iRmlsZSIsZVtlLlJlZmVyZW5jZT0yMV09IlJlZmVyZW5jZSIsZVtlLkN1c3RvbWNvbG9yPTIyXT0iQ3VzdG9tY29sb3IiLGVbZS5Gb2xkZXI9MjNdPSJGb2xkZXIiLGVbZS5UeXBlUGFyYW1ldGVyPTI0XT0iVHlwZVBhcmFtZXRlciIsZVtlLlVzZXI9MjVdPSJVc2VyIixlW2UuSXNzdWU9MjZdPSJJc3N1ZSIsZVtlLlNuaXBwZXQ9MjddPSJTbmlwcGV0In0oUXR8fChRdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0oZW58fChlbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9MV09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5UcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zPTJdPSJUcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zIn0odG58fCh0bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5FWEFDVD0wXT0iRVhBQ1QiLGVbZS5BQk9WRT0xXT0iQUJPVkUiLGVbZS5CRUxPVz0yXT0iQkVMT1cifShubnx8KG5uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vdFNldD0wXT0iTm90U2V0IixlW2UuQ29udGVudEZsdXNoPTFdPSJDb250ZW50Rmx1c2giLGVbZS5SZWNvdmVyRnJvbU1hcmtlcnM9Ml09IlJlY292ZXJGcm9tTWFya2VycyIsZVtlLkV4cGxpY2l0PTNdPSJFeHBsaWNpdCIsZVtlLlBhc3RlPTRdPSJQYXN0ZSIsZVtlLlVuZG89NV09IlVuZG8iLGVbZS5SZWRvPTZdPSJSZWRvIn0ocm58fChybj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0ob258fChvbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuUmVhZD0xXT0iUmVhZCIsZVtlLldyaXRlPTJdPSJXcml0ZSJ9KGFufHwoYW49e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLktlZXA9MV09IktlZXAiLGVbZS5CcmFja2V0cz0yXT0iQnJhY2tldHMiLGVbZS5BZHZhbmNlZD0zXT0iQWR2YW5jZWQiLGVbZS5GdWxsPTRdPSJGdWxsIn0oc258fChzbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5hY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXI9MF09ImFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3RlciIsZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyPTFdPSJhY2NlcHRTdWdnZXN0aW9uT25FbnRlciIsZVtlLmFjY2Vzc2liaWxpdHlTdXBwb3J0PTJdPSJhY2Nlc3NpYmlsaXR5U3VwcG9ydCIsZVtlLmFjY2Vzc2liaWxpdHlQYWdlU2l6ZT0zXT0iYWNjZXNzaWJpbGl0eVBhZ2VTaXplIixlW2UuYXJpYUxhYmVsPTRdPSJhcmlhTGFiZWwiLGVbZS5hdXRvQ2xvc2luZ0JyYWNrZXRzPTVdPSJhdXRvQ2xvc2luZ0JyYWNrZXRzIixlW2UuYXV0b0Nsb3NpbmdEZWxldGU9Nl09ImF1dG9DbG9zaW5nRGVsZXRlIixlW2UuYXV0b0Nsb3NpbmdPdmVydHlwZT03XT0iYXV0b0Nsb3NpbmdPdmVydHlwZSIsZVtlLmF1dG9DbG9zaW5nUXVvdGVzPThdPSJhdXRvQ2xvc2luZ1F1b3RlcyIsZVtlLmF1dG9JbmRlbnQ9OV09ImF1dG9JbmRlbnQiLGVbZS5hdXRvbWF0aWNMYXlvdXQ9MTBdPSJhdXRvbWF0aWNMYXlvdXQiLGVbZS5hdXRvU3Vycm91bmQ9MTFdPSJhdXRvU3Vycm91bmQiLGVbZS5icmFja2V0UGFpckNvbG9yaXphdGlvbj0xMl09ImJyYWNrZXRQYWlyQ29sb3JpemF0aW9uIixlW2UuZ3VpZGVzPTEzXT0iZ3VpZGVzIixlW2UuY29kZUxlbnM9MTRdPSJjb2RlTGVucyIsZVtlLmNvZGVMZW5zRm9udEZhbWlseT0xNV09ImNvZGVMZW5zRm9udEZhbWlseSIsZVtlLmNvZGVMZW5zRm9udFNpemU9MTZdPSJjb2RlTGVuc0ZvbnRTaXplIixlW2UuY29sb3JEZWNvcmF0b3JzPTE3XT0iY29sb3JEZWNvcmF0b3JzIixlW2UuY29sdW1uU2VsZWN0aW9uPTE4XT0iY29sdW1uU2VsZWN0aW9uIixlW2UuY29tbWVudHM9MTldPSJjb21tZW50cyIsZVtlLmNvbnRleHRtZW51PTIwXT0iY29udGV4dG1lbnUiLGVbZS5jb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZz0yMV09ImNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nIixlW2UuY3Vyc29yQmxpbmtpbmc9MjJdPSJjdXJzb3JCbGlua2luZyIsZVtlLmN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uPTIzXT0iY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb24iLGVbZS5jdXJzb3JTdHlsZT0yNF09ImN1cnNvclN0eWxlIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lcz0yNV09ImN1cnNvclN1cnJvdW5kaW5nTGluZXMiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGU9MjZdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGUiLGVbZS5jdXJzb3JXaWR0aD0yN109ImN1cnNvcldpZHRoIixlW2UuZGlzYWJsZUxheWVySGludGluZz0yOF09ImRpc2FibGVMYXllckhpbnRpbmciLGVbZS5kaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucz0yOV09ImRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zIixlW2UuZG9tUmVhZE9ubHk9MzBdPSJkb21SZWFkT25seSIsZVtlLmRyYWdBbmREcm9wPTMxXT0iZHJhZ0FuZERyb3AiLGVbZS5kcm9wSW50b0VkaXRvcj0zMl09ImRyb3BJbnRvRWRpdG9yIixlW2UuZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQ9MzNdPSJlbXB0eVNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLmV4cGVyaW1lbnRhbD0zNF09ImV4cGVyaW1lbnRhbCIsZVtlLmV4dHJhRWRpdG9yQ2xhc3NOYW1lPTM1XT0iZXh0cmFFZGl0b3JDbGFzc05hbWUiLGVbZS5mYXN0U2Nyb2xsU2Vuc2l0aXZpdHk9MzZdPSJmYXN0U2Nyb2xsU2Vuc2l0aXZpdHkiLGVbZS5maW5kPTM3XT0iZmluZCIsZVtlLmZpeGVkT3ZlcmZsb3dXaWRnZXRzPTM4XT0iZml4ZWRPdmVyZmxvd1dpZGdldHMiLGVbZS5mb2xkaW5nPTM5XT0iZm9sZGluZyIsZVtlLmZvbGRpbmdTdHJhdGVneT00MF09ImZvbGRpbmdTdHJhdGVneSIsZVtlLmZvbGRpbmdIaWdobGlnaHQ9NDFdPSJmb2xkaW5nSGlnaGxpZ2h0IixlW2UuZm9sZGluZ0ltcG9ydHNCeURlZmF1bHQ9NDJdPSJmb2xkaW5nSW1wb3J0c0J5RGVmYXVsdCIsZVtlLmZvbGRpbmdNYXhpbXVtUmVnaW9ucz00M109ImZvbGRpbmdNYXhpbXVtUmVnaW9ucyIsZVtlLnVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZT00NF09InVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZSIsZVtlLmZvbnRGYW1pbHk9NDVdPSJmb250RmFtaWx5IixlW2UuZm9udEluZm89NDZdPSJmb250SW5mbyIsZVtlLmZvbnRMaWdhdHVyZXM9NDddPSJmb250TGlnYXR1cmVzIixlW2UuZm9udFNpemU9NDhdPSJmb250U2l6ZSIsZVtlLmZvbnRXZWlnaHQ9NDldPSJmb250V2VpZ2h0IixlW2UuZm9ybWF0T25QYXN0ZT01MF09ImZvcm1hdE9uUGFzdGUiLGVbZS5mb3JtYXRPblR5cGU9NTFdPSJmb3JtYXRPblR5cGUiLGVbZS5nbHlwaE1hcmdpbj01Ml09ImdseXBoTWFyZ2luIixlW2UuZ290b0xvY2F0aW9uPTUzXT0iZ290b0xvY2F0aW9uIixlW2UuaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlcj01NF09ImhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXIiLGVbZS5ob3Zlcj01NV09ImhvdmVyIixlW2UuaW5EaWZmRWRpdG9yPTU2XT0iaW5EaWZmRWRpdG9yIixlW2UuaW5saW5lU3VnZ2VzdD01N109ImlubGluZVN1Z2dlc3QiLGVbZS5sZXR0ZXJTcGFjaW5nPTU4XT0ibGV0dGVyU3BhY2luZyIsZVtlLmxpZ2h0YnVsYj01OV09ImxpZ2h0YnVsYiIsZVtlLmxpbmVEZWNvcmF0aW9uc1dpZHRoPTYwXT0ibGluZURlY29yYXRpb25zV2lkdGgiLGVbZS5saW5lSGVpZ2h0PTYxXT0ibGluZUhlaWdodCIsZVtlLmxpbmVOdW1iZXJzPTYyXT0ibGluZU51bWJlcnMiLGVbZS5saW5lTnVtYmVyc01pbkNoYXJzPTYzXT0ibGluZU51bWJlcnNNaW5DaGFycyIsZVtlLmxpbmtlZEVkaXRpbmc9NjRdPSJsaW5rZWRFZGl0aW5nIixlW2UubGlua3M9NjVdPSJsaW5rcyIsZVtlLm1hdGNoQnJhY2tldHM9NjZdPSJtYXRjaEJyYWNrZXRzIixlW2UubWluaW1hcD02N109Im1pbmltYXAiLGVbZS5tb3VzZVN0eWxlPTY4XT0ibW91c2VTdHlsZSIsZVtlLm1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eT02OV09Im1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eSIsZVtlLm1vdXNlV2hlZWxab29tPTcwXT0ibW91c2VXaGVlbFpvb20iLGVbZS5tdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmc9NzFdPSJtdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmciLGVbZS5tdWx0aUN1cnNvck1vZGlmaWVyPTcyXT0ibXVsdGlDdXJzb3JNb2RpZmllciIsZVtlLm11bHRpQ3Vyc29yUGFzdGU9NzNdPSJtdWx0aUN1cnNvclBhc3RlIixlW2Uub2NjdXJyZW5jZXNIaWdobGlnaHQ9NzRdPSJvY2N1cnJlbmNlc0hpZ2hsaWdodCIsZVtlLm92ZXJ2aWV3UnVsZXJCb3JkZXI9NzVdPSJvdmVydmlld1J1bGVyQm9yZGVyIixlW2Uub3ZlcnZpZXdSdWxlckxhbmVzPTc2XT0ib3ZlcnZpZXdSdWxlckxhbmVzIixlW2UucGFkZGluZz03N109InBhZGRpbmciLGVbZS5wYXJhbWV0ZXJIaW50cz03OF09InBhcmFtZXRlckhpbnRzIixlW2UucGVla1dpZGdldERlZmF1bHRGb2N1cz03OV09InBlZWtXaWRnZXREZWZhdWx0Rm9jdXMiLGVbZS5kZWZpbml0aW9uTGlua09wZW5zSW5QZWVrPTgwXT0iZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlayIsZVtlLnF1aWNrU3VnZ2VzdGlvbnM9ODFdPSJxdWlja1N1Z2dlc3Rpb25zIixlW2UucXVpY2tTdWdnZXN0aW9uc0RlbGF5PTgyXT0icXVpY2tTdWdnZXN0aW9uc0RlbGF5IixlW2UucmVhZE9ubHk9ODNdPSJyZWFkT25seSIsZVtlLnJlbmFtZU9uVHlwZT04NF09InJlbmFtZU9uVHlwZSIsZVtlLnJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzPTg1XT0icmVuZGVyQ29udHJvbENoYXJhY3RlcnMiLGVbZS5yZW5kZXJGaW5hbE5ld2xpbmU9ODZdPSJyZW5kZXJGaW5hbE5ld2xpbmUiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0PTg3XT0icmVuZGVyTGluZUhpZ2hsaWdodCIsZVtlLnJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzPTg4XT0icmVuZGVyTGluZUhpZ2hsaWdodE9ubHlXaGVuRm9jdXMiLGVbZS5yZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnM9ODldPSJyZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnMiLGVbZS5yZW5kZXJXaGl0ZXNwYWNlPTkwXT0icmVuZGVyV2hpdGVzcGFjZSIsZVtlLnJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmc9OTFdPSJyZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nIixlW2Uucm91bmRlZFNlbGVjdGlvbj05Ml09InJvdW5kZWRTZWxlY3Rpb24iLGVbZS5ydWxlcnM9OTNdPSJydWxlcnMiLGVbZS5zY3JvbGxiYXI9OTRdPSJzY3JvbGxiYXIiLGVbZS5zY3JvbGxCZXlvbmRMYXN0Q29sdW1uPTk1XT0ic2Nyb2xsQmV5b25kTGFzdENvbHVtbiIsZVtlLnNjcm9sbEJleW9uZExhc3RMaW5lPTk2XT0ic2Nyb2xsQmV5b25kTGFzdExpbmUiLGVbZS5zY3JvbGxQcmVkb21pbmFudEF4aXM9OTddPSJzY3JvbGxQcmVkb21pbmFudEF4aXMiLGVbZS5zZWxlY3Rpb25DbGlwYm9hcmQ9OThdPSJzZWxlY3Rpb25DbGlwYm9hcmQiLGVbZS5zZWxlY3Rpb25IaWdobGlnaHQ9OTldPSJzZWxlY3Rpb25IaWdobGlnaHQiLGVbZS5zZWxlY3RPbkxpbmVOdW1iZXJzPTEwMF09InNlbGVjdE9uTGluZU51bWJlcnMiLGVbZS5zaG93Rm9sZGluZ0NvbnRyb2xzPTEwMV09InNob3dGb2xkaW5nQ29udHJvbHMiLGVbZS5zaG93VW51c2VkPTEwMl09InNob3dVbnVzZWQiLGVbZS5zbmlwcGV0U3VnZ2VzdGlvbnM9MTAzXT0ic25pcHBldFN1Z2dlc3Rpb25zIixlW2Uuc21hcnRTZWxlY3Q9MTA0XT0ic21hcnRTZWxlY3QiLGVbZS5zbW9vdGhTY3JvbGxpbmc9MTA1XT0ic21vb3RoU2Nyb2xsaW5nIixlW2Uuc3RpY2t5VGFiU3RvcHM9MTA2XT0ic3RpY2t5VGFiU3RvcHMiLGVbZS5zdG9wUmVuZGVyaW5nTGluZUFmdGVyPTEwN109InN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXIiLGVbZS5zdWdnZXN0PTEwOF09InN1Z2dlc3QiLGVbZS5zdWdnZXN0Rm9udFNpemU9MTA5XT0ic3VnZ2VzdEZvbnRTaXplIixlW2Uuc3VnZ2VzdExpbmVIZWlnaHQ9MTEwXT0ic3VnZ2VzdExpbmVIZWlnaHQiLGVbZS5zdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycz0xMTFdPSJzdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycyIsZVtlLnN1Z2dlc3RTZWxlY3Rpb249MTEyXT0ic3VnZ2VzdFNlbGVjdGlvbiIsZVtlLnRhYkNvbXBsZXRpb249MTEzXT0idGFiQ29tcGxldGlvbiIsZVtlLnRhYkluZGV4PTExNF09InRhYkluZGV4IixlW2UudW5pY29kZUhpZ2hsaWdodGluZz0xMTVdPSJ1bmljb2RlSGlnaGxpZ2h0aW5nIixlW2UudW51c3VhbExpbmVUZXJtaW5hdG9ycz0xMTZdPSJ1bnVzdWFsTGluZVRlcm1pbmF0b3JzIixlW2UudXNlU2hhZG93RE9NPTExN109InVzZVNoYWRvd0RPTSIsZVtlLnVzZVRhYlN0b3BzPTExOF09InVzZVRhYlN0b3BzIixlW2Uud29yZFNlcGFyYXRvcnM9MTE5XT0id29yZFNlcGFyYXRvcnMiLGVbZS53b3JkV3JhcD0xMjBdPSJ3b3JkV3JhcCIsZVtlLndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnM9MTIxXT0id29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzPTEyMl09IndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBDb2x1bW49MTIzXT0id29yZFdyYXBDb2x1bW4iLGVbZS53b3JkV3JhcE92ZXJyaWRlMT0xMjRdPSJ3b3JkV3JhcE92ZXJyaWRlMSIsZVtlLndvcmRXcmFwT3ZlcnJpZGUyPTEyNV09IndvcmRXcmFwT3ZlcnJpZGUyIixlW2Uud3JhcHBpbmdJbmRlbnQ9MTI2XT0id3JhcHBpbmdJbmRlbnQiLGVbZS53cmFwcGluZ1N0cmF0ZWd5PTEyN109IndyYXBwaW5nU3RyYXRlZ3kiLGVbZS5zaG93RGVwcmVjYXRlZD0xMjhdPSJzaG93RGVwcmVjYXRlZCIsZVtlLmlubGF5SGludHM9MTI5XT0iaW5sYXlIaW50cyIsZVtlLmVkaXRvckNsYXNzTmFtZT0xMzBdPSJlZGl0b3JDbGFzc05hbWUiLGVbZS5waXhlbFJhdGlvPTEzMV09InBpeGVsUmF0aW8iLGVbZS50YWJGb2N1c01vZGU9MTMyXT0idGFiRm9jdXNNb2RlIixlW2UubGF5b3V0SW5mbz0xMzNdPSJsYXlvdXRJbmZvIixlW2Uud3JhcHBpbmdJbmZvPTEzNF09IndyYXBwaW5nSW5mbyJ9KGNufHwoY249e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dERlZmluZWQ9MF09IlRleHREZWZpbmVkIixlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KGxufHwobG49e30pKSxmdW5jdGlvbihlKXtlW2UuTEY9MF09IkxGIixlW2UuQ1JMRj0xXT0iQ1JMRiJ9KHVufHwodW49e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLkluZGVudD0xXT0iSW5kZW50IixlW2UuSW5kZW50T3V0ZGVudD0yXT0iSW5kZW50T3V0ZGVudCIsZVtlLk91dGRlbnQ9M109Ik91dGRlbnQifShobnx8KGhuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KGZufHwoZm49e30pKSxmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0oZG58fChkbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KG1ufHwobW49e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIsZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5CYWNrc3BhY2U9MV09IkJhY2tzcGFjZSIsZVtlLlRhYj0yXT0iVGFiIixlW2UuRW50ZXI9M109IkVudGVyIixlW2UuU2hpZnQ9NF09IlNoaWZ0IixlW2UuQ3RybD01XT0iQ3RybCIsZVtlLkFsdD02XT0iQWx0IixlW2UuUGF1c2VCcmVhaz03XT0iUGF1c2VCcmVhayIsZVtlLkNhcHNMb2NrPThdPSJDYXBzTG9jayIsZVtlLkVzY2FwZT05XT0iRXNjYXBlIixlW2UuU3BhY2U9MTBdPSJTcGFjZSIsZVtlLlBhZ2VVcD0xMV09IlBhZ2VVcCIsZVtlLlBhZ2VEb3duPTEyXT0iUGFnZURvd24iLGVbZS5FbmQ9MTNdPSJFbmQiLGVbZS5Ib21lPTE0XT0iSG9tZSIsZVtlLkxlZnRBcnJvdz0xNV09IkxlZnRBcnJvdyIsZVtlLlVwQXJyb3c9MTZdPSJVcEFycm93IixlW2UuUmlnaHRBcnJvdz0xN109IlJpZ2h0QXJyb3ciLGVbZS5Eb3duQXJyb3c9MThdPSJEb3duQXJyb3ciLGVbZS5JbnNlcnQ9MTldPSJJbnNlcnQiLGVbZS5EZWxldGU9MjBdPSJEZWxldGUiLGVbZS5EaWdpdDA9MjFdPSJEaWdpdDAiLGVbZS5EaWdpdDE9MjJdPSJEaWdpdDEiLGVbZS5EaWdpdDI9MjNdPSJEaWdpdDIiLGVbZS5EaWdpdDM9MjRdPSJEaWdpdDMiLGVbZS5EaWdpdDQ9MjVdPSJEaWdpdDQiLGVbZS5EaWdpdDU9MjZdPSJEaWdpdDUiLGVbZS5EaWdpdDY9MjddPSJEaWdpdDYiLGVbZS5EaWdpdDc9MjhdPSJEaWdpdDciLGVbZS5EaWdpdDg9MjldPSJEaWdpdDgiLGVbZS5EaWdpdDk9MzBdPSJEaWdpdDkiLGVbZS5LZXlBPTMxXT0iS2V5QSIsZVtlLktleUI9MzJdPSJLZXlCIixlW2UuS2V5Qz0zM109IktleUMiLGVbZS5LZXlEPTM0XT0iS2V5RCIsZVtlLktleUU9MzVdPSJLZXlFIixlW2UuS2V5Rj0zNl09IktleUYiLGVbZS5LZXlHPTM3XT0iS2V5RyIsZVtlLktleUg9MzhdPSJLZXlIIixlW2UuS2V5ST0zOV09IktleUkiLGVbZS5LZXlKPTQwXT0iS2V5SiIsZVtlLktleUs9NDFdPSJLZXlLIixlW2UuS2V5TD00Ml09IktleUwiLGVbZS5LZXlNPTQzXT0iS2V5TSIsZVtlLktleU49NDRdPSJLZXlOIixlW2UuS2V5Tz00NV09IktleU8iLGVbZS5LZXlQPTQ2XT0iS2V5UCIsZVtlLktleVE9NDddPSJLZXlRIixlW2UuS2V5Uj00OF09IktleVIiLGVbZS5LZXlTPTQ5XT0iS2V5UyIsZVtlLktleVQ9NTBdPSJLZXlUIixlW2UuS2V5VT01MV09IktleVUiLGVbZS5LZXlWPTUyXT0iS2V5ViIsZVtlLktleVc9NTNdPSJLZXlXIixlW2UuS2V5WD01NF09IktleVgiLGVbZS5LZXlZPTU1XT0iS2V5WSIsZVtlLktleVo9NTZdPSJLZXlaIixlW2UuTWV0YT01N109Ik1ldGEiLGVbZS5Db250ZXh0TWVudT01OF09IkNvbnRleHRNZW51IixlW2UuRjE9NTldPSJGMSIsZVtlLkYyPTYwXT0iRjIiLGVbZS5GMz02MV09IkYzIixlW2UuRjQ9NjJdPSJGNCIsZVtlLkY1PTYzXT0iRjUiLGVbZS5GNj02NF09IkY2IixlW2UuRjc9NjVdPSJGNyIsZVtlLkY4PTY2XT0iRjgiLGVbZS5GOT02N109IkY5IixlW2UuRjEwPTY4XT0iRjEwIixlW2UuRjExPTY5XT0iRjExIixlW2UuRjEyPTcwXT0iRjEyIixlW2UuRjEzPTcxXT0iRjEzIixlW2UuRjE0PTcyXT0iRjE0IixlW2UuRjE1PTczXT0iRjE1IixlW2UuRjE2PTc0XT0iRjE2IixlW2UuRjE3PTc1XT0iRjE3IixlW2UuRjE4PTc2XT0iRjE4IixlW2UuRjE5PTc3XT0iRjE5IixlW2UuTnVtTG9jaz03OF09Ik51bUxvY2siLGVbZS5TY3JvbGxMb2NrPTc5XT0iU2Nyb2xsTG9jayIsZVtlLlNlbWljb2xvbj04MF09IlNlbWljb2xvbiIsZVtlLkVxdWFsPTgxXT0iRXF1YWwiLGVbZS5Db21tYT04Ml09IkNvbW1hIixlW2UuTWludXM9ODNdPSJNaW51cyIsZVtlLlBlcmlvZD04NF09IlBlcmlvZCIsZVtlLlNsYXNoPTg1XT0iU2xhc2giLGVbZS5CYWNrcXVvdGU9ODZdPSJCYWNrcXVvdGUiLGVbZS5CcmFja2V0TGVmdD04N109IkJyYWNrZXRMZWZ0IixlW2UuQmFja3NsYXNoPTg4XT0iQmFja3NsYXNoIixlW2UuQnJhY2tldFJpZ2h0PTg5XT0iQnJhY2tldFJpZ2h0IixlW2UuUXVvdGU9OTBdPSJRdW90ZSIsZVtlLk9FTV84PTkxXT0iT0VNXzgiLGVbZS5JbnRsQmFja3NsYXNoPTkyXT0iSW50bEJhY2tzbGFzaCIsZVtlLk51bXBhZDA9OTNdPSJOdW1wYWQwIixlW2UuTnVtcGFkMT05NF09Ik51bXBhZDEiLGVbZS5OdW1wYWQyPTk1XT0iTnVtcGFkMiIsZVtlLk51bXBhZDM9OTZdPSJOdW1wYWQzIixlW2UuTnVtcGFkND05N109Ik51bXBhZDQiLGVbZS5OdW1wYWQ1PTk4XT0iTnVtcGFkNSIsZVtlLk51bXBhZDY9OTldPSJOdW1wYWQ2IixlW2UuTnVtcGFkNz0xMDBdPSJOdW1wYWQ3IixlW2UuTnVtcGFkOD0xMDFdPSJOdW1wYWQ4IixlW2UuTnVtcGFkOT0xMDJdPSJOdW1wYWQ5IixlW2UuTnVtcGFkTXVsdGlwbHk9MTAzXT0iTnVtcGFkTXVsdGlwbHkiLGVbZS5OdW1wYWRBZGQ9MTA0XT0iTnVtcGFkQWRkIixlW2UuTlVNUEFEX1NFUEFSQVRPUj0xMDVdPSJOVU1QQURfU0VQQVJBVE9SIixlW2UuTnVtcGFkU3VidHJhY3Q9MTA2XT0iTnVtcGFkU3VidHJhY3QiLGVbZS5OdW1wYWREZWNpbWFsPTEwN109Ik51bXBhZERlY2ltYWwiLGVbZS5OdW1wYWREaXZpZGU9MTA4XT0iTnVtcGFkRGl2aWRlIixlW2UuS0VZX0lOX0NPTVBPU0lUSU9OPTEwOV09IktFWV9JTl9DT01QT1NJVElPTiIsZVtlLkFCTlRfQzE9MTEwXT0iQUJOVF9DMSIsZVtlLkFCTlRfQzI9MTExXT0iQUJOVF9DMiIsZVtlLkF1ZGlvVm9sdW1lTXV0ZT0xMTJdPSJBdWRpb1ZvbHVtZU11dGUiLGVbZS5BdWRpb1ZvbHVtZVVwPTExM109IkF1ZGlvVm9sdW1lVXAiLGVbZS5BdWRpb1ZvbHVtZURvd249MTE0XT0iQXVkaW9Wb2x1bWVEb3duIixlW2UuQnJvd3NlclNlYXJjaD0xMTVdPSJCcm93c2VyU2VhcmNoIixlW2UuQnJvd3NlckhvbWU9MTE2XT0iQnJvd3NlckhvbWUiLGVbZS5Ccm93c2VyQmFjaz0xMTddPSJCcm93c2VyQmFjayIsZVtlLkJyb3dzZXJGb3J3YXJkPTExOF09IkJyb3dzZXJGb3J3YXJkIixlW2UuTWVkaWFUcmFja05leHQ9MTE5XT0iTWVkaWFUcmFja05leHQiLGVbZS5NZWRpYVRyYWNrUHJldmlvdXM9MTIwXT0iTWVkaWFUcmFja1ByZXZpb3VzIixlW2UuTWVkaWFTdG9wPTEyMV09Ik1lZGlhU3RvcCIsZVtlLk1lZGlhUGxheVBhdXNlPTEyMl09Ik1lZGlhUGxheVBhdXNlIixlW2UuTGF1bmNoTWVkaWFQbGF5ZXI9MTIzXT0iTGF1bmNoTWVkaWFQbGF5ZXIiLGVbZS5MYXVuY2hNYWlsPTEyNF09IkxhdW5jaE1haWwiLGVbZS5MYXVuY2hBcHAyPTEyNV09IkxhdW5jaEFwcDIiLGVbZS5DbGVhcj0xMjZdPSJDbGVhciIsZVtlLk1BWF9WQUxVRT0xMjddPSJNQVhfVkFMVUUifShnbnx8KGduPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkhpbnQ9MV09IkhpbnQiLGVbZS5JbmZvPTJdPSJJbmZvIixlW2UuV2FybmluZz00XT0iV2FybmluZyIsZVtlLkVycm9yPThdPSJFcnJvciJ9KHBufHwocG49e30pKSxmdW5jdGlvbihlKXtlW2UuVW5uZWNlc3Nhcnk9MV09IlVubmVjZXNzYXJ5IixlW2UuRGVwcmVjYXRlZD0yXT0iRGVwcmVjYXRlZCJ9KGJufHwoYm49e30pKSxmdW5jdGlvbihlKXtlW2UuSW5saW5lPTFdPSJJbmxpbmUiLGVbZS5HdXR0ZXI9Ml09Ikd1dHRlciJ9KHZufHwodm49e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTj0wXT0iVU5LTk9XTiIsZVtlLlRFWFRBUkVBPTFdPSJURVhUQVJFQSIsZVtlLkdVVFRFUl9HTFlQSF9NQVJHSU49Ml09IkdVVFRFUl9HTFlQSF9NQVJHSU4iLGVbZS5HVVRURVJfTElORV9OVU1CRVJTPTNdPSJHVVRURVJfTElORV9OVU1CRVJTIixlW2UuR1VUVEVSX0xJTkVfREVDT1JBVElPTlM9NF09IkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TIixlW2UuR1VUVEVSX1ZJRVdfWk9ORT01XT0iR1VUVEVSX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfVEVYVD02XT0iQ09OVEVOVF9URVhUIixlW2UuQ09OVEVOVF9FTVBUWT03XT0iQ09OVEVOVF9FTVBUWSIsZVtlLkNPTlRFTlRfVklFV19aT05FPThdPSJDT05URU5UX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfV0lER0VUPTldPSJDT05URU5UX1dJREdFVCIsZVtlLk9WRVJWSUVXX1JVTEVSPTEwXT0iT1ZFUlZJRVdfUlVMRVIiLGVbZS5TQ1JPTExCQVI9MTFdPSJTQ1JPTExCQVIiLGVbZS5PVkVSTEFZX1dJREdFVD0xMl09Ik9WRVJMQVlfV0lER0VUIixlW2UuT1VUU0lERV9FRElUT1I9MTNdPSJPVVRTSURFX0VESVRPUiJ9KHlufHwoeW49e30pKSxmdW5jdGlvbihlKXtlW2UuVE9QX1JJR0hUX0NPUk5FUj0wXT0iVE9QX1JJR0hUX0NPUk5FUiIsZVtlLkJPVFRPTV9SSUdIVF9DT1JORVI9MV09IkJPVFRPTV9SSUdIVF9DT1JORVIiLGVbZS5UT1BfQ0VOVEVSPTJdPSJUT1BfQ0VOVEVSIn0oQ258fChDbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0od258fCh3bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTBdPSJMZWZ0IixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTm9uZT0yXT0iTm9uZSIsZVtlLkxlZnRPZkluamVjdGVkVGV4dD0zXT0iTGVmdE9mSW5qZWN0ZWRUZXh0IixlW2UuUmlnaHRPZkluamVjdGVkVGV4dD00XT0iUmlnaHRPZkluamVjdGVkVGV4dCJ9KF9ufHwoX249e30pKSxmdW5jdGlvbihlKXtlW2UuT2ZmPTBdPSJPZmYiLGVbZS5Pbj0xXT0iT24iLGVbZS5SZWxhdGl2ZT0yXT0iUmVsYXRpdmUiLGVbZS5JbnRlcnZhbD0zXT0iSW50ZXJ2YWwiLGVbZS5DdXN0b209NF09IkN1c3RvbSJ9KFNufHwoU249e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlRleHQ9MV09IlRleHQiLGVbZS5CbG9ja3M9Ml09IkJsb2NrcyJ9KEFufHwoQW49e30pKSxmdW5jdGlvbihlKXtlW2UuU21vb3RoPTBdPSJTbW9vdGgiLGVbZS5JbW1lZGlhdGU9MV09IkltbWVkaWF0ZSJ9KEVufHwoRW49e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0bz0xXT0iQXV0byIsZVtlLkhpZGRlbj0yXT0iSGlkZGVuIixlW2UuVmlzaWJsZT0zXT0iVmlzaWJsZSJ9KHhufHwoeG49e30pKSxmdW5jdGlvbihlKXtlW2UuTFRSPTBdPSJMVFIiLGVbZS5SVEw9MV09IlJUTCJ9KE5ufHwoTm49e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KGtufHwoa249e30pKSxmdW5jdGlvbihlKXtlW2UuRmlsZT0wXT0iRmlsZSIsZVtlLk1vZHVsZT0xXT0iTW9kdWxlIixlW2UuTmFtZXNwYWNlPTJdPSJOYW1lc3BhY2UiLGVbZS5QYWNrYWdlPTNdPSJQYWNrYWdlIixlW2UuQ2xhc3M9NF09IkNsYXNzIixlW2UuTWV0aG9kPTVdPSJNZXRob2QiLGVbZS5Qcm9wZXJ0eT02XT0iUHJvcGVydHkiLGVbZS5GaWVsZD03XT0iRmllbGQiLGVbZS5Db25zdHJ1Y3Rvcj04XT0iQ29uc3RydWN0b3IiLGVbZS5FbnVtPTldPSJFbnVtIixlW2UuSW50ZXJmYWNlPTEwXT0iSW50ZXJmYWNlIixlW2UuRnVuY3Rpb249MTFdPSJGdW5jdGlvbiIsZVtlLlZhcmlhYmxlPTEyXT0iVmFyaWFibGUiLGVbZS5Db25zdGFudD0xM109IkNvbnN0YW50IixlW2UuU3RyaW5nPTE0XT0iU3RyaW5nIixlW2UuTnVtYmVyPTE1XT0iTnVtYmVyIixlW2UuQm9vbGVhbj0xNl09IkJvb2xlYW4iLGVbZS5BcnJheT0xN109IkFycmF5IixlW2UuT2JqZWN0PTE4XT0iT2JqZWN0IixlW2UuS2V5PTE5XT0iS2V5IixlW2UuTnVsbD0yMF09Ik51bGwiLGVbZS5FbnVtTWVtYmVyPTIxXT0iRW51bU1lbWJlciIsZVtlLlN0cnVjdD0yMl09IlN0cnVjdCIsZVtlLkV2ZW50PTIzXT0iRXZlbnQiLGVbZS5PcGVyYXRvcj0yNF09Ik9wZXJhdG9yIixlW2UuVHlwZVBhcmFtZXRlcj0yNV09IlR5cGVQYXJhbWV0ZXIifShMbnx8KExuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRlcHJlY2F0ZWQ9MV09IkRlcHJlY2F0ZWQifShUbnx8KFRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkhpZGRlbj0wXT0iSGlkZGVuIixlW2UuQmxpbms9MV09IkJsaW5rIixlW2UuU21vb3RoPTJdPSJTbW9vdGgiLGVbZS5QaGFzZT0zXT0iUGhhc2UiLGVbZS5FeHBhbmQ9NF09IkV4cGFuZCIsZVtlLlNvbGlkPTVdPSJTb2xpZCJ9KE9ufHwoT249e30pKSxmdW5jdGlvbihlKXtlW2UuTGluZT0xXT0iTGluZSIsZVtlLkJsb2NrPTJdPSJCbG9jayIsZVtlLlVuZGVybGluZT0zXT0iVW5kZXJsaW5lIixlW2UuTGluZVRoaW49NF09IkxpbmVUaGluIixlW2UuQmxvY2tPdXRsaW5lPTVdPSJCbG9ja091dGxpbmUiLGVbZS5VbmRlcmxpbmVUaGluPTZdPSJVbmRlcmxpbmVUaGluIn0oSW58fChJbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTBdPSJBbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTFdPSJOZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlPTJdPSJHcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyPTNdPSJHcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXIifShNbnx8KE1uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5TYW1lPTFdPSJTYW1lIixlW2UuSW5kZW50PTJdPSJJbmRlbnQiLGVbZS5EZWVwSW5kZW50PTNdPSJEZWVwSW5kZW50In0oUG58fChQbj17fSkpO2NsYXNzIFVue3N0YXRpYyBjaG9yZChlLHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybihlfCg2NTUzNSZ0KTw8MTY+Pj4wKT4+PjB9KGUsdCl9fWZ1bmN0aW9uIEJuKGUsdCxuLHIsaSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoMD09PXIpcmV0dXJuITA7Y29uc3Qgbz10LmNoYXJDb2RlQXQoci0xKTtpZigwIT09ZS5nZXQobykpcmV0dXJuITA7aWYoMTM9PT1vfHwxMD09PW8pcmV0dXJuITA7aWYoaT4wKXtjb25zdCBuPXQuY2hhckNvZGVBdChyKTtpZigwIT09ZS5nZXQobikpcmV0dXJuITB9cmV0dXJuITF9KGUsdCwwLHIsaSkmJmZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYocitpPT09bilyZXR1cm4hMDtjb25zdCBvPXQuY2hhckNvZGVBdChyK2kpO2lmKDAhPT1lLmdldChvKSlyZXR1cm4hMDtpZigxMz09PW98fDEwPT09bylyZXR1cm4hMDtpZihpPjApe2NvbnN0IG49dC5jaGFyQ29kZUF0KHIraS0xKTtpZigwIT09ZS5nZXQobikpcmV0dXJuITB9cmV0dXJuITF9KGUsdCxuLHIsaSl9VW4uQ3RybENtZD0yMDQ4LFVuLlNoaWZ0PTEwMjQsVW4uQWx0PTUxMixVbi5XaW5DdHJsPTI1NixmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KFJufHwoUm49e30pKSxmdW5jdGlvbihlKXtlW2UuSW5saW5lPTFdPSJJbmxpbmUiLGVbZS5HdXR0ZXI9Ml09Ikd1dHRlciJ9KFZufHwoVm49e30pKSxmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0oRm58fChGbj17fSkpO2NsYXNzIHFue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fd29yZFNlcGFyYXRvcnM9ZSx0aGlzLl9zZWFyY2hSZWdleD10LHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9cmVzZXQoZSl7dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4PWUsdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1uZXh0KGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG47ZG97aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCt0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9PT10KXJldHVybiBudWxsO2lmKG49dGhpcy5fc2VhcmNoUmVnZXguZXhlYyhlKSwhbilyZXR1cm4gbnVsbDtjb25zdCByPW4uaW5kZXgsaT1uWzBdLmxlbmd0aDtpZihyPT09dGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCYmaT09PXRoaXMuX3ByZXZNYXRjaExlbmd0aCl7aWYoMD09PWkpe1ooZSx0LHRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCk+NjU1MzU/dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0yOnRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9MTtjb250aW51ZX1yZXR1cm4gbnVsbH1pZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PXIsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPWksIXRoaXMuX3dvcmRTZXBhcmF0b3JzfHxCbih0aGlzLl93b3JkU2VwYXJhdG9ycyxlLHQscixpKSlyZXR1cm4gbn13aGlsZShuKTtyZXR1cm4gbnVsbH19Y2xhc3MgJG57c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhlLHQsbil7Y29uc3Qgcj1uP24uc3RhcnRMaW5lTnVtYmVyOjEsaT1uP24uZW5kTGluZU51bWJlcjplLmdldExpbmVDb3VudCgpLG89bmV3IFduKHQpLGE9by5nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCk7bGV0IHM7dmFyIGMsbDtzPSJhbGxOb25CYXNpY0FzY2lpIj09PWE/bmV3IFJlZ0V4cCgiW15cXHRcXG5cXHJcXHgyMC1cXHg3RV0iLCJnIik6bmV3IFJlZ0V4cCgiIisoYz1BcnJheS5mcm9tKGEpLGBbJHtsPWMubWFwKChlPT5TdHJpbmcuZnJvbUNvZGVQb2ludChlKSkpLmpvaW4oIiIpLGwucmVwbGFjZSgvW1xcXHtcfVwqXCtcP1x8XF5cJFwuXFtcXVwoXCldL2csIlxcJCYiKX1dYCksImciKTtjb25zdCB1PW5ldyBxbihudWxsLHMpLGg9W107bGV0IGYsZD0hMSxtPTAsZz0wLHA9MDtlOmZvcihsZXQgdD1yLG49aTt0PD1uO3QrKyl7Y29uc3Qgbj1lLmdldExpbmVDb250ZW50KHQpLHI9bi5sZW5ndGg7dS5yZXNldCgwKTtkb3tpZihmPXUubmV4dChuKSxmKXtsZXQgZT1mLmluZGV4LGk9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihlPjApe1gobi5jaGFyQ29kZUF0KGUtMSkpJiZlLS19aWYoaSsxPHIpe1gobi5jaGFyQ29kZUF0KGktMSkpJiZpKyt9Y29uc3QgYT1uLnN1YnN0cmluZyhlLGkpLHM9eXQoZSsxLGJ0LG4sMCksYz1vLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoYSxzP3Mud29yZDpudWxsKTtpZigwIT09Yyl7Mz09PWM/bSsrOjI9PT1jP2crKzoxPT09Yz9wKys6eigpO2NvbnN0IG49MWUzO2lmKGgubGVuZ3RoPj1uKXtkPSEwO2JyZWFrIGV9aC5wdXNoKG5ldyB0dCh0LGUrMSx0LGkrMSkpfX19d2hpbGUoZil9cmV0dXJue3JhbmdlczpoLGhhc01vcmU6ZCxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDptLGludmlzaWJsZUNoYXJhY3RlckNvdW50Omcsbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50OnB9fXN0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodFJlYXNvbihlLHQpe2NvbnN0IG49bmV3IFduKHQpO3N3aXRjaChuLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSxudWxsKSl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMjpyZXR1cm57a2luZDoxfTtjYXNlIDM6e2NvbnN0IHI9ZS5jb2RlUG9pbnRBdCgwKSxpPW4uYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRQcmltYXJ5Q29uZnVzYWJsZShyKSxvPVEuZ2V0TG9jYWxlcygpLmZpbHRlcigoZT0+IVEuZ2V0SW5zdGFuY2UobmV3IFNldChbLi4udC5hbGxvd2VkTG9jYWxlcyxlXSkpLmlzQW1iaWd1b3VzKHIpKSk7cmV0dXJue2tpbmQ6MCxjb25mdXNhYmxlV2l0aDpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSxub3RBbWJpZ3VvdXNJbkxvY2FsZXM6b319Y2FzZSAxOnJldHVybntraW5kOjJ9fX19Y2xhc3MgV257Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWUsdGhpcy5hbGxvd2VkQ29kZVBvaW50cz1uZXcgU2V0KGUuYWxsb3dlZENvZGVQb2ludHMpLHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycz1RLmdldEluc3RhbmNlKG5ldyBTZXQoZS5hbGxvd2VkTG9jYWxlcykpfWdldENhbmRpZGF0ZUNvZGVQb2ludHMoKXtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4iYWxsTm9uQmFzaWNBc2NpaSI7Y29uc3QgZT1uZXcgU2V0O2lmKHRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzKWZvcihjb25zdCB0IG9mIGVlLmNvZGVQb2ludHMpSG4oU3RyaW5nLmZyb21Db2RlUG9pbnQodCkpfHxlLmFkZCh0KTtpZih0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiB0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKSllLmFkZCh0KTtmb3IoY29uc3QgdCBvZiB0aGlzLmFsbG93ZWRDb2RlUG9pbnRzKWUuZGVsZXRlKHQpO3JldHVybiBlfXNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSx0KXtjb25zdCBuPWUuY29kZVBvaW50QXQoMCk7aWYodGhpcy5hbGxvd2VkQ29kZVBvaW50cy5oYXMobikpcmV0dXJuIDA7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuIDE7bGV0IHI9ITEsaT0hMTtpZih0KWZvcihjb25zdCBlIG9mIHQpe2NvbnN0IHQ9ZS5jb2RlUG9pbnRBdCgwKSxuPShvPWUsWS50ZXN0KG8pKTtyPXJ8fG4sbnx8dGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKHQpfHxlZS5pc0ludmlzaWJsZUNoYXJhY3Rlcih0KXx8KGk9ITApfXZhciBvO3JldHVybiFyJiZpPzA6dGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMmJiFIbihlKSYmZWUuaXNJbnZpc2libGVDaGFyYWN0ZXIobik/Mjp0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycyYmdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKG4pPzM6MH19ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIiAiPT09ZXx8IlxuIj09PWV8fCJcdCI9PT1lfXZhciB6bj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBhKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gcyhlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihhLHMpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX07Y2xhc3MgR24gZXh0ZW5kcyBwdHtnZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgZW9sKCl7cmV0dXJuIHRoaXMuX2VvbH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldFRleHQoKX1nZXRMaW5lc0NvbnRlbnQoKXtyZXR1cm4gdGhpcy5fbGluZXMuc2xpY2UoMCl9Z2V0TGluZUNvdW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLmxlbmd0aH1nZXRMaW5lQ29udGVudChlKXtyZXR1cm4gdGhpcy5fbGluZXNbZS0xXX1nZXRXb3JkQXRQb3NpdGlvbihlLHQpe2NvbnN0IG49eXQoZS5jb2x1bW4sZnVuY3Rpb24oZSl7bGV0IHQ9YnQ7aWYoZSYmZSBpbnN0YW5jZW9mIFJlZ0V4cClpZihlLmdsb2JhbCl0PWU7ZWxzZXtsZXQgbj0iZyI7ZS5pZ25vcmVDYXNlJiYobis9ImkiKSxlLm11bHRpbGluZSYmKG4rPSJtIiksZS51bmljb2RlJiYobis9InUiKSx0PW5ldyBSZWdFeHAoZS5zb3VyY2Usbil9cmV0dXJuIHQubGFzdEluZGV4PTAsdH0odCksdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLDApO3JldHVybiBuP25ldyB0dChlLmxpbmVOdW1iZXIsbi5zdGFydENvbHVtbixlLmxpbmVOdW1iZXIsbi5lbmRDb2x1bW4pOm51bGx9d29yZHMoZSl7Y29uc3QgdD10aGlzLl9saW5lcyxuPXRoaXMuX3dvcmRlbml6ZS5iaW5kKHRoaXMpO2xldCByPTAsaT0iIixvPTAsYT1bXTtyZXR1cm57KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKDs7KWlmKG88YS5sZW5ndGgpe2NvbnN0IGU9aS5zdWJzdHJpbmcoYVtvXS5zdGFydCxhW29dLmVuZCk7bys9MSx5aWVsZCBlfWVsc2V7aWYoIShyPHQubGVuZ3RoKSlicmVhaztpPXRbcl0sYT1uKGksZSksbz0wLHIrPTF9fX19Z2V0TGluZVdvcmRzKGUsdCl7Y29uc3Qgbj10aGlzLl9saW5lc1tlLTFdLHI9dGhpcy5fd29yZGVuaXplKG4sdCksaT1bXTtmb3IoY29uc3QgZSBvZiByKWkucHVzaCh7d29yZDpuLnN1YnN0cmluZyhlLnN0YXJ0LGUuZW5kKSxzdGFydENvbHVtbjplLnN0YXJ0KzEsZW5kQ29sdW1uOmUuZW5kKzF9KTtyZXR1cm4gaX1fd29yZGVuaXplKGUsdCl7Y29uc3Qgbj1bXTtsZXQgcjtmb3IodC5sYXN0SW5kZXg9MDsocj10LmV4ZWMoZSkpJiYwIT09clswXS5sZW5ndGg7KW4ucHVzaCh7c3RhcnQ6ci5pbmRleCxlbmQ6ci5pbmRleCtyWzBdLmxlbmd0aH0pO3JldHVybiBufWdldFZhbHVlSW5SYW5nZShlKXtpZigoZT10aGlzLl92YWxpZGF0ZVJhbmdlKGUpKS5zdGFydExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXIpcmV0dXJuIHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLnN0YXJ0Q29sdW1uLTEsZS5lbmRDb2x1bW4tMSk7Y29uc3QgdD10aGlzLl9lb2wsbj1lLnN0YXJ0TGluZU51bWJlci0xLHI9ZS5lbmRMaW5lTnVtYmVyLTEsaT1bXTtpLnB1c2godGhpcy5fbGluZXNbbl0uc3Vic3RyaW5nKGUuc3RhcnRDb2x1bW4tMSkpO2ZvcihsZXQgZT1uKzE7ZTxyO2UrKylpLnB1c2godGhpcy5fbGluZXNbZV0pO3JldHVybiBpLnB1c2godGhpcy5fbGluZXNbcl0uc3Vic3RyaW5nKDAsZS5lbmRDb2x1bW4tMSkpLGkuam9pbih0KX1vZmZzZXRBdChlKXtyZXR1cm4gZT10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKSx0aGlzLl9saW5lU3RhcnRzLmdldFByZWZpeFN1bShlLmxpbmVOdW1iZXItMikrKGUuY29sdW1uLTEpfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLmZsb29yKGUpLGU9TWF0aC5tYXgoMCxlKSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCk7Y29uc3QgdD10aGlzLl9saW5lU3RhcnRzLmdldEluZGV4T2YoZSksbj10aGlzLl9saW5lc1t0LmluZGV4XS5sZW5ndGg7cmV0dXJue2xpbmVOdW1iZXI6MSt0LmluZGV4LGNvbHVtbjoxK01hdGgubWluKHQucmVtYWluZGVyLG4pfX1fdmFsaWRhdGVSYW5nZShlKXtjb25zdCB0PXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5zdGFydExpbmVOdW1iZXIsY29sdW1uOmUuc3RhcnRDb2x1bW59KSxuPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5lbmRMaW5lTnVtYmVyLGNvbHVtbjplLmVuZENvbHVtbn0pO3JldHVybiB0LmxpbmVOdW1iZXIhPT1lLnN0YXJ0TGluZU51bWJlcnx8dC5jb2x1bW4hPT1lLnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXIhPT1lLmVuZExpbmVOdW1iZXJ8fG4uY29sdW1uIT09ZS5lbmRDb2x1bW4/e3N0YXJ0TGluZU51bWJlcjp0LmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5jb2x1bW4sZW5kTGluZU51bWJlcjpuLmxpbmVOdW1iZXIsZW5kQ29sdW1uOm4uY29sdW1ufTplfV92YWxpZGF0ZVBvc2l0aW9uKGUpe2lmKCFldC5pc0lQb3NpdGlvbihlKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb3NpdGlvbiIpO2xldHtsaW5lTnVtYmVyOnQsY29sdW1uOm59PWUscj0hMTtpZih0PDEpdD0xLG49MSxyPSEwO2Vsc2UgaWYodD50aGlzLl9saW5lcy5sZW5ndGgpdD10aGlzLl9saW5lcy5sZW5ndGgsbj10aGlzLl9saW5lc1t0LTFdLmxlbmd0aCsxLHI9ITA7ZWxzZXtjb25zdCBlPXRoaXMuX2xpbmVzW3QtMV0ubGVuZ3RoKzE7bjwxPyhuPTEscj0hMCk6bj5lJiYobj1lLHI9ITApfXJldHVybiByP3tsaW5lTnVtYmVyOnQsY29sdW1uOm59OmV9fWNsYXNzIEpue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faG9zdD1lLHRoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PXQsdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKX1fZ2V0TW9kZWwoZSl7cmV0dXJuIHRoaXMuX21vZGVsc1tlXX1fZ2V0TW9kZWxzKCl7Y29uc3QgZT1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKCh0PT5lLnB1c2godGhpcy5fbW9kZWxzW3RdKSkpLGV9YWNjZXB0TmV3TW9kZWwoZSl7dGhpcy5fbW9kZWxzW2UudXJsXT1uZXcgR24ocWUucGFyc2UoZS51cmwpLGUubGluZXMsZS5FT0wsZS52ZXJzaW9uSWQpfWFjY2VwdE1vZGVsQ2hhbmdlZChlLHQpe2lmKCF0aGlzLl9tb2RlbHNbZV0pcmV0dXJuO3RoaXMuX21vZGVsc1tlXS5vbkV2ZW50cyh0KX1hY2NlcHRSZW1vdmVkTW9kZWwoZSl7dGhpcy5fbW9kZWxzW2VdJiZkZWxldGUgdGhpcy5fbW9kZWxzW2VdfWNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhlLHQsbil7cmV0dXJuIHpuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbChlKTtyZXR1cm4gcj8kbi5jb21wdXRlVW5pY29kZUhpZ2hsaWdodHMocix0LG4pOntyYW5nZXM6W10saGFzTW9yZTohMSxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDowLGludmlzaWJsZUNoYXJhY3RlckNvdW50OjAsbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50OjB9fSkpfWNvbXB1dGVEaWZmKGUsdCxuLHIpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwoZSksbz10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gaSYmbz9Kbi5jb21wdXRlRGlmZihpLG8sbixyKTpudWxsfSkpfXN0YXRpYyBjb21wdXRlRGlmZihlLHQsbixyKXtjb25zdCBpPWUuZ2V0TGluZXNDb250ZW50KCksbz10LmdldExpbmVzQ29udGVudCgpLGE9bmV3IHN0KGksbyx7c2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzOiEwLHNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM6ITAsc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U6bixzaG91bGRNYWtlUHJldHR5RGlmZjohMCxtYXhDb21wdXRhdGlvblRpbWU6cn0pLmNvbXB1dGVEaWZmKCkscz0hKGEuY2hhbmdlcy5sZW5ndGg+MCkmJnRoaXMuX21vZGVsc0FyZUlkZW50aWNhbChlLHQpO3JldHVybntxdWl0RWFybHk6YS5xdWl0RWFybHksaWRlbnRpY2FsOnMsY2hhbmdlczphLmNoYW5nZXN9fXN0YXRpYyBfbW9kZWxzQXJlSWRlbnRpY2FsKGUsdCl7Y29uc3Qgbj1lLmdldExpbmVDb3VudCgpO2lmKG4hPT10LmdldExpbmVDb3VudCgpKXJldHVybiExO2ZvcihsZXQgcj0xO3I8PW47cisrKXtpZihlLmdldExpbmVDb250ZW50KHIpIT09dC5nZXRMaW5lQ29udGVudChyKSlyZXR1cm4hMX1yZXR1cm4hMH1jb21wdXRlTW9yZU1pbmltYWxFZGl0cyhlLHQpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49dGhpcy5fZ2V0TW9kZWwoZSk7aWYoIW4pcmV0dXJuIHQ7Y29uc3Qgcj1bXTtsZXQgaTt0PXQuc2xpY2UoMCkuc29ydCgoKGUsdCk9PntpZihlLnJhbmdlJiZ0LnJhbmdlKXJldHVybiB0dC5jb21wYXJlUmFuZ2VzVXNpbmdTdGFydHMoZS5yYW5nZSx0LnJhbmdlKTtyZXR1cm4oZS5yYW5nZT8wOjEpLSh0LnJhbmdlPzA6MSl9KSk7Zm9yKGxldHtyYW5nZTplLHRleHQ6byxlb2w6YX1vZiB0KXtpZigibnVtYmVyIj09dHlwZW9mIGEmJihpPWEpLHR0LmlzRW1wdHkoZSkmJiFvKWNvbnRpbnVlO2NvbnN0IHQ9bi5nZXRWYWx1ZUluUmFuZ2UoZSk7aWYobz1vLnJlcGxhY2UoL1xyXG58XG58XHIvZyxuLmVvbCksdD09PW8pY29udGludWU7aWYoTWF0aC5tYXgoby5sZW5ndGgsdC5sZW5ndGgpPkpuLl9kaWZmTGltaXQpe3IucHVzaCh7cmFuZ2U6ZSx0ZXh0Om99KTtjb250aW51ZX1jb25zdCBzPW1lKHQsbywhMSksYz1uLm9mZnNldEF0KHR0LmxpZnQoZSkuZ2V0U3RhcnRQb3NpdGlvbigpKTtmb3IoY29uc3QgZSBvZiBzKXtjb25zdCB0PW4ucG9zaXRpb25BdChjK2Uub3JpZ2luYWxTdGFydCksaT1uLnBvc2l0aW9uQXQoYytlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aCksYT17dGV4dDpvLnN1YnN0cihlLm1vZGlmaWVkU3RhcnQsZS5tb2RpZmllZExlbmd0aCkscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjp0LmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5jb2x1bW4sZW5kTGluZU51bWJlcjppLmxpbmVOdW1iZXIsZW5kQ29sdW1uOmkuY29sdW1ufX07bi5nZXRWYWx1ZUluUmFuZ2UoYS5yYW5nZSkhPT1hLnRleHQmJnIucHVzaChhKX19cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpJiZyLnB1c2goe2VvbDppLHRleHQ6IiIscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjowLHN0YXJ0Q29sdW1uOjAsZW5kTGluZU51bWJlcjowLGVuZENvbHVtbjowfX0pLHJ9KSl9Y29tcHV0ZUxpbmtzKGUpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9dGhpcy5fZ2V0TW9kZWwoZSk7cmV0dXJuIHQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldExpbmVDb3VudCYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0TGluZUNvbnRlbnQ/eHQuY29tcHV0ZUxpbmtzKGUpOltdfSh0KTpudWxsfSkpfXRleHR1YWxTdWdnZXN0KGUsdCxuLHIpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGk9bmV3IFYoITApLG89bmV3IFJlZ0V4cChuLHIpLGE9bmV3IFNldDtlOmZvcihjb25zdCBuIG9mIGUpe2NvbnN0IGU9dGhpcy5fZ2V0TW9kZWwobik7aWYoZSlmb3IoY29uc3QgbiBvZiBlLndvcmRzKG8pKWlmKG4hPT10JiZpc05hTihOdW1iZXIobikpJiYoYS5hZGQobiksYS5zaXplPkpuLl9zdWdnZXN0aW9uc0xpbWl0KSlicmVhayBlfXJldHVybnt3b3JkczpBcnJheS5mcm9tKGEpLGR1cmF0aW9uOmkuZWxhcHNlZCgpfX0pKX1jb21wdXRlV29yZFJhbmdlcyhlLHQsbixyKXtyZXR1cm4gem4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPXRoaXMuX2dldE1vZGVsKGUpO2lmKCFpKXJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO2NvbnN0IG89bmV3IFJlZ0V4cChuLHIpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IGU9dC5zdGFydExpbmVOdW1iZXI7ZTx0LmVuZExpbmVOdW1iZXI7ZSsrKXtjb25zdCB0PWkuZ2V0TGluZVdvcmRzKGUsbyk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoIWlzTmFOKE51bWJlcihuLndvcmQpKSljb250aW51ZTtsZXQgdD1hW24ud29yZF07dHx8KHQ9W10sYVtuLndvcmRdPXQpLHQucHVzaCh7c3RhcnRMaW5lTnVtYmVyOmUsc3RhcnRDb2x1bW46bi5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOmUsZW5kQ29sdW1uOm4uZW5kQ29sdW1ufSl9fXJldHVybiBhfSkpfW5hdmlnYXRlVmFsdWVTZXQoZSx0LG4scixpKXtyZXR1cm4gem4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBvPXRoaXMuX2dldE1vZGVsKGUpO2lmKCFvKXJldHVybiBudWxsO2NvbnN0IGE9bmV3IFJlZ0V4cChyLGkpO3Quc3RhcnRDb2x1bW49PT10LmVuZENvbHVtbiYmKHQ9e3N0YXJ0TGluZU51bWJlcjp0LnN0YXJ0TGluZU51bWJlcixzdGFydENvbHVtbjp0LnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6dC5lbmRMaW5lTnVtYmVyLGVuZENvbHVtbjp0LmVuZENvbHVtbisxfSk7Y29uc3Qgcz1vLmdldFZhbHVlSW5SYW5nZSh0KSxjPW8uZ2V0V29yZEF0UG9zaXRpb24oe2xpbmVOdW1iZXI6dC5zdGFydExpbmVOdW1iZXIsY29sdW1uOnQuc3RhcnRDb2x1bW59LGEpO2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9by5nZXRWYWx1ZUluUmFuZ2UoYyk7cmV0dXJuIE50LklOU1RBTkNFLm5hdmlnYXRlVmFsdWVTZXQodCxzLGMsbCxuKX0pKX1sb2FkRm9yZWlnbk1vZHVsZShlLHQsbil7Y29uc3Qgcj1mdW5jdGlvbihlLHQpe2NvbnN0IG49ZT0+ZnVuY3Rpb24oKXtjb25zdCBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gdChlLG4pfSxyPXt9O2Zvcihjb25zdCB0IG9mIGUpclt0XT1uKHQpO3JldHVybiByfShuLCgoZSx0KT0+dGhpcy5faG9zdC5maHIoZSx0KSkpLGk9e2hvc3Q6cixnZXRNaXJyb3JNb2RlbHM6KCk9PnRoaXMuX2dldE1vZGVscygpfTtyZXR1cm4gdGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnk/KHRoaXMuX2ZvcmVpZ25Nb2R1bGU9dGhpcy5fZm9yZWlnbk1vZHVsZUZhY3RvcnkoaSx0KSxQcm9taXNlLnJlc29sdmUoSCh0aGlzLl9mb3JlaWduTW9kdWxlKSkpOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiVW5leHBlY3RlZCB1c2FnZSIpKX1mbXIoZSx0KXtpZighdGhpcy5fZm9yZWlnbk1vZHVsZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZvcmVpZ25Nb2R1bGVbZV0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrZSkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZvcmVpZ25Nb2R1bGVbZV0uYXBwbHkodGhpcy5fZm9yZWlnbk1vZHVsZSx0KSl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX19Sm4uX2RpZmZMaW1pdD0xZTUsSm4uX3N1Z2dlc3Rpb25zTGltaXQ9MWU0LCJmdW5jdGlvbiI9PXR5cGVvZiBpbXBvcnRTY3JpcHRzJiYoTi5tb25hY289e2VkaXRvcjp2b2lkIDAsbGFuZ3VhZ2VzOnZvaWQgMCxDYW5jZWxsYXRpb25Ub2tlblNvdXJjZTpPdCxFbWl0dGVyOkIsS2V5Q29kZTpnbixLZXlNb2Q6VW4sUG9zaXRpb246ZXQsUmFuZ2U6dHQsU2VsZWN0aW9uOlV0LFNlbGVjdGlvbkRpcmVjdGlvbjpObixNYXJrZXJTZXZlcml0eTpwbixNYXJrZXJUYWc6Ym4sVXJpOnFlLFRva2VuOmpufSk7bGV0IFhuPSExO2Z1bmN0aW9uIFpuKGUpe2lmKFhuKXJldHVybjtYbj0hMDtjb25zdCB0PW5ldyBsZSgoZT0+e3NlbGYucG9zdE1lc3NhZ2UoZSl9KSwodD0+bmV3IEpuKHQsZSkpKTtzZWxmLm9ubWVzc2FnZT1lPT57dC5vbm1lc3NhZ2UoZS5kYXRhKX19Ci8qIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAqIFZlcnNpb246IDAuMzQuMChmMWFkOTUxZjI2YWZiM2JhNjQzMjdiNzBjMzA1NmNhYmMzODUxNDkyKQogICAgICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L21vbmFjby1lZGl0b3IvYmxvYi9tYWluL0xJQ0VOU0UudHh0CiAgICAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZnVuY3Rpb24gWW4oZSx0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIG49ZS5sZW5ndGgscj0wLGk9IiIsbz0wLGE9MTYscz0wLGM9MCxsPTAsdT0wLGg9MDtmdW5jdGlvbiBmKHQsbil7Zm9yKHZhciBpPTAsbz0wO2k8dHx8IW47KXt2YXIgYT1lLmNoYXJDb2RlQXQocik7aWYoYT49NDgmJmE8PTU3KW89MTYqbythLTQ4O2Vsc2UgaWYoYT49NjUmJmE8PTcwKW89MTYqbythLTY1KzEwO2Vsc2V7aWYoIShhPj05NyYmYTw9MTAyKSlicmVhaztvPTE2Km8rYS05NysxMH1yKyssaSsrfXJldHVybiBpPHQmJihvPS0xKSxvfWZ1bmN0aW9uIGQoKXtpZihpPSIiLGg9MCxvPXIsYz1zLHU9bCxyPj1uKXJldHVybiBvPW4sYT0xNzt2YXIgdD1lLmNoYXJDb2RlQXQocik7aWYoUW4odCkpe2Rve3IrKyxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLHQ9ZS5jaGFyQ29kZUF0KHIpfXdoaWxlKFFuKHQpKTtyZXR1cm4gYT0xNX1pZihlcih0KSlyZXR1cm4gcisrLGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCksMTM9PT10JiYxMD09PWUuY2hhckNvZGVBdChyKSYmKHIrKyxpKz0iXG4iKSxzKyssbD1yLGE9MTQ7c3dpdGNoKHQpe2Nhc2UgMTIzOnJldHVybiByKyssYT0xO2Nhc2UgMTI1OnJldHVybiByKyssYT0yO2Nhc2UgOTE6cmV0dXJuIHIrKyxhPTM7Y2FzZSA5MzpyZXR1cm4gcisrLGE9NDtjYXNlIDU4OnJldHVybiByKyssYT02O2Nhc2UgNDQ6cmV0dXJuIHIrKyxhPTU7Y2FzZSAzNDpyZXR1cm4gcisrLGk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9IiIsaT1yOzspe2lmKHI+PW4pe3QrPWUuc3Vic3RyaW5nKGksciksaD0yO2JyZWFrfXZhciBvPWUuY2hhckNvZGVBdChyKTtpZigzND09PW8pe3QrPWUuc3Vic3RyaW5nKGkscikscisrO2JyZWFrfWlmKDkyIT09byl7aWYobz49MCYmbzw9MzEpe2lmKGVyKG8pKXt0Kz1lLnN1YnN0cmluZyhpLHIpLGg9MjticmVha31oPTZ9cisrfWVsc2V7aWYodCs9ZS5zdWJzdHJpbmcoaSxyKSwrK3I+PW4pe2g9MjticmVha31zd2l0Y2goZS5jaGFyQ29kZUF0KHIrKykpe2Nhc2UgMzQ6dCs9JyInO2JyZWFrO2Nhc2UgOTI6dCs9IlxcIjticmVhaztjYXNlIDQ3OnQrPSIvIjticmVhaztjYXNlIDk4OnQrPSJcYiI7YnJlYWs7Y2FzZSAxMDI6dCs9IlxmIjticmVhaztjYXNlIDExMDp0Kz0iXG4iO2JyZWFrO2Nhc2UgMTE0OnQrPSJcciI7YnJlYWs7Y2FzZSAxMTY6dCs9Ilx0IjticmVhaztjYXNlIDExNzp2YXIgYT1mKDQsITApO2E+PTA/dCs9U3RyaW5nLmZyb21DaGFyQ29kZShhKTpoPTQ7YnJlYWs7ZGVmYXVsdDpoPTV9aT1yfX1yZXR1cm4gdH0oKSxhPTEwO2Nhc2UgNDc6dmFyIGQ9ci0xO2lmKDQ3PT09ZS5jaGFyQ29kZUF0KHIrMSkpe2ZvcihyKz0yO3I8biYmIWVyKGUuY2hhckNvZGVBdChyKSk7KXIrKztyZXR1cm4gaT1lLnN1YnN0cmluZyhkLHIpLGE9MTJ9aWYoNDI9PT1lLmNoYXJDb2RlQXQocisxKSl7cis9Mjtmb3IodmFyIGc9bi0xLHA9ITE7cjxnOyl7dmFyIGI9ZS5jaGFyQ29kZUF0KHIpO2lmKDQyPT09YiYmNDc9PT1lLmNoYXJDb2RlQXQocisxKSl7cis9MixwPSEwO2JyZWFrfXIrKyxlcihiKSYmKDEzPT09YiYmMTA9PT1lLmNoYXJDb2RlQXQocikmJnIrKyxzKyssbD1yKX1yZXR1cm4gcHx8KHIrKyxoPTEpLGk9ZS5zdWJzdHJpbmcoZCxyKSxhPTEzfXJldHVybiBpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLHIrKyxhPTE2O2Nhc2UgNDU6aWYoaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSwrK3I9PT1ufHwhdHIoZS5jaGFyQ29kZUF0KHIpKSlyZXR1cm4gYT0xNjtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OnJldHVybiBpKz1mdW5jdGlvbigpe3ZhciB0PXI7aWYoNDg9PT1lLmNoYXJDb2RlQXQocikpcisrO2Vsc2UgZm9yKHIrKztyPGUubGVuZ3RoJiZ0cihlLmNoYXJDb2RlQXQocikpOylyKys7aWYocjxlLmxlbmd0aCYmNDY9PT1lLmNoYXJDb2RlQXQocikpe2lmKCEoKytyPGUubGVuZ3RoJiZ0cihlLmNoYXJDb2RlQXQocikpKSlyZXR1cm4gaD0zLGUuc3Vic3RyaW5nKHQscik7Zm9yKHIrKztyPGUubGVuZ3RoJiZ0cihlLmNoYXJDb2RlQXQocikpOylyKyt9dmFyIG49cjtpZihyPGUubGVuZ3RoJiYoNjk9PT1lLmNoYXJDb2RlQXQocil8fDEwMT09PWUuY2hhckNvZGVBdChyKSkpaWYoKCsrcjxlLmxlbmd0aCYmNDM9PT1lLmNoYXJDb2RlQXQocil8fDQ1PT09ZS5jaGFyQ29kZUF0KHIpKSYmcisrLHI8ZS5sZW5ndGgmJnRyKGUuY2hhckNvZGVBdChyKSkpe2ZvcihyKys7cjxlLmxlbmd0aCYmdHIoZS5jaGFyQ29kZUF0KHIpKTspcisrO249cn1lbHNlIGg9MztyZXR1cm4gZS5zdWJzdHJpbmcodCxuKX0oKSxhPTExO2RlZmF1bHQ6Zm9yKDtyPG4mJm0odCk7KXIrKyx0PWUuY2hhckNvZGVBdChyKTtpZihvIT09cil7c3dpdGNoKGk9ZS5zdWJzdHJpbmcobyxyKSl7Y2FzZSJ0cnVlIjpyZXR1cm4gYT04O2Nhc2UiZmFsc2UiOnJldHVybiBhPTk7Y2FzZSJudWxsIjpyZXR1cm4gYT03fXJldHVybiBhPTE2fXJldHVybiBpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLHIrKyxhPTE2fX1mdW5jdGlvbiBtKGUpe2lmKFFuKGUpfHxlcihlKSlyZXR1cm4hMTtzd2l0Y2goZSl7Y2FzZSAxMjU6Y2FzZSA5MzpjYXNlIDEyMzpjYXNlIDkxOmNhc2UgMzQ6Y2FzZSA1ODpjYXNlIDQ0OmNhc2UgNDc6cmV0dXJuITF9cmV0dXJuITB9cmV0dXJue3NldFBvc2l0aW9uOmZ1bmN0aW9uKGUpe3I9ZSxpPSIiLG89MCxhPTE2LGg9MH0sZ2V0UG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gcn0sc2Nhbjp0P2Z1bmN0aW9uKCl7dmFyIGU7ZG97ZT1kKCl9d2hpbGUoZT49MTImJmU8PTE1KTtyZXR1cm4gZX06ZCxnZXRUb2tlbjpmdW5jdGlvbigpe3JldHVybiBhfSxnZXRUb2tlblZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGl9LGdldFRva2VuT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99LGdldFRva2VuTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHItb30sZ2V0VG9rZW5TdGFydExpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sZ2V0VG9rZW5TdGFydENoYXJhY3RlcjpmdW5jdGlvbigpe3JldHVybiBvLXV9LGdldFRva2VuRXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gaH19fWZ1bmN0aW9uIFFuKGUpe3JldHVybiAzMj09PWV8fDk9PT1lfHwxMT09PWV8fDEyPT09ZXx8MTYwPT09ZXx8NTc2MD09PWV8fGU+PTgxOTImJmU8PTgyMDN8fDgyMzk9PT1lfHw4Mjg3PT09ZXx8MTIyODg9PT1lfHw2NTI3OT09PWV9ZnVuY3Rpb24gZXIoZSl7cmV0dXJuIDEwPT09ZXx8MTM9PT1lfHw4MjMyPT09ZXx8ODIzMz09PWV9ZnVuY3Rpb24gdHIoZSl7cmV0dXJuIGU+PTQ4JiZlPD01N31mdW5jdGlvbiBucihlLHQsbil7dmFyIHIsaSxvLGEscztpZih0KXtmb3IoYT10Lm9mZnNldCxzPWErdC5sZW5ndGgsbz1hO28+MCYmIWlyKGUsby0xKTspby0tO2Zvcih2YXIgYz1zO2M8ZS5sZW5ndGgmJiFpcihlLGMpOyljKys7aT1lLnN1YnN0cmluZyhvLGMpLHI9ZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9MCxpPXQudGFiU2l6ZXx8NDtmb3IoO248ZS5sZW5ndGg7KXt2YXIgbz1lLmNoYXJBdChuKTtpZigiICI9PT1vKXIrKztlbHNle2lmKCJcdCIhPT1vKWJyZWFrO3IrPWl9bisrfXJldHVybiBNYXRoLmZsb29yKHIvaSl9KGksbil9ZWxzZSBpPWUscj0wLG89MCxhPTAscz1lLmxlbmd0aDt2YXIgbCx1PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXQuY2hhckF0KG4pO2lmKCJcciI9PT1yKXJldHVybiBuKzE8dC5sZW5ndGgmJiJcbiI9PT10LmNoYXJBdChuKzEpPyJcclxuIjoiXHIiO2lmKCJcbiI9PT1yKXJldHVybiJcbiJ9cmV0dXJuIGUmJmUuZW9sfHwiXG4ifShuLGUpLGg9ITEsZj0wO2w9bi5pbnNlcnRTcGFjZXM/cnIoIiAiLG4udGFiU2l6ZXx8NCk6Ilx0Ijt2YXIgZD1ZbihpLCExKSxtPSExO2Z1bmN0aW9uIGcoKXtyZXR1cm4gdStycihsLHIrZil9ZnVuY3Rpb24gcCgpe3ZhciBlPWQuc2NhbigpO2ZvcihoPSExOzE1PT09ZXx8MTQ9PT1lOyloPWh8fDE0PT09ZSxlPWQuc2NhbigpO3JldHVybiBtPTE2PT09ZXx8MCE9PWQuZ2V0VG9rZW5FcnJvcigpLGV9dmFyIGI9W107ZnVuY3Rpb24gdihuLHIsaSl7bXx8dCYmIShyPHMmJmk+YSl8fGUuc3Vic3RyaW5nKHIsaSk9PT1ufHxiLnB1c2goe29mZnNldDpyLGxlbmd0aDppLXIsY29udGVudDpufSl9dmFyIHk9cCgpO2lmKDE3IT09eSl7dmFyIEM9ZC5nZXRUb2tlbk9mZnNldCgpK287dihycihsLHIpLG8sQyl9Zm9yKDsxNyE9PXk7KXtmb3IodmFyIHc9ZC5nZXRUb2tlbk9mZnNldCgpK2QuZ2V0VG9rZW5MZW5ndGgoKStvLF89cCgpLFM9IiIsQT0hMTshaCYmKDEyPT09X3x8MTM9PT1fKTspe3YoIiAiLHcsZC5nZXRUb2tlbk9mZnNldCgpK28pLHc9ZC5nZXRUb2tlbk9mZnNldCgpK2QuZ2V0VG9rZW5MZW5ndGgoKStvLFM9KEE9MTI9PT1fKT9nKCk6IiIsXz1wKCl9aWYoMj09PV8pMSE9PXkmJihmLS0sUz1nKCkpO2Vsc2UgaWYoND09PV8pMyE9PXkmJihmLS0sUz1nKCkpO2Vsc2V7c3dpdGNoKHkpe2Nhc2UgMzpjYXNlIDE6ZisrLFM9ZygpO2JyZWFrO2Nhc2UgNTpjYXNlIDEyOlM9ZygpO2JyZWFrO2Nhc2UgMTM6aD9TPWcoKTpBfHwoUz0iICIpO2JyZWFrO2Nhc2UgNjpBfHwoUz0iICIpO2JyZWFrO2Nhc2UgMTA6aWYoNj09PV8pe0F8fChTPSIiKTticmVha31jYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDExOmNhc2UgMjpjYXNlIDQ6MTI9PT1ffHwxMz09PV8/QXx8KFM9IiAiKTo1IT09XyYmMTchPT1fJiYobT0hMCk7YnJlYWs7Y2FzZSAxNjptPSEwfSFofHwxMiE9PV8mJjEzIT09X3x8KFM9ZygpKX0xNz09PV8mJihTPW4uaW5zZXJ0RmluYWxOZXdsaW5lP3U6IiIpLHYoUyx3LGQuZ2V0VG9rZW5PZmZzZXQoKStvKSx5PV99cmV0dXJuIGJ9ZnVuY3Rpb24gcnIoZSx0KXtmb3IodmFyIG49IiIscj0wO3I8dDtyKyspbis9ZTtyZXR1cm4gbn1mdW5jdGlvbiBpcihlLHQpe3JldHVybi0xIT09IlxyXG4iLmluZGV4T2YoZS5jaGFyQXQodCkpfXZhciBvcjtzZWxmLm9ubWVzc2FnZT1lPT57WG58fFpuKG51bGwpfSwob3J8fChvcj17fSkpLkRFRkFVTFQ9e2FsbG93VHJhaWxpbmdDb21tYTohMX07dmFyIGFyLHNyLGNyLGxyLHVyLGhyLGZyLGRyLG1yLGdyLHByLGJyLHZyLHlyLENyLHdyLF9yLFNyLEFyLEVyLHhyLE5yLGtyLExyLFRyLE9yLElyLE1yLFByLFJyLFZyLEZyLERyLEtyLGpyLFVyLEJyLHFyLCRyLFdyLEhyLHpyLEdyLEpyLFhyLFpyLFlyLFFyLGVpLHRpPVluLG5pPWZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49b3IuREVGQVVMVCk7dmFyIHI9bnVsbCxpPVtdLG89W107ZnVuY3Rpb24gYShlKXtBcnJheS5pc0FycmF5KGkpP2kucHVzaChlKTpudWxsIT09ciYmKGlbcl09ZSl9cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT1uJiYobj1vci5ERUZBVUxUKTt2YXIgcj1ZbihlLCExKTtmdW5jdGlvbiBpKGUpe3JldHVybiBlP2Z1bmN0aW9uKCl7cmV0dXJuIGUoci5nZXRUb2tlbk9mZnNldCgpLHIuZ2V0VG9rZW5MZW5ndGgoKSxyLmdldFRva2VuU3RhcnRMaW5lKCksci5nZXRUb2tlblN0YXJ0Q2hhcmFjdGVyKCkpfTpmdW5jdGlvbigpe3JldHVybiEwfX1mdW5jdGlvbiBvKGUpe3JldHVybiBlP2Z1bmN0aW9uKHQpe3JldHVybiBlKHQsci5nZXRUb2tlbk9mZnNldCgpLHIuZ2V0VG9rZW5MZW5ndGgoKSxyLmdldFRva2VuU3RhcnRMaW5lKCksci5nZXRUb2tlblN0YXJ0Q2hhcmFjdGVyKCkpfTpmdW5jdGlvbigpe3JldHVybiEwfX12YXIgYT1pKHQub25PYmplY3RCZWdpbikscz1vKHQub25PYmplY3RQcm9wZXJ0eSksYz1pKHQub25PYmplY3RFbmQpLGw9aSh0Lm9uQXJyYXlCZWdpbiksdT1pKHQub25BcnJheUVuZCksaD1vKHQub25MaXRlcmFsVmFsdWUpLGY9byh0Lm9uU2VwYXJhdG9yKSxkPWkodC5vbkNvbW1lbnQpLG09byh0Lm9uRXJyb3IpLGc9biYmbi5kaXNhbGxvd0NvbW1lbnRzLHA9biYmbi5hbGxvd1RyYWlsaW5nQ29tbWE7ZnVuY3Rpb24gYigpe2Zvcig7Oyl7dmFyIGU9ci5zY2FuKCk7c3dpdGNoKHIuZ2V0VG9rZW5FcnJvcigpKXtjYXNlIDQ6digxNCk7YnJlYWs7Y2FzZSA1OnYoMTUpO2JyZWFrO2Nhc2UgMzp2KDEzKTticmVhaztjYXNlIDE6Z3x8digxMSk7YnJlYWs7Y2FzZSAyOnYoMTIpO2JyZWFrO2Nhc2UgNjp2KDE2KX1zd2l0Y2goZSl7Y2FzZSAxMjpjYXNlIDEzOmc/digxMCk6ZCgpO2JyZWFrO2Nhc2UgMTY6digxKTticmVhaztjYXNlIDE1OmNhc2UgMTQ6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gZX19fWZ1bmN0aW9uIHYoZSx0LG4pe2lmKHZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1uJiYobj1bXSksbShlKSx0Lmxlbmd0aCtuLmxlbmd0aD4wKWZvcih2YXIgaT1yLmdldFRva2VuKCk7MTchPT1pOyl7aWYoLTEhPT10LmluZGV4T2YoaSkpe2IoKTticmVha31pZigtMSE9PW4uaW5kZXhPZihpKSlicmVhaztpPWIoKX19ZnVuY3Rpb24geShlKXt2YXIgdD1yLmdldFRva2VuVmFsdWUoKTtyZXR1cm4gZT9oKHQpOnModCksYigpLCEwfWZ1bmN0aW9uIEMoKXtzd2l0Y2goci5nZXRUb2tlbigpKXtjYXNlIDExOnZhciBlPXIuZ2V0VG9rZW5WYWx1ZSgpLHQ9TnVtYmVyKGUpO2lzTmFOKHQpJiYodigyKSx0PTApLGgodCk7YnJlYWs7Y2FzZSA3OmgobnVsbCk7YnJlYWs7Y2FzZSA4OmgoITApO2JyZWFrO2Nhc2UgOTpoKCExKTticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiBiKCksITB9ZnVuY3Rpb24gdygpe3JldHVybiAxMCE9PXIuZ2V0VG9rZW4oKT8odigzLFtdLFsyLDVdKSwhMSk6KHkoITEpLDY9PT1yLmdldFRva2VuKCk/KGYoIjoiKSxiKCksQSgpfHx2KDQsW10sWzIsNV0pKTp2KDUsW10sWzIsNV0pLCEwKX1mdW5jdGlvbiBfKCl7YSgpLGIoKTtmb3IodmFyIGU9ITE7MiE9PXIuZ2V0VG9rZW4oKSYmMTchPT1yLmdldFRva2VuKCk7KXtpZig1PT09ci5nZXRUb2tlbigpKXtpZihlfHx2KDQsW10sW10pLGYoIiwiKSxiKCksMj09PXIuZ2V0VG9rZW4oKSYmcClicmVha31lbHNlIGUmJnYoNixbXSxbXSk7dygpfHx2KDQsW10sWzIsNV0pLGU9ITB9cmV0dXJuIGMoKSwyIT09ci5nZXRUb2tlbigpP3YoNyxbMl0sW10pOmIoKSwhMH1mdW5jdGlvbiBTKCl7bCgpLGIoKTtmb3IodmFyIGU9ITE7NCE9PXIuZ2V0VG9rZW4oKSYmMTchPT1yLmdldFRva2VuKCk7KXtpZig1PT09ci5nZXRUb2tlbigpKXtpZihlfHx2KDQsW10sW10pLGYoIiwiKSxiKCksND09PXIuZ2V0VG9rZW4oKSYmcClicmVha31lbHNlIGUmJnYoNixbXSxbXSk7QSgpfHx2KDQsW10sWzQsNV0pLGU9ITB9cmV0dXJuIHUoKSw0IT09ci5nZXRUb2tlbigpP3YoOCxbNF0sW10pOmIoKSwhMH1mdW5jdGlvbiBBKCl7c3dpdGNoKHIuZ2V0VG9rZW4oKSl7Y2FzZSAzOnJldHVybiBTKCk7Y2FzZSAxOnJldHVybiBfKCk7Y2FzZSAxMDpyZXR1cm4geSghMCk7ZGVmYXVsdDpyZXR1cm4gQygpfX1pZihiKCksMTc9PT1yLmdldFRva2VuKCkpcmV0dXJuISFuLmFsbG93RW1wdHlDb250ZW50fHwodig0LFtdLFtdKSwhMSk7aWYoIUEoKSlyZXR1cm4gdig0LFtdLFtdKSwhMTsxNyE9PXIuZ2V0VG9rZW4oKSYmdig5LFtdLFtdKX0oZSx7b25PYmplY3RCZWdpbjpmdW5jdGlvbigpe3ZhciBlPXt9O2EoZSksby5wdXNoKGkpLGk9ZSxyPW51bGx9LG9uT2JqZWN0UHJvcGVydHk6ZnVuY3Rpb24oZSl7cj1lfSxvbk9iamVjdEVuZDpmdW5jdGlvbigpe2k9by5wb3AoKX0sb25BcnJheUJlZ2luOmZ1bmN0aW9uKCl7dmFyIGU9W107YShlKSxvLnB1c2goaSksaT1lLHI9bnVsbH0sb25BcnJheUVuZDpmdW5jdGlvbigpe2k9by5wb3AoKX0sb25MaXRlcmFsVmFsdWU6YSxvbkVycm9yOmZ1bmN0aW9uKGUsbixyKXt0LnB1c2goe2Vycm9yOmUsb2Zmc2V0Om4sbGVuZ3RoOnJ9KX19LG4pLGlbMF19LHJpPWZ1bmN0aW9uIGUodCxuLHIpe2lmKHZvaWQgMD09PXImJihyPSExKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPSExKSx0Pj1lLm9mZnNldCYmdDxlLm9mZnNldCtlLmxlbmd0aHx8biYmdD09PWUub2Zmc2V0K2UubGVuZ3RofSh0LG4scikpe3ZhciBpPXQuY2hpbGRyZW47aWYoQXJyYXkuaXNBcnJheShpKSlmb3IodmFyIG89MDtvPGkubGVuZ3RoJiZpW29dLm9mZnNldDw9bjtvKyspe3ZhciBhPWUoaVtvXSxuLHIpO2lmKGEpcmV0dXJuIGF9cmV0dXJuIHR9fSxpaT1mdW5jdGlvbiBlKHQpe2lmKCF0LnBhcmVudHx8IXQucGFyZW50LmNoaWxkcmVuKXJldHVybltdO3ZhciBuPWUodC5wYXJlbnQpO2lmKCJwcm9wZXJ0eSI9PT10LnBhcmVudC50eXBlKXt2YXIgcj10LnBhcmVudC5jaGlsZHJlblswXS52YWx1ZTtuLnB1c2gocil9ZWxzZSBpZigiYXJyYXkiPT09dC5wYXJlbnQudHlwZSl7dmFyIGk9dC5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0KTstMSE9PWkmJm4ucHVzaChpKX1yZXR1cm4gbn0sb2k9ZnVuY3Rpb24gZSh0KXtzd2l0Y2godC50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4gdC5jaGlsZHJlbi5tYXAoZSk7Y2FzZSJvYmplY3QiOmZvcih2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9MCxpPXQuY2hpbGRyZW47cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl0sYT1vLmNoaWxkcmVuWzFdO2EmJihuW28uY2hpbGRyZW5bMF0udmFsdWVdPWUoYSkpfXJldHVybiBuO2Nhc2UibnVsbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOnJldHVybiB0LnZhbHVlO2RlZmF1bHQ6cmV0dXJufX07ZnVuY3Rpb24gYWkoZSx0KXtpZihlPT09dClyZXR1cm4hMDtpZihudWxsPT1lfHxudWxsPT10KXJldHVybiExO2lmKHR5cGVvZiBlIT10eXBlb2YgdClyZXR1cm4hMTtpZigib2JqZWN0IiE9dHlwZW9mIGUpcmV0dXJuITE7aWYoQXJyYXkuaXNBcnJheShlKSE9PUFycmF5LmlzQXJyYXkodCkpcmV0dXJuITE7dmFyIG4scjtpZihBcnJheS5pc0FycmF5KGUpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYoIWFpKGVbbl0sdFtuXSkpcmV0dXJuITF9ZWxzZXt2YXIgaT1bXTtmb3IociBpbiBlKWkucHVzaChyKTtpLnNvcnQoKTt2YXIgbz1bXTtmb3IociBpbiB0KW8ucHVzaChyKTtpZihvLnNvcnQoKSwhYWkoaSxvKSlyZXR1cm4hMTtmb3Iobj0wO248aS5sZW5ndGg7bisrKWlmKCFhaShlW2lbbl1dLHRbaVtuXV0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHNpKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX1mdW5jdGlvbiBjaShlKXtyZXR1cm4gdm9pZCAwIT09ZX1mdW5jdGlvbiBsaShlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlfWZ1bmN0aW9uIHVpKGUsdCl7dmFyIG49ZS5sZW5ndGgtdC5sZW5ndGg7cmV0dXJuIG4+MD9lLmxhc3RJbmRleE9mKHQpPT09bjowPT09biYmZT09PXR9ZnVuY3Rpb24gaGkoZSl7dmFyIHQ9IiI7KGZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoZVtuXSE9PXRbbl0pcmV0dXJuITE7cmV0dXJuITB9KShlLCIoP2kpIikmJihlPWUuc3Vic3RyaW5nKDQpLHQ9ImkiKTt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoZSx0KyJ1Iil9Y2F0Y2gobil7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCl9Y2F0Y2goZSl7cmV0dXJufX19KHNyPWFyfHwoYXI9e30pKS5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsc3IuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsKGxyPWNyfHwoY3I9e30pKS5NSU5fVkFMVUU9MCxsci5NQVhfVkFMVUU9MjE0NzQ4MzY0NywoaHI9dXJ8fCh1cj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09TnVtYmVyLk1BWF9WQUxVRSYmKGU9Y3IuTUFYX1ZBTFVFKSx0PT09TnVtYmVyLk1BWF9WQUxVRSYmKHQ9Y3IuTUFYX1ZBTFVFKSx7bGluZTplLGNoYXJhY3Rlcjp0fX0saHIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8ub2JqZWN0TGl0ZXJhbCh0KSYmaG8udWludGVnZXIodC5saW5lKSYmaG8udWludGVnZXIodC5jaGFyYWN0ZXIpfSwoZHI9ZnJ8fChmcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtpZihoby51aW50ZWdlcihlKSYmaG8udWludGVnZXIodCkmJmhvLnVpbnRlZ2VyKG4pJiZoby51aW50ZWdlcihyKSlyZXR1cm57c3RhcnQ6dXIuY3JlYXRlKGUsdCksZW5kOnVyLmNyZWF0ZShuLHIpfTtpZih1ci5pcyhlKSYmdXIuaXModCkpcmV0dXJue3N0YXJ0OmUsZW5kOnR9O3Rocm93IG5ldyBFcnJvcigiUmFuZ2UjY3JlYXRlIGNhbGxlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzWyIrZSsiLCAiK3QrIiwgIituKyIsICIrcisiXSIpfSxkci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5vYmplY3RMaXRlcmFsKHQpJiZ1ci5pcyh0LnN0YXJ0KSYmdXIuaXModC5lbmQpfSwoZ3I9bXJ8fChtcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSxyYW5nZTp0fX0sZ3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmZnIuaXModC5yYW5nZSkmJihoby5zdHJpbmcodC51cmkpfHxoby51bmRlZmluZWQodC51cmkpKX0sKGJyPXByfHwocHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJue3RhcmdldFVyaTplLHRhcmdldFJhbmdlOnQsdGFyZ2V0U2VsZWN0aW9uUmFuZ2U6bixvcmlnaW5TZWxlY3Rpb25SYW5nZTpyfX0sYnIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmZnIuaXModC50YXJnZXRSYW5nZSkmJmhvLnN0cmluZyh0LnRhcmdldFVyaSkmJihmci5pcyh0LnRhcmdldFNlbGVjdGlvblJhbmdlKXx8aG8udW5kZWZpbmVkKHQudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpKSYmKGZyLmlzKHQub3JpZ2luU2VsZWN0aW9uUmFuZ2UpfHxoby51bmRlZmluZWQodC5vcmlnaW5TZWxlY3Rpb25SYW5nZSkpfSwoeXI9dnJ8fCh2cj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm57cmVkOmUsZ3JlZW46dCxibHVlOm4sYWxwaGE6cn19LHlyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLm51bWJlclJhbmdlKHQucmVkLDAsMSkmJmhvLm51bWJlclJhbmdlKHQuZ3JlZW4sMCwxKSYmaG8ubnVtYmVyUmFuZ2UodC5ibHVlLDAsMSkmJmhvLm51bWJlclJhbmdlKHQuYWxwaGEsMCwxKX0sKHdyPUNyfHwoQ3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxjb2xvcjp0fX0sd3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gZnIuaXModC5yYW5nZSkmJnZyLmlzKHQuY29sb3IpfSwoU3I9X3J8fChfcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJue2xhYmVsOmUsdGV4dEVkaXQ6dCxhZGRpdGlvbmFsVGV4dEVkaXRzOm59fSxTci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5zdHJpbmcodC5sYWJlbCkmJihoby51bmRlZmluZWQodC50ZXh0RWRpdCl8fEtyLmlzKHQpKSYmKGhvLnVuZGVmaW5lZCh0LmFkZGl0aW9uYWxUZXh0RWRpdHMpfHxoby50eXBlZEFycmF5KHQuYWRkaXRpb25hbFRleHRFZGl0cyxLci5pcykpfSwoRXI9QXJ8fChBcj17fSkpLkNvbW1lbnQ9ImNvbW1lbnQiLEVyLkltcG9ydHM9ImltcG9ydHMiLEVyLlJlZ2lvbj0icmVnaW9uIiwoTnI9eHJ8fCh4cj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPXtzdGFydExpbmU6ZSxlbmRMaW5lOnR9O3JldHVybiBoby5kZWZpbmVkKG4pJiYoby5zdGFydENoYXJhY3Rlcj1uKSxoby5kZWZpbmVkKHIpJiYoby5lbmRDaGFyYWN0ZXI9ciksaG8uZGVmaW5lZChpKSYmKG8ua2luZD1pKSxvfSxOci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby51aW50ZWdlcih0LnN0YXJ0TGluZSkmJmhvLnVpbnRlZ2VyKHQuc3RhcnRMaW5lKSYmKGhvLnVuZGVmaW5lZCh0LnN0YXJ0Q2hhcmFjdGVyKXx8aG8udWludGVnZXIodC5zdGFydENoYXJhY3RlcikpJiYoaG8udW5kZWZpbmVkKHQuZW5kQ2hhcmFjdGVyKXx8aG8udWludGVnZXIodC5lbmRDaGFyYWN0ZXIpKSYmKGhvLnVuZGVmaW5lZCh0LmtpbmQpfHxoby5zdHJpbmcodC5raW5kKSl9LChMcj1rcnx8KGtyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2xvY2F0aW9uOmUsbWVzc2FnZTp0fX0sTHIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmbXIuaXModC5sb2NhdGlvbikmJmhvLnN0cmluZyh0Lm1lc3NhZ2UpfSwoT3I9VHJ8fChUcj17fSkpLkVycm9yPTEsT3IuV2FybmluZz0yLE9yLkluZm9ybWF0aW9uPTMsT3IuSGludD00LChNcj1Jcnx8KElyPXt9KSkuVW5uZWNlc3Nhcnk9MSxNci5EZXByZWNhdGVkPTIsKFByfHwoUHI9e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBudWxsIT10JiZoby5zdHJpbmcodC5ocmVmKX0sKFZyPVJyfHwoUnI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPXtyYW5nZTplLG1lc3NhZ2U6dH07cmV0dXJuIGhvLmRlZmluZWQobikmJihhLnNldmVyaXR5PW4pLGhvLmRlZmluZWQocikmJihhLmNvZGU9ciksaG8uZGVmaW5lZChpKSYmKGEuc291cmNlPWkpLGhvLmRlZmluZWQobykmJihhLnJlbGF0ZWRJbmZvcm1hdGlvbj1vKSxhfSxWci5pcz1mdW5jdGlvbihlKXt2YXIgdCxuPWU7cmV0dXJuIGhvLmRlZmluZWQobikmJmZyLmlzKG4ucmFuZ2UpJiZoby5zdHJpbmcobi5tZXNzYWdlKSYmKGhvLm51bWJlcihuLnNldmVyaXR5KXx8aG8udW5kZWZpbmVkKG4uc2V2ZXJpdHkpKSYmKGhvLmludGVnZXIobi5jb2RlKXx8aG8uc3RyaW5nKG4uY29kZSl8fGhvLnVuZGVmaW5lZChuLmNvZGUpKSYmKGhvLnVuZGVmaW5lZChuLmNvZGVEZXNjcmlwdGlvbil8fGhvLnN0cmluZyhudWxsPT09KHQ9bi5jb2RlRGVzY3JpcHRpb24pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmhyZWYpKSYmKGhvLnN0cmluZyhuLnNvdXJjZSl8fGhvLnVuZGVmaW5lZChuLnNvdXJjZSkpJiYoaG8udW5kZWZpbmVkKG4ucmVsYXRlZEluZm9ybWF0aW9uKXx8aG8udHlwZWRBcnJheShuLnJlbGF0ZWRJbmZvcm1hdGlvbixrci5pcykpfSwoRHI9RnJ8fChGcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxyPTI7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyluW3ItMl09YXJndW1lbnRzW3JdO3ZhciBpPXt0aXRsZTplLGNvbW1hbmQ6dH07cmV0dXJuIGhvLmRlZmluZWQobikmJm4ubGVuZ3RoPjAmJihpLmFyZ3VtZW50cz1uKSxpfSxEci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZoby5zdHJpbmcodC50aXRsZSkmJmhvLnN0cmluZyh0LmNvbW1hbmQpfSwoanI9S3J8fChLcj17fSkpLnJlcGxhY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OnR9fSxqci5pbnNlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmUsZW5kOmV9LG5ld1RleHQ6dH19LGpyLmRlbD1mdW5jdGlvbihlKXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OiIifX0sanIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8ub2JqZWN0TGl0ZXJhbCh0KSYmaG8uc3RyaW5nKHQubmV3VGV4dCkmJmZyLmlzKHQucmFuZ2UpfSwoQnI9VXJ8fChVcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e2xhYmVsOmV9O3JldHVybiB2b2lkIDAhPT10JiYoci5uZWVkc0NvbmZpcm1hdGlvbj10KSx2b2lkIDAhPT1uJiYoci5kZXNjcmlwdGlvbj1uKSxyfSxCci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB2b2lkIDAhPT10JiZoby5vYmplY3RMaXRlcmFsKHQpJiZoby5zdHJpbmcodC5sYWJlbCkmJihoby5ib29sZWFuKHQubmVlZHNDb25maXJtYXRpb24pfHx2b2lkIDA9PT10Lm5lZWRzQ29uZmlybWF0aW9uKSYmKGhvLnN0cmluZyh0LmRlc2NyaXB0aW9uKXx8dm9pZCAwPT09dC5kZXNjcmlwdGlvbil9LChxcnx8KHFyPXt9KSkuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSwoV3I9JHJ8fCgkcj17fSkpLnJlcGxhY2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTplLG5ld1RleHQ6dCxhbm5vdGF0aW9uSWQ6bn19LFdyLmluc2VydD1mdW5jdGlvbihlLHQsbil7cmV0dXJue3JhbmdlOntzdGFydDplLGVuZDplfSxuZXdUZXh0OnQsYW5ub3RhdGlvbklkOm59fSxXci5kZWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OiIiLGFubm90YXRpb25JZDp0fX0sV3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gS3IuaXModCkmJihVci5pcyh0LmFubm90YXRpb25JZCl8fHFyLmlzKHQuYW5ub3RhdGlvbklkKSl9LCh6cj1Icnx8KEhyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3RleHREb2N1bWVudDplLGVkaXRzOnR9fSx6ci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZwaS5pcyh0LnRleHREb2N1bWVudCkmJkFycmF5LmlzQXJyYXkodC5lZGl0cyl9LChKcj1Hcnx8KEdyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17a2luZDoiY3JlYXRlIix1cmk6ZX07cmV0dXJuIHZvaWQgMD09PXR8fHZvaWQgMD09PXQub3ZlcndyaXRlJiZ2b2lkIDA9PT10Lmlnbm9yZUlmRXhpc3RzfHwoci5vcHRpb25zPXQpLHZvaWQgMCE9PW4mJihyLmFubm90YXRpb25JZD1uKSxyfSxKci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYiY3JlYXRlIj09PXQua2luZCYmaG8uc3RyaW5nKHQudXJpKSYmKHZvaWQgMD09PXQub3B0aW9uc3x8KHZvaWQgMD09PXQub3B0aW9ucy5vdmVyd3JpdGV8fGhvLmJvb2xlYW4odC5vcHRpb25zLm92ZXJ3cml0ZSkpJiYodm9pZCAwPT09dC5vcHRpb25zLmlnbm9yZUlmRXhpc3RzfHxoby5ib29sZWFuKHQub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHZvaWQgMD09PXQuYW5ub3RhdGlvbklkfHxxci5pcyh0LmFubm90YXRpb25JZCkpfSwoWnI9WHJ8fChYcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT17a2luZDoicmVuYW1lIixvbGRVcmk6ZSxuZXdVcmk6dH07cmV0dXJuIHZvaWQgMD09PW58fHZvaWQgMD09PW4ub3ZlcndyaXRlJiZ2b2lkIDA9PT1uLmlnbm9yZUlmRXhpc3RzfHwoaS5vcHRpb25zPW4pLHZvaWQgMCE9PXImJihpLmFubm90YXRpb25JZD1yKSxpfSxaci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYicmVuYW1lIj09PXQua2luZCYmaG8uc3RyaW5nKHQub2xkVXJpKSYmaG8uc3RyaW5nKHQubmV3VXJpKSYmKHZvaWQgMD09PXQub3B0aW9uc3x8KHZvaWQgMD09PXQub3B0aW9ucy5vdmVyd3JpdGV8fGhvLmJvb2xlYW4odC5vcHRpb25zLm92ZXJ3cml0ZSkpJiYodm9pZCAwPT09dC5vcHRpb25zLmlnbm9yZUlmRXhpc3RzfHxoby5ib29sZWFuKHQub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHZvaWQgMD09PXQuYW5ub3RhdGlvbklkfHxxci5pcyh0LmFubm90YXRpb25JZCkpfSwoUXI9WXJ8fChZcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e2tpbmQ6ImRlbGV0ZSIsdXJpOmV9O3JldHVybiB2b2lkIDA9PT10fHx2b2lkIDA9PT10LnJlY3Vyc2l2ZSYmdm9pZCAwPT09dC5pZ25vcmVJZk5vdEV4aXN0c3x8KHIub3B0aW9ucz10KSx2b2lkIDAhPT1uJiYoci5hbm5vdGF0aW9uSWQ9bikscn0sUXIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmImRlbGV0ZSI9PT10LmtpbmQmJmhvLnN0cmluZyh0LnVyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMucmVjdXJzaXZlfHxoby5ib29sZWFuKHQub3B0aW9ucy5yZWN1cnNpdmUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0c3x8aG8uYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8cXIuaXModC5hbm5vdGF0aW9uSWQpKX0sKGVpfHwoZWk9e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYodm9pZCAwIT09dC5jaGFuZ2VzfHx2b2lkIDAhPT10LmRvY3VtZW50Q2hhbmdlcykmJih2b2lkIDA9PT10LmRvY3VtZW50Q2hhbmdlc3x8dC5kb2N1bWVudENoYW5nZXMuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBoby5zdHJpbmcoZS5raW5kKT9Hci5pcyhlKXx8WHIuaXMoZSl8fFlyLmlzKGUpOkhyLmlzKGUpfSkpKX07dmFyIGZpLGRpLG1pLGdpLHBpLGJpLHZpLHlpLENpLHdpLF9pLFNpLEFpLEVpLHhpLE5pLGtpLExpLFRpLE9pLElpLE1pLFBpLFJpLFZpLEZpLERpLEtpLGppLFVpLEJpLHFpLCRpLFdpLEhpLHppLEdpLEppLFhpLFppLFlpLFFpLGVvLHRvLG5vLHJvLGlvLG9vLGFvLHNvLGNvLGxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuZWRpdHM9ZSx0aGlzLmNoYW5nZUFubm90YXRpb25zPXR9cmV0dXJuIGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZih2b2lkIDA9PT1uP3I9S3IuaW5zZXJ0KGUsdCk6cXIuaXMobik/KGk9bixyPSRyLmluc2VydChlLHQsbikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLGk9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2Uobikscj0kci5pbnNlcnQoZSx0LGkpKSx0aGlzLmVkaXRzLnB1c2gociksdm9pZCAwIT09aSlyZXR1cm4gaX0sZS5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZih2b2lkIDA9PT1uP3I9S3IucmVwbGFjZShlLHQpOnFyLmlzKG4pPyhpPW4scj0kci5yZXBsYWNlKGUsdCxuKSk6KHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucyksaT10aGlzLmNoYW5nZUFubm90YXRpb25zLm1hbmFnZShuKSxyPSRyLnJlcGxhY2UoZSx0LGkpKSx0aGlzLmVkaXRzLnB1c2gociksdm9pZCAwIT09aSlyZXR1cm4gaX0sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZih2b2lkIDA9PT10P249S3IuZGVsKGUpOnFyLmlzKHQpPyhyPXQsbj0kci5kZWwoZSx0KSk6KHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucykscj10aGlzLmNoYW5nZUFubm90YXRpb25zLm1hbmFnZSh0KSxuPSRyLmRlbChlLHIpKSx0aGlzLmVkaXRzLnB1c2gobiksdm9pZCAwIT09cilyZXR1cm4gcn0sZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuZWRpdHMucHVzaChlKX0sZS5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdHN9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5lZGl0cy5zcGxpY2UoMCx0aGlzLmVkaXRzLmxlbmd0aCl9LGUucHJvdG90eXBlLmFzc2VydENoYW5nZUFubm90YXRpb25zPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJUZXh0IGVkaXQgY2hhbmdlIGlzIG5vdCBjb25maWd1cmVkIHRvIG1hbmFnZSBjaGFuZ2UgYW5ub3RhdGlvbnMuIil9LGV9KCksdW89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuX2Fubm90YXRpb25zPXZvaWQgMD09PWU/T2JqZWN0LmNyZWF0ZShudWxsKTplLHRoaXMuX2NvdW50ZXI9MCx0aGlzLl9zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NpemV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubWFuYWdlPWZ1bmN0aW9uKGUsdCl7dmFyIG47aWYocXIuaXMoZSk/bj1lOihuPXRoaXMubmV4dElkKCksdD1lKSx2b2lkIDAhPT10aGlzLl9hbm5vdGF0aW9uc1tuXSl0aHJvdyBuZXcgRXJyb3IoIklkICIrbisiIGlzIGFscmVhZHkgaW4gdXNlLiIpO2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IEVycm9yKCJObyBhbm5vdGF0aW9uIHByb3ZpZGVkIGZvciBpZCAiK24pO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uc1tuXT10LHRoaXMuX3NpemUrKyxufSxlLnByb3RvdHlwZS5uZXh0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY291bnRlcisrLHRoaXMuX2NvdW50ZXIudG9TdHJpbmcoKX0sZX0oKTshZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PXRoaXM7dGhpcy5fdGV4dEVkaXRDaGFuZ2VzPU9iamVjdC5jcmVhdGUobnVsbCksdm9pZCAwIT09ZT8odGhpcy5fd29ya3NwYWNlRWRpdD1lLGUuZG9jdW1lbnRDaGFuZ2VzPyh0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucz1uZXcgdW8oZS5jaGFuZ2VBbm5vdGF0aW9ucyksZS5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSxlLmRvY3VtZW50Q2hhbmdlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihIci5pcyhlKSl7dmFyIG49bmV3IGxvKGUuZWRpdHMsdC5fY2hhbmdlQW5ub3RhdGlvbnMpO3QuX3RleHRFZGl0Q2hhbmdlc1tlLnRleHREb2N1bWVudC51cmldPW59fSkpKTplLmNoYW5nZXMmJk9iamVjdC5rZXlzKGUuY2hhbmdlcykuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9bmV3IGxvKGUuY2hhbmdlc1tuXSk7dC5fdGV4dEVkaXRDaGFuZ2VzW25dPXJ9KSkpOnRoaXMuX3dvcmtzcGFjZUVkaXQ9e319T2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJlZGl0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMCE9PXRoaXMuX2NoYW5nZUFubm90YXRpb25zJiYoMD09PXRoaXMuX2NoYW5nZUFubm90YXRpb25zLnNpemU/dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz12b2lkIDA6dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSksdGhpcy5fd29ya3NwYWNlRWRpdH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXRUZXh0RWRpdENoYW5nZT1mdW5jdGlvbihlKXtpZihwaS5pcyhlKSl7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgdD17dXJpOmUudXJpLHZlcnNpb246ZS52ZXJzaW9ufTtpZighKHI9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3QudXJpXSkpe3ZhciBuPXt0ZXh0RG9jdW1lbnQ6dCxlZGl0czppPVtdfTt0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKG4pLHI9bmV3IGxvKGksdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0LnVyaV09cn1yZXR1cm4gcn1pZih0aGlzLmluaXRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIG5vcm1hbCB0ZXh0IGVkaXQgY2hhbmdlcy4iKTt2YXIgcjtpZighKHI9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW2VdKSl7dmFyIGk9W107dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzW2VdPWkscj1uZXcgbG8oaSksdGhpcy5fdGV4dEVkaXRDaGFuZ2VzW2VdPXJ9cmV0dXJuIHJ9LGUucHJvdG90eXBlLmluaXREb2N1bWVudENoYW5nZXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyYmdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzJiYodGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IHVvLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzPVtdLHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCkpfSxlLnByb3RvdHlwZS5pbml0Q2hhbmdlcz1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzJiZ2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMmJih0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSl9LGUucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHIsaSxvO2lmKFVyLmlzKHQpfHxxci5pcyh0KT9yPXQ6bj10LHZvaWQgMD09PXI/aT1Hci5jcmVhdGUoZSxuKToobz1xci5pcyhyKT9yOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShyKSxpPUdyLmNyZWF0ZShlLG4sbykpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2goaSksdm9pZCAwIT09bylyZXR1cm4gb30sZS5wcm90b3R5cGUucmVuYW1lRmlsZT1mdW5jdGlvbihlLHQsbixyKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBpLG8sYTtpZihVci5pcyhuKXx8cXIuaXMobik/aT1uOnI9bix2b2lkIDA9PT1pP289WHIuY3JlYXRlKGUsdCxyKTooYT1xci5pcyhpKT9pOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShpKSxvPVhyLmNyZWF0ZShlLHQscixhKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChvKSx2b2lkIDAhPT1hKXJldHVybiBhfSxlLnByb3RvdHlwZS5kZWxldGVGaWxlPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciByLGksbztpZihVci5pcyh0KXx8cXIuaXModCk/cj10Om49dCx2b2lkIDA9PT1yP2k9WXIuY3JlYXRlKGUsbik6KG89cXIuaXMocik/cjp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksaT1Zci5jcmVhdGUoZSxuLG8pKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKGkpLHZvaWQgMCE9PW8pcmV0dXJuIG99fSgpLChkaT1maXx8KGZpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybnt1cmk6ZX19LGRpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnN0cmluZyh0LnVyaSl9LChnaT1taXx8KG1pPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3VyaTplLHZlcnNpb246dH19LGdpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnN0cmluZyh0LnVyaSkmJmhvLmludGVnZXIodC52ZXJzaW9uKX0sKGJpPXBpfHwocGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dXJpOmUsdmVyc2lvbjp0fX0sYmkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmaG8uc3RyaW5nKHQudXJpKSYmKG51bGw9PT10LnZlcnNpb258fGhvLmludGVnZXIodC52ZXJzaW9uKSl9LCh5aT12aXx8KHZpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybnt1cmk6ZSxsYW5ndWFnZUlkOnQsdmVyc2lvbjpuLHRleHQ6cn19LHlpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnN0cmluZyh0LnVyaSkmJmhvLnN0cmluZyh0Lmxhbmd1YWdlSWQpJiZoby5pbnRlZ2VyKHQudmVyc2lvbikmJmhvLnN0cmluZyh0LnRleHQpfSwod2k9Q2l8fChDaT17fSkpLlBsYWluVGV4dD0icGxhaW50ZXh0Iix3aS5NYXJrZG93bj0ibWFya2Rvd24iLGZ1bmN0aW9uKGUpe2UuaXM9ZnVuY3Rpb24odCl7dmFyIG49dDtyZXR1cm4gbj09PWUuUGxhaW5UZXh0fHxuPT09ZS5NYXJrZG93bn19KENpfHwoQ2k9e30pKSwoX2l8fChfaT17fSkpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLm9iamVjdExpdGVyYWwoZSkmJkNpLmlzKHQua2luZCkmJmhvLnN0cmluZyh0LnZhbHVlKX0sKEFpPVNpfHwoU2k9e30pKS5UZXh0PTEsQWkuTWV0aG9kPTIsQWkuRnVuY3Rpb249MyxBaS5Db25zdHJ1Y3Rvcj00LEFpLkZpZWxkPTUsQWkuVmFyaWFibGU9NixBaS5DbGFzcz03LEFpLkludGVyZmFjZT04LEFpLk1vZHVsZT05LEFpLlByb3BlcnR5PTEwLEFpLlVuaXQ9MTEsQWkuVmFsdWU9MTIsQWkuRW51bT0xMyxBaS5LZXl3b3JkPTE0LEFpLlNuaXBwZXQ9MTUsQWkuQ29sb3I9MTYsQWkuRmlsZT0xNyxBaS5SZWZlcmVuY2U9MTgsQWkuRm9sZGVyPTE5LEFpLkVudW1NZW1iZXI9MjAsQWkuQ29uc3RhbnQ9MjEsQWkuU3RydWN0PTIyLEFpLkV2ZW50PTIzLEFpLk9wZXJhdG9yPTI0LEFpLlR5cGVQYXJhbWV0ZXI9MjUsKHhpPUVpfHwoRWk9e30pKS5QbGFpblRleHQ9MSx4aS5TbmlwcGV0PTIsKE5pfHwoTmk9e30pKS5EZXByZWNhdGVkPTEsKExpPWtpfHwoa2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntuZXdUZXh0OmUsaW5zZXJ0OnQscmVwbGFjZTpufX0sTGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmaG8uc3RyaW5nKHQubmV3VGV4dCkmJmZyLmlzKHQuaW5zZXJ0KSYmZnIuaXModC5yZXBsYWNlKX0sKE9pPVRpfHwoVGk9e30pKS5hc0lzPTEsT2kuYWRqdXN0SW5kZW50YXRpb249MiwoSWl8fChJaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm57bGFiZWw6ZX19LChNaXx8KE1pPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2l0ZW1zOmV8fFtdLGlzSW5jb21wbGV0ZTohIXR9fSwoUmk9UGl8fChQaT17fSkpLmZyb21QbGFpblRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfSxSaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5zdHJpbmcodCl8fGhvLm9iamVjdExpdGVyYWwodCkmJmhvLnN0cmluZyh0Lmxhbmd1YWdlKSYmaG8uc3RyaW5nKHQudmFsdWUpfSwoVml8fChWaT17fSkpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuISF0JiZoby5vYmplY3RMaXRlcmFsKHQpJiYoX2kuaXModC5jb250ZW50cyl8fFBpLmlzKHQuY29udGVudHMpfHxoby50eXBlZEFycmF5KHQuY29udGVudHMsUGkuaXMpKSYmKHZvaWQgMD09PWUucmFuZ2V8fGZyLmlzKGUucmFuZ2UpKX0sKEZpfHwoRmk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD97bGFiZWw6ZSxkb2N1bWVudGF0aW9uOnR9OntsYWJlbDplfX0sKERpfHwoRGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT17bGFiZWw6ZX07cmV0dXJuIGhvLmRlZmluZWQodCkmJihpLmRvY3VtZW50YXRpb249dCksaG8uZGVmaW5lZChuKT9pLnBhcmFtZXRlcnM9bjppLnBhcmFtZXRlcnM9W10saX0sKGppPUtpfHwoS2k9e30pKS5UZXh0PTEsamkuUmVhZD0yLGppLldyaXRlPTMsKFVpfHwoVWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17cmFuZ2U6ZX07cmV0dXJuIGhvLm51bWJlcih0KSYmKG4ua2luZD10KSxufSwocWk9Qml8fChCaT17fSkpLkZpbGU9MSxxaS5Nb2R1bGU9MixxaS5OYW1lc3BhY2U9MyxxaS5QYWNrYWdlPTQscWkuQ2xhc3M9NSxxaS5NZXRob2Q9NixxaS5Qcm9wZXJ0eT03LHFpLkZpZWxkPTgscWkuQ29uc3RydWN0b3I9OSxxaS5FbnVtPTEwLHFpLkludGVyZmFjZT0xMSxxaS5GdW5jdGlvbj0xMixxaS5WYXJpYWJsZT0xMyxxaS5Db25zdGFudD0xNCxxaS5TdHJpbmc9MTUscWkuTnVtYmVyPTE2LHFpLkJvb2xlYW49MTcscWkuQXJyYXk9MTgscWkuT2JqZWN0PTE5LHFpLktleT0yMCxxaS5OdWxsPTIxLHFpLkVudW1NZW1iZXI9MjIscWkuU3RydWN0PTIzLHFpLkV2ZW50PTI0LHFpLk9wZXJhdG9yPTI1LHFpLlR5cGVQYXJhbWV0ZXI9MjYsKCRpfHwoJGk9e30pKS5EZXByZWNhdGVkPTEsKFdpfHwoV2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz17bmFtZTplLGtpbmQ6dCxsb2NhdGlvbjp7dXJpOnIscmFuZ2U6bn19O3JldHVybiBpJiYoby5jb250YWluZXJOYW1lPWkpLG99LCh6aT1IaXx8KEhpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT17bmFtZTplLGRldGFpbDp0LGtpbmQ6bixyYW5nZTpyLHNlbGVjdGlvblJhbmdlOml9O3JldHVybiB2b2lkIDAhPT1vJiYoYS5jaGlsZHJlbj1vKSxhfSx6aS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiZoby5zdHJpbmcodC5uYW1lKSYmaG8ubnVtYmVyKHQua2luZCkmJmZyLmlzKHQucmFuZ2UpJiZmci5pcyh0LnNlbGVjdGlvblJhbmdlKSYmKHZvaWQgMD09PXQuZGV0YWlsfHxoby5zdHJpbmcodC5kZXRhaWwpKSYmKHZvaWQgMD09PXQuZGVwcmVjYXRlZHx8aG8uYm9vbGVhbih0LmRlcHJlY2F0ZWQpKSYmKHZvaWQgMD09PXQuY2hpbGRyZW58fEFycmF5LmlzQXJyYXkodC5jaGlsZHJlbikpJiYodm9pZCAwPT09dC50YWdzfHxBcnJheS5pc0FycmF5KHQudGFncykpfSwoSmk9R2l8fChHaT17fSkpLkVtcHR5PSIiLEppLlF1aWNrRml4PSJxdWlja2ZpeCIsSmkuUmVmYWN0b3I9InJlZmFjdG9yIixKaS5SZWZhY3RvckV4dHJhY3Q9InJlZmFjdG9yLmV4dHJhY3QiLEppLlJlZmFjdG9ySW5saW5lPSJyZWZhY3Rvci5pbmxpbmUiLEppLlJlZmFjdG9yUmV3cml0ZT0icmVmYWN0b3IucmV3cml0ZSIsSmkuU291cmNlPSJzb3VyY2UiLEppLlNvdXJjZU9yZ2FuaXplSW1wb3J0cz0ic291cmNlLm9yZ2FuaXplSW1wb3J0cyIsSmkuU291cmNlRml4QWxsPSJzb3VyY2UuZml4QWxsIiwoWmk9WGl8fChYaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXtkaWFnbm9zdGljczplfTtyZXR1cm4gbnVsbCE9dCYmKG4ub25seT10KSxufSxaaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZoby50eXBlZEFycmF5KHQuZGlhZ25vc3RpY3MsUnIuaXMpJiYodm9pZCAwPT09dC5vbmx5fHxoby50eXBlZEFycmF5KHQub25seSxoby5zdHJpbmcpKX0sKFFpPVlpfHwoWWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXt0aXRsZTplfSxpPSEwO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oaT0hMSxyLmtpbmQ9dCk6RnIuaXModCk/ci5jb21tYW5kPXQ6ci5lZGl0PXQsaSYmdm9pZCAwIT09biYmKHIua2luZD1uKSxyfSxRaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiZoby5zdHJpbmcodC50aXRsZSkmJih2b2lkIDA9PT10LmRpYWdub3N0aWNzfHxoby50eXBlZEFycmF5KHQuZGlhZ25vc3RpY3MsUnIuaXMpKSYmKHZvaWQgMD09PXQua2luZHx8aG8uc3RyaW5nKHQua2luZCkpJiYodm9pZCAwIT09dC5lZGl0fHx2b2lkIDAhPT10LmNvbW1hbmQpJiYodm9pZCAwPT09dC5jb21tYW5kfHxGci5pcyh0LmNvbW1hbmQpKSYmKHZvaWQgMD09PXQuaXNQcmVmZXJyZWR8fGhvLmJvb2xlYW4odC5pc1ByZWZlcnJlZCkpJiYodm9pZCAwPT09dC5lZGl0fHxlaS5pcyh0LmVkaXQpKX0sKHRvPWVvfHwoZW89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17cmFuZ2U6ZX07cmV0dXJuIGhvLmRlZmluZWQodCkmJihuLmRhdGE9dCksbn0sdG8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmZnIuaXModC5yYW5nZSkmJihoby51bmRlZmluZWQodC5jb21tYW5kKXx8RnIuaXModC5jb21tYW5kKSl9LChybz1ub3x8KG5vPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3RhYlNpemU6ZSxpbnNlcnRTcGFjZXM6dH19LHJvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnVpbnRlZ2VyKHQudGFiU2l6ZSkmJmhvLmJvb2xlYW4odC5pbnNlcnRTcGFjZXMpfSwob289aW98fChpbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJue3JhbmdlOmUsdGFyZ2V0OnQsZGF0YTpufX0sb28uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmZnIuaXModC5yYW5nZSkmJihoby51bmRlZmluZWQodC50YXJnZXQpfHxoby5zdHJpbmcodC50YXJnZXQpKX0sKHNvPWFvfHwoYW89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxwYXJlbnQ6dH19LHNvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHZvaWQgMCE9PXQmJmZyLmlzKHQucmFuZ2UpJiYodm9pZCAwPT09dC5wYXJlbnR8fHNvLmlzKHQucGFyZW50KSl9LGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTt2YXIgcj1lLmxlbmd0aC8yfDAsaT1lLnNsaWNlKDAsciksbz1lLnNsaWNlKHIpO3QoaSxuKSx0KG8sbik7Zm9yKHZhciBhPTAscz0wLGM9MDthPGkubGVuZ3RoJiZzPG8ubGVuZ3RoOyl7dmFyIGw9bihpW2FdLG9bc10pO2VbYysrXT1sPD0wP2lbYSsrXTpvW3MrK119Zm9yKDthPGkubGVuZ3RoOyllW2MrK109aVthKytdO2Zvcig7czxvLmxlbmd0aDspZVtjKytdPW9bcysrXTtyZXR1cm4gZX1lLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3IGdvKGUsdCxuLHIpfSxlLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuISEoaG8uZGVmaW5lZCh0KSYmaG8uc3RyaW5nKHQudXJpKSYmKGhvLnVuZGVmaW5lZCh0Lmxhbmd1YWdlSWQpfHxoby5zdHJpbmcodC5sYW5ndWFnZUlkKSkmJmhvLnVpbnRlZ2VyKHQubGluZUNvdW50KSYmaG8uZnVuYyh0LmdldFRleHQpJiZoby5mdW5jKHQucG9zaXRpb25BdCkmJmhvLmZ1bmModC5vZmZzZXRBdCkpfSxlLmFwcGx5RWRpdHM9ZnVuY3Rpb24oZSxuKXtmb3IodmFyIHI9ZS5nZXRUZXh0KCksaT10KG4sKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5yYW5nZS5zdGFydC5saW5lLXQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gMD09PW4/ZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXItdC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6bn0pKSxvPXIubGVuZ3RoLGE9aS5sZW5ndGgtMTthPj0wO2EtLSl7dmFyIHM9aVthXSxjPWUub2Zmc2V0QXQocy5yYW5nZS5zdGFydCksbD1lLm9mZnNldEF0KHMucmFuZ2UuZW5kKTtpZighKGw8PW8pKXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO3I9ci5zdWJzdHJpbmcoMCxjKStzLm5ld1RleHQrci5zdWJzdHJpbmcobCxyLmxlbmd0aCksbz1jfXJldHVybiByfX0oY298fChjbz17fSkpO3ZhciBobyxmbyxtbyxnbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PXIsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInVyaSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl91cml9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYW5ndWFnZUlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2ZXJzaW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZ2V0VGV4dD1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD10aGlzLm9mZnNldEF0KGUuc3RhcnQpLG49dGhpcy5vZmZzZXRBdChlLmVuZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHQsbil9cmV0dXJuIHRoaXMuX2NvbnRlbnR9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRlbnQ9ZS50ZXh0LHRoaXMuX3ZlcnNpb249dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9LGUucHJvdG90eXBlLmdldExpbmVPZmZzZXRzPWZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5fbGluZU9mZnNldHMpe2Zvcih2YXIgZT1bXSx0PXRoaXMuX2NvbnRlbnQsbj0hMCxyPTA7cjx0Lmxlbmd0aDtyKyspe24mJihlLnB1c2gociksbj0hMSk7dmFyIGk9dC5jaGFyQXQocik7bj0iXHIiPT09aXx8IlxuIj09PWksIlxyIj09PWkmJnIrMTx0Lmxlbmd0aCYmIlxuIj09PXQuY2hhckF0KHIrMSkmJnIrK31uJiZ0Lmxlbmd0aD4wJiZlLnB1c2godC5sZW5ndGgpLHRoaXMuX2xpbmVPZmZzZXRzPWV9cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzfSxlLnByb3RvdHlwZS5wb3NpdGlvbkF0PWZ1bmN0aW9uKGUpe2U9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7dmFyIHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpLG49MCxyPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybiB1ci5jcmVhdGUoMCxlKTtmb3IoO248cjspe3ZhciBpPU1hdGguZmxvb3IoKG4rcikvMik7dFtpXT5lP3I9aTpuPWkrMX12YXIgbz1uLTE7cmV0dXJuIHVyLmNyZWF0ZShvLGUtdFtvXSl9LGUucHJvdG90eXBlLm9mZnNldEF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDt2YXIgbj10W2UubGluZV0scj1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixyKSxuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsaW5lQ291bnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlfSgpO2ZvPWhvfHwoaG89e30pLG1vPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsZm8uZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZX0sZm8udW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfSxmby5ib29sZWFuPWZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZXx8ITE9PT1lfSxmby5zdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1tby5jYWxsKGUpfSxmby5udW1iZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1tby5jYWxsKGUpfSxmby5udW1iZXJSYW5nZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1tby5jYWxsKGUpJiZ0PD1lJiZlPD1ufSxmby5pbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09bW8uY2FsbChlKSYmLTIxNDc0ODM2NDg8PWUmJmU8PTIxNDc0ODM2NDd9LGZvLnVpbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09bW8uY2FsbChlKSYmMDw9ZSYmZTw9MjE0NzQ4MzY0N30sZm8uZnVuYz1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09bW8uY2FsbChlKX0sZm8ub2JqZWN0TGl0ZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX0sZm8udHlwZWRBcnJheT1mdW5jdGlvbihlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KHQpfTt2YXIgcG8sYm8sdm8seW8sQ28sd289Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PXIsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KGUpe2lmKGUpe2NvbnN0IHQ9dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxuPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyh0LG4pfXJldHVybiB0aGlzLl9jb250ZW50fXVwZGF0ZShlLHQpe2ZvcihsZXQgdCBvZiBlKWlmKHdvLmlzSW5jcmVtZW50YWwodCkpe2NvbnN0IGU9QW8odC5yYW5nZSksbj10aGlzLm9mZnNldEF0KGUuc3RhcnQpLHI9dGhpcy5vZmZzZXRBdChlLmVuZCk7dGhpcy5fY29udGVudD10aGlzLl9jb250ZW50LnN1YnN0cmluZygwLG4pK3QudGV4dCt0aGlzLl9jb250ZW50LnN1YnN0cmluZyhyLHRoaXMuX2NvbnRlbnQubGVuZ3RoKTtjb25zdCBpPU1hdGgubWF4KGUuc3RhcnQubGluZSwwKSxvPU1hdGgubWF4KGUuZW5kLmxpbmUsMCk7bGV0IGE9dGhpcy5fbGluZU9mZnNldHM7Y29uc3Qgcz1Tbyh0LnRleHQsITEsbik7aWYoby1pPT09cy5sZW5ndGgpZm9yKGxldCBlPTAsdD1zLmxlbmd0aDtlPHQ7ZSsrKWFbZStpKzFdPXNbZV07ZWxzZSBzLmxlbmd0aDwxZTQ/YS5zcGxpY2UoaSsxLG8taSwuLi5zKTp0aGlzLl9saW5lT2Zmc2V0cz1hPWEuc2xpY2UoMCxpKzEpLmNvbmNhdChzLGEuc2xpY2UobysxKSk7Y29uc3QgYz10LnRleHQubGVuZ3RoLShyLW4pO2lmKDAhPT1jKWZvcihsZXQgZT1pKzErcy5sZW5ndGgsdD1hLmxlbmd0aDtlPHQ7ZSsrKWFbZV09YVtlXStjfWVsc2V7aWYoIXdvLmlzRnVsbCh0KSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2hhbmdlIGV2ZW50IHJlY2VpdmVkIik7dGhpcy5fY29udGVudD10LnRleHQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfXRoaXMuX3ZlcnNpb249dH1nZXRMaW5lT2Zmc2V0cygpe3JldHVybiB2b2lkIDA9PT10aGlzLl9saW5lT2Zmc2V0cyYmKHRoaXMuX2xpbmVPZmZzZXRzPVNvKHRoaXMuX2NvbnRlbnQsITApKSx0aGlzLl9saW5lT2Zmc2V0c31wb3NpdGlvbkF0KGUpe2U9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7bGV0IHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpLG49MCxyPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybntsaW5lOjAsY2hhcmFjdGVyOmV9O2Zvcig7bjxyOyl7bGV0IGk9TWF0aC5mbG9vcigobityKS8yKTt0W2ldPmU/cj1pOm49aSsxfWxldCBpPW4tMTtyZXR1cm57bGluZTppLGNoYXJhY3RlcjplLXRbaV19fW9mZnNldEF0KGUpe2xldCB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDtsZXQgbj10W2UubGluZV0scj1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixyKSxuKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9c3RhdGljIGlzSW5jcmVtZW50YWwoZSl7bGV0IHQ9ZTtyZXR1cm4gbnVsbCE9dCYmInN0cmluZyI9PXR5cGVvZiB0LnRleHQmJnZvaWQgMCE9PXQucmFuZ2UmJih2b2lkIDA9PT10LnJhbmdlTGVuZ3RofHwibnVtYmVyIj09dHlwZW9mIHQucmFuZ2VMZW5ndGgpfXN0YXRpYyBpc0Z1bGwoZSl7bGV0IHQ9ZTtyZXR1cm4gbnVsbCE9dCYmInN0cmluZyI9PXR5cGVvZiB0LnRleHQmJnZvaWQgMD09PXQucmFuZ2UmJnZvaWQgMD09PXQucmFuZ2VMZW5ndGh9fTtmdW5jdGlvbiBfbyhlLHQpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IG49ZS5sZW5ndGgvMnwwLHI9ZS5zbGljZSgwLG4pLGk9ZS5zbGljZShuKTtfbyhyLHQpLF9vKGksdCk7bGV0IG89MCxhPTAscz0wO2Zvcig7bzxyLmxlbmd0aCYmYTxpLmxlbmd0aDspe2xldCBuPXQocltvXSxpW2FdKTtlW3MrK109bjw9MD9yW28rK106aVthKytdfWZvcig7bzxyLmxlbmd0aDspZVtzKytdPXJbbysrXTtmb3IoO2E8aS5sZW5ndGg7KWVbcysrXT1pW2ErK107cmV0dXJuIGV9ZnVuY3Rpb24gU28oZSx0LG49MCl7Y29uc3Qgcj10P1tuXTpbXTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IGk9ZS5jaGFyQ29kZUF0KHQpOzEzIT09aSYmMTAhPT1pfHwoMTM9PT1pJiZ0KzE8ZS5sZW5ndGgmJjEwPT09ZS5jaGFyQ29kZUF0KHQrMSkmJnQrKyxyLnB1c2gobit0KzEpKX1yZXR1cm4gcn1mdW5jdGlvbiBBbyhlKXtjb25zdCB0PWUuc3RhcnQsbj1lLmVuZDtyZXR1cm4gdC5saW5lPm4ubGluZXx8dC5saW5lPT09bi5saW5lJiZ0LmNoYXJhY3Rlcj5uLmNoYXJhY3Rlcj97c3RhcnQ6bixlbmQ6dH06ZX1mdW5jdGlvbiBFbyhlKXtjb25zdCB0PUFvKGUucmFuZ2UpO3JldHVybiB0IT09ZS5yYW5nZT97bmV3VGV4dDplLm5ld1RleHQscmFuZ2U6dH06ZX1mdW5jdGlvbiB4byhlLHQsLi4ubil7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7bGV0IG47cmV0dXJuIG49MD09PXQubGVuZ3RoP2U6ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoKGUsbik9PntsZXQgcj1uWzBdO3JldHVybiB2b2lkIDAhPT10W3JdP3Rbcl06ZX0pKSxufSh0LG4pfWZ1bmN0aW9uIE5vKGUpe3JldHVybiB4b30oYm89cG98fChwbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3IHdvKGUsdCxuLHIpfSxiby51cGRhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKGUgaW5zdGFuY2VvZiB3bylyZXR1cm4gZS51cGRhdGUodCxuKSxlO3Rocm93IG5ldyBFcnJvcigiVGV4dERvY3VtZW50LnVwZGF0ZTogZG9jdW1lbnQgbXVzdCBiZSBjcmVhdGVkIGJ5IFRleHREb2N1bWVudC5jcmVhdGUiKX0sYm8uYXBwbHlFZGl0cz1mdW5jdGlvbihlLHQpe2xldCBuPWUuZ2V0VGV4dCgpLHI9X28odC5tYXAoRW8pLCgoZSx0KT0+e2xldCBuPWUucmFuZ2Uuc3RhcnQubGluZS10LnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIDA9PT1uP2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOm59KSksaT0wO2NvbnN0IG89W107Zm9yKGNvbnN0IHQgb2Ygcil7bGV0IHI9ZS5vZmZzZXRBdCh0LnJhbmdlLnN0YXJ0KTtpZihyPGkpdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7cj5pJiZvLnB1c2gobi5zdWJzdHJpbmcoaSxyKSksdC5uZXdUZXh0Lmxlbmd0aCYmby5wdXNoKHQubmV3VGV4dCksaT1lLm9mZnNldEF0KHQucmFuZ2UuZW5kKX1yZXR1cm4gby5wdXNoKG4uc3Vic3RyKGkpKSxvLmpvaW4oIiIpfSwoeW89dm98fCh2bz17fSkpW3lvLlVuZGVmaW5lZD0wXT0iVW5kZWZpbmVkIix5b1t5by5FbnVtVmFsdWVNaXNtYXRjaD0xXT0iRW51bVZhbHVlTWlzbWF0Y2giLHlvW3lvLkRlcHJlY2F0ZWQ9Ml09IkRlcHJlY2F0ZWQiLHlvW3lvLlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQ9MjU3XT0iVW5leHBlY3RlZEVuZE9mQ29tbWVudCIseW9beW8uVW5leHBlY3RlZEVuZE9mU3RyaW5nPTI1OF09IlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIseW9beW8uVW5leHBlY3RlZEVuZE9mTnVtYmVyPTI1OV09IlVuZXhwZWN0ZWRFbmRPZk51bWJlciIseW9beW8uSW52YWxpZFVuaWNvZGU9MjYwXT0iSW52YWxpZFVuaWNvZGUiLHlvW3lvLkludmFsaWRFc2NhcGVDaGFyYWN0ZXI9MjYxXT0iSW52YWxpZEVzY2FwZUNoYXJhY3RlciIseW9beW8uSW52YWxpZENoYXJhY3Rlcj0yNjJdPSJJbnZhbGlkQ2hhcmFjdGVyIix5b1t5by5Qcm9wZXJ0eUV4cGVjdGVkPTUxM109IlByb3BlcnR5RXhwZWN0ZWQiLHlvW3lvLkNvbW1hRXhwZWN0ZWQ9NTE0XT0iQ29tbWFFeHBlY3RlZCIseW9beW8uQ29sb25FeHBlY3RlZD01MTVdPSJDb2xvbkV4cGVjdGVkIix5b1t5by5WYWx1ZUV4cGVjdGVkPTUxNl09IlZhbHVlRXhwZWN0ZWQiLHlvW3lvLkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkPTUxN109IkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkIix5b1t5by5Db21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkPTUxOF09IkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQiLHlvW3lvLlRyYWlsaW5nQ29tbWE9NTE5XT0iVHJhaWxpbmdDb21tYSIseW9beW8uRHVwbGljYXRlS2V5PTUyMF09IkR1cGxpY2F0ZUtleSIseW9beW8uQ29tbWVudE5vdFBlcm1pdHRlZD01MjFdPSJDb21tZW50Tm90UGVybWl0dGVkIix5b1t5by5TY2hlbWFSZXNvbHZlRXJyb3I9NzY4XT0iU2NoZW1hUmVzb2x2ZUVycm9yIiwoQ298fChDbz17fSkpLkxBVEVTVD17dGV4dERvY3VtZW50Ontjb21wbGV0aW9uOntjb21wbGV0aW9uSXRlbTp7ZG9jdW1lbnRhdGlvbkZvcm1hdDpbQ2kuTWFya2Rvd24sQ2kuUGxhaW5UZXh0XSxjb21taXRDaGFyYWN0ZXJzU3VwcG9ydDohMH19fX07dmFyIGtvLExvLFRvLE9vPShrbz1mdW5jdGlvbihlLHQpe3JldHVybihrbz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHQpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9a28oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9KSxJbz1ObygpLE1vPXsiY29sb3ItaGV4Ijp7ZXJyb3JNZXNzYWdlOklvKCJjb2xvckhleEZvcm1hdFdhcm5pbmciLCJJbnZhbGlkIGNvbG9yIGZvcm1hdC4gVXNlICNSR0IsICNSR0JBLCAjUlJHR0JCIG9yICNSUkdHQkJBQS4iKSxwYXR0ZXJuOi9eIyhbMC05QS1GYS1mXXszLDR9fChbMC05QS1GYS1mXXsyfSl7Myw0fSkkL30sImRhdGUtdGltZSI6e2Vycm9yTWVzc2FnZTpJbygiZGF0ZVRpbWVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFJGQzMzMzkgZGF0ZS10aW1lLiIpLHBhdHRlcm46L14oXGR7NH0pLSgwWzEtOV18MVswLTJdKS0oMFsxLTldfFsxMl1bMC05XXwzWzAxXSlUKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKTooWzAtNV1bMC05XXw2MCkoXC5bMC05XSspPyhafChcK3wtKShbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSkpJC9pfSxkYXRlOntlcnJvck1lc3NhZ2U6SW8oImRhdGVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFJGQzMzMzkgZGF0ZS4iKSxwYXR0ZXJuOi9eKFxkezR9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdWzAtOV18M1swMV0pJC9pfSx0aW1lOntlcnJvck1lc3NhZ2U6SW8oInRpbWVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFJGQzMzMzkgdGltZS4iKSxwYXR0ZXJuOi9eKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKTooWzAtNV1bMC05XXw2MCkoXC5bMC05XSspPyhafChcK3wtKShbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSkpJC9pfSxlbWFpbDp7ZXJyb3JNZXNzYWdlOklvKCJlbWFpbEZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIGUtbWFpbCBhZGRyZXNzLiIpLHBhdHRlcm46L14oKFtePD4oKVxbXF1cXC4sOzpcc0AiXSsoXC5bXjw+KClcW1xdXFwuLDs6XHNAIl0rKSopfCgiLisiKSlAKChcW1swLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31dKXwoKFthLXpBLVowLTktXStcLikrW2EtekEtWl17Mix9KSkkL30saG9zdG5hbWU6e2Vycm9yTWVzc2FnZTpJbygiaG9zdG5hbWVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIGhvc3RuYW1lLiIpLHBhdHRlcm46L14oPz0uezEsMjUzfVwuPyQpW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KD86XC5bYS16MC05XSg/OlstMC05YS16XXswLDYxfVswLTlhLXpdKT8pKlwuPyQvaX0saXB2NDp7ZXJyb3JNZXNzYWdlOklvKCJpcHY0Rm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYW4gSVB2NCBhZGRyZXNzLiIpLHBhdHRlcm46L14oPzooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKVwuKXszfSg/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpJC99LGlwdjY6e2Vycm9yTWVzc2FnZTpJbygiaXB2NkZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIElQdjYgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKCgoWzAtOWEtZl17MSw0fTopezd9KFswLTlhLWZdezEsNH18OikpfCgoWzAtOWEtZl17MSw0fTopezZ9KDpbMC05YS1mXXsxLDR9fCgoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05YS1mXXsxLDR9Oil7NX0oKCg6WzAtOWEtZl17MSw0fSl7MSwyfSl8OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05YS1mXXsxLDR9Oil7NH0oKCg6WzAtOWEtZl17MSw0fSl7MSwzfSl8KCg6WzAtOWEtZl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezN9KCgoOlswLTlhLWZdezEsNH0pezEsNH0pfCgoOlswLTlhLWZdezEsNH0pezAsMn06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7Mn0oKCg6WzAtOWEtZl17MSw0fSl7MSw1fSl8KCg6WzAtOWEtZl17MSw0fSl7MCwzfTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXsxfSgoKDpbMC05YS1mXXsxLDR9KXsxLDZ9KXwoKDpbMC05YS1mXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCg6KCgoOlswLTlhLWZdezEsNH0pezEsN30pfCgoOlswLTlhLWZdezEsNH0pezAsNX06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSkpJC9pfX0sUG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2b2lkIDA9PT1uJiYobj0wKSx0aGlzLm9mZnNldD10LHRoaXMubGVuZ3RoPW4sdGhpcy5wYXJlbnQ9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInR5cGU6ICIrdGhpcy50eXBlKyIgKCIrdGhpcy5vZmZzZXQrIi8iK3RoaXMubGVuZ3RoKyIpIisodGhpcy5wYXJlbnQ/IiBwYXJlbnQ6IHsiK3RoaXMucGFyZW50LnRvU3RyaW5nKCkrIn0iOiIiKX0sZX0oKSxSbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJudWxsIixyLnZhbHVlPW51bGwscn1yZXR1cm4gT28odCxlKSx0fShQbyksVm89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4scil7dmFyIGk9ZS5jYWxsKHRoaXMsdCxyKXx8dGhpcztyZXR1cm4gaS50eXBlPSJib29sZWFuIixpLnZhbHVlPW4saX1yZXR1cm4gT28odCxlKSx0fShQbyksRm89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIudHlwZT0iYXJyYXkiLHIuaXRlbXM9W10scn1yZXR1cm4gT28odCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlbXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdH0oUG8pLERvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9Im51bWJlciIsci5pc0ludGVnZXI9ITAsci52YWx1ZT1OdW1iZXIuTmFOLHJ9cmV0dXJuIE9vKHQsZSksdH0oUG8pLEtvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQsbixyKXx8dGhpcztyZXR1cm4gaS50eXBlPSJzdHJpbmciLGkudmFsdWU9IiIsaX1yZXR1cm4gT28odCxlKSx0fShQbyksam89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4scil7dmFyIGk9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gaS50eXBlPSJwcm9wZXJ0eSIsaS5jb2xvbk9mZnNldD0tMSxpLmtleU5vZGU9cixpfXJldHVybiBPbyh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZU5vZGU/W3RoaXMua2V5Tm9kZSx0aGlzLnZhbHVlTm9kZV06W3RoaXMua2V5Tm9kZV19LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdH0oUG8pLFVvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9Im9iamVjdCIsci5wcm9wZXJ0aWVzPVtdLHJ9cmV0dXJuIE9vKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BlcnRpZXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdH0oUG8pO2Z1bmN0aW9uIEJvKGUpe3JldHVybiBsaShlKT9lP3t9Ontub3Q6e319OmV9KFRvPUxvfHwoTG89e30pKVtUby5LZXk9MF09IktleSIsVG9bVG8uRW51bT0xXT0iRW51bSI7dmFyIHFvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PWUmJihlPS0xKSx0aGlzLmZvY3VzT2Zmc2V0PWUsdGhpcy5leGNsdWRlPXQsdGhpcy5zY2hlbWFzPVtdfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5zY2hlbWFzLnB1c2goZSl9LGUucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKGUpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuc2NoZW1hcyxlLnNjaGVtYXMpfSxlLnByb3RvdHlwZS5pbmNsdWRlPWZ1bmN0aW9uKGUpe3JldHVybigtMT09PXRoaXMuZm9jdXNPZmZzZXR8fEdvKGUsdGhpcy5mb2N1c09mZnNldCkpJiZlIT09dGhpcy5leGNsdWRlfSxlLnByb3RvdHlwZS5uZXdTdWI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUoLTEsdGhpcy5leGNsdWRlKX0sZX0oKSwkbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2NoZW1hcyIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt9LGUucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKGUpe30sZS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbihlKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUubmV3U3ViPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUuaW5zdGFuY2U9bmV3IGUsZX0oKSxXbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnByb2JsZW1zPVtdLHRoaXMucHJvcGVydGllc01hdGNoZXM9MCx0aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM9MCx0aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXM9MCx0aGlzLmVudW1WYWx1ZU1hdGNoPSExLHRoaXMuZW51bVZhbHVlcz12b2lkIDB9cmV0dXJuIGUucHJvdG90eXBlLmhhc1Byb2JsZW1zPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnByb2JsZW1zLmxlbmd0aH0sZS5wcm90b3R5cGUubWVyZ2VBbGw9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1lO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO3RoaXMubWVyZ2Uocil9fSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXt0aGlzLnByb2JsZW1zPXRoaXMucHJvYmxlbXMuY29uY2F0KGUucHJvYmxlbXMpfSxlLnByb3RvdHlwZS5tZXJnZUVudW1WYWx1ZXM9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZW51bVZhbHVlTWF0Y2gmJiFlLmVudW1WYWx1ZU1hdGNoJiZ0aGlzLmVudW1WYWx1ZXMmJmUuZW51bVZhbHVlcyl7dGhpcy5lbnVtVmFsdWVzPXRoaXMuZW51bVZhbHVlcy5jb25jYXQoZS5lbnVtVmFsdWVzKTtmb3IodmFyIHQ9MCxuPXRoaXMucHJvYmxlbXM7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07ci5jb2RlPT09dm8uRW51bVZhbHVlTWlzbWF0Y2gmJihyLm1lc3NhZ2U9SW8oImVudW1XYXJuaW5nIiwiVmFsdWUgaXMgbm90IGFjY2VwdGVkLiBWYWxpZCB2YWx1ZXM6IHswfS4iLHRoaXMuZW51bVZhbHVlcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0pKS5qb2luKCIsICIpKSl9fX0sZS5wcm90b3R5cGUubWVyZ2VQcm9wZXJ0eU1hdGNoPWZ1bmN0aW9uKGUpe3RoaXMubWVyZ2UoZSksdGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcysrLChlLmVudW1WYWx1ZU1hdGNofHwhZS5oYXNQcm9ibGVtcygpJiZlLnByb3BlcnRpZXNNYXRjaGVzKSYmdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyssZS5lbnVtVmFsdWVNYXRjaCYmZS5lbnVtVmFsdWVzJiYxPT09ZS5lbnVtVmFsdWVzLmxlbmd0aCYmdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzKyt9LGUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oYXNQcm9ibGVtcygpO3JldHVybiB0IT09ZS5oYXNQcm9ibGVtcygpP3Q/LTE6MTp0aGlzLmVudW1WYWx1ZU1hdGNoIT09ZS5lbnVtVmFsdWVNYXRjaD9lLmVudW1WYWx1ZU1hdGNoPy0xOjE6dGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzIT09ZS5wcmltYXJ5VmFsdWVNYXRjaGVzP3RoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcy1lLnByaW1hcnlWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzIT09ZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzP3RoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcy1lLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcy1lLnByb3BlcnRpZXNNYXRjaGVzfSxlfSgpO2Z1bmN0aW9uIEhvKGUpe3JldHVybiBvaShlKX1mdW5jdGlvbiB6byhlKXtyZXR1cm4gaWkoZSl9ZnVuY3Rpb24gR28oZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0hMSksdD49ZS5vZmZzZXQmJnQ8ZS5vZmZzZXQrZS5sZW5ndGh8fG4mJnQ9PT1lLm9mZnNldCtlLmxlbmd0aH12YXIgSm89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49W10pLHRoaXMucm9vdD1lLHRoaXMuc3ludGF4RXJyb3JzPXQsdGhpcy5jb21tZW50cz1ufXJldHVybiBlLnByb3RvdHlwZS5nZXROb2RlRnJvbU9mZnNldD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PSExKSx0aGlzLnJvb3QpcmV0dXJuIHJpKHRoaXMucm9vdCxlLHQpfSxlLnByb3RvdHlwZS52aXNpdD1mdW5jdGlvbihlKXtpZih0aGlzLnJvb3Qpe3ZhciB0PWZ1bmN0aW9uKG4pe3ZhciByPWUobiksaT1uLmNoaWxkcmVuO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aCYmcjtvKyspcj10KGlbb10pO3JldHVybiByfTt0KHRoaXMucm9vdCl9fSxlLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihlLHQsbil7aWYodm9pZCAwPT09biYmKG49VHIuV2FybmluZyksdGhpcy5yb290JiZ0KXt2YXIgcj1uZXcgV287cmV0dXJuIFhvKHRoaXMucm9vdCx0LHIsJG8uaW5zdGFuY2UpLHIucHJvYmxlbXMubWFwKChmdW5jdGlvbih0KXt2YXIgcixpPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5sb2NhdGlvbi5vZmZzZXQpLGUucG9zaXRpb25BdCh0LmxvY2F0aW9uLm9mZnNldCt0LmxvY2F0aW9uLmxlbmd0aCkpO3JldHVybiBSci5jcmVhdGUoaSx0Lm1lc3NhZ2UsbnVsbCE9PShyPXQuc2V2ZXJpdHkpJiZ2b2lkIDAhPT1yP3I6bix0LmNvZGUpfSkpfX0sZS5wcm90b3R5cGUuZ2V0TWF0Y2hpbmdTY2hlbWFzPWZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT10JiYodD0tMSk7dmFyIHI9bmV3IHFvKHQsbik7cmV0dXJuIHRoaXMucm9vdCYmZSYmWG8odGhpcy5yb290LGUsbmV3IFdvLHIpLHIuc2NoZW1hc30sZX0oKTtmdW5jdGlvbiBYbyhlLHQsbixyKXtpZihlJiZyLmluY2x1ZGUoZSkpe3ZhciBpPWU7c3dpdGNoKGkudHlwZSl7Y2FzZSJvYmplY3QiOiFmdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKSxvPVtdLGE9MCxzPWUucHJvcGVydGllczthPHMubGVuZ3RoO2ErKyl7aVtLPShwPXNbYV0pLmtleU5vZGUudmFsdWVdPXAudmFsdWVOb2RlLG8ucHVzaChLKX1pZihBcnJheS5pc0FycmF5KHQucmVxdWlyZWQpKWZvcih2YXIgYz0wLGw9dC5yZXF1aXJlZDtjPGwubGVuZ3RoO2MrKyl7aWYoIWlbUz1sW2NdXSl7dmFyIHU9ZS5wYXJlbnQmJiJwcm9wZXJ0eSI9PT1lLnBhcmVudC50eXBlJiZlLnBhcmVudC5rZXlOb2RlLGg9dT97b2Zmc2V0OnUub2Zmc2V0LGxlbmd0aDp1Lmxlbmd0aH06e29mZnNldDplLm9mZnNldCxsZW5ndGg6MX07bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjpoLG1lc3NhZ2U6SW8oIk1pc3NpbmdSZXF1aXJlZFByb3BXYXJuaW5nIiwnTWlzc2luZyBwcm9wZXJ0eSAiezB9Ii4nLFMpfSl9fXZhciBmPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1vLmluZGV4T2YoZSk7dD49MDspby5zcGxpY2UodCwxKSx0PW8uaW5kZXhPZihlKX07aWYodC5wcm9wZXJ0aWVzKWZvcih2YXIgZD0wLG09T2JqZWN0LmtleXModC5wcm9wZXJ0aWVzKTtkPG0ubGVuZ3RoO2QrKyl7ZihTPW1bZF0pO3ZhciBnPXQucHJvcGVydGllc1tTXTtpZihMPWlbU10paWYobGkoZykpaWYoZyluLnByb3BlcnRpZXNNYXRjaGVzKyssbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKys7ZWxzZXt2YXIgcD1MLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6cC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8SW8oIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsUyl9KX1lbHNlIFhvKEwsZyx4PW5ldyBXbyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaCh4KX1pZih0LnBhdHRlcm5Qcm9wZXJ0aWVzKWZvcih2YXIgYj0wLHY9T2JqZWN0LmtleXModC5wYXR0ZXJuUHJvcGVydGllcyk7Yjx2Lmxlbmd0aDtiKyspZm9yKHZhciB5PXZbYl0sQz1oaSh5KSx3PTAsXz1vLnNsaWNlKDApO3c8Xy5sZW5ndGg7dysrKXt2YXIgUz1fW3ddO2lmKG51bGw9PUM/dm9pZCAwOkMudGVzdChTKSlpZihmKFMpLEw9aVtTXSlpZihsaShnPXQucGF0dGVyblByb3BlcnRpZXNbeV0pKWlmKGcpbi5wcm9wZXJ0aWVzTWF0Y2hlcysrLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2V7cD1MLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6cC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8SW8oIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsUyl9KX1lbHNlIFhvKEwsZyx4PW5ldyBXbyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaCh4KX1pZigib2JqZWN0Ij09dHlwZW9mIHQuYWRkaXRpb25hbFByb3BlcnRpZXMpZm9yKHZhciBBPTAsRT1vO0E8RS5sZW5ndGg7QSsrKXtpZihMPWlbUz1FW0FdXSl7dmFyIHg9bmV3IFdvO1hvKEwsdC5hZGRpdGlvbmFsUHJvcGVydGllcyx4LHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHgpfX1lbHNlIGlmKCExPT09dC5hZGRpdGlvbmFsUHJvcGVydGllcyYmby5sZW5ndGg+MClmb3IodmFyIE49MCxrPW87TjxrLmxlbmd0aDtOKyspe3ZhciBMO2lmKEw9aVtTPWtbTl1dKXtwPUwucGFyZW50O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpwLmtleU5vZGUub2Zmc2V0LGxlbmd0aDpwLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygiRGlzYWxsb3dlZEV4dHJhUHJvcFdhcm5pbmciLCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIixTKX0pfX1zaSh0Lm1heFByb3BlcnRpZXMpJiZlLnByb3BlcnRpZXMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiTWF4UHJvcFdhcm5pbmciLCJPYmplY3QgaGFzIG1vcmUgcHJvcGVydGllcyB0aGFuIGxpbWl0IG9mIHswfS4iLHQubWF4UHJvcGVydGllcyl9KTtzaSh0Lm1pblByb3BlcnRpZXMpJiZlLnByb3BlcnRpZXMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiTWluUHJvcFdhcm5pbmciLCJPYmplY3QgaGFzIGZld2VyIHByb3BlcnRpZXMgdGhhbiB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIHswfSIsdC5taW5Qcm9wZXJ0aWVzKX0pO2lmKHQuZGVwZW5kZW5jaWVzKWZvcih2YXIgVD0wLE89T2JqZWN0LmtleXModC5kZXBlbmRlbmNpZXMpO1Q8Ty5sZW5ndGg7VCsrKXtpZihpW0s9T1tUXV0pe3ZhciBJPXQuZGVwZW5kZW5jaWVzW0tdO2lmKEFycmF5LmlzQXJyYXkoSSkpZm9yKHZhciBNPTAsUD1JO008UC5sZW5ndGg7TSsrKXt2YXIgUj1QW01dO2lbUl0/bi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKys6bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiUmVxdWlyZWREZXBlbmRlbnRQcm9wV2FybmluZyIsIk9iamVjdCBpcyBtaXNzaW5nIHByb3BlcnR5IHswfSByZXF1aXJlZCBieSBwcm9wZXJ0eSB7MX0uIixSLEspfSl9ZWxzZSBpZihnPUJvKEkpKVhvKGUsZyx4PW5ldyBXbyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaCh4KX19dmFyIFY9Qm8odC5wcm9wZXJ0eU5hbWVzKTtpZihWKWZvcih2YXIgRj0wLEQ9ZS5wcm9wZXJ0aWVzO0Y8RC5sZW5ndGg7RisrKXt2YXIgSzsoSz1EW0ZdLmtleU5vZGUpJiZYbyhLLFYsbiwkby5pbnN0YW5jZSl9fShpLHQsbixyKTticmVhaztjYXNlImFycmF5IjohZnVuY3Rpb24oZSx0LG4scil7aWYoQXJyYXkuaXNBcnJheSh0Lml0ZW1zKSl7Zm9yKHZhciBpPXQuaXRlbXMsbz0wO288aS5sZW5ndGg7bysrKXt2YXIgYT1CbyhpW29dKSxzPW5ldyBXbzsoZj1lLml0ZW1zW29dKT8oWG8oZixhLHMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2gocykpOmUuaXRlbXMubGVuZ3RoPj1pLmxlbmd0aCYmbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyt9aWYoZS5pdGVtcy5sZW5ndGg+aS5sZW5ndGgpaWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxJdGVtcylmb3IodmFyIGM9aS5sZW5ndGg7YzxlLml0ZW1zLmxlbmd0aDtjKyspe3M9bmV3IFdvO1hvKGUuaXRlbXNbY10sdC5hZGRpdGlvbmFsSXRlbXMscyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaChzKX1lbHNlITE9PT10LmFkZGl0aW9uYWxJdGVtcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiYWRkaXRpb25hbEl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcyBhY2NvcmRpbmcgdG8gc2NoZW1hLiBFeHBlY3RlZCB7MH0gb3IgZmV3ZXIuIixpLmxlbmd0aCl9KX1lbHNle3ZhciBsPUJvKHQuaXRlbXMpO2lmKGwpZm9yKHZhciB1PTAsaD1lLml0ZW1zO3U8aC5sZW5ndGg7dSsrKXt2YXIgZjtYbyhmPWhbdV0sbCxzPW5ldyBXbyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaChzKX19dmFyIGQ9Qm8odC5jb250YWlucyk7aWYoZCl7ZS5pdGVtcy5zb21lKChmdW5jdGlvbihlKXt2YXIgdD1uZXcgV287cmV0dXJuIFhvKGUsZCx0LCRvLmluc3RhbmNlKSwhdC5oYXNQcm9ibGVtcygpfSkpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygicmVxdWlyZWRJdGVtTWlzc2luZ1dhcm5pbmciLCJBcnJheSBkb2VzIG5vdCBjb250YWluIHJlcXVpcmVkIGl0ZW0uIil9KX1zaSh0Lm1pbkl0ZW1zKSYmZS5pdGVtcy5sZW5ndGg8dC5taW5JdGVtcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWluSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBmZXcgaXRlbXMuIEV4cGVjdGVkIHswfSBvciBtb3JlLiIsdC5taW5JdGVtcyl9KTtzaSh0Lm1heEl0ZW1zKSYmZS5pdGVtcy5sZW5ndGg+dC5tYXhJdGVtcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWF4SXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBtYW55IGl0ZW1zLiBFeHBlY3RlZCB7MH0gb3IgZmV3ZXIuIix0Lm1heEl0ZW1zKX0pO2lmKCEwPT09dC51bmlxdWVJdGVtcyl7dmFyIG09SG8oZSk7bS5zb21lKChmdW5jdGlvbihlLHQpe3JldHVybiB0IT09bS5sYXN0SW5kZXhPZihlKX0pKSYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygidW5pcXVlSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIGR1cGxpY2F0ZSBpdGVtcy4iKX0pfX0oaSx0LG4scik7YnJlYWs7Y2FzZSJzdHJpbmciOiFmdW5jdGlvbihlLHQsbixyKXtzaSh0Lm1pbkxlbmd0aCkmJmUudmFsdWUubGVuZ3RoPHQubWluTGVuZ3RoJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtaW5MZW5ndGhXYXJuaW5nIiwiU3RyaW5nIGlzIHNob3J0ZXIgdGhhbiB0aGUgbWluaW11bSBsZW5ndGggb2YgezB9LiIsdC5taW5MZW5ndGgpfSk7c2kodC5tYXhMZW5ndGgpJiZlLnZhbHVlLmxlbmd0aD50Lm1heExlbmd0aCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWF4TGVuZ3RoV2FybmluZyIsIlN0cmluZyBpcyBsb25nZXIgdGhhbiB0aGUgbWF4aW11bSBsZW5ndGggb2YgezB9LiIsdC5tYXhMZW5ndGgpfSk7aWYobz10LnBhdHRlcm4sInN0cmluZyI9PXR5cGVvZiBvKXt2YXIgaT1oaSh0LnBhdHRlcm4pOyhudWxsPT1pP3ZvaWQgMDppLnRlc3QoZS52YWx1ZSkpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQucGF0dGVybkVycm9yTWVzc2FnZXx8dC5lcnJvck1lc3NhZ2V8fElvKCJwYXR0ZXJuV2FybmluZyIsJ1N0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0dGVybiBvZiAiezB9Ii4nLHQucGF0dGVybil9KX12YXIgbztpZih0LmZvcm1hdClzd2l0Y2godC5mb3JtYXQpe2Nhc2UidXJpIjpjYXNlInVyaS1yZWZlcmVuY2UiOnZhciBhPXZvaWQgMDtpZihlLnZhbHVlKXt2YXIgcz0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/Ly5leGVjKGUudmFsdWUpO3M/c1syXXx8InVyaSIhPT10LmZvcm1hdHx8KGE9SW8oInVyaVNjaGVtZU1pc3NpbmciLCJVUkkgd2l0aCBhIHNjaGVtZSBpcyBleHBlY3RlZC4iKSk6YT1JbygidXJpTWlzc2luZyIsIlVSSSBpcyBleHBlY3RlZC4iKX1lbHNlIGE9SW8oInVyaUVtcHR5IiwiVVJJIGV4cGVjdGVkLiIpO2EmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8SW8oInVyaUZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGEgVVJJOiB7MH0iLGEpfSk7YnJlYWs7Y2FzZSJjb2xvci1oZXgiOmNhc2UiZGF0ZS10aW1lIjpjYXNlImRhdGUiOmNhc2UidGltZSI6Y2FzZSJlbWFpbCI6Y2FzZSJob3N0bmFtZSI6Y2FzZSJpcHY0IjpjYXNlImlwdjYiOnZhciBjPU1vW3QuZm9ybWF0XTtlLnZhbHVlJiZjLnBhdHRlcm4uZXhlYyhlLnZhbHVlKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LnBhdHRlcm5FcnJvck1lc3NhZ2V8fHQuZXJyb3JNZXNzYWdlfHxjLmVycm9yTWVzc2FnZX0pfX0oaSx0LG4pO2JyZWFrO2Nhc2UibnVtYmVyIjohZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS52YWx1ZTtmdW5jdGlvbiBvKGUpe3ZhciB0LG49L14oLT9cZCspKD86XC4oXGQrKSk/KD86ZShbLStdXGQrKSk/JC8uZXhlYyhlLnRvU3RyaW5nKCkpO3JldHVybiBuJiZ7dmFsdWU6TnVtYmVyKG5bMV0rKG5bMl18fCIiKSksbXVsdGlwbGllcjooKG51bGw9PT0odD1uWzJdKXx8dm9pZCAwPT09dD92b2lkIDA6dC5sZW5ndGgpfHwwKS0ocGFyc2VJbnQoblszXSl8fDApfX1pZihzaSh0Lm11bHRpcGxlT2YpKXt2YXIgYT0tMTtpZihOdW1iZXIuaXNJbnRlZ2VyKHQubXVsdGlwbGVPZikpYT1pJXQubXVsdGlwbGVPZjtlbHNle3ZhciBzPW8odC5tdWx0aXBsZU9mKSxjPW8oaSk7aWYocyYmYyl7dmFyIGw9TWF0aC5wb3coMTAsTWF0aC5hYnMoYy5tdWx0aXBsaWVyLXMubXVsdGlwbGllcikpO2MubXVsdGlwbGllcjxzLm11bHRpcGxpZXI/Yy52YWx1ZSo9bDpzLnZhbHVlKj1sLGE9Yy52YWx1ZSVzLnZhbHVlfX0wIT09YSYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibXVsdGlwbGVPZldhcm5pbmciLCJWYWx1ZSBpcyBub3QgZGl2aXNpYmxlIGJ5IHswfS4iLHQubXVsdGlwbGVPZil9KX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHNpKHQpP3Q6bGkodCkmJnQ/ZTp2b2lkIDB9ZnVuY3Rpb24gaChlLHQpe2lmKCFsaSh0KXx8IXQpcmV0dXJuIGV9dmFyIGY9dSh0Lm1pbmltdW0sdC5leGNsdXNpdmVNaW5pbXVtKTtzaShmKSYmaTw9ZiYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiZXhjbHVzaXZlTWluaW11bVdhcm5pbmciLCJWYWx1ZSBpcyBiZWxvdyB0aGUgZXhjbHVzaXZlIG1pbmltdW0gb2YgezB9LiIsZil9KTt2YXIgZD11KHQubWF4aW11bSx0LmV4Y2x1c2l2ZU1heGltdW0pO3NpKGQpJiZpPj1kJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJleGNsdXNpdmVNYXhpbXVtV2FybmluZyIsIlZhbHVlIGlzIGFib3ZlIHRoZSBleGNsdXNpdmUgbWF4aW11bSBvZiB7MH0uIixkKX0pO3ZhciBtPWgodC5taW5pbXVtLHQuZXhjbHVzaXZlTWluaW11bSk7c2kobSkmJmk8bSYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWluaW11bVdhcm5pbmciLCJWYWx1ZSBpcyBiZWxvdyB0aGUgbWluaW11bSBvZiB7MH0uIixtKX0pO3ZhciBnPWgodC5tYXhpbXVtLHQuZXhjbHVzaXZlTWF4aW11bSk7c2koZykmJmk+ZyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWF4aW11bVdhcm5pbmciLCJWYWx1ZSBpcyBhYm92ZSB0aGUgbWF4aW11bSBvZiB7MH0uIixnKX0pfShpLHQsbik7YnJlYWs7Y2FzZSJwcm9wZXJ0eSI6cmV0dXJuIFhvKGkudmFsdWVOb2RlLHQsbixyKX0hZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBpLnR5cGU9PT1lfHwiaW50ZWdlciI9PT1lJiYibnVtYmVyIj09PWkudHlwZSYmaS5pc0ludGVnZXJ9QXJyYXkuaXNBcnJheSh0LnR5cGUpP3QudHlwZS5zb21lKGUpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygidHlwZUFycmF5TWlzbWF0Y2hXYXJuaW5nIiwiSW5jb3JyZWN0IHR5cGUuIEV4cGVjdGVkIG9uZSBvZiB7MH0uIix0LnR5cGUuam9pbigiLCAiKSl9KTp0LnR5cGUmJihlKHQudHlwZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fElvKCJ0eXBlTWlzbWF0Y2hXYXJuaW5nIiwnSW5jb3JyZWN0IHR5cGUuIEV4cGVjdGVkICJ7MH0iLicsdC50eXBlKX0pKTtpZihBcnJheS5pc0FycmF5KHQuYWxsT2YpKWZvcih2YXIgbz0wLGE9dC5hbGxPZjtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtYbyhpLEJvKHMpLG4scil9dmFyIGM9Qm8odC5ub3QpO2lmKGMpe3ZhciBsPW5ldyBXbyx1PXIubmV3U3ViKCk7WG8oaSxjLGwsdSksbC5oYXNQcm9ibGVtcygpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOklvKCJub3RTY2hlbWFXYXJuaW5nIiwiTWF0Y2hlcyBhIHNjaGVtYSB0aGF0IGlzIG5vdCBhbGxvd2VkLiIpfSk7Zm9yKHZhciBoPTAsZj11LnNjaGVtYXM7aDxmLmxlbmd0aDtoKyspe3ZhciBkPWZbaF07ZC5pbnZlcnRlZD0hZC5pbnZlcnRlZCxyLmFkZChkKX19dmFyIG09ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89W10sYT12b2lkIDAscz0wLGM9ZTtzPGMubGVuZ3RoO3MrKyl7dmFyIGw9Qm8oY1tzXSksdT1uZXcgV28saD1yLm5ld1N1YigpO2lmKFhvKGksbCx1LGgpLHUuaGFzUHJvYmxlbXMoKXx8by5wdXNoKGwpLGEpaWYodHx8dS5oYXNQcm9ibGVtcygpfHxhLnZhbGlkYXRpb25SZXN1bHQuaGFzUHJvYmxlbXMoKSl7dmFyIGY9dS5jb21wYXJlKGEudmFsaWRhdGlvblJlc3VsdCk7Zj4wP2E9e3NjaGVtYTpsLHZhbGlkYXRpb25SZXN1bHQ6dSxtYXRjaGluZ1NjaGVtYXM6aH06MD09PWYmJihhLm1hdGNoaW5nU2NoZW1hcy5tZXJnZShoKSxhLnZhbGlkYXRpb25SZXN1bHQubWVyZ2VFbnVtVmFsdWVzKHUpKX1lbHNlIGEubWF0Y2hpbmdTY2hlbWFzLm1lcmdlKGgpLGEudmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzTWF0Y2hlcys9dS5wcm9wZXJ0aWVzTWF0Y2hlcyxhLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9dS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzO2Vsc2UgYT17c2NoZW1hOmwsdmFsaWRhdGlvblJlc3VsdDp1LG1hdGNoaW5nU2NoZW1hczpofX1yZXR1cm4gby5sZW5ndGg+MSYmdCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDoxfSxtZXNzYWdlOklvKCJvbmVPZldhcm5pbmciLCJNYXRjaGVzIG11bHRpcGxlIHNjaGVtYXMgd2hlbiBvbmx5IG9uZSBtdXN0IHZhbGlkYXRlLiIpfSksYSYmKG4ubWVyZ2UoYS52YWxpZGF0aW9uUmVzdWx0KSxuLnByb3BlcnRpZXNNYXRjaGVzKz1hLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc01hdGNoZXMsbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz1hLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyxyLm1lcmdlKGEubWF0Y2hpbmdTY2hlbWFzKSksby5sZW5ndGh9O0FycmF5LmlzQXJyYXkodC5hbnlPZikmJm0odC5hbnlPZiwhMSk7QXJyYXkuaXNBcnJheSh0Lm9uZU9mKSYmbSh0Lm9uZU9mLCEwKTt2YXIgZz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgV28sbz1yLm5ld1N1YigpO1hvKGksQm8oZSksdCxvKSxuLm1lcmdlKHQpLG4ucHJvcGVydGllc01hdGNoZXMrPXQucHJvcGVydGllc01hdGNoZXMsbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz10LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMsci5tZXJnZShvKX0scD1Cbyh0LmlmKTtwJiYoYj1wLHY9Qm8odC50aGVuKSx5PUJvKHQuZWxzZSksQz1CbyhiKSx3PW5ldyBXbyxfPXIubmV3U3ViKCksWG8oaSxDLHcsXyksci5tZXJnZShfKSx3Lmhhc1Byb2JsZW1zKCk/eSYmZyh5KTp2JiZnKHYpKTt2YXIgYix2LHksQyx3LF87aWYoQXJyYXkuaXNBcnJheSh0LmVudW0pKXtmb3IodmFyIFM9SG8oaSksQT0hMSxFPTAseD10LmVudW07RTx4Lmxlbmd0aDtFKyspe3ZhciBOPXhbRV07aWYoYWkoUyxOKSl7QT0hMDticmVha319bi5lbnVtVmFsdWVzPXQuZW51bSxuLmVudW1WYWx1ZU1hdGNoPUEsQXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sY29kZTp2by5FbnVtVmFsdWVNaXNtYXRjaCxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygiZW51bVdhcm5pbmciLCJWYWx1ZSBpcyBub3QgYWNjZXB0ZWQuIFZhbGlkIHZhbHVlczogezB9LiIsdC5lbnVtLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSkpLmpvaW4oIiwgIikpfSl9aWYoY2kodC5jb25zdCkpe2FpKFM9SG8oaSksdC5jb25zdCk/bi5lbnVtVmFsdWVNYXRjaD0hMDoobi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sY29kZTp2by5FbnVtVmFsdWVNaXNtYXRjaCxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygiY29uc3RXYXJuaW5nIiwiVmFsdWUgbXVzdCBiZSB7MH0uIixKU09OLnN0cmluZ2lmeSh0LmNvbnN0KSl9KSxuLmVudW1WYWx1ZU1hdGNoPSExKSxuLmVudW1WYWx1ZXM9W3QuY29uc3RdfXQuZGVwcmVjYXRpb25NZXNzYWdlJiZpLnBhcmVudCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmkucGFyZW50Lm9mZnNldCxsZW5ndGg6aS5wYXJlbnQubGVuZ3RofSxzZXZlcml0eTpUci5XYXJuaW5nLG1lc3NhZ2U6dC5kZXByZWNhdGlvbk1lc3NhZ2UsY29kZTp2by5EZXByZWNhdGVkfSl9KCksci5hZGQoe25vZGU6aSxzY2hlbWE6dH0pfX1mdW5jdGlvbiBabyhlLHQpe3ZhciBuPVtdLHI9LTEsaT1lLmdldFRleHQoKSxvPXRpKGksITEpLGE9dCYmdC5jb2xsZWN0Q29tbWVudHM/W106dm9pZCAwO2Z1bmN0aW9uIHMoKXtmb3IoOzspe3ZhciB0PW8uc2NhbigpO3N3aXRjaCh1KCksdCl7Y2FzZSAxMjpjYXNlIDEzOkFycmF5LmlzQXJyYXkoYSkmJmEucHVzaChmci5jcmVhdGUoZS5wb3NpdGlvbkF0KG8uZ2V0VG9rZW5PZmZzZXQoKSksZS5wb3NpdGlvbkF0KG8uZ2V0VG9rZW5PZmZzZXQoKStvLmdldFRva2VuTGVuZ3RoKCkpKSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIHR9fX1mdW5jdGlvbiBjKHQsaSxvLGEscyl7aWYodm9pZCAwPT09cyYmKHM9VHIuRXJyb3IpLDA9PT1uLmxlbmd0aHx8byE9PXIpe3ZhciBjPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQobyksZS5wb3NpdGlvbkF0KGEpKTtuLnB1c2goUnIuY3JlYXRlKGMsdCxzLGksZS5sYW5ndWFnZUlkKSkscj1vfX1mdW5jdGlvbiBsKGUsdCxuLHIsYSl7dm9pZCAwPT09biYmKG49dm9pZCAwKSx2b2lkIDA9PT1yJiYocj1bXSksdm9pZCAwPT09YSYmKGE9W10pO3ZhciBsPW8uZ2V0VG9rZW5PZmZzZXQoKSx1PW8uZ2V0VG9rZW5PZmZzZXQoKStvLmdldFRva2VuTGVuZ3RoKCk7aWYobD09PXUmJmw+MCl7Zm9yKGwtLTtsPjAmJi9ccy8udGVzdChpLmNoYXJBdChsKSk7KWwtLTt1PWwrMX1pZihjKGUsdCxsLHUpLG4mJmgobiwhMSksci5sZW5ndGgrYS5sZW5ndGg+MClmb3IodmFyIGY9by5nZXRUb2tlbigpOzE3IT09Zjspe2lmKC0xIT09ci5pbmRleE9mKGYpKXtzKCk7YnJlYWt9aWYoLTEhPT1hLmluZGV4T2YoZikpYnJlYWs7Zj1zKCl9cmV0dXJuIG59ZnVuY3Rpb24gdSgpe3N3aXRjaChvLmdldFRva2VuRXJyb3IoKSl7Y2FzZSA0OnJldHVybiBsKElvKCJJbnZhbGlkVW5pY29kZSIsIkludmFsaWQgdW5pY29kZSBzZXF1ZW5jZSBpbiBzdHJpbmcuIiksdm8uSW52YWxpZFVuaWNvZGUpLCEwO2Nhc2UgNTpyZXR1cm4gbChJbygiSW52YWxpZEVzY2FwZUNoYXJhY3RlciIsIkludmFsaWQgZXNjYXBlIGNoYXJhY3RlciBpbiBzdHJpbmcuIiksdm8uSW52YWxpZEVzY2FwZUNoYXJhY3RlciksITA7Y2FzZSAzOnJldHVybiBsKElvKCJVbmV4cGVjdGVkRW5kT2ZOdW1iZXIiLCJVbmV4cGVjdGVkIGVuZCBvZiBudW1iZXIuIiksdm8uVW5leHBlY3RlZEVuZE9mTnVtYmVyKSwhMDtjYXNlIDE6cmV0dXJuIGwoSW8oIlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLCJVbmV4cGVjdGVkIGVuZCBvZiBjb21tZW50LiIpLHZvLlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQpLCEwO2Nhc2UgMjpyZXR1cm4gbChJbygiVW5leHBlY3RlZEVuZE9mU3RyaW5nIiwiVW5leHBlY3RlZCBlbmQgb2Ygc3RyaW5nLiIpLHZvLlVuZXhwZWN0ZWRFbmRPZlN0cmluZyksITA7Y2FzZSA2OnJldHVybiBsKElvKCJJbnZhbGlkQ2hhcmFjdGVyIiwiSW52YWxpZCBjaGFyYWN0ZXJzIGluIHN0cmluZy4gQ29udHJvbCBjaGFyYWN0ZXJzIG11c3QgYmUgZXNjYXBlZC4iKSx2by5JbnZhbGlkQ2hhcmFjdGVyKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGUubGVuZ3RoPW8uZ2V0VG9rZW5PZmZzZXQoKStvLmdldFRva2VuTGVuZ3RoKCktZS5vZmZzZXQsdCYmcygpLGV9dmFyIGY9bmV3IEtvKHZvaWQgMCwwLDApO2Z1bmN0aW9uIGQodCxuKXt2YXIgcj1uZXcgam8odCxvLmdldFRva2VuT2Zmc2V0KCksZiksaT1tKHIpO2lmKCFpKXtpZigxNiE9PW8uZ2V0VG9rZW4oKSlyZXR1cm47bChJbygiRG91YmxlUXVvdGVzRXhwZWN0ZWQiLCJQcm9wZXJ0eSBrZXlzIG11c3QgYmUgZG91YmxlcXVvdGVkIiksdm8uVW5kZWZpbmVkKTt2YXIgYT1uZXcgS28ocixvLmdldFRva2VuT2Zmc2V0KCksby5nZXRUb2tlbkxlbmd0aCgpKTthLnZhbHVlPW8uZ2V0VG9rZW5WYWx1ZSgpLGk9YSxzKCl9ci5rZXlOb2RlPWk7dmFyIHU9bltpLnZhbHVlXTtpZih1PyhjKElvKCJEdXBsaWNhdGVLZXlXYXJuaW5nIiwiRHVwbGljYXRlIG9iamVjdCBrZXkiKSx2by5EdXBsaWNhdGVLZXksci5rZXlOb2RlLm9mZnNldCxyLmtleU5vZGUub2Zmc2V0K3Iua2V5Tm9kZS5sZW5ndGgsVHIuV2FybmluZyksIm9iamVjdCI9PXR5cGVvZiB1JiZjKElvKCJEdXBsaWNhdGVLZXlXYXJuaW5nIiwiRHVwbGljYXRlIG9iamVjdCBrZXkiKSx2by5EdXBsaWNhdGVLZXksdS5rZXlOb2RlLm9mZnNldCx1LmtleU5vZGUub2Zmc2V0K3Uua2V5Tm9kZS5sZW5ndGgsVHIuV2FybmluZyksbltpLnZhbHVlXT0hMCk6bltpLnZhbHVlXT1yLDY9PT1vLmdldFRva2VuKCkpci5jb2xvbk9mZnNldD1vLmdldFRva2VuT2Zmc2V0KCkscygpO2Vsc2UgaWYobChJbygiQ29sb25FeHBlY3RlZCIsIkNvbG9uIGV4cGVjdGVkIiksdm8uQ29sb25FeHBlY3RlZCksMTA9PT1vLmdldFRva2VuKCkmJmUucG9zaXRpb25BdChpLm9mZnNldCtpLmxlbmd0aCkubGluZTxlLnBvc2l0aW9uQXQoby5nZXRUb2tlbk9mZnNldCgpKS5saW5lKXJldHVybiByLmxlbmd0aD1pLmxlbmd0aCxyO3ZhciBoPWcocik7cmV0dXJuIGg/KHIudmFsdWVOb2RlPWgsci5sZW5ndGg9aC5vZmZzZXQraC5sZW5ndGgtci5vZmZzZXQscik6bChJbygiVmFsdWVFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksdm8uVmFsdWVFeHBlY3RlZCxyLFtdLFsyLDVdKX1mdW5jdGlvbiBtKGUpe2lmKDEwPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgS28oZSxvLmdldFRva2VuT2Zmc2V0KCkpO3JldHVybiB0LnZhbHVlPW8uZ2V0VG9rZW5WYWx1ZSgpLGgodCwhMCl9fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKDM9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyBGbyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSk7cygpO2Zvcih2YXIgbj0hMTs0IT09by5nZXRUb2tlbigpJiYxNyE9PW8uZ2V0VG9rZW4oKTspe2lmKDU9PT1vLmdldFRva2VuKCkpe258fGwoSW8oIlZhbHVlRXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLHZvLlZhbHVlRXhwZWN0ZWQpO3ZhciByPW8uZ2V0VG9rZW5PZmZzZXQoKTtpZihzKCksND09PW8uZ2V0VG9rZW4oKSl7biYmYyhJbygiVHJhaWxpbmdDb21tYSIsIlRyYWlsaW5nIGNvbW1hIiksdm8uVHJhaWxpbmdDb21tYSxyLHIrMSk7Y29udGludWV9fWVsc2UgbiYmbChJbygiRXhwZWN0ZWRDb21tYSIsIkV4cGVjdGVkIGNvbW1hIiksdm8uQ29tbWFFeHBlY3RlZCk7dmFyIGk9Zyh0KTtpP3QuaXRlbXMucHVzaChpKTpsKElvKCJQcm9wZXJ0eUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSx2by5WYWx1ZUV4cGVjdGVkLHZvaWQgMCxbXSxbNCw1XSksbj0hMH1yZXR1cm4gNCE9PW8uZ2V0VG9rZW4oKT9sKElvKCJFeHBlY3RlZENsb3NlQnJhY2tldCIsIkV4cGVjdGVkIGNvbW1hIG9yIGNsb3NpbmcgYnJhY2tldCIpLHZvLkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkLHQpOmgodCwhMCl9fShlKXx8ZnVuY3Rpb24oZSl7aWYoMT09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IFVvKGUsby5nZXRUb2tlbk9mZnNldCgpKSxuPU9iamVjdC5jcmVhdGUobnVsbCk7cygpO2Zvcih2YXIgcj0hMTsyIT09by5nZXRUb2tlbigpJiYxNyE9PW8uZ2V0VG9rZW4oKTspe2lmKDU9PT1vLmdldFRva2VuKCkpe3J8fGwoSW8oIlByb3BlcnR5RXhwZWN0ZWQiLCJQcm9wZXJ0eSBleHBlY3RlZCIpLHZvLlByb3BlcnR5RXhwZWN0ZWQpO3ZhciBpPW8uZ2V0VG9rZW5PZmZzZXQoKTtpZihzKCksMj09PW8uZ2V0VG9rZW4oKSl7ciYmYyhJbygiVHJhaWxpbmdDb21tYSIsIlRyYWlsaW5nIGNvbW1hIiksdm8uVHJhaWxpbmdDb21tYSxpLGkrMSk7Y29udGludWV9fWVsc2UgciYmbChJbygiRXhwZWN0ZWRDb21tYSIsIkV4cGVjdGVkIGNvbW1hIiksdm8uQ29tbWFFeHBlY3RlZCk7dmFyIGE9ZCh0LG4pO2E/dC5wcm9wZXJ0aWVzLnB1c2goYSk6bChJbygiUHJvcGVydHlFeHBlY3RlZCIsIlByb3BlcnR5IGV4cGVjdGVkIiksdm8uUHJvcGVydHlFeHBlY3RlZCx2b2lkIDAsW10sWzIsNV0pLHI9ITB9cmV0dXJuIDIhPT1vLmdldFRva2VuKCk/bChJbygiRXhwZWN0ZWRDbG9zZUJyYWNlIiwiRXhwZWN0ZWQgY29tbWEgb3IgY2xvc2luZyBicmFjZSIpLHZvLkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQsdCk6aCh0LCEwKX19KGUpfHxtKGUpfHxmdW5jdGlvbihlKXtpZigxMT09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IERvKGUsby5nZXRUb2tlbk9mZnNldCgpKTtpZigwPT09by5nZXRUb2tlbkVycm9yKCkpe3ZhciBuPW8uZ2V0VG9rZW5WYWx1ZSgpO3RyeXt2YXIgcj1KU09OLnBhcnNlKG4pO2lmKCFzaShyKSlyZXR1cm4gbChJbygiSW52YWxpZE51bWJlckZvcm1hdCIsIkludmFsaWQgbnVtYmVyIGZvcm1hdC4iKSx2by5VbmRlZmluZWQsdCk7dC52YWx1ZT1yfWNhdGNoKGUpe3JldHVybiBsKElvKCJJbnZhbGlkTnVtYmVyRm9ybWF0IiwiSW52YWxpZCBudW1iZXIgZm9ybWF0LiIpLHZvLlVuZGVmaW5lZCx0KX10LmlzSW50ZWdlcj0tMT09PW4uaW5kZXhPZigiLiIpfXJldHVybiBoKHQsITApfX0oZSl8fGZ1bmN0aW9uKGUpe3N3aXRjaChvLmdldFRva2VuKCkpe2Nhc2UgNzpyZXR1cm4gaChuZXcgUm8oZSxvLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtjYXNlIDg6cmV0dXJuIGgobmV3IFZvKGUsITAsby5nZXRUb2tlbk9mZnNldCgpKSwhMCk7Y2FzZSA5OnJldHVybiBoKG5ldyBWbyhlLCExLG8uZ2V0VG9rZW5PZmZzZXQoKSksITApO2RlZmF1bHQ6cmV0dXJufX0oZSl9dmFyIHA9dm9pZCAwO3JldHVybiAxNyE9PXMoKSYmKChwPWcocCkpPzE3IT09by5nZXRUb2tlbigpJiZsKElvKCJFbmQgb2YgZmlsZSBleHBlY3RlZCIsIkVuZCBvZiBmaWxlIGV4cGVjdGVkLiIpLHZvLlVuZGVmaW5lZCk6bChJbygiSW52YWxpZCBzeW1ib2wiLCJFeHBlY3RlZCBhIEpTT04gb2JqZWN0LCBhcnJheSBvciBsaXRlcmFsLiIpLHZvLlVuZGVmaW5lZCkpLG5ldyBKbyhwLG4sYSl9ZnVuY3Rpb24gWW8oZSx0LG4pe2lmKG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpe3ZhciByPXQrIlx0IjtpZihBcnJheS5pc0FycmF5KGUpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIltdIjtmb3IodmFyIGk9IltcbiIsbz0wO288ZS5sZW5ndGg7bysrKWkrPXIrWW8oZVtvXSxyLG4pLG88ZS5sZW5ndGgtMSYmKGkrPSIsIiksaSs9IlxuIjtyZXR1cm4gaSs9dCsiXSJ9dmFyIGE9T2JqZWN0LmtleXMoZSk7aWYoMD09PWEubGVuZ3RoKXJldHVybiJ7fSI7Zm9yKGk9IntcbiIsbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO2krPXIrSlNPTi5zdHJpbmdpZnkocykrIjogIitZbyhlW3NdLHIsbiksbzxhLmxlbmd0aC0xJiYoaSs9IiwiKSxpKz0iXG4ifXJldHVybiBpKz10KyJ9In1yZXR1cm4gbihlKX12YXIgUW89Tm8oKSxlYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPVByb21pc2UpLHZvaWQgMD09PXImJihyPXt9KSx0aGlzLnNjaGVtYVNlcnZpY2U9ZSx0aGlzLmNvbnRyaWJ1dGlvbnM9dCx0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcj1uLHRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzPXJ9cmV0dXJuIGUucHJvdG90eXBlLmRvUmVzb2x2ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb250cmlidXRpb25zLmxlbmd0aC0xO3Q+PTA7dC0tKXt2YXIgbj10aGlzLmNvbnRyaWJ1dGlvbnNbdF0ucmVzb2x2ZUNvbXBsZXRpb247aWYobil7dmFyIHI9bihlKTtpZihyKXJldHVybiByfX1yZXR1cm4gdGhpcy5wcm9taXNlQ29uc3RydWN0b3IucmVzb2x2ZShlKX0sZS5wcm90b3R5cGUuZG9Db21wbGV0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxpPXtpdGVtczpbXSxpc0luY29tcGxldGU6ITF9LG89ZS5nZXRUZXh0KCksYT1lLm9mZnNldEF0KHQpLHM9bi5nZXROb2RlRnJvbU9mZnNldChhLCEwKTtpZih0aGlzLmlzSW5Db21tZW50KGUscz9zLm9mZnNldDowLGEpKXJldHVybiBQcm9taXNlLnJlc29sdmUoaSk7aWYocyYmYT09PXMub2Zmc2V0K3MubGVuZ3RoJiZhPjApe3ZhciBjPW9bYS0xXTsoIm9iamVjdCI9PT1zLnR5cGUmJiJ9Ij09PWN8fCJhcnJheSI9PT1zLnR5cGUmJiJdIj09PWMpJiYocz1zLnBhcmVudCl9dmFyIGwsdT10aGlzLmdldEN1cnJlbnRXb3JkKGUsYSk7aWYoIXN8fCJzdHJpbmciIT09cy50eXBlJiYibnVtYmVyIiE9PXMudHlwZSYmImJvb2xlYW4iIT09cy50eXBlJiYibnVsbCIhPT1zLnR5cGUpe3ZhciBoPWEtdS5sZW5ndGg7aD4wJiYnIic9PT1vW2gtMV0mJmgtLSxsPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQoaCksdCl9ZWxzZSBsPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQocy5vZmZzZXQpLGUucG9zaXRpb25BdChzLm9mZnNldCtzLmxlbmd0aCkpO3ZhciBmPXt9LGQ9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD1lLmxhYmVsLG49Zlt0XTtpZihuKW4uZG9jdW1lbnRhdGlvbnx8KG4uZG9jdW1lbnRhdGlvbj1lLmRvY3VtZW50YXRpb24pLG4uZGV0YWlsfHwobi5kZXRhaWw9ZS5kZXRhaWwpO2Vsc2V7aWYoKHQ9dC5yZXBsYWNlKC9bXG5dL2csIuKGtSIpKS5sZW5ndGg+NjApe3ZhciByPXQuc3Vic3RyKDAsNTcpLnRyaW0oKSsiLi4uIjtmW3JdfHwodD1yKX1sJiZ2b2lkIDAhPT1lLmluc2VydFRleHQmJihlLnRleHRFZGl0PUtyLnJlcGxhY2UobCxlLmluc2VydFRleHQpKSxlLmxhYmVsPXQsZlt0XT1lLGkuaXRlbXMucHVzaChlKX19LHNldEFzSW5jb21wbGV0ZTpmdW5jdGlvbigpe2kuaXNJbmNvbXBsZXRlPSEwfSxlcnJvcjpmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpfSxsb2c6ZnVuY3Rpb24oZSl7Y29uc29sZS5sb2coZSl9LGdldE51bWJlck9mUHJvcG9zYWxzOmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXRlbXMubGVuZ3RofX07cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSxuKS50aGVuKChmdW5jdGlvbih0KXt2YXIgYz1bXSxoPSEwLG09IiIsZz12b2lkIDA7aWYocyYmInN0cmluZyI9PT1zLnR5cGUpe3ZhciBwPXMucGFyZW50O3AmJiJwcm9wZXJ0eSI9PT1wLnR5cGUmJnAua2V5Tm9kZT09PXMmJihoPSFwLnZhbHVlTm9kZSxnPXAsbT1vLnN1YnN0cihzLm9mZnNldCsxLHMubGVuZ3RoLTIpLHAmJihzPXAucGFyZW50KSl9aWYocyYmIm9iamVjdCI9PT1zLnR5cGUpe2lmKHMub2Zmc2V0PT09YSlyZXR1cm4gaTtzLnByb3BlcnRpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZyYmZz09PWV8fChmW2Uua2V5Tm9kZS52YWx1ZV09SWkuY3JlYXRlKCJfXyIpKX0pKTt2YXIgYj0iIjtoJiYoYj1yLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoZSxlLm9mZnNldEF0KGwuZW5kKSkpLHQ/ci5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zKHQsbixzLGgsYixkKTpyLmdldFNjaGVtYUxlc3NQcm9wZXJ0eUNvbXBsZXRpb25zKG4scyxtLGQpO3ZhciB2PXpvKHMpO3IuY29udHJpYnV0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10LmNvbGxlY3RQcm9wZXJ0eUNvbXBsZXRpb25zKGUudXJpLHYsdSxoLCIiPT09YixkKTtuJiZjLnB1c2gobil9KSksIXQmJnUubGVuZ3RoPjAmJiciJyE9PW8uY2hhckF0KGEtdS5sZW5ndGgtMSkmJihkLmFkZCh7a2luZDpTaS5Qcm9wZXJ0eSxsYWJlbDpyLmdldExhYmVsRm9yVmFsdWUodSksaW5zZXJ0VGV4dDpyLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eSh1LHZvaWQgMCwhMSxiKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLGQuc2V0QXNJbmNvbXBsZXRlKCkpfXZhciB5PXt9O3JldHVybiB0P3IuZ2V0VmFsdWVDb21wbGV0aW9ucyh0LG4scyxhLGUsZCx5KTpyLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zKG4scyxhLGUsZCksci5jb250cmlidXRpb25zLmxlbmd0aD4wJiZyLmdldENvbnRyaWJ1dGVkVmFsdWVDb21wbGV0aW9ucyhuLHMsYSxlLGQsYyksci5wcm9taXNlQ29uc3RydWN0b3IuYWxsKGMpLnRoZW4oKGZ1bmN0aW9uKCl7aWYoMD09PWQuZ2V0TnVtYmVyT2ZQcm9wb3NhbHMoKSl7dmFyIHQ9YTshc3x8InN0cmluZyIhPT1zLnR5cGUmJiJudW1iZXIiIT09cy50eXBlJiYiYm9vbGVhbiIhPT1zLnR5cGUmJiJudWxsIiE9PXMudHlwZXx8KHQ9cy5vZmZzZXQrcy5sZW5ndGgpO3ZhciBuPXIuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihlLHQpO3IuYWRkRmlsbGVyVmFsdWVDb21wbGV0aW9ucyh5LG4sZCl9cmV0dXJuIGl9KSl9KSl9LGUucHJvdG90eXBlLmdldFByb3BlcnR5Q29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPXRoaXM7dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEsbi5vZmZzZXQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUubm9kZT09PW4mJiFlLmludmVydGVkKXt2YXIgdD1lLnNjaGVtYS5wcm9wZXJ0aWVzO3QmJk9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07aWYoIm9iamVjdCI9PXR5cGVvZiBuJiYhbi5kZXByZWNhdGlvbk1lc3NhZ2UmJiFuLmRvTm90U3VnZ2VzdCl7dmFyIHM9e2tpbmQ6U2kuUHJvcGVydHksbGFiZWw6ZSxpbnNlcnRUZXh0OmEuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGUsbixyLGkpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxmaWx0ZXJUZXh0OmEuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGUpLGRvY3VtZW50YXRpb246YS5mcm9tTWFya3VwKG4ubWFya2Rvd25EZXNjcmlwdGlvbil8fG4uZGVzY3JpcHRpb258fCIifTt2b2lkIDAhPT1uLnN1Z2dlc3RTb3J0VGV4dCYmKHMuc29ydFRleHQ9bi5zdWdnZXN0U29ydFRleHQpLHMuaW5zZXJ0VGV4dCYmdWkocy5pbnNlcnRUZXh0LCIkMSIuY29uY2F0KGkpKSYmKHMuY29tbWFuZD17dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifSksby5hZGQocyl9fSkpO3ZhciBzPWUuc2NoZW1hLnByb3BlcnR5TmFtZXM7aWYoIm9iamVjdCI9PXR5cGVvZiBzJiYhcy5kZXByZWNhdGlvbk1lc3NhZ2UmJiFzLmRvTm90U3VnZ2VzdCl7dmFyIGM9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD12b2lkIDApO3ZhciBuPXtraW5kOlNpLlByb3BlcnR5LGxhYmVsOmUsaW5zZXJ0VGV4dDphLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eShlLHZvaWQgMCxyLGkpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxmaWx0ZXJUZXh0OmEuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGUpLGRvY3VtZW50YXRpb246dHx8YS5mcm9tTWFya3VwKHMubWFya2Rvd25EZXNjcmlwdGlvbil8fHMuZGVzY3JpcHRpb258fCIifTt2b2lkIDAhPT1zLnN1Z2dlc3RTb3J0VGV4dCYmKG4uc29ydFRleHQ9cy5zdWdnZXN0U29ydFRleHQpLG4uaW5zZXJ0VGV4dCYmdWkobi5pbnNlcnRUZXh0LCIkMSIuY29uY2F0KGkpKSYmKG4uY29tbWFuZD17dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifSksby5hZGQobil9O2lmKHMuZW51bSlmb3IodmFyIGw9MDtsPHMuZW51bS5sZW5ndGg7bCsrKXt2YXIgdT12b2lkIDA7cy5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMmJmw8cy5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMubGVuZ3RoP3U9YS5mcm9tTWFya3VwKHMubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW2xdKTpzLmVudW1EZXNjcmlwdGlvbnMmJmw8cy5lbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmKHU9cy5lbnVtRGVzY3JpcHRpb25zW2xdKSxjKHMuZW51bVtsXSx1KX1zLmNvbnN0JiZjKHMuY29uc3QpfX19KSl9LGUucHJvdG90eXBlLmdldFNjaGVtYUxlc3NQcm9wZXJ0eUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMsbz1mdW5jdGlvbihlKXtlLnByb3BlcnRpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXlOb2RlLnZhbHVlO3IuYWRkKHtraW5kOlNpLlByb3BlcnR5LGxhYmVsOnQsaW5zZXJ0VGV4dDppLmdldEluc2VydFRleHRGb3JWYWx1ZSh0LCIiKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZmlsdGVyVGV4dDppLmdldEZpbHRlclRleHRGb3JWYWx1ZSh0KSxkb2N1bWVudGF0aW9uOiIifSl9KSl9O2lmKHQucGFyZW50KWlmKCJwcm9wZXJ0eSI9PT10LnBhcmVudC50eXBlKXt2YXIgYT10LnBhcmVudC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoKGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUhPT10LnBhcmVudCYmZS5rZXlOb2RlLnZhbHVlPT09YSYmZS52YWx1ZU5vZGUmJiJvYmplY3QiPT09ZS52YWx1ZU5vZGUudHlwZSYmbyhlLnZhbHVlTm9kZSksITB9KSl9ZWxzZSJhcnJheSI9PT10LnBhcmVudC50eXBlJiZ0LnBhcmVudC5pdGVtcy5mb3JFYWNoKChmdW5jdGlvbihlKXsib2JqZWN0Ij09PWUudHlwZSYmZSE9PXQmJm8oZSl9KSk7ZWxzZSJvYmplY3QiPT09dC50eXBlJiZyLmFkZCh7a2luZDpTaS5Qcm9wZXJ0eSxsYWJlbDoiJHNjaGVtYSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eSgiJHNjaGVtYSIsdm9pZCAwLCEwLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIixmaWx0ZXJUZXh0OnRoaXMuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKCIkc2NoZW1hIil9KX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hTGVzc1ZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz10aGlzLGE9bjtpZighdHx8InN0cmluZyIhPT10LnR5cGUmJiJudW1iZXIiIT09dC50eXBlJiYiYm9vbGVhbiIhPT10LnR5cGUmJiJudWxsIiE9PXQudHlwZXx8KGE9dC5vZmZzZXQrdC5sZW5ndGgsdD10LnBhcmVudCksIXQpcmV0dXJuIGkuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm9iamVjdCIpLGxhYmVsOiJFbXB0eSBvYmplY3QiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoe30sIiIpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSksdm9pZCBpLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJhcnJheSIpLGxhYmVsOiJFbXB0eSBhcnJheSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShbXSwiIiksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KTt2YXIgcz10aGlzLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIocixhKSxjPWZ1bmN0aW9uKGUpe2UucGFyZW50JiYhR28oZS5wYXJlbnQsbiwhMCkmJmkuYWRkKHtraW5kOm8uZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDpvLmdldExhYmVsVGV4dEZvck1hdGNoaW5nTm9kZShlLHIpLGluc2VydFRleHQ6by5nZXRJbnNlcnRUZXh0Rm9yTWF0Y2hpbmdOb2RlKGUscixzKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLCJib29sZWFuIj09PWUudHlwZSYmby5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCFlLnZhbHVlLHMsaSl9O2lmKCJwcm9wZXJ0eSI9PT10LnR5cGUmJm4+KHQuY29sb25PZmZzZXR8fDApKXt2YXIgbD10LnZhbHVlTm9kZTtpZihsJiYobj5sLm9mZnNldCtsLmxlbmd0aHx8Im9iamVjdCI9PT1sLnR5cGV8fCJhcnJheSI9PT1sLnR5cGUpKXJldHVybjt2YXIgdT10LmtleU5vZGUudmFsdWU7ZS52aXNpdCgoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZS5rZXlOb2RlLnZhbHVlPT09dSYmZS52YWx1ZU5vZGUmJmMoZS52YWx1ZU5vZGUpLCEwfSkpLCIkc2NoZW1hIj09PXUmJnQucGFyZW50JiYhdC5wYXJlbnQucGFyZW50JiZ0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKHMsaSl9aWYoImFycmF5Ij09PXQudHlwZSlpZih0LnBhcmVudCYmInByb3BlcnR5Ij09PXQucGFyZW50LnR5cGUpe3ZhciBoPXQucGFyZW50LmtleU5vZGUudmFsdWU7ZS52aXNpdCgoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZS5rZXlOb2RlLnZhbHVlPT09aCYmZS52YWx1ZU5vZGUmJiJhcnJheSI9PT1lLnZhbHVlTm9kZS50eXBlJiZlLnZhbHVlTm9kZS5pdGVtcy5mb3JFYWNoKGMpLCEwfSkpfWVsc2UgdC5pdGVtcy5mb3JFYWNoKGMpfSxlLnByb3RvdHlwZS5nZXRWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPXIsYz12b2lkIDAsbD12b2lkIDA7aWYoIW58fCJzdHJpbmciIT09bi50eXBlJiYibnVtYmVyIiE9PW4udHlwZSYmImJvb2xlYW4iIT09bi50eXBlJiYibnVsbCIhPT1uLnR5cGV8fChzPW4ub2Zmc2V0K24ubGVuZ3RoLGw9bixuPW4ucGFyZW50KSxuKXtpZigicHJvcGVydHkiPT09bi50eXBlJiZyPihuLmNvbG9uT2Zmc2V0fHwwKSl7dmFyIHU9bi52YWx1ZU5vZGU7aWYodSYmcj51Lm9mZnNldCt1Lmxlbmd0aClyZXR1cm47Yz1uLmtleU5vZGUudmFsdWUsbj1uLnBhcmVudH1pZihuJiYodm9pZCAwIT09Y3x8ImFycmF5Ij09PW4udHlwZSkpe2Zvcih2YXIgaD10aGlzLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoaSxzKSxmPTAsZD10LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxuLm9mZnNldCxsKTtmPGQubGVuZ3RoO2YrKyl7dmFyIG09ZFtmXTtpZihtLm5vZGU9PT1uJiYhbS5pbnZlcnRlZCYmbS5zY2hlbWEpe2lmKCJhcnJheSI9PT1uLnR5cGUmJm0uc2NoZW1hLml0ZW1zKWlmKEFycmF5LmlzQXJyYXkobS5zY2hlbWEuaXRlbXMpKXt2YXIgZz10aGlzLmZpbmRJdGVtQXRPZmZzZXQobixpLHIpO2c8bS5zY2hlbWEuaXRlbXMubGVuZ3RoJiZ0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMobS5zY2hlbWEuaXRlbXNbZ10saCxvLGEpfWVsc2UgdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKG0uc2NoZW1hLml0ZW1zLGgsbyxhKTtpZih2b2lkIDAhPT1jKXt2YXIgcD0hMTtpZihtLnNjaGVtYS5wcm9wZXJ0aWVzKSh3PW0uc2NoZW1hLnByb3BlcnRpZXNbY10pJiYocD0hMCx0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnModyxoLG8sYSkpO2lmKG0uc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzJiYhcClmb3IodmFyIGI9MCx2PU9iamVjdC5rZXlzKG0uc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKTtiPHYubGVuZ3RoO2IrKyl7dmFyIHk9dltiXSxDPWhpKHkpO2lmKG51bGw9PUM/dm9pZCAwOkMudGVzdChjKSl7cD0hMDt2YXIgdz1tLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllc1t5XTt0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnModyxoLG8sYSl9fWlmKG0uc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzJiYhcCl7dz1tLnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllczt0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnModyxoLG8sYSl9fX19IiRzY2hlbWEiIT09Y3x8bi5wYXJlbnR8fHRoaXMuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnMoaCxvKSxhLmJvb2xlYW4mJih0aGlzLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb24oITAsaCxvKSx0aGlzLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb24oITEsaCxvKSksYS5udWxsJiZ0aGlzLmFkZE51bGxWYWx1ZUNvbXBsZXRpb24oaCxvKX19ZWxzZSB0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZS5zY2hlbWEsIiIsbyxhKX0sZS5wcm90b3R5cGUuZ2V0Q29udHJpYnV0ZWRWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXtpZih0KXtpZigic3RyaW5nIiE9PXQudHlwZSYmIm51bWJlciIhPT10LnR5cGUmJiJib29sZWFuIiE9PXQudHlwZSYmIm51bGwiIT09dC50eXBlfHwodD10LnBhcmVudCksdCYmInByb3BlcnR5Ij09PXQudHlwZSYmbj4odC5jb2xvbk9mZnNldHx8MCkpe3ZhciBhPXQua2V5Tm9kZS52YWx1ZSxzPXQudmFsdWVOb2RlO2lmKCghc3x8bjw9cy5vZmZzZXQrcy5sZW5ndGgpJiZ0LnBhcmVudCl7dmFyIGM9em8odC5wYXJlbnQpO3RoaXMuY29udHJpYnV0aW9ucy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmNvbGxlY3RWYWx1ZUNvbXBsZXRpb25zKHIudXJpLGMsYSxpKTt0JiZvLnB1c2godCl9KSl9fX1lbHNlIHRoaXMuY29udHJpYnV0aW9ucy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmNvbGxlY3REZWZhdWx0Q29tcGxldGlvbnMoci51cmksaSk7dCYmby5wdXNoKHQpfSkpfSxlLnByb3RvdHlwZS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXM7Im9iamVjdCI9PXR5cGVvZiBlJiYodGhpcy5hZGRFbnVtVmFsdWVDb21wbGV0aW9ucyhlLHQsbiksdGhpcy5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucyhlLHQsbiksdGhpcy5jb2xsZWN0VHlwZXMoZSxyKSxBcnJheS5pc0FycmF5KGUuYWxsT2YpJiZlLmFsbE9mLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LG4scil9KSksQXJyYXkuaXNBcnJheShlLmFueU9mKSYmZS5hbnlPZi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIpfSkpLEFycmF5LmlzQXJyYXkoZS5vbmVPZikmJmUub25lT2YuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQsbixyKX0pKSl9LGUucHJvdG90eXBlLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXM7dm9pZCAwPT09ciYmKHI9MCk7dmFyIG89ITE7aWYoY2koZS5kZWZhdWx0KSl7Zm9yKHZhciBhPWUudHlwZSxzPWUuZGVmYXVsdCxjPXI7Yz4wO2MtLSlzPVtzXSxhPSJhcnJheSI7bi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChhKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUocyksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShzLHQpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkZXRhaWw6UW8oImpzb24uc3VnZ2VzdC5kZWZhdWx0IiwiRGVmYXVsdCB2YWx1ZSIpfSksbz0hMH1BcnJheS5pc0FycmF5KGUuZXhhbXBsZXMpJiZlLmV4YW1wbGVzLmZvckVhY2goKGZ1bmN0aW9uKGEpe2Zvcih2YXIgcz1lLnR5cGUsYz1hLGw9cjtsPjA7bC0tKWM9W2NdLHM9ImFycmF5IjtuLmFkZCh7a2luZDppLmdldFN1Z2dlc3Rpb25LaW5kKHMpLGxhYmVsOmkuZ2V0TGFiZWxGb3JWYWx1ZShjKSxpbnNlcnRUZXh0OmkuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGMsdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0fSksbz0hMH0pKSxBcnJheS5pc0FycmF5KGUuZGVmYXVsdFNuaXBwZXRzKSYmZS5kZWZhdWx0U25pcHBldHMuZm9yRWFjaCgoZnVuY3Rpb24oYSl7dmFyIHMsYyxsPWUudHlwZSx1PWEuYm9keSxoPWEubGFiZWw7aWYoY2kodSkpe2UudHlwZTtmb3IodmFyIGY9cjtmPjA7Zi0tKXU9W3VdO3M9aS5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKHUsdCksYz1pLmdldEZpbHRlclRleHRGb3JTbmlwcGV0VmFsdWUodSksaD1ofHxpLmdldExhYmVsRm9yU25pcHBldFZhbHVlKHUpfWVsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBhLmJvZHlUZXh0KXJldHVybjt2YXIgZD0iIixtPSIiLGc9IiI7Zm9yKGY9cjtmPjA7Zi0tKWQ9ZCtnKyJbXG4iLG09bSsiXG4iK2crIl0iLGcrPSJcdCIsbD0iYXJyYXkiO3M9ZCtnK2EuYm9keVRleHQuc3BsaXQoIlxuIikuam9pbigiXG4iK2cpK20rdCxoPWh8fHMsYz1zLnJlcGxhY2UoL1tcbl0vZywiIil9bi5hZGQoe2tpbmQ6aS5nZXRTdWdnZXN0aW9uS2luZChsKSxsYWJlbDpoLGRvY3VtZW50YXRpb246aS5mcm9tTWFya3VwKGEubWFya2Rvd25EZXNjcmlwdGlvbil8fGEuZGVzY3JpcHRpb24saW5zZXJ0VGV4dDpzLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxmaWx0ZXJUZXh0OmN9KSxvPSEwfSkpLCFvJiYib2JqZWN0Ij09dHlwZW9mIGUuaXRlbXMmJiFBcnJheS5pc0FycmF5KGUuaXRlbXMpJiZyPDUmJnRoaXMuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnMoZS5pdGVtcyx0LG4scisxKX0sZS5wcm90b3R5cGUuYWRkRW51bVZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4pe2lmKGNpKGUuY29uc3QpJiZuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKGUuY29uc3QpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZS5jb25zdCx0KSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjp0aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8ZS5kZXNjcmlwdGlvbn0pLEFycmF5LmlzQXJyYXkoZS5lbnVtKSlmb3IodmFyIHI9MCxpPWUuZW51bS5sZW5ndGg7cjxpO3IrKyl7dmFyIG89ZS5lbnVtW3JdLGE9dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25EZXNjcmlwdGlvbil8fGUuZGVzY3JpcHRpb247ZS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMmJnI8ZS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiZ0aGlzLmRvZXNTdXBwb3J0TWFya2Rvd24oKT9hPXRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1tyXSk6ZS5lbnVtRGVzY3JpcHRpb25zJiZyPGUuZW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJihhPWUuZW51bURlc2NyaXB0aW9uc1tyXSksbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShvKSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKG8sdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRvY3VtZW50YXRpb246YX0pfX0sZS5wcm90b3R5cGUuY29sbGVjdFR5cGVzPWZ1bmN0aW9uKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkoZS5lbnVtKSYmIWNpKGUuY29uc3QpKXt2YXIgbj1lLnR5cGU7QXJyYXkuaXNBcnJheShuKT9uLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdPSEwfSkpOm4mJih0W25dPSEwKX19LGUucHJvdG90eXBlLmFkZEZpbGxlclZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4pe2Uub2JqZWN0JiZuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJvYmplY3QiKSxsYWJlbDoie30iLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHt9LHQpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkZXRhaWw6UW8oImRlZmF1bHRzLm9iamVjdCIsIk5ldyBvYmplY3QiKSxkb2N1bWVudGF0aW9uOiIifSksZS5hcnJheSYmbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYXJyYXkiKSxsYWJlbDoiW10iLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKFtdLHQpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkZXRhaWw6UW8oImRlZmF1bHRzLmFycmF5IiwiTmV3IGFycmF5IiksZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uPWZ1bmN0aW9uKGUsdCxuKXtuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJib29sZWFuIiksbGFiZWw6ZT8idHJ1ZSI6ImZhbHNlIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0sZS5wcm90b3R5cGUuYWRkTnVsbFZhbHVlQ29tcGxldGlvbj1mdW5jdGlvbihlLHQpe3QuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm51bGwiKSxsYWJlbDoibnVsbCIsaW5zZXJ0VGV4dDoibnVsbCIrZSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10aGlzLnNjaGVtYVNlcnZpY2UuZ2V0UmVnaXN0ZXJlZFNjaGVtYUlkcygoZnVuY3Rpb24oZSl7cmV0dXJuImh0dHAiPT09ZXx8Imh0dHBzIj09PWV9KSk7ci5mb3JFYWNoKChmdW5jdGlvbihyKXtyZXR1cm4gdC5hZGQoe2tpbmQ6U2kuTW9kdWxlLGxhYmVsOm4uZ2V0TGFiZWxGb3JWYWx1ZShyKSxmaWx0ZXJUZXh0Om4uZ2V0RmlsdGVyVGV4dEZvclZhbHVlKHIpLGluc2VydFRleHQ6bi5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUocixlKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSkpfSxlLnByb3RvdHlwZS5nZXRMYWJlbEZvclZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0sZS5wcm90b3R5cGUuZ2V0RmlsdGVyVGV4dEZvclZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0sZS5wcm90b3R5cGUuZ2V0RmlsdGVyVGV4dEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXCRce1xkKzooW159XSspXH18XCRcZCsvZywiJDEiKX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL1wkXHtcZCs6KFtefV0rKVx9fFwkXGQrL2csIiQxIil9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JQbGFpblRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcXCRcfV0vZywiXFwkJiIpfSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yVmFsdWU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1KU09OLnN0cmluZ2lmeShlLG51bGwsIlx0Iik7cmV0dXJuInt9Ij09PW4/InskMX0iK3Q6IltdIj09PW4/IlskMV0iK3Q6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KG4rdCl9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gWW8oZSwiIiwoZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYiXiI9PT1lWzBdP2Uuc3Vic3RyKDEpOkpTT04uc3RyaW5naWZ5KGUpfSkpK3R9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gbnVsbD09PWU/IiR7MTpudWxsfSIrdDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpO2Nhc2Uic3RyaW5nIjp2YXIgbj1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gbj1uLnN1YnN0cigxLG4ubGVuZ3RoLTIpLCciJHsxOicrKG49dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KG4pKSsnfSInK3Q7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIiR7MToiK0pTT04uc3RyaW5naWZ5KGUpKyJ9Iit0fXJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpfSxlLnByb3RvdHlwZS5nZXRTdWdnZXN0aW9uS2luZD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgdD1lO2U9dC5sZW5ndGg+MD90WzBdOnZvaWQgMH1pZighZSlyZXR1cm4gU2kuVmFsdWU7c3dpdGNoKGUpe2Nhc2Uic3RyaW5nIjpkZWZhdWx0OnJldHVybiBTaS5WYWx1ZTtjYXNlIm9iamVjdCI6cmV0dXJuIFNpLk1vZHVsZTtjYXNlInByb3BlcnR5IjpyZXR1cm4gU2kuUHJvcGVydHl9fSxlLnByb3RvdHlwZS5nZXRMYWJlbFRleHRGb3JNYXRjaGluZ05vZGU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZS50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4iW10iO2Nhc2Uib2JqZWN0IjpyZXR1cm4ie30iO2RlZmF1bHQ6cmV0dXJuIHQuZ2V0VGV4dCgpLnN1YnN0cihlLm9mZnNldCxlLmxlbmd0aCl9fSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKGUsdCxuKXtzd2l0Y2goZS50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoW10sbik7Y2FzZSJvYmplY3QiOnJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSxuKTtkZWZhdWx0OnZhciByPXQuZ2V0VGV4dCgpLnN1YnN0cihlLm9mZnNldCxlLmxlbmd0aCkrbjtyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KHIpfX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsIiIpO2lmKCFuKXJldHVybiBpO3ZhciBvLGE9aSsiOiAiLHM9MDtpZih0KXtpZihBcnJheS5pc0FycmF5KHQuZGVmYXVsdFNuaXBwZXRzKSl7aWYoMT09PXQuZGVmYXVsdFNuaXBwZXRzLmxlbmd0aCl7dmFyIGM9dC5kZWZhdWx0U25pcHBldHNbMF0uYm9keTtjaShjKSYmKG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKGMsIiIpKX1zKz10LmRlZmF1bHRTbmlwcGV0cy5sZW5ndGh9aWYodC5lbnVtJiYob3x8MSE9PXQuZW51bS5sZW5ndGh8fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmVudW1bMF0sIiIpKSxzKz10LmVudW0ubGVuZ3RoKSxjaSh0LmRlZmF1bHQpJiYob3x8KG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZGVmYXVsdCwiIikpLHMrKyksQXJyYXkuaXNBcnJheSh0LmV4YW1wbGVzKSYmdC5leGFtcGxlcy5sZW5ndGgmJihvfHwobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5leGFtcGxlc1swXSwiIikpLHMrPXQuZXhhbXBsZXMubGVuZ3RoKSwwPT09cyl7dmFyIGw9QXJyYXkuaXNBcnJheSh0LnR5cGUpP3QudHlwZVswXTp0LnR5cGU7c3dpdGNoKGx8fCh0LnByb3BlcnRpZXM/bD0ib2JqZWN0Ijp0Lml0ZW1zJiYobD0iYXJyYXkiKSksbCl7Y2FzZSJib29sZWFuIjpvPSIkMSI7YnJlYWs7Y2FzZSJzdHJpbmciOm89JyIkMSInO2JyZWFrO2Nhc2Uib2JqZWN0IjpvPSJ7JDF9IjticmVhaztjYXNlImFycmF5IjpvPSJbJDFdIjticmVhaztjYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjpvPSIkezE6MH0iO2JyZWFrO2Nhc2UibnVsbCI6bz0iJHsxOm51bGx9IjticmVhaztkZWZhdWx0OnJldHVybiBpfX19cmV0dXJuKCFvfHxzPjEpJiYobz0iJDEiKSxhK28rcn0sZS5wcm90b3R5cGUuZ2V0Q3VycmVudFdvcmQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dC0xLHI9ZS5nZXRUZXh0KCk7bj49MCYmLTE9PT0nIFx0XG5cclx2Ijp7WyxdfScuaW5kZXhPZihyLmNoYXJBdChuKSk7KW4tLTtyZXR1cm4gci5zdWJzdHJpbmcobisxLHQpfSxlLnByb3RvdHlwZS5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGkoZS5nZXRUZXh0KCksITApO3N3aXRjaChuLnNldFBvc2l0aW9uKHQpLG4uc2NhbigpKXtjYXNlIDU6Y2FzZSAyOmNhc2UgNDpjYXNlIDE3OnJldHVybiIiO2RlZmF1bHQ6cmV0dXJuIiwifX0sZS5wcm90b3R5cGUuZmluZEl0ZW1BdE9mZnNldD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXRpKHQuZ2V0VGV4dCgpLCEwKSxpPWUuaXRlbXMsbz1pLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgYT1pW29dO2lmKG4+YS5vZmZzZXQrYS5sZW5ndGgpcmV0dXJuIHIuc2V0UG9zaXRpb24oYS5vZmZzZXQrYS5sZW5ndGgpLDU9PT1yLnNjYW4oKSYmbj49ci5nZXRUb2tlbk9mZnNldCgpK3IuZ2V0VG9rZW5MZW5ndGgoKT9vKzE6bztpZihuPj1hLm9mZnNldClyZXR1cm4gb31yZXR1cm4gMH0sZS5wcm90b3R5cGUuaXNJbkNvbW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRpKGUuZ2V0VGV4dCgpLCExKTtyLnNldFBvc2l0aW9uKHQpO2Zvcih2YXIgaT1yLnNjYW4oKTsxNyE9PWkmJnIuZ2V0VG9rZW5PZmZzZXQoKStyLmdldFRva2VuTGVuZ3RoKCk8bjspaT1yLnNjYW4oKTtyZXR1cm4oMTI9PT1pfHwxMz09PWkpJiZyLmdldFRva2VuT2Zmc2V0KCk8PW59LGUucHJvdG90eXBlLmZyb21NYXJrdXA9ZnVuY3Rpb24oZSl7aWYoZSYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCkpcmV0dXJue2tpbmQ6Q2kuTWFya2Rvd24sdmFsdWU6ZX19LGUucHJvdG90eXBlLmRvZXNTdXBwb3J0TWFya2Rvd249ZnVuY3Rpb24oKXtpZighY2kodGhpcy5zdXBwb3J0c01hcmtkb3duKSl7dmFyIGU9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50JiZ0aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQuY29tcGxldGlvbjt0aGlzLnN1cHBvcnRzTWFya2Rvd249ZSYmZS5jb21wbGV0aW9uSXRlbSYmQXJyYXkuaXNBcnJheShlLmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQpJiYtMSE9PWUuY29tcGxldGlvbkl0ZW0uZG9jdW1lbnRhdGlvbkZvcm1hdC5pbmRleE9mKENpLk1hcmtkb3duKX1yZXR1cm4gdGhpcy5zdXBwb3J0c01hcmtkb3dufSxlLnByb3RvdHlwZS5kb2VzU3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzPWZ1bmN0aW9uKCl7aWYoIWNpKHRoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzKSl7dmFyIGU9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50JiZ0aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQuY29tcGxldGlvbjt0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycz1lJiZlLmNvbXBsZXRpb25JdGVtJiYhIWUuY29tcGxldGlvbkl0ZW0uY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnR9cmV0dXJuIHRoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzfSxlfSgpLHRhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2NoZW1hU2VydmljZT1lLHRoaXMuY29udHJpYnV0aW9ucz10LHRoaXMucHJvbWlzZT1ufHxQcm9taXNlfXJldHVybiBlLnByb3RvdHlwZS5kb0hvdmVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLm9mZnNldEF0KHQpLGk9bi5nZXROb2RlRnJvbU9mZnNldChyKTtpZighaXx8KCJvYmplY3QiPT09aS50eXBlfHwiYXJyYXkiPT09aS50eXBlKSYmcj5pLm9mZnNldCsxJiZyPGkub2Zmc2V0K2kubGVuZ3RoLTEpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG51bGwpO3ZhciBvPWk7aWYoInN0cmluZyI9PT1pLnR5cGUpe3ZhciBhPWkucGFyZW50O2lmKGEmJiJwcm9wZXJ0eSI9PT1hLnR5cGUmJmEua2V5Tm9kZT09PWkmJiEoaT1hLnZhbHVlTm9kZSkpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG51bGwpfWZvcih2YXIgcz1mci5jcmVhdGUoZS5wb3NpdGlvbkF0KG8ub2Zmc2V0KSxlLnBvc2l0aW9uQXQoby5vZmZzZXQrby5sZW5ndGgpKSxjPWZ1bmN0aW9uKGUpe3JldHVybntjb250ZW50czplLHJhbmdlOnN9fSxsPXpvKGkpLHU9dGhpcy5jb250cmlidXRpb25zLmxlbmd0aC0xO3U+PTA7dS0tKXt2YXIgaD10aGlzLmNvbnRyaWJ1dGlvbnNbdV0uZ2V0SW5mb0NvbnRyaWJ1dGlvbihlLnVyaSxsKTtpZihoKXJldHVybiBoLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBjKGUpfSkpfXJldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksbikudGhlbigoZnVuY3Rpb24oZSl7aWYoZSYmaSl7dmFyIHQ9bi5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEsaS5vZmZzZXQpLHI9dm9pZCAwLG89dm9pZCAwLGE9dm9pZCAwLHM9dm9pZCAwO3QuZXZlcnkoKGZ1bmN0aW9uKGUpe2lmKGUubm9kZT09PWkmJiFlLmludmVydGVkJiZlLnNjaGVtYSYmKHI9cnx8ZS5zY2hlbWEudGl0bGUsbz1vfHxlLnNjaGVtYS5tYXJrZG93bkRlc2NyaXB0aW9ufHxuYShlLnNjaGVtYS5kZXNjcmlwdGlvbiksZS5zY2hlbWEuZW51bSkpe3ZhciB0PWUuc2NoZW1hLmVudW0uaW5kZXhPZihIbyhpKSk7ZS5zY2hlbWEubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zP2E9ZS5zY2hlbWEubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW3RdOmUuc2NoZW1hLmVudW1EZXNjcmlwdGlvbnMmJihhPW5hKGUuc2NoZW1hLmVudW1EZXNjcmlwdGlvbnNbdF0pKSxhJiYic3RyaW5nIiE9dHlwZW9mKHM9ZS5zY2hlbWEuZW51bVt0XSkmJihzPUpTT04uc3RyaW5naWZ5KHMpKX1yZXR1cm4hMH0pKTt2YXIgbD0iIjtyZXR1cm4gciYmKGw9bmEocikpLG8mJihsLmxlbmd0aD4wJiYobCs9IlxuXG4iKSxsKz1vKSxhJiYobC5sZW5ndGg+MCYmKGwrPSJcblxuIiksbCs9ImAiLmNvbmNhdChmdW5jdGlvbihlKXtpZigtMSE9PWUuaW5kZXhPZigiYCIpKXJldHVybiJgYCAiK2UrIiBgYCI7cmV0dXJuIGV9KHMpLCJgOiAiKS5jb25jYXQoYSkpLGMoW2xdKX1yZXR1cm4gbnVsbH0pKX0sZX0oKTtmdW5jdGlvbiBuYShlKXtpZihlKXJldHVybiBlLnJlcGxhY2UoLyhbXlxuXHJdKShccj9cbikoW15cblxyXSkvZ20sIiQxXG5cbiQzIikucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfXZhciByYT1ObygpLGlhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuanNvblNjaGVtYVNlcnZpY2U9ZSx0aGlzLnByb21pc2U9dCx0aGlzLnZhbGlkYXRpb25FbmFibGVkPSEwfXJldHVybiBlLnByb3RvdHlwZS5jb25maWd1cmU9ZnVuY3Rpb24oZSl7ZSYmKHRoaXMudmFsaWRhdGlvbkVuYWJsZWQ9ITEhPT1lLnZhbGlkYXRlLHRoaXMuY29tbWVudFNldmVyaXR5PWUuYWxsb3dDb21tZW50cz92b2lkIDA6VHIuRXJyb3IpfSxlLnByb3RvdHlwZS5kb1ZhbGlkYXRpb249ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcztpZighdGhpcy52YWxpZGF0aW9uRW5hYmxlZClyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUoW10pO3ZhciBvPVtdLGE9e30scz1mdW5jdGlvbihlKXt2YXIgdD1lLnJhbmdlLnN0YXJ0LmxpbmUrIiAiK2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyKyIgIitlLm1lc3NhZ2U7YVt0XXx8KGFbdF09ITAsby5wdXNoKGUpKX0sYz1mdW5jdGlvbihyKXt2YXIgYT0obnVsbD09bj92b2lkIDA6bi50cmFpbGluZ0NvbW1hcyk/Y2Eobi50cmFpbGluZ0NvbW1hcyk6VHIuRXJyb3IsYz0obnVsbD09bj92b2lkIDA6bi5jb21tZW50cyk/Y2Eobi5jb21tZW50cyk6aS5jb21tZW50U2V2ZXJpdHksbD0obnVsbD09bj92b2lkIDA6bi5zY2hlbWFWYWxpZGF0aW9uKT9jYShuLnNjaGVtYVZhbGlkYXRpb24pOlRyLldhcm5pbmcsdT0obnVsbD09bj92b2lkIDA6bi5zY2hlbWFSZXF1ZXN0KT9jYShuLnNjaGVtYVJlcXVlc3QpOlRyLldhcm5pbmc7aWYocil7aWYoci5lcnJvcnMubGVuZ3RoJiZ0LnJvb3QmJnUpe3ZhciBoPXQucm9vdCxmPSJvYmplY3QiPT09aC50eXBlP2gucHJvcGVydGllc1swXTp2b2lkIDA7aWYoZiYmIiRzY2hlbWEiPT09Zi5rZXlOb2RlLnZhbHVlKXt2YXIgZD1mLnZhbHVlTm9kZXx8ZixtPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQoZC5vZmZzZXQpLGUucG9zaXRpb25BdChkLm9mZnNldCtkLmxlbmd0aCkpO3MoUnIuY3JlYXRlKG0sci5lcnJvcnNbMF0sdSx2by5TY2hlbWFSZXNvbHZlRXJyb3IpKX1lbHNle209ZnIuY3JlYXRlKGUucG9zaXRpb25BdChoLm9mZnNldCksZS5wb3NpdGlvbkF0KGgub2Zmc2V0KzEpKTtzKFJyLmNyZWF0ZShtLHIuZXJyb3JzWzBdLHUsdm8uU2NoZW1hUmVzb2x2ZUVycm9yKSl9fWVsc2UgaWYobCl7dmFyIGc9dC52YWxpZGF0ZShlLHIuc2NoZW1hLGwpO2cmJmcuZm9yRWFjaChzKX1hYShyLnNjaGVtYSkmJihjPXZvaWQgMCksc2Eoci5zY2hlbWEpJiYoYT12b2lkIDApfWZvcih2YXIgcD0wLGI9dC5zeW50YXhFcnJvcnM7cDxiLmxlbmd0aDtwKyspe3ZhciB2PWJbcF07aWYodi5jb2RlPT09dm8uVHJhaWxpbmdDb21tYSl7aWYoIm51bWJlciIhPXR5cGVvZiBhKWNvbnRpbnVlO3Yuc2V2ZXJpdHk9YX1zKHYpfWlmKCJudW1iZXIiPT10eXBlb2YgYyl7dmFyIHk9cmEoIkludmFsaWRDb21tZW50VG9rZW4iLCJDb21tZW50cyBhcmUgbm90IHBlcm1pdHRlZCBpbiBKU09OLiIpO3QuY29tbWVudHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cyhSci5jcmVhdGUoZSx5LGMsdm8uQ29tbWVudE5vdFBlcm1pdHRlZCkpfSkpfXJldHVybiBvfTtpZihyKXt2YXIgbD1yLmlkfHwic2NoZW1hc2VydmljZTovL3VudGl0bGVkLyIrb2ErKztyZXR1cm4gdGhpcy5qc29uU2NoZW1hU2VydmljZS5yZWdpc3RlckV4dGVybmFsU2NoZW1hKGwsW10scikuZ2V0UmVzb2x2ZWRTY2hlbWEoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gYyhlKX0pKX1yZXR1cm4gdGhpcy5qc29uU2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSx0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gYyhlKX0pKX0sZS5wcm90b3R5cGUuZ2V0TGFuZ3VhZ2VTdGF0dXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57c2NoZW1hczp0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYVVSSXNGb3JSZXNvdXJjZShlLnVyaSx0KX19LGV9KCksb2E9MDtmdW5jdGlvbiBhYShlKXtpZihlJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKGxpKGUuYWxsb3dDb21tZW50cykpcmV0dXJuIGUuYWxsb3dDb21tZW50cztpZihlLmFsbE9mKWZvcih2YXIgdD0wLG49ZS5hbGxPZjt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9YWEoblt0XSk7aWYobGkocikpcmV0dXJuIHJ9fX1mdW5jdGlvbiBzYShlKXtpZihlJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKGxpKGUuYWxsb3dUcmFpbGluZ0NvbW1hcykpcmV0dXJuIGUuYWxsb3dUcmFpbGluZ0NvbW1hczt2YXIgdD1lO2lmKGxpKHQuYWxsb3dzVHJhaWxpbmdDb21tYXMpKXJldHVybiB0LmFsbG93c1RyYWlsaW5nQ29tbWFzO2lmKGUuYWxsT2YpZm9yKHZhciBuPTAscj1lLmFsbE9mO248ci5sZW5ndGg7bisrKXt2YXIgaT1zYShyW25dKTtpZihsaShpKSlyZXR1cm4gaX19fWZ1bmN0aW9uIGNhKGUpe3N3aXRjaChlKXtjYXNlImVycm9yIjpyZXR1cm4gVHIuRXJyb3I7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gVHIuV2FybmluZztjYXNlImlnbm9yZSI6cmV0dXJufX1mdW5jdGlvbiBsYShlKXtyZXR1cm4gZTw0OD8wOmU8PTU3P2UtNDg6KGU8OTcmJihlKz0zMiksZT49OTcmJmU8PTEwMj9lLTk3KzEwOjApfWZ1bmN0aW9uIHVhKGUpe2lmKCIjIj09PWVbMF0pc3dpdGNoKGUubGVuZ3RoKXtjYXNlIDQ6cmV0dXJue3JlZDoxNypsYShlLmNoYXJDb2RlQXQoMSkpLzI1NSxncmVlbjoxNypsYShlLmNoYXJDb2RlQXQoMikpLzI1NSxibHVlOjE3KmxhKGUuY2hhckNvZGVBdCgzKSkvMjU1LGFscGhhOjF9O2Nhc2UgNTpyZXR1cm57cmVkOjE3KmxhKGUuY2hhckNvZGVBdCgxKSkvMjU1LGdyZWVuOjE3KmxhKGUuY2hhckNvZGVBdCgyKSkvMjU1LGJsdWU6MTcqbGEoZS5jaGFyQ29kZUF0KDMpKS8yNTUsYWxwaGE6MTcqbGEoZS5jaGFyQ29kZUF0KDQpKS8yNTV9O2Nhc2UgNzpyZXR1cm57cmVkOigxNipsYShlLmNoYXJDb2RlQXQoMSkpK2xhKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjooMTYqbGEoZS5jaGFyQ29kZUF0KDMpKStsYShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZTooMTYqbGEoZS5jaGFyQ29kZUF0KDUpKStsYShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6MX07Y2FzZSA5OnJldHVybntyZWQ6KDE2KmxhKGUuY2hhckNvZGVBdCgxKSkrbGEoZS5jaGFyQ29kZUF0KDIpKSkvMjU1LGdyZWVuOigxNipsYShlLmNoYXJDb2RlQXQoMykpK2xhKGUuY2hhckNvZGVBdCg0KSkpLzI1NSxibHVlOigxNipsYShlLmNoYXJDb2RlQXQoNSkpK2xhKGUuY2hhckNvZGVBdCg2KSkpLzI1NSxhbHBoYTooMTYqbGEoZS5jaGFyQ29kZUF0KDcpKStsYShlLmNoYXJDb2RlQXQoOCkpKS8yNTV9fX12YXIgaGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuc2NoZW1hU2VydmljZT1lfXJldHVybiBlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPXtyZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFfSk7dmFyIGk9dC5yb290O2lmKCFpKXJldHVybltdO3ZhciBvPW4ucmVzdWx0TGltaXR8fE51bWJlci5NQVhfVkFMVUUsYT1lLnVyaTtpZigoInZzY29kZTovL2RlZmF1bHRzZXR0aW5ncy9rZXliaW5kaW5ncy5qc29uIj09PWF8fHVpKGEudG9Mb3dlckNhc2UoKSwiL3VzZXIva2V5YmluZGluZ3MuanNvbiIpKSYmImFycmF5Ij09PWkudHlwZSl7Zm9yKHZhciBzPVtdLGM9MCxsPWkuaXRlbXM7YzxsLmxlbmd0aDtjKyspe3ZhciB1PWxbY107aWYoIm9iamVjdCI9PT11LnR5cGUpZm9yKHZhciBoPTAsZj11LnByb3BlcnRpZXM7aDxmLmxlbmd0aDtoKyspe3ZhciBkPWZbaF07aWYoImtleSI9PT1kLmtleU5vZGUudmFsdWUmJmQudmFsdWVOb2RlKXt2YXIgbT1tci5jcmVhdGUoZS51cmksZmEoZSx1KSk7aWYocy5wdXNoKHtuYW1lOkhvKGQudmFsdWVOb2RlKSxraW5kOkJpLkZ1bmN0aW9uLGxvY2F0aW9uOm19KSwtLW88PTApcmV0dXJuIG4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChhKSxzfX19cmV0dXJuIHN9Zm9yKHZhciBnPVt7bm9kZTppLGNvbnRhaW5lck5hbWU6IiJ9XSxwPTAsYj0hMSx2PVtdLHk9ZnVuY3Rpb24odCxuKXsiYXJyYXkiPT09dC50eXBlP3QuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSYmZy5wdXNoKHtub2RlOmUsY29udGFpbmVyTmFtZTpufSl9KSk6Im9iamVjdCI9PT10LnR5cGUmJnQucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LnZhbHVlTm9kZTtpZihpKWlmKG8+MCl7by0tO3ZhciBhPW1yLmNyZWF0ZShlLnVyaSxmYShlLHQpKSxzPW4/bisiLiIrdC5rZXlOb2RlLnZhbHVlOnQua2V5Tm9kZS52YWx1ZTt2LnB1c2goe25hbWU6ci5nZXRLZXlMYWJlbCh0KSxraW5kOnIuZ2V0U3ltYm9sS2luZChpLnR5cGUpLGxvY2F0aW9uOmEsY29udGFpbmVyTmFtZTpufSksZy5wdXNoKHtub2RlOmksY29udGFpbmVyTmFtZTpzfSl9ZWxzZSBiPSEwfSkpfTtwPGcubGVuZ3RoOyl7dmFyIEM9Z1twKytdO3koQy5ub2RlLEMuY29udGFpbmVyTmFtZSl9cmV0dXJuIGImJm4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChhKSx2fSxlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzMj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17cmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRX0pO3ZhciBpPXQucm9vdDtpZighaSlyZXR1cm5bXTt2YXIgbz1uLnJlc3VsdExpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFLGE9ZS51cmk7aWYoKCJ2c2NvZGU6Ly9kZWZhdWx0c2V0dGluZ3Mva2V5YmluZGluZ3MuanNvbiI9PT1hfHx1aShhLnRvTG93ZXJDYXNlKCksIi91c2VyL2tleWJpbmRpbmdzLmpzb24iKSkmJiJhcnJheSI9PT1pLnR5cGUpe2Zvcih2YXIgcz1bXSxjPTAsbD1pLml0ZW1zO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1sW2NdO2lmKCJvYmplY3QiPT09dS50eXBlKWZvcih2YXIgaD0wLGY9dS5wcm9wZXJ0aWVzO2g8Zi5sZW5ndGg7aCsrKXt2YXIgZD1mW2hdO2lmKCJrZXkiPT09ZC5rZXlOb2RlLnZhbHVlJiZkLnZhbHVlTm9kZSl7dmFyIG09ZmEoZSx1KSxnPWZhKGUsZC5rZXlOb2RlKTtpZihzLnB1c2goe25hbWU6SG8oZC52YWx1ZU5vZGUpLGtpbmQ6QmkuRnVuY3Rpb24scmFuZ2U6bSxzZWxlY3Rpb25SYW5nZTpnfSksLS1vPD0wKXJldHVybiBuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoYSksc319fXJldHVybiBzfWZvcih2YXIgcD1bXSxiPVt7bm9kZTppLHJlc3VsdDpwfV0sdj0wLHk9ITEsQz1mdW5jdGlvbih0LG4peyJhcnJheSI9PT10LnR5cGU/dC5pdGVtcy5mb3JFYWNoKChmdW5jdGlvbih0LGkpe2lmKHQpaWYobz4wKXtvLS07dmFyIGE9ZmEoZSx0KSxzPWEsYz17bmFtZTpTdHJpbmcoaSksa2luZDpyLmdldFN5bWJvbEtpbmQodC50eXBlKSxyYW5nZTphLHNlbGVjdGlvblJhbmdlOnMsY2hpbGRyZW46W119O24ucHVzaChjKSxiLnB1c2goe3Jlc3VsdDpjLmNoaWxkcmVuLG5vZGU6dH0pfWVsc2UgeT0hMH0pKToib2JqZWN0Ij09PXQudHlwZSYmdC5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXQudmFsdWVOb2RlO2lmKGkpaWYobz4wKXtvLS07dmFyIGE9ZmEoZSx0KSxzPWZhKGUsdC5rZXlOb2RlKSxjPVtdLGw9e25hbWU6ci5nZXRLZXlMYWJlbCh0KSxraW5kOnIuZ2V0U3ltYm9sS2luZChpLnR5cGUpLHJhbmdlOmEsc2VsZWN0aW9uUmFuZ2U6cyxjaGlsZHJlbjpjLGRldGFpbDpyLmdldERldGFpbChpKX07bi5wdXNoKGwpLGIucHVzaCh7cmVzdWx0OmMsbm9kZTppfSl9ZWxzZSB5PSEwfSkpfTt2PGIubGVuZ3RoOyl7dmFyIHc9Ylt2KytdO0Mody5ub2RlLHcucmVzdWx0KX1yZXR1cm4geSYmbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGEpLHB9LGUucHJvdG90eXBlLmdldFN5bWJvbEtpbmQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gQmkuTW9kdWxlO2Nhc2Uic3RyaW5nIjpyZXR1cm4gQmkuU3RyaW5nO2Nhc2UibnVtYmVyIjpyZXR1cm4gQmkuTnVtYmVyO2Nhc2UiYXJyYXkiOnJldHVybiBCaS5BcnJheTtjYXNlImJvb2xlYW4iOnJldHVybiBCaS5Cb29sZWFuO2RlZmF1bHQ6cmV0dXJuIEJpLlZhcmlhYmxlfX0sZS5wcm90b3R5cGUuZ2V0S2V5TGFiZWw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXlOb2RlLnZhbHVlO3JldHVybiB0JiYodD10LnJlcGxhY2UoL1tcbl0vZywi4oa1IikpLHQmJnQudHJpbSgpP3Q6JyInLmNvbmNhdCh0LCciJyl9LGUucHJvdG90eXBlLmdldERldGFpbD1mdW5jdGlvbihlKXtpZihlKXJldHVybiJib29sZWFuIj09PWUudHlwZXx8Im51bWJlciI9PT1lLnR5cGV8fCJudWxsIj09PWUudHlwZXx8InN0cmluZyI9PT1lLnR5cGU/U3RyaW5nKGUudmFsdWUpOiJhcnJheSI9PT1lLnR5cGU/ZS5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJbXSI6Im9iamVjdCI9PT1lLnR5cGU/ZS5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJ7fSI6dm9pZCAwfSxlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRDb2xvcnM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbigoZnVuY3Rpb24ocil7dmFyIGk9W107aWYocilmb3IodmFyIG89biYmIm51bWJlciI9PXR5cGVvZiBuLnJlc3VsdExpbWl0P24ucmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRSxhPXt9LHM9MCxjPXQuZ2V0TWF0Y2hpbmdTY2hlbWFzKHIuc2NoZW1hKTtzPGMubGVuZ3RoO3MrKyl7dmFyIGw9Y1tzXTtpZighbC5pbnZlcnRlZCYmbC5zY2hlbWEmJigiY29sb3IiPT09bC5zY2hlbWEuZm9ybWF0fHwiY29sb3ItaGV4Ij09PWwuc2NoZW1hLmZvcm1hdCkmJmwubm9kZSYmInN0cmluZyI9PT1sLm5vZGUudHlwZSl7dmFyIHU9U3RyaW5nKGwubm9kZS5vZmZzZXQpO2lmKCFhW3VdKXt2YXIgaD11YShIbyhsLm5vZGUpKTtpZihoKXt2YXIgZj1mYShlLGwubm9kZSk7aS5wdXNoKHtjb2xvcjpoLHJhbmdlOmZ9KX1pZihhW3VdPSEwLC0tbzw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGUudXJpKSxpfX19cmV0dXJuIGl9KSl9LGUucHJvdG90eXBlLmdldENvbG9yUHJlc2VudGF0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPVtdLGE9TWF0aC5yb3VuZCgyNTUqbi5yZWQpLHM9TWF0aC5yb3VuZCgyNTUqbi5ncmVlbiksYz1NYXRoLnJvdW5kKDI1NSpuLmJsdWUpO2Z1bmN0aW9uIGwoZSl7dmFyIHQ9ZS50b1N0cmluZygxNik7cmV0dXJuIDIhPT10Lmxlbmd0aD8iMCIrdDp0fXJldHVybiBpPTE9PT1uLmFscGhhPyIjIi5jb25jYXQobChhKSkuY29uY2F0KGwocykpLmNvbmNhdChsKGMpKToiIyIuY29uY2F0KGwoYSkpLmNvbmNhdChsKHMpKS5jb25jYXQobChjKSkuY29uY2F0KGwoTWF0aC5yb3VuZCgyNTUqbi5hbHBoYSkpKSxvLnB1c2goe2xhYmVsOmksdGV4dEVkaXQ6S3IucmVwbGFjZShyLEpTT04uc3RyaW5naWZ5KGkpKX0pLG99LGV9KCk7ZnVuY3Rpb24gZmEoZSx0KXtyZXR1cm4gZnIuY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoKSl9dmFyIGRhLG1hLGdhLHBhLGJhLHZhLHlhPU5vKCksQ2E9e3NjaGVtYUFzc29jaWF0aW9uczpbXSxzY2hlbWFzOnsiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEjIjp7JHJlZjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn0sImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI6eyRzY2hlbWE6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyIsZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxwb3NpdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0scG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOnt0eXBlOiJzdHJpbmciLGVudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfX0sdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntpZDp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6e30sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsZXhjbHVzaXZlTWluaW11bTohMH0sbWF4aW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWF4aW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWluaW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWluaW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4TGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5MZW5ndGg6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDp7fX0sbWF4SXRlbXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pbkl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHVuaXF1ZUl0ZW1zOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtYXhQcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5Qcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHJlcXVpcmVkOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxkZWZpbml0aW9uczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwYXR0ZXJuUHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxlbnVtOnt0eXBlOiJhcnJheSIsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0OnthbnlPZjpbe3R5cGU6InN0cmluZyIsZW51bTpbImRhdGUtdGltZSIsInVyaSIsImVtYWlsIiwiaG9zdG5hbWUiLCJpcHY0IiwiaXB2NiIsInJlZ2V4Il19LHt0eXBlOiJzdHJpbmcifV19LGFsbE9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LGFueU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG9uZU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG5vdDp7YWxsT2Y6W3skcmVmOiIjIn1dfX0sZGVwZW5kZW5jaWVzOntleGNsdXNpdmVNYXhpbXVtOlsibWF4aW11bSJdLGV4Y2x1c2l2ZU1pbmltdW06WyJtaW5pbXVtIl19LGRlZmF1bHQ6e319LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiOntkZWZpbml0aW9uczp7c2NoZW1hQXJyYXk6e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLGl0ZW1zOnskcmVmOiIjIn19LG5vbk5lZ2F0aXZlSW50ZWdlcjp7dHlwZToiaW50ZWdlciIsbWluaW11bTowfSxub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LHtkZWZhdWx0OjB9XX0sc2ltcGxlVHlwZXM6e2VudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSx1bmlxdWVJdGVtczohMCxkZWZhdWx0OltdfX0sdHlwZTpbIm9iamVjdCIsImJvb2xlYW4iXSxwcm9wZXJ0aWVzOnskaWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJHNjaGVtYTp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRyZWY6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJGNvbW1lbnQ6e3R5cGU6InN0cmluZyJ9LHRpdGxlOnt0eXBlOiJzdHJpbmcifSxkZXNjcmlwdGlvbjp7dHlwZToic3RyaW5nIn0sZGVmYXVsdDohMCxyZWFkT25seTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sZXhhbXBsZXM6e3R5cGU6ImFycmF5IixpdGVtczohMH0sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixleGNsdXNpdmVNaW5pbXVtOjB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6Im51bWJlciJ9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5MZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxwYXR0ZXJuOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoicmVnZXgifSxhZGRpdGlvbmFsSXRlbXM6eyRyZWY6IiMifSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDohMH0sbWF4SXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluSXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY29udGFpbnM6eyRyZWY6IiMifSxtYXhQcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pblByb3BlcnRpZXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxyZXF1aXJlZDp7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxwcm9wZXJ0eU5hbWVzOntmb3JtYXQ6InJlZ2V4In0sZGVmYXVsdDp7fX0sZGVwZW5kZW5jaWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX19LHByb3BlcnR5TmFtZXM6eyRyZWY6IiMifSxjb25zdDohMCxlbnVtOnt0eXBlOiJhcnJheSIsaXRlbXM6ITAsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0Ont0eXBlOiJzdHJpbmcifSxjb250ZW50TWVkaWFUeXBlOnt0eXBlOiJzdHJpbmcifSxjb250ZW50RW5jb2Rpbmc6e3R5cGU6InN0cmluZyJ9LGlmOnskcmVmOiIjIn0sdGhlbjp7JHJlZjoiIyJ9LGVsc2U6eyRyZWY6IiMifSxhbGxPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LGFueU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sb25lT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxub3Q6eyRyZWY6IiMifX0sZGVmYXVsdDohMH19fSx3YT17aWQ6eWEoInNjaGVtYS5qc29uLmlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkc2NoZW1hOnlhKCJzY2hlbWEuanNvbi4kc2NoZW1hIiwiVGhlIHNjaGVtYSB0byB2ZXJpZnkgdGhpcyBkb2N1bWVudCBhZ2FpbnN0LiIpLHRpdGxlOnlhKCJzY2hlbWEuanNvbi50aXRsZSIsIkEgZGVzY3JpcHRpdmUgdGl0bGUgb2YgdGhlIGVsZW1lbnQuIiksZGVzY3JpcHRpb246eWEoInNjaGVtYS5qc29uLmRlc2NyaXB0aW9uIiwiQSBsb25nIGRlc2NyaXB0aW9uIG9mIHRoZSBlbGVtZW50LiBVc2VkIGluIGhvdmVyIG1lbnVzIGFuZCBzdWdnZXN0aW9ucy4iKSxkZWZhdWx0OnlhKCJzY2hlbWEuanNvbi5kZWZhdWx0IiwiQSBkZWZhdWx0IHZhbHVlLiBVc2VkIGJ5IHN1Z2dlc3Rpb25zLiIpLG11bHRpcGxlT2Y6eWEoInNjaGVtYS5qc29uLm11bHRpcGxlT2YiLCJBIG51bWJlciB0aGF0IHNob3VsZCBjbGVhbmx5IGRpdmlkZSB0aGUgY3VycmVudCB2YWx1ZSAoaS5lLiBoYXZlIG5vIHJlbWFpbmRlcikuIiksbWF4aW11bTp5YSgic2NoZW1hLmpzb24ubWF4aW11bSIsIlRoZSBtYXhpbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWF4aW11bTp5YSgic2NoZW1hLmpzb24uZXhjbHVzaXZlTWF4aW11bSIsIk1ha2VzIHRoZSBtYXhpbXVtIHByb3BlcnR5IGV4Y2x1c2l2ZS4iKSxtaW5pbXVtOnlhKCJzY2hlbWEuanNvbi5taW5pbXVtIiwiVGhlIG1pbmltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNaW5pbXVtOnlhKCJzY2hlbWEuanNvbi5leGNsdXNpdmVNaW5pbnVtIiwiTWFrZXMgdGhlIG1pbmltdW0gcHJvcGVydHkgZXhjbHVzaXZlLiIpLG1heExlbmd0aDp5YSgic2NoZW1hLmpzb24ubWF4TGVuZ3RoIiwiVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLG1pbkxlbmd0aDp5YSgic2NoZW1hLmpzb24ubWluTGVuZ3RoIiwiVGhlIG1pbmltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLHBhdHRlcm46eWEoInNjaGVtYS5qc29uLnBhdHRlcm4iLCJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgc3RyaW5nIGFnYWluc3QuIEl0IGlzIG5vdCBpbXBsaWNpdGx5IGFuY2hvcmVkLiIpLGFkZGl0aW9uYWxJdGVtczp5YSgic2NoZW1hLmpzb24uYWRkaXRpb25hbEl0ZW1zIiwiRm9yIGFycmF5cywgb25seSB3aGVuIGl0ZW1zIGlzIHNldCBhcyBhbiBhcnJheS4gSWYgaXQgaXMgYSBzY2hlbWEsIHRoZW4gdGhpcyBzY2hlbWEgdmFsaWRhdGVzIGl0ZW1zIGFmdGVyIHRoZSBvbmVzIHNwZWNpZmllZCBieSB0aGUgaXRlbXMgYXJyYXkuIElmIGl0IGlzIGZhbHNlLCB0aGVuIGFkZGl0aW9uYWwgaXRlbXMgd2lsbCBjYXVzZSB2YWxpZGF0aW9uIHRvIGZhaWwuIiksaXRlbXM6eWEoInNjaGVtYS5qc29uLml0ZW1zIiwiRm9yIGFycmF5cy4gQ2FuIGVpdGhlciBiZSBhIHNjaGVtYSB0byB2YWxpZGF0ZSBldmVyeSBlbGVtZW50IGFnYWluc3Qgb3IgYW4gYXJyYXkgb2Ygc2NoZW1hcyB0byB2YWxpZGF0ZSBlYWNoIGl0ZW0gYWdhaW5zdCBpbiBvcmRlciAodGhlIGZpcnN0IHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgc2Vjb25kIHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBzZWNvbmQgZWxlbWVudCwgYW5kIHNvIG9uLiIpLG1heEl0ZW1zOnlhKCJzY2hlbWEuanNvbi5tYXhJdGVtcyIsIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBpbnNpZGUgYW4gYXJyYXkuIEluY2x1c2l2ZS4iKSxtaW5JdGVtczp5YSgic2NoZW1hLmpzb24ubWluSXRlbXMiLCJUaGUgbWluaW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgaW5zaWRlIGFuIGFycmF5LiBJbmNsdXNpdmUuIiksdW5pcXVlSXRlbXM6eWEoInNjaGVtYS5qc29uLnVuaXF1ZUl0ZW1zIiwiSWYgYWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkgbXVzdCBiZSB1bmlxdWUuIERlZmF1bHRzIHRvIGZhbHNlLiIpLG1heFByb3BlcnRpZXM6eWEoInNjaGVtYS5qc29uLm1heFByb3BlcnRpZXMiLCJUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvcGVydGllcyBhbiBvYmplY3QgY2FuIGhhdmUuIEluY2x1c2l2ZS4iKSxtaW5Qcm9wZXJ0aWVzOnlhKCJzY2hlbWEuanNvbi5taW5Qcm9wZXJ0aWVzIiwiVGhlIG1pbmltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMgYW4gb2JqZWN0IGNhbiBoYXZlLiBJbmNsdXNpdmUuIikscmVxdWlyZWQ6eWEoInNjaGVtYS5qc29uLnJlcXVpcmVkIiwiQW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgcHJvcGVydGllcyByZXF1aXJlZCBvbiB0aGlzIG9iamVjdC4iKSxhZGRpdGlvbmFsUHJvcGVydGllczp5YSgic2NoZW1hLmpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMiLCJFaXRoZXIgYSBzY2hlbWEgb3IgYSBib29sZWFuLiBJZiBhIHNjaGVtYSwgdGhlbiB1c2VkIHRvIHZhbGlkYXRlIGFsbCBwcm9wZXJ0aWVzIG5vdCBtYXRjaGVkIGJ5ICdwcm9wZXJ0aWVzJyBvciAncGF0dGVyblByb3BlcnRpZXMnLiBJZiBmYWxzZSwgdGhlbiBhbnkgcHJvcGVydGllcyBub3QgbWF0Y2hlZCBieSBlaXRoZXIgd2lsbCBjYXVzZSB0aGlzIHNjaGVtYSB0byBmYWlsLiIpLGRlZmluaXRpb25zOnlhKCJzY2hlbWEuanNvbi5kZWZpbml0aW9ucyIsIk5vdCB1c2VkIGZvciB2YWxpZGF0aW9uLiBQbGFjZSBzdWJzY2hlbWFzIGhlcmUgdGhhdCB5b3Ugd2lzaCB0byByZWZlcmVuY2UgaW5saW5lIHdpdGggJHJlZi4iKSxwcm9wZXJ0aWVzOnlhKCJzY2hlbWEuanNvbi5wcm9wZXJ0aWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgZWFjaCBwcm9wZXJ0eS4iKSxwYXR0ZXJuUHJvcGVydGllczp5YSgic2NoZW1hLmpzb24ucGF0dGVyblByb3BlcnRpZXMiLCJBIG1hcCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIG9uIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIG1hdGNoaW5nIHByb3BlcnRpZXMuIiksZGVwZW5kZW5jaWVzOnlhKCJzY2hlbWEuanNvbi5kZXBlbmRlbmNpZXMiLCJBIG1hcCBvZiBwcm9wZXJ0eSBuYW1lcyB0byBlaXRoZXIgYW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgb3IgYSBzY2hlbWEuIEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG1lYW5zIHRoZSBwcm9wZXJ0eSBuYW1lZCBpbiB0aGUga2V5IGRlcGVuZHMgb24gdGhlIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5IGJlaW5nIHByZXNlbnQgaW4gdGhlIG9iamVjdCBpbiBvcmRlciB0byBiZSB2YWxpZC4gSWYgdGhlIHZhbHVlIGlzIGEgc2NoZW1hLCB0aGVuIHRoZSBzY2hlbWEgaXMgb25seSBhcHBsaWVkIHRvIHRoZSBvYmplY3QgaWYgdGhlIHByb3BlcnR5IGluIHRoZSBrZXkgZXhpc3RzIG9uIHRoZSBvYmplY3QuIiksZW51bTp5YSgic2NoZW1hLmpzb24uZW51bSIsIlRoZSBzZXQgb2YgbGl0ZXJhbCB2YWx1ZXMgdGhhdCBhcmUgdmFsaWQuIiksdHlwZTp5YSgic2NoZW1hLmpzb24udHlwZSIsIkVpdGhlciBhIHN0cmluZyBvZiBvbmUgb2YgdGhlIGJhc2ljIHNjaGVtYSB0eXBlcyAobnVtYmVyLCBpbnRlZ2VyLCBudWxsLCBhcnJheSwgb2JqZWN0LCBib29sZWFuLCBzdHJpbmcpIG9yIGFuIGFycmF5IG9mIHN0cmluZ3Mgc3BlY2lmeWluZyBhIHN1YnNldCBvZiB0aG9zZSB0eXBlcy4iKSxmb3JtYXQ6eWEoInNjaGVtYS5qc29uLmZvcm1hdCIsIkRlc2NyaWJlcyB0aGUgZm9ybWF0IGV4cGVjdGVkIGZvciB0aGUgdmFsdWUuIiksYWxsT2Y6eWEoInNjaGVtYS5qc29uLmFsbE9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgYWxsIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksYW55T2Y6eWEoInNjaGVtYS5qc29uLmFueU9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgd2hlcmUgYXQgbGVhc3Qgb25lIG11c3QgbWF0Y2guIiksb25lT2Y6eWEoInNjaGVtYS5qc29uLm9uZU9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgZXhhY3RseSBvbmUgb2Ygd2hpY2ggbXVzdCBtYXRjaC4iKSxub3Q6eWEoInNjaGVtYS5qc29uLm5vdCIsIkEgc2NoZW1hIHdoaWNoIG11c3Qgbm90IG1hdGNoLiIpLCRpZDp5YSgic2NoZW1hLmpzb24uJGlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkcmVmOnlhKCJzY2hlbWEuanNvbi4kcmVmIiwiUmVmZXJlbmNlIGEgZGVmaW5pdGlvbiBob3N0ZWQgb24gYW55IGxvY2F0aW9uLiIpLCRjb21tZW50OnlhKCJzY2hlbWEuanNvbi4kY29tbWVudCIsIkNvbW1lbnRzIGZyb20gc2NoZW1hIGF1dGhvcnMgdG8gcmVhZGVycyBvciBtYWludGFpbmVycyBvZiB0aGUgc2NoZW1hLiIpLHJlYWRPbmx5OnlhKCJzY2hlbWEuanNvbi5yZWFkT25seSIsIkluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgaW5zdGFuY2UgaXMgbWFuYWdlZCBleGNsdXNpdmVseSBieSB0aGUgb3duaW5nIGF1dGhvcml0eS4iKSxleGFtcGxlczp5YSgic2NoZW1hLmpzb24uZXhhbXBsZXMiLCJTYW1wbGUgSlNPTiB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzY2hlbWEsIGZvciB0aGUgcHVycG9zZSBvZiBpbGx1c3RyYXRpbmcgdXNhZ2UuIiksY29udGFpbnM6eWEoInNjaGVtYS5qc29uLmNvbnRhaW5zIiwnQW4gYXJyYXkgaW5zdGFuY2UgaXMgdmFsaWQgYWdhaW5zdCAiY29udGFpbnMiIGlmIGF0IGxlYXN0IG9uZSBvZiBpdHMgZWxlbWVudHMgaXMgdmFsaWQgYWdhaW5zdCB0aGUgZ2l2ZW4gc2NoZW1hLicpLHByb3BlcnR5TmFtZXM6eWEoInNjaGVtYS5qc29uLnByb3BlcnR5TmFtZXMiLCJJZiB0aGUgaW5zdGFuY2UgaXMgYW4gb2JqZWN0LCB0aGlzIGtleXdvcmQgdmFsaWRhdGVzIGlmIGV2ZXJ5IHByb3BlcnR5IG5hbWUgaW4gdGhlIGluc3RhbmNlIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBwcm92aWRlZCBzY2hlbWEuIiksY29uc3Q6eWEoInNjaGVtYS5qc29uLmNvbnN0IiwiQW4gaW5zdGFuY2UgdmFsaWRhdGVzIHN1Y2Nlc3NmdWxseSBhZ2FpbnN0IHRoaXMga2V5d29yZCBpZiBpdHMgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIHRoZSBrZXl3b3JkLiIpLGNvbnRlbnRNZWRpYVR5cGU6eWEoInNjaGVtYS5qc29uLmNvbnRlbnRNZWRpYVR5cGUiLCJEZXNjcmliZXMgdGhlIG1lZGlhIHR5cGUgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksY29udGVudEVuY29kaW5nOnlhKCJzY2hlbWEuanNvbi5jb250ZW50RW5jb2RpbmciLCJEZXNjcmliZXMgdGhlIGNvbnRlbnQgZW5jb2Rpbmcgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksaWY6eWEoInNjaGVtYS5qc29uLmlmIiwnVGhlIHZhbGlkYXRpb24gb3V0Y29tZSBvZiB0aGUgImlmIiBzdWJzY2hlbWEgY29udHJvbHMgd2hpY2ggb2YgdGhlICJ0aGVuIiBvciAiZWxzZSIga2V5d29yZHMgYXJlIGV2YWx1YXRlZC4nKSx0aGVuOnlhKCJzY2hlbWEuanNvbi50aGVuIiwnVGhlICJpZiIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgc3VjY2VlZHMuJyksZWxzZTp5YSgic2NoZW1hLmpzb24uZWxzZSIsJ1RoZSAiZWxzZSIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgZmFpbHMuJyl9O2ZvcihiYSBpbiBDYS5zY2hlbWFzKWZvcihwYSBpbihkYT1DYS5zY2hlbWFzW2JhXSkucHJvcGVydGllcykiYm9vbGVhbiI9PXR5cGVvZihtYT1kYS5wcm9wZXJ0aWVzW3BhXSkmJihtYT1kYS5wcm9wZXJ0aWVzW3BhXT17fSksKGdhPXdhW3BhXSk/bWEuZGVzY3JpcHRpb249Z2E6Y29uc29sZS5sb2coIiIuY29uY2F0KHBhLCI6IGxvY2FsaXplKCdzY2hlbWEuanNvbi4iKS5jb25jYXQocGEsJ1wnLCAiIiknKSk7dmE9KCgpPT57dmFyIGU9ezQ3MDplPT57ZnVuY3Rpb24gdChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KGUpKX1mdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuLHI9IiIsaT0wLG89LTEsYT0wLHM9MDtzPD1lLmxlbmd0aDsrK3Mpe2lmKHM8ZS5sZW5ndGgpbj1lLmNoYXJDb2RlQXQocyk7ZWxzZXtpZig0Nz09PW4pYnJlYWs7bj00N31pZig0Nz09PW4pe2lmKG89PT1zLTF8fDE9PT1hKTtlbHNlIGlmKG8hPT1zLTEmJjI9PT1hKXtpZihyLmxlbmd0aDwyfHwyIT09aXx8NDYhPT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSl8fDQ2IT09ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTIpKWlmKHIubGVuZ3RoPjIpe3ZhciBjPXIubGFzdEluZGV4T2YoIi8iKTtpZihjIT09ci5sZW5ndGgtMSl7LTE9PT1jPyhyPSIiLGk9MCk6aT0ocj1yLnNsaWNlKDAsYykpLmxlbmd0aC0xLXIubGFzdEluZGV4T2YoIi8iKSxvPXMsYT0wO2NvbnRpbnVlfX1lbHNlIGlmKDI9PT1yLmxlbmd0aHx8MT09PXIubGVuZ3RoKXtyPSIiLGk9MCxvPXMsYT0wO2NvbnRpbnVlfXQmJihyLmxlbmd0aD4wP3IrPSIvLi4iOnI9Ii4uIixpPTIpfWVsc2Ugci5sZW5ndGg+MD9yKz0iLyIrZS5zbGljZShvKzEscyk6cj1lLnNsaWNlKG8rMSxzKSxpPXMtby0xO289cyxhPTB9ZWxzZSA0Nj09PW4mJi0xIT09YT8rK2E6YT0tMX1yZXR1cm4gcn12YXIgcj17cmVzb2x2ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSxyPSIiLGk9ITEsbz1hcmd1bWVudHMubGVuZ3RoLTE7bz49LTEmJiFpO28tLSl7dmFyIGE7bz49MD9hPWFyZ3VtZW50c1tvXToodm9pZCAwPT09ZSYmKGU9cHJvY2Vzcy5jd2QoKSksYT1lKSx0KGEpLDAhPT1hLmxlbmd0aCYmKHI9YSsiLyIrcixpPTQ3PT09YS5jaGFyQ29kZUF0KDApKX1yZXR1cm4gcj1uKHIsIWkpLGk/ci5sZW5ndGg+MD8iLyIrcjoiLyI6ci5sZW5ndGg+MD9yOiIuIn0sbm9ybWFsaXplOmZ1bmN0aW9uKGUpe2lmKHQoZSksMD09PWUubGVuZ3RoKXJldHVybiIuIjt2YXIgcj00Nz09PWUuY2hhckNvZGVBdCgwKSxpPTQ3PT09ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpO3JldHVybiAwIT09KGU9bihlLCFyKSkubGVuZ3RofHxyfHwoZT0iLiIpLGUubGVuZ3RoPjAmJmkmJihlKz0iLyIpLHI/Ii8iK2U6ZX0saXNBYnNvbHV0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdChlKSxlLmxlbmd0aD4wJiY0Nz09PWUuY2hhckNvZGVBdCgwKX0sam9pbjpmdW5jdGlvbigpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIGUsbj0wO248YXJndW1lbnRzLmxlbmd0aDsrK24pe3ZhciBpPWFyZ3VtZW50c1tuXTt0KGkpLGkubGVuZ3RoPjAmJih2b2lkIDA9PT1lP2U9aTplKz0iLyIraSl9cmV0dXJuIHZvaWQgMD09PWU/Ii4iOnIubm9ybWFsaXplKGUpfSxyZWxhdGl2ZTpmdW5jdGlvbihlLG4pe2lmKHQoZSksdChuKSxlPT09bilyZXR1cm4iIjtpZigoZT1yLnJlc29sdmUoZSkpPT09KG49ci5yZXNvbHZlKG4pKSlyZXR1cm4iIjtmb3IodmFyIGk9MTtpPGUubGVuZ3RoJiY0Nz09PWUuY2hhckNvZGVBdChpKTsrK2kpO2Zvcih2YXIgbz1lLmxlbmd0aCxhPW8taSxzPTE7czxuLmxlbmd0aCYmNDc9PT1uLmNoYXJDb2RlQXQocyk7KytzKTtmb3IodmFyIGM9bi5sZW5ndGgtcyxsPWE8Yz9hOmMsdT0tMSxoPTA7aDw9bDsrK2gpe2lmKGg9PT1sKXtpZihjPmwpe2lmKDQ3PT09bi5jaGFyQ29kZUF0KHMraCkpcmV0dXJuIG4uc2xpY2UocytoKzEpO2lmKDA9PT1oKXJldHVybiBuLnNsaWNlKHMraCl9ZWxzZSBhPmwmJig0Nz09PWUuY2hhckNvZGVBdChpK2gpP3U9aDowPT09aCYmKHU9MCkpO2JyZWFrfXZhciBmPWUuY2hhckNvZGVBdChpK2gpO2lmKGYhPT1uLmNoYXJDb2RlQXQocytoKSlicmVhazs0Nz09PWYmJih1PWgpfXZhciBkPSIiO2ZvcihoPWkrdSsxO2g8PW87KytoKWghPT1vJiY0NyE9PWUuY2hhckNvZGVBdChoKXx8KDA9PT1kLmxlbmd0aD9kKz0iLi4iOmQrPSIvLi4iKTtyZXR1cm4gZC5sZW5ndGg+MD9kK24uc2xpY2Uocyt1KToocys9dSw0Nz09PW4uY2hhckNvZGVBdChzKSYmKytzLG4uc2xpY2UocykpfSxfbWFrZUxvbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGRpcm5hbWU6ZnVuY3Rpb24oZSl7aWYodChlKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2Zvcih2YXIgbj1lLmNoYXJDb2RlQXQoMCkscj00Nz09PW4saT0tMSxvPSEwLGE9ZS5sZW5ndGgtMTthPj0xOy0tYSlpZig0Nz09PShuPWUuY2hhckNvZGVBdChhKSkpe2lmKCFvKXtpPWE7YnJlYWt9fWVsc2Ugbz0hMTtyZXR1cm4tMT09PWk/cj8iLyI6Ii4iOnImJjE9PT1pPyIvLyI6ZS5zbGljZSgwLGkpfSxiYXNlbmFtZTpmdW5jdGlvbihlLG4pe2lmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7dChlKTt2YXIgcixpPTAsbz0tMSxhPSEwO2lmKHZvaWQgMCE9PW4mJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD1lLmxlbmd0aCl7aWYobi5sZW5ndGg9PT1lLmxlbmd0aCYmbj09PWUpcmV0dXJuIiI7dmFyIHM9bi5sZW5ndGgtMSxjPS0xO2ZvcihyPWUubGVuZ3RoLTE7cj49MDstLXIpe3ZhciBsPWUuY2hhckNvZGVBdChyKTtpZig0Nz09PWwpe2lmKCFhKXtpPXIrMTticmVha319ZWxzZS0xPT09YyYmKGE9ITEsYz1yKzEpLHM+PTAmJihsPT09bi5jaGFyQ29kZUF0KHMpPy0xPT0tLXMmJihvPXIpOihzPS0xLG89YykpfXJldHVybiBpPT09bz9vPWM6LTE9PT1vJiYobz1lLmxlbmd0aCksZS5zbGljZShpLG8pfWZvcihyPWUubGVuZ3RoLTE7cj49MDstLXIpaWYoNDc9PT1lLmNoYXJDb2RlQXQocikpe2lmKCFhKXtpPXIrMTticmVha319ZWxzZS0xPT09byYmKGE9ITEsbz1yKzEpO3JldHVybi0xPT09bz8iIjplLnNsaWNlKGksbyl9LGV4dG5hbWU6ZnVuY3Rpb24oZSl7dChlKTtmb3IodmFyIG49LTEscj0wLGk9LTEsbz0hMCxhPTAscz1lLmxlbmd0aC0xO3M+PTA7LS1zKXt2YXIgYz1lLmNoYXJDb2RlQXQocyk7aWYoNDchPT1jKS0xPT09aSYmKG89ITEsaT1zKzEpLDQ2PT09Yz8tMT09PW4/bj1zOjEhPT1hJiYoYT0xKTotMSE9PW4mJihhPS0xKTtlbHNlIGlmKCFvKXtyPXMrMTticmVha319cmV0dXJuLTE9PT1ufHwtMT09PWl8fDA9PT1hfHwxPT09YSYmbj09PWktMSYmbj09PXIrMT8iIjplLnNsaWNlKG4saSl9LGZvcm1hdDpmdW5jdGlvbihlKXtpZihudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKTtyZXR1cm4gbj0odD1lKS5kaXJ8fHQucm9vdCxyPXQuYmFzZXx8KHQubmFtZXx8IiIpKyh0LmV4dHx8IiIpLG4/bj09PXQucm9vdD9uK3I6bisiLyIrcjpyO3ZhciB0LG4scn0scGFyc2U6ZnVuY3Rpb24oZSl7dChlKTt2YXIgbj17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiBuO3ZhciByLGk9ZS5jaGFyQ29kZUF0KDApLG89NDc9PT1pO28/KG4ucm9vdD0iLyIscj0xKTpyPTA7Zm9yKHZhciBhPS0xLHM9MCxjPS0xLGw9ITAsdT1lLmxlbmd0aC0xLGg9MDt1Pj1yOy0tdSlpZig0NyE9PShpPWUuY2hhckNvZGVBdCh1KSkpLTE9PT1jJiYobD0hMSxjPXUrMSksNDY9PT1pPy0xPT09YT9hPXU6MSE9PWgmJihoPTEpOi0xIT09YSYmKGg9LTEpO2Vsc2UgaWYoIWwpe3M9dSsxO2JyZWFrfXJldHVybi0xPT09YXx8LTE9PT1jfHwwPT09aHx8MT09PWgmJmE9PT1jLTEmJmE9PT1zKzE/LTEhPT1jJiYobi5iYXNlPW4ubmFtZT0wPT09cyYmbz9lLnNsaWNlKDEsYyk6ZS5zbGljZShzLGMpKTooMD09PXMmJm8/KG4ubmFtZT1lLnNsaWNlKDEsYSksbi5iYXNlPWUuc2xpY2UoMSxjKSk6KG4ubmFtZT1lLnNsaWNlKHMsYSksbi5iYXNlPWUuc2xpY2UocyxjKSksbi5leHQ9ZS5zbGljZShhLGMpKSxzPjA/bi5kaXI9ZS5zbGljZSgwLHMtMSk6byYmKG4uZGlyPSIvIiksbn0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07ci5wb3NpeD1yLGUuZXhwb3J0cz1yfSw0NDc6KGUsdCxuKT0+e3ZhciByO2lmKG4ucih0KSxuLmQodCx7VVJJOigpPT5nLFV0aWxzOigpPT54fSksIm9iamVjdCI9PXR5cGVvZiBwcm9jZXNzKXI9IndpbjMyIj09PXByb2Nlc3MucGxhdGZvcm07ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvcil7dmFyIGk9bmF2aWdhdG9yLnVzZXJBZ2VudDtyPWkuaW5kZXhPZigiV2luZG93cyIpPj0wfXZhciBvLGEscz0obz1mdW5jdGlvbihlLHQpe3JldHVybihvPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcodCkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1vKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSksYz0vXlx3W1x3XGQrLi1dKiQvLGw9L15cLy8sdT0vXlwvXC8vO2Z1bmN0aW9uIGgoZSx0KXtpZighZS5zY2hlbWUmJnQpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIicuY29uY2F0KGUuYXV0aG9yaXR5LCciLCBwYXRoOiAiJykuY29uY2F0KGUucGF0aCwnIiwgcXVlcnk6ICInKS5jb25jYXQoZS5xdWVyeSwnIiwgZnJhZ21lbnQ6ICInKS5jb25jYXQoZS5mcmFnbWVudCwnIn0nKSk7aWYoZS5zY2hlbWUmJiFjLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFsLnRlc3QoZS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGNvbnRhaW5zIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY29tcG9uZW50IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKSBjaGFyYWN0ZXInKX1lbHNlIGlmKHUudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfXZhciBmPSIiLGQ9Ii8iLG09L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8sZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scixpLG8pe3ZhciBhLHM7dm9pZCAwPT09byYmKG89ITEpLCJvYmplY3QiPT10eXBlb2YgZT8odGhpcy5zY2hlbWU9ZS5zY2hlbWV8fGYsdGhpcy5hdXRob3JpdHk9ZS5hdXRob3JpdHl8fGYsdGhpcy5wYXRoPWUucGF0aHx8Zix0aGlzLnF1ZXJ5PWUucXVlcnl8fGYsdGhpcy5mcmFnbWVudD1lLmZyYWdtZW50fHxmKToodGhpcy5zY2hlbWU9KHM9bywoYT1lKXx8cz9hOiJmaWxlIiksdGhpcy5hdXRob3JpdHk9dHx8Zix0aGlzLnBhdGg9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJodHRwcyI6Y2FzZSJodHRwIjpjYXNlImZpbGUiOnQ/dFswXSE9PWQmJih0PWQrdCk6dD1kfXJldHVybiB0fSh0aGlzLnNjaGVtZSxufHxmKSx0aGlzLnF1ZXJ5PXJ8fGYsdGhpcy5mcmFnbWVudD1pfHxmLGgodGhpcyxvKSl9cmV0dXJuIGUuaXNVcmk9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHwhIXQmJiJzdHJpbmciPT10eXBlb2YgdC5hdXRob3JpdHkmJiJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudCYmInN0cmluZyI9PXR5cGVvZiB0LnBhdGgmJiJzdHJpbmciPT10eXBlb2YgdC5xdWVyeSYmInN0cmluZyI9PXR5cGVvZiB0LnNjaGVtZSYmInN0cmluZyI9PXR5cGVvZiB0LmZzUGF0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQud2l0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQudG9TdHJpbmd9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcodGhpcywhMSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUud2l0aD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4gdGhpczt2YXIgdD1lLnNjaGVtZSxuPWUuYXV0aG9yaXR5LHI9ZS5wYXRoLGk9ZS5xdWVyeSxvPWUuZnJhZ21lbnQ7cmV0dXJuIHZvaWQgMD09PXQ/dD10aGlzLnNjaGVtZTpudWxsPT09dCYmKHQ9Ziksdm9pZCAwPT09bj9uPXRoaXMuYXV0aG9yaXR5Om51bGw9PT1uJiYobj1mKSx2b2lkIDA9PT1yP3I9dGhpcy5wYXRoOm51bGw9PT1yJiYocj1mKSx2b2lkIDA9PT1pP2k9dGhpcy5xdWVyeTpudWxsPT09aSYmKGk9Ziksdm9pZCAwPT09bz9vPXRoaXMuZnJhZ21lbnQ6bnVsbD09PW8mJihvPWYpLHQ9PT10aGlzLnNjaGVtZSYmbj09PXRoaXMuYXV0aG9yaXR5JiZyPT09dGhpcy5wYXRoJiZpPT09dGhpcy5xdWVyeSYmbz09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgYih0LG4scixpLG8pfSxlLnBhcnNlPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPW0uZXhlYyhlKTtyZXR1cm4gbj9uZXcgYihuWzJdfHxmLEUobls0XXx8ZiksRShuWzVdfHxmKSxFKG5bN118fGYpLEUobls5XXx8ZiksdCk6bmV3IGIoZixmLGYsZixmKX0sZS5maWxlPWZ1bmN0aW9uKGUpe3ZhciB0PWY7aWYociYmKGU9ZS5yZXBsYWNlKC9cXC9nLGQpKSxlWzBdPT09ZCYmZVsxXT09PWQpe3ZhciBuPWUuaW5kZXhPZihkLDIpOy0xPT09bj8odD1lLnN1YnN0cmluZygyKSxlPWQpOih0PWUuc3Vic3RyaW5nKDIsbiksZT1lLnN1YnN0cmluZyhuKXx8ZCl9cmV0dXJuIG5ldyBiKCJmaWxlIix0LGUsZixmKX0sZS5mcm9tPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBiKGUuc2NoZW1lLGUuYXV0aG9yaXR5LGUucGF0aCxlLnF1ZXJ5LGUuZnJhZ21lbnQpO3JldHVybiBoKHQsITApLHR9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksXyh0aGlzLGUpfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5yZXZpdmU9ZnVuY3Rpb24odCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuIHQ7dmFyIG49bmV3IGIodCk7cmV0dXJuIG4uX2Zvcm1hdHRlZD10LmV4dGVybmFsLG4uX2ZzUGF0aD10Ll9zZXA9PT1wP3QuZnNQYXRoOm51bGwsbn1yZXR1cm4gdH0sZX0oKSxwPXI/MTp2b2lkIDAsYj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0Ll9mb3JtYXR0ZWQ9bnVsbCx0Ll9mc1BhdGg9bnVsbCx0fXJldHVybiBzKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJmc1BhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPXcodGhpcywhMSkpLHRoaXMuX2ZzUGF0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLGU/Xyh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPV8odGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9LHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBlPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihlLmZzUGF0aD10aGlzLl9mc1BhdGgsZS5fc2VwPXApLHRoaXMuX2Zvcm1hdHRlZCYmKGUuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihlLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGUuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGUuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoZS5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoZS5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxlfSx0fShnKSx2PSgoYT17fSlbNThdPSIlM0EiLGFbNDddPSIlMkYiLGFbNjNdPSIlM0YiLGFbMzVdPSIlMjMiLGFbOTFdPSIlNUIiLGFbOTNdPSIlNUQiLGFbNjRdPSIlNDAiLGFbMzNdPSIlMjEiLGFbMzZdPSIlMjQiLGFbMzhdPSIlMjYiLGFbMzldPSIlMjciLGFbNDBdPSIlMjgiLGFbNDFdPSIlMjkiLGFbNDJdPSIlMkEiLGFbNDNdPSIlMkIiLGFbNDRdPSIlMkMiLGFbNTldPSIlM0IiLGFbNjFdPSIlM0QiLGFbMzJdPSIlMjAiLGEpO2Z1bmN0aW9uIHkoZSx0KXtmb3IodmFyIG49dm9pZCAwLHI9LTEsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lLmNoYXJDb2RlQXQoaSk7aWYobz49OTcmJm88PTEyMnx8bz49NjUmJm88PTkwfHxvPj00OCYmbzw9NTd8fDQ1PT09b3x8NDY9PT1vfHw5NT09PW98fDEyNj09PW98fHQmJjQ3PT09byktMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksdm9pZCAwIT09biYmKG4rPWUuY2hhckF0KGkpKTtlbHNle3ZvaWQgMD09PW4mJihuPWUuc3Vic3RyKDAsaSkpO3ZhciBhPXZbb107dm9pZCAwIT09YT8oLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLG4rPWEpOi0xPT09ciYmKHI9aSl9fXJldHVybi0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyKSkpLHZvaWQgMCE9PW4/bjplfWZ1bmN0aW9uIEMoZSl7Zm9yKHZhciB0PXZvaWQgMCxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWUuY2hhckNvZGVBdChuKTszNT09PXJ8fDYzPT09cj8odm9pZCAwPT09dCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9dltyXSk6dm9pZCAwIT09dCYmKHQrPWVbbl0pfXJldHVybiB2b2lkIDAhPT10P3Q6ZX1mdW5jdGlvbiB3KGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hdXRob3JpdHkmJmUucGF0aC5sZW5ndGg+MSYmImZpbGUiPT09ZS5zY2hlbWU/Ii8vIi5jb25jYXQoZS5hdXRob3JpdHkpLmNvbmNhdChlLnBhdGgpOjQ3PT09ZS5wYXRoLmNoYXJDb2RlQXQoMCkmJihlLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8ZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmNTg9PT1lLnBhdGguY2hhckNvZGVBdCgyKT90P2UucGF0aC5zdWJzdHIoMSk6ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTplLnBhdGgsciYmKG49bi5yZXBsYWNlKC9cLy9nLCJcXCIpKSxufWZ1bmN0aW9uIF8oZSx0KXt2YXIgbj10P0M6eSxyPSIiLGk9ZS5zY2hlbWUsbz1lLmF1dGhvcml0eSxhPWUucGF0aCxzPWUucXVlcnksYz1lLmZyYWdtZW50O2lmKGkmJihyKz1pLHIrPSI6IiksKG98fCJmaWxlIj09PWkpJiYocis9ZCxyKz1kKSxvKXt2YXIgbD1vLmluZGV4T2YoIkAiKTtpZigtMSE9PWwpe3ZhciB1PW8uc3Vic3RyKDAsbCk7bz1vLnN1YnN0cihsKzEpLC0xPT09KGw9dS5pbmRleE9mKCI6IikpP3IrPW4odSwhMSk6KHIrPW4odS5zdWJzdHIoMCxsKSwhMSkscis9IjoiLHIrPW4odS5zdWJzdHIobCsxKSwhMSkpLHIrPSJAIn0tMT09PShsPShvPW8udG9Mb3dlckNhc2UoKSkuaW5kZXhPZigiOiIpKT9yKz1uKG8sITEpOihyKz1uKG8uc3Vic3RyKDAsbCksITEpLHIrPW8uc3Vic3RyKGwpKX1pZihhKXtpZihhLmxlbmd0aD49MyYmNDc9PT1hLmNoYXJDb2RlQXQoMCkmJjU4PT09YS5jaGFyQ29kZUF0KDIpKShoPWEuY2hhckNvZGVBdCgxKSk+PTY1JiZoPD05MCYmKGE9Ii8iLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGgrMzIpLCI6IikuY29uY2F0KGEuc3Vic3RyKDMpKSk7ZWxzZSBpZihhLmxlbmd0aD49MiYmNTg9PT1hLmNoYXJDb2RlQXQoMSkpe3ZhciBoOyhoPWEuY2hhckNvZGVBdCgwKSk+PTY1JiZoPD05MCYmKGE9IiIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUoaCszMiksIjoiKS5jb25jYXQoYS5zdWJzdHIoMikpKX1yKz1uKGEsITApfXJldHVybiBzJiYocis9Ij8iLHIrPW4ocywhMSkpLGMmJihyKz0iIyIscis9dD9jOnkoYywhMSkpLHJ9ZnVuY3Rpb24gUyhlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK1MoZS5zdWJzdHIoMykpOmV9fXZhciBBPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIEUoZSl7cmV0dXJuIGUubWF0Y2goQSk/ZS5yZXBsYWNlKEEsKGZ1bmN0aW9uKGUpe3JldHVybiBTKGUpfSkpOmV9dmFyIHgsTixrPW4oNDcwKSxMPWZ1bmN0aW9uKGUsdCxuKXtpZihufHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHIsaT0wLG89dC5sZW5ndGg7aTxvO2krKykhciYmaSBpbiB0fHwocnx8KHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLGkpKSxyW2ldPXRbaV0pO3JldHVybiBlLmNvbmNhdChyfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9LFQ9ay5wb3NpeHx8azsoTj14fHwoeD17fSkpLmpvaW5QYXRoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3JldHVybiBlLndpdGgoe3BhdGg6VC5qb2luLmFwcGx5KFQsTChbZS5wYXRoXSx0LCExKSl9KX0sTi5yZXNvbHZlUGF0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTt2YXIgcj1lLnBhdGh8fCIvIjtyZXR1cm4gZS53aXRoKHtwYXRoOlQucmVzb2x2ZS5hcHBseShULEwoW3JdLHQsITEpKX0pfSxOLmRpcm5hbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9VC5kaXJuYW1lKGUucGF0aCk7cmV0dXJuIDE9PT10Lmxlbmd0aCYmNDY9PT10LmNoYXJDb2RlQXQoMCk/ZTplLndpdGgoe3BhdGg6dH0pfSxOLmJhc2VuYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBULmJhc2VuYW1lKGUucGF0aCl9LE4uZXh0bmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gVC5leHRuYW1lKGUucGF0aCl9fX0sdD17fTtmdW5jdGlvbiBuKHIpe2lmKHRbcl0pcmV0dXJuIHRbcl0uZXhwb3J0czt2YXIgaT10W3JdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtyXShpLGkuZXhwb3J0cyxuKSxpLmV4cG9ydHN9cmV0dXJuIG4uZD0oZSx0KT0+e2Zvcih2YXIgciBpbiB0KW4ubyh0LHIpJiYhbi5vKGUscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6ITAsZ2V0OnRbcl19KX0sbi5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxuLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LG4oNDQ3KX0pKCk7dmFye1VSSTpfYSxVdGlsczpTYX09dmE7ZnVuY3Rpb24gQWEoZSx0KXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKTtmb3IodmFyIG4scj1TdHJpbmcoZSksaT0iIixvPSEhdCYmISF0LmV4dGVuZGVkLGE9ISF0JiYhIXQuZ2xvYnN0YXIscz0hMSxjPXQmJiJzdHJpbmciPT10eXBlb2YgdC5mbGFncz90LmZsYWdzOiIiLGw9MCx1PXIubGVuZ3RoO2w8dTtsKyspc3dpdGNoKG49cltsXSl7Y2FzZSIvIjpjYXNlIiQiOmNhc2UiXiI6Y2FzZSIrIjpjYXNlIi4iOmNhc2UiKCI6Y2FzZSIpIjpjYXNlIj0iOmNhc2UiISI6Y2FzZSJ8IjppKz0iXFwiK247YnJlYWs7Y2FzZSI/IjppZihvKXtpKz0iLiI7YnJlYWt9Y2FzZSJbIjpjYXNlIl0iOmlmKG8pe2krPW47YnJlYWt9Y2FzZSJ7IjppZihvKXtzPSEwLGkrPSIoIjticmVha31jYXNlIn0iOmlmKG8pe3M9ITEsaSs9IikiO2JyZWFrfWNhc2UiLCI6aWYocyl7aSs9InwiO2JyZWFrfWkrPSJcXCIrbjticmVhaztjYXNlIioiOmZvcih2YXIgaD1yW2wtMV0sZj0xOyIqIj09PXJbbCsxXTspZisrLGwrKzt2YXIgZD1yW2wrMV07aWYoYSlmPjEmJigiLyI9PT1ofHx2b2lkIDA9PT1ofHwieyI9PT1ofHwiLCI9PT1oKSYmKCIvIj09PWR8fHZvaWQgMD09PWR8fCIsIj09PWR8fCJ9Ij09PWQpPygiLyI9PT1kP2wrKzoiLyI9PT1oJiZpLmVuZHNXaXRoKCJcXC8iKSYmKGk9aS5zdWJzdHIoMCxpLmxlbmd0aC0yKSksaSs9IigoPzpbXi9dKig/Oi98JCkpKikiKTppKz0iKFteL10qKSI7ZWxzZSBpKz0iLioiO2JyZWFrO2RlZmF1bHQ6aSs9bn1yZXR1cm4gYyYmfmMuaW5kZXhPZigiZyIpfHwoaT0iXiIraSsiJCIpLG5ldyBSZWdFeHAoaSxjKX12YXIgRWEseGE9Tm8oKSxOYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmdsb2JXcmFwcGVycz1bXTt0cnl7Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLG89IiEiIT09aVswXTtvfHwoaT1pLnN1YnN0cmluZygxKSksaS5sZW5ndGg+MCYmKCIvIj09PWlbMF0mJihpPWkuc3Vic3RyaW5nKDEpKSx0aGlzLmdsb2JXcmFwcGVycy5wdXNoKHtyZWdleHA6QWEoIioqLyIraSx7ZXh0ZW5kZWQ6ITAsZ2xvYnN0YXI6ITB9KSxpbmNsdWRlOm99KSl9dGhpcy51cmlzPXR9Y2F0Y2goZSl7dGhpcy5nbG9iV3JhcHBlcnMubGVuZ3RoPTAsdGhpcy51cmlzPVtdfX1yZXR1cm4gZS5wcm90b3R5cGUubWF0Y2hlc1BhdHRlcm49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSExLG49MCxyPXRoaXMuZ2xvYldyYXBwZXJzO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLG89aS5yZWdleHAsYT1pLmluY2x1ZGU7by50ZXN0KGUpJiYodD1hKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuZ2V0VVJJcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVyaXN9LGV9KCksa2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnNlcnZpY2U9ZSx0aGlzLnVyaT10LHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5hbmNob3JzPXZvaWQgMCxuJiYodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5wcm9taXNlLnJlc29sdmUobmV3IExhKG4pKSl9cmV0dXJuIGUucHJvdG90eXBlLmdldFVucmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnJlc29sdmVkU2NoZW1hfHwodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5sb2FkU2NoZW1hKHRoaXMudXJpKSksdGhpcy51bnJlc29sdmVkU2NoZW1hfSxlLnByb3RvdHlwZS5nZXRSZXNvbHZlZFNjaGVtYT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWF8fCh0aGlzLnJlc29sdmVkU2NoZW1hPXRoaXMuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBlLnNlcnZpY2UucmVzb2x2ZVNjaGVtYUNvbnRlbnQodCxlKX0pKSksdGhpcy5yZXNvbHZlZFNjaGVtYX0sZS5wcm90b3R5cGUuY2xlYXJTY2hlbWE9ZnVuY3Rpb24oKXt2YXIgZT0hIXRoaXMudW5yZXNvbHZlZFNjaGVtYTtyZXR1cm4gdGhpcy5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy51bnJlc29sdmVkU2NoZW1hPXZvaWQgMCx0aGlzLmRlcGVuZGVuY2llcy5jbGVhcigpLHRoaXMuYW5jaG9ycz12b2lkIDAsZX0sZX0oKSxMYT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXR9LFRhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXR9cmV0dXJuIGUucHJvdG90eXBlLmdldFNlY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdGhpcy5zY2hlbWEpO2lmKHQpcmV0dXJuIEJvKHQpfSxlLnByb3RvdHlwZS5nZXRTZWN0aW9uUmVjdXJzaXZlPWZ1bmN0aW9uKGUsdCl7aWYoIXR8fCJib29sZWFuIj09dHlwZW9mIHR8fDA9PT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj1lLnNoaWZ0KCk7aWYodC5wcm9wZXJ0aWVzJiYodC5wcm9wZXJ0aWVzW25dLDEpKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LnByb3BlcnRpZXNbbl0pO2lmKHQucGF0dGVyblByb3BlcnRpZXMpZm9yKHZhciByPTAsaT1PYmplY3Qua2V5cyh0LnBhdHRlcm5Qcm9wZXJ0aWVzKTtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXSxhPWhpKG8pO2lmKG51bGw9PWE/dm9pZCAwOmEudGVzdChuKSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5wYXR0ZXJuUHJvcGVydGllc1tvXSl9ZWxzZXtpZigib2JqZWN0Ij09dHlwZW9mIHQuYWRkaXRpb25hbFByb3BlcnRpZXMpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuYWRkaXRpb25hbFByb3BlcnRpZXMpO2lmKG4ubWF0Y2goIlswLTldKyIpKWlmKEFycmF5LmlzQXJyYXkodC5pdGVtcykpe3ZhciBzPXBhcnNlSW50KG4sMTApO2lmKCFpc05hTihzKSYmdC5pdGVtc1tzXSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5pdGVtc1tzXSl9ZWxzZSBpZih0Lml0ZW1zKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0Lml0ZW1zKX19LGV9KCksT2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLmNvbnRleHRTZXJ2aWNlPXQsdGhpcy5yZXF1ZXN0U2VydmljZT1lLHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPW58fFByb21pc2UsdGhpcy5jYWxsT25EaXNwb3NlPVtdLHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcz17fSx0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucz1bXSx0aGlzLnNjaGVtYXNCeUlkPXt9LHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM9W10sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcz17fX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0UmVnaXN0ZXJlZFNjaGVtYUlkcz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcykuZmlsdGVyKChmdW5jdGlvbih0KXt2YXIgbj1fYS5wYXJzZSh0KS5zY2hlbWU7cmV0dXJuInNjaGVtYXNlcnZpY2UiIT09biYmKCFlfHxlKG4pKX0pKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwcm9taXNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuY2FsbE9uRGlzcG9zZS5sZW5ndGg+MDspdGhpcy5jYWxsT25EaXNwb3NlLnBvcCgpKCl9LGUucHJvdG90eXBlLm9uUmVzb3VyY2VDaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMDtmb3IodmFyIG49ITEscj1bZT1NYShlKV0saT1PYmplY3Qua2V5cyh0aGlzLnNjaGVtYXNCeUlkKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVtYXNCeUlkW2VdfSkpO3IubGVuZ3RoOylmb3IodmFyIG89ci5wb3AoKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07cyYmKHMudXJpPT09b3x8cy5kZXBlbmRlbmNpZXMuaGFzKG8pKSYmKHMudXJpIT09byYmci5wdXNoKHMudXJpKSxzLmNsZWFyU2NoZW1hKCkmJihuPSEwKSxpW2FdPXZvaWQgMCl9cmV0dXJuIG59LGUucHJvdG90eXBlLnNldFNjaGVtYUNvbnRyaWJ1dGlvbnM9ZnVuY3Rpb24oZSl7aWYoZS5zY2hlbWFzKXt2YXIgdD1lLnNjaGVtYXM7Zm9yKHZhciBuIGluIHQpe3ZhciByPU1hKG4pO3RoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tyXT10aGlzLmFkZFNjaGVtYUhhbmRsZShyLHRbbl0pfX1pZihBcnJheS5pc0FycmF5KGUuc2NoZW1hQXNzb2NpYXRpb25zKSlmb3IodmFyIGk9MCxvPWUuc2NoZW1hQXNzb2NpYXRpb25zO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldLHM9YS51cmlzLm1hcChNYSksYz10aGlzLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb24oYS5wYXR0ZXJuLHMpO3RoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zLnB1c2goYyl9fSxlLnByb3RvdHlwZS5hZGRTY2hlbWFIYW5kbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcga2EodGhpcyxlLHQpO3JldHVybiB0aGlzLnNjaGVtYXNCeUlkW2VdPW4sbn0sZS5wcm90b3R5cGUuZ2V0T3JBZGRTY2hlbWFIYW5kbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXXx8dGhpcy5hZGRTY2hlbWFIYW5kbGUoZSx0KX0sZS5wcm90b3R5cGUuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBOYShlLHQpO3JldHVybiB0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2gobiksbn0sZS5wcm90b3R5cGUucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TWEoZSk7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbcl09ITAsdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsdCYmdGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKHQsW3JdKSxuP3RoaXMuYWRkU2NoZW1hSGFuZGxlKHIsbik6dGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZShyKX0sZS5wcm90b3R5cGUuY2xlYXJFeHRlcm5hbFNjaGVtYXM9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e30sdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsdGhpcy5jb250cmlidXRpb25TY2hlbWFzKXRoaXMuc2NoZW1hc0J5SWRbZV09dGhpcy5jb250cmlidXRpb25TY2hlbWFzW2VdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbZV09ITA7Zm9yKHZhciB0PTAsbj10aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9uczt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTt0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2gocil9fSxlLnByb3RvdHlwZS5nZXRSZXNvbHZlZFNjaGVtYT1mdW5jdGlvbihlKXt2YXIgdD1NYShlKSxuPXRoaXMuc2NoZW1hc0J5SWRbdF07cmV0dXJuIG4/bi5nZXRSZXNvbHZlZFNjaGVtYSgpOnRoaXMucHJvbWlzZS5yZXNvbHZlKHZvaWQgMCl9LGUucHJvdG90eXBlLmxvYWRTY2hlbWE9ZnVuY3Rpb24oZSl7aWYoIXRoaXMucmVxdWVzdFNlcnZpY2Upe3ZhciB0PXhhKCJqc29uLnNjaGVtYS5ub3JlcXVlc3RzZXJ2aWNlIiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfScuIE5vIHNjaGVtYSByZXF1ZXN0IHNlcnZpY2UgYXZhaWxhYmxlIixQYShlKSk7cmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG5ldyBMYSh7fSxbdF0pKX1yZXR1cm4gdGhpcy5yZXF1ZXN0U2VydmljZShlKS50aGVuKChmdW5jdGlvbih0KXtpZighdCl7dmFyIG49eGEoImpzb24uc2NoZW1hLm5vY29udGVudCIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nOiBObyBjb250ZW50LiIsUGEoZSkpO3JldHVybiBuZXcgTGEoe30sW25dKX12YXIgcixpPVtdO3I9bmkodCxpKTt2YXIgbz1pLmxlbmd0aD9beGEoImpzb24uc2NoZW1hLmludmFsaWRGb3JtYXQiLCJVbmFibGUgdG8gcGFyc2UgY29udGVudCBmcm9tICd7MH0nOiBQYXJzZSBlcnJvciBhdCBvZmZzZXQgezF9LiIsUGEoZSksaVswXS5vZmZzZXQpXTpbXTtyZXR1cm4gbmV3IExhKHIsbyl9KSwoZnVuY3Rpb24odCl7dmFyIG49dC50b1N0cmluZygpLHI9dC50b1N0cmluZygpLnNwbGl0KCJFcnJvcjogIik7cmV0dXJuIHIubGVuZ3RoPjEmJihuPXJbMV0pLHVpKG4sIi4iKSYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSksbmV3IExhKHt9LFt4YSgianNvbi5zY2hlbWEubm9jb250ZW50IiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfSc6IHsxfS4iLFBhKGUpLG4pXSl9KSl9LGUucHJvdG90eXBlLnJlc29sdmVTY2hlbWFDb250ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPWUuZXJyb3JzLnNsaWNlKDApLGk9ZS5zY2hlbWE7aWYoaS4kc2NoZW1hKXt2YXIgbz1NYShpLiRzY2hlbWEpO2lmKCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTAzL3NjaGVtYSI9PT1vKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShuZXcgVGEoe30sW3hhKCJqc29uLnNjaGVtYS5kcmFmdDAzLm5vdHN1cHBvcnRlZCIsIkRyYWZ0LTAzIHNjaGVtYXMgYXJlIG5vdCBzdXBwb3J0ZWQuIildKSk7Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMTktMDkvc2NoZW1hIj09PW8/ci5wdXNoKHhhKCJqc29uLnNjaGVtYS5kcmFmdDIwMTkwOS5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDE5LTA5IHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKToiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPT09byYmci5wdXNoKHhhKCJqc29uLnNjaGVtYS5kcmFmdDIwMjAxMi5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDIwLTEyIHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKX12YXIgYT10aGlzLmNvbnRleHRTZXJ2aWNlLHM9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8sYSxzLGM7dm9pZCAwPT09aXx8MD09PWkubGVuZ3RoP289dDoiLyI9PT1pLmNoYXJBdCgwKT9vPWZ1bmN0aW9uKGUsdCl7dD1kZWNvZGVVUklDb21wb25lbnQodCk7dmFyIG49ZTtyZXR1cm4iLyI9PT10WzBdJiYodD10LnN1YnN0cmluZygxKSksdC5zcGxpdCgiLyIpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKSwhKG49bltlXSl9KSksbn0odCxpKTooYT10LGM9aSwocz1uKS5hbmNob3JzfHwocy5hbmNob3JzPXUoYSkpLG89cy5hbmNob3JzLmdldChjKSksbz9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJiFlLmhhc093blByb3BlcnR5KG4pJiYiaWQiIT09biYmIiRpZCIhPT1uJiYoZVtuXT10W25dKX0oZSxvKTpyLnB1c2goeGEoImpzb24uc2NoZW1hLmludmFsaWRpZCIsIiRyZWYgJ3swfScgaW4gJ3sxfScgY2FuIG5vdCBiZSByZXNvbHZlZC4iLGksbi51cmkpKX0sYz1mdW5jdGlvbihlLHQsaSxvKXthJiYhL15bQS1aYS16XVtBLVphLXowLTkrXC0uK10qOlwvXC8uKi8udGVzdCh0KSYmKHQ9YS5yZXNvbHZlUmVsYXRpdmVQYXRoKHQsby51cmkpKSx0PU1hKHQpO3ZhciBjPW4uZ2V0T3JBZGRTY2hlbWFIYW5kbGUodCk7cmV0dXJuIGMuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKG4pe2lmKG8uZGVwZW5kZW5jaWVzLmFkZCh0KSxuLmVycm9ycy5sZW5ndGgpe3ZhciBhPWk/dCsiIyIraTp0O3IucHVzaCh4YSgianNvbi5zY2hlbWEucHJvYmxlbWxvYWRpbmdyZWYiLCJQcm9ibGVtcyBsb2FkaW5nIHJlZmVyZW5jZSAnezB9JzogezF9IixhLG4uZXJyb3JzWzBdKSl9cmV0dXJuIHMoZSxuLnNjaGVtYSxjLGkpLGwoZSxuLnNjaGVtYSxjKX0pKX0sbD1mdW5jdGlvbihlLHQscil7dmFyIGk9W107cmV0dXJuIG4udHJhdmVyc2VOb2RlcyhlLChmdW5jdGlvbihlKXtmb3IodmFyIG49bmV3IFNldDtlLiRyZWY7KXt2YXIgbz1lLiRyZWYsYT1vLnNwbGl0KCIjIiwyKTtpZihkZWxldGUgZS4kcmVmLGFbMF0ubGVuZ3RoPjApcmV0dXJuIHZvaWQgaS5wdXNoKGMoZSxhWzBdLGFbMV0scikpO2lmKCFuLmhhcyhvKSl7dmFyIGw9YVsxXTtzKGUsdCxyLGwpLG4uYWRkKG8pfX19KSksbi5wcm9taXNlLmFsbChpKX0sdT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgTWFwO3JldHVybiBuLnRyYXZlcnNlTm9kZXMoZSwoZnVuY3Rpb24oZSl7dmFyIG49ZS4kaWR8fGUuaWQ7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYiIyI9PT1uLmNoYXJBdCgwKSl7dmFyIGk9bi5zdWJzdHJpbmcoMSk7dC5oYXMoaSk/ci5wdXNoKHhhKCJqc29uLnNjaGVtYS5kdXBsaWNhdGVpZCIsIkR1cGxpY2F0ZSBpZCBkZWNsYXJhdGlvbjogJ3swfSciLG4pKTp0LnNldChpLGUpfX0pKSx0fTtyZXR1cm4gbChpLGksdCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUYShpLHIpfSkpfSxlLnByb3RvdHlwZS50cmF2ZXJzZU5vZGVzPWZ1bmN0aW9uKGUsdCl7aWYoIWV8fCJvYmplY3QiIT10eXBlb2YgZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO2Zvcih2YXIgbj1uZXcgU2V0LHI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dOyJvYmplY3QiPT10eXBlb2YgaSYmYS5wdXNoKGkpfX0saT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoIm9iamVjdCI9PXR5cGVvZiBpKWZvcih2YXIgbyBpbiBpKXt2YXIgcz1vLGM9aVtzXTsib2JqZWN0Ij09dHlwZW9mIGMmJmEucHVzaChjKX19fSxvPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZihBcnJheS5pc0FycmF5KGkpKWZvcih2YXIgbz0wLHM9aTtvPHMubGVuZ3RoO28rKyl7dmFyIGM9c1tvXTsib2JqZWN0Ij09dHlwZW9mIGMmJmEucHVzaChjKX19fSxhPVtlXSxzPWEucG9wKCk7czspbi5oYXMocyl8fChuLmFkZChzKSx0KHMpLHIocy5pdGVtcyxzLmFkZGl0aW9uYWxJdGVtcyxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLHMubm90LHMuY29udGFpbnMscy5wcm9wZXJ0eU5hbWVzLHMuaWYscy50aGVuLHMuZWxzZSksaShzLmRlZmluaXRpb25zLHMucHJvcGVydGllcyxzLnBhdHRlcm5Qcm9wZXJ0aWVzLHMuZGVwZW5kZW5jaWVzKSxvKHMuYW55T2Yscy5hbGxPZixzLm9uZU9mLHMuaXRlbXMpKSxzPWEucG9wKCl9LGUucHJvdG90eXBlLmdldFNjaGVtYUZyb21Qcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYoIm9iamVjdCI9PT0obnVsbD09PShuPXQucm9vdCl8fHZvaWQgMD09PW4/dm9pZCAwOm4udHlwZSkpZm9yKHZhciBpPTAsbz10LnJvb3QucHJvcGVydGllcztpPG8ubGVuZ3RoO2krKyl7dmFyIGE9b1tpXTtpZigiJHNjaGVtYSI9PT1hLmtleU5vZGUudmFsdWUmJiJzdHJpbmciPT09KG51bGw9PT0ocj1hLnZhbHVlTm9kZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIudHlwZSkpe3ZhciBzPWEudmFsdWVOb2RlLnZhbHVlO3JldHVybiB0aGlzLmNvbnRleHRTZXJ2aWNlJiYhL15cd1tcd1xkKy4tXSo6Ly50ZXN0KHMpJiYocz10aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmVSZWxhdGl2ZVBhdGgocyxlKSksc319fSxlLnByb3RvdHlwZS5nZXRBc3NvY2lhdGVkU2NoZW1hcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxuPVtdLHI9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBfYS5wYXJzZShlKS53aXRoKHtmcmFnbWVudDpudWxsLHF1ZXJ5Om51bGx9KS50b1N0cmluZyghMCl9Y2F0Y2godCl7cmV0dXJuIGV9fShlKSxpPTAsbz10aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldO2lmKGEubWF0Y2hlc1BhdHRlcm4ocikpZm9yKHZhciBzPTAsYz1hLmdldFVSSXMoKTtzPGMubGVuZ3RoO3MrKyl7dmFyIGw9Y1tzXTt0W2xdfHwobi5wdXNoKGwpLHRbbF09ITApfX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hVVJJc0ZvclJlc291cmNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dCYmdGhpcy5nZXRTY2hlbWFGcm9tUHJvcGVydHkoZSx0KTtyZXR1cm4gbj9bbl06dGhpcy5nZXRBc3NvY2lhdGVkU2NoZW1hcyhlKX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hRm9yUmVzb3VyY2U9ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj10aGlzLmdldFNjaGVtYUZyb21Qcm9wZXJ0eShlLHQpO2lmKG4pe3ZhciByPU1hKG4pO3JldHVybiB0aGlzLmdldE9yQWRkU2NoZW1hSGFuZGxlKHIpLmdldFJlc29sdmVkU2NoZW1hKCl9fWlmKHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UmJnRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb3VyY2U9PT1lKXJldHVybiB0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlLnJlc29sdmVkU2NoZW1hO3ZhciBpPXRoaXMuZ2V0QXNzb2NpYXRlZFNjaGVtYXMoZSksbz1pLmxlbmd0aD4wP3RoaXMuY3JlYXRlQ29tYmluZWRTY2hlbWEoZSxpKS5nZXRSZXNvbHZlZFNjaGVtYSgpOnRoaXMucHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk7cmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9e3Jlc291cmNlOmUscmVzb2x2ZWRTY2hlbWE6b30sb30sZS5wcm90b3R5cGUuY3JlYXRlQ29tYmluZWRTY2hlbWE9ZnVuY3Rpb24oZSx0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUodFswXSk7dmFyIG49InNjaGVtYXNlcnZpY2U6Ly9jb21iaW5lZFNjaGVtYS8iK2VuY29kZVVSSUNvbXBvbmVudChlKSxyPXthbGxPZjp0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJueyRyZWY6ZX19KSl9O3JldHVybiB0aGlzLmFkZFNjaGVtYUhhbmRsZShuLHIpfSxlLnByb3RvdHlwZS5nZXRNYXRjaGluZ1NjaGVtYXM9ZnVuY3Rpb24oZSx0LG4pe2lmKG4pe3ZhciByPW4uaWR8fCJzY2hlbWFzZXJ2aWNlOi8vdW50aXRsZWQvbWF0Y2hpbmdTY2hlbWFzLyIrSWErKztyZXR1cm4gdGhpcy5hZGRTY2hlbWFIYW5kbGUocixuKS5nZXRSZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiB0LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5pbnZlcnRlZH0pKX0pKX1yZXR1cm4gdGhpcy5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSx0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZT90LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5pbnZlcnRlZH0pKTpbXX0pKX0sZX0oKSxJYT0wO2Z1bmN0aW9uIE1hKGUpe3RyeXtyZXR1cm4gX2EucGFyc2UoZSkudG9TdHJpbmcoITApfWNhdGNoKHQpe3JldHVybiBlfX1mdW5jdGlvbiBQYShlKXt0cnl7dmFyIHQ9X2EucGFyc2UoZSk7aWYoImZpbGUiPT09dC5zY2hlbWUpcmV0dXJuIHQuZnNQYXRofWNhdGNoKGUpe31yZXR1cm4gZX1mdW5jdGlvbiBSYShlLHQpe3ZhciBuPVtdLHI9W10saT1bXSxvPS0xLGE9dGkoZS5nZXRUZXh0KCksITEpLHM9YS5zY2FuKCk7ZnVuY3Rpb24gYyhlKXtuLnB1c2goZSksci5wdXNoKGkubGVuZ3RoKX1mb3IoOzE3IT09czspe3N3aXRjaChzKXtjYXNlIDE6Y2FzZSAzOnZhciBsPXtzdGFydExpbmU6Zj1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGVuZExpbmU6ZixraW5kOjE9PT1zPyJvYmplY3QiOiJhcnJheSJ9O2kucHVzaChsKTticmVhaztjYXNlIDI6Y2FzZSA0OnZhciB1PTI9PT1zPyJvYmplY3QiOiJhcnJheSI7aWYoaS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXS5raW5kPT09dSl7bD1pLnBvcCgpO3ZhciBoPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7bCYmaD5sLnN0YXJ0TGluZSsxJiZvIT09bC5zdGFydExpbmUmJihsLmVuZExpbmU9aC0xLGMobCksbz1sLnN0YXJ0TGluZSl9YnJlYWs7Y2FzZSAxMzp2YXIgZj1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGQ9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSthLmdldFRva2VuTGVuZ3RoKCkpLmxpbmU7MT09PWEuZ2V0VG9rZW5FcnJvcigpJiZmKzE8ZS5saW5lQ291bnQ/YS5zZXRQb3NpdGlvbihlLm9mZnNldEF0KHVyLmNyZWF0ZShmKzEsMCkpKTpmPGQmJihjKHtzdGFydExpbmU6ZixlbmRMaW5lOmQsa2luZDpBci5Db21tZW50fSksbz1mKTticmVhaztjYXNlIDEyOnZhciBtPWUuZ2V0VGV4dCgpLnN1YnN0cihhLmdldFRva2VuT2Zmc2V0KCksYS5nZXRUb2tlbkxlbmd0aCgpKS5tYXRjaCgvXlwvXC9ccyojKHJlZ2lvblxiKXwoZW5kcmVnaW9uXGIpLyk7aWYobSl7aD1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lO2lmKG1bMV0pe2w9e3N0YXJ0TGluZTpoLGVuZExpbmU6aCxraW5kOkFyLlJlZ2lvbn07aS5wdXNoKGwpfWVsc2V7Zm9yKHZhciBnPWkubGVuZ3RoLTE7Zz49MCYmaVtnXS5raW5kIT09QXIuUmVnaW9uOylnLS07aWYoZz49MCl7bD1pW2ddO2kubGVuZ3RoPWcsaD5sLnN0YXJ0TGluZSYmbyE9PWwuc3RhcnRMaW5lJiYobC5lbmRMaW5lPWgsYyhsKSxvPWwuc3RhcnRMaW5lKX19fX1zPWEuc2NhbigpfXZhciBwPXQmJnQucmFuZ2VMaW1pdDtpZigibnVtYmVyIiE9dHlwZW9mIHB8fG4ubGVuZ3RoPD1wKXJldHVybiBuO3QmJnQub25SYW5nZUxpbWl0RXhjZWVkZWQmJnQub25SYW5nZUxpbWl0RXhjZWVkZWQoZS51cmkpO2Zvcih2YXIgYj1bXSx2PTAseT1yO3Y8eS5sZW5ndGg7disrKXsoQT15W3ZdKTwzMCYmKGJbQV09KGJbQV18fDApKzEpfXZhciBDPTAsdz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBfPWJbZ107aWYoXyl7aWYoXytDPnApe3c9ZzticmVha31DKz1ffX12YXIgUz1bXTtmb3IoZz0wO2c8bi5sZW5ndGg7ZysrKXt2YXIgQTsibnVtYmVyIj09dHlwZW9mKEE9cltnXSkmJihBPHd8fEE9PT13JiZDKys8cCkmJlMucHVzaChuW2ddKX1yZXR1cm4gU31mdW5jdGlvbiBWYShlLHQsbil7ZnVuY3Rpb24gcih0LG4pe3JldHVybiBmci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQpLGUucG9zaXRpb25BdChuKSl9dmFyIGk9dGkoZS5nZXRUZXh0KCksITApO2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gaS5zZXRQb3NpdGlvbihlKSxpLnNjYW4oKT09PXQ/aS5nZXRUb2tlbk9mZnNldCgpK2kuZ2V0VG9rZW5MZW5ndGgoKTotMX1yZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT1lLm9mZnNldEF0KHQpLGE9bi5nZXROb2RlRnJvbU9mZnNldChpLCEwKSxzPVtdO2E7KXtzd2l0Y2goYS50eXBlKXtjYXNlInN0cmluZyI6Y2FzZSJvYmplY3QiOmNhc2UiYXJyYXkiOnZhciBjPWEub2Zmc2V0KzEsbD1hLm9mZnNldCthLmxlbmd0aC0xO2M8bCYmaT49YyYmaTw9bCYmcy5wdXNoKHIoYyxsKSkscy5wdXNoKHIoYS5vZmZzZXQsYS5vZmZzZXQrYS5sZW5ndGgpKTticmVhaztjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpjYXNlIm51bGwiOmNhc2UicHJvcGVydHkiOnMucHVzaChyKGEub2Zmc2V0LGEub2Zmc2V0K2EubGVuZ3RoKSl9aWYoInByb3BlcnR5Ij09PWEudHlwZXx8YS5wYXJlbnQmJiJhcnJheSI9PT1hLnBhcmVudC50eXBlKXt2YXIgdT1vKGEub2Zmc2V0K2EubGVuZ3RoLDUpOy0xIT09dSYmcy5wdXNoKHIoYS5vZmZzZXQsdSkpfWE9YS5wYXJlbnR9Zm9yKHZhciBoPXZvaWQgMCxmPXMubGVuZ3RoLTE7Zj49MDtmLS0paD1hby5jcmVhdGUoc1tmXSxoKTtyZXR1cm4gaHx8KGg9YW8uY3JlYXRlKGZyLmNyZWF0ZSh0LHQpKSksaH0pKX1mdW5jdGlvbiBGYShlLHQpe3ZhciBuPVtdO3JldHVybiB0LnZpc2l0KChmdW5jdGlvbihyKXt2YXIgaTtpZigicHJvcGVydHkiPT09ci50eXBlJiYiJHJlZiI9PT1yLmtleU5vZGUudmFsdWUmJiJzdHJpbmciPT09KG51bGw9PT0oaT1yLnZhbHVlTm9kZSl8fHZvaWQgMD09PWk/dm9pZCAwOmkudHlwZSkpe3ZhciBvPXIudmFsdWVOb2RlLnZhbHVlLGE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtpZigiIyI9PT1lKXJldHVybltdO2lmKCIjIiE9PWVbMF18fCIvIiE9PWVbMV0pcmV0dXJuIG51bGw7cmV0dXJuIGUuc3Vic3RyaW5nKDIpLnNwbGl0KC9cLy8pLm1hcChqYSl9KHQpO2lmKCFuKXJldHVybiBudWxsO3JldHVybiBLYShuLGUucm9vdCl9KHQsbyk7aWYoYSl7dmFyIHM9ZS5wb3NpdGlvbkF0KGEub2Zmc2V0KTtuLnB1c2goe3RhcmdldDoiIi5jb25jYXQoZS51cmksIiMiKS5jb25jYXQocy5saW5lKzEsIiwiKS5jb25jYXQocy5jaGFyYWN0ZXIrMSkscmFuZ2U6RGEoZSxyLnZhbHVlTm9kZSl9KX19cmV0dXJuITB9KSksUHJvbWlzZS5yZXNvbHZlKG4pfWZ1bmN0aW9uIERhKGUsdCl7cmV0dXJuIGZyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQrMSksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoLTEpKX1mdW5jdGlvbiBLYShlLHQpe2lmKCF0KXJldHVybiBudWxsO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj1lLnNoaWZ0KCk7aWYodCYmIm9iamVjdCI9PT10LnR5cGUpe3ZhciByPXQucHJvcGVydGllcy5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXlOb2RlLnZhbHVlPT09bn0pKTtyZXR1cm4gcj9LYShlLHIudmFsdWVOb2RlKTpudWxsfWlmKHQmJiJhcnJheSI9PT10LnR5cGUmJm4ubWF0Y2goL14oMHxbMS05XVswLTldKikkLykpe3ZhciBpPU51bWJlci5wYXJzZUludChuKSxvPXQuaXRlbXNbaV07cmV0dXJuIG8/S2EoZSxvKTpudWxsfXJldHVybiBudWxsfWZ1bmN0aW9uIGphKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gVWEoZSl7dmFyIHQ9ZS5wcm9taXNlQ29uc3RydWN0b3J8fFByb21pc2Usbj1uZXcgT2EoZS5zY2hlbWFSZXF1ZXN0U2VydmljZSxlLndvcmtzcGFjZUNvbnRleHQsdCk7bi5zZXRTY2hlbWFDb250cmlidXRpb25zKENhKTt2YXIgcj1uZXcgZWEobixlLmNvbnRyaWJ1dGlvbnMsdCxlLmNsaWVudENhcGFiaWxpdGllcyksaT1uZXcgdGEobixlLmNvbnRyaWJ1dGlvbnMsdCksbz1uZXcgaGEobiksYT1uZXcgaWEobix0KTtyZXR1cm57Y29uZmlndXJlOmZ1bmN0aW9uKGUpe24uY2xlYXJFeHRlcm5hbFNjaGVtYXMoKSxlLnNjaGVtYXMmJmUuc2NoZW1hcy5mb3JFYWNoKChmdW5jdGlvbihlKXtuLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWEoZS51cmksZS5maWxlTWF0Y2gsZS5zY2hlbWEpfSkpLGEuY29uZmlndXJlKGUpfSxyZXNldFNjaGVtYTpmdW5jdGlvbihlKXtyZXR1cm4gbi5vblJlc291cmNlQ2hhbmdlKGUpfSxkb1ZhbGlkYXRpb246YS5kb1ZhbGlkYXRpb24uYmluZChhKSxnZXRMYW5ndWFnZVN0YXR1czphLmdldExhbmd1YWdlU3RhdHVzLmJpbmQoYSkscGFyc2VKU09ORG9jdW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFpvKGUse2NvbGxlY3RDb21tZW50czohMH0pfSxuZXdKU09ORG9jdW1lbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9W10pLG5ldyBKbyhlLHQsW10pfShlLHQpfSxnZXRNYXRjaGluZ1NjaGVtYXM6bi5nZXRNYXRjaGluZ1NjaGVtYXMuYmluZChuKSxkb1Jlc29sdmU6ci5kb1Jlc29sdmUuYmluZChyKSxkb0NvbXBsZXRlOnIuZG9Db21wbGV0ZS5iaW5kKHIpLGZpbmREb2N1bWVudFN5bWJvbHM6by5maW5kRG9jdW1lbnRTeW1ib2xzLmJpbmQobyksZmluZERvY3VtZW50U3ltYm9sczI6by5maW5kRG9jdW1lbnRTeW1ib2xzMi5iaW5kKG8pLGZpbmREb2N1bWVudENvbG9yczpvLmZpbmREb2N1bWVudENvbG9ycy5iaW5kKG8pLGdldENvbG9yUHJlc2VudGF0aW9uczpvLmdldENvbG9yUHJlc2VudGF0aW9ucy5iaW5kKG8pLGRvSG92ZXI6aS5kb0hvdmVyLmJpbmQoaSksZ2V0Rm9sZGluZ1JhbmdlczpSYSxnZXRTZWxlY3Rpb25SYW5nZXM6VmEsZmluZERlZmluaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKX0sZmluZExpbmtzOkZhLGZvcm1hdDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dm9pZCAwO2lmKHQpe3ZhciBpPWUub2Zmc2V0QXQodC5zdGFydCk7cj17b2Zmc2V0OmksbGVuZ3RoOmUub2Zmc2V0QXQodC5lbmQpLWl9fXZhciBvPXt0YWJTaXplOm4/bi50YWJTaXplOjQsaW5zZXJ0U3BhY2VzOiEwPT09KG51bGw9PW4/dm9pZCAwOm4uaW5zZXJ0U3BhY2VzKSxpbnNlcnRGaW5hbE5ld2xpbmU6ITA9PT0obnVsbD09bj92b2lkIDA6bi5pbnNlcnRGaW5hbE5ld2xpbmUpLGVvbDoiXG4ifTtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiBucihlLHQsbil9KGUuZ2V0VGV4dCgpLHIsbykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gS3IucmVwbGFjZShmci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgpKSx0LmNvbnRlbnQpfSkpfX19InVuZGVmaW5lZCIhPXR5cGVvZiBmZXRjaCYmKEVhPWZ1bmN0aW9uKGUpe3JldHVybiBmZXRjaChlKS50aGVuKChlPT5lLnRleHQoKSkpfSk7dmFyIEJhPSIvIi5jaGFyQ29kZUF0KDApLHFhPSIuIi5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uICRhKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSkwPT09bi5sZW5ndGh8fDE9PT1uLmxlbmd0aCYmbi5jaGFyQ29kZUF0KDApPT09cWF8fCgyPT09bi5sZW5ndGgmJm4uY2hhckNvZGVBdCgwKT09PXFhJiZuLmNoYXJDb2RlQXQoMSk9PT1xYT90LnBvcCgpOnQucHVzaChuKSk7ZS5sZW5ndGg+MSYmMD09PWVbZS5sZW5ndGgtMV0ubGVuZ3RoJiZ0LnB1c2goIiIpO2xldCBuPXQuam9pbigiLyIpO3JldHVybiAwPT09ZVswXS5sZW5ndGgmJihuPSIvIituKSxufXNlbGYub25tZXNzYWdlPSgpPT57Wm4oKChlLHQpPT5uZXcgY2xhc3N7X2N0eDtfbGFuZ3VhZ2VTZXJ2aWNlO19sYW5ndWFnZVNldHRpbmdzO19sYW5ndWFnZUlkO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fY3R4PWUsdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncz10Lmxhbmd1YWdlU2V0dGluZ3MsdGhpcy5fbGFuZ3VhZ2VJZD10Lmxhbmd1YWdlSWQsdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlPVVhKHt3b3Jrc3BhY2VDb250ZXh0OntyZXNvbHZlUmVsYXRpdmVQYXRoOihlLHQpPT5mdW5jdGlvbihlLHQpe2lmKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT1CYX0odCkpe2NvbnN0IG49X2EucGFyc2UoZSkscj10LnNwbGl0KCIvIik7cmV0dXJuIG4ud2l0aCh7cGF0aDokYShyKX0pLnRvU3RyaW5nKCl9cmV0dXJuIGZ1bmN0aW9uKGUsLi4udCl7Y29uc3Qgbj1fYS5wYXJzZShlKSxyPW4ucGF0aC5zcGxpdCgiLyIpO2ZvcihsZXQgZSBvZiB0KXIucHVzaCguLi5lLnNwbGl0KCIvIikpO3JldHVybiBuLndpdGgoe3BhdGg6JGEocil9KS50b1N0cmluZygpfShlLHQpfSh0LnN1YnN0cigwLHQubGFzdEluZGV4T2YoIi8iKSsxKSxlKX0sc2NoZW1hUmVxdWVzdFNlcnZpY2U6dC5lbmFibGVTY2hlbWFSZXF1ZXN0P0VhOnZvaWQgMH0pLHRoaXMuX2xhbmd1YWdlU2VydmljZS5jb25maWd1cmUodGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyl9YXN5bmMgZG9WYWxpZGF0aW9uKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZih0KXtsZXQgZT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCk7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1ZhbGlkYXRpb24odCxlLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3MpfXJldHVybiBQcm9taXNlLnJlc29sdmUoW10pfWFzeW5jIGRvQ29tcGxldGUoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Db21wbGV0ZShuLHQscil9YXN5bmMgZG9SZXNvbHZlKGUpe3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9SZXNvbHZlKGUpfWFzeW5jIGRvSG92ZXIoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Ib3ZlcihuLHQscil9YXN5bmMgZm9ybWF0KGUsdCxuKXtsZXQgcj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXIpcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZvcm1hdChyLHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1hc3luYyByZXNldFNjaGVtYShlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xhbmd1YWdlU2VydmljZS5yZXNldFNjaGVtYShlKSl9YXN5bmMgZmluZERvY3VtZW50U3ltYm9scyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudFN5bWJvbHModCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGZpbmREb2N1bWVudENvbG9ycyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudENvbG9ycyh0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZ2V0Q29sb3JQcmVzZW50YXRpb25zKGUsdCxuKXtsZXQgcj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXIpcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHIpLG89dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldENvbG9yUHJlc2VudGF0aW9ucyhyLGksdCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG8pfWFzeW5jIGdldEZvbGRpbmdSYW5nZXMoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuW107bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldEZvbGRpbmdSYW5nZXMobix0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGdldFNlbGVjdGlvblJhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobiksaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0U2VsZWN0aW9uUmFuZ2VzKG4sdCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfV9nZXRUZXh0RG9jdW1lbnQoZSl7bGV0IHQ9dGhpcy5fY3R4LmdldE1pcnJvck1vZGVscygpO2ZvcihsZXQgbiBvZiB0KWlmKG4udXJpLnRvU3RyaW5nKCk9PT1lKXJldHVybiBwby5jcmVhdGUoZSx0aGlzLl9sYW5ndWFnZUlkLG4udmVyc2lvbixuLmdldFZhbHVlKCkpO3JldHVybiBudWxsfX0oZSx0KSkpfX0oKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9anNvbi53b3JrZXIuanMubWFwCgo=', null, false);
|
|
4
|
-
/* eslint-enable */
|
|
5
|
-
|
|
6
|
-
export { WorkerFactory as default };
|