semantifold 0.2.0 → 0.3.0
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 +37 -12
- package/build/index.js +2 -2
- package/build/src/acceptance.d.ts +10 -0
- package/build/src/acceptance.d.ts.map +1 -1
- package/build/src/acceptance.js +24 -5
- package/build/src/backends/c-runtime.d.ts +3 -0
- package/build/src/backends/c-runtime.d.ts.map +1 -0
- package/build/src/backends/c-runtime.js +151 -0
- package/build/src/backends/c-validation.d.ts +12 -0
- package/build/src/backends/c-validation.d.ts.map +1 -0
- package/build/src/backends/c-validation.js +85 -0
- package/build/src/backends/c.d.ts +31 -0
- package/build/src/backends/c.d.ts.map +1 -0
- package/build/src/backends/c.js +308 -0
- package/build/src/backends/cpp-runtime.d.ts +3 -0
- package/build/src/backends/cpp-runtime.d.ts.map +1 -0
- package/build/src/backends/cpp-runtime.js +99 -0
- package/build/src/backends/cpp-validation.d.ts +9 -0
- package/build/src/backends/cpp-validation.d.ts.map +1 -0
- package/build/src/backends/cpp-validation.js +74 -0
- package/build/src/backends/cpp.d.ts +16 -0
- package/build/src/backends/cpp.d.ts.map +1 -0
- package/build/src/backends/cpp.js +285 -0
- package/build/src/backends/csharp.d.ts +20 -0
- package/build/src/backends/csharp.d.ts.map +1 -0
- package/build/src/backends/csharp.js +259 -0
- package/build/src/backends/go.d.ts +20 -0
- package/build/src/backends/go.d.ts.map +1 -0
- package/build/src/backends/go.js +374 -0
- package/build/src/backends/identifiers.d.ts +12 -0
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +71 -2
- package/build/src/backends/index.d.ts.map +1 -1
- package/build/src/backends/index.js +9 -1
- package/build/src/backends/native-validation.d.ts +9 -0
- package/build/src/backends/native-validation.d.ts.map +1 -0
- package/build/src/backends/native-validation.js +59 -0
- package/build/src/backends/ordered-expressions.d.ts +74 -0
- package/build/src/backends/ordered-expressions.d.ts.map +1 -0
- package/build/src/backends/ordered-expressions.js +159 -0
- package/build/src/backends/scalars.d.ts.map +1 -1
- package/build/src/backends/scalars.js +7 -2
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +59 -14
- package/build/src/frontends/c-parser.d.ts +20 -0
- package/build/src/frontends/c-parser.d.ts.map +1 -0
- package/build/src/frontends/c-parser.js +14 -0
- package/build/src/frontends/c.d.ts +220 -0
- package/build/src/frontends/c.d.ts.map +1 -0
- package/build/src/frontends/c.js +750 -0
- package/build/src/frontends/cpp-parser.d.ts +11 -0
- package/build/src/frontends/cpp-parser.d.ts.map +1 -0
- package/build/src/frontends/cpp-parser.js +15 -0
- package/build/src/frontends/cpp.d.ts +227 -0
- package/build/src/frontends/cpp.d.ts.map +1 -0
- package/build/src/frontends/cpp.js +784 -0
- package/build/src/frontends/csharp.d.ts +14 -0
- package/build/src/frontends/csharp.d.ts.map +1 -0
- package/build/src/frontends/csharp.js +708 -0
- package/build/src/frontends/go.d.ts +15 -0
- package/build/src/frontends/go.d.ts.map +1 -0
- package/build/src/frontends/go.js +712 -0
- package/build/src/frontends/scalars.d.ts.map +1 -1
- package/build/src/frontends/scalars.js +16 -1
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +51 -2
- package/build/src/mapping.js +2 -2
- package/build/src/semantic/provenance.js +3 -3
- package/build/src/semantic/types.d.ts +4 -4
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +3 -3
- package/build/src/subprocess.d.ts +10 -1
- package/build/src/subprocess.d.ts.map +1 -1
- package/build/src/subprocess.js +29 -3
- package/build/src/toolchains.d.ts +24 -0
- package/build/src/toolchains.d.ts.map +1 -1
- package/build/src/toolchains.js +6 -2
- package/docs/architecture.md +20 -6
- package/docs/c.md +60 -0
- package/docs/cpp.md +61 -0
- package/docs/goals.md +4 -2
- package/docs/language-support.md +27 -8
- package/docs/parser-qualification.md +153 -4
- package/docs/plans/2026-09-05-standard-library-portability.md +46 -0
- package/docs/source-maps.md +11 -5
- package/docs/standard-library-portability.md +190 -0
- package/docs/testing.md +113 -4
- package/index.js +1 -1
- package/node_modules/node-addon-api/LICENSE.md +9 -0
- package/node_modules/node-addon-api/README.md +95 -0
- package/node_modules/node-addon-api/common.gypi +21 -0
- package/node_modules/node-addon-api/except.gypi +25 -0
- package/node_modules/node-addon-api/index.js +14 -0
- package/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
- package/node_modules/node-addon-api/napi-inl.h +7250 -0
- package/node_modules/node-addon-api/napi.h +3463 -0
- package/node_modules/node-addon-api/node_addon_api.gyp +42 -0
- package/node_modules/node-addon-api/node_api.gyp +9 -0
- package/node_modules/node-addon-api/noexcept.gypi +26 -0
- package/node_modules/node-addon-api/nothing.c +0 -0
- package/node_modules/node-addon-api/package-support.json +21 -0
- package/node_modules/node-addon-api/package.json +481 -0
- package/node_modules/node-addon-api/tools/README.md +73 -0
- package/node_modules/node-addon-api/tools/check-napi.js +99 -0
- package/node_modules/node-addon-api/tools/clang-format.js +71 -0
- package/node_modules/node-addon-api/tools/conversion.js +301 -0
- package/node_modules/node-gyp-build/LICENSE +21 -0
- package/node_modules/node-gyp-build/README.md +58 -0
- package/node_modules/node-gyp-build/SECURITY.md +5 -0
- package/node_modules/node-gyp-build/bin.js +84 -0
- package/node_modules/node-gyp-build/build-test.js +19 -0
- package/node_modules/node-gyp-build/index.js +6 -0
- package/node_modules/node-gyp-build/node-gyp-build.js +207 -0
- package/node_modules/node-gyp-build/optional.js +7 -0
- package/node_modules/node-gyp-build/package.json +43 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/LICENSE +15 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +7 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/README.md +90 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/binding.gyp +79 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/index.js +895 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/package.json +62 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/addon_data.h +47 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/binding.cc +35 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.cc +140 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.h +22 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.cc +106 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.h +17 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.cc +70 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.h +19 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.cc +1056 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.h +30 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.cc +298 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.h +35 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.cc +383 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.h +39 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.cc +307 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.h +45 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.h +52 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/tree-sitter.d.ts +211 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +501 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +221 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +299 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +419 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +49 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +14 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +774 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2151 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +230 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +62 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4134 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +899 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1060 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +382 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +165 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +714 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +50 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +23 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +109 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1294 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1823 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/README.md +18 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/binding.gyp +29 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding.cc +20 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding_test.js +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.d.ts +28 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.js +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/grammar.js +1470 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/package.json +60 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-arm64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-x64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-arm64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-x64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-arm64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-x64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/highlights.scm +81 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/tags.scm +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/grammar.json +9735 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/node-types.json +4614 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/parser.c +119615 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/alloc.h +54 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter-c.wasm +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter.json +43 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/README.md +22 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/binding.gyp +30 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding.cc +20 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding_test.js +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.d.ts +28 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.js +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/grammar.js +1436 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/package.json +61 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-arm64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-x64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-arm64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-x64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-arm64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-x64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/highlights.scm +70 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/injections.scm +3 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/tags.scm +15 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/grammar.json +17084 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/node-types.json +7997 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/parser.c +530368 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/scanner.c +148 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/alloc.h +54 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter-cpp.wasm +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter.json +55 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +22 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +152 -0
- package/node_modules/tree-sitter/LICENSE +21 -0
- package/node_modules/tree-sitter/README.md +128 -0
- package/node_modules/tree-sitter/binding.gyp +88 -0
- package/node_modules/tree-sitter/index.js +950 -0
- package/node_modules/tree-sitter/package.json +76 -0
- package/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/linux-arm64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/win32-arm64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/src/addon_data.h +47 -0
- package/node_modules/tree-sitter/src/binding.cc +35 -0
- package/node_modules/tree-sitter/src/conversions.cc +140 -0
- package/node_modules/tree-sitter/src/conversions.h +22 -0
- package/node_modules/tree-sitter/src/language.cc +105 -0
- package/node_modules/tree-sitter/src/language.h +17 -0
- package/node_modules/tree-sitter/src/logger.cc +70 -0
- package/node_modules/tree-sitter/src/logger.h +19 -0
- package/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
- package/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
- package/node_modules/tree-sitter/src/node.cc +1088 -0
- package/node_modules/tree-sitter/src/node.h +30 -0
- package/node_modules/tree-sitter/src/parser.cc +332 -0
- package/node_modules/tree-sitter/src/parser.h +35 -0
- package/node_modules/tree-sitter/src/query.cc +425 -0
- package/node_modules/tree-sitter/src/query.h +40 -0
- package/node_modules/tree-sitter/src/tree.cc +316 -0
- package/node_modules/tree-sitter/src/tree.h +45 -0
- package/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
- package/node_modules/tree-sitter/src/tree_cursor.h +52 -0
- package/node_modules/tree-sitter/tree-sitter.d.ts +1083 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1478 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +291 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +523 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +293 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +293 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +483 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +54 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +12 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +875 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2297 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +286 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +241 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4347 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +912 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1034 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +399 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +170 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +716 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +11 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +75 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +24 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +137 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1314 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1937 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
- package/package.json +21 -5
- package/src/acceptance.js +25 -4
- package/src/backends/c-runtime.js +151 -0
- package/src/backends/c-validation.js +83 -0
- package/src/backends/c.js +308 -0
- package/src/backends/cpp-runtime.js +99 -0
- package/src/backends/cpp-validation.js +70 -0
- package/src/backends/cpp.js +285 -0
- package/src/backends/csharp.js +270 -0
- package/src/backends/go.js +383 -0
- package/src/backends/identifiers.js +72 -1
- package/src/backends/index.js +7 -0
- package/src/backends/native-validation.js +64 -0
- package/src/backends/ordered-expressions.js +161 -0
- package/src/backends/scalars.js +7 -1
- package/src/backends/shared.js +56 -12
- package/src/frontends/c-parser.js +17 -0
- package/src/frontends/c.js +780 -0
- package/src/frontends/cpp-parser.js +18 -0
- package/src/frontends/cpp.js +816 -0
- package/src/frontends/csharp.js +759 -0
- package/src/frontends/go.js +770 -0
- package/src/frontends/scalars.js +15 -0
- package/src/language-registry.js +52 -1
- package/src/mapping.js +1 -1
- package/src/semantic/provenance.js +2 -2
- package/src/semantic/types.js +2 -2
- package/src/subprocess.js +31 -2
- package/src/toolchains.js +5 -1
|
@@ -162,7 +162,7 @@ export function createGenerationIndex(module, providedSources = []) {
|
|
|
162
162
|
*/
|
|
163
163
|
function addSource(filename, content, language) {
|
|
164
164
|
if (typeof filename != "string" || content !== null && typeof content != "string" ||
|
|
165
|
-
language !== null && !["php", "ruby", "javascript", "typescript", "java", "python"].includes(language)) {
|
|
165
|
+
language !== null && !["php", "ruby", "javascript", "typescript", "java", "python", "csharp", "go", "c", "cpp"].includes(language)) {
|
|
166
166
|
throw new TypeError("Malformed semantic source registry entry.");
|
|
167
167
|
}
|
|
168
168
|
const existing = sources.find((source) => source.filename == filename && source.content == content);
|
|
@@ -212,7 +212,7 @@ function usableSourceProvenance(provenance) {
|
|
|
212
212
|
if (!source || typeof source.id != "string" || sourceIds.has(source.id) || typeof source.filename != "string" ||
|
|
213
213
|
source.filename.length == 0 ||
|
|
214
214
|
source.content !== null && typeof source.content != "string" || source.language !== null &&
|
|
215
|
-
!["php", "ruby", "javascript", "typescript", "java", "python"].includes(source.language))
|
|
215
|
+
!["php", "ruby", "javascript", "typescript", "java", "python", "csharp", "go", "c", "cpp"].includes(source.language))
|
|
216
216
|
return undefined;
|
|
217
217
|
sourceIds.add(source.id);
|
|
218
218
|
}
|
|
@@ -574,4 +574,4 @@ function resolveSymbols(module, records) {
|
|
|
574
574
|
symbol.references.push({ location, nodeId: record.id, role });
|
|
575
575
|
}
|
|
576
576
|
}
|
|
577
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVuYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBRW5FLDZGQUE2RjtBQUM3RixNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0FBQ2xDLHVHQUF1RztBQUN2RyxNQUFNLHVCQUF1QixHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFN0M7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNO0lBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ2hDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU07SUFDM0MsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUU3QixPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBQztJQUN2RSxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQ3ZFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN2Qyx1RUFBdUU7SUFDdkUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUMvQiw0REFBNEQ7SUFDNUQsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBO0lBRWxCLEtBQUssTUFBTSxDQUFDLEtB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QUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFBO1lBQ3ZELGVBQWUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksUUFBUSxDQUFDLENBQUE7UUFDM0QsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSTtRQUMzQyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU07UUFFckIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNoQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxDQUFBO1FBRXBFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUE7UUFFM0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUE7UUFFbkYsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDMUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtJQUM3RCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2NyZWF0ZUNvb3JkaW5hdGVJbmRleCwgaW5kZXhlZFBvaW50QXR9IGZyb20gXCIuL2xvY2F0aW9uLmpzXCJcblxuLyoqIEB0eXBlIHtXZWFrTWFwPG9iamVjdCwgUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbj4+Pn0gKi9cbmNvbnN0IHBhcnNlclJhbmdlcyA9IG5ldyBXZWFrTWFwKClcbi8qKiBAdHlwZSB7V2Vha01hcDxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2UsIFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUNvb3JkaW5hdGVJbmRleD4+fSAqL1xuY29uc3Qgc291cmNlQ29vcmRpbmF0ZUluZGV4ZXMgPSBuZXcgV2Vha01hcCgpXG5cbi8qKlxuICogUmVjb3JkcyBwYXJzZXItcHJvdmlkZWQgc2VtYW50aWMtdG9rZW4gcmFuZ2VzIHdpdGhvdXQgZXhwb3NpbmcgcGFyc2VyIHRyZWVzLlxuICogQHBhcmFtIHtvYmplY3R9IG5vZGUgLSBTZW1hbnRpYyBub2RlLlxuICogQHBhcmFtIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uPj59IHJhbmdlcyAtIEV4YWN0IHJvbGUgcmFuZ2VzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYXJzZXJSYW5nZXMobm9kZSwgcmFuZ2VzKSB7XG4gIHBhcnNlclJhbmdlcy5zZXQobm9kZSwgcmFuZ2VzKVxufVxuXG4vKipcbiAqIFJlY29yZHMgcGFyc2VyIHJhbmdlcyBhbmQgcmV0dXJucyB0aGUgc2FtZSBzZW1hbnRpYyBub2RlLlxuICogQHRlbXBsYXRlIHtvYmplY3R9IE5vZGVcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFNlbWFudGljIG5vZGUuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24+Pn0gcmFuZ2VzIC0gRXhhY3Qgcm9sZSByYW5nZXMuXG4gKiBAcmV0dXJucyB7Tm9kZX0gVGhlIHNhbWUgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhQYXJzZXJSYW5nZXMobm9kZSwgcmFuZ2VzKSB7XG4gIHNldFBhcnNlclJhbmdlcyhub2RlLCByYW5nZXMpXG5cbiAgcmV0dXJuIG5vZGVcbn1cblxuLyoqXG4gKiBBZGRzIGRldGVybWluaXN0aWMgcHJvdmVuYW5jZSB0byBhIHZhbGlkYXRlZCBmcm9udGVuZCBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gc291cmNlIC0gUGFyc2VkIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gc291cmNlLmxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZS5zb3VyY2UgLSBFeGFjdCBzb3VyY2UgY29udGVudC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBUaGUgc2FtZSBzZW1hbnRpYyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0ZVBhcnNlZE1vZHVsZShtb2R1bGUsIHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZX0pIHtcbiAgY29uc3Qgc291cmNlcyA9IFt7Y29udGVudDogc291cmNlLCBmaWxlbmFtZSwgaWQ6IFwic291cmNlOjBcIiwgbGFuZ3VhZ2V9XVxuICBjb25zdCBlbnRyaWVzID0gc2VtYW50aWNFbnRyaWVzKG1vZHVsZSlcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVByb3ZlbmFuY2U+fSAqL1xuICBjb25zdCByZWNvcmRzQnlQYXRoID0gbmV3IE1hcCgpXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVQcm92ZW5hbmNlW119ICovXG4gIGNvbnN0IHJlY29yZHMgPSBbXVxuXG4gIGZvciAoY29uc3QgW2luZGV4LCBlbnRyeV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCByYW5nZXMgPSBwYXJzZXJSYW5nZXMuZ2V0KGVudHJ5Lm5vZGUpID8/IHt9XG4gICAgY29uc3QgbG9jYXRpb24gPSBcImxvY2F0aW9uXCIgaW4gZW50cnkubm9kZSA/IGVudHJ5Lm5vZGUubG9jYXRpb24gOiByYW5nZXMudHlwZSA/PyBlbnRyeS5vd25lckxvY2F0aW9uXG4gICAgY29uc3Qgc291cmNlUHJvdmVuYW5jZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSAqLyAoe1xuICAgICAgb3JpZ2luOiB7a2luZDogXCJzb3VyY2VcIiwgbG9jYXRpb24sIHNvdXJjZUlkOiBcInNvdXJjZTowXCJ9LFxuICAgICAgcmFuZ2VzLFxuICAgICAgc2NoZW1hOiBcIlNlbWFudGlmb2xkTm9kZVByb3ZlbmFuY2VcIixcbiAgICAgIHZlcnNpb246IDFcbiAgICB9KVxuICAgIGNvbnN0IHJlY29yZCA9IHtcbiAgICAgIGlkOiBgbm9kZToke2luZGV4fWAsXG4gICAgICBraW5kOiBlbnRyeS5ub2RlLmtpbmQsXG4gICAgICBvcmlnaW46IHNvdXJjZVByb3ZlbmFuY2Uub3JpZ2luLFxuICAgICAgcGF0aDogZW50cnkucGF0aCxcbiAgICAgIHJhbmdlczogc291cmNlUHJvdmVuYW5jZS5yYW5nZXNcbiAgICB9XG5cbiAgICByZWNvcmRzLnB1c2gocmVjb3JkKVxuICAgIHJlY29yZHNCeVBhdGguc2V0KGVudHJ5LnBhdGgsIHJlY29yZClcbiAgICBlbnRyeS5ub2RlLnNvdXJjZVByb3ZlbmFuY2UgPSBzb3VyY2VQcm92ZW5hbmNlXG4gIH1cblxuICBjb25zdCBzeW1ib2xzID0gcmVzb2x2ZVN5bWJvbHMobW9kdWxlLCByZWNvcmRzQnlQYXRoKVxuXG4gIG1vZHVsZS5wcm92ZW5hbmNlID0ge1xuICAgIGNvb3JkaW5hdGVTeXN0ZW06IFwidXRmMTZcIixcbiAgICBub2RlczogcmVjb3JkcyxcbiAgICBzY2hlbWE6IFwiU2VtYW50aWZvbGRQcm92ZW5hbmNlXCIsXG4gICAgc291cmNlcyxcbiAgICBzeW1ib2xzLFxuICAgIHZlcnNpb246IDFcbiAgfVxuXG4gIHJldHVybiBtb2R1bGVcbn1cblxuLyoqXG4gKiBSZWJ1aWxkcyBjYW5vbmljYWwgZ2VuZXJhdGlvbiBtZXRhZGF0YSB3aXRob3V0IHRydXN0aW5nIGNhbGxlci1wcm92aWRlZCBpZGVudGl0aWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhbmd1YWdlPzogaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfVtdfSBbcHJvdmlkZWRTb3VyY2VzXSAtIEFkZGl0aW9uYWwgc291cmNlIGNvbnRlbnQuXG4gKiBAcmV0dXJucyB7e3Byb3ZlbmFuY2U6IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNQcm92ZW5hbmNlLCByZWNvcmRGb3I6IChub2RlOiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZSwgcGF0aD86IHN0cmluZykgPT4gaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVQcm92ZW5hbmNlfX0gQ2Fub25pY2FsIGluZGV4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2VuZXJhdGlvbkluZGV4KG1vZHVsZSwgcHJvdmlkZWRTb3VyY2VzID0gW10pIHtcbiAgY29uc3QgZW50cmllcyA9IHNlbWFudGljRW50cmllcyhtb2R1bGUpXG4gIGNvbnN0IHByaW9yU291cmNlcyA9IHVzYWJsZVNvdXJjZVByb3ZlbmFuY2UobW9kdWxlLnByb3ZlbmFuY2UpXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlW119ICovXG4gIGNvbnN0IHNvdXJjZXMgPSBbXVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZT59ICovXG4gIGNvbnN0IHByaW9yU291cmNlc0J5SWQgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBwcm92aWRlZFNvdXJjZXMpIGFkZFNvdXJjZShzb3VyY2UuZmlsZW5hbWUsIHNvdXJjZS5jb250ZW50LCBzb3VyY2UubGFuZ3VhZ2UgPz8gbnVsbClcbiAgaWYgKHByaW9yU291cmNlcykge1xuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHByaW9yU291cmNlcy5zb3VyY2VzKSB7XG4gICAgICBjb25zdCBjYW5vbmljYWwgPSBhZGRTb3VyY2Uoc291cmNlLmZpbGVuYW1lLCBzb3VyY2UuY29udGVudCwgc291cmNlLmxhbmd1YWdlKVxuXG4gICAgICBwcmlvclNvdXJjZXNCeUlkLnNldChzb3VyY2UuaWQsIGNhbm9uaWNhbClcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBcImxvY2F0aW9uXCIgaW4gZW50cnkubm9kZSA/IGVudHJ5Lm5vZGUubG9jYXRpb24gOiBlbnRyeS5vd25lckxvY2F0aW9uXG5cbiAgICBpZiAoIXNvdXJjZXMuc29tZSgoc291cmNlKSA9PiBzb3VyY2UuZmlsZW5hbWUgPT0gbG9jYXRpb24uZmlsZW5hbWUpKSBhZGRTb3VyY2UobG9jYXRpb24uZmlsZW5hbWUsIG51bGwsIG51bGwpXG4gIH1cbiAgY29uc3QgdmVyaWZpYWJsZVNvdXJjZXMgPSBzb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UuY29udGVudCAhPSBudWxsKVxuXG4gIC8qKiBAdHlwZSB7TWFwPG9iamVjdCwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVQcm92ZW5hbmNlW10+fSAqL1xuICBjb25zdCByZWNvcmRzQnlOb2RlID0gbmV3IE1hcCgpXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVQcm92ZW5hbmNlPn0gKi9cbiAgY29uc3QgcmVjb3Jkc0J5UGF0aCA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZVtdfSAqL1xuICBjb25zdCByZWNvcmRzID0gW11cblxuICBmb3IgKGNvbnN0IFtpbmRleCwgZW50cnldIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgbG9jYXRlZCA9IFwibG9jYXRpb25cIiBpbiBlbnRyeS5ub2RlID8gZW50cnkubm9kZS5sb2NhdGlvbiA6IGVudHJ5Lm93bmVyTG9jYXRpb25cbiAgICBjb25zdCBhc3NvY2lhdGVkID0gdXNhYmxlTm9kZVByb3ZlbmFuY2UoZW50cnkubm9kZS5zb3VyY2VQcm92ZW5hbmNlKVxuICAgIGNvbnN0IHJhbmdlcyA9IGFzc29jaWF0ZWQgPyB2YWxpZFJhbmdlcyhhc3NvY2lhdGVkLnJhbmdlcywgdmVyaWZpYWJsZVNvdXJjZXMpIDoge31cbiAgICBjb25zdCBub3JtYWxpemVkT3JpZ2luID0gYXNzb2NpYXRlZFxuICAgICAgPyBub3JtYWxpemVPcmlnaW4oYXNzb2NpYXRlZC5vcmlnaW4sIHByaW9yU291cmNlc0J5SWQsIHZlcmlmaWFibGVTb3VyY2VzKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICBjb25zdCBmYWxsYmFja1NvdXJjZSA9IHNvdXJjZUZvckxvY2F0aW9uKGxvY2F0ZWQsIHNvdXJjZXMpXG4gICAgY29uc3Qgb3JpZ2luID0gbm9ybWFsaXplZE9yaWdpbiA/PyBzb3VyY2VPcmlnaW4oZmFsbGJhY2tTb3VyY2UsIGxvY2F0ZWQpXG5cbiAgICBjb25zdCByZWNvcmQgPSB7XG4gICAgICBpZDogYG5vZGU6JHtpbmRleH1gLFxuICAgICAga2luZDogZW50cnkubm9kZS5raW5kLFxuICAgICAgb3JpZ2luLFxuICAgICAgcGF0aDogZW50cnkucGF0aCxcbiAgICAgIHJhbmdlc1xuICAgIH1cblxuICAgIHJlY29yZHMucHVzaChyZWNvcmQpXG4gICAgcmVjb3Jkc0J5UGF0aC5zZXQoZW50cnkucGF0aCwgcmVjb3JkKVxuICAgIGNvbnN0IG9jY3VycmVuY2VzID0gcmVjb3Jkc0J5Tm9kZS5nZXQoZW50cnkubm9kZSkgPz8gW11cblxuICAgIG9jY3VycmVuY2VzLnB1c2gocmVjb3JkKVxuICAgIHJlY29yZHNCeU5vZGUuc2V0KGVudHJ5Lm5vZGUsIG9jY3VycmVuY2VzKVxuICB9XG5cbiAgY29uc3Qgc3ltYm9scyA9IHJlc29sdmVTeW1ib2xzKG1vZHVsZSwgcmVjb3Jkc0J5UGF0aClcbiAgY29uc3QgcHJvdmVuYW5jZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb3ZlbmFuY2V9ICovICh7XG4gICAgY29vcmRpbmF0ZVN5c3RlbTogXCJ1dGYxNlwiLFxuICAgIG5vZGVzOiByZWNvcmRzLFxuICAgIHNjaGVtYTogXCJTZW1hbnRpZm9sZFByb3ZlbmFuY2VcIixcbiAgICBzb3VyY2VzLFxuICAgIHN5bWJvbHMsXG4gICAgdmVyc2lvbjogMVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgcHJvdmVuYW5jZSxcbiAgICByZWNvcmRGb3Iobm9kZSwgcGF0aCkge1xuICAgICAgY29uc3Qgb2NjdXJyZW5jZXMgPSByZWNvcmRzQnlOb2RlLmdldChub2RlKVxuXG4gICAgICBpZiAoIW9jY3VycmVuY2VzKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlNlbWFudGljIG5vZGUgaXMgbm90IHBhcnQgb2YgdGhpcyBtb2R1bGUuXCIpXG4gICAgICBpZiAocGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG9jY3VycmVuY2VzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnBhdGggPT0gcGF0aClcblxuICAgICAgICBpZiAoIXJlY29yZCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFNlbWFudGljIG5vZGUgZG9lcyBub3Qgb2NjdXIgYXQgJyR7cGF0aH0nLmApXG5cbiAgICAgICAgcmV0dXJuIHJlY29yZFxuICAgICAgfVxuICAgICAgaWYgKG9jY3VycmVuY2VzLmxlbmd0aCAhPSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiU2hhcmVkIHNlbWFudGljIG5vZGUgcmVxdWlyZXMgYW4gb2NjdXJyZW5jZSBwYXRoLlwiKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2NjdXJyZW5jZXNbMF1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIG9uZSBjYW5vbmljYWwgc291cmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gY29udGVudCAtIFNvdXJjZSBjb250ZW50LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZSB8IG51bGx9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlfSBDYW5vbmljYWwgc291cmNlLlxuICAgKi9cbiAgZnVuY3Rpb24gYWRkU291cmNlKGZpbGVuYW1lLCBjb250ZW50LCBsYW5ndWFnZSkge1xuICAgIGlmICh0eXBlb2YgZmlsZW5hbWUgIT0gXCJzdHJpbmdcIiB8fCBjb250ZW50ICE9PSBudWxsICYmIHR5cGVvZiBjb250ZW50ICE9IFwic3RyaW5nXCIgfHxcbiAgICAgIGxhbmd1YWdlICE9PSBudWxsICYmICFbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCIsIFwicHl0aG9uXCJdLmluY2x1ZGVzKGxhbmd1YWdlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1hbGZvcm1lZCBzZW1hbnRpYyBzb3VyY2UgcmVnaXN0cnkgZW50cnkuXCIpXG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBzb3VyY2VzLmZpbmQoKHNvdXJjZSkgPT4gc291cmNlLmZpbGVuYW1lID09IGZpbGVuYW1lICYmIHNvdXJjZS5jb250ZW50ID09IGNvbnRlbnQpXG5cbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZ1xuXG4gICAgY29uc3QgcmVnaXN0ZXJlZCA9IHtjb250ZW50LCBmaWxlbmFtZSwgaWQ6IGBzb3VyY2U6JHtzb3VyY2VzLmxlbmd0aH1gLCBsYW5ndWFnZX1cblxuICAgIHNvdXJjZXMucHVzaChyZWdpc3RlcmVkKVxuXG4gICAgcmV0dXJuIHJlZ2lzdGVyZWRcbiAgfVxufVxuXG4vKipcbiAqIFNlbGVjdHMgdGhlIHNhZmUgcHJpbWFyeSBvcmlnaW5hbCBsb2NhdGlvbiBmb3IgY2xvc2VkIHByb3ZlbmFuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNPcmlnaW59IG9yaWdpbiAtIENsb3NlZCBwcm92ZW5hbmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IFByaW1hcnkgbG9jYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmltYXJ5TG9jYXRpb24ob3JpZ2luKSB7XG4gIGlmIChvcmlnaW4ua2luZCA9PSBcInNvdXJjZVwiKSByZXR1cm4gb3JpZ2luLmxvY2F0aW9uXG4gIGlmIChvcmlnaW4ua2luZCA9PSBcImRlcml2ZWRcIikgcmV0dXJuIG9yaWdpbi5vcmlnaW5zWzBdPy5sb2NhdGlvblxuXG4gIHJldHVybiBvcmlnaW4ucmVsYXRlZE9yaWdpbnNbMF0/LmxvY2F0aW9uXG59XG5cbi8qKlxuICogQWNjZXB0cyBzb3VyY2UgbWV0YWRhdGEgb25seSB3aGVuIGl0IGlzIGF0dGFjaGVkIHRvIHRoZSBzZW1hbnRpYyBub2RlIGl0IGRlc2NyaWJlcy5cbiAqIFJlZ2lzdHJ5LWxvY2FsIElEcyBhbmQgcGF0aHMgYXJlIGludGVudGlvbmFsbHkgaWdub3JlZCBhbmQgcmVidWlsdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlIHwgdW5kZWZpbmVkfSByZWNvcmQgLSBDYW5kaWRhdGUgbm9kZSBhc3NvY2lhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2UgfCB1bmRlZmluZWR9IFVzYWJsZSBhc3NvY2lhdGlvbi5cbiAqL1xuZnVuY3Rpb24gdXNhYmxlTm9kZVByb3ZlbmFuY2UocmVjb3JkKSB7XG4gIGlmICghcmVjb3JkIHx8IHJlY29yZC5zY2hlbWEgIT0gXCJTZW1hbnRpZm9sZE5vZGVQcm92ZW5hbmNlXCIgfHwgcmVjb3JkLnZlcnNpb24gIT0gMSB8fFxuICAgICFyZWNvcmQub3JpZ2luIHx8IHR5cGVvZiByZWNvcmQub3JpZ2luICE9IFwib2JqZWN0XCIgfHxcbiAgICAhcmVjb3JkLnJhbmdlcyB8fCB0eXBlb2YgcmVjb3JkLnJhbmdlcyAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocmVjb3JkLnJhbmdlcykpIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4gcmVjb3JkXG59XG5cbi8qKlxuICogUmV0YWlucyBhIHZhbGlkIHNvdXJjZSByZWdpc3RyeSBpbmRlcGVuZGVudGx5IGZyb20gcG90ZW50aWFsbHkgc3RhbGUgbm9kZSBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb3ZlbmFuY2UgfCB1bmRlZmluZWR9IHByb3ZlbmFuY2UgLSBDYW5kaWRhdGUgcHJvdmVuYW5jZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvdmVuYW5jZSB8IHVuZGVmaW5lZH0gUHJvdmVuYW5jZSB3aXRoIGEgdXNhYmxlIHNvdXJjZSByZWdpc3RyeS5cbiAqL1xuZnVuY3Rpb24gdXNhYmxlU291cmNlUHJvdmVuYW5jZShwcm92ZW5hbmNlKSB7XG4gIGlmICghcHJvdmVuYW5jZSB8fCBwcm92ZW5hbmNlLnNjaGVtYSAhPSBcIlNlbWFudGlmb2xkUHJvdmVuYW5jZVwiIHx8IHByb3ZlbmFuY2UudmVyc2lvbiAhPSAxIHx8XG4gICAgcHJvdmVuYW5jZS5jb29yZGluYXRlU3lzdGVtICE9IFwidXRmMTZcIiB8fCAhQXJyYXkuaXNBcnJheShwcm92ZW5hbmNlLnNvdXJjZXMpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3Qgc291cmNlSWRzID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBzb3VyY2Ugb2YgcHJvdmVuYW5jZS5zb3VyY2VzKSB7XG4gICAgaWYgKCFzb3VyY2UgfHwgdHlwZW9mIHNvdXJjZS5pZCAhPSBcInN0cmluZ1wiIHx8IHNvdXJjZUlkcy5oYXMoc291cmNlLmlkKSB8fCB0eXBlb2Ygc291cmNlLmZpbGVuYW1lICE9IFwic3RyaW5nXCIgfHxcbiAgICAgIHNvdXJjZS5maWxlbmFtZS5sZW5ndGggPT0gMCB8fFxuICAgICAgc291cmNlLmNvbnRlbnQgIT09IG51bGwgJiYgdHlwZW9mIHNvdXJjZS5jb250ZW50ICE9IFwic3RyaW5nXCIgfHwgc291cmNlLmxhbmd1YWdlICE9PSBudWxsICYmXG4gICAgICAhW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiLCBcInB5dGhvblwiXS5pbmNsdWRlcyhzb3VyY2UubGFuZ3VhZ2UpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgc291cmNlSWRzLmFkZChzb3VyY2UuaWQpXG4gIH1cblxuICByZXR1cm4gcHJvdmVuYW5jZVxufVxuXG4vKipcbiAqIFJldGFpbnMgb25seSBzZWxmLWNvbnNpc3RlbnQgc291cmNlIHJhbmdlcy5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbj4+fSByYW5nZXMgLSBDYW5kaWRhdGUgcmFuZ2VzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2VbXX0gc291cmNlcyAtIENhbm9uaWNhbCBzb3VyY2VzLlxuICogQHJldHVybnMge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24+Pn0gU2FmZSByYW5nZXMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkUmFuZ2VzKHJhbmdlcywgc291cmNlcykge1xuICBpZiAoIXJhbmdlcyB8fCB0eXBlb2YgcmFuZ2VzICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShyYW5nZXMpKSByZXR1cm4ge31cblxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24+fSAqL1xuICBjb25zdCB2YWxpZCA9IHt9XG5cbiAgZm9yIChjb25zdCBbcm9sZSwgbG9jYXRpb25dIG9mIE9iamVjdC5lbnRyaWVzKHJhbmdlcykpIHtcbiAgICBpZiAodmFsaWRMb2NhdGlvbihsb2NhdGlvbiwgc291cmNlcykpIHZhbGlkW3JvbGVdID0gbG9jYXRpb25cbiAgfVxuXG4gIHJldHVybiB2YWxpZFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBjbG9zZWQgb3JpZ2luIHdoaWxlIHJlbWFwcGluZyB1bnRydXN0ZWQgc291cmNlIGlkZW50aXRpZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNPcmlnaW59IG9yaWdpbiAtIENhbmRpZGF0ZSBvcmlnaW4uXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZT59IHByaW9yU291cmNlcyAtIFByaW9yLXRvLWNhbm9uaWNhbCBzb3VyY2UgbWFwcGluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlW119IHNvdXJjZXMgLSBDYW5vbmljYWwgc291cmNlcy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljT3JpZ2luIHwgdW5kZWZpbmVkfSBTYWZlIG9yaWdpbi5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplT3JpZ2luKG9yaWdpbiwgcHJpb3JTb3VyY2VzLCBzb3VyY2VzKSB7XG4gIGlmICghb3JpZ2luIHx8IHR5cGVvZiBvcmlnaW4gIT0gXCJvYmplY3RcIikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGlmIChvcmlnaW4ua2luZCA9PSBcInNvdXJjZVwiICYmIHZhbGlkTG9jYXRpb24ob3JpZ2luLmxvY2F0aW9uLCBzb3VyY2VzKSkge1xuICAgIGNvbnN0IGNsYWltZWQgPSBwcmlvclNvdXJjZXMuZ2V0KG9yaWdpbi5zb3VyY2VJZClcbiAgICBjb25zdCBzb3VyY2UgPSBjbGFpbWVkICYmIHNvdXJjZU93bnNMb2NhdGlvbihjbGFpbWVkLCBvcmlnaW4ubG9jYXRpb24pID8gY2xhaW1lZCA6IHNvdXJjZUZvckxvY2F0aW9uKG9yaWdpbi5sb2NhdGlvbiwgc291cmNlcylcblxuICAgIHJldHVybiBzb3VyY2VPcmlnaW4oc291cmNlLCBvcmlnaW4ubG9jYXRpb24pXG4gIH1cbiAgaWYgKG9yaWdpbi5raW5kID09IFwiZGVyaXZlZFwiICYmIEFycmF5LmlzQXJyYXkob3JpZ2luLm9yaWdpbnMpICYmIG9yaWdpbi5vcmlnaW5zLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBvcmlnaW5zID0gb3JpZ2luLm9yaWdpbnMubWFwKChyZWxhdGVkKSA9PiBub3JtYWxpemVSZWxhdGVkT3JpZ2luKHJlbGF0ZWQsIHByaW9yU291cmNlcywgc291cmNlcykpXG5cbiAgICBpZiAob3JpZ2lucy5ldmVyeShCb29sZWFuKSkgcmV0dXJuIHtraW5kOiBcImRlcml2ZWRcIiwgb3JpZ2luczogLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW5bXX0gKi8gKG9yaWdpbnMpfVxuICB9XG4gIGlmIChvcmlnaW4ua2luZCA9PSBcInN5bnRoZXRpY1wiICYmIHR5cGVvZiBvcmlnaW4ucmVhc29uID09IFwic3RyaW5nXCIgJiYgQXJyYXkuaXNBcnJheShvcmlnaW4ucmVsYXRlZE9yaWdpbnMpKSB7XG4gICAgY29uc3QgcmVsYXRlZE9yaWdpbnMgPSBvcmlnaW4ucmVsYXRlZE9yaWdpbnMubWFwKChyZWxhdGVkKSA9PiBub3JtYWxpemVSZWxhdGVkT3JpZ2luKHJlbGF0ZWQsIHByaW9yU291cmNlcywgc291cmNlcykpXG5cbiAgICBpZiAocmVsYXRlZE9yaWdpbnMuZXZlcnkoQm9vbGVhbikpIHtcbiAgICAgIHJldHVybiB7a2luZDogXCJzeW50aGV0aWNcIiwgcmVhc29uOiBvcmlnaW4ucmVhc29uLCByZWxhdGVkT3JpZ2luczogLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW5bXX0gKi8gKHJlbGF0ZWRPcmlnaW5zKX1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBvbmUgcmVsYXRlZCBvcmlnaW4uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVsYXRlZE9yaWdpbn0gcmVsYXRlZCAtIENhbmRpZGF0ZSByZWxhdGVkIG9yaWdpbi5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlPn0gcHJpb3JTb3VyY2VzIC0gUHJpb3Igc291cmNlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlW119IHNvdXJjZXMgLSBDYW5vbmljYWwgc291cmNlcy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW4gfCB1bmRlZmluZWR9IFNhZmUgcmVsYXRlZCBvcmlnaW4uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlbGF0ZWRPcmlnaW4ocmVsYXRlZCwgcHJpb3JTb3VyY2VzLCBzb3VyY2VzKSB7XG4gIGlmICghcmVsYXRlZCB8fCAhdmFsaWRMb2NhdGlvbihyZWxhdGVkLmxvY2F0aW9uLCBzb3VyY2VzKSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IGNsYWltZWQgPSBwcmlvclNvdXJjZXMuZ2V0KHJlbGF0ZWQuc291cmNlSWQpXG4gIGNvbnN0IHNvdXJjZSA9IGNsYWltZWQgJiYgc291cmNlT3duc0xvY2F0aW9uKGNsYWltZWQsIHJlbGF0ZWQubG9jYXRpb24pID8gY2xhaW1lZCA6IHNvdXJjZUZvckxvY2F0aW9uKHJlbGF0ZWQubG9jYXRpb24sIHNvdXJjZXMpXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7bG9jYXRpb246IHJlbGF0ZWQubG9jYXRpb24sIHNvdXJjZUlkOiBzb3VyY2UuaWR9XG5cbiAgaWYgKHR5cGVvZiByZWxhdGVkLnJvbGUgPT0gXCJzdHJpbmdcIikgT2JqZWN0LmFzc2lnbihub3JtYWxpemVkLCB7cm9sZTogcmVsYXRlZC5yb2xlfSlcblxuICByZXR1cm4gbm9ybWFsaXplZFxufVxuXG4vKipcbiAqIENoZWNrcyBub3JtYWxpemVkIGNvb3JkaW5hdGVzIGFnYWluc3QgZXhhY3Qgc291cmNlIGNvbnRlbnQgd2hlbiBhdmFpbGFibGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gQ2FuZGlkYXRlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2VbXX0gc291cmNlcyAtIFJlZ2lzdGVyZWQgc291cmNlcy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBsb2NhdGlvbiBpcyBzYWZlLlxuICovXG5mdW5jdGlvbiB2YWxpZExvY2F0aW9uKGxvY2F0aW9uLCBzb3VyY2VzKSB7XG4gIGlmICghbG9jYXRpb24gfHwgdHlwZW9mIGxvY2F0aW9uLmZpbGVuYW1lICE9IFwic3RyaW5nXCIgfHwgIWxvY2F0aW9uLnN0YXJ0IHx8ICFsb2NhdGlvbi5lbmQgfHxcbiAgICAhTnVtYmVyLmlzSW50ZWdlcihsb2NhdGlvbi5zdGFydC5vZmZzZXQpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGxvY2F0aW9uLmVuZC5vZmZzZXQpIHx8IGxvY2F0aW9uLnN0YXJ0Lm9mZnNldCA8IDAgfHxcbiAgICBsb2NhdGlvbi5lbmQub2Zmc2V0IDwgbG9jYXRpb24uc3RhcnQub2Zmc2V0IHx8ICF2YWxpZFBvaW50U2hhcGUobG9jYXRpb24uc3RhcnQpIHx8ICF2YWxpZFBvaW50U2hhcGUobG9jYXRpb24uZW5kKSkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgY2FuZGlkYXRlcyA9IHNvdXJjZXMuZmlsdGVyKChzb3VyY2UpID0+IHNvdXJjZS5maWxlbmFtZSA9PSBsb2NhdGlvbi5maWxlbmFtZSlcblxuICByZXR1cm4gY2FuZGlkYXRlcy5zb21lKChzb3VyY2UpID0+IHNvdXJjZU93bnNMb2NhdGlvbihzb3VyY2UsIGxvY2F0aW9uKSlcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhhdCBvbmUgaWRlbnRpZmllZCByZWdpc3RyeSBzb3VyY2Ugb3ducyBhIG5vcm1hbGl6ZWQgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZX0gc291cmNlIC0gSWRlbnRpZmllZCBzb3VyY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gQ2FuZGlkYXRlIGxvY2F0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNvdXJjZSBvd25zIHRoZSBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gc291cmNlT3duc0xvY2F0aW9uKHNvdXJjZSwgbG9jYXRpb24pIHtcbiAgaWYgKHNvdXJjZS5maWxlbmFtZSAhPSBsb2NhdGlvbi5maWxlbmFtZSkgcmV0dXJuIGZhbHNlXG4gIGlmIChzb3VyY2UuY29udGVudCA9PSBudWxsKSByZXR1cm4gdHJ1ZVxuICBpZiAobG9jYXRpb24uZW5kLm9mZnNldCA+IHNvdXJjZS5jb250ZW50Lmxlbmd0aCkgcmV0dXJuIGZhbHNlXG4gIGxldCBjb29yZGluYXRlcyA9IHNvdXJjZUNvb3JkaW5hdGVJbmRleGVzLmdldChzb3VyY2UpXG5cbiAgaWYgKCFjb29yZGluYXRlcykge1xuICAgIGNvb3JkaW5hdGVzID0gY3JlYXRlQ29vcmRpbmF0ZUluZGV4KHNvdXJjZS5jb250ZW50KVxuICAgIHNvdXJjZUNvb3JkaW5hdGVJbmRleGVzLnNldChzb3VyY2UsIGNvb3JkaW5hdGVzKVxuICB9XG5cbiAgcmV0dXJuIHNhbWVQb2ludChpbmRleGVkUG9pbnRBdChjb29yZGluYXRlcywgbG9jYXRpb24uc3RhcnQub2Zmc2V0KSwgbG9jYXRpb24uc3RhcnQpICYmXG4gICAgc2FtZVBvaW50KGluZGV4ZWRQb2ludEF0KGNvb3JkaW5hdGVzLCBsb2NhdGlvbi5lbmQub2Zmc2V0KSwgbG9jYXRpb24uZW5kKVxufVxuXG4vKipcbiAqIENoZWNrcyB0aGUgaW50ZWdlciBzaGFwZSBvZiBvbmUgc291cmNlIHBvaW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZVBvaW50fSBwb2ludCAtIFNvdXJjZSBwb2ludC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGl0IGlzIHN0cnVjdHVyYWxseSB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gdmFsaWRQb2ludFNoYXBlKHBvaW50KSB7XG4gIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHBvaW50LmxpbmUpICYmIHBvaW50LmxpbmUgPj0gMSAmJiBOdW1iZXIuaXNJbnRlZ2VyKHBvaW50LmNvbHVtbikgJiYgcG9pbnQuY29sdW1uID49IDFcbn1cblxuLyoqXG4gKiBDb21wYXJlcyBub3JtYWxpemVkIHNvdXJjZSBjb29yZGluYXRlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VQb2ludH0gbGVmdCAtIExlZnQgcG9pbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlUG9pbnR9IHJpZ2h0IC0gUmlnaHQgcG9pbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBhbGwgY29vcmRpbmF0ZXMgbWF0Y2guXG4gKi9cbmZ1bmN0aW9uIHNhbWVQb2ludChsZWZ0LCByaWdodCkge1xuICByZXR1cm4gbGVmdC5vZmZzZXQgPT0gcmlnaHQub2Zmc2V0ICYmIGxlZnQubGluZSA9PSByaWdodC5saW5lICYmIGxlZnQuY29sdW1uID09IHJpZ2h0LmNvbHVtblxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBkZXRlcm1pbmlzdGljIHNvdXJjZSBvd25pbmcgYSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZVtdfSBzb3VyY2VzIC0gQ2Fub25pY2FsIHNvdXJjZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlfSBPd25pbmcgc291cmNlLlxuICovXG5mdW5jdGlvbiBzb3VyY2VGb3JMb2NhdGlvbihsb2NhdGlvbiwgc291cmNlcykge1xuICBjb25zdCBzb3VyY2UgPSBzb3VyY2VzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gc291cmNlT3duc0xvY2F0aW9uKGNhbmRpZGF0ZSwgbG9jYXRpb24pKVxuXG4gIGlmICghc291cmNlKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgTm8gcmVnaXN0ZXJlZCBzb3VyY2Ugb3ducyAke2xvY2F0aW9uLmZpbGVuYW1lfToke2xvY2F0aW9uLnN0YXJ0Lm9mZnNldH0uYClcblxuICByZXR1cm4gc291cmNlXG59XG5cbi8qKlxuICogQ3JlYXRlcyBkaXJlY3Qgc291cmNlIHByb3ZlbmFuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZX0gc291cmNlIC0gU291cmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIExvY2F0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlT3JpZ2lufSBPcmlnaW4uXG4gKi9cbmZ1bmN0aW9uIHNvdXJjZU9yaWdpbihzb3VyY2UsIGxvY2F0aW9uKSB7XG4gIHJldHVybiB7a2luZDogXCJzb3VyY2VcIiwgbG9jYXRpb24sIHNvdXJjZUlkOiBzb3VyY2UuaWR9XG59XG5cbi8qKlxuICogRmluZHMgb25lIG5vZGUgcHJvdmVuYW5jZSByZWNvcmQgYnkgc2VtYW50aWMgb2JqZWN0IG9yIG5vZGUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGUgfCBzdHJpbmd9IG5vZGUgLSBTZW1hbnRpYyBvYmplY3Qgb3Igbm9kZSBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVByb3ZlbmFuY2V9IFByb3ZlbmFuY2UgcmVjb3JkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm9kZVByb3ZlbmFuY2UobW9kdWxlLCBub2RlKSB7XG4gIHJlcXVpcmVQcm92ZW5hbmNlKG1vZHVsZSlcbiAgY29uc3QgaW5kZXggPSBjcmVhdGVHZW5lcmF0aW9uSW5kZXgobW9kdWxlKVxuICBjb25zdCByZWNvcmQgPSB0eXBlb2Ygbm9kZSA9PSBcInN0cmluZ1wiXG4gICAgPyBpbmRleC5wcm92ZW5hbmNlLm5vZGVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09IG5vZGUpXG4gICAgOiBpbmRleC5yZWNvcmRGb3Iobm9kZSlcblxuICBpZiAoIXJlY29yZCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVua25vd24gc2VtYW50aWMgbm9kZTogJHtub2RlfWApXG5cbiAgcmV0dXJuIHJlY29yZFxufVxuXG4vKipcbiAqIEZpbmRzIG9uZSBzZW1hbnRpYyBzeW1ib2wgcmVjb3JkLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sSWQgLSBTeW1ib2wgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1N5bWJvbFByb3ZlbmFuY2V9IFN5bWJvbCByZWNvcmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTeW1ib2xQcm92ZW5hbmNlKG1vZHVsZSwgc3ltYm9sSWQpIHtcbiAgcmVxdWlyZVByb3ZlbmFuY2UobW9kdWxlKVxuICBjb25zdCBzeW1ib2wgPSBjcmVhdGVHZW5lcmF0aW9uSW5kZXgobW9kdWxlKS5wcm92ZW5hbmNlLnN5bWJvbHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT0gc3ltYm9sSWQpXG5cbiAgaWYgKCFzeW1ib2wpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHNlbWFudGljIHN5bWJvbDogJHtzeW1ib2xJZH1gKVxuXG4gIHJldHVybiBzeW1ib2xcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBmcm9udGVuZCBwcm92ZW5hbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb3ZlbmFuY2V9IFByb3ZlbmFuY2UuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVQcm92ZW5hbmNlKG1vZHVsZSkge1xuICBpZiAoIW1vZHVsZS5wcm92ZW5hbmNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU2VtYW50aWMgbW9kdWxlIGRvZXMgbm90IGNvbnRhaW4gc291cmNlIHByb3ZlbmFuY2UuXCIpXG5cbiAgcmV0dXJuIG1vZHVsZS5wcm92ZW5hbmNlXG59XG5cbi8qKlxuICogVHJhdmVyc2VzIHB1YmxpYyBzZW1hbnRpYyBub2RlcyBpbiBvbmUgc3RhYmxlIG9yZGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7e25vZGU6IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlLCBvd25lckxvY2F0aW9uOiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBwYXRoOiBzdHJpbmd9W119IEVudHJpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW1hbnRpY0VudHJpZXMobW9kdWxlKSB7XG4gIC8qKiBAdHlwZSB7e25vZGU6IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlLCBvd25lckxvY2F0aW9uOiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBwYXRoOiBzdHJpbmd9W119ICovXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuXG4gIHZpc2l0KG1vZHVsZSwgXCJcIiwgbW9kdWxlLmxvY2F0aW9uKVxuXG4gIHJldHVybiBlbnRyaWVzXG5cbiAgLyoqXG4gICAqIFZpc2l0cyBvbmUgc2VtYW50aWMgbm9kZSBhbmQgaXRzIGNoaWxkcmVuLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlfSBub2RlIC0gQ3VycmVudCBub2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEN1cnJlbnQgSlNPTiBQb2ludGVyLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG93bmVyTG9jYXRpb24gLSBOZWFyZXN0IGxvY2F0ZWQgb3duZXIuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQobm9kZSwgcGF0aCwgb3duZXJMb2NhdGlvbikge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gXCJsb2NhdGlvblwiIGluIG5vZGUgPyBub2RlLmxvY2F0aW9uIDogb3duZXJMb2NhdGlvblxuXG4gICAgZW50cmllcy5wdXNoKHtub2RlLCBvd25lckxvY2F0aW9uOiBsb2NhdGlvbiwgcGF0aH0pXG5cbiAgICBpZiAobm9kZS5raW5kID09IFwiTW9kdWxlXCIpIHtcbiAgICAgIG5vZGUuZnVuY3Rpb25zLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAvZnVuY3Rpb25zLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgICAgdmlzaXQobm9kZS5lbnRyeVBvaW50LCBcIi9lbnRyeVBvaW50XCIsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiKSB7XG4gICAgICBub2RlLnBhcmFtZXRlcnMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vcGFyYW1ldGVycy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICAgIHZpc2l0KG5vZGUucmV0dXJuVHlwZSwgYCR7cGF0aH0vcmV0dXJuVHlwZWAsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5ib2R5LCBgJHtwYXRofS9ib2R5YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJCbG9ja1wiKSB7XG4gICAgICBub2RlLnN0YXRlbWVudHMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vc3RhdGVtZW50cy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIlBhcmFtZXRlclwiKSB7XG4gICAgICB2aXNpdChub2RlLnR5cGUsIGAke3BhdGh9L3R5cGVgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikge1xuICAgICAgdmlzaXQobm9kZS50eXBlLCBgJHtwYXRofS90eXBlYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmluaXRpYWxpemVyLCBgJHtwYXRofS9pbml0aWFsaXplcmAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSB7XG4gICAgICB2aXNpdChub2RlLnRhcmdldCwgYCR7cGF0aH0vdGFyZ2V0YCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiIHx8IG5vZGUua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgdmlzaXQobm9kZS5jb25kaXRpb24sIGAke3BhdGh9L2NvbmRpdGlvbmAsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5jb25zZXF1ZW50LCBgJHtwYXRofS9jb25zZXF1ZW50YCwgbG9jYXRpb24pXG4gICAgICBpZiAobm9kZS5hbHRlcm5hdGUpIHZpc2l0KG5vZGUuYWx0ZXJuYXRlLCBgJHtwYXRofS9hbHRlcm5hdGVgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkVudHJ5UG9pbnRcIikge1xuICAgICAgdmlzaXQobm9kZS5ib2R5LCBgJHtwYXRofS9ib2R5YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXQobm9kZS5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICAgIG5vZGUuYXJndW1lbnRzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBkZWNsYXJhdGlvbnMgYW5kIHJlZmVyZW5jZXMgYWZ0ZXIgc2VtYW50aWMgdmFsaWRhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIG1vZHVsZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVQcm92ZW5hbmNlPn0gcmVjb3JkcyAtIE5vZGUgcmVjb3JkcyBieSBvY2N1cnJlbmNlIHBhdGguXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1N5bWJvbFByb3ZlbmFuY2VbXX0gU3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVN5bWJvbHMobW9kdWxlLCByZWNvcmRzKSB7XG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1N5bWJvbFByb3ZlbmFuY2VbXX0gKi9cbiAgY29uc3Qgc3ltYm9scyA9IFtdXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3QgZnVuY3Rpb25zID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGRlY2xhcmF0aW9uXSBvZiBtb2R1bGUuZnVuY3Rpb25zLmVudHJpZXMoKSkge1xuICAgIGZ1bmN0aW9ucy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyZShkZWNsYXJhdGlvbiwgZGVjbGFyYXRpb24ubmFtZSwgXCJmdW5jdGlvblwiLCBgL2Z1bmN0aW9ucy8ke2luZGV4fWApKVxuICB9XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGRlY2xhcmF0aW9uXSBvZiBtb2R1bGUuZnVuY3Rpb25zLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uUGF0aCA9IGAvZnVuY3Rpb25zLyR7aW5kZXh9YFxuICAgIGNvbnN0IHNjb3BlID0gbmV3IE1hcCgpXG5cbiAgICBmb3IgKGNvbnN0IFtwYXJhbWV0ZXJJbmRleCwgcGFyYW1ldGVyXSBvZiBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgICAgc2NvcGUuc2V0KHBhcmFtZXRlci5uYW1lLCBkZWNsYXJlKHBhcmFtZXRlciwgcGFyYW1ldGVyLm5hbWUsIFwicGFyYW1ldGVyXCIsIGAke2RlY2xhcmF0aW9uUGF0aH0vcGFyYW1ldGVycy8ke3BhcmFtZXRlckluZGV4fWApKVxuICAgIH1cbiAgICB2aXNpdEJsb2NrKGRlY2xhcmF0aW9uLmJvZHksIHNjb3BlLCBgJHtkZWNsYXJhdGlvblBhdGh9L2JvZHlgKVxuICB9XG5cbiAgdmlzaXRCbG9jayhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBuZXcgTWFwKCksIFwiL2VudHJ5UG9pbnQvYm9keVwiKVxuXG4gIHJldHVybiBzeW1ib2xzXG5cbiAgLyoqXG4gICAqIERlY2xhcmVzIG9uZSBjYW5vbmljYWwgc3ltYm9sLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbiB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuUGFyYW1ldGVyIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Mb2NhbERlY2xhcmF0aW9ufSBub2RlIC0gRGVjbGFyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gU3ltYm9sIG5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1N5bWJvbEtpbmR9IGtpbmQgLSBTeW1ib2wga2luZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBEZWNsYXJhdGlvbiBvY2N1cnJlbmNlIHBhdGguXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFN5bWJvbCBpZGVudGl0eS5cbiAgICovXG4gIGZ1bmN0aW9uIGRlY2xhcmUobm9kZSwgbmFtZSwga2luZCwgcGF0aCkge1xuICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHMuZ2V0KHBhdGgpXG5cbiAgICBpZiAoIXJlY29yZCkgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHByb3ZlbmFuY2UgZm9yICR7bm9kZS5raW5kfS5gKVxuXG4gICAgY29uc3QgbG9jYXRpb24gPSByZWNvcmQucmFuZ2VzLm5hbWUgPz8gbm9kZS5sb2NhdGlvblxuICAgIGNvbnN0IGlkID0gYHN5bWJvbDoke3N5bWJvbHMubGVuZ3RofWBcblxuICAgIHJlY29yZC5zeW1ib2xJZCA9IGlkXG4gICAgc3ltYm9scy5wdXNoKHtkZWNsYXJhdGlvbk5vZGVJZDogcmVjb3JkLmlkLCBpZCwga2luZCwgbG9jYXRpb24sIG5hbWUsIHJlZmVyZW5jZXM6IFtdfSlcblxuICAgIHJldHVybiBpZFxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHJlZmVyZW5jZXMgaW4gb25lIGxleGljYWwgYmxvY2suXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBTZW1hbnRpYyBibG9jay5cbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSBwYXJlbnQgLSBWaXNpYmxlIGJpbmRpbmdzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFN0YXRlbWVudCBzZXF1ZW5jZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIHZpc2l0QmxvY2soYmxvY2ssIHBhcmVudCwgcGF0aCkge1xuICAgIGNvbnN0IHNjb3BlID0gbmV3IE1hcChwYXJlbnQpXG5cbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgc3RhdGVtZW50XSBvZiBibG9jay5zdGF0ZW1lbnRzLmVudHJpZXMoKSkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50UGF0aCA9IGAke3BhdGh9L3N0YXRlbWVudHMvJHtpbmRleH1gXG5cbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikge1xuICAgICAgICB2aXNpdEV4cHJlc3Npb24oc3RhdGVtZW50LmluaXRpYWxpemVyLCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vaW5pdGlhbGl6ZXJgKVxuICAgICAgICBzY29wZS5zZXQoc3RhdGVtZW50Lm5hbWUsIGRlY2xhcmUoc3RhdGVtZW50LCBzdGF0ZW1lbnQubmFtZSwgXCJsb2NhbFwiLCBzdGF0ZW1lbnRQYXRoKSlcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpIHtcbiAgICAgICAgcmVmZXJlbmNlKHN0YXRlbWVudC50YXJnZXQsIHNjb3BlLmdldChzdGF0ZW1lbnQudGFyZ2V0Lm5hbWUpLCBcIndyaXRlXCIsIGAke3N0YXRlbWVudFBhdGh9L3RhcmdldGApXG4gICAgICAgIHZpc2l0RXhwcmVzc2lvbihzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgc2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L2V4cHJlc3Npb25gKVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgICAgICB2aXNpdEV4cHJlc3Npb24oc3RhdGVtZW50LmV4cHJlc3Npb24sIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9leHByZXNzaW9uYClcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0RXhwcmVzc2lvbihzdGF0ZW1lbnQuY29uZGl0aW9uLCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vY29uZGl0aW9uYClcbiAgICAgICAgdmlzaXRCbG9jayhzdGF0ZW1lbnQuY29uc2VxdWVudCwgc2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L2NvbnNlcXVlbnRgKVxuICAgICAgICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkgdmlzaXRCbG9jayhzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vYWx0ZXJuYXRlYClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgcmVmZXJlbmNlcyBpbiBvbmUgZXhwcmVzc2lvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBFeHByZXNzaW9uLlxuICAgKiBAcGFyYW0ge01hcDxzdHJpbmcsIHN0cmluZz59IHNjb3BlIC0gVmlzaWJsZSBiaW5kaW5ncy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeHByZXNzaW9uIG9jY3VycmVuY2UgcGF0aC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgc2NvcGUsIHBhdGgpIHtcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikgcmVmZXJlbmNlKGV4cHJlc3Npb24sIHNjb3BlLmdldChleHByZXNzaW9uLm5hbWUpLCBcInJlYWRcIiwgcGF0aClcbiAgICBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgICByZWZlcmVuY2UoZXhwcmVzc2lvbiwgZnVuY3Rpb25zLmdldChleHByZXNzaW9uLmNhbGxlZSksIFwiY2FsbFwiLCBwYXRoKVxuICAgICAgZm9yIChjb25zdCBbaW5kZXgsIGFyZ3VtZW50XSBvZiBleHByZXNzaW9uLmFyZ3VtZW50cy5lbnRyaWVzKCkpIHZpc2l0RXhwcmVzc2lvbihhcmd1bWVudCwgc2NvcGUsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWApXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24ub3BlcmFuZCwgc2NvcGUsIGAke3BhdGh9L29wZXJhbmRgKVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5sZWZ0LCBzY29wZSwgYCR7cGF0aH0vbGVmdGApXG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5yaWdodCwgc2NvcGUsIGAke3BhdGh9L3JpZ2h0YClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoZXMgb25lIHJlc29sdmVkIHN5bWJvbCByZWZlcmVuY2UuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5JZGVudGlmaWVyRXhwcmVzc2lvbiB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuQ2FsbEV4cHJlc3Npb259IG5vZGUgLSBSZWZlcmVuY2Ugbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHN5bWJvbElkIC0gUmVzb2x2ZWQgc3ltYm9sLlxuICAgKiBAcGFyYW0ge1wicmVhZFwiIHwgXCJ3cml0ZVwiIHwgXCJjYWxsXCJ9IHJvbGUgLSBSZWZlcmVuY2Ugcm9sZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBSZWZlcmVuY2Ugb2NjdXJyZW5jZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIHJlZmVyZW5jZShub2RlLCBzeW1ib2xJZCwgcm9sZSwgcGF0aCkge1xuICAgIGlmICghc3ltYm9sSWQpIHJldHVyblxuXG4gICAgY29uc3QgcmVjb3JkID0gcmVjb3Jkcy5nZXQocGF0aClcbiAgICBjb25zdCBzeW1ib2wgPSBzeW1ib2xzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09IHN5bWJvbElkKVxuXG4gICAgaWYgKCFyZWNvcmQgfHwgIXN5bWJvbCkgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHByb3ZlbmFuY2Ugd2hpbGUgcmVzb2x2aW5nICR7bm9kZS5raW5kfS5gKVxuXG4gICAgY29uc3QgbG9jYXRpb24gPSByZWNvcmQucmFuZ2VzW3JvbGUgPT0gXCJjYWxsXCIgPyBcImNhbGxlZVwiIDogXCJuYW1lXCJdID8/IG5vZGUubG9jYXRpb25cblxuICAgIHJlY29yZC5zeW1ib2xJZCA9IHN5bWJvbElkXG4gICAgc3ltYm9sLnJlZmVyZW5jZXMucHVzaCh7bG9jYXRpb24sIG5vZGVJZDogcmVjb3JkLmlkLCByb2xlfSlcbiAgfVxufVxuIl19
|
|
577
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVuYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBRW5FLDZGQUE2RjtBQUM3RixNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0FBQ2xDLHVHQUF1RztBQUN2RyxNQUFNLHVCQUF1QixHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFN0M7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNO0lBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ2hDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU07SUFDM0MsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUU3QixPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBQztJQUN2RSxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQ3ZFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN2Qyx1RUFBdUU7SUFDdkUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUMvQiw0REFBNEQ7SUFDNUQsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBO0lBRWxCLEtBQUssTUFBTSxDQUFDLEtB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ZWNrXG5cbmltcG9ydCB7Y3JlYXRlQ29vcmRpbmF0ZUluZGV4LCBpbmRleGVkUG9pbnRBdH0gZnJvbSBcIi4vbG9jYXRpb24uanNcIlxuXG4vKiogQHR5cGUge1dlYWtNYXA8b2JqZWN0LCBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uPj4+fSAqL1xuY29uc3QgcGFyc2VyUmFuZ2VzID0gbmV3IFdlYWtNYXAoKVxuLyoqIEB0eXBlIHtXZWFrTWFwPGltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZSwgUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQ29vcmRpbmF0ZUluZGV4Pj59ICovXG5jb25zdCBzb3VyY2VDb29yZGluYXRlSW5kZXhlcyA9IG5ldyBXZWFrTWFwKClcblxuLyoqXG4gKiBSZWNvcmRzIHBhcnNlci1wcm92aWRlZCBzZW1hbnRpYy10b2tlbiByYW5nZXMgd2l0aG91dCBleHBvc2luZyBwYXJzZXIgdHJlZXMuXG4gKiBAcGFyYW0ge29iamVjdH0gbm9kZSAtIFNlbWFudGljIG5vZGUuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24+Pn0gcmFuZ2VzIC0gRXhhY3Qgcm9sZSByYW5nZXMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBhcnNlclJhbmdlcyhub2RlLCByYW5nZXMpIHtcbiAgcGFyc2VyUmFuZ2VzLnNldChub2RlLCByYW5nZXMpXG59XG5cbi8qKlxuICogUmVjb3JkcyBwYXJzZXIgcmFuZ2VzIGFuZCByZXR1cm5zIHRoZSBzYW1lIHNlbWFudGljIG5vZGUuXG4gKiBAdGVtcGxhdGUge29iamVjdH0gTm9kZVxuICogQHBhcmFtIHtOb2RlfSBub2RlIC0gU2VtYW50aWMgbm9kZS5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbj4+fSByYW5nZXMgLSBFeGFjdCByb2xlIHJhbmdlcy5cbiAqIEByZXR1cm5zIHtOb2RlfSBUaGUgc2FtZSBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFBhcnNlclJhbmdlcyhub2RlLCByYW5nZXMpIHtcbiAgc2V0UGFyc2VyUmFuZ2VzKG5vZGUsIHJhbmdlcylcblxuICByZXR1cm4gbm9kZVxufVxuXG4vKipcbiAqIEFkZHMgZGV0ZXJtaW5pc3RpYyBwcm92ZW5hbmNlIHRvIGEgdmFsaWRhdGVkIGZyb250ZW5kIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzb3VyY2UgLSBQYXJzZWQgc291cmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZS5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBzb3VyY2UubGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlLnNvdXJjZSAtIEV4YWN0IHNvdXJjZSBjb250ZW50LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFRoZSBzYW1lIHNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFubm90YXRlUGFyc2VkTW9kdWxlKG1vZHVsZSwge2ZpbGVuYW1lLCBsYW5ndWFnZSwgc291cmNlfSkge1xuICBjb25zdCBzb3VyY2VzID0gW3tjb250ZW50OiBzb3VyY2UsIGZpbGVuYW1lLCBpZDogXCJzb3VyY2U6MFwiLCBsYW5ndWFnZX1dXG4gIGNvbnN0IGVudHJpZXMgPSBzZW1hbnRpY0VudHJpZXMobW9kdWxlKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZT59ICovXG4gIGNvbnN0IHJlY29yZHNCeVBhdGggPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVByb3ZlbmFuY2VbXX0gKi9cbiAgY29uc3QgcmVjb3JkcyA9IFtdXG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHJhbmdlcyA9IHBhcnNlclJhbmdlcy5nZXQoZW50cnkubm9kZSkgPz8ge31cbiAgICBjb25zdCBsb2NhdGlvbiA9IFwibG9jYXRpb25cIiBpbiBlbnRyeS5ub2RlID8gZW50cnkubm9kZS5sb2NhdGlvbiA6IHJhbmdlcy50eXBlID8/IGVudHJ5Lm93bmVyTG9jYXRpb25cbiAgICBjb25zdCBzb3VyY2VQcm92ZW5hbmNlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9ICovICh7XG4gICAgICBvcmlnaW46IHtraW5kOiBcInNvdXJjZVwiLCBsb2NhdGlvbiwgc291cmNlSWQ6IFwic291cmNlOjBcIn0sXG4gICAgICByYW5nZXMsXG4gICAgICBzY2hlbWE6IFwiU2VtYW50aWZvbGROb2RlUHJvdmVuYW5jZVwiLFxuICAgICAgdmVyc2lvbjogMVxuICAgIH0pXG4gICAgY29uc3QgcmVjb3JkID0ge1xuICAgICAgaWQ6IGBub2RlOiR7aW5kZXh9YCxcbiAgICAgIGtpbmQ6IGVudHJ5Lm5vZGUua2luZCxcbiAgICAgIG9yaWdpbjogc291cmNlUHJvdmVuYW5jZS5vcmlnaW4sXG4gICAgICBwYXRoOiBlbnRyeS5wYXRoLFxuICAgICAgcmFuZ2VzOiBzb3VyY2VQcm92ZW5hbmNlLnJhbmdlc1xuICAgIH1cblxuICAgIHJlY29yZHMucHVzaChyZWNvcmQpXG4gICAgcmVjb3Jkc0J5UGF0aC5zZXQoZW50cnkucGF0aCwgcmVjb3JkKVxuICAgIGVudHJ5Lm5vZGUuc291cmNlUHJvdmVuYW5jZSA9IHNvdXJjZVByb3ZlbmFuY2VcbiAgfVxuXG4gIGNvbnN0IHN5bWJvbHMgPSByZXNvbHZlU3ltYm9scyhtb2R1bGUsIHJlY29yZHNCeVBhdGgpXG5cbiAgbW9kdWxlLnByb3ZlbmFuY2UgPSB7XG4gICAgY29vcmRpbmF0ZVN5c3RlbTogXCJ1dGYxNlwiLFxuICAgIG5vZGVzOiByZWNvcmRzLFxuICAgIHNjaGVtYTogXCJTZW1hbnRpZm9sZFByb3ZlbmFuY2VcIixcbiAgICBzb3VyY2VzLFxuICAgIHN5bWJvbHMsXG4gICAgdmVyc2lvbjogMVxuICB9XG5cbiAgcmV0dXJuIG1vZHVsZVxufVxuXG4vKipcbiAqIFJlYnVpbGRzIGNhbm9uaWNhbCBnZW5lcmF0aW9uIG1ldGFkYXRhIHdpdGhvdXQgdHJ1c3RpbmcgY2FsbGVyLXByb3ZpZGVkIGlkZW50aXRpZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFuZ3VhZ2U/OiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9W119IFtwcm92aWRlZFNvdXJjZXNdIC0gQWRkaXRpb25hbCBzb3VyY2UgY29udGVudC5cbiAqIEByZXR1cm5zIHt7cHJvdmVuYW5jZTogaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb3ZlbmFuY2UsIHJlY29yZEZvcjogKG5vZGU6IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlLCBwYXRoPzogc3RyaW5nKSA9PiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVByb3ZlbmFuY2V9fSBDYW5vbmljYWwgaW5kZXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHZW5lcmF0aW9uSW5kZXgobW9kdWxlLCBwcm92aWRlZFNvdXJjZXMgPSBbXSkge1xuICBjb25zdCBlbnRyaWVzID0gc2VtYW50aWNFbnRyaWVzKG1vZHVsZSlcbiAgY29uc3QgcHJpb3JTb3VyY2VzID0gdXNhYmxlU291cmNlUHJvdmVuYW5jZShtb2R1bGUucHJvdmVuYW5jZSlcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2VbXX0gKi9cbiAgY29uc3Qgc291cmNlcyA9IFtdXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlPn0gKi9cbiAgY29uc3QgcHJpb3JTb3VyY2VzQnlJZCA9IG5ldyBNYXAoKVxuXG4gIGZvciAoY29uc3Qgc291cmNlIG9mIHByb3ZpZGVkU291cmNlcykgYWRkU291cmNlKHNvdXJjZS5maWxlbmFtZSwgc291cmNlLmNvbnRlbnQsIHNvdXJjZS5sYW5ndWFnZSA/PyBudWxsKVxuICBpZiAocHJpb3JTb3VyY2VzKSB7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgcHJpb3JTb3VyY2VzLnNvdXJjZXMpIHtcbiAgICAgIGNvbnN0IGNhbm9uaWNhbCA9IGFkZFNvdXJjZShzb3VyY2UuZmlsZW5hbWUsIHNvdXJjZS5jb250ZW50LCBzb3VyY2UubGFuZ3VhZ2UpXG5cbiAgICAgIHByaW9yU291cmNlc0J5SWQuc2V0KHNvdXJjZS5pZCwgY2Fub25pY2FsKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IFwibG9jYXRpb25cIiBpbiBlbnRyeS5ub2RlID8gZW50cnkubm9kZS5sb2NhdGlvbiA6IGVudHJ5Lm93bmVyTG9jYXRpb25cblxuICAgIGlmICghc291cmNlcy5zb21lKChzb3VyY2UpID0+IHNvdXJjZS5maWxlbmFtZSA9PSBsb2NhdGlvbi5maWxlbmFtZSkpIGFkZFNvdXJjZShsb2NhdGlvbi5maWxlbmFtZSwgbnVsbCwgbnVsbClcbiAgfVxuICBjb25zdCB2ZXJpZmlhYmxlU291cmNlcyA9IHNvdXJjZXMuZmlsdGVyKChzb3VyY2UpID0+IHNvdXJjZS5jb250ZW50ICE9IG51bGwpXG5cbiAgLyoqIEB0eXBlIHtNYXA8b2JqZWN0LCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVByb3ZlbmFuY2VbXT59ICovXG4gIGNvbnN0IHJlY29yZHNCeU5vZGUgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVByb3ZlbmFuY2U+fSAqL1xuICBjb25zdCByZWNvcmRzQnlQYXRoID0gbmV3IE1hcCgpXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVQcm92ZW5hbmNlW119ICovXG4gIGNvbnN0IHJlY29yZHMgPSBbXVxuXG4gIGZvciAoY29uc3QgW2luZGV4LCBlbnRyeV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBsb2NhdGVkID0gXCJsb2NhdGlvblwiIGluIGVudHJ5Lm5vZGUgPyBlbnRyeS5ub2RlLmxvY2F0aW9uIDogZW50cnkub3duZXJMb2NhdGlvblxuICAgIGNvbnN0IGFzc29jaWF0ZWQgPSB1c2FibGVOb2RlUHJvdmVuYW5jZShlbnRyeS5ub2RlLnNvdXJjZVByb3ZlbmFuY2UpXG4gICAgY29uc3QgcmFuZ2VzID0gYXNzb2NpYXRlZCA/IHZhbGlkUmFuZ2VzKGFzc29jaWF0ZWQucmFuZ2VzLCB2ZXJpZmlhYmxlU291cmNlcykgOiB7fVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRPcmlnaW4gPSBhc3NvY2lhdGVkXG4gICAgICA/IG5vcm1hbGl6ZU9yaWdpbihhc3NvY2lhdGVkLm9yaWdpbiwgcHJpb3JTb3VyY2VzQnlJZCwgdmVyaWZpYWJsZVNvdXJjZXMpXG4gICAgICA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGZhbGxiYWNrU291cmNlID0gc291cmNlRm9yTG9jYXRpb24obG9jYXRlZCwgc291cmNlcylcbiAgICBjb25zdCBvcmlnaW4gPSBub3JtYWxpemVkT3JpZ2luID8/IHNvdXJjZU9yaWdpbihmYWxsYmFja1NvdXJjZSwgbG9jYXRlZClcblxuICAgIGNvbnN0IHJlY29yZCA9IHtcbiAgICAgIGlkOiBgbm9kZToke2luZGV4fWAsXG4gICAgICBraW5kOiBlbnRyeS5ub2RlLmtpbmQsXG4gICAgICBvcmlnaW4sXG4gICAgICBwYXRoOiBlbnRyeS5wYXRoLFxuICAgICAgcmFuZ2VzXG4gICAgfVxuXG4gICAgcmVjb3Jkcy5wdXNoKHJlY29yZClcbiAgICByZWNvcmRzQnlQYXRoLnNldChlbnRyeS5wYXRoLCByZWNvcmQpXG4gICAgY29uc3Qgb2NjdXJyZW5jZXMgPSByZWNvcmRzQnlOb2RlLmdldChlbnRyeS5ub2RlKSA/PyBbXVxuXG4gICAgb2NjdXJyZW5jZXMucHVzaChyZWNvcmQpXG4gICAgcmVjb3Jkc0J5Tm9kZS5zZXQoZW50cnkubm9kZSwgb2NjdXJyZW5jZXMpXG4gIH1cblxuICBjb25zdCBzeW1ib2xzID0gcmVzb2x2ZVN5bWJvbHMobW9kdWxlLCByZWNvcmRzQnlQYXRoKVxuICBjb25zdCBwcm92ZW5hbmNlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvdmVuYW5jZX0gKi8gKHtcbiAgICBjb29yZGluYXRlU3lzdGVtOiBcInV0ZjE2XCIsXG4gICAgbm9kZXM6IHJlY29yZHMsXG4gICAgc2NoZW1hOiBcIlNlbWFudGlmb2xkUHJvdmVuYW5jZVwiLFxuICAgIHNvdXJjZXMsXG4gICAgc3ltYm9scyxcbiAgICB2ZXJzaW9uOiAxXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBwcm92ZW5hbmNlLFxuICAgIHJlY29yZEZvcihub2RlLCBwYXRoKSB7XG4gICAgICBjb25zdCBvY2N1cnJlbmNlcyA9IHJlY29yZHNCeU5vZGUuZ2V0KG5vZGUpXG5cbiAgICAgIGlmICghb2NjdXJyZW5jZXMpIHRocm93IG5ldyBSYW5nZUVycm9yKFwiU2VtYW50aWMgbm9kZSBpcyBub3QgcGFydCBvZiB0aGlzIG1vZHVsZS5cIilcbiAgICAgIGlmIChwYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gb2NjdXJyZW5jZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUucGF0aCA9PSBwYXRoKVxuXG4gICAgICAgIGlmICghcmVjb3JkKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgU2VtYW50aWMgbm9kZSBkb2VzIG5vdCBvY2N1ciBhdCAnJHtwYXRofScuYClcblxuICAgICAgICByZXR1cm4gcmVjb3JkXG4gICAgICB9XG4gICAgICBpZiAob2NjdXJyZW5jZXMubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJTaGFyZWQgc2VtYW50aWMgbm9kZSByZXF1aXJlcyBhbiBvY2N1cnJlbmNlIHBhdGguXCIpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvY2N1cnJlbmNlc1swXVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgb25lIGNhbm9uaWNhbCBzb3VyY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBjb250ZW50IC0gU291cmNlIGNvbnRlbnQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlIHwgbnVsbH0gbGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2V9IENhbm9uaWNhbCBzb3VyY2UuXG4gICAqL1xuICBmdW5jdGlvbiBhZGRTb3VyY2UoZmlsZW5hbWUsIGNvbnRlbnQsIGxhbmd1YWdlKSB7XG4gICAgaWYgKHR5cGVvZiBmaWxlbmFtZSAhPSBcInN0cmluZ1wiIHx8IGNvbnRlbnQgIT09IG51bGwgJiYgdHlwZW9mIGNvbnRlbnQgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgbGFuZ3VhZ2UgIT09IG51bGwgJiYgIVtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIiwgXCJweXRob25cIiwgXCJjc2hhcnBcIiwgXCJnb1wiLCBcImNcIiwgXCJjcHBcIl0uaW5jbHVkZXMobGFuZ3VhZ2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWFsZm9ybWVkIHNlbWFudGljIHNvdXJjZSByZWdpc3RyeSBlbnRyeS5cIilcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZyA9IHNvdXJjZXMuZmluZCgoc291cmNlKSA9PiBzb3VyY2UuZmlsZW5hbWUgPT0gZmlsZW5hbWUgJiYgc291cmNlLmNvbnRlbnQgPT0gY29udGVudClcblxuICAgIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nXG5cbiAgICBjb25zdCByZWdpc3RlcmVkID0ge2NvbnRlbnQsIGZpbGVuYW1lLCBpZDogYHNvdXJjZToke3NvdXJjZXMubGVuZ3RofWAsIGxhbmd1YWdlfVxuXG4gICAgc291cmNlcy5wdXNoKHJlZ2lzdGVyZWQpXG5cbiAgICByZXR1cm4gcmVnaXN0ZXJlZFxuICB9XG59XG5cbi8qKlxuICogU2VsZWN0cyB0aGUgc2FmZSBwcmltYXJ5IG9yaWdpbmFsIGxvY2F0aW9uIGZvciBjbG9zZWQgcHJvdmVuYW5jZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY09yaWdpbn0gb3JpZ2luIC0gQ2xvc2VkIHByb3ZlbmFuY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gUHJpbWFyeSBsb2NhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW1hcnlMb2NhdGlvbihvcmlnaW4pIHtcbiAgaWYgKG9yaWdpbi5raW5kID09IFwic291cmNlXCIpIHJldHVybiBvcmlnaW4ubG9jYXRpb25cbiAgaWYgKG9yaWdpbi5raW5kID09IFwiZGVyaXZlZFwiKSByZXR1cm4gb3JpZ2luLm9yaWdpbnNbMF0/LmxvY2F0aW9uXG5cbiAgcmV0dXJuIG9yaWdpbi5yZWxhdGVkT3JpZ2luc1swXT8ubG9jYXRpb25cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHNvdXJjZSBtZXRhZGF0YSBvbmx5IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gdGhlIHNlbWFudGljIG5vZGUgaXQgZGVzY3JpYmVzLlxuICogUmVnaXN0cnktbG9jYWwgSURzIGFuZCBwYXRocyBhcmUgaW50ZW50aW9uYWxseSBpZ25vcmVkIGFuZCByZWJ1aWx0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2UgfCB1bmRlZmluZWR9IHJlY29yZCAtIENhbmRpZGF0ZSBub2RlIGFzc29jaWF0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZSB8IHVuZGVmaW5lZH0gVXNhYmxlIGFzc29jaWF0aW9uLlxuICovXG5mdW5jdGlvbiB1c2FibGVOb2RlUHJvdmVuYW5jZShyZWNvcmQpIHtcbiAgaWYgKCFyZWNvcmQgfHwgcmVjb3JkLnNjaGVtYSAhPSBcIlNlbWFudGlmb2xkTm9kZVByb3ZlbmFuY2VcIiB8fCByZWNvcmQudmVyc2lvbiAhPSAxIHx8XG4gICAgIXJlY29yZC5vcmlnaW4gfHwgdHlwZW9mIHJlY29yZC5vcmlnaW4gIT0gXCJvYmplY3RcIiB8fFxuICAgICFyZWNvcmQucmFuZ2VzIHx8IHR5cGVvZiByZWNvcmQucmFuZ2VzICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShyZWNvcmQucmFuZ2VzKSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIHJldHVybiByZWNvcmRcbn1cblxuLyoqXG4gKiBSZXRhaW5zIGEgdmFsaWQgc291cmNlIHJlZ2lzdHJ5IGluZGVwZW5kZW50bHkgZnJvbSBwb3RlbnRpYWxseSBzdGFsZSBub2RlIG1ldGFkYXRhLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvdmVuYW5jZSB8IHVuZGVmaW5lZH0gcHJvdmVuYW5jZSAtIENhbmRpZGF0ZSBwcm92ZW5hbmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNQcm92ZW5hbmNlIHwgdW5kZWZpbmVkfSBQcm92ZW5hbmNlIHdpdGggYSB1c2FibGUgc291cmNlIHJlZ2lzdHJ5LlxuICovXG5mdW5jdGlvbiB1c2FibGVTb3VyY2VQcm92ZW5hbmNlKHByb3ZlbmFuY2UpIHtcbiAgaWYgKCFwcm92ZW5hbmNlIHx8IHByb3ZlbmFuY2Uuc2NoZW1hICE9IFwiU2VtYW50aWZvbGRQcm92ZW5hbmNlXCIgfHwgcHJvdmVuYW5jZS52ZXJzaW9uICE9IDEgfHxcbiAgICBwcm92ZW5hbmNlLmNvb3JkaW5hdGVTeXN0ZW0gIT0gXCJ1dGYxNlwiIHx8ICFBcnJheS5pc0FycmF5KHByb3ZlbmFuY2Uuc291cmNlcykpIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCBzb3VyY2VJZHMgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBwcm92ZW5hbmNlLnNvdXJjZXMpIHtcbiAgICBpZiAoIXNvdXJjZSB8fCB0eXBlb2Ygc291cmNlLmlkICE9IFwic3RyaW5nXCIgfHwgc291cmNlSWRzLmhhcyhzb3VyY2UuaWQpIHx8IHR5cGVvZiBzb3VyY2UuZmlsZW5hbWUgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgc291cmNlLmZpbGVuYW1lLmxlbmd0aCA9PSAwIHx8XG4gICAgICBzb3VyY2UuY29udGVudCAhPT0gbnVsbCAmJiB0eXBlb2Ygc291cmNlLmNvbnRlbnQgIT0gXCJzdHJpbmdcIiB8fCBzb3VyY2UubGFuZ3VhZ2UgIT09IG51bGwgJiZcbiAgICAgICFbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCIsIFwicHl0aG9uXCIsIFwiY3NoYXJwXCIsIFwiZ29cIiwgXCJjXCIsIFwiY3BwXCJdLmluY2x1ZGVzKHNvdXJjZS5sYW5ndWFnZSkpIHJldHVybiB1bmRlZmluZWRcbiAgICBzb3VyY2VJZHMuYWRkKHNvdXJjZS5pZClcbiAgfVxuXG4gIHJldHVybiBwcm92ZW5hbmNlXG59XG5cbi8qKlxuICogUmV0YWlucyBvbmx5IHNlbGYtY29uc2lzdGVudCBzb3VyY2UgcmFuZ2VzLlxuICogQHBhcmFtIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uPj59IHJhbmdlcyAtIENhbmRpZGF0ZSByYW5nZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZVtdfSBzb3VyY2VzIC0gQ2Fub25pY2FsIHNvdXJjZXMuXG4gKiBAcmV0dXJucyB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbj4+fSBTYWZlIHJhbmdlcy5cbiAqL1xuZnVuY3Rpb24gdmFsaWRSYW5nZXMocmFuZ2VzLCBzb3VyY2VzKSB7XG4gIGlmICghcmFuZ2VzIHx8IHR5cGVvZiByYW5nZXMgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHJhbmdlcykpIHJldHVybiB7fVxuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbj59ICovXG4gIGNvbnN0IHZhbGlkID0ge31cblxuICBmb3IgKGNvbnN0IFtyb2xlLCBsb2NhdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMocmFuZ2VzKSkge1xuICAgIGlmICh2YWxpZExvY2F0aW9uKGxvY2F0aW9uLCBzb3VyY2VzKSkgdmFsaWRbcm9sZV0gPSBsb2NhdGlvblxuICB9XG5cbiAgcmV0dXJuIHZhbGlkXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIGNsb3NlZCBvcmlnaW4gd2hpbGUgcmVtYXBwaW5nIHVudHJ1c3RlZCBzb3VyY2UgaWRlbnRpdGllcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY09yaWdpbn0gb3JpZ2luIC0gQ2FuZGlkYXRlIG9yaWdpbi5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlPn0gcHJpb3JTb3VyY2VzIC0gUHJpb3ItdG8tY2Fub25pY2FsIHNvdXJjZSBtYXBwaW5nLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2VbXX0gc291cmNlcyAtIENhbm9uaWNhbCBzb3VyY2VzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNPcmlnaW4gfCB1bmRlZmluZWR9IFNhZmUgb3JpZ2luLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVPcmlnaW4ob3JpZ2luLCBwcmlvclNvdXJjZXMsIHNvdXJjZXMpIHtcbiAgaWYgKCFvcmlnaW4gfHwgdHlwZW9mIG9yaWdpbiAhPSBcIm9iamVjdFwiKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgaWYgKG9yaWdpbi5raW5kID09IFwic291cmNlXCIgJiYgdmFsaWRMb2NhdGlvbihvcmlnaW4ubG9jYXRpb24sIHNvdXJjZXMpKSB7XG4gICAgY29uc3QgY2xhaW1lZCA9IHByaW9yU291cmNlcy5nZXQob3JpZ2luLnNvdXJjZUlkKVxuICAgIGNvbnN0IHNvdXJjZSA9IGNsYWltZWQgJiYgc291cmNlT3duc0xvY2F0aW9uKGNsYWltZWQsIG9yaWdpbi5sb2NhdGlvbikgPyBjbGFpbWVkIDogc291cmNlRm9yTG9jYXRpb24ob3JpZ2luLmxvY2F0aW9uLCBzb3VyY2VzKVxuXG4gICAgcmV0dXJuIHNvdXJjZU9yaWdpbihzb3VyY2UsIG9yaWdpbi5sb2NhdGlvbilcbiAgfVxuICBpZiAob3JpZ2luLmtpbmQgPT0gXCJkZXJpdmVkXCIgJiYgQXJyYXkuaXNBcnJheShvcmlnaW4ub3JpZ2lucykgJiYgb3JpZ2luLm9yaWdpbnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG9yaWdpbnMgPSBvcmlnaW4ub3JpZ2lucy5tYXAoKHJlbGF0ZWQpID0+IG5vcm1hbGl6ZVJlbGF0ZWRPcmlnaW4ocmVsYXRlZCwgcHJpb3JTb3VyY2VzLCBzb3VyY2VzKSlcblxuICAgIGlmIChvcmlnaW5zLmV2ZXJ5KEJvb2xlYW4pKSByZXR1cm4ge2tpbmQ6IFwiZGVyaXZlZFwiLCBvcmlnaW5zOiAvKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVsYXRlZE9yaWdpbltdfSAqLyAob3JpZ2lucyl9XG4gIH1cbiAgaWYgKG9yaWdpbi5raW5kID09IFwic3ludGhldGljXCIgJiYgdHlwZW9mIG9yaWdpbi5yZWFzb24gPT0gXCJzdHJpbmdcIiAmJiBBcnJheS5pc0FycmF5KG9yaWdpbi5yZWxhdGVkT3JpZ2lucykpIHtcbiAgICBjb25zdCByZWxhdGVkT3JpZ2lucyA9IG9yaWdpbi5yZWxhdGVkT3JpZ2lucy5tYXAoKHJlbGF0ZWQpID0+IG5vcm1hbGl6ZVJlbGF0ZWRPcmlnaW4ocmVsYXRlZCwgcHJpb3JTb3VyY2VzLCBzb3VyY2VzKSlcblxuICAgIGlmIChyZWxhdGVkT3JpZ2lucy5ldmVyeShCb29sZWFuKSkge1xuICAgICAgcmV0dXJuIHtraW5kOiBcInN5bnRoZXRpY1wiLCByZWFzb246IG9yaWdpbi5yZWFzb24sIHJlbGF0ZWRPcmlnaW5zOiAvKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVsYXRlZE9yaWdpbltdfSAqLyAocmVsYXRlZE9yaWdpbnMpfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIG9uZSByZWxhdGVkIG9yaWdpbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWxhdGVkT3JpZ2lufSByZWxhdGVkIC0gQ2FuZGlkYXRlIHJlbGF0ZWQgb3JpZ2luLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2U+fSBwcmlvclNvdXJjZXMgLSBQcmlvciBzb3VyY2VzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2VbXX0gc291cmNlcyAtIENhbm9uaWNhbCBzb3VyY2VzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVsYXRlZE9yaWdpbiB8IHVuZGVmaW5lZH0gU2FmZSByZWxhdGVkIG9yaWdpbi5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmVsYXRlZE9yaWdpbihyZWxhdGVkLCBwcmlvclNvdXJjZXMsIHNvdXJjZXMpIHtcbiAgaWYgKCFyZWxhdGVkIHx8ICF2YWxpZExvY2F0aW9uKHJlbGF0ZWQubG9jYXRpb24sIHNvdXJjZXMpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgY2xhaW1lZCA9IHByaW9yU291cmNlcy5nZXQocmVsYXRlZC5zb3VyY2VJZClcbiAgY29uc3Qgc291cmNlID0gY2xhaW1lZCAmJiBzb3VyY2VPd25zTG9jYXRpb24oY2xhaW1lZCwgcmVsYXRlZC5sb2NhdGlvbikgPyBjbGFpbWVkIDogc291cmNlRm9yTG9jYXRpb24ocmVsYXRlZC5sb2NhdGlvbiwgc291cmNlcylcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHtsb2NhdGlvbjogcmVsYXRlZC5sb2NhdGlvbiwgc291cmNlSWQ6IHNvdXJjZS5pZH1cblxuICBpZiAodHlwZW9mIHJlbGF0ZWQucm9sZSA9PSBcInN0cmluZ1wiKSBPYmplY3QuYXNzaWduKG5vcm1hbGl6ZWQsIHtyb2xlOiByZWxhdGVkLnJvbGV9KVxuXG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbi8qKlxuICogQ2hlY2tzIG5vcm1hbGl6ZWQgY29vcmRpbmF0ZXMgYWdhaW5zdCBleGFjdCBzb3VyY2UgY29udGVudCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBDYW5kaWRhdGUgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZVtdfSBzb3VyY2VzIC0gUmVnaXN0ZXJlZCBzb3VyY2VzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGxvY2F0aW9uIGlzIHNhZmUuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkTG9jYXRpb24obG9jYXRpb24sIHNvdXJjZXMpIHtcbiAgaWYgKCFsb2NhdGlvbiB8fCB0eXBlb2YgbG9jYXRpb24uZmlsZW5hbWUgIT0gXCJzdHJpbmdcIiB8fCAhbG9jYXRpb24uc3RhcnQgfHwgIWxvY2F0aW9uLmVuZCB8fFxuICAgICFOdW1iZXIuaXNJbnRlZ2VyKGxvY2F0aW9uLnN0YXJ0Lm9mZnNldCkgfHwgIU51bWJlci5pc0ludGVnZXIobG9jYXRpb24uZW5kLm9mZnNldCkgfHwgbG9jYXRpb24uc3RhcnQub2Zmc2V0IDwgMCB8fFxuICAgIGxvY2F0aW9uLmVuZC5vZmZzZXQgPCBsb2NhdGlvbi5zdGFydC5vZmZzZXQgfHwgIXZhbGlkUG9pbnRTaGFwZShsb2NhdGlvbi5zdGFydCkgfHwgIXZhbGlkUG9pbnRTaGFwZShsb2NhdGlvbi5lbmQpKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBjYW5kaWRhdGVzID0gc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLmZpbGVuYW1lID09IGxvY2F0aW9uLmZpbGVuYW1lKVxuXG4gIHJldHVybiBjYW5kaWRhdGVzLnNvbWUoKHNvdXJjZSkgPT4gc291cmNlT3duc0xvY2F0aW9uKHNvdXJjZSwgbG9jYXRpb24pKVxufVxuXG4vKipcbiAqIENoZWNrcyB0aGF0IG9uZSBpZGVudGlmaWVkIHJlZ2lzdHJ5IHNvdXJjZSBvd25zIGEgbm9ybWFsaXplZCBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlfSBzb3VyY2UgLSBJZGVudGlmaWVkIHNvdXJjZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBDYW5kaWRhdGUgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgc291cmNlIG93bnMgdGhlIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBzb3VyY2VPd25zTG9jYXRpb24oc291cmNlLCBsb2NhdGlvbikge1xuICBpZiAoc291cmNlLmZpbGVuYW1lICE9IGxvY2F0aW9uLmZpbGVuYW1lKSByZXR1cm4gZmFsc2VcbiAgaWYgKHNvdXJjZS5jb250ZW50ID09IG51bGwpIHJldHVybiB0cnVlXG4gIGlmIChsb2NhdGlvbi5lbmQub2Zmc2V0ID4gc291cmNlLmNvbnRlbnQubGVuZ3RoKSByZXR1cm4gZmFsc2VcbiAgbGV0IGNvb3JkaW5hdGVzID0gc291cmNlQ29vcmRpbmF0ZUluZGV4ZXMuZ2V0KHNvdXJjZSlcblxuICBpZiAoIWNvb3JkaW5hdGVzKSB7XG4gICAgY29vcmRpbmF0ZXMgPSBjcmVhdGVDb29yZGluYXRlSW5kZXgoc291cmNlLmNvbnRlbnQpXG4gICAgc291cmNlQ29vcmRpbmF0ZUluZGV4ZXMuc2V0KHNvdXJjZSwgY29vcmRpbmF0ZXMpXG4gIH1cblxuICByZXR1cm4gc2FtZVBvaW50KGluZGV4ZWRQb2ludEF0KGNvb3JkaW5hdGVzLCBsb2NhdGlvbi5zdGFydC5vZmZzZXQpLCBsb2NhdGlvbi5zdGFydCkgJiZcbiAgICBzYW1lUG9pbnQoaW5kZXhlZFBvaW50QXQoY29vcmRpbmF0ZXMsIGxvY2F0aW9uLmVuZC5vZmZzZXQpLCBsb2NhdGlvbi5lbmQpXG59XG5cbi8qKlxuICogQ2hlY2tzIHRoZSBpbnRlZ2VyIHNoYXBlIG9mIG9uZSBzb3VyY2UgcG9pbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlUG9pbnR9IHBvaW50IC0gU291cmNlIHBvaW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgaXQgaXMgc3RydWN0dXJhbGx5IHZhbGlkLlxuICovXG5mdW5jdGlvbiB2YWxpZFBvaW50U2hhcGUocG9pbnQpIHtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIocG9pbnQubGluZSkgJiYgcG9pbnQubGluZSA+PSAxICYmIE51bWJlci5pc0ludGVnZXIocG9pbnQuY29sdW1uKSAmJiBwb2ludC5jb2x1bW4gPj0gMVxufVxuXG4vKipcbiAqIENvbXBhcmVzIG5vcm1hbGl6ZWQgc291cmNlIGNvb3JkaW5hdGVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZVBvaW50fSBsZWZ0IC0gTGVmdCBwb2ludC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VQb2ludH0gcmlnaHQgLSBSaWdodCBwb2ludC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGFsbCBjb29yZGluYXRlcyBtYXRjaC5cbiAqL1xuZnVuY3Rpb24gc2FtZVBvaW50KGxlZnQsIHJpZ2h0KSB7XG4gIHJldHVybiBsZWZ0Lm9mZnNldCA9PSByaWdodC5vZmZzZXQgJiYgbGVmdC5saW5lID09IHJpZ2h0LmxpbmUgJiYgbGVmdC5jb2x1bW4gPT0gcmlnaHQuY29sdW1uXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGRldGVybWluaXN0aWMgc291cmNlIG93bmluZyBhIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlW119IHNvdXJjZXMgLSBDYW5vbmljYWwgc291cmNlcy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2V9IE93bmluZyBzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIHNvdXJjZUZvckxvY2F0aW9uKGxvY2F0aW9uLCBzb3VyY2VzKSB7XG4gIGNvbnN0IHNvdXJjZSA9IHNvdXJjZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBzb3VyY2VPd25zTG9jYXRpb24oY2FuZGlkYXRlLCBsb2NhdGlvbikpXG5cbiAgaWYgKCFzb3VyY2UpIHRocm93IG5ldyBSYW5nZUVycm9yKGBObyByZWdpc3RlcmVkIHNvdXJjZSBvd25zICR7bG9jYXRpb24uZmlsZW5hbWV9OiR7bG9jYXRpb24uc3RhcnQub2Zmc2V0fS5gKVxuXG4gIHJldHVybiBzb3VyY2Vcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGRpcmVjdCBzb3VyY2UgcHJvdmVuYW5jZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlfSBzb3VyY2UgLSBTb3VyY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gTG9jYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VPcmlnaW59IE9yaWdpbi5cbiAqL1xuZnVuY3Rpb24gc291cmNlT3JpZ2luKHNvdXJjZSwgbG9jYXRpb24pIHtcbiAgcmV0dXJuIHtraW5kOiBcInNvdXJjZVwiLCBsb2NhdGlvbiwgc291cmNlSWQ6IHNvdXJjZS5pZH1cbn1cblxuLyoqXG4gKiBGaW5kcyBvbmUgbm9kZSBwcm92ZW5hbmNlIHJlY29yZCBieSBzZW1hbnRpYyBvYmplY3Qgb3Igbm9kZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZSB8IHN0cmluZ30gbm9kZSAtIFNlbWFudGljIG9iamVjdCBvciBub2RlIGlkZW50aXR5LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZX0gUHJvdmVuYW5jZSByZWNvcmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2RlUHJvdmVuYW5jZShtb2R1bGUsIG5vZGUpIHtcbiAgcmVxdWlyZVByb3ZlbmFuY2UobW9kdWxlKVxuICBjb25zdCBpbmRleCA9IGNyZWF0ZUdlbmVyYXRpb25JbmRleChtb2R1bGUpXG4gIGNvbnN0IHJlY29yZCA9IHR5cGVvZiBub2RlID09IFwic3RyaW5nXCJcbiAgICA/IGluZGV4LnByb3ZlbmFuY2Uubm9kZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT0gbm9kZSlcbiAgICA6IGluZGV4LnJlY29yZEZvcihub2RlKVxuXG4gIGlmICghcmVjb3JkKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5rbm93biBzZW1hbnRpYyBub2RlOiAke25vZGV9YClcblxuICByZXR1cm4gcmVjb3JkXG59XG5cbi8qKlxuICogRmluZHMgb25lIHNlbWFudGljIHN5bWJvbCByZWNvcmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzeW1ib2xJZCAtIFN5bWJvbCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljU3ltYm9sUHJvdmVuYW5jZX0gU3ltYm9sIHJlY29yZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN5bWJvbFByb3ZlbmFuY2UobW9kdWxlLCBzeW1ib2xJZCkge1xuICByZXF1aXJlUHJvdmVuYW5jZShtb2R1bGUpXG4gIGNvbnN0IHN5bWJvbCA9IGNyZWF0ZUdlbmVyYXRpb25JbmRleChtb2R1bGUpLnByb3ZlbmFuY2Uuc3ltYm9scy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PSBzeW1ib2xJZClcblxuICBpZiAoIXN5bWJvbCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVua25vd24gc2VtYW50aWMgc3ltYm9sOiAke3N5bWJvbElkfWApXG5cbiAgcmV0dXJuIHN5bWJvbFxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGZyb250ZW5kIHByb3ZlbmFuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvdmVuYW5jZX0gUHJvdmVuYW5jZS5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZVByb3ZlbmFuY2UobW9kdWxlKSB7XG4gIGlmICghbW9kdWxlLnByb3ZlbmFuY2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTZW1hbnRpYyBtb2R1bGUgZG9lcyBub3QgY29udGFpbiBzb3VyY2UgcHJvdmVuYW5jZS5cIilcblxuICByZXR1cm4gbW9kdWxlLnByb3ZlbmFuY2Vcbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMgcHVibGljIHNlbWFudGljIG5vZGVzIGluIG9uZSBzdGFibGUgb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHt7bm9kZTogaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGUsIG93bmVyTG9jYXRpb246IGltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhdGg6IHN0cmluZ31bXX0gRW50cmllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbWFudGljRW50cmllcyhtb2R1bGUpIHtcbiAgLyoqIEB0eXBlIHt7bm9kZTogaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGUsIG93bmVyTG9jYXRpb246IGltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhdGg6IHN0cmluZ31bXX0gKi9cbiAgY29uc3QgZW50cmllcyA9IFtdXG5cbiAgdmlzaXQobW9kdWxlLCBcIlwiLCBtb2R1bGUubG9jYXRpb24pXG5cbiAgcmV0dXJuIGVudHJpZXNcblxuICAvKipcbiAgICogVmlzaXRzIG9uZSBzZW1hbnRpYyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGV9IG5vZGUgLSBDdXJyZW50IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gQ3VycmVudCBKU09OIFBvaW50ZXIuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIE5lYXJlc3QgbG9jYXRlZCBvd25lci5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdChub2RlLCBwYXRoLCBvd25lckxvY2F0aW9uKSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBcImxvY2F0aW9uXCIgaW4gbm9kZSA/IG5vZGUubG9jYXRpb24gOiBvd25lckxvY2F0aW9uXG5cbiAgICBlbnRyaWVzLnB1c2goe25vZGUsIG93bmVyTG9jYXRpb246IGxvY2F0aW9uLCBwYXRofSlcblxuICAgIGlmIChub2RlLmtpbmQgPT0gXCJNb2R1bGVcIikge1xuICAgICAgbm9kZS5mdW5jdGlvbnMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYC9mdW5jdGlvbnMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgICB2aXNpdChub2RlLmVudHJ5UG9pbnQsIFwiL2VudHJ5UG9pbnRcIiwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIpIHtcbiAgICAgIG5vZGUucGFyYW1ldGVycy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9wYXJhbWV0ZXJzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgICAgdmlzaXQobm9kZS5yZXR1cm5UeXBlLCBgJHtwYXRofS9yZXR1cm5UeXBlYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmJvZHksIGAke3BhdGh9L2JvZHlgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkJsb2NrXCIpIHtcbiAgICAgIG5vZGUuc3RhdGVtZW50cy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9zdGF0ZW1lbnRzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiUGFyYW1ldGVyXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUudHlwZSwgYCR7cGF0aH0vdHlwZWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSB7XG4gICAgICB2aXNpdChub2RlLnR5cGUsIGAke3BhdGh9L3R5cGVgLCBsb2NhdGlvbilcbiAgICAgIHZpc2l0KG5vZGUuaW5pdGlhbGl6ZXIsIGAke3BhdGh9L2luaXRpYWxpemVyYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUudGFyZ2V0LCBgJHtwYXRofS90YXJnZXRgLCBsb2NhdGlvbilcbiAgICAgIHZpc2l0KG5vZGUuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIgfHwgbm9kZS5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgICAgdmlzaXQobm9kZS5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICB2aXNpdChub2RlLmNvbmRpdGlvbiwgYCR7cGF0aH0vY29uZGl0aW9uYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmNvbnNlcXVlbnQsIGAke3BhdGh9L2NvbnNlcXVlbnRgLCBsb2NhdGlvbilcbiAgICAgIGlmIChub2RlLmFsdGVybmF0ZSkgdmlzaXQobm9kZS5hbHRlcm5hdGUsIGAke3BhdGh9L2FsdGVybmF0ZWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiRW50cnlQb2ludFwiKSB7XG4gICAgICB2aXNpdChub2RlLmJvZHksIGAke3BhdGh9L2JvZHlgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdChub2RlLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXQobm9kZS5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgICAgbm9kZS5hcmd1bWVudHMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIGRlY2xhcmF0aW9ucyBhbmQgcmVmZXJlbmNlcyBhZnRlciBzZW1hbnRpYyB2YWxpZGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBWYWxpZGF0ZWQgbW9kdWxlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVByb3ZlbmFuY2U+fSByZWNvcmRzIC0gTm9kZSByZWNvcmRzIGJ5IG9jY3VycmVuY2UgcGF0aC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljU3ltYm9sUHJvdmVuYW5jZVtdfSBTeW1ib2xzLlxuICovXG5mdW5jdGlvbiByZXNvbHZlU3ltYm9scyhtb2R1bGUsIHJlY29yZHMpIHtcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljU3ltYm9sUHJvdmVuYW5jZVtdfSAqL1xuICBjb25zdCBzeW1ib2xzID0gW11cbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBmdW5jdGlvbnMgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgZGVjbGFyYXRpb25dIG9mIG1vZHVsZS5mdW5jdGlvbnMuZW50cmllcygpKSB7XG4gICAgZnVuY3Rpb25zLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJlKGRlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbi5uYW1lLCBcImZ1bmN0aW9uXCIsIGAvZnVuY3Rpb25zLyR7aW5kZXh9YCkpXG4gIH1cblxuICBmb3IgKGNvbnN0IFtpbmRleCwgZGVjbGFyYXRpb25dIG9mIG1vZHVsZS5mdW5jdGlvbnMuZW50cmllcygpKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25QYXRoID0gYC9mdW5jdGlvbnMvJHtpbmRleH1gXG4gICAgY29uc3Qgc2NvcGUgPSBuZXcgTWFwKClcblxuICAgIGZvciAoY29uc3QgW3BhcmFtZXRlckluZGV4LCBwYXJhbWV0ZXJdIG9mIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMuZW50cmllcygpKSB7XG4gICAgICBzY29wZS5zZXQocGFyYW1ldGVyLm5hbWUsIGRlY2xhcmUocGFyYW1ldGVyLCBwYXJhbWV0ZXIubmFtZSwgXCJwYXJhbWV0ZXJcIiwgYCR7ZGVjbGFyYXRpb25QYXRofS9wYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9YCkpXG4gICAgfVxuICAgIHZpc2l0QmxvY2soZGVjbGFyYXRpb24uYm9keSwgc2NvcGUsIGAke2RlY2xhcmF0aW9uUGF0aH0vYm9keWApXG4gIH1cblxuICB2aXNpdEJsb2NrKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIG5ldyBNYXAoKSwgXCIvZW50cnlQb2ludC9ib2R5XCIpXG5cbiAgcmV0dXJuIHN5bWJvbHNcblxuICAvKipcbiAgICogRGVjbGFyZXMgb25lIGNhbm9uaWNhbCBzeW1ib2wuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5QYXJhbWV0ZXIgfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkxvY2FsRGVjbGFyYXRpb259IG5vZGUgLSBEZWNsYXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBTeW1ib2wgbmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljU3ltYm9sS2luZH0ga2luZCAtIFN5bWJvbCBraW5kLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIERlY2xhcmF0aW9uIG9jY3VycmVuY2UgcGF0aC5cbiAgICogQHJldHVybnMge3N0cmluZ30gU3ltYm9sIGlkZW50aXR5LlxuICAgKi9cbiAgZnVuY3Rpb24gZGVjbGFyZShub2RlLCBuYW1lLCBraW5kLCBwYXRoKSB7XG4gICAgY29uc3QgcmVjb3JkID0gcmVjb3Jkcy5nZXQocGF0aClcblxuICAgIGlmICghcmVjb3JkKSB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgcHJvdmVuYW5jZSBmb3IgJHtub2RlLmtpbmR9LmApXG5cbiAgICBjb25zdCBsb2NhdGlvbiA9IHJlY29yZC5yYW5nZXMubmFtZSA/PyBub2RlLmxvY2F0aW9uXG4gICAgY29uc3QgaWQgPSBgc3ltYm9sOiR7c3ltYm9scy5sZW5ndGh9YFxuXG4gICAgcmVjb3JkLnN5bWJvbElkID0gaWRcbiAgICBzeW1ib2xzLnB1c2goe2RlY2xhcmF0aW9uTm9kZUlkOiByZWNvcmQuaWQsIGlkLCBraW5kLCBsb2NhdGlvbiwgbmFtZSwgcmVmZXJlbmNlczogW119KVxuXG4gICAgcmV0dXJuIGlkXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgcmVmZXJlbmNlcyBpbiBvbmUgbGV4aWNhbCBibG9jay5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICAgKiBAcGFyYW0ge01hcDxzdHJpbmcsIHN0cmluZz59IHBhcmVudCAtIFZpc2libGUgYmluZGluZ3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gU3RhdGVtZW50IHNlcXVlbmNlIHBhdGguXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXRCbG9jayhibG9jaywgcGFyZW50LCBwYXRoKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBuZXcgTWFwKHBhcmVudClcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCBzdGF0ZW1lbnRdIG9mIGJsb2NrLnN0YXRlbWVudHMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRQYXRoID0gYCR7cGF0aH0vc3RhdGVtZW50cy8ke2luZGV4fWBcblxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSB7XG4gICAgICAgIHZpc2l0RXhwcmVzc2lvbihzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIsIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9pbml0aWFsaXplcmApXG4gICAgICAgIHNjb3BlLnNldChzdGF0ZW1lbnQubmFtZSwgZGVjbGFyZShzdGF0ZW1lbnQsIHN0YXRlbWVudC5uYW1lLCBcImxvY2FsXCIsIHN0YXRlbWVudFBhdGgpKVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikge1xuICAgICAgICByZWZlcmVuY2Uoc3RhdGVtZW50LnRhcmdldCwgc2NvcGUuZ2V0KHN0YXRlbWVudC50YXJnZXQubmFtZSksIFwid3JpdGVcIiwgYCR7c3RhdGVtZW50UGF0aH0vdGFyZ2V0YClcbiAgICAgICAgdmlzaXRFeHByZXNzaW9uKHN0YXRlbWVudC5leHByZXNzaW9uLCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vZXhwcmVzc2lvbmApXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0RXhwcmVzc2lvbihzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgc2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L2V4cHJlc3Npb25gKVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgICAgdmlzaXRFeHByZXNzaW9uKHN0YXRlbWVudC5jb25kaXRpb24sIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9jb25kaXRpb25gKVxuICAgICAgICB2aXNpdEJsb2NrKHN0YXRlbWVudC5jb25zZXF1ZW50LCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vY29uc2VxdWVudGApXG4gICAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB2aXNpdEJsb2NrKHN0YXRlbWVudC5hbHRlcm5hdGUsIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9hbHRlcm5hdGVgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyByZWZlcmVuY2VzIGluIG9uZSBleHByZXNzaW9uLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24uXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgc3RyaW5nPn0gc2NvcGUgLSBWaXNpYmxlIGJpbmRpbmdzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4cHJlc3Npb24gb2NjdXJyZW5jZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIHZpc2l0RXhwcmVzc2lvbihleHByZXNzaW9uLCBzY29wZSwgcGF0aCkge1xuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSByZWZlcmVuY2UoZXhwcmVzc2lvbiwgc2NvcGUuZ2V0KGV4cHJlc3Npb24ubmFtZSksIFwicmVhZFwiLCBwYXRoKVxuICAgIGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICAgIHJlZmVyZW5jZShleHByZXNzaW9uLCBmdW5jdGlvbnMuZ2V0KGV4cHJlc3Npb24uY2FsbGVlKSwgXCJjYWxsXCIsIHBhdGgpXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleCwgYXJndW1lbnRdIG9mIGV4cHJlc3Npb24uYXJndW1lbnRzLmVudHJpZXMoKSkgdmlzaXRFeHByZXNzaW9uKGFyZ3VtZW50LCBzY29wZSwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5vcGVyYW5kLCBzY29wZSwgYCR7cGF0aH0vb3BlcmFuZGApXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICAgIHZpc2l0RXhwcmVzc2lvbihleHByZXNzaW9uLmxlZnQsIHNjb3BlLCBgJHtwYXRofS9sZWZ0YClcbiAgICAgIHZpc2l0RXhwcmVzc2lvbihleHByZXNzaW9uLnJpZ2h0LCBzY29wZSwgYCR7cGF0aH0vcmlnaHRgKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyBvbmUgcmVzb2x2ZWQgc3ltYm9sIHJlZmVyZW5jZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLklkZW50aWZpZXJFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5DYWxsRXhwcmVzc2lvbn0gbm9kZSAtIFJlZmVyZW5jZSBub2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gc3ltYm9sSWQgLSBSZXNvbHZlZCBzeW1ib2wuXG4gICAqIEBwYXJhbSB7XCJyZWFkXCIgfCBcIndyaXRlXCIgfCBcImNhbGxcIn0gcm9sZSAtIFJlZmVyZW5jZSByb2xlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFJlZmVyZW5jZSBvY2N1cnJlbmNlIHBhdGguXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVmZXJlbmNlKG5vZGUsIHN5bWJvbElkLCByb2xlLCBwYXRoKSB7XG4gICAgaWYgKCFzeW1ib2xJZCkgcmV0dXJuXG5cbiAgICBjb25zdCByZWNvcmQgPSByZWNvcmRzLmdldChwYXRoKVxuICAgIGNvbnN0IHN5bWJvbCA9IHN5bWJvbHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT0gc3ltYm9sSWQpXG5cbiAgICBpZiAoIXJlY29yZCB8fCAhc3ltYm9sKSB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgcHJvdmVuYW5jZSB3aGlsZSByZXNvbHZpbmcgJHtub2RlLmtpbmR9LmApXG5cbiAgICBjb25zdCBsb2NhdGlvbiA9IHJlY29yZC5yYW5nZXNbcm9sZSA9PSBcImNhbGxcIiA/IFwiY2FsbGVlXCIgOiBcIm5hbWVcIl0gPz8gbm9kZS5sb2NhdGlvblxuXG4gICAgcmVjb3JkLnN5bWJvbElkID0gc3ltYm9sSWRcbiAgICBzeW1ib2wucmVmZXJlbmNlcy5wdXNoKHtsb2NhdGlvbiwgbm9kZUlkOiByZWNvcmQuaWQsIHJvbGV9KVxuICB9XG59XG4iXX0=
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export type SemanticLanguage = "php" | "ruby" | "javascript" | "typescript" | "java" | "python";
|
|
1
|
+
export type SemanticLanguage = "php" | "ruby" | "javascript" | "typescript" | "java" | "python" | "csharp" | "go" | "c" | "cpp";
|
|
2
2
|
export type SemanticTypeName = "integer" | "boolean" | "string";
|
|
3
3
|
export type SemanticUnaryOperation = "IntegerNegate" | "BooleanNot";
|
|
4
4
|
export type SemanticBinaryOperation = "IntegerAdd" | "IntegerSubtract" | "IntegerMultiply" | "BooleanAnd" | "BooleanOr" | "IntegerEqual" | "IntegerNotEqual" | "BooleanEqual" | "BooleanNotEqual" | "StringEqual" | "StringNotEqual" | "IntegerLessThan" | "IntegerLessThanOrEqual" | "IntegerGreaterThan" | "IntegerGreaterThanOrEqual" | "StringConcat";
|
|
5
5
|
export type SemanticSymbolKind = "function" | "parameter" | "local";
|
|
6
6
|
export type SemanticSymbolRole = "declaration" | "read" | "write" | "call";
|
|
7
|
-
export type AcceptanceStage = "parse" | "generate" | "compile" | "link" | "validate" | "instantiate" | "execute";
|
|
7
|
+
export type AcceptanceStage = "parse" | "generate" | "restore" | "compile" | "link" | "validate" | "instantiate" | "execute";
|
|
8
8
|
export type GeneratedArtifactRole = "entry" | "source" | "manifest" | "support" | "mapping" | "resource" | "loader";
|
|
9
9
|
export type LanguageRoleCapabilities = {
|
|
10
10
|
/**
|
|
@@ -1012,13 +1012,13 @@ export type SemanticModule = {
|
|
|
1012
1012
|
};
|
|
1013
1013
|
export type SemanticNode = SemanticModule | FunctionDeclaration | Parameter | Block | Statement | EntryPoint | Expression | TypeReference;
|
|
1014
1014
|
export type SemanticNodeWithoutLocations = SemanticNode;
|
|
1015
|
-
/** @typedef {"php" | "ruby" | "javascript" | "typescript" | "java" | "python"} SemanticLanguage */
|
|
1015
|
+
/** @typedef {"php" | "ruby" | "javascript" | "typescript" | "java" | "python" | "csharp" | "go" | "c" | "cpp"} SemanticLanguage */
|
|
1016
1016
|
/** @typedef {"integer" | "boolean" | "string"} SemanticTypeName */
|
|
1017
1017
|
/** @typedef {"IntegerNegate" | "BooleanNot"} SemanticUnaryOperation */
|
|
1018
1018
|
/** @typedef {"IntegerAdd" | "IntegerSubtract" | "IntegerMultiply" | "BooleanAnd" | "BooleanOr" | "IntegerEqual" | "IntegerNotEqual" | "BooleanEqual" | "BooleanNotEqual" | "StringEqual" | "StringNotEqual" | "IntegerLessThan" | "IntegerLessThanOrEqual" | "IntegerGreaterThan" | "IntegerGreaterThanOrEqual" | "StringConcat"} SemanticBinaryOperation */
|
|
1019
1019
|
/** @typedef {"function" | "parameter" | "local"} SemanticSymbolKind */
|
|
1020
1020
|
/** @typedef {"declaration" | "read" | "write" | "call"} SemanticSymbolRole */
|
|
1021
|
-
/** @typedef {"parse" | "generate" | "compile" | "link" | "validate" | "instantiate" | "execute"} AcceptanceStage */
|
|
1021
|
+
/** @typedef {"parse" | "generate" | "restore" | "compile" | "link" | "validate" | "instantiate" | "execute"} AcceptanceStage */
|
|
1022
1022
|
/** @typedef {"entry" | "source" | "manifest" | "support" | "mapping" | "resource" | "loader"} GeneratedArtifactRole */
|
|
1023
1023
|
/**
|
|
1024
1024
|
* @typedef LanguageRoleCapabilities
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/semantic/types.js"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/semantic/types.js"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
-
/** @typedef {"php" | "ruby" | "javascript" | "typescript" | "java" | "python"} SemanticLanguage */
|
|
2
|
+
/** @typedef {"php" | "ruby" | "javascript" | "typescript" | "java" | "python" | "csharp" | "go" | "c" | "cpp"} SemanticLanguage */
|
|
3
3
|
/** @typedef {"integer" | "boolean" | "string"} SemanticTypeName */
|
|
4
4
|
/** @typedef {"IntegerNegate" | "BooleanNot"} SemanticUnaryOperation */
|
|
5
5
|
/** @typedef {"IntegerAdd" | "IntegerSubtract" | "IntegerMultiply" | "BooleanAnd" | "BooleanOr" | "IntegerEqual" | "IntegerNotEqual" | "BooleanEqual" | "BooleanNotEqual" | "StringEqual" | "StringNotEqual" | "IntegerLessThan" | "IntegerLessThanOrEqual" | "IntegerGreaterThan" | "IntegerGreaterThanOrEqual" | "StringConcat"} SemanticBinaryOperation */
|
|
6
6
|
/** @typedef {"function" | "parameter" | "local"} SemanticSymbolKind */
|
|
7
7
|
/** @typedef {"declaration" | "read" | "write" | "call"} SemanticSymbolRole */
|
|
8
|
-
/** @typedef {"parse" | "generate" | "compile" | "link" | "validate" | "instantiate" | "execute"} AcceptanceStage */
|
|
8
|
+
/** @typedef {"parse" | "generate" | "restore" | "compile" | "link" | "validate" | "instantiate" | "execute"} AcceptanceStage */
|
|
9
9
|
/** @typedef {"entry" | "source" | "manifest" | "support" | "mapping" | "resource" | "loader"} GeneratedArtifactRole */
|
|
10
10
|
/**
|
|
11
11
|
* @typedef LanguageRoleCapabilities
|
|
@@ -384,4 +384,4 @@
|
|
|
384
384
|
/** @typedef {SemanticModule | FunctionDeclaration | Parameter | Block | Statement | EntryPoint | Expression | TypeReference} SemanticNode */
|
|
385
385
|
/** @typedef {SemanticNode} SemanticNodeWithoutLocations */
|
|
386
386
|
export {};
|
|
387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VtYW50aWMvdHlwZXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLG1HQUFtRztBQUNuRyxtRUFBbUU7QUFDbkUsdUVBQXVFO0FBQ3ZFLDZWQUE2VjtBQUM3Vix1RUFBdUU7QUFDdkUsOEVBQThFO0FBQzlFLG9IQUFvSDtBQUNwSCx1SEFBdUg7QUFFdkg7Ozs7Ozs7R0FPRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7O0dBSUc7QUFFSDs7Ozs7R0FLRztBQUVILCtFQUErRTtBQUUvRTs7Ozs7OztHQU9HO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7Ozs7OztHQVFHO0FBRUgsOERBQThEO0FBRTlEOzs7Ozs7Ozs7R0FTRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7R0FJRztBQUVIOzs7OztHQUtHO0FBRUgsa0hBQWtIO0FBRWxIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7OztHQU9HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7OztHQU9HO0FBRUgseUpBQXlKO0FBRXpKOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7R0FRRztBQUVILHVFQUF1RTtBQUN2RSwyRkFBMkY7QUFFM0Y7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSCw2SUFBNkk7QUFDN0ksMkRBQTJEO0FBRTNELE9BQU8sRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKiBAdHlwZWRlZiB7XCJwaHBcIiB8IFwicnVieVwiIHwgXCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIiB8IFwiamF2YVwiIHwgXCJweXRob25cIn0gU2VtYW50aWNMYW5ndWFnZSAqL1xuLyoqIEB0eXBlZGVmIHtcImludGVnZXJcIiB8IFwiYm9vbGVhblwiIHwgXCJzdHJpbmdcIn0gU2VtYW50aWNUeXBlTmFtZSAqL1xuLyoqIEB0eXBlZGVmIHtcIkludGVnZXJOZWdhdGVcIiB8IFwiQm9vbGVhbk5vdFwifSBTZW1hbnRpY1VuYXJ5T3BlcmF0aW9uICovXG4vKiogQHR5cGVkZWYge1wiSW50ZWdlckFkZFwiIHwgXCJJbnRlZ2VyU3VidHJhY3RcIiB8IFwiSW50ZWdlck11bHRpcGx5XCIgfCBcIkJvb2xlYW5BbmRcIiB8IFwiQm9vbGVhbk9yXCIgfCBcIkludGVnZXJFcXVhbFwiIHwgXCJJbnRlZ2VyTm90RXF1YWxcIiB8IFwiQm9vbGVhbkVxdWFsXCIgfCBcIkJvb2xlYW5Ob3RFcXVhbFwiIHwgXCJTdHJpbmdFcXVhbFwiIHwgXCJTdHJpbmdOb3RFcXVhbFwiIHwgXCJJbnRlZ2VyTGVzc1RoYW5cIiB8IFwiSW50ZWdlckxlc3NUaGFuT3JFcXVhbFwiIHwgXCJJbnRlZ2VyR3JlYXRlclRoYW5cIiB8IFwiSW50ZWdlckdyZWF0ZXJUaGFuT3JFcXVhbFwiIHwgXCJTdHJpbmdDb25jYXRcIn0gU2VtYW50aWNCaW5hcnlPcGVyYXRpb24gKi9cbi8qKiBAdHlwZWRlZiB7XCJmdW5jdGlvblwiIHwgXCJwYXJhbWV0ZXJcIiB8IFwibG9jYWxcIn0gU2VtYW50aWNTeW1ib2xLaW5kICovXG4vKiogQHR5cGVkZWYge1wiZGVjbGFyYXRpb25cIiB8IFwicmVhZFwiIHwgXCJ3cml0ZVwiIHwgXCJjYWxsXCJ9IFNlbWFudGljU3ltYm9sUm9sZSAqL1xuLyoqIEB0eXBlZGVmIHtcInBhcnNlXCIgfCBcImdlbmVyYXRlXCIgfCBcImNvbXBpbGVcIiB8IFwibGlua1wiIHwgXCJ2YWxpZGF0ZVwiIHwgXCJpbnN0YW50aWF0ZVwiIHwgXCJleGVjdXRlXCJ9IEFjY2VwdGFuY2VTdGFnZSAqL1xuLyoqIEB0eXBlZGVmIHtcImVudHJ5XCIgfCBcInNvdXJjZVwiIHwgXCJtYW5pZmVzdFwiIHwgXCJzdXBwb3J0XCIgfCBcIm1hcHBpbmdcIiB8IFwicmVzb3VyY2VcIiB8IFwibG9hZGVyXCJ9IEdlbmVyYXRlZEFydGlmYWN0Um9sZSAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIExhbmd1YWdlUm9sZUNhcGFiaWxpdGllc1xuICogQHByb3BlcnR5IHtib29sZWFufSBmcm9udGVuZCAtIFBhcnNlciBhZGFwdGVyIGF2YWlsYWJpbGl0eS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdGV4dEJhY2tlbmQgLSBTaW5nbGUtIG9yIG11bHRpLWZpbGUgdGV4dCBiYWNrZW5kIGF2YWlsYWJpbGl0eS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYmluYXJ5QmFja2VuZCAtIEJpbmFyeSBiYWNrZW5kIGF2YWlsYWJpbGl0eS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYXBwbGljYXRpb25CYWNrZW5kIC0gQXBwbGljYXRpb24tYXJ0aWZhY3QgYmFja2VuZCBhdmFpbGFiaWxpdHkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGludGVyb3BlcmFiaWxpdHkgLSBJbnRlcm9wZXJhYmlsaXR5IGJyaWRnZSBhdmFpbGFiaWxpdHkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBMYW5ndWFnZU1hcHBpbmdDYXBhYmlsaXRpZXNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmljaFRleHQgLSBBdXRob3JpdGF0aXZlIHJpY2ggdGV4dCBtYXBwaW5ncy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc291cmNlTWFwVjMgLSBTb3VyY2UgTWFwIHYzIHByb2plY3Rpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGJpbmFyeVJhbmdlcyAtIEJ5dGUtY29vcmRpbmF0ZSBiaW5hcnkvcmVzb3VyY2UgbWFwcGluZ3MuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBMYW5ndWFnZUFjY2VwdGFuY2VDYXBhYmlsaXRpZXNcbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgQWNjZXB0YW5jZVN0YWdlW119IHN0YWdlcyAtIEFwcGxpY2FibGUgb3JkZXJlZCBhY2NlcHRhbmNlIHN0YWdlcy5cbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgc3RyaW5nW119IHRvb2xjaGFpbnMgLSBSZXF1aXJlZCBjYW5vbmljYWwgdG9vbGNoYWluIElEcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIExhbmd1YWdlQ2FwYWJpbGl0aWVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBTdGFibGUgcmVnaXN0cnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5PExhbmd1YWdlUm9sZUNhcGFiaWxpdGllcz59IHJvbGVzIC0gSW5kZXBlbmRlbnRseSByZWdpc3RlcmVkIHJvbGVzLlxuICogQHByb3BlcnR5IHtcInNpbmdsZVwiIHwgXCJtdWx0aXBsZVwifSBhcnRpZmFjdE11bHRpcGxpY2l0eSAtIFRhcmdldCBhcnRpZmFjdCBtdWx0aXBsaWNpdHkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJvdW5kVHJpcCAtIFdoZXRoZXIgZnJvbnRlbmQvYmFja2VuZCByb3VuZC10cmlwIGFjY2VwdGFuY2UgaXMgZGVjbGFyZWQuXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5PExhbmd1YWdlTWFwcGluZ0NhcGFiaWxpdGllcz59IG1hcHBpbmcgLSBNYXBwaW5nIGZvcm1zLlxuICogQHByb3BlcnR5IHtSZWFkb25seTxMYW5ndWFnZUFjY2VwdGFuY2VDYXBhYmlsaXRpZXM+fSBhY2NlcHRhbmNlIC0gU3RhZ2VzIGFuZCB0b29sY2hhaW5zLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU291cmNlUG9pbnRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsaW5lIC0gT25lLWJhc2VkIGxpbmUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gY29sdW1uIC0gT25lLWJhc2VkIFVURi0xNiBjb2RlLXVuaXQgY29sdW1uLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldCAtIFplcm8tYmFzZWQgVVRGLTE2IHNvdXJjZSBvZmZzZXQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTb3VyY2VMb2NhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbGVuYW1lIC0gT3JpZ2luYXRpbmcgZmlsZW5hbWUuXG4gKiBAcHJvcGVydHkge1NvdXJjZVBvaW50fSBzdGFydCAtIEluY2x1c2l2ZSBzdGFydC5cbiAqIEBwcm9wZXJ0eSB7U291cmNlUG9pbnR9IGVuZCAtIEV4Y2x1c2l2ZSBlbmQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBSZWdpc3RlcmVkU291cmNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBSZWdpc3RyeS1sb2NhbCBkZXRlcm1pbmlzdGljIHNvdXJjZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlbmFtZSAtIE9yaWdpbmFsIGZpbGVuYW1lLCBwcmVzZXJ2ZWQgdmVyYmF0aW0uXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IGNvbnRlbnQgLSBPcmlnaW5hbCBzb3VyY2UgY29udGVudCwgcHJlc2VydmVkIHZlcmJhdGltIHdoZW4gYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY0xhbmd1YWdlIHwgbnVsbH0gbGFuZ3VhZ2UgLSBQYXJzZXIgbGFuZ3VhZ2Ugd2hlbiBrbm93bi5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNvdXJjZU9yaWdpblxuICogQHByb3BlcnR5IHtcInNvdXJjZVwifSBraW5kIC0gRGlyZWN0IHNvdXJjZSBwcm92ZW5hbmNlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNvdXJjZUlkIC0gUmVnaXN0ZXJlZCBzb3VyY2UgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEV4YWN0IG9yaWdpbmFsIHJhbmdlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUmVsYXRlZE9yaWdpblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNvdXJjZUlkIC0gUmVnaXN0ZXJlZCBzb3VyY2UgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFJlbGF0ZWQgb3JpZ2luYWwgcmFuZ2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25vZGVJZF0gLSBSZWxhdGVkIHNlbWFudGljIG5vZGUgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N5bWJvbElkXSAtIFJlbGF0ZWQgc2VtYW50aWMgc3ltYm9sIGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyb2xlXSAtIFJlbGF0aW9uc2hpcCByb2xlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRGVyaXZlZE9yaWdpblxuICogQHByb3BlcnR5IHtcImRlcml2ZWRcIn0ga2luZCAtIFByb3ZlbmFuY2UgZGVyaXZlZCBmcm9tIG9uZSBvciBtb3JlIG9yaWdpbnMuXG4gKiBAcHJvcGVydHkge1JlbGF0ZWRPcmlnaW5bXX0gb3JpZ2lucyAtIE9yZGVyZWQsIG5vbi1lbXB0eSBvcmlnaW5hbCByYW5nZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTeW50aGV0aWNPcmlnaW5cbiAqIEBwcm9wZXJ0eSB7XCJzeW50aGV0aWNcIn0ga2luZCAtIFNvdXJjZS1mcmVlIGdlbmVyYXRlZCBvciBzZW1hbnRpYyBzY2FmZm9sZGluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWFzb24gLSBTdGFibGUgaHVtYW4tcmVhZGFibGUgcmVhc29uLlxuICogQHByb3BlcnR5IHtSZWxhdGVkT3JpZ2luW119IHJlbGF0ZWRPcmlnaW5zIC0gT3JkZXJlZCByZWxhdGVkIHJhbmdlcywgcG9zc2libHkgZW1wdHkuXG4gKi9cblxuLyoqIEB0eXBlZGVmIHtTb3VyY2VPcmlnaW4gfCBEZXJpdmVkT3JpZ2luIHwgU3ludGhldGljT3JpZ2lufSBTZW1hbnRpY09yaWdpbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEdlbmVyYXRlZEJ5dGVSYW5nZVxuICogQHByb3BlcnR5IHt7c3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXJ9fSBnZW5lcmF0ZWQgLSBIYWxmLW9wZW4gZ2VuZXJhdGVkIGJ5dGUgb2Zmc2V0cy5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNPcmlnaW59IG9yaWdpbiAtIFNlbWFudGljIG9yIGV4cGxpY2l0IHN5bnRoZXRpYyBwcm92ZW5hbmNlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtub2RlSWRdIC0gT3JpZ2luYXRpbmcgc2VtYW50aWMgbm9kZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3ltYm9sSWRdIC0gT3JpZ2luYXRpbmcgc2VtYW50aWMgc3ltYm9sIGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyb2xlXSAtIFNlbWFudGljIG9yIGJpbmFyeS1yZWdpb24gcm9sZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlbWFudGlmb2xkQnl0ZU1hcHBpbmdcbiAqIEBwcm9wZXJ0eSB7XCJTZW1hbnRpZm9sZEJ5dGVNYXBwaW5nXCJ9IHNjaGVtYSAtIFNjaGVtYSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHsxfSB2ZXJzaW9uIC0gU2NoZW1hIHZlcnNpb24uXG4gKiBAcHJvcGVydHkge1wiYnl0ZXNcIn0gY29vcmRpbmF0ZVN5c3RlbSAtIEdlbmVyYXRlZCBvZmZzZXRzIGFyZSBieXRlcywgbmV2ZXIgdGV4dCBjb2x1bW5zLlxuICogQHByb3BlcnR5IHt7cGF0aDogc3RyaW5nLCBieXRlTGVuZ3RoOiBudW1iZXJ9fSBnZW5lcmF0ZWQgLSBHZW5lcmF0ZWQgYXJ0aWZhY3QgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IEdlbmVyYXRlZEJ5dGVSYW5nZVtdfSByYW5nZXMgLSBPcmRlcmVkIG5vbi1vdmVybGFwcGluZyByYW5nZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlXG4gKiBAcHJvcGVydHkge1wiU2VtYW50aWZvbGROb2RlUHJvdmVuYW5jZVwifSBzY2hlbWEgLSBBc3NvY2lhdGlvbiBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHsxfSB2ZXJzaW9uIC0gQXNzb2NpYXRpb24gdmVyc2lvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNPcmlnaW59IG9yaWdpbiAtIFNvdXJjZSBhc3NvY2lhdGlvbiBpbmRlcGVuZGVudCBvZiB0cmF2ZXJzYWwgcG9zaXRpb24uXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFNvdXJjZUxvY2F0aW9uPj59IHJhbmdlcyAtIEV4YWN0IHNlbWFudGljLXRva2VuIHN1YnJhbmdlcyBieSByb2xlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU2VtYW50aWNOb2RlUHJvdmVuYW5jZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gRGV0ZXJtaW5pc3RpYyBtb2R1bGUtbG9jYWwgbm9kZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRoIC0gSlNPTiBQb2ludGVyIGZyb20gdGhlIHNlbWFudGljIG1vZHVsZSByb290LlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVbXCJraW5kXCJdIHwgXCJUeXBlUmVmZXJlbmNlXCJ9IGtpbmQgLSBTZW1hbnRpYyBub2RlIGtpbmQuXG4gKiBAcHJvcGVydHkge1NlbWFudGljT3JpZ2lufSBvcmlnaW4gLSBDbG9zZWQgcHJvdmVuYW5jZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgU291cmNlTG9jYXRpb24+Pn0gcmFuZ2VzIC0gRXhhY3Qgc2VtYW50aWMtdG9rZW4gc3VicmFuZ2VzIGJ5IHJvbGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N5bWJvbElkXSAtIFJlc29sdmVkIGRlY2xhcmVkL3JlZmVyZW5jZWQgc3ltYm9sIGlkZW50aXR5LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU2VtYW50aWNTeW1ib2xSZWZlcmVuY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBub2RlSWQgLSBSZWZlcnJpbmcgc2VtYW50aWMgbm9kZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNTeW1ib2xSb2xlfSByb2xlIC0gUmVmZXJlbmNlIHJvbGUuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEV4YWN0IHJlZmVyZW5jZSByYW5nZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlbWFudGljU3ltYm9sUHJvdmVuYW5jZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gRGV0ZXJtaW5pc3RpYyBtb2R1bGUtbG9jYWwgc3ltYm9sIGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBTZW1hbnRpYyBzeW1ib2wgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNTeW1ib2xLaW5kfSBraW5kIC0gU3ltYm9sIGNhdGVnb3J5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRlY2xhcmF0aW9uTm9kZUlkIC0gRGVjbGFyaW5nIG5vZGUgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEV4YWN0IGRlY2xhcmF0aW9uLW5hbWUgcmFuZ2UuXG4gKiBAcHJvcGVydHkge1NlbWFudGljU3ltYm9sUmVmZXJlbmNlW119IHJlZmVyZW5jZXMgLSBPcmRlcmVkIHJlc29sdmVkIHJlZmVyZW5jZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZW1hbnRpY1Byb3ZlbmFuY2VcbiAqIEBwcm9wZXJ0eSB7XCJTZW1hbnRpZm9sZFByb3ZlbmFuY2VcIn0gc2NoZW1hIC0gU2NoZW1hIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkgezF9IHZlcnNpb24gLSBTY2hlbWEgdmVyc2lvbi5cbiAqIEBwcm9wZXJ0eSB7XCJ1dGYxNlwifSBjb29yZGluYXRlU3lzdGVtIC0gT2Zmc2V0IGFuZCBjb2x1bW4gdW5pdC5cbiAqIEBwcm9wZXJ0eSB7UmVnaXN0ZXJlZFNvdXJjZVtdfSBzb3VyY2VzIC0gVmVyc2lvbmVkIHNvdXJjZSByZWdpc3RyeS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlUHJvdmVuYW5jZVtdfSBub2RlcyAtIERldGVybWluaXN0aWMgbm9kZSBpbmRleC5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNTeW1ib2xQcm92ZW5hbmNlW119IHN5bWJvbHMgLSBEZXRlcm1pbmlzdGljIHN5bWJvbCBpbmRleC5cbiAqL1xuXG4vKiogQHR5cGVkZWYge1wiZXhhY3RcIiB8IFwiYW5jaG9yXCIgfCBcInN5bnRoZXRpY1wifSBNYXBwaW5nS2luZCAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlbWFudGlmb2xkTWFwcGluZ1NwYW5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGdlbmVyYXRlZCAtIEdlbmVyYXRlZCBoYWxmLW9wZW4gcmFuZ2UuXG4gKiBAcHJvcGVydHkge01hcHBpbmdLaW5kfSBtYXBwaW5nS2luZCAtIE1hcHBpbmcgcHJlY2lzaW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY09yaWdpbn0gb3JpZ2luIC0gQ2xvc2VkIG9yaWdpbmFsIHByb3ZlbmFuY2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25vZGVJZF0gLSBSZWxhdGVkIGNhbm9uaWNhbCBzZW1hbnRpYyBub2RlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzeW1ib2xJZF0gLSBSZWxhdGVkIGNhbm9uaWNhbCBzZW1hbnRpYyBzeW1ib2wuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JvbGVdIC0gU2VtYW50aWMgdG9rZW4gcm9sZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV0gLSBVc2VmdWwgc3ltYm9sIG5hbWUgZm9yIFNvdXJjZSBNYXAgdjMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBHZW5lcmF0ZWRTb3VyY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlbmFtZSAtIE91dHB1dCBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBPdXRwdXQgbGFuZ3VhZ2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29udGVudCAtIEV4YWN0IGdlbmVyYXRlZCBMRiBzb3VyY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZW1hbnRpZm9sZE1hcHBpbmdcbiAqIEBwcm9wZXJ0eSB7XCJTZW1hbnRpZm9sZE1hcHBpbmdcIn0gc2NoZW1hIC0gU2NoZW1hIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkgezF9IHZlcnNpb24gLSBTY2hlbWEgdmVyc2lvbi5cbiAqIEBwcm9wZXJ0eSB7XCJ1dGYxNlwifSBjb29yZGluYXRlU3lzdGVtIC0gT2Zmc2V0IGFuZCBjb2x1bW4gdW5pdC5cbiAqIEBwcm9wZXJ0eSB7R2VuZXJhdGVkU291cmNlfSBnZW5lcmF0ZWQgLSBHZW5lcmF0ZWQgcHJvZ3JhbSBpZGVudGl0eSBhbmQgY29udGVudC5cbiAqIEBwcm9wZXJ0eSB7UmVnaXN0ZXJlZFNvdXJjZVtdfSBzb3VyY2VzIC0gT3JpZ2luYWwgc291cmNlIHJlZ2lzdHJ5LlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVQcm92ZW5hbmNlW119IG5vZGVzIC0gQ2Fub25pY2FsIHNlbWFudGljIG5vZGUgaW5kZXguXG4gKiBAcHJvcGVydHkge1NlbWFudGljU3ltYm9sUHJvdmVuYW5jZVtdfSBzeW1ib2xzIC0gQ2Fub25pY2FsIHNlbWFudGljIHN5bWJvbCBpbmRleC5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWZvbGRNYXBwaW5nU3BhbltdfSBzcGFucyAtIE9yZGVyZWQgZ2VuZXJhdGVkIHJhbmdlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEdlbmVyYXRlZEFydGlmYWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29kZSAtIEdlbmVyYXRlZCBvdXRwdXQgcHJvZ3JhbSwgaW5jbHVkaW5nIGFueSByZXF1ZXN0ZWQgZGlyZWN0aXZlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbGVuYW1lIC0gR2VuZXJhdGVkIG91dHB1dCBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBPdXRwdXQgbGFuZ3VhZ2UuXG4gKiBAcHJvcGVydHkge1NlbWFudGlmb2xkTWFwcGluZ30gbWFwcGluZyAtIEF1dGhvcml0YXRpdmUgcmljaCBtYXBwaW5nLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJAanJpZGdld2VsbC9nZW4tbWFwcGluZ1wiKS5FbmNvZGVkU291cmNlTWFwfSBzb3VyY2VNYXAgLSBTb3VyY2UgTWFwIHYzIHByb2plY3Rpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc291cmNlTWFwRmlsZW5hbWUgLSBEZWZhdWx0IGV4dGVybmFsIFNvdXJjZSBNYXAgZmlsZW5hbWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBUZXh0QXJ0aWZhY3RQcm92ZW5hbmNlXG4gKiBAcHJvcGVydHkge1widGV4dFwifSBraW5kIC0gUmljaCB0ZXh0IHByb3ZlbmFuY2UgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWZvbGRNYXBwaW5nfSBtYXBwaW5nIC0gQXV0aG9yaXRhdGl2ZSByYW5nZSBtYXBwaW5nLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJAanJpZGdld2VsbC9nZW4tbWFwcGluZ1wiKS5FbmNvZGVkU291cmNlTWFwfSBzb3VyY2VNYXAgLSBJbnRlcm9wZXJhYmxlIHByb2plY3Rpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NvdXJjZU1hcEZpbGVuYW1lXSAtIExvZ2ljYWwgU291cmNlIE1hcCBzaWRlY2FyIHBhdGguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBCeXRlQXJ0aWZhY3RQcm92ZW5hbmNlXG4gKiBAcHJvcGVydHkge1wiYnl0ZXNcIn0ga2luZCAtIEJ5dGUgcHJvdmVuYW5jZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtTZW1hbnRpZm9sZEJ5dGVNYXBwaW5nfSBtYXBwaW5nIC0gQXV0aG9yaXRhdGl2ZSBieXRlIHJhbmdlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEFydGlmYWN0U3ludGhldGljUHJvdmVuYW5jZVxuICogQHByb3BlcnR5IHtcInN5bnRoZXRpY1wifSBraW5kIC0gU3ludGhldGljIGFydGlmYWN0IGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVhc29uIC0gRXhwbGljaXQgdGFyZ2V0LXNjYWZmb2xkaW5nIHJlYXNvbi5cbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgUmVsYXRlZE9yaWdpbltdfSByZWxhdGVkT3JpZ2lucyAtIFJlbGF0ZWQgc2VtYW50aWMgc291cmNlIHJhbmdlcy5cbiAqL1xuXG4vKiogQHR5cGVkZWYge1RleHRBcnRpZmFjdFByb3ZlbmFuY2UgfCBCeXRlQXJ0aWZhY3RQcm92ZW5hbmNlIHwgQXJ0aWZhY3RTeW50aGV0aWNQcm92ZW5hbmNlfSBBcnRpZmFjdFByb3ZlbmFuY2UgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBHZW5lcmF0ZWRTZXRBcnRpZmFjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBVbmlxdWUgc2FmZSByZWxhdGl2ZSBQT1NJWCBwYXRoLlxuICogQHByb3BlcnR5IHtcInRleHRcIiB8IFwiYmluYXJ5XCJ9IGNvbnRlbnRLaW5kIC0gQ29udGVudCByZXByZXNlbnRhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgVWludDhBcnJheX0gY29udGVudCAtIFRleHQgb3IgYSBkZXRhY2hlZCBjb3B5IG9mIHRoZSBleGFjdCBnZW5lcmF0ZWQgYnl0ZXMgb24gZXZlcnkgYmluYXJ5IHJlYWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVkaWFUeXBlIC0gQXJ0aWZhY3QgbWVkaWEgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7R2VuZXJhdGVkQXJ0aWZhY3RSb2xlfSByb2xlIC0gQXJ0aWZhY3Qgcm9sZTsgZXhhY3RseSBvbmUgc2V0IGFydGlmYWN0IGlzIGVudHJ5LlxuICogQHByb3BlcnR5IHtcImdlbmVyYXRlZFwifSBvd25lcnNoaXAgLSBUYXNrLTAxNSBvd25lcnNoaXAgY29udHJhY3QuXG4gKiBAcHJvcGVydHkge0FydGlmYWN0UHJvdmVuYW5jZX0gcHJvdmVuYW5jZSAtIFRleHQsIGJ5dGUtcmFuZ2UsIG9yIHN5bnRoZXRpYyBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgR2VuZXJhdGVkQXJ0aWZhY3RTZXRcbiAqIEBwcm9wZXJ0eSB7XCJHZW5lcmF0ZWRBcnRpZmFjdFNldFwifSBzY2hlbWEgLSBTY2hlbWEgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7MX0gdmVyc2lvbiAtIFNjaGVtYSB2ZXJzaW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRhcmdldCAtIFN0YWJsZSBsYW5ndWFnZSBvciB0YXJnZXQgSUQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZW50cnkgLSBQYXRoIG9mIHRoZSBzb2xlIGRlY2xhcmVkIGVudHJ5IGFydGlmYWN0LlxuICogQHByb3BlcnR5IHtyZWFkb25seSBHZW5lcmF0ZWRTZXRBcnRpZmFjdFtdfSBhcnRpZmFjdHMgLSBEZXRlcm1pbmlzdGljIGFydGlmYWN0IG9yZGVyLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRGlzY292ZXJlZFRvb2xjaGFpblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gVG9vbGNoYWluIElELlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbW1hbmQgLSBEb2N1bWVudGVkIGNhbm9uaWNhbCBjb21tYW5kLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4ZWN1dGFibGUgLSBFeGFjdCBhYnNvbHV0ZSBleGVjdXRhYmxlIHBhdGguXG4gKiBAcHJvcGVydHkge1wib3ZlcnJpZGVcIiB8IFwiY2Fub25pY2FsXCJ9IHNvdXJjZSAtIFJlc29sdXRpb24gcm91dGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbiAtIEZpcnN0IGNhcHR1cmVkIHZlcnNpb24gbGluZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJzaW9uT3V0cHV0IC0gQ29tcGxldGUgY2FwdHVyZWQgdmVyc2lvbiBvdXRwdXQuXG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IHN0cmluZ1tdfSB2ZXJzaW9uQXJndW1lbnRzIC0gRXhhY3QgdmVyc2lvbiBhcmd1bWVudCBhcnJheS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEFjY2VwdGFuY2VTdGFnZVJlc3VsdFxuICogQHByb3BlcnR5IHtBY2NlcHRhbmNlU3RhZ2V9IHN0YWdlIC0gQ29tcGxldGVkIHN0YWdlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4ZWN1dGFibGUgLSBFeGFjdCBleGVjdXRhYmxlIHVzZWQuXG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IHN0cmluZ1tdfSBhcmd1bWVudHMgLSBFeGFjdCBhcmd1bWVudCBhcnJheSB1c2VkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb24gLSBEaXNjb3ZlcmVkIHRvb2wgdmVyc2lvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGRvdXQgLSBDYXB0dXJlZCBzdGFuZGFyZCBvdXRwdXQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RkZXJyIC0gQ2FwdHVyZWQgc3RhbmRhcmQgZXJyb3IuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBBY2NlcHRhbmNlUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGFyZ2V0IC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRpcmVjdG9yeSAtIFJlbW92ZWQgaXNvbGF0ZWQgcHJvamVjdCBkaXJlY3RvcnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IEFjY2VwdGFuY2VTdGFnZVJlc3VsdFtdfSBzdGFnZXMgLSBPcmRlcmVkIGNvbXBsZXRlZCBzdGFnZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBUeXBlUmVmZXJlbmNlXG4gKiBAcHJvcGVydHkge1wiVHlwZVJlZmVyZW5jZVwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY1R5cGVOYW1lfSBuYW1lIC0gTm9ybWFsaXplZCB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlIHRoYXQgc3Vydml2ZXMgc2VtYW50aWMgdHJhbnNmb3Jtcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBhcmFtZXRlclxuICogQHByb3BlcnR5IHtcIlBhcmFtZXRlclwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBQYXJhbWV0ZXIgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7VHlwZVJlZmVyZW5jZX0gdHlwZSAtIFBhcmFtZXRlciB0eXBlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgSWRlbnRpZmllckV4cHJlc3Npb25cbiAqIEBwcm9wZXJ0eSB7XCJJZGVudGlmaWVyRXhwcmVzc2lvblwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBSZWZlcmVuY2VkIG5hbWUuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBJbnRlZ2VyTGl0ZXJhbFxuICogQHByb3BlcnR5IHtcIkludGVnZXJMaXRlcmFsXCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmFsdWUgLSBKYXZhU2NyaXB0LXNhZmUgaW50ZWdlciB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEJvb2xlYW5MaXRlcmFsXG4gKiBAcHJvcGVydHkge1wiQm9vbGVhbkxpdGVyYWxcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdmFsdWUgLSBCb29sZWFuIHZhbHVlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU3RyaW5nTGl0ZXJhbFxuICogQHByb3BlcnR5IHtcIlN0cmluZ0xpdGVyYWxcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZSAtIFVuaWNvZGUgc3RyaW5nIHZhbHVlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgVW5hcnlFeHByZXNzaW9uXG4gKiBAcHJvcGVydHkge1wiVW5hcnlFeHByZXNzaW9uXCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge1NlbWFudGljVW5hcnlPcGVyYXRpb259IG9wZXJhdGlvbiAtIENsb3NlZCBzZW1hbnRpYyBvcGVyYXRpb24uXG4gKiBAcHJvcGVydHkge0V4cHJlc3Npb259IG9wZXJhbmQgLSBPcGVyYW5kIGV2YWx1YXRlZCBleGFjdGx5IG9uY2UuXG4gKiBAcHJvcGVydHkge1NlbWFudGljVHlwZU5hbWV9IHR5cGUgLSBFeHBsaWNpdCBvcGVyYXRpb24gcmVzdWx0IHR5cGUuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBCaW5hcnlFeHByZXNzaW9uXG4gKiBAcHJvcGVydHkge1wiQmluYXJ5RXhwcmVzc2lvblwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY0JpbmFyeU9wZXJhdGlvbn0gb3BlcmF0aW9uIC0gQ2xvc2VkIHNlbWFudGljIG9wZXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gbGVmdCAtIExlZnQgb3BlcmFuZC5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gcmlnaHQgLSBSaWdodCBvcGVyYW5kLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY1R5cGVOYW1lfSB0eXBlIC0gRXhwbGljaXQgb3BlcmF0aW9uIHJlc3VsdCB0eXBlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgQ2FsbEV4cHJlc3Npb25cbiAqIEBwcm9wZXJ0eSB7XCJDYWxsRXhwcmVzc2lvblwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhbGxlZSAtIEZ1bmN0aW9uIG5hbWUuXG4gKiBAcHJvcGVydHkge0V4cHJlc3Npb25bXX0gYXJndW1lbnRzIC0gUG9zaXRpb25hbCBhcmd1bWVudHMuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqIEB0eXBlZGVmIHtJZGVudGlmaWVyRXhwcmVzc2lvbiB8IEludGVnZXJMaXRlcmFsIHwgQm9vbGVhbkxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwgVW5hcnlFeHByZXNzaW9uIHwgQmluYXJ5RXhwcmVzc2lvbiB8IENhbGxFeHByZXNzaW9ufSBFeHByZXNzaW9uICovXG5cbi8qKlxuICogQHR5cGVkZWYgTG9jYWxEZWNsYXJhdGlvblxuICogQHByb3BlcnR5IHtcIkxvY2FsRGVjbGFyYXRpb25cIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gRGVjbGFyZWQgbG9jYWwgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7VHlwZVJlZmVyZW5jZX0gdHlwZSAtIEV4cGxpY2l0IGxvY2FsIHR5cGUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG11dGFibGUgLSBXaGV0aGVyIGxhdGVyIGFzc2lnbm1lbnQgaXMgYWxsb3dlZC5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gaW5pdGlhbGl6ZXIgLSBSZXF1aXJlZCBpbml0aWFsaXplciBleHByZXNzaW9uLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBEZWNsYXJhdGlvbiBzb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgQXNzaWdubWVudFN0YXRlbWVudFxuICogQHByb3BlcnR5IHtcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7SWRlbnRpZmllckV4cHJlc3Npb259IHRhcmdldCAtIFNpbXBsZSBsb2NhbCBhc3NpZ25tZW50IHRhcmdldC5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEFzc2lnbmVkIGV4cHJlc3Npb24uXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEFzc2lnbm1lbnQgc291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFJldHVyblN0YXRlbWVudFxuICogQHByb3BlcnR5IHtcIlJldHVyblN0YXRlbWVudFwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gUmV0dXJuZWQgZXhwcmVzc2lvbi5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIElmU3RhdGVtZW50XG4gKiBAcHJvcGVydHkge1wiSWZTdGF0ZW1lbnRcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gY29uZGl0aW9uIC0gQnJhbmNoIGNvbmRpdGlvbi5cbiAqIEBwcm9wZXJ0eSB7QmxvY2t9IGNvbnNlcXVlbnQgLSBUcnVlIGJyYW5jaC5cbiAqIEBwcm9wZXJ0eSB7QmxvY2t9IFthbHRlcm5hdGVdIC0gRmFsc2UgYnJhbmNoLCBhYnNlbnQgd2hlbiBleGVjdXRpb24gZmFsbHMgdGhyb3VnaC5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKiogQHR5cGVkZWYge0xvY2FsRGVjbGFyYXRpb24gfCBBc3NpZ25tZW50U3RhdGVtZW50fSBMb2NhbFN0YXRlbWVudCAqL1xuLyoqIEB0eXBlZGVmIHtMb2NhbFN0YXRlbWVudCB8IElmU3RhdGVtZW50IHwgUmV0dXJuU3RhdGVtZW50IHwgUHJpbnRTdGF0ZW1lbnR9IFN0YXRlbWVudCAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEJsb2NrXG4gKiBAcHJvcGVydHkge1wiQmxvY2tcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7U3RhdGVtZW50W119IHN0YXRlbWVudHMgLSBPcmRlcmVkIHN0YXRlbWVudHMgaW4gb25lIGxleGljYWwgc2NvcGUuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBGdW5jdGlvbkRlY2xhcmF0aW9uXG4gKiBAcHJvcGVydHkge1wiRnVuY3Rpb25EZWNsYXJhdGlvblwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBGdW5jdGlvbiBuYW1lLlxuICogQHByb3BlcnR5IHtQYXJhbWV0ZXJbXX0gcGFyYW1ldGVycyAtIEZ1bmN0aW9uIHBhcmFtZXRlcnMuXG4gKiBAcHJvcGVydHkge1R5cGVSZWZlcmVuY2V9IHJldHVyblR5cGUgLSBSZXR1cm4gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7QmxvY2t9IGJvZHkgLSBGdW5jdGlvbiBib2R5LlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUHJpbnRTdGF0ZW1lbnRcbiAqIEBwcm9wZXJ0eSB7XCJQcmludFN0YXRlbWVudFwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gUHJpbnRlZCBleHByZXNzaW9uLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRW50cnlQb2ludFxuICogQHByb3BlcnR5IHtcIkVudHJ5UG9pbnRcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7QmxvY2t9IGJvZHkgLSBFbnRyeS1wb2ludCBib2R5LlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU2VtYW50aWNNb2R1bGVcbiAqIEBwcm9wZXJ0eSB7XCJNb2R1bGVcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb25EZWNsYXJhdGlvbltdfSBmdW5jdGlvbnMgLSBUb3AtbGV2ZWwgZnVuY3Rpb25zLlxuICogQHByb3BlcnR5IHtFbnRyeVBvaW50fSBlbnRyeVBvaW50IC0gRXhlY3V0YWJsZSBlbnRyeSBwb2ludC5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNQcm92ZW5hbmNlfSBbcHJvdmVuYW5jZV0gLSBQYXJzZXItYXV0aG9yZWQgc291cmNlIGFuZCBpZGVudGl0eSBpbmRleDsgb3B0aW9uYWwgZm9yIGxlZ2FjeSBjYWxsZXItYXV0aG9yZWQgbW9kdWxlcy5cbiAqL1xuXG4vKiogQHR5cGVkZWYge1NlbWFudGljTW9kdWxlIHwgRnVuY3Rpb25EZWNsYXJhdGlvbiB8IFBhcmFtZXRlciB8IEJsb2NrIHwgU3RhdGVtZW50IHwgRW50cnlQb2ludCB8IEV4cHJlc3Npb24gfCBUeXBlUmVmZXJlbmNlfSBTZW1hbnRpY05vZGUgKi9cbi8qKiBAdHlwZWRlZiB7U2VtYW50aWNOb2RlfSBTZW1hbnRpY05vZGVXaXRob3V0TG9jYXRpb25zICovXG5cbmV4cG9ydCB7fVxuIl19
|
|
387
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VtYW50aWMvdHlwZXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLG1JQUFtSTtBQUNuSSxtRUFBbUU7QUFDbkUsdUVBQXVFO0FBQ3ZFLDZWQUE2VjtBQUM3Vix1RUFBdUU7QUFDdkUsOEVBQThFO0FBQzlFLGdJQUFnSTtBQUNoSSx1SEFBdUg7QUFFdkg7Ozs7Ozs7R0FPRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7O0dBSUc7QUFFSDs7Ozs7R0FLRztBQUVILCtFQUErRTtBQUUvRTs7Ozs7OztHQU9HO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7Ozs7OztHQVFHO0FBRUgsOERBQThEO0FBRTlEOzs7Ozs7Ozs7R0FTRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7R0FJRztBQUVIOzs7OztHQUtHO0FBRUgsa0hBQWtIO0FBRWxIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7OztHQU9HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7OztHQU9HO0FBRUgseUpBQXlKO0FBRXpKOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7R0FRRztBQUVILHVFQUF1RTtBQUN2RSwyRkFBMkY7QUFFM0Y7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSCw2SUFBNkk7QUFDN0ksMkRBQTJEO0FBRTNELE9BQU8sRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKiBAdHlwZWRlZiB7XCJwaHBcIiB8IFwicnVieVwiIHwgXCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIiB8IFwiamF2YVwiIHwgXCJweXRob25cIiB8IFwiY3NoYXJwXCIgfCBcImdvXCIgfCBcImNcIiB8IFwiY3BwXCJ9IFNlbWFudGljTGFuZ3VhZ2UgKi9cbi8qKiBAdHlwZWRlZiB7XCJpbnRlZ2VyXCIgfCBcImJvb2xlYW5cIiB8IFwic3RyaW5nXCJ9IFNlbWFudGljVHlwZU5hbWUgKi9cbi8qKiBAdHlwZWRlZiB7XCJJbnRlZ2VyTmVnYXRlXCIgfCBcIkJvb2xlYW5Ob3RcIn0gU2VtYW50aWNVbmFyeU9wZXJhdGlvbiAqL1xuLyoqIEB0eXBlZGVmIHtcIkludGVnZXJBZGRcIiB8IFwiSW50ZWdlclN1YnRyYWN0XCIgfCBcIkludGVnZXJNdWx0aXBseVwiIHwgXCJCb29sZWFuQW5kXCIgfCBcIkJvb2xlYW5PclwiIHwgXCJJbnRlZ2VyRXF1YWxcIiB8IFwiSW50ZWdlck5vdEVxdWFsXCIgfCBcIkJvb2xlYW5FcXVhbFwiIHwgXCJCb29sZWFuTm90RXF1YWxcIiB8IFwiU3RyaW5nRXF1YWxcIiB8IFwiU3RyaW5nTm90RXF1YWxcIiB8IFwiSW50ZWdlckxlc3NUaGFuXCIgfCBcIkludGVnZXJMZXNzVGhhbk9yRXF1YWxcIiB8IFwiSW50ZWdlckdyZWF0ZXJUaGFuXCIgfCBcIkludGVnZXJHcmVhdGVyVGhhbk9yRXF1YWxcIiB8IFwiU3RyaW5nQ29uY2F0XCJ9IFNlbWFudGljQmluYXJ5T3BlcmF0aW9uICovXG4vKiogQHR5cGVkZWYge1wiZnVuY3Rpb25cIiB8IFwicGFyYW1ldGVyXCIgfCBcImxvY2FsXCJ9IFNlbWFudGljU3ltYm9sS2luZCAqL1xuLyoqIEB0eXBlZGVmIHtcImRlY2xhcmF0aW9uXCIgfCBcInJlYWRcIiB8IFwid3JpdGVcIiB8IFwiY2FsbFwifSBTZW1hbnRpY1N5bWJvbFJvbGUgKi9cbi8qKiBAdHlwZWRlZiB7XCJwYXJzZVwiIHwgXCJnZW5lcmF0ZVwiIHwgXCJyZXN0b3JlXCIgfCBcImNvbXBpbGVcIiB8IFwibGlua1wiIHwgXCJ2YWxpZGF0ZVwiIHwgXCJpbnN0YW50aWF0ZVwiIHwgXCJleGVjdXRlXCJ9IEFjY2VwdGFuY2VTdGFnZSAqL1xuLyoqIEB0eXBlZGVmIHtcImVudHJ5XCIgfCBcInNvdXJjZVwiIHwgXCJtYW5pZmVzdFwiIHwgXCJzdXBwb3J0XCIgfCBcIm1hcHBpbmdcIiB8IFwicmVzb3VyY2VcIiB8IFwibG9hZGVyXCJ9IEdlbmVyYXRlZEFydGlmYWN0Um9sZSAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIExhbmd1YWdlUm9sZUNhcGFiaWxpdGllc1xuICogQHByb3BlcnR5IHtib29sZWFufSBmcm9udGVuZCAtIFBhcnNlciBhZGFwdGVyIGF2YWlsYWJpbGl0eS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdGV4dEJhY2tlbmQgLSBTaW5nbGUtIG9yIG11bHRpLWZpbGUgdGV4dCBiYWNrZW5kIGF2YWlsYWJpbGl0eS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYmluYXJ5QmFja2VuZCAtIEJpbmFyeSBiYWNrZW5kIGF2YWlsYWJpbGl0eS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYXBwbGljYXRpb25CYWNrZW5kIC0gQXBwbGljYXRpb24tYXJ0aWZhY3QgYmFja2VuZCBhdmFpbGFiaWxpdHkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGludGVyb3BlcmFiaWxpdHkgLSBJbnRlcm9wZXJhYmlsaXR5IGJyaWRnZSBhdmFpbGFiaWxpdHkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBMYW5ndWFnZU1hcHBpbmdDYXBhYmlsaXRpZXNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmljaFRleHQgLSBBdXRob3JpdGF0aXZlIHJpY2ggdGV4dCBtYXBwaW5ncy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc291cmNlTWFwVjMgLSBTb3VyY2UgTWFwIHYzIHByb2plY3Rpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGJpbmFyeVJhbmdlcyAtIEJ5dGUtY29vcmRpbmF0ZSBiaW5hcnkvcmVzb3VyY2UgbWFwcGluZ3MuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBMYW5ndWFnZUFjY2VwdGFuY2VDYXBhYmlsaXRpZXNcbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgQWNjZXB0YW5jZVN0YWdlW119IHN0YWdlcyAtIEFwcGxpY2FibGUgb3JkZXJlZCBhY2NlcHRhbmNlIHN0YWdlcy5cbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgc3RyaW5nW119IHRvb2xjaGFpbnMgLSBSZXF1aXJlZCBjYW5vbmljYWwgdG9vbGNoYWluIElEcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIExhbmd1YWdlQ2FwYWJpbGl0aWVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBTdGFibGUgcmVnaXN0cnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5PExhbmd1YWdlUm9sZUNhcGFiaWxpdGllcz59IHJvbGVzIC0gSW5kZXBlbmRlbnRseSByZWdpc3RlcmVkIHJvbGVzLlxuICogQHByb3BlcnR5IHtcInNpbmdsZVwiIHwgXCJtdWx0aXBsZVwifSBhcnRpZmFjdE11bHRpcGxpY2l0eSAtIFRhcmdldCBhcnRpZmFjdCBtdWx0aXBsaWNpdHkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJvdW5kVHJpcCAtIFdoZXRoZXIgZnJvbnRlbmQvYmFja2VuZCByb3VuZC10cmlwIGFjY2VwdGFuY2UgaXMgZGVjbGFyZWQuXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5PExhbmd1YWdlTWFwcGluZ0NhcGFiaWxpdGllcz59IG1hcHBpbmcgLSBNYXBwaW5nIGZvcm1zLlxuICogQHByb3BlcnR5IHtSZWFkb25seTxMYW5ndWFnZUFjY2VwdGFuY2VDYXBhYmlsaXRpZXM+fSBhY2NlcHRhbmNlIC0gU3RhZ2VzIGFuZCB0b29sY2hhaW5zLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU291cmNlUG9pbnRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsaW5lIC0gT25lLWJhc2VkIGxpbmUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gY29sdW1uIC0gT25lLWJhc2VkIFVURi0xNiBjb2RlLXVuaXQgY29sdW1uLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldCAtIFplcm8tYmFzZWQgVVRGLTE2IHNvdXJjZSBvZmZzZXQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTb3VyY2VMb2NhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbGVuYW1lIC0gT3JpZ2luYXRpbmcgZmlsZW5hbWUuXG4gKiBAcHJvcGVydHkge1NvdXJjZVBvaW50fSBzdGFydCAtIEluY2x1c2l2ZSBzdGFydC5cbiAqIEBwcm9wZXJ0eSB7U291cmNlUG9pbnR9IGVuZCAtIEV4Y2x1c2l2ZSBlbmQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBSZWdpc3RlcmVkU291cmNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBSZWdpc3RyeS1sb2NhbCBkZXRlcm1pbmlzdGljIHNvdXJjZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlbmFtZSAtIE9yaWdpbmFsIGZpbGVuYW1lLCBwcmVzZXJ2ZWQgdmVyYmF0aW0uXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IGNvbnRlbnQgLSBPcmlnaW5hbCBzb3VyY2UgY29udGVudCwgcHJlc2VydmVkIHZlcmJhdGltIHdoZW4gYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY0xhbmd1YWdlIHwgbnVsbH0gbGFuZ3VhZ2UgLSBQYXJzZXIgbGFuZ3VhZ2Ugd2hlbiBrbm93bi5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNvdXJjZU9yaWdpblxuICogQHByb3BlcnR5IHtcInNvdXJjZVwifSBraW5kIC0gRGlyZWN0IHNvdXJjZSBwcm92ZW5hbmNlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNvdXJjZUlkIC0gUmVnaXN0ZXJlZCBzb3VyY2UgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEV4YWN0IG9yaWdpbmFsIHJhbmdlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUmVsYXRlZE9yaWdpblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNvdXJjZUlkIC0gUmVnaXN0ZXJlZCBzb3VyY2UgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFJlbGF0ZWQgb3JpZ2luYWwgcmFuZ2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25vZGVJZF0gLSBSZWxhdGVkIHNlbWFudGljIG5vZGUgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N5bWJvbElkXSAtIFJlbGF0ZWQgc2VtYW50aWMgc3ltYm9sIGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyb2xlXSAtIFJlbGF0aW9uc2hpcCByb2xlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRGVyaXZlZE9yaWdpblxuICogQHByb3BlcnR5IHtcImRlcml2ZWRcIn0ga2luZCAtIFByb3ZlbmFuY2UgZGVyaXZlZCBmcm9tIG9uZSBvciBtb3JlIG9yaWdpbnMuXG4gKiBAcHJvcGVydHkge1JlbGF0ZWRPcmlnaW5bXX0gb3JpZ2lucyAtIE9yZGVyZWQsIG5vbi1lbXB0eSBvcmlnaW5hbCByYW5nZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTeW50aGV0aWNPcmlnaW5cbiAqIEBwcm9wZXJ0eSB7XCJzeW50aGV0aWNcIn0ga2luZCAtIFNvdXJjZS1mcmVlIGdlbmVyYXRlZCBvciBzZW1hbnRpYyBzY2FmZm9sZGluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWFzb24gLSBTdGFibGUgaHVtYW4tcmVhZGFibGUgcmVhc29uLlxuICogQHByb3BlcnR5IHtSZWxhdGVkT3JpZ2luW119IHJlbGF0ZWRPcmlnaW5zIC0gT3JkZXJlZCByZWxhdGVkIHJhbmdlcywgcG9zc2libHkgZW1wdHkuXG4gKi9cblxuLyoqIEB0eXBlZGVmIHtTb3VyY2VPcmlnaW4gfCBEZXJpdmVkT3JpZ2luIHwgU3ludGhldGljT3JpZ2lufSBTZW1hbnRpY09yaWdpbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEdlbmVyYXRlZEJ5dGVSYW5nZVxuICogQHByb3BlcnR5IHt7c3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXJ9fSBnZW5lcmF0ZWQgLSBIYWxmLW9wZW4gZ2VuZXJhdGVkIGJ5dGUgb2Zmc2V0cy5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNPcmlnaW59IG9yaWdpbiAtIFNlbWFudGljIG9yIGV4cGxpY2l0IHN5bnRoZXRpYyBwcm92ZW5hbmNlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtub2RlSWRdIC0gT3JpZ2luYXRpbmcgc2VtYW50aWMgbm9kZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3ltYm9sSWRdIC0gT3JpZ2luYXRpbmcgc2VtYW50aWMgc3ltYm9sIGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyb2xlXSAtIFNlbWFudGljIG9yIGJpbmFyeS1yZWdpb24gcm9sZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlbWFudGlmb2xkQnl0ZU1hcHBpbmdcbiAqIEBwcm9wZXJ0eSB7XCJTZW1hbnRpZm9sZEJ5dGVNYXBwaW5nXCJ9IHNjaGVtYSAtIFNjaGVtYSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHsxfSB2ZXJzaW9uIC0gU2NoZW1hIHZlcnNpb24uXG4gKiBAcHJvcGVydHkge1wiYnl0ZXNcIn0gY29vcmRpbmF0ZVN5c3RlbSAtIEdlbmVyYXRlZCBvZmZzZXRzIGFyZSBieXRlcywgbmV2ZXIgdGV4dCBjb2x1bW5zLlxuICogQHByb3BlcnR5IHt7cGF0aDogc3RyaW5nLCBieXRlTGVuZ3RoOiBudW1iZXJ9fSBnZW5lcmF0ZWQgLSBHZW5lcmF0ZWQgYXJ0aWZhY3QgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IEdlbmVyYXRlZEJ5dGVSYW5nZVtdfSByYW5nZXMgLSBPcmRlcmVkIG5vbi1vdmVybGFwcGluZyByYW5nZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlXG4gKiBAcHJvcGVydHkge1wiU2VtYW50aWZvbGROb2RlUHJvdmVuYW5jZVwifSBzY2hlbWEgLSBBc3NvY2lhdGlvbiBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHsxfSB2ZXJzaW9uIC0gQXNzb2NpYXRpb24gdmVyc2lvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNPcmlnaW59IG9yaWdpbiAtIFNvdXJjZSBhc3NvY2lhdGlvbiBpbmRlcGVuZGVudCBvZiB0cmF2ZXJzYWwgcG9zaXRpb24uXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFNvdXJjZUxvY2F0aW9uPj59IHJhbmdlcyAtIEV4YWN0IHNlbWFudGljLXRva2VuIHN1YnJhbmdlcyBieSByb2xlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU2VtYW50aWNOb2RlUHJvdmVuYW5jZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gRGV0ZXJtaW5pc3RpYyBtb2R1bGUtbG9jYWwgbm9kZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRoIC0gSlNPTiBQb2ludGVyIGZyb20gdGhlIHNlbWFudGljIG1vZHVsZSByb290LlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVbXCJraW5kXCJdIHwgXCJUeXBlUmVmZXJlbmNlXCJ9IGtpbmQgLSBTZW1hbnRpYyBub2RlIGtpbmQuXG4gKiBAcHJvcGVydHkge1NlbWFudGljT3JpZ2lufSBvcmlnaW4gLSBDbG9zZWQgcHJvdmVuYW5jZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgU291cmNlTG9jYXRpb24+Pn0gcmFuZ2VzIC0gRXhhY3Qgc2VtYW50aWMtdG9rZW4gc3VicmFuZ2VzIGJ5IHJvbGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N5bWJvbElkXSAtIFJlc29sdmVkIGRlY2xhcmVkL3JlZmVyZW5jZWQgc3ltYm9sIGlkZW50aXR5LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU2VtYW50aWNTeW1ib2xSZWZlcmVuY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBub2RlSWQgLSBSZWZlcnJpbmcgc2VtYW50aWMgbm9kZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNTeW1ib2xSb2xlfSByb2xlIC0gUmVmZXJlbmNlIHJvbGUuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEV4YWN0IHJlZmVyZW5jZSByYW5nZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlbWFudGljU3ltYm9sUHJvdmVuYW5jZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gRGV0ZXJtaW5pc3RpYyBtb2R1bGUtbG9jYWwgc3ltYm9sIGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBTZW1hbnRpYyBzeW1ib2wgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNTeW1ib2xLaW5kfSBraW5kIC0gU3ltYm9sIGNhdGVnb3J5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRlY2xhcmF0aW9uTm9kZUlkIC0gRGVjbGFyaW5nIG5vZGUgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEV4YWN0IGRlY2xhcmF0aW9uLW5hbWUgcmFuZ2UuXG4gKiBAcHJvcGVydHkge1NlbWFudGljU3ltYm9sUmVmZXJlbmNlW119IHJlZmVyZW5jZXMgLSBPcmRlcmVkIHJlc29sdmVkIHJlZmVyZW5jZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZW1hbnRpY1Byb3ZlbmFuY2VcbiAqIEBwcm9wZXJ0eSB7XCJTZW1hbnRpZm9sZFByb3ZlbmFuY2VcIn0gc2NoZW1hIC0gU2NoZW1hIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkgezF9IHZlcnNpb24gLSBTY2hlbWEgdmVyc2lvbi5cbiAqIEBwcm9wZXJ0eSB7XCJ1dGYxNlwifSBjb29yZGluYXRlU3lzdGVtIC0gT2Zmc2V0IGFuZCBjb2x1bW4gdW5pdC5cbiAqIEBwcm9wZXJ0eSB7UmVnaXN0ZXJlZFNvdXJjZVtdfSBzb3VyY2VzIC0gVmVyc2lvbmVkIHNvdXJjZSByZWdpc3RyeS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlUHJvdmVuYW5jZVtdfSBub2RlcyAtIERldGVybWluaXN0aWMgbm9kZSBpbmRleC5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNTeW1ib2xQcm92ZW5hbmNlW119IHN5bWJvbHMgLSBEZXRlcm1pbmlzdGljIHN5bWJvbCBpbmRleC5cbiAqL1xuXG4vKiogQHR5cGVkZWYge1wiZXhhY3RcIiB8IFwiYW5jaG9yXCIgfCBcInN5bnRoZXRpY1wifSBNYXBwaW5nS2luZCAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlbWFudGlmb2xkTWFwcGluZ1NwYW5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGdlbmVyYXRlZCAtIEdlbmVyYXRlZCBoYWxmLW9wZW4gcmFuZ2UuXG4gKiBAcHJvcGVydHkge01hcHBpbmdLaW5kfSBtYXBwaW5nS2luZCAtIE1hcHBpbmcgcHJlY2lzaW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY09yaWdpbn0gb3JpZ2luIC0gQ2xvc2VkIG9yaWdpbmFsIHByb3ZlbmFuY2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25vZGVJZF0gLSBSZWxhdGVkIGNhbm9uaWNhbCBzZW1hbnRpYyBub2RlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzeW1ib2xJZF0gLSBSZWxhdGVkIGNhbm9uaWNhbCBzZW1hbnRpYyBzeW1ib2wuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JvbGVdIC0gU2VtYW50aWMgdG9rZW4gcm9sZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV0gLSBVc2VmdWwgc3ltYm9sIG5hbWUgZm9yIFNvdXJjZSBNYXAgdjMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBHZW5lcmF0ZWRTb3VyY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlbmFtZSAtIE91dHB1dCBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBPdXRwdXQgbGFuZ3VhZ2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29udGVudCAtIEV4YWN0IGdlbmVyYXRlZCBMRiBzb3VyY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZW1hbnRpZm9sZE1hcHBpbmdcbiAqIEBwcm9wZXJ0eSB7XCJTZW1hbnRpZm9sZE1hcHBpbmdcIn0gc2NoZW1hIC0gU2NoZW1hIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkgezF9IHZlcnNpb24gLSBTY2hlbWEgdmVyc2lvbi5cbiAqIEBwcm9wZXJ0eSB7XCJ1dGYxNlwifSBjb29yZGluYXRlU3lzdGVtIC0gT2Zmc2V0IGFuZCBjb2x1bW4gdW5pdC5cbiAqIEBwcm9wZXJ0eSB7R2VuZXJhdGVkU291cmNlfSBnZW5lcmF0ZWQgLSBHZW5lcmF0ZWQgcHJvZ3JhbSBpZGVudGl0eSBhbmQgY29udGVudC5cbiAqIEBwcm9wZXJ0eSB7UmVnaXN0ZXJlZFNvdXJjZVtdfSBzb3VyY2VzIC0gT3JpZ2luYWwgc291cmNlIHJlZ2lzdHJ5LlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVQcm92ZW5hbmNlW119IG5vZGVzIC0gQ2Fub25pY2FsIHNlbWFudGljIG5vZGUgaW5kZXguXG4gKiBAcHJvcGVydHkge1NlbWFudGljU3ltYm9sUHJvdmVuYW5jZVtdfSBzeW1ib2xzIC0gQ2Fub25pY2FsIHNlbWFudGljIHN5bWJvbCBpbmRleC5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWZvbGRNYXBwaW5nU3BhbltdfSBzcGFucyAtIE9yZGVyZWQgZ2VuZXJhdGVkIHJhbmdlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEdlbmVyYXRlZEFydGlmYWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29kZSAtIEdlbmVyYXRlZCBvdXRwdXQgcHJvZ3JhbSwgaW5jbHVkaW5nIGFueSByZXF1ZXN0ZWQgZGlyZWN0aXZlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbGVuYW1lIC0gR2VuZXJhdGVkIG91dHB1dCBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBPdXRwdXQgbGFuZ3VhZ2UuXG4gKiBAcHJvcGVydHkge1NlbWFudGlmb2xkTWFwcGluZ30gbWFwcGluZyAtIEF1dGhvcml0YXRpdmUgcmljaCBtYXBwaW5nLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJAanJpZGdld2VsbC9nZW4tbWFwcGluZ1wiKS5FbmNvZGVkU291cmNlTWFwfSBzb3VyY2VNYXAgLSBTb3VyY2UgTWFwIHYzIHByb2plY3Rpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc291cmNlTWFwRmlsZW5hbWUgLSBEZWZhdWx0IGV4dGVybmFsIFNvdXJjZSBNYXAgZmlsZW5hbWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBUZXh0QXJ0aWZhY3RQcm92ZW5hbmNlXG4gKiBAcHJvcGVydHkge1widGV4dFwifSBraW5kIC0gUmljaCB0ZXh0IHByb3ZlbmFuY2UgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWZvbGRNYXBwaW5nfSBtYXBwaW5nIC0gQXV0aG9yaXRhdGl2ZSByYW5nZSBtYXBwaW5nLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJAanJpZGdld2VsbC9nZW4tbWFwcGluZ1wiKS5FbmNvZGVkU291cmNlTWFwfSBzb3VyY2VNYXAgLSBJbnRlcm9wZXJhYmxlIHByb2plY3Rpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NvdXJjZU1hcEZpbGVuYW1lXSAtIExvZ2ljYWwgU291cmNlIE1hcCBzaWRlY2FyIHBhdGguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBCeXRlQXJ0aWZhY3RQcm92ZW5hbmNlXG4gKiBAcHJvcGVydHkge1wiYnl0ZXNcIn0ga2luZCAtIEJ5dGUgcHJvdmVuYW5jZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtTZW1hbnRpZm9sZEJ5dGVNYXBwaW5nfSBtYXBwaW5nIC0gQXV0aG9yaXRhdGl2ZSBieXRlIHJhbmdlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEFydGlmYWN0U3ludGhldGljUHJvdmVuYW5jZVxuICogQHByb3BlcnR5IHtcInN5bnRoZXRpY1wifSBraW5kIC0gU3ludGhldGljIGFydGlmYWN0IGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVhc29uIC0gRXhwbGljaXQgdGFyZ2V0LXNjYWZmb2xkaW5nIHJlYXNvbi5cbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgUmVsYXRlZE9yaWdpbltdfSByZWxhdGVkT3JpZ2lucyAtIFJlbGF0ZWQgc2VtYW50aWMgc291cmNlIHJhbmdlcy5cbiAqL1xuXG4vKiogQHR5cGVkZWYge1RleHRBcnRpZmFjdFByb3ZlbmFuY2UgfCBCeXRlQXJ0aWZhY3RQcm92ZW5hbmNlIHwgQXJ0aWZhY3RTeW50aGV0aWNQcm92ZW5hbmNlfSBBcnRpZmFjdFByb3ZlbmFuY2UgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBHZW5lcmF0ZWRTZXRBcnRpZmFjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBVbmlxdWUgc2FmZSByZWxhdGl2ZSBQT1NJWCBwYXRoLlxuICogQHByb3BlcnR5IHtcInRleHRcIiB8IFwiYmluYXJ5XCJ9IGNvbnRlbnRLaW5kIC0gQ29udGVudCByZXByZXNlbnRhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgVWludDhBcnJheX0gY29udGVudCAtIFRleHQgb3IgYSBkZXRhY2hlZCBjb3B5IG9mIHRoZSBleGFjdCBnZW5lcmF0ZWQgYnl0ZXMgb24gZXZlcnkgYmluYXJ5IHJlYWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVkaWFUeXBlIC0gQXJ0aWZhY3QgbWVkaWEgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7R2VuZXJhdGVkQXJ0aWZhY3RSb2xlfSByb2xlIC0gQXJ0aWZhY3Qgcm9sZTsgZXhhY3RseSBvbmUgc2V0IGFydGlmYWN0IGlzIGVudHJ5LlxuICogQHByb3BlcnR5IHtcImdlbmVyYXRlZFwifSBvd25lcnNoaXAgLSBUYXNrLTAxNSBvd25lcnNoaXAgY29udHJhY3QuXG4gKiBAcHJvcGVydHkge0FydGlmYWN0UHJvdmVuYW5jZX0gcHJvdmVuYW5jZSAtIFRleHQsIGJ5dGUtcmFuZ2UsIG9yIHN5bnRoZXRpYyBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgR2VuZXJhdGVkQXJ0aWZhY3RTZXRcbiAqIEBwcm9wZXJ0eSB7XCJHZW5lcmF0ZWRBcnRpZmFjdFNldFwifSBzY2hlbWEgLSBTY2hlbWEgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7MX0gdmVyc2lvbiAtIFNjaGVtYSB2ZXJzaW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRhcmdldCAtIFN0YWJsZSBsYW5ndWFnZSBvciB0YXJnZXQgSUQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZW50cnkgLSBQYXRoIG9mIHRoZSBzb2xlIGRlY2xhcmVkIGVudHJ5IGFydGlmYWN0LlxuICogQHByb3BlcnR5IHtyZWFkb25seSBHZW5lcmF0ZWRTZXRBcnRpZmFjdFtdfSBhcnRpZmFjdHMgLSBEZXRlcm1pbmlzdGljIGFydGlmYWN0IG9yZGVyLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRGlzY292ZXJlZFRvb2xjaGFpblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gVG9vbGNoYWluIElELlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbW1hbmQgLSBEb2N1bWVudGVkIGNhbm9uaWNhbCBjb21tYW5kLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4ZWN1dGFibGUgLSBFeGFjdCBhYnNvbHV0ZSBleGVjdXRhYmxlIHBhdGguXG4gKiBAcHJvcGVydHkge1wib3ZlcnJpZGVcIiB8IFwiY2Fub25pY2FsXCJ9IHNvdXJjZSAtIFJlc29sdXRpb24gcm91dGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbiAtIEZpcnN0IGNhcHR1cmVkIHZlcnNpb24gbGluZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJzaW9uT3V0cHV0IC0gQ29tcGxldGUgY2FwdHVyZWQgdmVyc2lvbiBvdXRwdXQuXG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IHN0cmluZ1tdfSB2ZXJzaW9uQXJndW1lbnRzIC0gRXhhY3QgdmVyc2lvbiBhcmd1bWVudCBhcnJheS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEFjY2VwdGFuY2VTdGFnZVJlc3VsdFxuICogQHByb3BlcnR5IHtBY2NlcHRhbmNlU3RhZ2V9IHN0YWdlIC0gQ29tcGxldGVkIHN0YWdlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4ZWN1dGFibGUgLSBFeGFjdCBleGVjdXRhYmxlIHVzZWQuXG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IHN0cmluZ1tdfSBhcmd1bWVudHMgLSBFeGFjdCBhcmd1bWVudCBhcnJheSB1c2VkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb24gLSBEaXNjb3ZlcmVkIHRvb2wgdmVyc2lvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGRvdXQgLSBDYXB0dXJlZCBzdGFuZGFyZCBvdXRwdXQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RkZXJyIC0gQ2FwdHVyZWQgc3RhbmRhcmQgZXJyb3IuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBBY2NlcHRhbmNlUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGFyZ2V0IC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRpcmVjdG9yeSAtIFJlbW92ZWQgaXNvbGF0ZWQgcHJvamVjdCBkaXJlY3RvcnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IEFjY2VwdGFuY2VTdGFnZVJlc3VsdFtdfSBzdGFnZXMgLSBPcmRlcmVkIGNvbXBsZXRlZCBzdGFnZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBUeXBlUmVmZXJlbmNlXG4gKiBAcHJvcGVydHkge1wiVHlwZVJlZmVyZW5jZVwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY1R5cGVOYW1lfSBuYW1lIC0gTm9ybWFsaXplZCB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlIHRoYXQgc3Vydml2ZXMgc2VtYW50aWMgdHJhbnNmb3Jtcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBhcmFtZXRlclxuICogQHByb3BlcnR5IHtcIlBhcmFtZXRlclwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBQYXJhbWV0ZXIgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7VHlwZVJlZmVyZW5jZX0gdHlwZSAtIFBhcmFtZXRlciB0eXBlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgSWRlbnRpZmllckV4cHJlc3Npb25cbiAqIEBwcm9wZXJ0eSB7XCJJZGVudGlmaWVyRXhwcmVzc2lvblwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBSZWZlcmVuY2VkIG5hbWUuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBJbnRlZ2VyTGl0ZXJhbFxuICogQHByb3BlcnR5IHtcIkludGVnZXJMaXRlcmFsXCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmFsdWUgLSBKYXZhU2NyaXB0LXNhZmUgaW50ZWdlciB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEJvb2xlYW5MaXRlcmFsXG4gKiBAcHJvcGVydHkge1wiQm9vbGVhbkxpdGVyYWxcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdmFsdWUgLSBCb29sZWFuIHZhbHVlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU3RyaW5nTGl0ZXJhbFxuICogQHByb3BlcnR5IHtcIlN0cmluZ0xpdGVyYWxcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZSAtIFVuaWNvZGUgc3RyaW5nIHZhbHVlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgVW5hcnlFeHByZXNzaW9uXG4gKiBAcHJvcGVydHkge1wiVW5hcnlFeHByZXNzaW9uXCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge1NlbWFudGljVW5hcnlPcGVyYXRpb259IG9wZXJhdGlvbiAtIENsb3NlZCBzZW1hbnRpYyBvcGVyYXRpb24uXG4gKiBAcHJvcGVydHkge0V4cHJlc3Npb259IG9wZXJhbmQgLSBPcGVyYW5kIGV2YWx1YXRlZCBleGFjdGx5IG9uY2UuXG4gKiBAcHJvcGVydHkge1NlbWFudGljVHlwZU5hbWV9IHR5cGUgLSBFeHBsaWNpdCBvcGVyYXRpb24gcmVzdWx0IHR5cGUuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBCaW5hcnlFeHByZXNzaW9uXG4gKiBAcHJvcGVydHkge1wiQmluYXJ5RXhwcmVzc2lvblwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY0JpbmFyeU9wZXJhdGlvbn0gb3BlcmF0aW9uIC0gQ2xvc2VkIHNlbWFudGljIG9wZXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gbGVmdCAtIExlZnQgb3BlcmFuZC5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gcmlnaHQgLSBSaWdodCBvcGVyYW5kLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY1R5cGVOYW1lfSB0eXBlIC0gRXhwbGljaXQgb3BlcmF0aW9uIHJlc3VsdCB0eXBlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgQ2FsbEV4cHJlc3Npb25cbiAqIEBwcm9wZXJ0eSB7XCJDYWxsRXhwcmVzc2lvblwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhbGxlZSAtIEZ1bmN0aW9uIG5hbWUuXG4gKiBAcHJvcGVydHkge0V4cHJlc3Npb25bXX0gYXJndW1lbnRzIC0gUG9zaXRpb25hbCBhcmd1bWVudHMuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqIEB0eXBlZGVmIHtJZGVudGlmaWVyRXhwcmVzc2lvbiB8IEludGVnZXJMaXRlcmFsIHwgQm9vbGVhbkxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwgVW5hcnlFeHByZXNzaW9uIHwgQmluYXJ5RXhwcmVzc2lvbiB8IENhbGxFeHByZXNzaW9ufSBFeHByZXNzaW9uICovXG5cbi8qKlxuICogQHR5cGVkZWYgTG9jYWxEZWNsYXJhdGlvblxuICogQHByb3BlcnR5IHtcIkxvY2FsRGVjbGFyYXRpb25cIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gRGVjbGFyZWQgbG9jYWwgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7VHlwZVJlZmVyZW5jZX0gdHlwZSAtIEV4cGxpY2l0IGxvY2FsIHR5cGUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG11dGFibGUgLSBXaGV0aGVyIGxhdGVyIGFzc2lnbm1lbnQgaXMgYWxsb3dlZC5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gaW5pdGlhbGl6ZXIgLSBSZXF1aXJlZCBpbml0aWFsaXplciBleHByZXNzaW9uLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBEZWNsYXJhdGlvbiBzb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgQXNzaWdubWVudFN0YXRlbWVudFxuICogQHByb3BlcnR5IHtcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7SWRlbnRpZmllckV4cHJlc3Npb259IHRhcmdldCAtIFNpbXBsZSBsb2NhbCBhc3NpZ25tZW50IHRhcmdldC5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEFzc2lnbmVkIGV4cHJlc3Npb24uXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEFzc2lnbm1lbnQgc291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFJldHVyblN0YXRlbWVudFxuICogQHByb3BlcnR5IHtcIlJldHVyblN0YXRlbWVudFwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gUmV0dXJuZWQgZXhwcmVzc2lvbi5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIElmU3RhdGVtZW50XG4gKiBAcHJvcGVydHkge1wiSWZTdGF0ZW1lbnRcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gY29uZGl0aW9uIC0gQnJhbmNoIGNvbmRpdGlvbi5cbiAqIEBwcm9wZXJ0eSB7QmxvY2t9IGNvbnNlcXVlbnQgLSBUcnVlIGJyYW5jaC5cbiAqIEBwcm9wZXJ0eSB7QmxvY2t9IFthbHRlcm5hdGVdIC0gRmFsc2UgYnJhbmNoLCBhYnNlbnQgd2hlbiBleGVjdXRpb24gZmFsbHMgdGhyb3VnaC5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKiogQHR5cGVkZWYge0xvY2FsRGVjbGFyYXRpb24gfCBBc3NpZ25tZW50U3RhdGVtZW50fSBMb2NhbFN0YXRlbWVudCAqL1xuLyoqIEB0eXBlZGVmIHtMb2NhbFN0YXRlbWVudCB8IElmU3RhdGVtZW50IHwgUmV0dXJuU3RhdGVtZW50IHwgUHJpbnRTdGF0ZW1lbnR9IFN0YXRlbWVudCAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEJsb2NrXG4gKiBAcHJvcGVydHkge1wiQmxvY2tcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7U3RhdGVtZW50W119IHN0YXRlbWVudHMgLSBPcmRlcmVkIHN0YXRlbWVudHMgaW4gb25lIGxleGljYWwgc2NvcGUuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBGdW5jdGlvbkRlY2xhcmF0aW9uXG4gKiBAcHJvcGVydHkge1wiRnVuY3Rpb25EZWNsYXJhdGlvblwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBGdW5jdGlvbiBuYW1lLlxuICogQHByb3BlcnR5IHtQYXJhbWV0ZXJbXX0gcGFyYW1ldGVycyAtIEZ1bmN0aW9uIHBhcmFtZXRlcnMuXG4gKiBAcHJvcGVydHkge1R5cGVSZWZlcmVuY2V9IHJldHVyblR5cGUgLSBSZXR1cm4gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7QmxvY2t9IGJvZHkgLSBGdW5jdGlvbiBib2R5LlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUHJpbnRTdGF0ZW1lbnRcbiAqIEBwcm9wZXJ0eSB7XCJQcmludFN0YXRlbWVudFwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gUHJpbnRlZCBleHByZXNzaW9uLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRW50cnlQb2ludFxuICogQHByb3BlcnR5IHtcIkVudHJ5UG9pbnRcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7QmxvY2t9IGJvZHkgLSBFbnRyeS1wb2ludCBib2R5LlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU2VtYW50aWNNb2R1bGVcbiAqIEBwcm9wZXJ0eSB7XCJNb2R1bGVcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb25EZWNsYXJhdGlvbltdfSBmdW5jdGlvbnMgLSBUb3AtbGV2ZWwgZnVuY3Rpb25zLlxuICogQHByb3BlcnR5IHtFbnRyeVBvaW50fSBlbnRyeVBvaW50IC0gRXhlY3V0YWJsZSBlbnRyeSBwb2ludC5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNQcm92ZW5hbmNlfSBbcHJvdmVuYW5jZV0gLSBQYXJzZXItYXV0aG9yZWQgc291cmNlIGFuZCBpZGVudGl0eSBpbmRleDsgb3B0aW9uYWwgZm9yIGxlZ2FjeSBjYWxsZXItYXV0aG9yZWQgbW9kdWxlcy5cbiAqL1xuXG4vKiogQHR5cGVkZWYge1NlbWFudGljTW9kdWxlIHwgRnVuY3Rpb25EZWNsYXJhdGlvbiB8IFBhcmFtZXRlciB8IEJsb2NrIHwgU3RhdGVtZW50IHwgRW50cnlQb2ludCB8IEV4cHJlc3Npb24gfCBUeXBlUmVmZXJlbmNlfSBTZW1hbnRpY05vZGUgKi9cbi8qKiBAdHlwZWRlZiB7U2VtYW50aWNOb2RlfSBTZW1hbnRpY05vZGVXaXRob3V0TG9jYXRpb25zICovXG5cbmV4cG9ydCB7fVxuIl19
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* @param {number} input.timeoutMs - Deadline before termination begins.
|
|
10
10
|
* @returns {Promise<{stderr: string, stdout: string}>} Output after the owned process group closes.
|
|
11
11
|
*/
|
|
12
|
-
export declare function executeFileWithDeadline(
|
|
12
|
+
export declare function executeFileWithDeadline(input: {
|
|
13
13
|
arguments: readonly string[];
|
|
14
14
|
cwd?: string;
|
|
15
15
|
environment: Readonly<Record<string, string>>;
|
|
@@ -20,6 +20,15 @@ export declare function executeFileWithDeadline({ arguments: processArguments, c
|
|
|
20
20
|
stderr: string;
|
|
21
21
|
stdout: string;
|
|
22
22
|
}>;
|
|
23
|
+
/**
|
|
24
|
+
* Creates an executor whose spawn observation belongs only to that executor instance.
|
|
25
|
+
* @param {object} dependencies - Internal lifecycle dependencies.
|
|
26
|
+
* @param {(child: import("node:child_process").ChildProcess, listener: () => void) => void} dependencies.registerSpawnListener - Registers deadline initialization.
|
|
27
|
+
* @returns {typeof executeFileWithDeadline} Owned subprocess executor.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createExecuteFileWithDeadline({ registerSpawnListener }: {
|
|
30
|
+
registerSpawnListener: (child: import("node:child_process").ChildProcess, listener: () => void) => void;
|
|
31
|
+
}): typeof executeFileWithDeadline;
|
|
23
32
|
/**
|
|
24
33
|
* Reports whether this module's deadline timer initiated termination.
|
|
25
34
|
* @param {unknown} error - Subprocess failure.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subprocess.d.ts","sourceRoot":"","sources":["../../src/subprocess.js"],"names":[],"mappings":"AASA;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,
|
|
1
|
+
{"version":3,"file":"subprocess.d.ts","sourceRoot":"","sources":["../../src/subprocess.js"],"names":[],"mappings":"AASA;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAR1C;IAAiC,SAAS,EAAlC,SAAS,MAAM,EAAE,CACzB;IAAuB,GAAG,AAA1B,CACA,EADQ,MAAM,CACd;IAAgD,WAAW,EAAnD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CACxC;IAAsB,UAAU,EAAxB,MAAM,CACd;IAAsB,SAAS,EAAvB,MAAM,CACd;IAAsB,SAAS,EAAvB,MAAM,CACd;CAE0C,GAFhC,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAAC,CAIrD;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,EAAC,qBAAqB,EAAC,EAHlE;IAAuG,qBAAqB,EAApH,CAAC,KAAK,EAAE,OAAO,oBAAoB,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CACxF;CAEkE,GAFxD,OAAO,uBAAuB,CAI1C;AAgMD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAHhC,OAGgC,GAF9B,OAAO,CAInB"}
|