@oscharko-dev/keiko-tools 0.2.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/dist/.tsbuildinfo +1 -0
- package/dist/browser/cdp-client.d.ts +36 -0
- package/dist/browser/cdp-client.d.ts.map +1 -0
- package/dist/browser/cdp-client.js +218 -0
- package/dist/browser/errors.d.ts +27 -0
- package/dist/browser/errors.d.ts.map +1 -0
- package/dist/browser/errors.js +61 -0
- package/dist/browser/session.d.ts +46 -0
- package/dist/browser/session.d.ts.map +1 -0
- package/dist/browser/session.js +759 -0
- package/dist/browser/types.d.ts +49 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/validators.d.ts +6 -0
- package/dist/browser/validators.d.ts.map +1 -0
- package/dist/browser/validators.js +97 -0
- package/dist/errors.d.ts +3 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +4 -0
- package/dist/exec.d.ts +45 -0
- package/dist/exec.d.ts.map +1 -0
- package/dist/exec.js +372 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/patch-content.d.ts +11 -0
- package/dist/patch-content.d.ts.map +1 -0
- package/dist/patch-content.js +130 -0
- package/dist/patch-normalize.d.ts +2 -0
- package/dist/patch-normalize.d.ts.map +1 -0
- package/dist/patch-normalize.js +85 -0
- package/dist/patch-parse.d.ts +9 -0
- package/dist/patch-parse.d.ts.map +1 -0
- package/dist/patch-parse.js +201 -0
- package/dist/patch.d.ts +22 -0
- package/dist/patch.d.ts.map +1 -0
- package/dist/patch.js +469 -0
- package/dist/registry.d.ts +35 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +240 -0
- package/dist/sandbox.d.ts +9 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +131 -0
- package/dist/schemas.d.ts +3 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +51 -0
- package/dist/terminal-policy.d.ts +10 -0
- package/dist/terminal-policy.d.ts.map +1 -0
- package/dist/terminal-policy.js +306 -0
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +18 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +4 -0
- package/dist/writer.d.ts +8 -0
- package/dist/writer.d.ts.map +1 -0
- package/dist/writer.js +20 -0
- package/package.json +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../keiko-contracts/dist/coding-context.d.ts","../../keiko-contracts/dist/harness.d.ts","../../keiko-contracts/dist/workflow-descriptor.d.ts","../../keiko-contracts/dist/workspace.d.ts","../../keiko-contracts/dist/editor-session.d.ts","../../keiko-contracts/dist/editor-layout.d.ts","../../keiko-contracts/dist/editor-dirty-close.d.ts","../../keiko-contracts/dist/editor-hot-exit.d.ts","../../keiko-contracts/dist/language-service.d.ts","../../keiko-contracts/dist/editor-agent.d.ts","../../keiko-contracts/dist/gateway.d.ts","../../keiko-contracts/dist/editor-completion.d.ts","../../keiko-contracts/dist/editor-inline-completion.d.ts","../../keiko-contracts/dist/editor-test-generation.d.ts","../../keiko-contracts/dist/editor-patch-apply.d.ts","../../keiko-contracts/dist/tools.d.ts","../../keiko-contracts/dist/verification.d.ts","../../keiko-contracts/dist/evaluations.d.ts","../../keiko-contracts/dist/unit-test-events.d.ts","../../keiko-contracts/dist/bug-investigation-events.d.ts","../../keiko-contracts/dist/verification-summary.d.ts","../../keiko-contracts/dist/evidence.d.ts","../../keiko-contracts/dist/connected-context.d.ts","../../keiko-contracts/dist/local-knowledge.d.ts","../../keiko-contracts/dist/memory.d.ts","../../keiko-contracts/dist/workflow-handoff.d.ts","../../keiko-contracts/dist/prompt-enhancer.d.ts","../../keiko-contracts/dist/prompt-enhancer-validation.d.ts","../../keiko-contracts/dist/prompt-enhancer-safety.d.ts","../../keiko-contracts/dist/prompt-enhancer-critic.d.ts","../../keiko-contracts/dist/prompt-enhancer-bff.d.ts","../../keiko-contracts/dist/bff-wire.d.ts","../../keiko-contracts/dist/text-safety.d.ts","../../keiko-contracts/dist/local-knowledge-records.d.ts","../../keiko-contracts/dist/local-knowledge-paths.d.ts","../../keiko-contracts/dist/local-knowledge-validation.d.ts","../../keiko-contracts/dist/local-knowledge-large-document.d.ts","../../keiko-contracts/dist/local-knowledge-large-document-validation.d.ts","../../keiko-contracts/dist/local-knowledge-schema.d.ts","../../keiko-contracts/dist/local-knowledge-schema-validation.d.ts","../../keiko-contracts/dist/memory-records.d.ts","../../keiko-contracts/dist/memory-operations.d.ts","../../keiko-contracts/dist/memory-validation.d.ts","../../keiko-contracts/dist/memory-operations-validation.d.ts","../../keiko-contracts/dist/memory-retrieval-validation.d.ts","../../keiko-contracts/dist/memory-audit-validation.d.ts","../../keiko-contracts/dist/memory-audit-events.d.ts","../../keiko-contracts/dist/memory-record-validation.d.ts","../../keiko-contracts/dist/memory-barrel.d.ts","../../keiko-contracts/dist/memory-workflow-port.d.ts","../../keiko-contracts/dist/conversation-budget.d.ts","../../keiko-contracts/dist/qualityintelligence/ids.d.ts","../../keiko-contracts/dist/qualityintelligence/assertnever.d.ts","../../keiko-contracts/dist/qualityintelligence/sourceenvelope.d.ts","../../keiko-contracts/dist/qualityintelligence/evidenceatom.d.ts","../../keiko-contracts/dist/qualityintelligence/testcasecandidate.d.ts","../../keiko-contracts/dist/qualityintelligence/editablerevision.d.ts","../../keiko-contracts/dist/qualityintelligence/coveragemap.d.ts","../../keiko-contracts/dist/qualityintelligence/validationfinding.d.ts","../../keiko-contracts/dist/qualityintelligence/runplanandevents.d.ts","../../keiko-contracts/dist/qualityintelligence/reviewrecord.d.ts","../../keiko-contracts/dist/qualityintelligence/exportbundle.d.ts","../../keiko-contracts/dist/qualityintelligence/auditsummary.d.ts","../../keiko-contracts/dist/qualityintelligence/handoffenvelope.d.ts","../../keiko-contracts/dist/qualityintelligence/testqualityrubric.d.ts","../../keiko-contracts/dist/qualityintelligence/bffwire.d.ts","../../keiko-contracts/dist/qualityintelligence/index.d.ts","../../keiko-contracts/dist/workspace-ui.d.ts","../../keiko-contracts/dist/workspace-descriptors.d.ts","../../keiko-contracts/dist/relationships.d.ts","../../keiko-contracts/dist/relationships-validation.d.ts","../../keiko-contracts/dist/prompt-enhancer-analyzer.d.ts","../../keiko-contracts/dist/prompt-enhancer-grounding.d.ts","../../keiko-contracts/dist/index.d.ts","../../keiko-security/dist/errors/tools.d.ts","../src/errors.ts","../../keiko-security/dist/version.d.ts","../../keiko-security/dist/redaction.d.ts","../../keiko-security/dist/runid.d.ts","../../keiko-security/dist/secrets.d.ts","../../keiko-security/dist/hashing.d.ts","../../keiko-security/dist/secretbox.d.ts","../../keiko-security/dist/promptinjection.d.ts","../../keiko-security/dist/errors/gateway.d.ts","../../keiko-security/dist/errors/audit.d.ts","../../keiko-security/dist/errors/workspace.d.ts","../../keiko-security/dist/errors/harness.d.ts","../../keiko-security/dist/errors/verification.d.ts","../../keiko-security/dist/errors/secretbox.d.ts","../../keiko-security/dist/errors/promptenhancer.d.ts","../../keiko-security/dist/errors/index.d.ts","../../keiko-security/dist/index.d.ts","../../keiko-sandbox/dist/types.d.ts","../../keiko-sandbox/dist/backends.d.ts","../../keiko-sandbox/dist/select.d.ts","../../keiko-sandbox/dist/plan.d.ts","../../keiko-sandbox/dist/probe.d.ts","../../keiko-sandbox/dist/index.d.ts","../../keiko-workspace/dist/types.d.ts","../../keiko-workspace/dist/errors.d.ts","../../keiko-workspace/dist/fs.d.ts","../../keiko-workspace/dist/paths.d.ts","../../keiko-workspace/dist/realpath.d.ts","../../keiko-workspace/dist/ignore.d.ts","../../keiko-workspace/dist/detect.d.ts","../../keiko-workspace/dist/discovery.d.ts","../../keiko-workspace/dist/retrieval.d.ts","../../keiko-workspace/dist/contextpack.d.ts","../../keiko-workspace/dist/summary.d.ts","../../keiko-workspace/dist/reposearchpolicy.d.ts","../../keiko-workspace/dist/reposearch.d.ts","../../keiko-workspace/dist/binarydetect.d.ts","../../keiko-workspace/dist/stableid.d.ts","../../keiko-workspace/dist/structuraladapters.d.ts","../../keiko-workspace/dist/testsourcepairing.d.ts","../../keiko-workspace/dist/importgraph.d.ts","../../keiko-workspace/dist/githistory.d.ts","../../keiko-workspace/dist/version.d.ts","../../keiko-workspace/dist/document-extraction.d.ts","../../keiko-workspace/dist/index.d.ts","../src/types.ts","../src/sandbox.ts","../src/exec.ts","../src/writer.ts","../src/patch-content.ts","../src/patch-normalize.ts","../src/patch-parse.ts","../src/patch.ts","../src/schemas.ts","../src/registry.ts","../src/terminal-policy.ts","../src/browser/errors.ts","../src/browser/types.ts","../src/browser/validators.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/utility.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client-stats.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/undici-types/h2c-client.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/socks5-proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/path/posix.d.ts","../../../node_modules/@types/node/path/win32.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/quic.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/iter.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/test/reporters.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/util/types.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/zlib/iter.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/ws/index.d.mts","../src/browser/cdp-client.ts","../src/browser/session.ts","../src/version.ts","../src/index.ts"],"fileIdsList":[[197,258,259,261,269,273,276,278,279,280,292],[197,260,261,269,273,276,278,279,280,292],[261,269,273,276,278,279,280,292],[197,261,269,273,276,278,279,280,292,301],[197,261,262,267,269,272,273,276,278,279,280,282,292,297,310],[197,261,262,263,269,272,273,276,278,279,280,292],[197,261,269,273,276,278,279,280,292],[197,261,264,269,273,276,278,279,280,292,311],[197,261,265,266,269,273,276,278,279,280,283,292],[197,261,266,269,273,276,278,279,280,292,297,307],[197,261,267,269,272,273,276,278,279,280,282,292],[197,260,261,268,269,273,276,278,279,280,292],[197,261,269,270,273,276,278,279,280,292],[197,261,269,271,272,273,276,278,279,280,292],[197,260,261,269,272,273,276,278,279,280,292],[197,261,269,272,273,274,276,278,279,280,292,297,310],[197,261,269,272,273,274,276,278,279,280,292,297,299,301],[197,248,261,269,272,273,275,276,278,279,280,282,292,297,310],[197,261,269,272,273,275,276,278,279,280,282,292,297,307,310],[197,261,269,273,275,276,277,278,279,280,292,297,307,310],[195,196,197,198,199,200,201,202,203,204,205,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318],[197,261,269,272,273,276,278,279,280,292],[197,261,269,273,276,278,280,292],[197,261,269,273,276,278,279,280,281,292,310],[197,261,269,272,273,276,278,279,280,282,292,297],[197,261,269,273,276,278,279,280,283,292],[197,261,269,273,276,278,279,280,284,292],[197,261,269,272,273,276,278,279,280,287,292],[197,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317],[197,261,269,273,276,278,279,280,289,292],[197,261,269,273,276,278,279,280,290,292],[197,261,266,269,273,276,278,279,280,282,292,301],[197,261,269,272,273,276,278,279,280,292,293],[197,261,269,273,276,278,279,280,292,294,311,314],[197,261,269,272,273,276,278,279,280,292,297,300,301],[197,261,269,273,276,278,279,280,292,298,301],[197,261,269,273,276,278,279,280,292,299],[197,261,269,273,276,278,279,280,292,301,311],[197,261,269,273,276,278,279,280,292,302],[197,258,261,269,273,276,278,279,280,292,297,304,310],[197,261,269,273,276,278,279,280,292,297,303],[197,261,269,272,273,276,278,279,280,292,305,306],[197,261,269,273,276,278,279,280,292,305,306],[197,261,266,269,273,276,278,279,280,282,292,297,307],[197,261,269,273,276,278,279,280,292,308],[197,261,269,273,276,278,279,280,282,292,309],[197,261,269,273,275,276,278,279,280,290,292,310],[197,261,269,273,276,278,279,280,292,311,312],[197,261,266,269,273,276,278,279,280,292,312],[197,261,269,273,276,278,279,280,292,297,313],[197,261,269,273,276,278,279,280,281,292,314],[197,261,269,273,276,278,279,280,292,315],[197,261,264,269,273,276,278,279,280,292],[197,261,266,269,273,276,278,279,280,292],[197,261,269,273,276,278,279,280,292,311],[197,248,261,269,273,276,278,279,280,292],[197,261,269,273,276,278,279,280,292,310],[197,261,269,273,276,278,279,280,292,316],[197,261,269,273,276,278,279,280,287,292],[197,261,269,273,276,278,279,280,292,306],[197,248,261,269,272,273,274,276,278,279,280,287,292,297,301,310,313,314,316],[197,261,269,273,276,278,279,280,292,297,317],[197,261,269,273,276,278,279,280,292,299,318],[197,261,269,272,273,275,276,277,278,279,280,282,292,297,307,310,317,319],[197,212,215,218,219,261,269,273,276,278,279,280,292,310],[197,215,261,269,273,276,278,279,280,292,297,310],[197,215,219,261,269,273,276,278,279,280,292,310],[197,261,269,273,276,278,279,280,292,297],[197,209,261,269,273,276,278,279,280,292],[197,213,261,269,273,276,278,279,280,292],[197,211,212,215,261,269,273,276,278,279,280,292,310],[197,261,269,273,276,278,279,280,282,292,307],[197,261,269,273,276,278,279,280,292,319],[197,209,261,269,273,276,278,279,280,292,319],[197,211,215,261,269,273,276,278,279,280,282,292,310],[197,206,207,208,210,214,261,269,272,273,276,278,279,280,292,297,310],[197,215,224,232,261,269,273,276,278,279,280,292],[197,207,213,261,269,273,276,278,279,280,292],[197,215,242,243,261,269,273,276,278,279,280,292],[197,207,210,215,261,269,273,276,278,279,280,292,301,310,319],[197,215,261,269,273,276,278,279,280,292],[197,211,215,261,269,273,276,278,279,280,292,310],[197,206,261,269,273,276,278,279,280,292],[197,209,210,211,213,214,215,216,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,243,244,245,246,247,261,269,273,276,278,279,280,292],[197,215,235,238,261,269,273,276,278,279,280,292],[197,215,224,225,226,261,269,273,276,278,279,280,292],[197,213,215,225,227,261,269,273,276,278,279,280,292],[197,214,261,269,273,276,278,279,280,292],[197,207,209,215,261,269,273,276,278,279,280,292],[197,215,219,225,227,261,269,273,276,278,279,280,292],[197,219,261,269,273,276,278,279,280,292],[197,213,215,218,261,269,273,276,278,279,280,292,310],[197,207,211,215,224,261,269,273,276,278,279,280,292],[197,215,235,261,269,273,276,278,279,280,292],[197,227,261,269,273,276,278,279,280,292],[197,207,211,215,219,261,269,273,276,278,279,280,292],[197,209,215,242,261,269,273,276,278,279,280,292,301,316,319],[63,65,71,81,83,84,85,86,91,197,261,269,273,276,278,279,280,292],[77,197,261,269,273,276,278,279,280,292],[65,69,197,261,269,273,276,278,279,280,292],[69,71,197,261,269,273,276,278,279,280,292],[65,197,261,269,273,276,278,279,280,292],[69,71,72,197,261,269,273,276,278,279,280,292],[61,69,72,197,261,269,273,276,278,279,280,292],[71,197,261,269,273,276,278,279,280,292],[62,64,71,81,197,261,269,273,276,278,279,280,292],[61,197,261,269,273,276,278,279,280,292],[61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,109,110,111,117,126,127,128,129,130,131,132,133,197,261,269,273,276,278,279,280,292],[96,97,197,261,269,273,276,278,279,280,292],[84,94,197,261,269,273,276,278,279,280,292],[84,197,261,269,273,276,278,279,280,292],[96,197,261,269,273,276,278,279,280,292],[109,197,261,269,273,276,278,279,280,292],[102,103,197,261,269,273,276,278,279,280,292],[85,101,102,103,104,105,106,107,108,197,261,269,273,276,278,279,280,292],[85,101,197,261,269,273,276,278,279,280,292],[85,101,103,197,261,269,273,276,278,279,280,292],[85,197,261,269,273,276,278,279,280,292],[85,102,103,197,261,269,273,276,278,279,280,292],[87,197,261,269,273,276,278,279,280,292],[71,87,88,89,90,197,261,269,273,276,278,279,280,292],[87,89,197,261,269,273,276,278,279,280,292],[87,88,197,261,269,273,276,278,279,280,292],[87,90,197,261,269,273,276,278,279,280,292],[112,197,261,269,273,276,278,279,280,292],[116,119,121,125,197,261,269,273,276,278,279,280,292],[116,197,261,269,273,276,278,279,280,292],[112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,197,261,269,273,276,278,279,280,292],[130,197,261,269,273,276,278,279,280,292],[64,77,197,261,269,273,276,278,279,280,292],[76,197,261,269,273,276,278,279,280,292],[153,197,261,269,273,276,278,279,280,292],[153,154,155,156,157,197,261,269,273,276,278,279,280,292],[134,197,261,269,273,276,278,279,280,292],[135,144,145,146,147,148,149,150,197,261,269,273,276,278,279,280,292],[137,138,139,140,141,142,143,151,197,261,269,273,276,278,279,280,292],[192,197,261,269,273,276,278,279,280,292,320],[134,192,193,194,197,261,266,269,273,276,278,279,280,292,321],[192,193,197,261,269,273,276,278,279,280,292],[135,197,261,269,273,276,278,279,280,292],[136,152,158,161,180,181,182,197,261,262,269,273,276,278,279,280,283,284,292],[136,181,182,183,184,185,186,187,188,189,190,191,192,193,194,197,261,269,273,276,278,279,280,292,321,322,323],[181,197,261,269,273,276,278,279,280,292],[136,161,180,181,184,185,186,187,197,261,269,273,276,278,279,280,292],[134,136,161,180,181,183,184,188,189,197,261,269,273,276,278,279,280,292],[181,197,261,269,273,276,278,279,280,284,292],[181,182,197,261,269,273,276,278,279,280,292],[159,161,167,197,261,269,273,276,278,279,280,292],[159,161,197,261,269,273,276,278,279,280,292],[161,197,261,269,273,276,278,279,280,292],[146,197,261,269,273,276,278,279,280,292],[174,197,261,269,273,276,278,279,280,292],[159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,197,261,269,273,276,278,279,280,292],[83,159,161,170,197,261,269,273,276,278,279,280,292],[83,159,197,261,269,273,276,278,279,280,292],[159,197,261,269,273,276,278,279,280,292],[83,197,261,269,273,276,278,279,280,292],[83,161,171,197,261,269,273,276,278,279,280,292]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"1bcfd1f9c0baa04e176cf300093ad641dd49ae4f99481f7ffa4abbb88af7e886","impliedFormat":99},{"version":"302d6a0a33b08822e5af916971f3bcd231a1b22fff85b08754fc1c028ee4ceed","impliedFormat":99},{"version":"47f2e8dd08c6e277317bdbe722c465f0d8404b8c99e1b8c949ff1efcdcc810fb","impliedFormat":99},{"version":"acd6e947e0b617c0304fd553116b0478403cc293d55393a543f30409a9a1cfe3","impliedFormat":99},{"version":"c3b03583b5b3f3f3d8f3c950ac8b5280634fb1317cbf61f325443db0706b0367","impliedFormat":99},{"version":"7d5c53f76c80bc133222c86ac81d9712aedcd850f480617f5e2c5a0b660dcfab","impliedFormat":99},{"version":"4610a95f390d9ba0eec6a38431ade549737978611aacc22be6c39118a779dcf7","impliedFormat":99},{"version":"bed3be9bdaec349f66ba9c52dc2ba4c91a53d859df803f63155d66a585b4764c","impliedFormat":99},{"version":"3ab6f269152e224430b921fb1b73bb38b9209e61a0f6d25e6a5c748b455307cd","impliedFormat":99},{"version":"44443b9dab3558132a45b3cb3a96f5314f3f9e8cb39577d1a63f56838af944d0","impliedFormat":99},{"version":"fd18b4712cc8a74a0ac9d1101603b589316d934b56eedb461e6ba98f14cea042","impliedFormat":99},{"version":"2b3b451ba416fefa9e1db59b4daf748dc80799f15f3989da52b5753a57001de4","impliedFormat":99},{"version":"e2299c5b1f489741845d45198d1a76c7661ab3cfbdd812f54f224e8f18fe816f","impliedFormat":99},{"version":"263b8fbfa1619f4a2975eb073e17dbca57f71a309218729d25f0ad7fa015e80d","impliedFormat":99},{"version":"a702d859dfb3a7b859a792243846eb70559c39fb241e30d5f56bbb61118dc50c","impliedFormat":99},{"version":"2a80d65784d4c1715c671ad1dcb835690925abbc6369935d994aeddb4cd8688b","impliedFormat":99},{"version":"f525f57c393355adaf6a6d5cd6b9004a5cba85cfbdf2cfda123f901e4ab3b1ce","impliedFormat":99},{"version":"ce6806626f0ce19d63e1234250d385936e57c27db2a5c2748f37745789eca7de","impliedFormat":99},{"version":"cbe6fabec7c7c87b9bfeea5d742cc0d81edaa1c8f261e90a2b1671fa55a0e314","impliedFormat":99},{"version":"dfde3dea41340127c305a211a5686b5254f11f40387c15a6401076c0d521a6a9","impliedFormat":99},{"version":"ab1819219bc5fa3c72da10430dc1f7be10800ab623f744e793c751f8ffdc3085","impliedFormat":99},{"version":"14187787ce796b55885c370dca64e05ee8f98d63a6a48fa1895b8768061d0786","impliedFormat":99},{"version":"a1ebbfa8fd6b9441b9ff266e478b05b9ba13c63b68a0439337ef53fc5568c8f5","impliedFormat":99},{"version":"8fc48fa76a652bfbf3bcfa9517e2373974b54fb0e61cd85da3e9b9914bc4da36","impliedFormat":99},{"version":"cfacb6c5b29f3c8f81194ca5c6c1d5a87108a2ec1df233f974b279a58b3c15e3","impliedFormat":99},{"version":"808e756ace76d4d66c496ea677521977c330a76b6b0eec6a2f46a5a078a209cb","impliedFormat":99},{"version":"eb2985f16fc6d56b60ce252daa15c3638420a5dc3398d31363ab4283ad5c5afc","impliedFormat":99},{"version":"89ac3a6058857e2f3ebe38858e08801ed3c99c1b3fb32474abe2f4f5383e83ec","impliedFormat":99},{"version":"e1f993bd70ca91c515810ed90d58fd5d57cf1d9fe66eaa40c2d518a7991518bc","impliedFormat":99},{"version":"12aa9cf42db98788dacf007fddeb86ec2cb17ceb6adc93239039879ca39e8547","impliedFormat":99},{"version":"05e92214ec30358542c8bfdc6cdbbc3659bde6a6e4c7e9ab326d9c0ce55b56ad","impliedFormat":99},{"version":"be4c75215919c3ed6cf3d2cef5e313450c5a3b00b8e5f5595ecf2998d998b73a","impliedFormat":99},{"version":"de7b28b8ed3ceed81d6cad1bbedb58589d1dfad9c56dae50bab9bd16f5593cdf","impliedFormat":99},{"version":"40735d614fb340b075a922f55a8be57f69cd1c592e1d35ea8aaaedbea322f516","impliedFormat":99},{"version":"27ff0f33e7d207dff8a9ea84980b886787fc0d3b5b6f6f0267df191daeb5d747","impliedFormat":99},{"version":"27fea1bb8375433afd082d87651fbe74e03c3d9748f3efdede48cd3b8a12d969","impliedFormat":99},{"version":"b8280bf46a14802fcb5d2db9ea27b0911926848464399c9f4b29a9a8ce84f941","impliedFormat":99},{"version":"af88c5087fcab821259fedea7eb6924d3c0e627e04ea4f131650cc3473e57baf","impliedFormat":99},{"version":"9c4b3a7747f43b70030f53f1e058f53a765f4cae9a62779629d193a1d48281d4","impliedFormat":99},{"version":"a40b4c55a5d24965a0948b02a74c7b1c772d6c62824595a5324a310afe1569d6","impliedFormat":99},{"version":"170837accdba3f0567fe1c6fb278ce3949317bb5404a26f7cc5648181f421add","impliedFormat":99},{"version":"1d794adbdc230d523976786d1257203e483115edf3a2ea704fa7024e040b4dc4","impliedFormat":99},{"version":"ad8891163f0b0902e2a8b87bb63e8c5a99e2f96237e511c21abd4b642049f51d","impliedFormat":99},{"version":"99e1bcef17ff12ae645785c60b2885d3186ae8ce397c9779bbca7594aa30086e","impliedFormat":99},{"version":"ea8ae4e64942c8587f53535dedc63b29fba78db899694d8d0ec3c6a275cc33a5","impliedFormat":99},{"version":"3ddf59fa92042ab494e3f65a7f62fb9aebf97b2b69680166c95d9ce25a4e072d","impliedFormat":99},{"version":"ff6c36564ed2bdc2cbb4bae471d055c56ae6e42b8c8f976543a31bc65c103c7a","impliedFormat":99},{"version":"cc45394ddbef9f6dc1d8a674f430159356517b380c88858bc90775d895d8c397","impliedFormat":99},{"version":"d85cbbb8501835920b144c9f46389a298e22918e3b49cfa6cb72f69f44c3cd45","impliedFormat":99},{"version":"b1ba2a12f10eed78af984cbb68602f3f4a1bc29e72eb179b01435dd077850844","impliedFormat":99},{"version":"131f90a639b98a26881e192bb26fe7a60e7d36304bf9da14b7f5a5587c8ecfcc","impliedFormat":99},{"version":"f8446132046256be495bc6b2a299ce02e136c1edf61c9aeb1a795654b12a5235","impliedFormat":99},{"version":"e8c9856685fe2c90fe9396fdc00a050864920091b9d91c77fc07edb3d9d0a9f0","impliedFormat":99},{"version":"001ecf428ab7e26a92a62b14337cf2259a750c52d8803fa666bd93caeddc2197","impliedFormat":99},{"version":"5f6734fa6ee348c512f7be8aac951dba3bb488e9bb320580c12f454c75b351fd","impliedFormat":99},{"version":"5414133f27314ce2e1967356a65dca3f694e698983943088c0be01813e9d24ac","impliedFormat":99},{"version":"63947c68b17b089d6e332f0dc0e4b971673453e532497e73b5798aa47ba70087","impliedFormat":99},{"version":"172b824cde69444de299caea211f5aa003b5974f6f1287ad063bf9e4e01f6979","impliedFormat":99},{"version":"b365e9bfd9746b1ca4fcea697f247fd21c9b9d5da7d480609b3c29b25ef001d5","impliedFormat":99},{"version":"3e233d9548fb8c577a08db187b67f787f9f40ebca875054bf203b30f3f2c2d0a","impliedFormat":99},{"version":"0c67a9b79257dbf9fd391ba3926c8645b9c4915586962a96671e2aee2f7a3038","impliedFormat":99},{"version":"543458d268beb358681010e2510892594722596d2759b15f1f2b18ef12da6e47","impliedFormat":99},{"version":"482e23d5bfeb7afa7993c82e2f4a1227314efec1749a15d985016afe4f90c0dc","impliedFormat":99},{"version":"839cd128a7165e4ad7d843d2750dbc163c154d285c9f5b9746fb161a5755964e","impliedFormat":99},{"version":"ba697356344e5cd91de610e72b56ad45761077871827e58e5f6232b49fbaefed","impliedFormat":99},{"version":"b214263542e506dd143966fdc95356a06531b271a681a82aa970eb5476037a1a","impliedFormat":99},{"version":"30a3ee26489c6ffd76711504d42cba52d8b195c006675043a5df446ebe0e28a2","impliedFormat":99},{"version":"9e0f16c2bb58dc12f59adc3281bdb0bcfd208b10aae7f0c3ec39d25bba5d3ec0","impliedFormat":99},{"version":"c3286e57fcc171c673c21f556148f0ce277d75925a266e077508dc83ef0deb32","impliedFormat":99},{"version":"dd4e1883e4348448a009211cd1ddd123600993e70063137aaac112fa72b65ad9","impliedFormat":99},{"version":"0b9cda4db6fbbf8ae0f5279bca7cfeee600a1d65a92cfcd0abad0db80047bd97","impliedFormat":99},{"version":"f4c4575087f9e8982ae7fe9a07b4795460e44d56351bc60640b8f56cc67dc25a","impliedFormat":99},{"version":"587697b278817b289f3af19b593649c1a201adb9099af774585b5d8146a5665a","impliedFormat":99},{"version":"fa2b39b8ae26024d692bc5b840eb2388ce9ec0646f98def1584304c2fba46530","impliedFormat":99},{"version":"ed6b1c41d4c9accb5f9a4e2e2902a1d5a8949214dd26b05ba2028fbb2feba814","impliedFormat":99},{"version":"2ae5878eba3acbb026d8993c1d1f15a71b2e7c888c06168301dc8174e3b6da1e","signature":"497c09240603d127a06028ed1ff979d9fcaf44f70de093b0bd1d125f05185bd0","impliedFormat":99},{"version":"9bde7cc2a5cdcccbab1f236f9b2c90db91d5efff759d7dfb82e75a13bda68f6d","impliedFormat":99},{"version":"6084060e2892fe7bdb72ee21fae4043a021a15faa0dce5d6dd8a2763bca8705a","impliedFormat":99},{"version":"910e57648d3ec18ceee664b914e70749c9b6ff45b981f41991fd3ea9a687ed2b","impliedFormat":99},{"version":"6d2d9019829bdbac0bd558f9ce91d9ef0ba77c1280a9226e74bd7019a6e2afad","impliedFormat":99},{"version":"d7db1079d6391741de941c41d2afdc94ae80bf5a62e04abe7423d157deefb65d","impliedFormat":99},{"version":"e840faaac484b5d8f45d8e6fdfb1cc332c5711547050a62f97bb9d2c4ce24ffb","impliedFormat":99},{"version":"ee596924e545f61057d8f7048e8cac344c7687380162a7405765041c8b9acd41","impliedFormat":99},{"version":"3c31bd639458a66ae8535c8fd6108b6b1841f822f3490acc9b1d99789ee0e123","impliedFormat":99},{"version":"9dcedfa09d326431d8ab04a70a589c2635d10af74771fce1d0a38c19aa8a5413","impliedFormat":99},{"version":"df1c20e971e9e43f0fa8e8dd1d6c86ed6ec8e8033fb39ad8d77bd0b0ea2f3a5e","impliedFormat":99},{"version":"5a0c10d5fbf42a8458d01e85523c9e204e4bbb21c711e056aa9fdd1248819378","impliedFormat":99},{"version":"c65472096b02e35bbc84a6e305c60fd4f8b42c4992afac946bbc1b7efff8ace5","impliedFormat":99},{"version":"2ad376d3a8fec0e7d6bf47f98fe880dfce0ca1c5514a3f91578533724526410e","impliedFormat":99},{"version":"d9ae5ec18c04838d69ca3560ae39c0ff5187341df69db7a61f1e76f94b90ec8c","impliedFormat":99},{"version":"7288325c4776eb21295d8234980b19a5957648062916405b502acc8a0ee47709","impliedFormat":99},{"version":"9f8190307a3c19748e4f3a93954129f4d1edf12bece7582c4873dca45c372a63","impliedFormat":99},{"version":"cad39c224614cf55a342a32987d51464e4e43c77e0b7bf93bfdde72fde7aab09","impliedFormat":99},{"version":"fd745ead6f09fe05d67483404aa9d58301709084d78ae16dcfc52e0197a55701","impliedFormat":99},{"version":"a93346024d2fc8183d3fbbb65fb8965efb12774c4c42c992f5504aa8e8026aa4","impliedFormat":99},{"version":"823c4f14f6af36d86c4a998cbd487c0955fc51ff870aecdcbf277365606b4649","impliedFormat":99},{"version":"1f324a6daf0c3420ded99663838a31bb6cb6d3f48e6cebf29d8930125e5b03a4","impliedFormat":99},{"version":"5dfbf77bc3ca30e1e27e5fce79b35ef89cc00226573ff154fdfa857164022fa1","impliedFormat":99},{"version":"4e1444e2510de33addb33ea9fc652697229b5f9161ba5e048fe16de86288c493","impliedFormat":99},{"version":"685bca734e41ad14ac178421d6f93d122cf53851b5b3e0067368e375aefd597b","impliedFormat":99},{"version":"94dca219a63db2e418c915a0c9ae6a1f16be95d2d791a8ae7b58eb908a3d06d2","impliedFormat":99},{"version":"3222d45c9bbb414cca74b4c9fc164c4950da6e142fb509cfe4fa4f64b1d6c9b1","impliedFormat":99},{"version":"9842b8ce533406c781c90490a934e77708b3bec26e18be687c15494e7cb1bdf4","impliedFormat":99},{"version":"4dea0bb6e3e0d18b4e8cc04fff7ab9bb12d2be23607a02b893b38b90cbabe3b8","impliedFormat":99},{"version":"bf074c76479517807ae165fd7f71ba66b0609b84106faeff36a6c2b6d2107cb8","impliedFormat":99},{"version":"8f52e74fbe68143bc046cf7547b9a888d7ee4aaf19ce8bfaa67145ef45fb81db","impliedFormat":99},{"version":"48ba2cad2f18d1eec745fddaa688cb99b3722ae3f6d0f1bfcad222e63a770ecc","impliedFormat":99},{"version":"98426b1c59c9fee9aab68b871f167de01dd32d83a0c1e3054b614161210a2a69","impliedFormat":99},{"version":"bda6a5321b3843e939ca2a149fec41ce3ec5de7f631afe01a57de19d604fa8d8","impliedFormat":99},{"version":"5f13bbb63adb2291e58ccebe828855abcd5a4a2a20d12533ee34eccc8b6f1cfa","impliedFormat":99},{"version":"2195f6e14c7b12076b6c2b7ca28e8efb7c741ff530e4dbeb4f0338d91c06f5db","impliedFormat":99},{"version":"7a0a58a0b0bf78126f86c6afe1b783591df5bb3420eeac0de020116d3daa2a44","impliedFormat":99},{"version":"0297d09353101f3a3ef22b1b143f341df91f357cf624b310e0677bd2acd4ef77","impliedFormat":99},{"version":"e83d52c29d3a314d93830125fce63ec2c1bc0ff0939f22cdbb869a3ea9fd9b99","impliedFormat":99},{"version":"49ef9c2da77931ed8f745a02f28d9f6a6eb91560998e32af26b125b7dea2efed","impliedFormat":99},{"version":"4a939b7e78c5005d8c4f6f6b74d62fdac6dc21f3403159f1c11fcc92ebcb1a7d","impliedFormat":99},{"version":"70c8702eaa2e3854e2326505a3f9748d642a6a63cd285b12f5ab2b59f3ba4192","impliedFormat":99},{"version":"388469157edf0cbd80b4eb6696c7dd54016e76fbb95d356dc48d6ec15d058f61","impliedFormat":99},{"version":"efbe2d8759851fd89b6f059532ee6b4ff9ff542b93ff07d11d65c9f0e2216592","impliedFormat":99},{"version":"54166f45289e94f58ea6eadb310189f8e59a863615f082d109082dc232970da6","impliedFormat":99},{"version":"aaf2ca2e121324973b768e90d07865664c098dbda40c1f664d1b45b5a21e2176","signature":"124288f7ec776f57bfda27867fcf7753f5c985d4bc12dcaf4524c2efb9daacbf","impliedFormat":99},{"version":"bdd065a4c563c730792a240868603482f24e222402798cef071dd55a6543a5a0","signature":"98f39385714860cfb97080755692e8b46feb67f0499fe5546f2bf5de30630e54","impliedFormat":99},{"version":"b3309c47b0ab23d5344b4b1bdd1b658dd33799d76d50e486aed0e65cb7a31ae5","signature":"ec5c6079588b9f5c527365da263405e2ad944e84a7c0b9bb0472473deb5596b5","impliedFormat":99},{"version":"0f98bce349c79cf24a6cc079cb9d7f703f671841b4a064550e95e2ffc5aae24d","signature":"111a930d2c0ca81ee0a1eeff68c4ebfec0a40acf711a369cb071756eef668f4e","impliedFormat":99},{"version":"c20887d687d5c8a49bcf9d9a6c9663ba4557861e05e82ddf97f7be47b7d4d2bc","signature":"1d747c0a6e7ca15ad6eb46bc19bcaa6e89a5fedd45ec2809c18f1f4e2523d835","impliedFormat":99},{"version":"6bc6a5d4e92a5778193226a2fead30d6cd21b223bfac4db827cd84a494ba72b3","signature":"827c212473f61a6beb3962a266df644fca8c4aab73e2bb857fa0f1d2bfac421f","impliedFormat":99},{"version":"a13f432cfbbbafc0fa96c09a7dea90f446d258029dbcd4c83d76a2bf70b0324e","signature":"83e7e0dd02bf3c9c210c35ae06443359776f57d65e9e9309006e3ce83cbcaac1","impliedFormat":99},{"version":"480814fefeab81009436a912c84c310eb78221d6871459f6780b296cd015fca3","signature":"940a313c6d1e83287034d863f0718bef3cdcf7e5b337d665b7146795c8da9aff","impliedFormat":99},{"version":"2da8bc9ec24d9a5867f383e02ffa9e86196afedb1f170f88fcaf11b69b44dbf7","signature":"262d85bb4d3b12769df9b38c8b7e5d29258d7d92382fae910a86a1f7d7e10d38","impliedFormat":99},{"version":"cd8cf111bcffde597b5b7adc454328a349f144c8011f8acaae7eeb47108a40a9","signature":"b61cabb93d33d65fea6890afa6ca4ef30e9cbcc267de54270255c61b7db2173b","impliedFormat":99},{"version":"ae60d1b193d233976f27fe2529da835fb85b27f756cc388bef66e63639ac88dc","signature":"e0981d6867ae42b0793f02f200889c604f7a140c8f25523a6d8387fdd37053cb","impliedFormat":99},{"version":"486e64d6625662b36659b2e75b11dbad2ae994febf0bea468104f9d5daacd59f","signature":"052250d0099bc43c43bac908879d58e02ceaccf70468a0890114ccc7b636d804","impliedFormat":99},{"version":"a9b2a7f8edc0f107c6a43b73c61cff1c1eec3fc85d382a9129d8507335d3eeab","signature":"d8a98aab7dc4dbd385096c119049960e6cf859b96cca515a00a655c249ed6aca","impliedFormat":99},{"version":"1011ebb318b7859417f7789f7f5c36f081f83669a9583d5c15c72af884f39ea6","signature":"e74b421b56d1eab0b352d02f15582c1da8dadebd28af593305b417b1c321712b","impliedFormat":99},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"21adf13435b9b748529c8cedf80f884e5130b9684188120a686cd2b26a2059c7","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"0ecd58f413f9bc3b7d4383eae31b0c8fc576985cd7404d6f99f8c643543ade74","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"d33ce35e3f9cfcc1d94eca415bdd3bde94d5b153ffdd33e6c4455c029986c630","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"4dc59f6e1dbf3d5f66660fceabe6c174d3261b37b696ae1854f0dbaf255fc753","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"114f493b30f364255290472111b5a4791d5902c308645670cd0401429cbc6930","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"c8b8968311ec4e5e97b7b5fb8a65efaba455db9bdcfd7fff7fb15f6e317bfba0","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"aecbf1d9e6a18dab7d92ef8a89a1444b47e1eb6134cb2bb776a26d55ff58c29a","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"1fede9296beac11ce8e6b425396a1791f64341f2be85deebb6286faf6e16306e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce697b6a251d9cad53998c7fd3098072df883b525ec45d83530e434dc6d80dc6","impliedFormat":1},{"version":"719412f054e6ecc35489462c9a21bab0323d173a7d04e55b0ace4b5d86fbeb07","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"3db996ecdee7aabecc5385976cc07eb66216034a273c07b17d1a85292e9bab0c","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"5ff4433a2deae4f85ab1377e90a7554ce6b47ae51c69a84ca30a6e22fae85834","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"c1fa52b3d014001e8662fa2669d90ea15373958a288e3b83a3b621733d25292a","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"5e66972e83eb4dc7123939bf816e6cbd9ad81af5552db1cab84e6bd9c64d2ecc","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"8413d0641f293aed551c7464615b770d34a02dedede889b9591172287d68e773","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"1b241e24f3227d078c06aeda6e050187ad59a4e591f4467abed44d92b084e08d","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"7fde0e1be5c8be204ffbf428abfcf01da2eb0f130e1bc3f539eb7275f4fd1f58","impliedFormat":1},{"version":"e284328553df5f425a5d33d36a0c3fa66b46af9d097cad6f4d2e8696dfdeb0f1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f36b3fbe2be150a9ca140da48593f21e6a8172004f92ddc549b43efec39f3e54","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"016b29bf4926b80255a108c53a1451717350059da04fcae64d1075f5e93bbb39","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"1c4f139ade4f6ebf45463505f8155173e5d7a5305e50e0aae0a5e712d6ff3b48","impliedFormat":1},{"version":"e16b319e5aca1031168de823c4946ff8e29629c4c8cc0ec0fcfe2a8ab2155043","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"2c3c5c0f54055e87640f5d233716fd889f3034fc7911d603b642369b0dbeb2a7","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"1c9e5b1a17b1fc9b3711fb36e0690421261ab2880f15b145155b5b2ba2ab6c2d","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"afa1c49f8e559e413d57343339db857d2a8159435cf9cf7d4deb41718fff1b88","impliedFormat":1},{"version":"6953d7597831d0860c7034cf4f0419687d263b6b98a4b32e37ce6d49615c36e2","impliedFormat":1},{"version":"316f1486e15cbf7896425f0a16dfe12d447dd57cfb3244b8b119c77df870858f","impliedFormat":99},{"version":"71cdc5e7b5f0b26188f83222492dd0f6e4877cd58bfc3ecebe520d740edce6ae","signature":"62b646a2f93fbfa3947e4fdff72cf5715fca6be70762da26de19df8703529630","impliedFormat":99},{"version":"32eefac8166c7c9aad007d7ab08d76b739f54b4515536c4111e390c53fde8dc9","signature":"87e35332b2b9b73f719151592be46d958b587e4a111986a4742006968482a43b","impliedFormat":99},{"version":"54b5946bee565755ec9258d9a7295ada35c5da2c88e1c8c77c29f2839258731d","signature":"667e66f182eaf75a3292e39bfa6ad356e400c9e4b0a72bb0a9052feda650767e","impliedFormat":99},{"version":"eb7c9131474c1292f174c5b6083135f55150cc43679853ff98b3c244a45c5394","signature":"026de15732d049a1598a379fba6c526d9af5cddd6d9712a9aab16d24a2034935","impliedFormat":99}],"root":[136,[181,194],[321,324]],"options":{"composite":true,"declaration":true,"declarationMap":true,"exactOptionalPropertyTypes":true,"module":199,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[258,1],[259,1],[260,2],[197,3],[261,4],[262,5],[263,6],[195,7],[264,8],[265,9],[266,10],[267,11],[268,12],[269,13],[270,13],[271,14],[272,15],[273,16],[274,17],[198,7],[196,7],[275,18],[276,19],[277,20],[319,21],[278,22],[279,23],[280,22],[281,24],[282,25],[283,26],[284,27],[285,27],[286,27],[287,28],[288,29],[289,30],[290,31],[291,32],[292,33],[293,33],[294,34],[295,7],[296,7],[297,35],[298,36],[299,37],[300,35],[301,38],[302,39],[303,40],[304,41],[305,42],[306,43],[307,44],[308,45],[309,46],[310,47],[311,48],[312,49],[313,50],[314,51],[315,52],[199,22],[200,7],[201,53],[202,54],[203,7],[204,55],[205,7],[249,56],[250,57],[251,58],[252,58],[253,59],[254,7],[255,4],[256,60],[257,57],[316,61],[317,62],[318,63],[320,64],[59,7],[60,7],[10,7],[12,7],[11,7],[2,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[20,7],[3,7],[21,7],[22,7],[4,7],[23,7],[27,7],[24,7],[25,7],[26,7],[28,7],[29,7],[30,7],[5,7],[31,7],[32,7],[33,7],[34,7],[6,7],[38,7],[35,7],[36,7],[37,7],[39,7],[7,7],[40,7],[45,7],[46,7],[41,7],[42,7],[43,7],[44,7],[8,7],[50,7],[47,7],[48,7],[49,7],[51,7],[9,7],[52,7],[53,7],[54,7],[56,7],[55,7],[57,7],[1,7],[58,7],[224,65],[237,66],[221,67],[238,68],[247,69],[212,70],[213,71],[211,72],[246,73],[241,74],[245,75],[215,76],[234,77],[214,78],[244,79],[209,80],[210,74],[216,81],[217,7],[223,82],[220,81],[207,83],[248,84],[239,85],[227,86],[226,81],[228,87],[231,88],[225,89],[229,90],[242,73],[218,91],[219,92],[232,93],[208,68],[236,94],[235,81],[222,92],[230,95],[233,96],[240,7],[206,7],[243,97],[92,98],[80,99],[61,7],[83,7],[111,7],[70,100],[72,101],[67,7],[68,102],[73,103],[66,7],[75,7],[65,7],[74,104],[78,105],[82,106],[71,7],[62,107],[134,108],[69,7],[98,109],[97,110],[95,7],[94,111],[100,112],[99,7],[96,110],[84,7],[107,113],[106,114],[109,115],[104,114],[102,116],[108,117],[101,118],[105,119],[103,116],[110,118],[85,7],[132,120],[91,121],[90,122],[133,120],[89,123],[88,124],[87,7],[113,7],[123,125],[126,126],[118,125],[117,127],[115,125],[122,125],[124,125],[112,7],[127,128],[121,125],[120,125],[114,125],[116,125],[125,7],[119,125],[131,129],[130,7],[93,7],[76,105],[79,130],[81,99],[77,131],[63,7],[86,7],[129,7],[128,7],[64,7],[154,132],[158,133],[156,132],[157,132],[155,132],[153,134],[145,7],[144,7],[147,134],[151,135],[150,7],[149,7],[135,134],[148,7],[146,7],[141,7],[152,136],[143,7],[138,134],[139,7],[142,7],[140,7],[137,7],[321,137],[192,7],[322,138],[193,7],[194,139],[136,140],[183,141],[324,142],[185,143],[186,7],[187,143],[188,144],[190,145],[182,146],[189,134],[191,147],[181,134],[323,7],[184,7],[172,7],[168,148],[165,149],[166,149],[179,150],[160,151],[161,7],[177,152],[164,7],[176,152],[180,153],[162,7],[163,150],[171,154],[170,155],[167,156],[173,157],[174,158],[169,156],[175,152],[159,134],[178,7]],"latestChangedDtsFile":"./index.d.ts","version":"6.0.3"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { WebSocket } from "ws";
|
|
2
|
+
export declare const PERMITTED_CDP_METHODS: ReadonlySet<string>;
|
|
3
|
+
export interface CdpClientOptions {
|
|
4
|
+
readonly timeoutMs?: number;
|
|
5
|
+
readonly socketFactory?: (url: string) => WebSocket;
|
|
6
|
+
}
|
|
7
|
+
export type CdpEventListener = (event: {
|
|
8
|
+
readonly method: string;
|
|
9
|
+
readonly params: unknown;
|
|
10
|
+
readonly sessionId?: string;
|
|
11
|
+
}) => void;
|
|
12
|
+
export type CdpCloseListener = (reason: string) => void;
|
|
13
|
+
export declare class CdpClient {
|
|
14
|
+
private readonly socket;
|
|
15
|
+
private readonly timeoutMs;
|
|
16
|
+
private readonly pending;
|
|
17
|
+
private readonly listeners;
|
|
18
|
+
private readonly closeListeners;
|
|
19
|
+
private nextId;
|
|
20
|
+
private connectPromise;
|
|
21
|
+
private closed;
|
|
22
|
+
private closeReason;
|
|
23
|
+
constructor(url: string, options?: CdpClientOptions);
|
|
24
|
+
connect(): Promise<void>;
|
|
25
|
+
onEvent(listener: CdpEventListener): () => void;
|
|
26
|
+
onClose(listener: CdpCloseListener): () => void;
|
|
27
|
+
send<T = unknown>(method: string, params?: Record<string, unknown>, sessionId?: string): Promise<T>;
|
|
28
|
+
close(): void;
|
|
29
|
+
isClosed(): boolean;
|
|
30
|
+
closeCause(): string | undefined;
|
|
31
|
+
private handleMessage;
|
|
32
|
+
private dispatchEvent;
|
|
33
|
+
private resolvePending;
|
|
34
|
+
private handleSocketClosed;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=cdp-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp-client.d.ts","sourceRoot":"","sources":["../../src/browser/cdp-client.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAgB,MAAM,IAAI,CAAC;AAI7C,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAWpD,CAAC;AAIH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,CAAC;CACrD;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,KAAK,IAAI,CAAC;AACX,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;AAuCxD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;IAC9D,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAqB;gBAErB,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB;IAevD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBxB,OAAO,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAO/C,OAAO,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAOzC,IAAI,CAAC,CAAC,GAAG,OAAO,EAC3B,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC;IAsCN,KAAK,IAAI,IAAI;IAUb,QAAQ,IAAI,OAAO;IAInB,UAAU,IAAI,MAAM,GAAG,SAAS;IAIvC,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,kBAAkB;CAiB3B"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// Thin CDP JSON-RPC client over the existing `ws` runtime dep (ADR-0017 D1, D4). NOT a
|
|
2
|
+
// general-purpose CDP library: a hard-coded permit list gates `send` so a server bug cannot send
|
|
3
|
+
// `Runtime.evaluate` or any cookie-reading method. Pending requests are correlated by an
|
|
4
|
+
// incrementing integer `id`; the in-process id allocator is private so a CDP response cannot spoof
|
|
5
|
+
// the id of a request it didn't trigger.
|
|
6
|
+
import { WebSocket } from "ws";
|
|
7
|
+
import { BrowserToolError } from "./errors.js";
|
|
8
|
+
// ADR-0017 D4 — exact permit list. New methods require an ADR amendment, not a code-only patch.
|
|
9
|
+
export const PERMITTED_CDP_METHODS = new Set([
|
|
10
|
+
"Target.createTarget",
|
|
11
|
+
"Target.attachToTarget",
|
|
12
|
+
"Target.closeTarget",
|
|
13
|
+
"Page.enable",
|
|
14
|
+
"Page.navigate",
|
|
15
|
+
"Page.stopLoading",
|
|
16
|
+
"Page.captureScreenshot",
|
|
17
|
+
"DOM.getDocument",
|
|
18
|
+
"DOM.getOuterHTML",
|
|
19
|
+
"Browser.getVersion",
|
|
20
|
+
]);
|
|
21
|
+
const DEFAULT_CDP_TIMEOUT_MS = 10_000;
|
|
22
|
+
function isCdpFrame(value) {
|
|
23
|
+
if (typeof value !== "object" || value === null)
|
|
24
|
+
return false;
|
|
25
|
+
const rec = value;
|
|
26
|
+
return typeof rec.id === "number" || typeof rec.method === "string";
|
|
27
|
+
}
|
|
28
|
+
function parseCdpText(text) {
|
|
29
|
+
let parsed;
|
|
30
|
+
try {
|
|
31
|
+
parsed = JSON.parse(text);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
return isCdpFrame(parsed) ? parsed : undefined;
|
|
37
|
+
}
|
|
38
|
+
function rawDataToText(data) {
|
|
39
|
+
if (typeof data === "string")
|
|
40
|
+
return data;
|
|
41
|
+
if (Buffer.isBuffer(data))
|
|
42
|
+
return data.toString("utf8");
|
|
43
|
+
if (Array.isArray(data))
|
|
44
|
+
return Buffer.concat(data).toString("utf8");
|
|
45
|
+
return Buffer.from(data).toString("utf8");
|
|
46
|
+
}
|
|
47
|
+
export class CdpClient {
|
|
48
|
+
socket;
|
|
49
|
+
timeoutMs;
|
|
50
|
+
pending = new Map();
|
|
51
|
+
listeners = new Set();
|
|
52
|
+
closeListeners = new Set();
|
|
53
|
+
nextId = 1;
|
|
54
|
+
connectPromise;
|
|
55
|
+
closed = false;
|
|
56
|
+
closeReason;
|
|
57
|
+
constructor(url, options = {}) {
|
|
58
|
+
this.timeoutMs = options.timeoutMs ?? DEFAULT_CDP_TIMEOUT_MS;
|
|
59
|
+
const factory = options.socketFactory ?? ((target) => new WebSocket(target));
|
|
60
|
+
this.socket = factory(url);
|
|
61
|
+
this.socket.on("message", (data, isBinary) => {
|
|
62
|
+
this.handleMessage(data, isBinary);
|
|
63
|
+
});
|
|
64
|
+
this.socket.on("close", () => {
|
|
65
|
+
this.handleSocketClosed("chrome-disconnected");
|
|
66
|
+
});
|
|
67
|
+
this.socket.on("error", () => {
|
|
68
|
+
this.handleSocketClosed("chrome-disconnected");
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
connect() {
|
|
72
|
+
if (this.connectPromise !== undefined)
|
|
73
|
+
return this.connectPromise;
|
|
74
|
+
this.connectPromise = new Promise((resolve, reject) => {
|
|
75
|
+
if (this.socket.readyState === this.socket.OPEN) {
|
|
76
|
+
resolve();
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const timer = setTimeout(() => {
|
|
80
|
+
reject(new BrowserToolError("CDP_TIMEOUT", "CDP connection did not open in time."));
|
|
81
|
+
}, this.timeoutMs);
|
|
82
|
+
this.socket.once("open", () => {
|
|
83
|
+
clearTimeout(timer);
|
|
84
|
+
resolve();
|
|
85
|
+
});
|
|
86
|
+
this.socket.once("error", (err) => {
|
|
87
|
+
clearTimeout(timer);
|
|
88
|
+
reject(new BrowserToolError("CHROME_UNREACHABLE", `CDP connection failed: ${err.message}`));
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
return this.connectPromise;
|
|
92
|
+
}
|
|
93
|
+
onEvent(listener) {
|
|
94
|
+
this.listeners.add(listener);
|
|
95
|
+
return () => {
|
|
96
|
+
this.listeners.delete(listener);
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
onClose(listener) {
|
|
100
|
+
this.closeListeners.add(listener);
|
|
101
|
+
return () => {
|
|
102
|
+
this.closeListeners.delete(listener);
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
async send(method, params = {}, sessionId) {
|
|
106
|
+
if (!PERMITTED_CDP_METHODS.has(method)) {
|
|
107
|
+
throw new BrowserToolError("CDP_METHOD_FORBIDDEN", "The requested CDP method is not permitted.");
|
|
108
|
+
}
|
|
109
|
+
if (this.closed) {
|
|
110
|
+
throw new BrowserToolError("TARGET_CLOSED", "CDP connection is closed.");
|
|
111
|
+
}
|
|
112
|
+
await this.connect();
|
|
113
|
+
const id = this.nextId;
|
|
114
|
+
this.nextId += 1;
|
|
115
|
+
return new Promise((resolve, reject) => {
|
|
116
|
+
const timer = setTimeout(() => {
|
|
117
|
+
this.pending.delete(id);
|
|
118
|
+
reject(new BrowserToolError("CDP_TIMEOUT", "CDP response did not arrive in time."));
|
|
119
|
+
}, this.timeoutMs);
|
|
120
|
+
this.pending.set(id, {
|
|
121
|
+
resolve: (value) => {
|
|
122
|
+
resolve(value);
|
|
123
|
+
},
|
|
124
|
+
reject,
|
|
125
|
+
timer,
|
|
126
|
+
});
|
|
127
|
+
const frame = sessionId === undefined ? { id, method, params } : { id, method, params, sessionId };
|
|
128
|
+
try {
|
|
129
|
+
this.socket.send(JSON.stringify(frame));
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
this.pending.delete(id);
|
|
133
|
+
clearTimeout(timer);
|
|
134
|
+
const message = err instanceof Error ? err.message : "send failed";
|
|
135
|
+
reject(new BrowserToolError("CHROME_UNREACHABLE", `CDP send failed: ${message}`));
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
close() {
|
|
140
|
+
if (this.closed)
|
|
141
|
+
return;
|
|
142
|
+
this.handleSocketClosed("explicit");
|
|
143
|
+
try {
|
|
144
|
+
this.socket.close();
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// The underlying socket may already be torn down; treat as idempotent.
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
isClosed() {
|
|
151
|
+
return this.closed;
|
|
152
|
+
}
|
|
153
|
+
closeCause() {
|
|
154
|
+
return this.closeReason;
|
|
155
|
+
}
|
|
156
|
+
handleMessage(data, isBinary) {
|
|
157
|
+
if (isBinary)
|
|
158
|
+
return;
|
|
159
|
+
const parsed = parseCdpText(rawDataToText(data));
|
|
160
|
+
if (parsed === undefined)
|
|
161
|
+
return;
|
|
162
|
+
if ("id" in parsed && typeof parsed.id === "number") {
|
|
163
|
+
this.resolvePending(parsed);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if ("method" in parsed && typeof parsed.method === "string") {
|
|
167
|
+
this.dispatchEvent(parsed);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
dispatchEvent(frame) {
|
|
171
|
+
const listenerEvent = {
|
|
172
|
+
method: frame.method,
|
|
173
|
+
params: frame.params ?? {},
|
|
174
|
+
...(typeof frame.sessionId === "string" ? { sessionId: frame.sessionId } : {}),
|
|
175
|
+
};
|
|
176
|
+
for (const listener of [...this.listeners]) {
|
|
177
|
+
try {
|
|
178
|
+
listener(listenerEvent);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// A listener throwing must not stop event dispatch to other subscribers.
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
resolvePending(frame) {
|
|
186
|
+
const pending = this.pending.get(frame.id);
|
|
187
|
+
if (pending === undefined)
|
|
188
|
+
return;
|
|
189
|
+
this.pending.delete(frame.id);
|
|
190
|
+
clearTimeout(pending.timer);
|
|
191
|
+
if (frame.error !== undefined) {
|
|
192
|
+
pending.reject(new BrowserToolError("CDP_METHOD_FORBIDDEN",
|
|
193
|
+
// Static message — the raw Chrome error may contain paths or session IDs.
|
|
194
|
+
"Chrome rejected a CDP method."));
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
pending.resolve(frame.result ?? {});
|
|
198
|
+
}
|
|
199
|
+
handleSocketClosed(reason) {
|
|
200
|
+
if (this.closed)
|
|
201
|
+
return;
|
|
202
|
+
this.closed = true;
|
|
203
|
+
this.closeReason = reason;
|
|
204
|
+
for (const [, pending] of this.pending) {
|
|
205
|
+
clearTimeout(pending.timer);
|
|
206
|
+
pending.reject(new BrowserToolError("TARGET_CLOSED", "CDP connection closed."));
|
|
207
|
+
}
|
|
208
|
+
this.pending.clear();
|
|
209
|
+
for (const listener of [...this.closeListeners]) {
|
|
210
|
+
try {
|
|
211
|
+
listener(reason);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
// A close listener throwing must not stop cleanup notifications.
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare const BROWSER_ERROR_CODES: {
|
|
2
|
+
readonly CHROME_UNREACHABLE: "CHROME_UNREACHABLE";
|
|
3
|
+
readonly CHROME_VERSION_MISMATCH: "CHROME_VERSION_MISMATCH";
|
|
4
|
+
readonly SESSION_NOT_FOUND: "SESSION_NOT_FOUND";
|
|
5
|
+
readonly SESSION_LIMIT_EXCEEDED: "SESSION_LIMIT_EXCEEDED";
|
|
6
|
+
readonly ORIGIN_NOT_ALLOWED: "ORIGIN_NOT_ALLOWED";
|
|
7
|
+
readonly SCHEME_NOT_ALLOWED: "SCHEME_NOT_ALLOWED";
|
|
8
|
+
readonly TARGET_CLOSED: "TARGET_CLOSED";
|
|
9
|
+
readonly CDP_TIMEOUT: "CDP_TIMEOUT";
|
|
10
|
+
readonly SCREENSHOT_TOO_LARGE: "SCREENSHOT_TOO_LARGE";
|
|
11
|
+
readonly CONTENT_TOO_LARGE: "CONTENT_TOO_LARGE";
|
|
12
|
+
readonly CDP_METHOD_FORBIDDEN: "CDP_METHOD_FORBIDDEN";
|
|
13
|
+
readonly CDP_TRANSPORT_REFUSED: "CDP_TRANSPORT_REFUSED";
|
|
14
|
+
readonly BAD_PORT: "BAD_PORT";
|
|
15
|
+
readonly BAD_URL: "BAD_URL";
|
|
16
|
+
readonly BAD_REQUEST: "BAD_REQUEST";
|
|
17
|
+
readonly NO_PENDING_SCREENSHOT: "NO_PENDING_SCREENSHOT";
|
|
18
|
+
readonly PAYLOAD_TOO_LARGE: "PAYLOAD_TOO_LARGE";
|
|
19
|
+
readonly SIDE_FILE_WRITER_MISSING: "SIDE_FILE_WRITER_MISSING";
|
|
20
|
+
};
|
|
21
|
+
export type BrowserErrorCode = (typeof BROWSER_ERROR_CODES)[keyof typeof BROWSER_ERROR_CODES];
|
|
22
|
+
export declare class BrowserToolError extends Error {
|
|
23
|
+
readonly code: BrowserErrorCode;
|
|
24
|
+
readonly status: number;
|
|
25
|
+
constructor(code: BrowserErrorCode, message: string);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/browser/errors.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;CAqBtB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,OAAO,mBAAmB,CAAC,CAAC;AA6B9F,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAgB,IAAI,EAAE,gBAAgB,CAAC;IACvC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM;CAM3D"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Typed failure modes for the browser tool (ADR-0017 D10). Callers switch on `code`, never on
|
|
2
|
+
// message — messages are static strings that never leak filesystem paths or raw Chrome diagnostics
|
|
3
|
+
// to the UI.
|
|
4
|
+
export const BROWSER_ERROR_CODES = {
|
|
5
|
+
CHROME_UNREACHABLE: "CHROME_UNREACHABLE",
|
|
6
|
+
CHROME_VERSION_MISMATCH: "CHROME_VERSION_MISMATCH",
|
|
7
|
+
SESSION_NOT_FOUND: "SESSION_NOT_FOUND",
|
|
8
|
+
SESSION_LIMIT_EXCEEDED: "SESSION_LIMIT_EXCEEDED",
|
|
9
|
+
ORIGIN_NOT_ALLOWED: "ORIGIN_NOT_ALLOWED",
|
|
10
|
+
SCHEME_NOT_ALLOWED: "SCHEME_NOT_ALLOWED",
|
|
11
|
+
TARGET_CLOSED: "TARGET_CLOSED",
|
|
12
|
+
CDP_TIMEOUT: "CDP_TIMEOUT",
|
|
13
|
+
SCREENSHOT_TOO_LARGE: "SCREENSHOT_TOO_LARGE",
|
|
14
|
+
CONTENT_TOO_LARGE: "CONTENT_TOO_LARGE",
|
|
15
|
+
CDP_METHOD_FORBIDDEN: "CDP_METHOD_FORBIDDEN",
|
|
16
|
+
CDP_TRANSPORT_REFUSED: "CDP_TRANSPORT_REFUSED",
|
|
17
|
+
BAD_PORT: "BAD_PORT",
|
|
18
|
+
BAD_URL: "BAD_URL",
|
|
19
|
+
BAD_REQUEST: "BAD_REQUEST",
|
|
20
|
+
NO_PENDING_SCREENSHOT: "NO_PENDING_SCREENSHOT",
|
|
21
|
+
PAYLOAD_TOO_LARGE: "PAYLOAD_TOO_LARGE",
|
|
22
|
+
// The BFF must inject a side-file writer when evidence storage is enabled.
|
|
23
|
+
// Without one, applyScreenshot fails closed rather than dropping binary evidence.
|
|
24
|
+
SIDE_FILE_WRITER_MISSING: "SIDE_FILE_WRITER_MISSING",
|
|
25
|
+
};
|
|
26
|
+
// HTTP status mapping per ADR-0017 D10. The two pure-input codes (BAD_PORT, BAD_URL, BAD_REQUEST)
|
|
27
|
+
// always map to 400; SESSION_LIMIT_EXCEEDED to 429; ORIGIN_NOT_ALLOWED to 403; SCHEME_NOT_ALLOWED
|
|
28
|
+
// to 400; TARGET_CLOSED to 410; CDP_TIMEOUT to 504; size-cap codes to 413; FORBIDDEN to 500
|
|
29
|
+
// (server bug); SESSION_NOT_FOUND to 404; CHROME_UNREACHABLE to 503; CHROME_VERSION_MISMATCH to 400.
|
|
30
|
+
const STATUS_MAP = {
|
|
31
|
+
CHROME_UNREACHABLE: 503,
|
|
32
|
+
CHROME_VERSION_MISMATCH: 400,
|
|
33
|
+
SESSION_NOT_FOUND: 404,
|
|
34
|
+
SESSION_LIMIT_EXCEEDED: 429,
|
|
35
|
+
ORIGIN_NOT_ALLOWED: 403,
|
|
36
|
+
SCHEME_NOT_ALLOWED: 400,
|
|
37
|
+
TARGET_CLOSED: 410,
|
|
38
|
+
CDP_TIMEOUT: 504,
|
|
39
|
+
SCREENSHOT_TOO_LARGE: 413,
|
|
40
|
+
CONTENT_TOO_LARGE: 413,
|
|
41
|
+
CDP_METHOD_FORBIDDEN: 500,
|
|
42
|
+
CDP_TRANSPORT_REFUSED: 503,
|
|
43
|
+
BAD_PORT: 400,
|
|
44
|
+
BAD_URL: 400,
|
|
45
|
+
BAD_REQUEST: 400,
|
|
46
|
+
NO_PENDING_SCREENSHOT: 409,
|
|
47
|
+
PAYLOAD_TOO_LARGE: 413,
|
|
48
|
+
// BFF configuration error (impossible if BFF correctly wires the writer port). 500 reflects
|
|
49
|
+
// the server-side misconfiguration, never reaches the UI in normal operation.
|
|
50
|
+
SIDE_FILE_WRITER_MISSING: 500,
|
|
51
|
+
};
|
|
52
|
+
export class BrowserToolError extends Error {
|
|
53
|
+
code;
|
|
54
|
+
status;
|
|
55
|
+
constructor(code, message) {
|
|
56
|
+
super(message);
|
|
57
|
+
this.name = "BrowserToolError";
|
|
58
|
+
this.code = code;
|
|
59
|
+
this.status = STATUS_MAP[code];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { CdpClient, type CdpClientOptions } from "./cdp-client.js";
|
|
2
|
+
import type { BrowserContentResult, BrowserNavigateResult, BrowserScreenshotResult, BrowserSessionMeta, CdpReachability } from "./types.js";
|
|
3
|
+
import { type CostClass, type EvidenceStore, type SideFileWriteResult } from "@oscharko-dev/keiko-contracts";
|
|
4
|
+
export type BrowserEventKind = "session-opened" | "navigated" | "screenshot-captured" | "page-content-captured" | "session-closed" | "trust-warning" | "error";
|
|
5
|
+
export interface BrowserEventEnvelope {
|
|
6
|
+
readonly schemaVersion: "1";
|
|
7
|
+
readonly type: `browser:${BrowserEventKind}`;
|
|
8
|
+
readonly runId: string;
|
|
9
|
+
readonly fingerprint: string;
|
|
10
|
+
readonly seq: number;
|
|
11
|
+
readonly ts: number;
|
|
12
|
+
readonly kind: BrowserEventKind;
|
|
13
|
+
readonly sessionId: string;
|
|
14
|
+
readonly payload: Readonly<Record<string, unknown>>;
|
|
15
|
+
}
|
|
16
|
+
export type BrowserEventEmitter = (event: BrowserEventEnvelope) => void;
|
|
17
|
+
export type BrowserSideFileWriter = (basename: string, bytes: Buffer, runId: string) => SideFileWriteResult;
|
|
18
|
+
export interface BrowserSessionManagerOptions {
|
|
19
|
+
readonly evidenceDir: string;
|
|
20
|
+
readonly evidenceStore?: EvidenceStore | undefined;
|
|
21
|
+
readonly redactor?: (value: unknown) => unknown;
|
|
22
|
+
readonly cdpClientFactory?: (url: string, opts: CdpClientOptions) => CdpClient;
|
|
23
|
+
readonly fetchVersion?: (url: string) => Promise<unknown>;
|
|
24
|
+
readonly costClassResolver?: (modelId: string) => CostClass | "unknown";
|
|
25
|
+
readonly sideFileWriter?: BrowserSideFileWriter;
|
|
26
|
+
readonly idleTtlMs?: number;
|
|
27
|
+
readonly nowMs?: () => number;
|
|
28
|
+
}
|
|
29
|
+
export interface BrowserSessionManager {
|
|
30
|
+
readonly checkStatus: (cdpPort: number) => Promise<CdpReachability>;
|
|
31
|
+
readonly openSession: (cdpPort: number) => Promise<BrowserSessionMeta>;
|
|
32
|
+
readonly closeSession: (sessionId: string) => Promise<void>;
|
|
33
|
+
readonly navigate: (sessionId: string, url: string) => Promise<BrowserNavigateResult>;
|
|
34
|
+
readonly screenshot: (sessionId: string) => Promise<BrowserScreenshotResult>;
|
|
35
|
+
readonly applyScreenshot: (sessionId: string, captureSeq: number) => Promise<BrowserScreenshotResult>;
|
|
36
|
+
readonly content: (sessionId: string) => Promise<BrowserContentResult>;
|
|
37
|
+
readonly listSessionIds: () => readonly string[];
|
|
38
|
+
readonly hasSession: (sessionId: string) => boolean;
|
|
39
|
+
readonly dispose: () => Promise<void>;
|
|
40
|
+
readonly subscribe: (sessionId: string, listener: BrowserEventEmitter) => () => void;
|
|
41
|
+
readonly counterAccessor: () => {
|
|
42
|
+
readonly navigations: number;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export declare function createBrowserSessionManager(options: BrowserSessionManagerOptions): BrowserSessionManager;
|
|
46
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/browser/session.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAyB,MAAM,iBAAiB,CAAC;AAQ1F,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAElB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAGL,KAAK,SAAS,EAKd,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACzB,MAAM,+BAA+B,CAAC;AAcvC,MAAM,MAAM,gBAAgB,GACxB,gBAAgB,GAChB,WAAW,GACX,qBAAqB,GACrB,uBAAuB,GACvB,gBAAgB,GAChB,eAAe,GACf,OAAO,CAAC;AAEZ,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,WAAW,gBAAgB,EAAE,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACrD;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;AAMxE,MAAM,MAAM,qBAAqB,GAAG,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,KACV,mBAAmB,CAAC;AAEzB,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IAChD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,KAAK,SAAS,CAAC;IAC/E,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;IACxE,QAAQ,CAAC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;CAC/B;AAwDD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACpE,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvE,QAAQ,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACtF,QAAQ,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC7E,QAAQ,CAAC,eAAe,EAAE,CACxB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvE,QAAQ,CAAC,cAAc,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,KAAK,MAAM,IAAI,CAAC;IACrF,QAAQ,CAAC,eAAe,EAAE,MAAM;QAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE;AAq2BD,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,4BAA4B,GACpC,qBAAqB,CAEvB"}
|