{"version":3,"file":"index-DedCW3aV.mjs","sources":["../node_modules/process/browser.js","../src/shims/process.ts","../node_modules/setimmediate/setImmediate.js","../src/shims/setImmediate.ts","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../src/shims/buffer.ts","../node_modules/memfs/src/constants.ts","../node_modules/memfs/src/Stats.ts","../node_modules/memfs/src/internal/buffer.ts","../node_modules/has-symbols/shams.js","../node_modules/has-tostringtag/shams.js","../node_modules/es-object-atoms/index.js","../node_modules/es-errors/index.js","../node_modules/es-errors/eval.js","../node_modules/es-errors/range.js","../node_modules/es-errors/ref.js","../node_modules/es-errors/syntax.js","../node_modules/es-errors/type.js","../node_modules/es-errors/uri.js","../node_modules/math-intrinsics/abs.js","../node_modules/math-intrinsics/floor.js","../node_modules/math-intrinsics/max.js","../node_modules/math-intrinsics/min.js","../node_modules/math-intrinsics/pow.js","../node_modules/math-intrinsics/round.js","../node_modules/math-intrinsics/isNaN.js","../node_modules/math-intrinsics/sign.js","../node_modules/gopd/gOPD.js","../node_modules/gopd/index.js","../node_modules/es-define-property/index.js","../node_modules/has-symbols/index.js","../node_modules/get-proto/Reflect.getPrototypeOf.js","../node_modules/get-proto/Object.getPrototypeOf.js","../node_modules/function-bind/implementation.js","../node_modules/function-bind/index.js","../node_modules/call-bind-apply-helpers/functionCall.js","../node_modules/call-bind-apply-helpers/functionApply.js","../node_modules/call-bind-apply-helpers/reflectApply.js","../node_modules/call-bind-apply-helpers/actualApply.js","../node_modules/call-bind-apply-helpers/index.js","../node_modules/dunder-proto/get.js","../node_modules/get-proto/index.js","../node_modules/hasown/index.js","../node_modules/get-intrinsic/index.js","../node_modules/define-data-property/index.js","../node_modules/has-property-descriptors/index.js","../node_modules/set-function-length/index.js","../node_modules/call-bind-apply-helpers/applyBind.js","../node_modules/call-bind/index.js","../node_modules/call-bind/callBound.js","../node_modules/is-arguments/index.js","../node_modules/is-generator-function/index.js","../node_modules/is-callable/index.js","../node_modules/for-each/index.js","../node_modules/possible-typed-array-names/index.js","../node_modules/available-typed-arrays/index.js","../node_modules/call-bound/index.js","../node_modules/which-typed-array/index.js","../node_modules/is-typed-array/index.js","../node_modules/util/support/types.js","../node_modules/util/support/isBufferBrowser.js","../node_modules/inherits/inherits_browser.js","../node_modules/util/util.js","../node_modules/assert/build/internal/errors.js","../node_modules/assert/build/internal/assert/assertion_error.js","../node_modules/object-keys/isArguments.js","../node_modules/object-keys/implementation.js","../node_modules/object-keys/index.js","../node_modules/object.assign/implementation.js","../node_modules/object.assign/polyfill.js","../node_modules/object-is/implementation.js","../node_modules/object-is/polyfill.js","../node_modules/define-properties/index.js","../node_modules/object-is/shim.js","../node_modules/object-is/index.js","../node_modules/is-nan/implementation.js","../node_modules/is-nan/polyfill.js","../node_modules/is-nan/shim.js","../node_modules/is-nan/index.js","../node_modules/assert/build/internal/util/comparisons.js","../node_modules/assert/build/assert.js","../node_modules/memfs/src/internal/errors.ts","../node_modules/memfs/src/encoding.ts","../node_modules/memfs/src/Dirent.ts","../node_modules/path/node_modules/util/support/isBufferBrowser.js","../node_modules/path/node_modules/inherits/inherits_browser.js","../node_modules/path/node_modules/util/util.js","../node_modules/path/path.js","../node_modules/memfs/src/process.ts","../node_modules/events/events.js","../node_modules/memfs/src/node.ts","../node_modules/memfs/src/setImmediate.ts","../node_modules/memfs/src/queueMicrotask.ts","../node_modules/memfs/src/setTimeoutUnref.ts","../node_modules/readable-stream/lib/ours/primordials.js","../node_modules/abort-controller/browser.js","../node_modules/readable-stream/lib/ours/util.js","../node_modules/readable-stream/lib/ours/errors.js","../node_modules/readable-stream/lib/internal/validators.js","../node_modules/readable-stream/lib/internal/streams/utils.js","../node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/readable-stream/lib/internal/streams/legacy.js","../node_modules/readable-stream/lib/internal/streams/add-abort-signal.js","../node_modules/readable-stream/lib/internal/streams/buffer_list.js","../node_modules/readable-stream/lib/internal/streams/state.js","../node_modules/safe-buffer/index.js","../node_modules/string_decoder/lib/string_decoder.js","../node_modules/readable-stream/lib/internal/streams/from.js","../node_modules/readable-stream/lib/internal/streams/readable.js","../node_modules/readable-stream/lib/internal/streams/writable.js","../node_modules/readable-stream/lib/internal/streams/duplexify.js","../node_modules/readable-stream/lib/internal/streams/duplex.js","../node_modules/readable-stream/lib/internal/streams/transform.js","../node_modules/readable-stream/lib/internal/streams/passthrough.js","../node_modules/readable-stream/lib/internal/streams/pipeline.js","../node_modules/readable-stream/lib/internal/streams/compose.js","../node_modules/readable-stream/lib/internal/streams/operators.js","../node_modules/readable-stream/lib/stream/promises.js","../node_modules/readable-stream/lib/stream.js","../node_modules/readable-stream/lib/ours/browser.js","../node_modules/memfs/src/node/constants.ts","../node_modules/punycode/punycode.js","../__vite-browser-external","../node_modules/object-inspect/index.js","../node_modules/side-channel-list/index.js","../node_modules/side-channel-map/index.js","../node_modules/side-channel-weakmap/index.js","../node_modules/side-channel/index.js","../node_modules/qs/lib/formats.js","../node_modules/qs/lib/utils.js","../node_modules/qs/lib/stringify.js","../node_modules/qs/lib/parse.js","../node_modules/qs/lib/index.js","../node_modules/url/url.js","../src/shims/url.ts","../node_modules/memfs/src/node/util.ts","../node_modules/memfs/src/node/FileHandle.ts","../node_modules/memfs/src/node/FsPromises.ts","../node_modules/memfs/src/json-joy/util/print/printTree.ts","../node_modules/memfs/src/node-to-fsa/util.ts","../node_modules/memfs/src/print/index.ts","../node_modules/memfs/src/node/options.ts","../node_modules/memfs/src/volume.ts","../node_modules/memfs/src/node/lists/fsSynchronousApiList.ts","../node_modules/memfs/src/node/lists/fsCallbackApiList.ts","../node_modules/memfs/src/index.ts","../src/shims/fs.ts","../src/shims/global.ts","../playwright/packages/playwright-core/src/protocol/validatorPrimitives.ts","../playwright/packages/playwright-core/src/protocol/validator.ts","../src/protocol/validator.ts","../node_modules/os-browserify/browser.js","../src/shims/child_process.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/retry/lib/retry_operation.js","../playwright/packages/playwright-core/bundles/utils/node_modules/retry/lib/retry.js","../playwright/packages/playwright-core/bundles/utils/node_modules/retry/index.js","../playwright/packages/playwright-core/bundles/utils/node_modules/signal-exit/signals.js","../playwright/packages/playwright-core/bundles/utils/node_modules/signal-exit/index.js","../playwright/packages/playwright-core/bundles/utils/src/third_party/lockfile.js","../playwright/packages/playwright-core/bundles/utils/node_modules/colors/lib/styles.js","../playwright/packages/playwright-core/bundles/utils/node_modules/colors/lib/system/has-flag.js","../playwright/packages/playwright-core/bundles/utils/node_modules/colors/lib/system/supports-colors.js","../playwright/packages/playwright-core/bundles/utils/node_modules/colors/lib/custom/trap.js","../playwright/packages/playwright-core/bundles/utils/node_modules/colors/lib/custom/zalgo.js","../playwright/packages/playwright-core/bundles/utils/node_modules/colors/lib/maps/america.js","../playwright/packages/playwright-core/bundles/utils/node_modules/colors/lib/maps/zebra.js","../playwright/packages/playwright-core/bundles/utils/node_modules/colors/lib/maps/rainbow.js","../playwright/packages/playwright-core/bundles/utils/node_modules/colors/lib/maps/random.js","../playwright/packages/playwright-core/bundles/utils/node_modules/colors/lib/colors.js","../playwright/packages/playwright-core/bundles/utils/node_modules/colors/safe.js","../node_modules/ms/index.js","../node_modules/debug/src/common.js","../node_modules/debug/src/browser.js","../playwright/packages/playwright-core/bundles/utils/node_modules/diff/lib/index.mjs","../node_modules/randombytes/browser.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/hash-base/node_modules/readable-stream/errors-browser.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js","../node_modules/util-deprecate/browser.js","../node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js","../node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js","../node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js","../node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js","../node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js","../node_modules/hash-base/node_modules/readable-stream/readable-browser.js","../node_modules/hash-base/index.js","../node_modules/md5.js/index.js","../node_modules/ripemd160/index.js","../node_modules/sha.js/hash.js","../node_modules/sha.js/sha.js","../node_modules/sha.js/sha1.js","../node_modules/sha.js/sha256.js","../node_modules/sha.js/sha224.js","../node_modules/sha.js/sha512.js","../node_modules/sha.js/sha384.js","../node_modules/sha.js/index.js","../node_modules/cipher-base/index.js","../node_modules/create-hash/browser.js","../node_modules/create-hmac/legacy.js","../node_modules/create-hash/md5.js","../node_modules/create-hmac/browser.js","../node_modules/browserify-sign/algos.js","../node_modules/pbkdf2/lib/precondition.js","../node_modules/pbkdf2/lib/default-encoding.js","../node_modules/pbkdf2/lib/to-buffer.js","../node_modules/pbkdf2/lib/sync-browser.js","../node_modules/pbkdf2/lib/async.js","../node_modules/pbkdf2/browser.js","../node_modules/des.js/lib/des/utils.js","../node_modules/minimalistic-assert/index.js","../node_modules/des.js/lib/des/cipher.js","../node_modules/des.js/lib/des/des.js","../node_modules/des.js/lib/des/cbc.js","../node_modules/des.js/lib/des/ede.js","../node_modules/des.js/lib/des.js","../node_modules/browserify-des/index.js","../node_modules/browserify-aes/modes/ecb.js","../node_modules/buffer-xor/index.js","../node_modules/browserify-aes/modes/cbc.js","../node_modules/browserify-aes/modes/cfb.js","../node_modules/browserify-aes/modes/cfb8.js","../node_modules/browserify-aes/modes/cfb1.js","../node_modules/browserify-aes/modes/ofb.js","../node_modules/browserify-aes/incr32.js","../node_modules/browserify-aes/modes/ctr.js","../node_modules/browserify-aes/modes/index.js","../node_modules/browserify-aes/aes.js","../node_modules/browserify-aes/ghash.js","../node_modules/browserify-aes/authCipher.js","../node_modules/browserify-aes/streamCipher.js","../node_modules/evp_bytestokey/index.js","../node_modules/browserify-aes/encrypter.js","../node_modules/browserify-aes/decrypter.js","../node_modules/browserify-aes/browser.js","../node_modules/browserify-des/modes.js","../node_modules/browserify-cipher/browser.js","../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","../node_modules/brorand/index.js","../node_modules/miller-rabin/lib/mr.js","../node_modules/diffie-hellman/lib/generatePrime.js","../node_modules/diffie-hellman/lib/dh.js","../node_modules/diffie-hellman/browser.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js","../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","../node_modules/bn.js/lib/bn.js","../node_modules/browserify-rsa/index.js","../node_modules/elliptic/node_modules/bn.js/lib/bn.js","../node_modules/minimalistic-crypto-utils/lib/utils.js","../node_modules/elliptic/lib/elliptic/utils.js","../node_modules/elliptic/lib/elliptic/curve/base.js","../node_modules/elliptic/lib/elliptic/curve/short.js","../node_modules/elliptic/lib/elliptic/curve/mont.js","../node_modules/elliptic/lib/elliptic/curve/edwards.js","../node_modules/elliptic/lib/elliptic/curve/index.js","../node_modules/hash.js/lib/hash/utils.js","../node_modules/hash.js/lib/hash/common.js","../node_modules/hash.js/lib/hash/sha/common.js","../node_modules/hash.js/lib/hash/sha/1.js","../node_modules/hash.js/lib/hash/sha/256.js","../node_modules/hash.js/lib/hash/sha/224.js","../node_modules/hash.js/lib/hash/sha/512.js","../node_modules/hash.js/lib/hash/sha/384.js","../node_modules/hash.js/lib/hash/sha.js","../node_modules/hash.js/lib/hash/ripemd.js","../node_modules/hash.js/lib/hash/hmac.js","../node_modules/hash.js/lib/hash.js","../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","../node_modules/elliptic/lib/elliptic/curves.js","../node_modules/hmac-drbg/lib/hmac-drbg.js","../node_modules/elliptic/lib/elliptic/ec/key.js","../node_modules/elliptic/lib/elliptic/ec/signature.js","../node_modules/elliptic/lib/elliptic/ec/index.js","../node_modules/elliptic/lib/elliptic/eddsa/key.js","../node_modules/elliptic/lib/elliptic/eddsa/signature.js","../node_modules/elliptic/lib/elliptic/eddsa/index.js","../node_modules/elliptic/lib/elliptic.js","../node_modules/asn1.js/node_modules/bn.js/lib/bn.js","../node_modules/safer-buffer/safer.js","../node_modules/asn1.js/lib/asn1/base/reporter.js","../node_modules/asn1.js/lib/asn1/base/buffer.js","../node_modules/asn1.js/lib/asn1/base/node.js","../node_modules/asn1.js/lib/asn1/constants/der.js","../node_modules/asn1.js/lib/asn1/encoders/der.js","../node_modules/asn1.js/lib/asn1/encoders/pem.js","../node_modules/asn1.js/lib/asn1/encoders/index.js","../node_modules/asn1.js/lib/asn1/decoders/der.js","../node_modules/asn1.js/lib/asn1/decoders/pem.js","../node_modules/asn1.js/lib/asn1/decoders/index.js","../node_modules/asn1.js/lib/asn1/api.js","../node_modules/asn1.js/lib/asn1/base/index.js","../node_modules/asn1.js/lib/asn1/constants/index.js","../node_modules/asn1.js/lib/asn1.js","../node_modules/parse-asn1/certificate.js","../node_modules/parse-asn1/asn1.js","../node_modules/parse-asn1/fixProc.js","../node_modules/parse-asn1/index.js","../node_modules/browserify-sign/browser/sign.js","../node_modules/browserify-sign/browser/verify.js","../node_modules/browserify-sign/browser/index.js","../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","../node_modules/create-ecdh/browser.js","../node_modules/public-encrypt/mgf.js","../node_modules/public-encrypt/xor.js","../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js","../node_modules/public-encrypt/withPublic.js","../node_modules/public-encrypt/publicEncrypt.js","../node_modules/public-encrypt/privateDecrypt.js","../node_modules/public-encrypt/browser.js","../node_modules/randomfill/browser.js","../node_modules/crypto-browserify/index.js","../playwright/packages/playwright-core/bundles/utils/node_modules/dotenv/lib/main.js","../playwright/packages/playwright-core/bundles/utils/node_modules/proxy-from-env/index.js","../src/shims/net.ts","../src/shims/tls.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/agent-base/src/promisify.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/agent-base/src/index.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/https-proxy-agent/src/parse-proxy-response.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/https-proxy-agent/src/agent.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/https-proxy-agent/src/index.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/jpeg-js/lib/encoder.js","../playwright/packages/playwright-core/bundles/utils/node_modules/jpeg-js/lib/decoder.js","../playwright/packages/playwright-core/bundles/utils/node_modules/jpeg-js/index.js","../playwright/packages/playwright-core/bundles/utils/node_modules/mime/Mime.js","../playwright/packages/playwright-core/bundles/utils/node_modules/mime/types/standard.js","../playwright/packages/playwright-core/bundles/utils/node_modules/mime/types/other.js","../playwright/packages/playwright-core/bundles/utils/node_modules/mime/index.js","../playwright/packages/playwright-core/bundles/utils/node_modules/concat-map/index.js","../playwright/packages/playwright-core/bundles/utils/node_modules/balanced-match/index.js","../playwright/packages/playwright-core/bundles/utils/node_modules/brace-expansion/index.js","../playwright/packages/playwright-core/bundles/utils/node_modules/minimatch/minimatch.js","../playwright/packages/playwright-core/bundles/utils/node_modules/is-docker/index.js","../playwright/packages/playwright-core/bundles/utils/node_modules/is-wsl/index.js","../playwright/packages/playwright-core/bundles/utils/node_modules/define-lazy-prop/index.js","../playwright/packages/playwright-core/bundles/utils/node_modules/open/index.js","../node_modules/pako/lib/zlib/zstream.js","../node_modules/pako/lib/utils/common.js","../node_modules/pako/lib/zlib/trees.js","../node_modules/pako/lib/zlib/adler32.js","../node_modules/pako/lib/zlib/crc32.js","../node_modules/pako/lib/zlib/messages.js","../node_modules/pako/lib/zlib/deflate.js","../node_modules/pako/lib/zlib/inffast.js","../node_modules/pako/lib/zlib/inftrees.js","../node_modules/pako/lib/zlib/inflate.js","../node_modules/pako/lib/zlib/constants.js","../node_modules/browserify-zlib/lib/binding.js","../node_modules/browserify-zlib/lib/index.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/chunkstream.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/interlace.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/paeth-predictor.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/filter-parse.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/filter-parse-async.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/constants.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/crc.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/parser.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/bitmapper.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/format-normaliser.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/parser-async.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/bitpacker.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/filter-pack.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/packer.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/packer-async.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/sync-inflate.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/sync-reader.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/filter-parse-sync.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/parser-sync.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/packer-sync.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/png-sync.js","../playwright/packages/playwright-core/bundles/utils/node_modules/pngjs/lib/png.js","../playwright/packages/playwright-core/bundles/utils/node_modules/commander/lib/error.js","../playwright/packages/playwright-core/bundles/utils/node_modules/commander/lib/argument.js","../playwright/packages/playwright-core/bundles/utils/node_modules/commander/lib/help.js","../playwright/packages/playwright-core/bundles/utils/node_modules/commander/lib/option.js","../playwright/packages/playwright-core/bundles/utils/node_modules/commander/lib/suggestSimilar.js","../playwright/packages/playwright-core/bundles/utils/node_modules/commander/lib/command.js","../playwright/packages/playwright-core/bundles/utils/node_modules/commander/index.js","../playwright/packages/playwright-core/bundles/utils/node_modules/progress/lib/node-progress.js","../playwright/packages/playwright-core/bundles/utils/node_modules/progress/index.js","../src/shims/dns.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/smart-buffer/src/utils.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/smart-buffer/src/smartbuffer.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/socks/src/common/constants.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/socks/src/common/util.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/ip-address/src/common.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/ip-address/src/v4/constants.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/ip-address/src/address-error.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/jsbn/index.js","../playwright/packages/playwright-core/bundles/utils/node_modules/sprintf-js/src/sprintf.js","../playwright/packages/playwright-core/bundles/utils/node_modules/ip-address/src/ipv4.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/ip-address/src/v6/constants.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/ip-address/src/v6/helpers.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/ip-address/src/v6/regular-expressions.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/ip-address/src/ipv6.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/ip-address/src/ip-address.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/socks/src/common/helpers.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/socks/src/common/receivebuffer.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/socks/src/client/socksclient.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/socks/src/index.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/socks-proxy-agent/src/agent.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/socks-proxy-agent/src/index.ts","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/nodes/identity.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/visit.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/doc/directives.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/doc/anchors.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/doc/applyReviver.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/nodes/toJS.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/nodes/Node.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/nodes/Alias.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/nodes/Scalar.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/doc/createNode.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/nodes/Collection.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/stringify/stringifyComment.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/stringify/foldFlowLines.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/stringify/stringifyString.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/stringify/stringify.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/stringify/stringifyPair.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/log.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/nodes/Pair.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/stringify/stringifyCollection.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/nodes/YAMLMap.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/common/map.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/nodes/YAMLSeq.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/common/seq.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/common/string.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/common/null.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/core/bool.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/stringify/stringifyNumber.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/core/float.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/core/int.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/core/schema.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/json/schema.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/tags.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/schema/Schema.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/stringify/stringifyDocument.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/doc/Document.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/errors.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/resolve-props.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/util-contains-newline.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/util-map-includes.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/resolve-block-map.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/resolve-block-seq.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/resolve-end.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/compose-collection.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/compose-scalar.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/compose-node.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/compose-doc.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/compose/composer.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/parse/cst-scalar.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/parse/cst-stringify.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/parse/cst-visit.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/parse/cst.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/parse/lexer.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/parse/line-counter.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/parse/parser.js","../playwright/packages/playwright-core/bundles/utils/node_modules/yaml/browser/dist/public-api.js","../playwright/packages/playwright-core/bundles/utils/node_modules/ws/browser.js","../playwright/packages/playwright-core/bundles/utils/src/utilsBundleImpl.ts","../playwright/packages/playwright-core/src/utilsBundle.ts","../playwright/packages/playwright-core/src/server/utils/debugLogger.ts","../playwright/packages/playwright-core/src/utils/isomorphic/stackTrace.ts","../playwright/packages/playwright-core/src/utils/isomorphic/manualPromise.ts","../playwright/packages/playwright-core/src/server/utils/linuxUtils.ts","../playwright/packages/playwright-core/src/server/utils/userAgent.ts","../playwright/packages/playwright-core/bundles/zip/node_modules/wrappy/wrappy.js","../playwright/packages/playwright-core/bundles/zip/node_modules/once/once.js","../playwright/packages/playwright-core/bundles/zip/node_modules/end-of-stream/index.js","../playwright/packages/playwright-core/bundles/zip/node_modules/pump/index.js","../playwright/packages/playwright-core/bundles/zip/node_modules/get-stream/buffer-stream.js","../playwright/packages/playwright-core/bundles/zip/node_modules/get-stream/index.js","../playwright/packages/playwright-core/bundles/zip/node_modules/pend/index.js","../playwright/packages/playwright-core/bundles/zip/node_modules/yauzl/fd-slicer.js","../playwright/packages/playwright-core/bundles/zip/node_modules/buffer-crc32/index.js","../playwright/packages/playwright-core/bundles/zip/node_modules/yauzl/index.js","../playwright/packages/playwright-core/bundles/zip/src/third_party/extract-zip.js","../playwright/packages/playwright-core/bundles/zip/node_modules/yazl/index.js","../playwright/packages/playwright-core/bundles/zip/src/zipBundleImpl.ts","../playwright/packages/playwright-core/src/zipBundle.ts","../playwright/packages/playwright-core/src/server/utils/fileUtils.ts","../playwright/packages/playwright-core/src/server/registry/browserFetcher.ts","../playwright/packages/playwright-core/src/server/registry/nativeDeps.ts","../playwright/packages/playwright-core/src/server/utils/ascii.ts","../playwright/packages/playwright-core/src/server/utils/hostPlatform.ts","../playwright/packages/playwright-core/src/server/utils/spawnAsync.ts","../playwright/packages/playwright-core/src/server/registry/dependencies.ts","../playwright/packages/playwright-core/src/utils/isomorphic/assert.ts","../playwright/packages/playwright-core/src/utils/isomorphic/headers.ts","../playwright/packages/playwright-core/src/utils/isomorphic/cssTokenizer.ts","../playwright/packages/playwright-core/src/utils/isomorphic/cssParser.ts","../playwright/packages/playwright-core/src/utils/isomorphic/selectorParser.ts","../playwright/packages/playwright-core/src/utils/isomorphic/stringUtils.ts","../playwright/packages/playwright-core/src/utils/isomorphic/locatorGenerators.ts","../playwright/packages/playwright-core/src/utils/isomorphic/mimeType.ts","../playwright/packages/playwright-core/src/utils/isomorphic/multimap.ts","../playwright/packages/playwright-core/src/utils/isomorphic/protocolMetainfo.ts","../playwright/packages/playwright-core/src/utils/isomorphic/protocolFormatter.ts","../playwright/packages/playwright-core/src/utils/isomorphic/rtti.ts","../playwright/packages/playwright-core/src/utils/isomorphic/time.ts","../playwright/packages/playwright-core/src/utils/isomorphic/timeoutRunner.ts","../playwright/packages/playwright-core/src/utils/isomorphic/urlMatch.ts","../playwright/packages/playwright-core/src/server/utils/image_tools/colorUtils.ts","../playwright/packages/playwright-core/src/server/utils/image_tools/imageChannel.ts","../playwright/packages/playwright-core/src/server/utils/image_tools/stats.ts","../playwright/packages/playwright-core/src/server/utils/image_tools/compare.ts","../playwright/packages/playwright-core/src/third_party/pixelmatch.js","../playwright/packages/playwright-core/src/server/utils/comparators.ts","../playwright/packages/playwright-core/src/server/utils/crypto.ts","../playwright/packages/playwright-core/src/server/utils/env.ts","../playwright/packages/playwright-core/src/server/utils/debug.ts","../playwright/packages/playwright-core/src/server/utils/eventsHelper.ts","../playwright/packages/playwright-core/src/server/utils/expectUtils.ts","../node_modules/stream-http/lib/capability.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/stream-browser.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/buffer_list.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/stream-http/node_modules/readable-stream/errors-browser.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/state.js","../node_modules/stream-http/node_modules/readable-stream/lib/_stream_writable.js","../node_modules/stream-http/node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/async_iterator.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/from-browser.js","../node_modules/stream-http/node_modules/readable-stream/lib/_stream_readable.js","../node_modules/stream-http/node_modules/readable-stream/lib/_stream_transform.js","../node_modules/stream-http/node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/pipeline.js","../node_modules/stream-http/node_modules/readable-stream/readable-browser.js","../node_modules/stream-http/lib/response.js","../node_modules/stream-http/lib/request.js","../node_modules/xtend/immutable.js","../node_modules/builtin-status-codes/browser.js","../node_modules/stream-http/index.js","../node_modules/https-browserify/index.js","../playwright/packages/playwright-core/src/server/utils/happyEyeballs.ts","../playwright/packages/playwright-core/src/server/utils/network.ts","../node_modules/inspector/node_modules/ws/lib/browser.js","../node_modules/endpoint/endpoint.js","../node_modules/inspector/inspector.js","../src/shims/async_hooks.ts","../playwright/packages/playwright-core/src/server/utils/zones.ts","../playwright/packages/playwright-core/src/server/utils/nodePlatform.ts","../src/shims/readline.ts","../playwright/packages/playwright-core/src/server/utils/processLauncher.ts","../playwright/packages/playwright-core/src/server/utils/profiler.ts","../playwright/packages/playwright-core/src/server/utils/socksProxy.ts","../playwright/packages/playwright-core/src/server/utils/task.ts","../playwright/packages/playwright-core/src/server/utils/zipFile.ts","../playwright/packages/playwright-core/src/server/registry/index.ts","../playwright/packages/playwright-core/src/protocol/serializers.ts","../playwright/packages/playwright-core/src/server/errors.ts","../playwright/packages/playwright-core/src/server/instrumentation.ts","../playwright/packages/playwright-core/src/server/protocolError.ts","../playwright/packages/playwright-core/src/server/callLog.ts","../playwright/packages/playwright-core/src/server/dispatchers/dispatcher.ts","../playwright/packages/playwright-core/src/generated/clockSource.ts","../playwright/packages/playwright-core/src/server/clock.ts","../playwright/packages/playwright-core/src/server/debugger.ts","../playwright/packages/playwright-core/src/server/dialog.ts","../playwright/packages/playwright-core/src/server/artifact.ts","../playwright/packages/playwright-core/src/generated/utilityScriptSource.ts","../playwright/packages/playwright-core/src/utils/isomorphic/utilityScriptSerializers.ts","../playwright/packages/playwright-core/src/server/javascript.ts","../playwright/packages/playwright-core/src/server/progress.ts","../playwright/packages/playwright-core/src/server/fileUploadUtils.ts","../playwright/packages/playwright-core/src/generated/injectedScriptSource.ts","../playwright/packages/playwright-core/src/server/dom.ts","../playwright/packages/playwright-core/src/server/frameSelectors.ts","../playwright/packages/playwright-core/src/server/helper.ts","../playwright/packages/playwright-core/src/server/network.ts","../playwright/packages/playwright-core/src/server/accessibility.ts","../playwright/packages/playwright-core/src/server/console.ts","../playwright/packages/playwright-core/src/server/fileChooser.ts","../playwright/packages/playwright-core/src/server/usKeyboardLayout.ts","../playwright/packages/playwright-core/src/server/input.ts","../playwright/packages/playwright-core/src/server/screenshotter.ts","../playwright/packages/playwright-core/src/generated/bindingsControllerSource.ts","../playwright/packages/playwright-core/src/server/page.ts","../playwright/packages/playwright-core/src/server/types.ts","../playwright/packages/playwright-core/src/server/frames.ts","../playwright/packages/playwright-core/src/server/har/harTracer.ts","../playwright/packages/playwright-core/src/server/har/harRecorder.ts","../playwright/packages/playwright-core/src/server/codegen/language.ts","../playwright/packages/playwright-core/src/server/recorder/recorderUtils.ts","../playwright/packages/playwright-core/src/server/recorder/recorderRunner.ts","../playwright/packages/playwright-core/src/server/recorder/recorderCollection.ts","../playwright/packages/playwright-core/src/generated/pollingRecorderSource.ts","../playwright/packages/playwright-core/src/server/deviceDescriptors.ts","../playwright/packages/playwright-core/src/server/codegen/csharp.ts","../playwright/packages/playwright-core/src/server/codegen/javascript.ts","../playwright/packages/playwright-core/src/server/codegen/java.ts","../playwright/packages/playwright-core/src/server/codegen/jsonl.ts","../playwright/packages/playwright-core/src/server/codegen/python.ts","../playwright/packages/playwright-core/src/server/codegen/languages.ts","../playwright/packages/playwright-core/src/server/recorder/throttledFile.ts","../playwright/packages/playwright-core/src/server/recorder/contextRecorder.ts","../playwright/packages/playwright-core/src/utils/isomorphic/locatorParser.ts","../playwright/packages/playwright-core/src/server/recorder.ts","../playwright/packages/playwright-core/src/server/launchApp.ts","../playwright/packages/playwright-core/src/server/recorder/recorderApp.ts","../playwright/packages/playwright-core/src/server/selectors.ts","../playwright/packages/playwright-core/src/server/trace/recorder/snapshotterInjected.ts","../playwright/packages/playwright-core/src/server/trace/recorder/snapshotter.ts","../playwright/packages/playwright-core/src/server/trace/recorder/tracing.ts","../playwright/packages/playwright-core/src/generated/storageScriptSource.ts","../playwright/packages/playwright-core/src/server/browserContext.ts","../playwright/packages/playwright-core/src/server/cookieStore.ts","../playwright/packages/playwright-core/src/server/formData.ts","../playwright/packages/playwright-core/src/server/socksClientCertificatesInterceptor.ts","../playwright/packages/playwright-core/src/server/fetch.ts","../playwright/packages/playwright-core/src/server/dispatchers/streamDispatcher.ts","../playwright/packages/playwright-core/src/server/dispatchers/artifactDispatcher.ts","../playwright/packages/playwright-core/src/server/chromium/crConnection.ts","../playwright/packages/playwright-core/src/server/dispatchers/cdpSessionDispatcher.ts","../playwright/packages/playwright-core/src/server/dispatchers/jsHandleDispatcher.ts","../playwright/packages/playwright-core/src/server/dispatchers/tracingDispatcher.ts","../playwright/packages/playwright-core/src/server/dispatchers/networkDispatchers.ts","../playwright/packages/playwright-core/src/utils/isomorphic/ariaSnapshot.ts","../playwright/packages/playwright-core/src/server/dispatchers/frameDispatcher.ts","../playwright/packages/playwright-core/src/server/dispatchers/elementHandlerDispatcher.ts","../playwright/packages/playwright-core/src/generated/webSocketMockSource.ts","../playwright/packages/playwright-core/src/server/dispatchers/webSocketRouteDispatcher.ts","../playwright/packages/playwright-core/src/server/dispatchers/pageDispatcher.ts","../playwright/packages/playwright-core/src/server/dispatchers/dialogDispatcher.ts","../playwright/packages/playwright-core/src/server/download.ts","../playwright/packages/playwright-core/src/server/browser.ts","../playwright/packages/playwright-core/src/server/chromium/crAccessibility.ts","../playwright/packages/playwright-core/src/server/chromium/crCoverage.ts","../playwright/packages/playwright-core/src/server/chromium/crProtocolHelper.ts","../playwright/packages/playwright-core/src/server/chromium/crDragDrop.ts","../playwright/packages/playwright-core/src/server/chromium/crExecutionContext.ts","../playwright/packages/playwright-core/src/server/macEditingCommands.ts","../playwright/packages/playwright-core/src/server/chromium/crInput.ts","../playwright/packages/playwright-core/src/server/chromium/crNetworkManager.ts","../playwright/packages/playwright-core/src/server/chromium/crPdf.ts","../playwright/packages/playwright-core/src/server/chromium/defaultFontFamilies.ts","../playwright/packages/playwright-core/src/server/chromium/videoRecorder.ts","../playwright/packages/playwright-core/src/server/chromium/crPage.ts","../playwright/packages/playwright-core/src/server/chromium/crServiceWorker.ts","../playwright/packages/playwright-core/src/server/chromium/crBrowser.ts","../playwright/packages/playwright-core/src/server/dispatchers/writableStreamDispatcher.ts","../playwright/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts","../playwright/packages/playwright-core/src/server/utils/pipeTransport.ts","../playwright/packages/playwright-core/src/server/chromium/chromiumSwitches.ts","../playwright/packages/playwright-core/src/server/android/android.ts","../playwright/packages/playwright-core/src/server/dispatchers/androidDispatcher.ts","../playwright/packages/playwright-core/src/server/dispatchers/browserDispatcher.ts","../playwright/packages/playwright-core/src/server/dispatchers/browserTypeDispatcher.ts","../playwright/packages/playwright-core/src/server/transport.ts","../playwright/packages/playwright-core/src/server/electron/electron.ts","../playwright/packages/playwright-core/src/server/dispatchers/electronDispatcher.ts","../playwright/packages/playwright-core/src/server/harBackend.ts","../playwright/packages/playwright-core/src/utils/isomorphic/traceUtils.ts","../playwright/packages/playwright-core/src/server/localUtils.ts","../playwright/packages/playwright-core/src/server/dispatchers/jsonPipeDispatcher.ts","../playwright/packages/playwright-core/src/server/socksInterceptor.ts","../playwright/packages/playwright-core/src/server/dispatchers/localUtilsDispatcher.ts","../playwright/packages/playwright-core/src/server/android/backendAdb.ts","../playwright/packages/playwright-core/src/server/pipeTransport.ts","../playwright/packages/playwright-core/src/server/browserType.ts","../playwright/packages/playwright-core/src/server/bidi/bidiConnection.ts","../playwright/packages/playwright-core/src/server/bidi/third_party/bidiProtocolCore.ts","../playwright/packages/playwright-core/src/server/bidi/third_party/bidiProtocolPermissions.ts","../playwright/packages/playwright-core/src/server/bidi/bidiNetworkManager.ts","../playwright/packages/playwright-core/src/server/bidi/third_party/bidiDeserializer.ts","../playwright/packages/playwright-core/src/server/bidi/third_party/bidiSerializer.ts","../playwright/packages/playwright-core/src/server/bidi/bidiExecutionContext.ts","../playwright/packages/playwright-core/src/server/bidi/third_party/bidiKeyboard.ts","../playwright/packages/playwright-core/src/server/bidi/bidiInput.ts","../playwright/packages/playwright-core/src/server/bidi/bidiPdf.ts","../playwright/packages/playwright-core/src/server/bidi/bidiPage.ts","../playwright/packages/playwright-core/src/server/bidi/bidiBrowser.ts","../playwright/packages/playwright-core/src/server/bidi/bidiChromium.ts","../playwright/packages/playwright-core/src/server/bidi/third_party/firefoxPrefs.ts","../playwright/packages/playwright-core/src/server/bidi/bidiFirefox.ts","../playwright/packages/playwright-core/src/server/chromium/crDevTools.ts","../playwright/packages/playwright-core/src/server/chromium/chromium.ts","../playwright/packages/playwright-core/src/server/debugController.ts","../playwright/packages/playwright-core/src/server/firefox/ffConnection.ts","../playwright/packages/playwright-core/src/server/firefox/ffAccessibility.ts","../playwright/packages/playwright-core/src/server/firefox/ffExecutionContext.ts","../playwright/packages/playwright-core/src/server/firefox/ffInput.ts","../playwright/packages/playwright-core/src/server/firefox/ffNetworkManager.ts","../playwright/packages/playwright-core/src/server/firefox/ffPage.ts","../playwright/packages/playwright-core/src/server/firefox/ffBrowser.ts","../playwright/packages/playwright-core/src/server/firefox/firefox.ts","../playwright/packages/playwright-core/src/server/webkit/wkConnection.ts","../playwright/packages/playwright-core/src/server/webkit/wkAccessibility.ts","../playwright/packages/playwright-core/src/server/webkit/wkExecutionContext.ts","../playwright/packages/playwright-core/src/server/webkit/wkInput.ts","../playwright/packages/playwright-core/src/server/webkit/wkInterceptableRequest.ts","../playwright/packages/playwright-core/src/server/webkit/wkProvisionalPage.ts","../playwright/packages/playwright-core/src/server/webkit/wkWorkers.ts","../playwright/packages/playwright-core/src/server/webkit/wkPage.ts","../playwright/packages/playwright-core/src/server/webkit/wkBrowser.ts","../playwright/packages/playwright-core/src/server/webkit/webkit.ts","../playwright/packages/playwright-core/src/server/playwright.ts","../playwright/packages/playwright-core/src/client/eventEmitter.ts","../playwright/packages/playwright-core/src/client/clientStackTrace.ts","../playwright/packages/playwright-core/src/client/channelOwner.ts","../playwright/packages/playwright-core/src/client/stream.ts","../playwright/packages/playwright-core/src/client/fileUtils.ts","../playwright/packages/playwright-core/src/client/artifact.ts","../playwright/packages/playwright-core/src/client/cdpSession.ts","../playwright/packages/playwright-core/src/client/clientHelper.ts","../playwright/packages/playwright-core/src/client/clock.ts","../playwright/packages/playwright-core/src/client/errors.ts","../playwright/packages/playwright-core/src/client/jsHandle.ts","../playwright/packages/playwright-core/src/client/accessibility.ts","../playwright/packages/playwright-core/src/client/coverage.ts","../playwright/packages/playwright-core/src/client/download.ts","../playwright/packages/playwright-core/src/client/events.ts","../playwright/packages/playwright-core/src/utils/isomorphic/locatorUtils.ts","../playwright/packages/playwright-core/src/client/locator.ts","../playwright/packages/playwright-core/src/client/tracing.ts","../playwright/packages/playwright-core/src/client/timeoutSettings.ts","../playwright/packages/playwright-core/src/client/fetch.ts","../playwright/packages/playwright-core/src/client/waiter.ts","../playwright/packages/playwright-core/src/client/worker.ts","../playwright/packages/playwright-core/src/client/network.ts","../playwright/packages/playwright-core/src/client/types.ts","../playwright/packages/playwright-core/src/client/frame.ts","../playwright/packages/playwright-core/src/client/writableStream.ts","../playwright/packages/playwright-core/src/client/elementHandle.ts","../playwright/packages/playwright-core/src/client/fileChooser.ts","../playwright/packages/playwright-core/src/client/harRouter.ts","../playwright/packages/playwright-core/src/client/input.ts","../playwright/packages/playwright-core/src/client/video.ts","../playwright/packages/playwright-core/src/client/page.ts","../playwright/packages/playwright-core/src/client/consoleMessage.ts","../playwright/packages/playwright-core/src/client/dialog.ts","../playwright/packages/playwright-core/src/client/webError.ts","../playwright/packages/playwright-core/src/client/browserContext.ts","../playwright/packages/playwright-core/src/client/webSocket.ts","../playwright/packages/playwright-core/src/client/android.ts","../playwright/packages/playwright-core/src/client/browser.ts","../playwright/packages/playwright-core/src/client/browserType.ts","../playwright/packages/playwright-core/src/client/clientInstrumentation.ts","../playwright/packages/playwright-core/src/client/electron.ts","../playwright/packages/playwright-core/src/client/jsonPipe.ts","../playwright/packages/playwright-core/src/client/localUtils.ts","../playwright/packages/playwright-core/src/client/selectors.ts","../playwright/packages/playwright-core/src/client/playwright.ts","../playwright/packages/playwright-core/src/client/connection.ts","../src/client/crx.ts","../src/client/crxPlaywright.ts","../src/client/crxConnection.ts","../src/server/recorder/popupRecorderWindow.ts","../src/server/recorder/sidepanelRecorderWindow.ts","../node_modules/acorn/dist/acorn.mjs","../node_modules/acorn-walk/dist/walk.mjs","../src/server/recorder/parser.ts","../src/server/recorder/crxRecorderApp.ts","../src/server/utils.ts","../src/server/transport/crxTransport.ts","../src/server/recorder/recorderUtils.ts","../src/server/recorder/crxPlayer.ts","../src/server/crx.ts","../src/server/crxPlaywright.ts","../src/server/dispatchers/crxDispatcher.ts","../src/server/dispatchers/crxPlaywrightDispatcher.ts","../src/client/crxZone.ts","../src/index.ts"],"sourcesContent":["// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// @ts-ignore\nimport process from 'process/browser';\n\n// https://github.com/cabinjs/browser-hrtime/blob/cb6b7c336e93726a302e04a5ac4755e7e353edaf/src/index.ts#L22\nprocess.hrtime = (previousTimestamp?: [number, number]): [number, number] => {\n  const baseNow = Math.floor((Date.now() - performance.now()) * 1e-3);\n  const clocktime = performance.now() * 1e-3;\n  let seconds = Math.floor(clocktime) + baseNow;\n  let nanoseconds = Math.floor((clocktime % 1) * 1e9);\n\n  if (previousTimestamp) {\n    seconds = seconds - previousTimestamp[0];\n    nanoseconds = nanoseconds - previousTimestamp[1];\n    if (nanoseconds < 0) {\n      seconds--;\n      nanoseconds += 1e9;\n    }\n  }\n  return [seconds, nanoseconds];\n};\nprocess.platform = 'linux';\nprocess.versions.node = '18.16';\nprocess.stdout = { isTTY: 'false' };\nprocess.geteuid = () => '';\n\nprocess.env['PLAYWRIGHT_BROWSERS_PATH'] = '.';\n\nself.process = process;\n","(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6–8\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport 'setimmediate';\n\n// @ts-ignore\nself.setImmediate = setImmediate;\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    const arr = new Uint8Array(1)\n    const proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  const buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  const valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  const b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  const length = byteLength(string, encoding) | 0\n  let buf = createBuffer(length)\n\n  const actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  const length = array.length < 0 ? 0 : checked(array.length) | 0\n  const buf = createBuffer(length)\n  for (let i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    const copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  let buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    const len = checked(obj.length) | 0\n    const buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  let x = a.length\n  let y = b.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  let i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  const buffer = Buffer.allocUnsafe(length)\n  let pos = 0\n  for (i = 0; i < list.length; ++i) {\n    let buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n        buf.copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  const len = string.length\n  const mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  let loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  const i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  const len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (let i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  const len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (let i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  const len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (let i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  const length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  let str = ''\n  const max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  let x = thisEnd - thisStart\n  let y = end - start\n  const len = Math.min(x, y)\n\n  const thisCopy = this.slice(thisStart, thisEnd)\n  const targetCopy = target.slice(start, end)\n\n  for (let i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  let indexSize = 1\n  let arrLength = arr.length\n  let valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  let i\n  if (dir) {\n    let foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      let found = true\n      for (let j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  const remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  const strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  let i\n  for (i = 0; i < length; ++i) {\n    const parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  const remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  const res = []\n\n  let i = start\n  while (i < end) {\n    const firstByte = buf[i]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  const len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  let res = ''\n  let i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  const len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  let out = ''\n  for (let i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  const bytes = buf.slice(start, end)\n  let res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (let i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  const len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  const newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  let val = this[offset + --byteLength]\n  let mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const lo = first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24\n\n  const hi = this[++offset] +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    last * 2 ** 24\n\n  return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const hi = first * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  const lo = this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last\n\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let i = byteLength\n  let mul = 1\n  let val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = this[offset + 4] +\n    this[offset + 5] * 2 ** 8 +\n    this[offset + 6] * 2 ** 16 +\n    (last << 24) // Overflow\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = (first << 24) + // Overflow\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let mul = 1\n  let i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset + 7] = lo\n  lo = lo >> 8\n  buf[offset + 6] = lo\n  lo = lo >> 8\n  buf[offset + 5] = lo\n  lo = lo >> 8\n  buf[offset + 4] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset + 3] = hi\n  hi = hi >> 8\n  buf[offset + 2] = hi\n  hi = hi >> 8\n  buf[offset + 1] = hi\n  hi = hi >> 8\n  buf[offset] = hi\n  return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = 0\n  let mul = 1\n  let sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  let sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  const len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      const code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  let i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    const bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    const len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n  errors[sym] = class NodeError extends Base {\n    constructor () {\n      super()\n\n      Object.defineProperty(this, 'message', {\n        value: getMessage.apply(this, arguments),\n        writable: true,\n        configurable: true\n      })\n\n      // Add the error code to the name to include it in the stack trace.\n      this.name = `${this.name} [${sym}]`\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      this.stack // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete this.name\n    }\n\n    get code () {\n      return sym\n    }\n\n    set code (value) {\n      Object.defineProperty(this, 'code', {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true\n      })\n    }\n\n    toString () {\n      return `${this.name} [${sym}]: ${this.message}`\n    }\n  }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n  function (name) {\n    if (name) {\n      return `${name} is outside of buffer bounds`\n    }\n\n    return 'Attempt to access memory outside buffer bounds'\n  }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n  function (name, actual) {\n    return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n  }, TypeError)\nE('ERR_OUT_OF_RANGE',\n  function (str, range, input) {\n    let msg = `The value of \"${str}\" is out of range.`\n    let received = input\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    }\n    msg += ` It must be ${range}. Received ${received}`\n    return msg\n  }, RangeError)\n\nfunction addNumericalSeparator (val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n  validateNumber(offset, 'offset')\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1))\n  }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    const n = typeof min === 'bigint' ? 'n' : ''\n    let range\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n      } else {\n        range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n                `${(byteLength + 1) * 8 - 1}${n}`\n      }\n    } else {\n      range = `>= ${min}${n} and <= ${max}${n}`\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n  }\n  checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n}\n\nfunction boundsError (value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type)\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n  }\n\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n  }\n\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n                                    `>= ${type ? 1 : 0} and <= ${length}`,\n                                    value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  let codePoint\n  const length = string.length\n  let leadSurrogate = null\n  const bytes = []\n\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  let c, hi, lo\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  let i\n  for (i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n  const alphabet = '0123456789abcdef'\n  const table = new Array(256)\n  for (let i = 0; i < 16; ++i) {\n    const i16 = i * 16\n    for (let j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n  throw new Error('BigInt not supported')\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport buffer from 'buffer';\n\nself.Buffer = buffer.Buffer;\n",null,null,null,"'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n","'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n","'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n","'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n","'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n","'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n","'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n","'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n","'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n","'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n","'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n","'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n","'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n","'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n","'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n","'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n","'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n","'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n    var arr = [];\n\n    for (var i = 0; i < a.length; i += 1) {\n        arr[i] = a[i];\n    }\n    for (var j = 0; j < b.length; j += 1) {\n        arr[j + a.length] = b[j];\n    }\n\n    return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n    var arr = [];\n    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n        arr[j] = arrLike[i];\n    }\n    return arr;\n};\n\nvar joiny = function (arr, joiner) {\n    var str = '';\n    for (var i = 0; i < arr.length; i += 1) {\n        str += arr[i];\n        if (i + 1 < arr.length) {\n            str += joiner;\n        }\n    }\n    return str;\n};\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slicy(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                concatty(args, arguments)\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        }\n        return target.apply(\n            that,\n            concatty(args, arguments)\n        );\n\n    };\n\n    var boundLength = max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs[i] = '$' + i;\n    }\n\n    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n","'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n","'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n","'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n","'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n","'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n","'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n","'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\n\nvar gopd = require('gopd');\n\n/** @type {import('.')} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor<unknown>} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n","'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\treturn !!$defineProperty;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!$defineProperty) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = require('es-errors/type');\nvar $floor = GetIntrinsic('%Math.floor%');\n\n/** @type {import('.')} */\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar $apply = require('./functionApply');\nvar actualApply = require('./actualApply');\n\n/** @type {import('./applyBind')} */\nmodule.exports = function applyBind() {\n\treturn actualApply(bind, $apply, arguments);\n};\n","'use strict';\n\nvar setFunctionLength = require('set-function-length');\n\nvar $defineProperty = require('es-define-property');\n\nvar callBindBasic = require('call-bind-apply-helpers');\nvar applyBind = require('call-bind-apply-helpers/applyBind');\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = callBindBasic(arguments);\n\tvar adjustedLength = originalFunction.length - (arguments.length - 1);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + (adjustedLength > 0 ? adjustedLength : 0),\n\t\ttrue\n\t);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n","'use strict';\n\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n    for (var i = 0, len = array.length; i < len; i++) {\n        if (hasOwnProperty.call(array, i)) {\n            if (receiver == null) {\n                iterator(array[i], i, array);\n            } else {\n                iterator.call(receiver, array[i], i, array);\n            }\n        }\n    }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n    for (var i = 0, len = string.length; i < len; i++) {\n        // no such thing as a sparse string.\n        if (receiver == null) {\n            iterator(string.charAt(i), i, string);\n        } else {\n            iterator.call(receiver, string.charAt(i), i, string);\n        }\n    }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n    for (var k in object) {\n        if (hasOwnProperty.call(object, k)) {\n            if (receiver == null) {\n                iterator(object[k], k, object);\n            } else {\n                iterator.call(receiver, object[k], k, object);\n            }\n        }\n    }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n    if (!isCallable(iterator)) {\n        throw new TypeError('iterator must be a function');\n    }\n\n    var receiver;\n    if (arguments.length >= 3) {\n        receiver = thisArg;\n    }\n\n    if (toStr.call(list) === '[object Array]') {\n        forEachArray(list, iterator, receiver);\n    } else if (typeof list === 'string') {\n        forEachString(list, iterator, receiver);\n    } else {\n        forEachObject(list, iterator, receiver);\n    }\n};\n\nmodule.exports = forEach;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = [\n\t'Float32Array',\n\t'Float64Array',\n\t'Int8Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'BigInt64Array',\n\t'BigUint64Array'\n];\n","'use strict';\n\nvar possibleNames = require('possible-typed-array-names');\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\n/** @type {import('.')} */\nmodule.exports = function availableTypedArrays() {\n\tvar /** @type {ReturnType<typeof availableTypedArrays>} */ out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\t// @ts-expect-error\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t// eslint-disable-next-line no-extra-parens\n\tvar intrinsic = /** @type {Parameters<typeof callBindBasic>[0][0]} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic([intrinsic]);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBind = require('call-bind');\nvar callBound = require('call-bound');\nvar gOPD = require('gopd');\n\n/** @type {(O: object) => string} */\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\n\n/** @type {<T = unknown>(array: readonly T[], value: unknown) => number} */\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\n/** @typedef {(receiver: import('.').TypedArray) => string | typeof Uint8Array.prototype.slice.call | typeof Uint8Array.prototype.set.call} Getter */\n/** @type {{ [k in `\\$${import('.').TypedArrayName}`]?: Getter } & { __proto__: null }} */\nvar cache = { __proto__: null };\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\t// @ts-expect-error TODO: fix\n\t\t\tcache['$' + typedArray] = callBind(descriptor.get);\n\t\t}\n\t});\n} else {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tvar fn = arr.slice || arr.set;\n\t\tif (fn) {\n\t\t\t// @ts-expect-error TODO: fix\n\t\t\tcache['$' + typedArray] = callBind(fn);\n\t\t}\n\t});\n}\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\t/** @type {ReturnType<typeof tryAllTypedArrays>} */ var found = false;\n\tforEach(\n\t\t// eslint-disable-next-line no-extra-parens\n\t\t/** @type {Record<`\\$${TypedArrayName}`, Getter>} */ /** @type {any} */ (cache),\n\t\t/** @type {(getter: Getter, name: `\\$${import('.').TypedArrayName}`) => void} */\n\t\tfunction (getter, typedArray) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t// @ts-expect-error TODO: fix\n\t\t\t\t\tif ('$' + getter(value) === typedArray) {\n\t\t\t\t\t\tfound = $slice(typedArray, 1);\n\t\t\t\t\t}\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar trySlices = function tryAllSlices(value) {\n\t/** @type {ReturnType<typeof tryAllSlices>} */ var found = false;\n\tforEach(\n\t\t// eslint-disable-next-line no-extra-parens\n\t\t/** @type {Record<`\\$${TypedArrayName}`, Getter>} */ /** @type {any} */ (cache),\n\t\t/** @type {(getter: typeof cache, name: `\\$${import('.').TypedArrayName}`) => void} */ function (getter, name) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error TODO: fix\n\t\t\t\t\tgetter(value);\n\t\t\t\t\tfound = $slice(name, 1);\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {import('.')} */\nmodule.exports = function whichTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\t/** @type {string} */\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\tif ($indexOf(typedArrays, tag) > -1) {\n\t\t\treturn tag;\n\t\t}\n\t\tif (tag !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\t// node < 0.6 hits here on real Typed Arrays\n\t\treturn trySlices(value);\n\t}\n\tif (!gOPD) { return null; } // unknown engine\n\treturn tryTypedArrays(value);\n};\n","'use strict';\n\nvar whichTypedArray = require('which-typed-array');\n\n/** @type {import('.')} */\nmodule.exports = function isTypedArray(value) {\n\treturn !!whichTypedArray(value);\n};\n","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n  return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n  var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n  var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n  if (typeof value !== 'object') {\n    return false;\n  }\n  try {\n    prototypeValueOf(value);\n    return true;\n  } catch(e) {\n    return false;\n  }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n    return ArrayBuffer.isView(value);\n  }\n\n  return (\n    isTypedArray(value) ||\n    isDataView(value)\n  );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n  return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n  return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n  return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n  return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n  return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n  return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n  return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n  return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n  return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n  return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n  return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n  return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n  typeof Map !== 'undefined' &&\n  isMapToString(new Map())\n);\n\nfunction isMap(value) {\n  if (typeof Map === 'undefined') {\n    return false;\n  }\n\n  return isMapToString.working\n    ? isMapToString(value)\n    : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n  return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n  typeof Set !== 'undefined' &&\n  isSetToString(new Set())\n);\nfunction isSet(value) {\n  if (typeof Set === 'undefined') {\n    return false;\n  }\n\n  return isSetToString.working\n    ? isSetToString(value)\n    : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n  return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n  typeof WeakMap !== 'undefined' &&\n  isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n  if (typeof WeakMap === 'undefined') {\n    return false;\n  }\n\n  return isWeakMapToString.working\n    ? isWeakMapToString(value)\n    : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n  return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n  typeof WeakSet !== 'undefined' &&\n  isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n  return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n  return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n  if (typeof ArrayBuffer === 'undefined') {\n    return false;\n  }\n\n  return isArrayBufferToString.working\n    ? isArrayBufferToString(value)\n    : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n  return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  typeof DataView !== 'undefined' &&\n  isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n  if (typeof DataView === 'undefined') {\n    return false;\n  }\n\n  return isDataViewToString.working\n    ? isDataViewToString(value)\n    : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n  return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n  if (typeof SharedArrayBufferCopy === 'undefined') {\n    return false;\n  }\n\n  if (typeof isSharedArrayBufferToString.working === 'undefined') {\n    isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n  }\n\n  return isSharedArrayBufferToString.working\n    ? isSharedArrayBufferToString(value)\n    : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n  return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n  return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n  return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n  return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n  return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n  return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n  return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n  return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n  return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n  return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n  return (\n    isNumberObject(value) ||\n    isStringObject(value) ||\n    isBooleanObject(value) ||\n    isBigIntObject(value) ||\n    isSymbolObject(value)\n  );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n  return typeof Uint8Array !== 'undefined' && (\n    isArrayBuffer(value) ||\n    isSharedArrayBuffer(value)\n  );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n  Object.defineProperty(exports, method, {\n    enumerable: false,\n    value: function() {\n      throw new Error(method + ' is not supported in userland');\n    }\n  });\n});\n","module.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n  function getOwnPropertyDescriptors(obj) {\n    var keys = Object.keys(obj);\n    var descriptors = {};\n    for (var i = 0; i < keys.length; i++) {\n      descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n    }\n    return descriptors;\n  };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  if (typeof process !== 'undefined' && process.noDeprecation === true) {\n    return fn;\n  }\n\n  // Allow for deprecating things in the process of starting up.\n  if (typeof process === 'undefined') {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n  var debugEnv = process.env.NODE_DEBUG;\n  debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n    .replace(/\\*/g, '.*')\n    .replace(/,/g, '$|^')\n    .toUpperCase();\n  debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (debugEnvRegex.test(set)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').slice(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.slice(1, -1);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n  if (typeof original !== 'function')\n    throw new TypeError('The \"original\" argument must be of type Function');\n\n  if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n    var fn = original[kCustomPromisifiedSymbol];\n    if (typeof fn !== 'function') {\n      throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n    }\n    Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n      value: fn, enumerable: false, writable: false, configurable: true\n    });\n    return fn;\n  }\n\n  function fn() {\n    var promiseResolve, promiseReject;\n    var promise = new Promise(function (resolve, reject) {\n      promiseResolve = resolve;\n      promiseReject = reject;\n    });\n\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n    args.push(function (err, value) {\n      if (err) {\n        promiseReject(err);\n      } else {\n        promiseResolve(value);\n      }\n    });\n\n    try {\n      original.apply(this, args);\n    } catch (err) {\n      promiseReject(err);\n    }\n\n    return promise;\n  }\n\n  Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n  if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n    value: fn, enumerable: false, writable: false, configurable: true\n  });\n  return Object.defineProperties(\n    fn,\n    getOwnPropertyDescriptors(original)\n  );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n  // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n  // Because `null` is a special error value in callbacks which means \"no error\n  // occurred\", we error-wrap so the callback consumer can distinguish between\n  // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n  if (!reason) {\n    var newReason = new Error('Promise was rejected with a falsy value');\n    newReason.reason = reason;\n    reason = newReason;\n  }\n  return cb(reason);\n}\n\nfunction callbackify(original) {\n  if (typeof original !== 'function') {\n    throw new TypeError('The \"original\" argument must be of type Function');\n  }\n\n  // We DO NOT return the promise as it gives the user a false sense that\n  // the promise is actually somehow related to the callback's execution\n  // and that the callback throwing will reject the promise.\n  function callbackified() {\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n\n    var maybeCb = args.pop();\n    if (typeof maybeCb !== 'function') {\n      throw new TypeError('The last argument must be of type Function');\n    }\n    var self = this;\n    var cb = function() {\n      return maybeCb.apply(self, arguments);\n    };\n    // In true node style we process the callback on `nextTick` with all the\n    // implications (stack, `uncaughtException`, `async_hooks`)\n    original.apply(this, args)\n      .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n            function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n  }\n\n  Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n  Object.defineProperties(callbackified,\n                          getOwnPropertyDescriptors(original));\n  return callbackified;\n}\nexports.callbackify = callbackify;\n","// Currently in sync with Node.js lib/internal/errors.js\n// https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f\n\n/* eslint node-core/documented-errors: \"error\" */\n/* eslint node-core/alphabetize-errors: \"error\" */\n/* eslint node-core/prefer-util-format-errors: \"error\" */\n\n'use strict';\n\n// The whole point behind this internal module is to allow Node.js to no\n// longer be forced to treat every error message change as a semver-major\n// change. The NodeError classes here all expose a `code` property whose\n// value statically and permanently identifies the error. While the error\n// message may change, the code should not.\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nvar codes = {};\n\n// Lazy loaded\nvar assert;\nvar util;\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n  var NodeError = /*#__PURE__*/function (_Base) {\n    _inherits(NodeError, _Base);\n    var _super = _createSuper(NodeError);\n    function NodeError(arg1, arg2, arg3) {\n      var _this;\n      _classCallCheck(this, NodeError);\n      _this = _super.call(this, getMessage(arg1, arg2, arg3));\n      _this.code = code;\n      return _this;\n    }\n    return _createClass(NodeError);\n  }(Base);\n  codes[code] = NodeError;\n}\n\n// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n  return str.substring(this_len - search.length, this_len) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\ncreateErrorType('ERR_AMBIGUOUS_ARGUMENT', 'The \"%s\" argument is ambiguous. %s', TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  if (assert === undefined) assert = require('../assert');\n  assert(typeof name === 'string', \"'name' must be a string\");\n\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n  var msg;\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  // TODO(BridgeAR): Improve the output by showing `null` and similar.\n  msg += \". Received type \".concat(_typeof(actual));\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_VALUE', function (name, value) {\n  var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid';\n  if (util === undefined) util = require('util/');\n  var inspected = util.inspect(value);\n  if (inspected.length > 128) {\n    inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n  }\n  return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n}, TypeError, RangeError);\ncreateErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) {\n  var type;\n  if (value && value.constructor && value.constructor.name) {\n    type = \"instance of \".concat(value.constructor.name);\n  } else {\n    type = \"type \".concat(_typeof(value));\n  }\n  return \"Expected \".concat(input, \" to be returned from the \\\"\").concat(name, \"\\\"\") + \" function but got \".concat(type, \".\");\n}, TypeError);\ncreateErrorType('ERR_MISSING_ARGS', function () {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  if (assert === undefined) assert = require('../assert');\n  assert(args.length > 0, 'At least one arg needs to be specified');\n  var msg = 'The ';\n  var len = args.length;\n  args = args.map(function (a) {\n    return \"\\\"\".concat(a, \"\\\"\");\n  });\n  switch (len) {\n    case 1:\n      msg += \"\".concat(args[0], \" argument\");\n      break;\n    case 2:\n      msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n      break;\n    default:\n      msg += args.slice(0, len - 1).join(', ');\n      msg += \", and \".concat(args[len - 1], \" arguments\");\n      break;\n  }\n  return \"\".concat(msg, \" must be specified\");\n}, TypeError);\nmodule.exports.codes = codes;","// Currently in sync with Node.js lib/internal/assert/assertion_error.js\n// https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c\n\n'use strict';\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _require = require('util/'),\n  inspect = _require.inspect;\nvar _require2 = require('../errors'),\n  ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE;\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n  return str.substring(this_len - search.length, this_len) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\nfunction repeat(str, count) {\n  count = Math.floor(count);\n  if (str.length == 0 || count == 0) return '';\n  var maxCount = str.length * count;\n  count = Math.floor(Math.log(count) / Math.log(2));\n  while (count) {\n    str += str;\n    count--;\n  }\n  str += str.substring(0, maxCount - str.length);\n  return str;\n}\nvar blue = '';\nvar green = '';\nvar red = '';\nvar white = '';\nvar kReadableOperator = {\n  deepStrictEqual: 'Expected values to be strictly deep-equal:',\n  strictEqual: 'Expected values to be strictly equal:',\n  strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n  deepEqual: 'Expected values to be loosely deep-equal:',\n  equal: 'Expected values to be loosely equal:',\n  notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n  notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n  notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n  notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n  notEqual: 'Expected \"actual\" to be loosely unequal to:',\n  notIdentical: 'Values identical but not reference-equal:'\n};\n\n// Comparing short primitives should just show === / !== instead of using the\n// diff.\nvar kMaxShortLength = 10;\nfunction copyError(source) {\n  var keys = Object.keys(source);\n  var target = Object.create(Object.getPrototypeOf(source));\n  keys.forEach(function (key) {\n    target[key] = source[key];\n  });\n  Object.defineProperty(target, 'message', {\n    value: source.message\n  });\n  return target;\n}\nfunction inspectValue(val) {\n  // The util.inspect default values could be changed. This makes sure the\n  // error messages contain the necessary information nevertheless.\n  return inspect(val, {\n    compact: false,\n    customInspect: false,\n    depth: 1000,\n    maxArrayLength: Infinity,\n    // Assert compares only enumerable properties (with a few exceptions).\n    showHidden: false,\n    // Having a long line as error is better than wrapping the line for\n    // comparison for now.\n    // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n    // have meta information about the inspected properties (i.e., know where\n    // in what line the property starts and ends).\n    breakLength: Infinity,\n    // Assert does not detect proxies currently.\n    showProxy: false,\n    sorted: true,\n    // Inspect getters as we also check them when comparing entries.\n    getters: true\n  });\n}\nfunction createErrDiff(actual, expected, operator) {\n  var other = '';\n  var res = '';\n  var lastPos = 0;\n  var end = '';\n  var skipped = false;\n  var actualInspected = inspectValue(actual);\n  var actualLines = actualInspected.split('\\n');\n  var expectedLines = inspectValue(expected).split('\\n');\n  var i = 0;\n  var indicator = '';\n\n  // In case both values are objects explicitly mark them as not reference equal\n  // for the `strictEqual` operator.\n  if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) {\n    operator = 'strictEqualObject';\n  }\n\n  // If \"actual\" and \"expected\" fit on a single line and they are not strictly\n  // equal, check further special handling.\n  if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n    var inputLength = actualLines[0].length + expectedLines[0].length;\n    // If the character length of \"actual\" and \"expected\" together is less than\n    // kMaxShortLength and if neither is an object and at least one of them is\n    // not `zero`, use the strict equal comparison to visualize the output.\n    if (inputLength <= kMaxShortLength) {\n      if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) {\n        // -0 === +0\n        return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n      }\n    } else if (operator !== 'strictEqualObject') {\n      // If the stderr is a tty and the input length is lower than the current\n      // columns per line, add a mismatch indicator below the output. If it is\n      // not a tty, use a default value of 80 characters.\n      var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n      if (inputLength < maxLength) {\n        while (actualLines[0][i] === expectedLines[0][i]) {\n          i++;\n        }\n        // Ignore the first characters.\n        if (i > 2) {\n          // Add position indicator for the first mismatch in case it is a\n          // single line and the input length is less than the column length.\n          indicator = \"\\n  \".concat(repeat(' ', i), \"^\");\n          i = 0;\n        }\n      }\n    }\n  }\n\n  // Remove all ending lines that match (this optimizes the output for\n  // readability by reducing the number of total changed lines).\n  var a = actualLines[actualLines.length - 1];\n  var b = expectedLines[expectedLines.length - 1];\n  while (a === b) {\n    if (i++ < 2) {\n      end = \"\\n  \".concat(a).concat(end);\n    } else {\n      other = a;\n    }\n    actualLines.pop();\n    expectedLines.pop();\n    if (actualLines.length === 0 || expectedLines.length === 0) break;\n    a = actualLines[actualLines.length - 1];\n    b = expectedLines[expectedLines.length - 1];\n  }\n  var maxLines = Math.max(actualLines.length, expectedLines.length);\n  // Strict equal with identical objects that are not identical by reference.\n  // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() })\n  if (maxLines === 0) {\n    // We have to get the result again. The lines were all removed before.\n    var _actualLines = actualInspected.split('\\n');\n\n    // Only remove lines in case it makes sense to collapse those.\n    // TODO: Accept env to always show the full error.\n    if (_actualLines.length > 30) {\n      _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n      while (_actualLines.length > 27) {\n        _actualLines.pop();\n      }\n    }\n    return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join('\\n'), \"\\n\");\n  }\n  if (i > 3) {\n    end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n    skipped = true;\n  }\n  if (other !== '') {\n    end = \"\\n  \".concat(other).concat(end);\n    other = '';\n  }\n  var printedLines = 0;\n  var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n  var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n  for (i = 0; i < maxLines; i++) {\n    // Only extra expected lines exist\n    var cur = i - lastPos;\n    if (actualLines.length < i + 1) {\n      // If the last diverging line is more than one line above and the\n      // current line is at least line three, add some of the former lines and\n      // also add dots to indicate skipped entries.\n      if (cur > 1 && i > 2) {\n        if (cur > 4) {\n          res += \"\\n\".concat(blue, \"...\").concat(white);\n          skipped = true;\n        } else if (cur > 3) {\n          res += \"\\n  \".concat(expectedLines[i - 2]);\n          printedLines++;\n        }\n        res += \"\\n  \".concat(expectedLines[i - 1]);\n        printedLines++;\n      }\n      // Mark the current line as the last diverging one.\n      lastPos = i;\n      // Add the expected line to the cache.\n      other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n      printedLines++;\n      // Only extra actual lines exist\n    } else if (expectedLines.length < i + 1) {\n      // If the last diverging line is more than one line above and the\n      // current line is at least line three, add some of the former lines and\n      // also add dots to indicate skipped entries.\n      if (cur > 1 && i > 2) {\n        if (cur > 4) {\n          res += \"\\n\".concat(blue, \"...\").concat(white);\n          skipped = true;\n        } else if (cur > 3) {\n          res += \"\\n  \".concat(actualLines[i - 2]);\n          printedLines++;\n        }\n        res += \"\\n  \".concat(actualLines[i - 1]);\n        printedLines++;\n      }\n      // Mark the current line as the last diverging one.\n      lastPos = i;\n      // Add the actual line to the result.\n      res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n      printedLines++;\n      // Lines diverge\n    } else {\n      var expectedLine = expectedLines[i];\n      var actualLine = actualLines[i];\n      // If the lines diverge, specifically check for lines that only diverge by\n      // a trailing comma. In that case it is actually identical and we should\n      // mark it as such.\n      var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine);\n      // If the expected line has a trailing comma but is otherwise identical,\n      // add a comma at the end of the actual line. Otherwise the output could\n      // look weird as in:\n      //\n      //   [\n      //     1         // No comma at the end!\n      // +   2\n      //   ]\n      //\n      if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) {\n        divergingLines = false;\n        actualLine += ',';\n      }\n      if (divergingLines) {\n        // If the last diverging line is more than one line above and the\n        // current line is at least line three, add some of the former lines and\n        // also add dots to indicate skipped entries.\n        if (cur > 1 && i > 2) {\n          if (cur > 4) {\n            res += \"\\n\".concat(blue, \"...\").concat(white);\n            skipped = true;\n          } else if (cur > 3) {\n            res += \"\\n  \".concat(actualLines[i - 2]);\n            printedLines++;\n          }\n          res += \"\\n  \".concat(actualLines[i - 1]);\n          printedLines++;\n        }\n        // Mark the current line as the last diverging one.\n        lastPos = i;\n        // Add the actual line to the result and cache the expected diverging\n        // line so consecutive diverging lines show up as +++--- and not +-+-+-.\n        res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n        other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n        printedLines += 2;\n        // Lines are identical\n      } else {\n        // Add all cached information to the result before adding other things\n        // and reset the cache.\n        res += other;\n        other = '';\n        // If the last diverging line is exactly one line above or if it is the\n        // very first line, add the line to the result.\n        if (cur === 1 || i === 0) {\n          res += \"\\n  \".concat(actualLine);\n          printedLines++;\n        }\n      }\n    }\n    // Inspected object to big (Show ~20 rows max)\n    if (printedLines > 20 && i < maxLines - 2) {\n      return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n    }\n  }\n  return \"\".concat(msg).concat(skipped ? skippedMsg : '', \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n}\nvar AssertionError = /*#__PURE__*/function (_Error, _inspect$custom) {\n  _inherits(AssertionError, _Error);\n  var _super = _createSuper(AssertionError);\n  function AssertionError(options) {\n    var _this;\n    _classCallCheck(this, AssertionError);\n    if (_typeof(options) !== 'object' || options === null) {\n      throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);\n    }\n    var message = options.message,\n      operator = options.operator,\n      stackStartFn = options.stackStartFn;\n    var actual = options.actual,\n      expected = options.expected;\n    var limit = Error.stackTraceLimit;\n    Error.stackTraceLimit = 0;\n    if (message != null) {\n      _this = _super.call(this, String(message));\n    } else {\n      if (process.stderr && process.stderr.isTTY) {\n        // Reset on each call to make sure we handle dynamically set environment\n        // variables correct.\n        if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n          blue = \"\\x1B[34m\";\n          green = \"\\x1B[32m\";\n          white = \"\\x1B[39m\";\n          red = \"\\x1B[31m\";\n        } else {\n          blue = '';\n          green = '';\n          white = '';\n          red = '';\n        }\n      }\n      // Prevent the error stack from being visible by duplicating the error\n      // in a very close way to the original in case both sides are actually\n      // instances of Error.\n      if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) {\n        actual = copyError(actual);\n        expected = copyError(expected);\n      }\n      if (operator === 'deepStrictEqual' || operator === 'strictEqual') {\n        _this = _super.call(this, createErrDiff(actual, expected, operator));\n      } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') {\n        // In case the objects are equal but the operator requires unequal, show\n        // the first object and say A equals B\n        var base = kReadableOperator[operator];\n        var res = inspectValue(actual).split('\\n');\n\n        // In case \"actual\" is an object, it should not be reference equal.\n        if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) {\n          base = kReadableOperator.notStrictEqualObject;\n        }\n\n        // Only remove lines in case it makes sense to collapse those.\n        // TODO: Accept env to always show the full error.\n        if (res.length > 30) {\n          res[26] = \"\".concat(blue, \"...\").concat(white);\n          while (res.length > 27) {\n            res.pop();\n          }\n        }\n\n        // Only print a single input.\n        if (res.length === 1) {\n          _this = _super.call(this, \"\".concat(base, \" \").concat(res[0]));\n        } else {\n          _this = _super.call(this, \"\".concat(base, \"\\n\\n\").concat(res.join('\\n'), \"\\n\"));\n        }\n      } else {\n        var _res = inspectValue(actual);\n        var other = '';\n        var knownOperators = kReadableOperator[operator];\n        if (operator === 'notDeepEqual' || operator === 'notEqual') {\n          _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n          if (_res.length > 1024) {\n            _res = \"\".concat(_res.slice(0, 1021), \"...\");\n          }\n        } else {\n          other = \"\".concat(inspectValue(expected));\n          if (_res.length > 512) {\n            _res = \"\".concat(_res.slice(0, 509), \"...\");\n          }\n          if (other.length > 512) {\n            other = \"\".concat(other.slice(0, 509), \"...\");\n          }\n          if (operator === 'deepEqual' || operator === 'equal') {\n            _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n          } else {\n            other = \" \".concat(operator, \" \").concat(other);\n          }\n        }\n        _this = _super.call(this, \"\".concat(_res).concat(other));\n      }\n    }\n    Error.stackTraceLimit = limit;\n    _this.generatedMessage = !message;\n    Object.defineProperty(_assertThisInitialized(_this), 'name', {\n      value: 'AssertionError [ERR_ASSERTION]',\n      enumerable: false,\n      writable: true,\n      configurable: true\n    });\n    _this.code = 'ERR_ASSERTION';\n    _this.actual = actual;\n    _this.expected = expected;\n    _this.operator = operator;\n    if (Error.captureStackTrace) {\n      // eslint-disable-next-line no-restricted-syntax\n      Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n    }\n    // Create error message including the error code in the name.\n    _this.stack;\n    // Reset the name.\n    _this.name = 'AssertionError';\n    return _possibleConstructorReturn(_this);\n  }\n  _createClass(AssertionError, [{\n    key: \"toString\",\n    value: function toString() {\n      return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n    }\n  }, {\n    key: _inspect$custom,\n    value: function value(recurseTimes, ctx) {\n      // This limits the `actual` and `expected` property default inspection to\n      // the minimum depth. Otherwise those values would be too verbose compared\n      // to the actual error message which contains a combined view of these two\n      // input values.\n      return inspect(this, _objectSpread(_objectSpread({}, ctx), {}, {\n        customInspect: false,\n        depth: 0\n      }));\n    }\n  }]);\n  return AssertionError;\n}( /*#__PURE__*/_wrapNativeSuper(Error), inspect.custom);\nmodule.exports = AssertionError;","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar objectKeys = require('object-keys');\nvar hasSymbols = require('has-symbols/shams')();\nvar callBound = require('call-bound');\nvar $Object = require('es-object-atoms');\nvar $push = callBound('Array.prototype.push');\nvar $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable');\nvar originalGetSymbols = hasSymbols ? $Object.getOwnPropertySymbols : null;\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function assign(target, source1) {\n\tif (target == null) { throw new TypeError('target must be an object'); }\n\tvar to = $Object(target); // step 1\n\tif (arguments.length === 1) {\n\t\treturn to; // step 2\n\t}\n\tfor (var s = 1; s < arguments.length; ++s) {\n\t\tvar from = $Object(arguments[s]); // step 3.a.i\n\n\t\t// step 3.a.ii:\n\t\tvar keys = objectKeys(from);\n\t\tvar getSymbols = hasSymbols && ($Object.getOwnPropertySymbols || originalGetSymbols);\n\t\tif (getSymbols) {\n\t\t\tvar syms = getSymbols(from);\n\t\t\tfor (var j = 0; j < syms.length; ++j) {\n\t\t\t\tvar key = syms[j];\n\t\t\t\tif ($propIsEnumerable(from, key)) {\n\t\t\t\t\t$push(keys, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// step 3.a.iii:\n\t\tfor (var i = 0; i < keys.length; ++i) {\n\t\t\tvar nextKey = keys[i];\n\t\t\tif ($propIsEnumerable(from, nextKey)) { // step 3.a.iii.2\n\t\t\t\tvar propValue = from[nextKey]; // step 3.a.iii.2.a\n\t\t\t\tto[nextKey] = propValue; // step 3.a.iii.2.b\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to; // step 4\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar lacksProperEnumerationOrder = function () {\n\tif (!Object.assign) {\n\t\treturn false;\n\t}\n\t/*\n\t * v8, specifically in node 4.x, has a bug with incorrect property enumeration order\n\t * note: this does not detect the bug unless there's 20 characters\n\t */\n\tvar str = 'abcdefghijklmnopqrst';\n\tvar letters = str.split('');\n\tvar map = {};\n\tfor (var i = 0; i < letters.length; ++i) {\n\t\tmap[letters[i]] = letters[i];\n\t}\n\tvar obj = Object.assign({}, map);\n\tvar actual = '';\n\tfor (var k in obj) {\n\t\tactual += k;\n\t}\n\treturn str !== actual;\n};\n\nvar assignHasPendingExceptions = function () {\n\tif (!Object.assign || !Object.preventExtensions) {\n\t\treturn false;\n\t}\n\t/*\n\t * Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t * which is 72% slower than our shim, and Firefox 40's native implementation.\n\t */\n\tvar thrower = Object.preventExtensions({ 1: 2 });\n\ttry {\n\t\tObject.assign(thrower, 'xy');\n\t} catch (e) {\n\t\treturn thrower[1] === 'y';\n\t}\n\treturn false;\n};\n\nmodule.exports = function getPolyfill() {\n\tif (!Object.assign) {\n\t\treturn implementation;\n\t}\n\tif (lacksProperEnumerationOrder()) {\n\t\treturn implementation;\n\t}\n\tif (assignHasPendingExceptions()) {\n\t\treturn implementation;\n\t}\n\treturn Object.assign;\n};\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar defineDataProperty = require('define-data-property');\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar supportsDescriptors = require('has-property-descriptors')();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object) {\n\t\tif (predicate === true) {\n\t\t\tif (object[name] === value) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (!isFunction(predicate) || !predicate()) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (supportsDescriptors) {\n\t\tdefineDataProperty(object, name, value, true);\n\t} else {\n\t\tdefineDataProperty(object, name, value);\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n\treturn value !== value;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n\t\treturn Number.isNaN;\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function shimNumberIsNaN() {\n\tvar polyfill = getPolyfill();\n\tdefine(Number, { isNaN: polyfill }, {\n\t\tisNaN: function testIsNaN() {\n\t\t\treturn Number.isNaN !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar callBind = require('call-bind');\nvar define = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Number);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","// Currently in sync with Node.js lib/internal/util/comparisons.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar regexFlagsSupported = /a/g.flags !== undefined;\nvar arrayFromSet = function arrayFromSet(set) {\n  var array = [];\n  set.forEach(function (value) {\n    return array.push(value);\n  });\n  return array;\n};\nvar arrayFromMap = function arrayFromMap(map) {\n  var array = [];\n  map.forEach(function (value, key) {\n    return array.push([key, value]);\n  });\n  return array;\n};\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () {\n  return [];\n};\nvar numberIsNaN = Number.isNaN ? Number.isNaN : require('is-nan');\nfunction uncurryThis(f) {\n  return f.call.bind(f);\n}\nvar hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);\nvar propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\nvar objectToString = uncurryThis(Object.prototype.toString);\nvar _require$types = require('util/').types,\n  isAnyArrayBuffer = _require$types.isAnyArrayBuffer,\n  isArrayBufferView = _require$types.isArrayBufferView,\n  isDate = _require$types.isDate,\n  isMap = _require$types.isMap,\n  isRegExp = _require$types.isRegExp,\n  isSet = _require$types.isSet,\n  isNativeError = _require$types.isNativeError,\n  isBoxedPrimitive = _require$types.isBoxedPrimitive,\n  isNumberObject = _require$types.isNumberObject,\n  isStringObject = _require$types.isStringObject,\n  isBooleanObject = _require$types.isBooleanObject,\n  isBigIntObject = _require$types.isBigIntObject,\n  isSymbolObject = _require$types.isSymbolObject,\n  isFloat32Array = _require$types.isFloat32Array,\n  isFloat64Array = _require$types.isFloat64Array;\nfunction isNonIndex(key) {\n  if (key.length === 0 || key.length > 10) return true;\n  for (var i = 0; i < key.length; i++) {\n    var code = key.charCodeAt(i);\n    if (code < 48 || code > 57) return true;\n  }\n  // The maximum size for an array is 2 ** 32 -1.\n  return key.length === 10 && key >= Math.pow(2, 32);\n}\nfunction getOwnNonIndexProperties(value) {\n  return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n}\n\n// Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\nfunction compare(a, b) {\n  if (a === b) {\n    return 0;\n  }\n  var x = a.length;\n  var y = b.length;\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i];\n      y = b[i];\n      break;\n    }\n  }\n  if (x < y) {\n    return -1;\n  }\n  if (y < x) {\n    return 1;\n  }\n  return 0;\n}\nvar ONLY_ENUMERABLE = undefined;\nvar kStrict = true;\nvar kLoose = false;\nvar kNoIterator = 0;\nvar kIsArray = 1;\nvar kIsSet = 2;\nvar kIsMap = 3;\n\n// Check if they have the same source and flags\nfunction areSimilarRegExps(a, b) {\n  return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n}\nfunction areSimilarFloatArrays(a, b) {\n  if (a.byteLength !== b.byteLength) {\n    return false;\n  }\n  for (var offset = 0; offset < a.byteLength; offset++) {\n    if (a[offset] !== b[offset]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction areSimilarTypedArrays(a, b) {\n  if (a.byteLength !== b.byteLength) {\n    return false;\n  }\n  return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n}\nfunction areEqualArrayBuffers(buf1, buf2) {\n  return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n}\nfunction isEqualBoxedPrimitive(val1, val2) {\n  if (isNumberObject(val1)) {\n    return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n  }\n  if (isStringObject(val1)) {\n    return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n  }\n  if (isBooleanObject(val1)) {\n    return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n  }\n  if (isBigIntObject(val1)) {\n    return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n  }\n  return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n}\n\n// Notes: Type tags are historical [[Class]] properties that can be set by\n// FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS\n// and retrieved using Object.prototype.toString.call(obj) in JS\n// See https://tc39.github.io/ecma262/#sec-object.prototype.tostring\n// for a list of tags pre-defined in the spec.\n// There are some unspecified tags in the wild too (e.g. typed array tags).\n// Since tags can be altered, they only serve fast failures\n//\n// Typed arrays and buffers are checked by comparing the content in their\n// underlying ArrayBuffer. This optimization requires that it's\n// reasonable to interpret their underlying memory in the same way,\n// which is checked by comparing their type tags.\n// (e.g. a Uint8Array and a Uint16Array with the same memory content\n// could still be different because they will be interpreted differently).\n//\n// For strict comparison, objects should have\n// a) The same built-in type tags\n// b) The same prototypes.\n\nfunction innerDeepEqual(val1, val2, strict, memos) {\n  // All identical values are equivalent, as determined by ===.\n  if (val1 === val2) {\n    if (val1 !== 0) return true;\n    return strict ? objectIs(val1, val2) : true;\n  }\n\n  // Check more closely if val1 and val2 are equal.\n  if (strict) {\n    if (_typeof(val1) !== 'object') {\n      return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2);\n    }\n    if (_typeof(val2) !== 'object' || val1 === null || val2 === null) {\n      return false;\n    }\n    if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n      return false;\n    }\n  } else {\n    if (val1 === null || _typeof(val1) !== 'object') {\n      if (val2 === null || _typeof(val2) !== 'object') {\n        // eslint-disable-next-line eqeqeq\n        return val1 == val2;\n      }\n      return false;\n    }\n    if (val2 === null || _typeof(val2) !== 'object') {\n      return false;\n    }\n  }\n  var val1Tag = objectToString(val1);\n  var val2Tag = objectToString(val2);\n  if (val1Tag !== val2Tag) {\n    return false;\n  }\n  if (Array.isArray(val1)) {\n    // Check for sparse arrays and general fast path\n    if (val1.length !== val2.length) {\n      return false;\n    }\n    var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n    var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n    if (keys1.length !== keys2.length) {\n      return false;\n    }\n    return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n  }\n  // [browserify] This triggers on certain types in IE (Map/Set) so we don't\n  // wan't to early return out of the rest of the checks. However we can check\n  // if the second value is one of these values and the first isn't.\n  if (val1Tag === '[object Object]') {\n    // return keyCheck(val1, val2, strict, memos, kNoIterator);\n    if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n      return false;\n    }\n  }\n  if (isDate(val1)) {\n    if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n      return false;\n    }\n  } else if (isRegExp(val1)) {\n    if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n      return false;\n    }\n  } else if (isNativeError(val1) || val1 instanceof Error) {\n    // Do not compare the stack as it might differ even though the error itself\n    // is otherwise identical.\n    if (val1.message !== val2.message || val1.name !== val2.name) {\n      return false;\n    }\n  } else if (isArrayBufferView(val1)) {\n    if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n      if (!areSimilarFloatArrays(val1, val2)) {\n        return false;\n      }\n    } else if (!areSimilarTypedArrays(val1, val2)) {\n      return false;\n    }\n    // Buffer.compare returns true, so val1.length === val2.length. If they both\n    // only contain numeric keys, we don't need to exam further than checking\n    // the symbols.\n    var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n    var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n    if (_keys.length !== _keys2.length) {\n      return false;\n    }\n    return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n  } else if (isSet(val1)) {\n    if (!isSet(val2) || val1.size !== val2.size) {\n      return false;\n    }\n    return keyCheck(val1, val2, strict, memos, kIsSet);\n  } else if (isMap(val1)) {\n    if (!isMap(val2) || val1.size !== val2.size) {\n      return false;\n    }\n    return keyCheck(val1, val2, strict, memos, kIsMap);\n  } else if (isAnyArrayBuffer(val1)) {\n    if (!areEqualArrayBuffers(val1, val2)) {\n      return false;\n    }\n  } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n    return false;\n  }\n  return keyCheck(val1, val2, strict, memos, kNoIterator);\n}\nfunction getEnumerables(val, keys) {\n  return keys.filter(function (k) {\n    return propertyIsEnumerable(val, k);\n  });\n}\nfunction keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n  // For all remaining Object pairs, including Array, objects and Maps,\n  // equivalence is determined by having:\n  // a) The same number of owned enumerable properties\n  // b) The same set of keys/indexes (although not necessarily the same order)\n  // c) Equivalent values for every corresponding key/index\n  // d) For Sets and Maps, equal contents\n  // Note: this accounts for both named and indexed properties on Arrays.\n  if (arguments.length === 5) {\n    aKeys = Object.keys(val1);\n    var bKeys = Object.keys(val2);\n\n    // The pair must have the same number of owned properties.\n    if (aKeys.length !== bKeys.length) {\n      return false;\n    }\n  }\n\n  // Cheap key test\n  var i = 0;\n  for (; i < aKeys.length; i++) {\n    if (!hasOwnProperty(val2, aKeys[i])) {\n      return false;\n    }\n  }\n  if (strict && arguments.length === 5) {\n    var symbolKeysA = objectGetOwnPropertySymbols(val1);\n    if (symbolKeysA.length !== 0) {\n      var count = 0;\n      for (i = 0; i < symbolKeysA.length; i++) {\n        var key = symbolKeysA[i];\n        if (propertyIsEnumerable(val1, key)) {\n          if (!propertyIsEnumerable(val2, key)) {\n            return false;\n          }\n          aKeys.push(key);\n          count++;\n        } else if (propertyIsEnumerable(val2, key)) {\n          return false;\n        }\n      }\n      var symbolKeysB = objectGetOwnPropertySymbols(val2);\n      if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) {\n        return false;\n      }\n    } else {\n      var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n      if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n        return false;\n      }\n    }\n  }\n  if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n    return true;\n  }\n\n  // Use memos to handle cycles.\n  if (memos === undefined) {\n    memos = {\n      val1: new Map(),\n      val2: new Map(),\n      position: 0\n    };\n  } else {\n    // We prevent up to two map.has(x) calls by directly retrieving the value\n    // and checking for undefined. The map can only contain numbers, so it is\n    // safe to check for undefined only.\n    var val2MemoA = memos.val1.get(val1);\n    if (val2MemoA !== undefined) {\n      var val2MemoB = memos.val2.get(val2);\n      if (val2MemoB !== undefined) {\n        return val2MemoA === val2MemoB;\n      }\n    }\n    memos.position++;\n  }\n  memos.val1.set(val1, memos.position);\n  memos.val2.set(val2, memos.position);\n  var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n  memos.val1.delete(val1);\n  memos.val2.delete(val2);\n  return areEq;\n}\nfunction setHasEqualElement(set, val1, strict, memo) {\n  // Go looking.\n  var setValues = arrayFromSet(set);\n  for (var i = 0; i < setValues.length; i++) {\n    var val2 = setValues[i];\n    if (innerDeepEqual(val1, val2, strict, memo)) {\n      // Remove the matching element to make sure we do not check that again.\n      set.delete(val2);\n      return true;\n    }\n  }\n  return false;\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using\n// Sadly it is not possible to detect corresponding values properly in case the\n// type is a string, number, bigint or boolean. The reason is that those values\n// can match lots of different string values (e.g., 1n == '+00001').\nfunction findLooseMatchingPrimitives(prim) {\n  switch (_typeof(prim)) {\n    case 'undefined':\n      return null;\n    case 'object':\n      // Only pass in null as object!\n      return undefined;\n    case 'symbol':\n      return false;\n    case 'string':\n      prim = +prim;\n    // Loose equal entries exist only if the string is possible to convert to\n    // a regular number and not NaN.\n    // Fall through\n    case 'number':\n      if (numberIsNaN(prim)) {\n        return false;\n      }\n  }\n  return true;\n}\nfunction setMightHaveLoosePrim(a, b, prim) {\n  var altValue = findLooseMatchingPrimitives(prim);\n  if (altValue != null) return altValue;\n  return b.has(altValue) && !a.has(altValue);\n}\nfunction mapMightHaveLoosePrim(a, b, prim, item, memo) {\n  var altValue = findLooseMatchingPrimitives(prim);\n  if (altValue != null) {\n    return altValue;\n  }\n  var curB = b.get(altValue);\n  if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n    return false;\n  }\n  return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n}\nfunction setEquiv(a, b, strict, memo) {\n  // This is a lazily initiated Set of entries which have to be compared\n  // pairwise.\n  var set = null;\n  var aValues = arrayFromSet(a);\n  for (var i = 0; i < aValues.length; i++) {\n    var val = aValues[i];\n    // Note: Checking for the objects first improves the performance for object\n    // heavy sets but it is a minor slow down for primitives. As they are fast\n    // to check this improves the worst case scenario instead.\n    if (_typeof(val) === 'object' && val !== null) {\n      if (set === null) {\n        set = new Set();\n      }\n      // If the specified value doesn't exist in the second set its an not null\n      // object (or non strict only: a not matching primitive) we'll need to go\n      // hunting for something thats deep-(strict-)equal to it. To make this\n      // O(n log n) complexity we have to copy these values in a new set first.\n      set.add(val);\n    } else if (!b.has(val)) {\n      if (strict) return false;\n\n      // Fast path to detect missing string, symbol, undefined and null values.\n      if (!setMightHaveLoosePrim(a, b, val)) {\n        return false;\n      }\n      if (set === null) {\n        set = new Set();\n      }\n      set.add(val);\n    }\n  }\n  if (set !== null) {\n    var bValues = arrayFromSet(b);\n    for (var _i = 0; _i < bValues.length; _i++) {\n      var _val = bValues[_i];\n      // We have to check if a primitive value is already\n      // matching and only if it's not, go hunting for it.\n      if (_typeof(_val) === 'object' && _val !== null) {\n        if (!setHasEqualElement(set, _val, strict, memo)) return false;\n      } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n        return false;\n      }\n    }\n    return set.size === 0;\n  }\n  return true;\n}\nfunction mapHasEqualEntry(set, map, key1, item1, strict, memo) {\n  // To be able to handle cases like:\n  //   Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']])\n  // ... we need to consider *all* matching keys, not just the first we find.\n  var setValues = arrayFromSet(set);\n  for (var i = 0; i < setValues.length; i++) {\n    var key2 = setValues[i];\n    if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) {\n      set.delete(key2);\n      return true;\n    }\n  }\n  return false;\n}\nfunction mapEquiv(a, b, strict, memo) {\n  var set = null;\n  var aEntries = arrayFromMap(a);\n  for (var i = 0; i < aEntries.length; i++) {\n    var _aEntries$i = _slicedToArray(aEntries[i], 2),\n      key = _aEntries$i[0],\n      item1 = _aEntries$i[1];\n    if (_typeof(key) === 'object' && key !== null) {\n      if (set === null) {\n        set = new Set();\n      }\n      set.add(key);\n    } else {\n      // By directly retrieving the value we prevent another b.has(key) check in\n      // almost all possible cases.\n      var item2 = b.get(key);\n      if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n        if (strict) return false;\n        // Fast path to detect missing string, symbol, undefined and null\n        // keys.\n        if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false;\n        if (set === null) {\n          set = new Set();\n        }\n        set.add(key);\n      }\n    }\n  }\n  if (set !== null) {\n    var bEntries = arrayFromMap(b);\n    for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n      var _bEntries$_i = _slicedToArray(bEntries[_i2], 2),\n        _key = _bEntries$_i[0],\n        item = _bEntries$_i[1];\n      if (_typeof(_key) === 'object' && _key !== null) {\n        if (!mapHasEqualEntry(set, a, _key, item, strict, memo)) return false;\n      } else if (!strict && (!a.has(_key) || !innerDeepEqual(a.get(_key), item, false, memo)) && !mapHasEqualEntry(set, a, _key, item, false, memo)) {\n        return false;\n      }\n    }\n    return set.size === 0;\n  }\n  return true;\n}\nfunction objEquiv(a, b, strict, keys, memos, iterationType) {\n  // Sets and maps don't have their entries accessible via normal object\n  // properties.\n  var i = 0;\n  if (iterationType === kIsSet) {\n    if (!setEquiv(a, b, strict, memos)) {\n      return false;\n    }\n  } else if (iterationType === kIsMap) {\n    if (!mapEquiv(a, b, strict, memos)) {\n      return false;\n    }\n  } else if (iterationType === kIsArray) {\n    for (; i < a.length; i++) {\n      if (hasOwnProperty(a, i)) {\n        if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n          return false;\n        }\n      } else if (hasOwnProperty(b, i)) {\n        return false;\n      } else {\n        // Array is sparse.\n        var keysA = Object.keys(a);\n        for (; i < keysA.length; i++) {\n          var key = keysA[i];\n          if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n            return false;\n          }\n        }\n        if (keysA.length !== Object.keys(b).length) {\n          return false;\n        }\n        return true;\n      }\n    }\n  }\n\n  // The pair must have equivalent values for every corresponding key.\n  // Possibly expensive deep test:\n  for (i = 0; i < keys.length; i++) {\n    var _key2 = keys[i];\n    if (!innerDeepEqual(a[_key2], b[_key2], strict, memos)) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction isDeepEqual(val1, val2) {\n  return innerDeepEqual(val1, val2, kLoose);\n}\nfunction isDeepStrictEqual(val1, val2) {\n  return innerDeepEqual(val1, val2, kStrict);\n}\nmodule.exports = {\n  isDeepEqual: isDeepEqual,\n  isDeepStrictEqual: isDeepStrictEqual\n};","// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b\n\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nvar _require = require('./internal/errors'),\n  _require$codes = _require.codes,\n  ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,\n  ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\nvar AssertionError = require('./internal/assert/assertion_error');\nvar _require2 = require('util/'),\n  inspect = _require2.inspect;\nvar _require$types = require('util/').types,\n  isPromise = _require$types.isPromise,\n  isRegExp = _require$types.isRegExp;\nvar objectAssign = require('object.assign/polyfill')();\nvar objectIs = require('object-is/polyfill')();\nvar RegExpPrototypeTest = require('call-bind/callBound')('RegExp.prototype.test');\nvar errorCache = new Map();\nvar isDeepEqual;\nvar isDeepStrictEqual;\nvar parseExpressionAt;\nvar findNodeAround;\nvar decoder;\nfunction lazyLoadComparison() {\n  var comparison = require('./internal/util/comparisons');\n  isDeepEqual = comparison.isDeepEqual;\n  isDeepStrictEqual = comparison.isDeepStrictEqual;\n}\n\n// Escape control characters but not \\n and \\t to keep the line breaks and\n// indentation intact.\n// eslint-disable-next-line no-control-regex\nvar escapeSequencesRegExp = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/g;\nvar meta = [\"\\\\u0000\", \"\\\\u0001\", \"\\\\u0002\", \"\\\\u0003\", \"\\\\u0004\", \"\\\\u0005\", \"\\\\u0006\", \"\\\\u0007\", '\\\\b', '', '', \"\\\\u000b\", '\\\\f', '', \"\\\\u000e\", \"\\\\u000f\", \"\\\\u0010\", \"\\\\u0011\", \"\\\\u0012\", \"\\\\u0013\", \"\\\\u0014\", \"\\\\u0015\", \"\\\\u0016\", \"\\\\u0017\", \"\\\\u0018\", \"\\\\u0019\", \"\\\\u001a\", \"\\\\u001b\", \"\\\\u001c\", \"\\\\u001d\", \"\\\\u001e\", \"\\\\u001f\"];\nvar escapeFn = function escapeFn(str) {\n  return meta[str.charCodeAt(0)];\n};\nvar warned = false;\n\n// The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\nvar NO_EXCEPTION_SENTINEL = {};\n\n// All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction innerFail(obj) {\n  if (obj.message instanceof Error) throw obj.message;\n  throw new AssertionError(obj);\n}\nfunction fail(actual, expected, message, operator, stackStartFn) {\n  var argsLen = arguments.length;\n  var internalMessage;\n  if (argsLen === 0) {\n    internalMessage = 'Failed';\n  } else if (argsLen === 1) {\n    message = actual;\n    actual = undefined;\n  } else {\n    if (warned === false) {\n      warned = true;\n      var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n      warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');\n    }\n    if (argsLen === 2) operator = '!=';\n  }\n  if (message instanceof Error) throw message;\n  var errArgs = {\n    actual: actual,\n    expected: expected,\n    operator: operator === undefined ? 'fail' : operator,\n    stackStartFn: stackStartFn || fail\n  };\n  if (message !== undefined) {\n    errArgs.message = message;\n  }\n  var err = new AssertionError(errArgs);\n  if (internalMessage) {\n    err.message = internalMessage;\n    err.generatedMessage = true;\n  }\n  throw err;\n}\nassert.fail = fail;\n\n// The AssertionError is defined in internal/error.\nassert.AssertionError = AssertionError;\nfunction innerOk(fn, argLen, value, message) {\n  if (!value) {\n    var generatedMessage = false;\n    if (argLen === 0) {\n      generatedMessage = true;\n      message = 'No value argument passed to `assert.ok()`';\n    } else if (message instanceof Error) {\n      throw message;\n    }\n    var err = new AssertionError({\n      actual: value,\n      expected: true,\n      message: message,\n      operator: '==',\n      stackStartFn: fn\n    });\n    err.generatedMessage = generatedMessage;\n    throw err;\n  }\n}\n\n// Pure assertion tests whether a value is truthy, as determined\n// by !!value.\nfunction ok() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  innerOk.apply(void 0, [ok, args.length].concat(args));\n}\nassert.ok = ok;\n\n// The equality assertion tests shallow, coercive equality with ==.\n/* eslint-disable no-restricted-properties */\nassert.equal = function equal(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  // eslint-disable-next-line eqeqeq\n  if (actual != expected) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: '==',\n      stackStartFn: equal\n    });\n  }\n};\n\n// The non-equality assertion tests for whether two objects are not\n// equal with !=.\nassert.notEqual = function notEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  // eslint-disable-next-line eqeqeq\n  if (actual == expected) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: '!=',\n      stackStartFn: notEqual\n    });\n  }\n};\n\n// The equivalence assertion tests a deep equality relation.\nassert.deepEqual = function deepEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  if (isDeepEqual === undefined) lazyLoadComparison();\n  if (!isDeepEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'deepEqual',\n      stackStartFn: deepEqual\n    });\n  }\n};\n\n// The non-equivalence assertion tests for any deep inequality.\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  if (isDeepEqual === undefined) lazyLoadComparison();\n  if (isDeepEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'notDeepEqual',\n      stackStartFn: notDeepEqual\n    });\n  }\n};\n/* eslint-enable */\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  if (isDeepEqual === undefined) lazyLoadComparison();\n  if (!isDeepStrictEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'deepStrictEqual',\n      stackStartFn: deepStrictEqual\n    });\n  }\n};\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  if (isDeepEqual === undefined) lazyLoadComparison();\n  if (isDeepStrictEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'notDeepStrictEqual',\n      stackStartFn: notDeepStrictEqual\n    });\n  }\n}\nassert.strictEqual = function strictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  if (!objectIs(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'strictEqual',\n      stackStartFn: strictEqual\n    });\n  }\n};\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n  if (objectIs(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'notStrictEqual',\n      stackStartFn: notStrictEqual\n    });\n  }\n};\nvar Comparison = /*#__PURE__*/_createClass(function Comparison(obj, keys, actual) {\n  var _this = this;\n  _classCallCheck(this, Comparison);\n  keys.forEach(function (key) {\n    if (key in obj) {\n      if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && RegExpPrototypeTest(obj[key], actual[key])) {\n        _this[key] = actual[key];\n      } else {\n        _this[key] = obj[key];\n      }\n    }\n  });\n});\nfunction compareExceptionKey(actual, expected, key, message, keys, fn) {\n  if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n    if (!message) {\n      // Create placeholder objects to create a nice output.\n      var a = new Comparison(actual, keys);\n      var b = new Comparison(expected, keys, actual);\n      var err = new AssertionError({\n        actual: a,\n        expected: b,\n        operator: 'deepStrictEqual',\n        stackStartFn: fn\n      });\n      err.actual = actual;\n      err.expected = expected;\n      err.operator = fn.name;\n      throw err;\n    }\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: fn.name,\n      stackStartFn: fn\n    });\n  }\n}\nfunction expectedException(actual, expected, msg, fn) {\n  if (typeof expected !== 'function') {\n    if (isRegExp(expected)) return RegExpPrototypeTest(expected, actual);\n    // assert.doesNotThrow does not accept objects.\n    if (arguments.length === 2) {\n      throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);\n    }\n\n    // Handle primitives properly.\n    if (_typeof(actual) !== 'object' || actual === null) {\n      var err = new AssertionError({\n        actual: actual,\n        expected: expected,\n        message: msg,\n        operator: 'deepStrictEqual',\n        stackStartFn: fn\n      });\n      err.operator = fn.name;\n      throw err;\n    }\n    var keys = Object.keys(expected);\n    // Special handle errors to make sure the name and the message are compared\n    // as well.\n    if (expected instanceof Error) {\n      keys.push('name', 'message');\n    } else if (keys.length === 0) {\n      throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');\n    }\n    if (isDeepEqual === undefined) lazyLoadComparison();\n    keys.forEach(function (key) {\n      if (typeof actual[key] === 'string' && isRegExp(expected[key]) && RegExpPrototypeTest(expected[key], actual[key])) {\n        return;\n      }\n      compareExceptionKey(actual, expected, key, msg, keys, fn);\n    });\n    return true;\n  }\n  // Guard instanceof against arrow functions as they don't have a prototype.\n  if (expected.prototype !== undefined && actual instanceof expected) {\n    return true;\n  }\n  if (Error.isPrototypeOf(expected)) {\n    return false;\n  }\n  return expected.call({}, actual) === true;\n}\nfunction getActual(fn) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);\n  }\n  try {\n    fn();\n  } catch (e) {\n    return e;\n  }\n  return NO_EXCEPTION_SENTINEL;\n}\nfunction checkIsPromise(obj) {\n  // Accept native ES6 promises and promises that are implemented in a similar\n  // way. Do not accept thenables that use a function as `obj` and that have no\n  // `catch` handler.\n\n  // TODO: thenables are checked up until they have the correct methods,\n  // but according to documentation, the `then` method should receive\n  // the `fulfill` and `reject` arguments as well or it may be never resolved.\n\n  return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\nfunction waitForActual(promiseFn) {\n  return Promise.resolve().then(function () {\n    var resultPromise;\n    if (typeof promiseFn === 'function') {\n      // Return a rejected promise if `promiseFn` throws synchronously.\n      resultPromise = promiseFn();\n      // Fail in case no promise is returned.\n      if (!checkIsPromise(resultPromise)) {\n        throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);\n      }\n    } else if (checkIsPromise(promiseFn)) {\n      resultPromise = promiseFn;\n    } else {\n      throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);\n    }\n    return Promise.resolve().then(function () {\n      return resultPromise;\n    }).then(function () {\n      return NO_EXCEPTION_SENTINEL;\n    }).catch(function (e) {\n      return e;\n    });\n  });\n}\nfunction expectsError(stackStartFn, actual, error, message) {\n  if (typeof error === 'string') {\n    if (arguments.length === 4) {\n      throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n    }\n    if (_typeof(actual) === 'object' && actual !== null) {\n      if (actual.message === error) {\n        throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error message \\\"\".concat(actual.message, \"\\\" is identical to the message.\"));\n      }\n    } else if (actual === error) {\n      throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error \\\"\".concat(actual, \"\\\" is identical to the message.\"));\n    }\n    message = error;\n    error = undefined;\n  } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n  }\n  if (actual === NO_EXCEPTION_SENTINEL) {\n    var details = '';\n    if (error && error.name) {\n      details += \" (\".concat(error.name, \")\");\n    }\n    details += message ? \": \".concat(message) : '.';\n    var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';\n    innerFail({\n      actual: undefined,\n      expected: error,\n      operator: stackStartFn.name,\n      message: \"Missing expected \".concat(fnType).concat(details),\n      stackStartFn: stackStartFn\n    });\n  }\n  if (error && !expectedException(actual, error, message, stackStartFn)) {\n    throw actual;\n  }\n}\nfunction expectsNoError(stackStartFn, actual, error, message) {\n  if (actual === NO_EXCEPTION_SENTINEL) return;\n  if (typeof error === 'string') {\n    message = error;\n    error = undefined;\n  }\n  if (!error || expectedException(actual, error)) {\n    var details = message ? \": \".concat(message) : '.';\n    var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';\n    innerFail({\n      actual: actual,\n      expected: error,\n      operator: stackStartFn.name,\n      message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + \"Actual message: \\\"\".concat(actual && actual.message, \"\\\"\"),\n      stackStartFn: stackStartFn\n    });\n  }\n  throw actual;\n}\nassert.throws = function throws(promiseFn) {\n  for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    args[_key2 - 1] = arguments[_key2];\n  }\n  expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n};\nassert.rejects = function rejects(promiseFn) {\n  for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n    args[_key3 - 1] = arguments[_key3];\n  }\n  return waitForActual(promiseFn).then(function (result) {\n    return expectsError.apply(void 0, [rejects, result].concat(args));\n  });\n};\nassert.doesNotThrow = function doesNotThrow(fn) {\n  for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n    args[_key4 - 1] = arguments[_key4];\n  }\n  expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n};\nassert.doesNotReject = function doesNotReject(fn) {\n  for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n    args[_key5 - 1] = arguments[_key5];\n  }\n  return waitForActual(fn).then(function (result) {\n    return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n  });\n};\nassert.ifError = function ifError(err) {\n  if (err !== null && err !== undefined) {\n    var message = 'ifError got unwanted exception: ';\n    if (_typeof(err) === 'object' && typeof err.message === 'string') {\n      if (err.message.length === 0 && err.constructor) {\n        message += err.constructor.name;\n      } else {\n        message += err.message;\n      }\n    } else {\n      message += inspect(err);\n    }\n    var newErr = new AssertionError({\n      actual: err,\n      expected: null,\n      operator: 'ifError',\n      message: message,\n      stackStartFn: ifError\n    });\n\n    // Make sure we actually have a stack trace!\n    var origStack = err.stack;\n    if (typeof origStack === 'string') {\n      // This will remove any duplicated frames from the error frames taken\n      // from within `ifError` and add the original error frames to the newly\n      // created ones.\n      var tmp2 = origStack.split('\\n');\n      tmp2.shift();\n      // Filter all frames existing in err.stack.\n      var tmp1 = newErr.stack.split('\\n');\n      for (var i = 0; i < tmp2.length; i++) {\n        // Find the first occurrence of the frame.\n        var pos = tmp1.indexOf(tmp2[i]);\n        if (pos !== -1) {\n          // Only keep new frames.\n          tmp1 = tmp1.slice(0, pos);\n          break;\n        }\n      }\n      newErr.stack = \"\".concat(tmp1.join('\\n'), \"\\n\").concat(tmp2.join('\\n'));\n    }\n    throw newErr;\n  }\n};\n\n// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a871df3dfb8ea663ef5e1f8f62701ec51384ecb\nfunction internalMatch(string, regexp, message, fn, fnName) {\n  if (!isRegExp(regexp)) {\n    throw new ERR_INVALID_ARG_TYPE('regexp', 'RegExp', regexp);\n  }\n  var match = fnName === 'match';\n  if (typeof string !== 'string' || RegExpPrototypeTest(regexp, string) !== match) {\n    if (message instanceof Error) {\n      throw message;\n    }\n    var generatedMessage = !message;\n\n    // 'The input was expected to not match the regular expression ' +\n    message = message || (typeof string !== 'string' ? 'The \"string\" argument must be of type string. Received type ' + \"\".concat(_typeof(string), \" (\").concat(inspect(string), \")\") : (match ? 'The input did not match the regular expression ' : 'The input was expected to not match the regular expression ') + \"\".concat(inspect(regexp), \". Input:\\n\\n\").concat(inspect(string), \"\\n\"));\n    var err = new AssertionError({\n      actual: string,\n      expected: regexp,\n      message: message,\n      operator: fnName,\n      stackStartFn: fn\n    });\n    err.generatedMessage = generatedMessage;\n    throw err;\n  }\n}\nassert.match = function match(string, regexp, message) {\n  internalMatch(string, regexp, message, match, 'match');\n};\nassert.doesNotMatch = function doesNotMatch(string, regexp, message) {\n  internalMatch(string, regexp, message, doesNotMatch, 'doesNotMatch');\n};\n\n// Expose a strict only variant of assert\nfunction strict() {\n  for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n    args[_key6] = arguments[_key6];\n  }\n  innerOk.apply(void 0, [strict, args.length].concat(args));\n}\nassert.strict = objectAssign(strict, assert, {\n  equal: assert.strictEqual,\n  deepEqual: assert.deepStrictEqual,\n  notEqual: assert.notStrictEqual,\n  notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;",null,null,null,"module.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  // Allow for deprecating things in the process of starting up.\n  if (isUndefined(global.process)) {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (process.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","// Copyright Joyent, Inc. and other Node contributors.\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining a\r\n// copy of this software and associated documentation files (the\r\n// \"Software\"), to deal in the Software without restriction, including\r\n// without limitation the rights to use, copy, modify, merge, publish,\r\n// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n// persons to whom the Software is furnished to do so, subject to the\r\n// following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be included\r\n// in all copies or substantial portions of the Software.\r\n//\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n'use strict';\r\n\r\n\r\nvar isWindows = process.platform === 'win32';\r\nvar util = require('util');\r\n\r\n\r\n// resolves . and .. elements in a path array with directory names there\r\n// must be no slashes or device names (c:\\) in the array\r\n// (so also no leading and trailing slashes - it does not distinguish\r\n// relative and absolute paths)\r\nfunction normalizeArray(parts, allowAboveRoot) {\r\n  var res = [];\r\n  for (var i = 0; i < parts.length; i++) {\r\n    var p = parts[i];\r\n\r\n    // ignore empty parts\r\n    if (!p || p === '.')\r\n      continue;\r\n\r\n    if (p === '..') {\r\n      if (res.length && res[res.length - 1] !== '..') {\r\n        res.pop();\r\n      } else if (allowAboveRoot) {\r\n        res.push('..');\r\n      }\r\n    } else {\r\n      res.push(p);\r\n    }\r\n  }\r\n\r\n  return res;\r\n}\r\n\r\n// returns an array with empty elements removed from either end of the input\r\n// array or the original array if no elements need to be removed\r\nfunction trimArray(arr) {\r\n  var lastIndex = arr.length - 1;\r\n  var start = 0;\r\n  for (; start <= lastIndex; start++) {\r\n    if (arr[start])\r\n      break;\r\n  }\r\n\r\n  var end = lastIndex;\r\n  for (; end >= 0; end--) {\r\n    if (arr[end])\r\n      break;\r\n  }\r\n\r\n  if (start === 0 && end === lastIndex)\r\n    return arr;\r\n  if (start > end)\r\n    return [];\r\n  return arr.slice(start, end + 1);\r\n}\r\n\r\n// Regex to split a windows path into three parts: [*, device, slash,\r\n// tail] windows-only\r\nvar splitDeviceRe =\r\n    /^([a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?([\\\\\\/])?([\\s\\S]*?)$/;\r\n\r\n// Regex to split the tail part of the above into [*, dir, basename, ext]\r\nvar splitTailRe =\r\n    /^([\\s\\S]*?)((?:\\.{1,2}|[^\\\\\\/]+?|)(\\.[^.\\/\\\\]*|))(?:[\\\\\\/]*)$/;\r\n\r\nvar win32 = {};\r\n\r\n// Function to split a filename into [root, dir, basename, ext]\r\nfunction win32SplitPath(filename) {\r\n  // Separate device+slash from tail\r\n  var result = splitDeviceRe.exec(filename),\r\n      device = (result[1] || '') + (result[2] || ''),\r\n      tail = result[3] || '';\r\n  // Split the tail into dir, basename and extension\r\n  var result2 = splitTailRe.exec(tail),\r\n      dir = result2[1],\r\n      basename = result2[2],\r\n      ext = result2[3];\r\n  return [device, dir, basename, ext];\r\n}\r\n\r\nfunction win32StatPath(path) {\r\n  var result = splitDeviceRe.exec(path),\r\n      device = result[1] || '',\r\n      isUnc = !!device && device[1] !== ':';\r\n  return {\r\n    device: device,\r\n    isUnc: isUnc,\r\n    isAbsolute: isUnc || !!result[2], // UNC paths are always absolute\r\n    tail: result[3]\r\n  };\r\n}\r\n\r\nfunction normalizeUNCRoot(device) {\r\n  return '\\\\\\\\' + device.replace(/^[\\\\\\/]+/, '').replace(/[\\\\\\/]+/g, '\\\\');\r\n}\r\n\r\n// path.resolve([from ...], to)\r\nwin32.resolve = function() {\r\n  var resolvedDevice = '',\r\n      resolvedTail = '',\r\n      resolvedAbsolute = false;\r\n\r\n  for (var i = arguments.length - 1; i >= -1; i--) {\r\n    var path;\r\n    if (i >= 0) {\r\n      path = arguments[i];\r\n    } else if (!resolvedDevice) {\r\n      path = process.cwd();\r\n    } else {\r\n      // Windows has the concept of drive-specific current working\r\n      // directories. If we've resolved a drive letter but not yet an\r\n      // absolute path, get cwd for that drive. We're sure the device is not\r\n      // an unc path at this points, because unc paths are always absolute.\r\n      path = process.env['=' + resolvedDevice];\r\n      // Verify that a drive-local cwd was found and that it actually points\r\n      // to our drive. If not, default to the drive's root.\r\n      if (!path || path.substr(0, 3).toLowerCase() !==\r\n          resolvedDevice.toLowerCase() + '\\\\') {\r\n        path = resolvedDevice + '\\\\';\r\n      }\r\n    }\r\n\r\n    // Skip empty and invalid entries\r\n    if (!util.isString(path)) {\r\n      throw new TypeError('Arguments to path.resolve must be strings');\r\n    } else if (!path) {\r\n      continue;\r\n    }\r\n\r\n    var result = win32StatPath(path),\r\n        device = result.device,\r\n        isUnc = result.isUnc,\r\n        isAbsolute = result.isAbsolute,\r\n        tail = result.tail;\r\n\r\n    if (device &&\r\n        resolvedDevice &&\r\n        device.toLowerCase() !== resolvedDevice.toLowerCase()) {\r\n      // This path points to another device so it is not applicable\r\n      continue;\r\n    }\r\n\r\n    if (!resolvedDevice) {\r\n      resolvedDevice = device;\r\n    }\r\n    if (!resolvedAbsolute) {\r\n      resolvedTail = tail + '\\\\' + resolvedTail;\r\n      resolvedAbsolute = isAbsolute;\r\n    }\r\n\r\n    if (resolvedDevice && resolvedAbsolute) {\r\n      break;\r\n    }\r\n  }\r\n\r\n  // Convert slashes to backslashes when `resolvedDevice` points to an UNC\r\n  // root. Also squash multiple slashes into a single one where appropriate.\r\n  if (isUnc) {\r\n    resolvedDevice = normalizeUNCRoot(resolvedDevice);\r\n  }\r\n\r\n  // At this point the path should be resolved to a full absolute path,\r\n  // but handle relative paths to be safe (might happen when process.cwd()\r\n  // fails)\r\n\r\n  // Normalize the tail path\r\n  resolvedTail = normalizeArray(resolvedTail.split(/[\\\\\\/]+/),\r\n                                !resolvedAbsolute).join('\\\\');\r\n\r\n  return (resolvedDevice + (resolvedAbsolute ? '\\\\' : '') + resolvedTail) ||\r\n         '.';\r\n};\r\n\r\n\r\nwin32.normalize = function(path) {\r\n  var result = win32StatPath(path),\r\n      device = result.device,\r\n      isUnc = result.isUnc,\r\n      isAbsolute = result.isAbsolute,\r\n      tail = result.tail,\r\n      trailingSlash = /[\\\\\\/]$/.test(tail);\r\n\r\n  // Normalize the tail path\r\n  tail = normalizeArray(tail.split(/[\\\\\\/]+/), !isAbsolute).join('\\\\');\r\n\r\n  if (!tail && !isAbsolute) {\r\n    tail = '.';\r\n  }\r\n  if (tail && trailingSlash) {\r\n    tail += '\\\\';\r\n  }\r\n\r\n  // Convert slashes to backslashes when `device` points to an UNC root.\r\n  // Also squash multiple slashes into a single one where appropriate.\r\n  if (isUnc) {\r\n    device = normalizeUNCRoot(device);\r\n  }\r\n\r\n  return device + (isAbsolute ? '\\\\' : '') + tail;\r\n};\r\n\r\n\r\nwin32.isAbsolute = function(path) {\r\n  return win32StatPath(path).isAbsolute;\r\n};\r\n\r\nwin32.join = function() {\r\n  var paths = [];\r\n  for (var i = 0; i < arguments.length; i++) {\r\n    var arg = arguments[i];\r\n    if (!util.isString(arg)) {\r\n      throw new TypeError('Arguments to path.join must be strings');\r\n    }\r\n    if (arg) {\r\n      paths.push(arg);\r\n    }\r\n  }\r\n\r\n  var joined = paths.join('\\\\');\r\n\r\n  // Make sure that the joined path doesn't start with two slashes, because\r\n  // normalize() will mistake it for an UNC path then.\r\n  //\r\n  // This step is skipped when it is very clear that the user actually\r\n  // intended to point at an UNC path. This is assumed when the first\r\n  // non-empty string arguments starts with exactly two slashes followed by\r\n  // at least one more non-slash character.\r\n  //\r\n  // Note that for normalize() to treat a path as an UNC path it needs to\r\n  // have at least 2 components, so we don't filter for that here.\r\n  // This means that the user can use join to construct UNC paths from\r\n  // a server name and a share name; for example:\r\n  //   path.join('//server', 'share') -> '\\\\\\\\server\\\\share\\')\r\n  if (!/^[\\\\\\/]{2}[^\\\\\\/]/.test(paths[0])) {\r\n    joined = joined.replace(/^[\\\\\\/]{2,}/, '\\\\');\r\n  }\r\n\r\n  return win32.normalize(joined);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// it will solve the relative path from 'from' to 'to', for instance:\r\n// from = 'C:\\\\orandea\\\\test\\\\aaa'\r\n// to = 'C:\\\\orandea\\\\impl\\\\bbb'\r\n// The output of the function should be: '..\\\\..\\\\impl\\\\bbb'\r\nwin32.relative = function(from, to) {\r\n  from = win32.resolve(from);\r\n  to = win32.resolve(to);\r\n\r\n  // windows is not case sensitive\r\n  var lowerFrom = from.toLowerCase();\r\n  var lowerTo = to.toLowerCase();\r\n\r\n  var toParts = trimArray(to.split('\\\\'));\r\n\r\n  var lowerFromParts = trimArray(lowerFrom.split('\\\\'));\r\n  var lowerToParts = trimArray(lowerTo.split('\\\\'));\r\n\r\n  var length = Math.min(lowerFromParts.length, lowerToParts.length);\r\n  var samePartsLength = length;\r\n  for (var i = 0; i < length; i++) {\r\n    if (lowerFromParts[i] !== lowerToParts[i]) {\r\n      samePartsLength = i;\r\n      break;\r\n    }\r\n  }\r\n\r\n  if (samePartsLength == 0) {\r\n    return to;\r\n  }\r\n\r\n  var outputParts = [];\r\n  for (var i = samePartsLength; i < lowerFromParts.length; i++) {\r\n    outputParts.push('..');\r\n  }\r\n\r\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n  return outputParts.join('\\\\');\r\n};\r\n\r\n\r\nwin32._makeLong = function(path) {\r\n  // Note: this will *probably* throw somewhere.\r\n  if (!util.isString(path))\r\n    return path;\r\n\r\n  if (!path) {\r\n    return '';\r\n  }\r\n\r\n  var resolvedPath = win32.resolve(path);\r\n\r\n  if (/^[a-zA-Z]\\:\\\\/.test(resolvedPath)) {\r\n    // path is local filesystem path, which needs to be converted\r\n    // to long UNC path.\r\n    return '\\\\\\\\?\\\\' + resolvedPath;\r\n  } else if (/^\\\\\\\\[^?.]/.test(resolvedPath)) {\r\n    // path is network UNC path, which needs to be converted\r\n    // to long UNC path.\r\n    return '\\\\\\\\?\\\\UNC\\\\' + resolvedPath.substring(2);\r\n  }\r\n\r\n  return path;\r\n};\r\n\r\n\r\nwin32.dirname = function(path) {\r\n  var result = win32SplitPath(path),\r\n      root = result[0],\r\n      dir = result[1];\r\n\r\n  if (!root && !dir) {\r\n    // No dirname whatsoever\r\n    return '.';\r\n  }\r\n\r\n  if (dir) {\r\n    // It has a dirname, strip trailing slash\r\n    dir = dir.substr(0, dir.length - 1);\r\n  }\r\n\r\n  return root + dir;\r\n};\r\n\r\n\r\nwin32.basename = function(path, ext) {\r\n  var f = win32SplitPath(path)[2];\r\n  // TODO: make this comparison case-insensitive on windows?\r\n  if (ext && f.substr(-1 * ext.length) === ext) {\r\n    f = f.substr(0, f.length - ext.length);\r\n  }\r\n  return f;\r\n};\r\n\r\n\r\nwin32.extname = function(path) {\r\n  return win32SplitPath(path)[3];\r\n};\r\n\r\n\r\nwin32.format = function(pathObject) {\r\n  if (!util.isObject(pathObject)) {\r\n    throw new TypeError(\r\n        \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n    );\r\n  }\r\n\r\n  var root = pathObject.root || '';\r\n\r\n  if (!util.isString(root)) {\r\n    throw new TypeError(\r\n        \"'pathObject.root' must be a string or undefined, not \" +\r\n        typeof pathObject.root\r\n    );\r\n  }\r\n\r\n  var dir = pathObject.dir;\r\n  var base = pathObject.base || '';\r\n  if (!dir) {\r\n    return base;\r\n  }\r\n  if (dir[dir.length - 1] === win32.sep) {\r\n    return dir + base;\r\n  }\r\n  return dir + win32.sep + base;\r\n};\r\n\r\n\r\nwin32.parse = function(pathString) {\r\n  if (!util.isString(pathString)) {\r\n    throw new TypeError(\r\n        \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n    );\r\n  }\r\n  var allParts = win32SplitPath(pathString);\r\n  if (!allParts || allParts.length !== 4) {\r\n    throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n  }\r\n  return {\r\n    root: allParts[0],\r\n    dir: allParts[0] + allParts[1].slice(0, -1),\r\n    base: allParts[2],\r\n    ext: allParts[3],\r\n    name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n  };\r\n};\r\n\r\n\r\nwin32.sep = '\\\\';\r\nwin32.delimiter = ';';\r\n\r\n\r\n// Split a filename into [root, dir, basename, ext], unix version\r\n// 'root' is just a slash, or nothing.\r\nvar splitPathRe =\r\n    /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\nvar posix = {};\r\n\r\n\r\nfunction posixSplitPath(filename) {\r\n  return splitPathRe.exec(filename).slice(1);\r\n}\r\n\r\n\r\n// path.resolve([from ...], to)\r\n// posix version\r\nposix.resolve = function() {\r\n  var resolvedPath = '',\r\n      resolvedAbsolute = false;\r\n\r\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\r\n    var path = (i >= 0) ? arguments[i] : process.cwd();\r\n\r\n    // Skip empty and invalid entries\r\n    if (!util.isString(path)) {\r\n      throw new TypeError('Arguments to path.resolve must be strings');\r\n    } else if (!path) {\r\n      continue;\r\n    }\r\n\r\n    resolvedPath = path + '/' + resolvedPath;\r\n    resolvedAbsolute = path[0] === '/';\r\n  }\r\n\r\n  // At this point the path should be resolved to a full absolute path, but\r\n  // handle relative paths to be safe (might happen when process.cwd() fails)\r\n\r\n  // Normalize the path\r\n  resolvedPath = normalizeArray(resolvedPath.split('/'),\r\n                                !resolvedAbsolute).join('/');\r\n\r\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\r\n};\r\n\r\n// path.normalize(path)\r\n// posix version\r\nposix.normalize = function(path) {\r\n  var isAbsolute = posix.isAbsolute(path),\r\n      trailingSlash = path && path[path.length - 1] === '/';\r\n\r\n  // Normalize the path\r\n  path = normalizeArray(path.split('/'), !isAbsolute).join('/');\r\n\r\n  if (!path && !isAbsolute) {\r\n    path = '.';\r\n  }\r\n  if (path && trailingSlash) {\r\n    path += '/';\r\n  }\r\n\r\n  return (isAbsolute ? '/' : '') + path;\r\n};\r\n\r\n// posix version\r\nposix.isAbsolute = function(path) {\r\n  return path.charAt(0) === '/';\r\n};\r\n\r\n// posix version\r\nposix.join = function() {\r\n  var path = '';\r\n  for (var i = 0; i < arguments.length; i++) {\r\n    var segment = arguments[i];\r\n    if (!util.isString(segment)) {\r\n      throw new TypeError('Arguments to path.join must be strings');\r\n    }\r\n    if (segment) {\r\n      if (!path) {\r\n        path += segment;\r\n      } else {\r\n        path += '/' + segment;\r\n      }\r\n    }\r\n  }\r\n  return posix.normalize(path);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// posix version\r\nposix.relative = function(from, to) {\r\n  from = posix.resolve(from).substr(1);\r\n  to = posix.resolve(to).substr(1);\r\n\r\n  var fromParts = trimArray(from.split('/'));\r\n  var toParts = trimArray(to.split('/'));\r\n\r\n  var length = Math.min(fromParts.length, toParts.length);\r\n  var samePartsLength = length;\r\n  for (var i = 0; i < length; i++) {\r\n    if (fromParts[i] !== toParts[i]) {\r\n      samePartsLength = i;\r\n      break;\r\n    }\r\n  }\r\n\r\n  var outputParts = [];\r\n  for (var i = samePartsLength; i < fromParts.length; i++) {\r\n    outputParts.push('..');\r\n  }\r\n\r\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n  return outputParts.join('/');\r\n};\r\n\r\n\r\nposix._makeLong = function(path) {\r\n  return path;\r\n};\r\n\r\n\r\nposix.dirname = function(path) {\r\n  var result = posixSplitPath(path),\r\n      root = result[0],\r\n      dir = result[1];\r\n\r\n  if (!root && !dir) {\r\n    // No dirname whatsoever\r\n    return '.';\r\n  }\r\n\r\n  if (dir) {\r\n    // It has a dirname, strip trailing slash\r\n    dir = dir.substr(0, dir.length - 1);\r\n  }\r\n\r\n  return root + dir;\r\n};\r\n\r\n\r\nposix.basename = function(path, ext) {\r\n  var f = posixSplitPath(path)[2];\r\n  // TODO: make this comparison case-insensitive on windows?\r\n  if (ext && f.substr(-1 * ext.length) === ext) {\r\n    f = f.substr(0, f.length - ext.length);\r\n  }\r\n  return f;\r\n};\r\n\r\n\r\nposix.extname = function(path) {\r\n  return posixSplitPath(path)[3];\r\n};\r\n\r\n\r\nposix.format = function(pathObject) {\r\n  if (!util.isObject(pathObject)) {\r\n    throw new TypeError(\r\n        \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n    );\r\n  }\r\n\r\n  var root = pathObject.root || '';\r\n\r\n  if (!util.isString(root)) {\r\n    throw new TypeError(\r\n        \"'pathObject.root' must be a string or undefined, not \" +\r\n        typeof pathObject.root\r\n    );\r\n  }\r\n\r\n  var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\r\n  var base = pathObject.base || '';\r\n  return dir + base;\r\n};\r\n\r\n\r\nposix.parse = function(pathString) {\r\n  if (!util.isString(pathString)) {\r\n    throw new TypeError(\r\n        \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n    );\r\n  }\r\n  var allParts = posixSplitPath(pathString);\r\n  if (!allParts || allParts.length !== 4) {\r\n    throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n  }\r\n  allParts[1] = allParts[1] || '';\r\n  allParts[2] = allParts[2] || '';\r\n  allParts[3] = allParts[3] || '';\r\n\r\n  return {\r\n    root: allParts[0],\r\n    dir: allParts[0] + allParts[1].slice(0, -1),\r\n    base: allParts[2],\r\n    ext: allParts[3],\r\n    name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n  };\r\n};\r\n\r\n\r\nposix.sep = '/';\r\nposix.delimiter = ':';\r\n\r\n\r\nif (isWindows)\r\n  module.exports = win32;\r\nelse /* posix */\r\n  module.exports = posix;\r\n\r\nmodule.exports.posix = posix;\r\nmodule.exports.win32 = win32;\r\n",null,"// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n",null,null,null,null,"'use strict'\n\n/*\n  This file is a reduced and adapted version of the main lib/internal/per_context/primordials.js file defined at\n\n  https://github.com/nodejs/node/blob/master/lib/internal/per_context/primordials.js\n\n  Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\nmodule.exports = {\n  ArrayIsArray(self) {\n    return Array.isArray(self)\n  },\n  ArrayPrototypeIncludes(self, el) {\n    return self.includes(el)\n  },\n  ArrayPrototypeIndexOf(self, el) {\n    return self.indexOf(el)\n  },\n  ArrayPrototypeJoin(self, sep) {\n    return self.join(sep)\n  },\n  ArrayPrototypeMap(self, fn) {\n    return self.map(fn)\n  },\n  ArrayPrototypePop(self, el) {\n    return self.pop(el)\n  },\n  ArrayPrototypePush(self, el) {\n    return self.push(el)\n  },\n  ArrayPrototypeSlice(self, start, end) {\n    return self.slice(start, end)\n  },\n  Error,\n  FunctionPrototypeCall(fn, thisArgs, ...args) {\n    return fn.call(thisArgs, ...args)\n  },\n  FunctionPrototypeSymbolHasInstance(self, instance) {\n    return Function.prototype[Symbol.hasInstance].call(self, instance)\n  },\n  MathFloor: Math.floor,\n  Number,\n  NumberIsInteger: Number.isInteger,\n  NumberIsNaN: Number.isNaN,\n  NumberMAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER,\n  NumberMIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER,\n  NumberParseInt: Number.parseInt,\n  ObjectDefineProperties(self, props) {\n    return Object.defineProperties(self, props)\n  },\n  ObjectDefineProperty(self, name, prop) {\n    return Object.defineProperty(self, name, prop)\n  },\n  ObjectGetOwnPropertyDescriptor(self, name) {\n    return Object.getOwnPropertyDescriptor(self, name)\n  },\n  ObjectKeys(obj) {\n    return Object.keys(obj)\n  },\n  ObjectSetPrototypeOf(target, proto) {\n    return Object.setPrototypeOf(target, proto)\n  },\n  Promise,\n  PromisePrototypeCatch(self, fn) {\n    return self.catch(fn)\n  },\n  PromisePrototypeThen(self, thenFn, catchFn) {\n    return self.then(thenFn, catchFn)\n  },\n  PromiseReject(err) {\n    return Promise.reject(err)\n  },\n  PromiseResolve(val) {\n    return Promise.resolve(val)\n  },\n  ReflectApply: Reflect.apply,\n  RegExpPrototypeTest(self, value) {\n    return self.test(value)\n  },\n  SafeSet: Set,\n  String,\n  StringPrototypeSlice(self, start, end) {\n    return self.slice(start, end)\n  },\n  StringPrototypeToLowerCase(self) {\n    return self.toLowerCase()\n  },\n  StringPrototypeToUpperCase(self) {\n    return self.toUpperCase()\n  },\n  StringPrototypeTrim(self) {\n    return self.trim()\n  },\n  Symbol,\n  SymbolFor: Symbol.for,\n  SymbolAsyncIterator: Symbol.asyncIterator,\n  SymbolHasInstance: Symbol.hasInstance,\n  SymbolIterator: Symbol.iterator,\n  SymbolDispose: Symbol.dispose || Symbol('Symbol.dispose'),\n  SymbolAsyncDispose: Symbol.asyncDispose || Symbol('Symbol.asyncDispose'),\n  TypedArrayPrototypeSet(self, buf, len) {\n    return self.set(buf, len)\n  },\n  Boolean: Boolean,\n  Uint8Array\n}\n","/*globals self, window */\n\"use strict\"\n\n/*eslint-disable @mysticatea/prettier */\nconst { AbortController, AbortSignal } =\n    typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nmodule.exports = AbortController\nmodule.exports.AbortSignal = AbortSignal\nmodule.exports.default = AbortController\n","'use strict'\n\nconst bufferModule = require('buffer')\nconst { kResistStopPropagation, SymbolDispose } = require('./primordials')\nconst AbortSignal = globalThis.AbortSignal || require('abort-controller').AbortSignal\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst AsyncFunction = Object.getPrototypeOf(async function () {}).constructor\nconst Blob = globalThis.Blob || bufferModule.Blob\n/* eslint-disable indent */\nconst isBlob =\n  typeof Blob !== 'undefined'\n    ? function isBlob(b) {\n        // eslint-disable-next-line indent\n        return b instanceof Blob\n      }\n    : function isBlob(b) {\n        return false\n      }\n/* eslint-enable indent */\n\nconst validateAbortSignal = (signal, name) => {\n  if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n}\nconst validateFunction = (value, name) => {\n  if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n}\n\n// This is a simplified version of AggregateError\nclass AggregateError extends Error {\n  constructor(errors) {\n    if (!Array.isArray(errors)) {\n      throw new TypeError(`Expected input to be an Array, got ${typeof errors}`)\n    }\n    let message = ''\n    for (let i = 0; i < errors.length; i++) {\n      message += `    ${errors[i].stack}\\n`\n    }\n    super(message)\n    this.name = 'AggregateError'\n    this.errors = errors\n  }\n}\nmodule.exports = {\n  AggregateError,\n  kEmptyObject: Object.freeze({}),\n  once(callback) {\n    let called = false\n    return function (...args) {\n      if (called) {\n        return\n      }\n      called = true\n      callback.apply(this, args)\n    }\n  },\n  createDeferredPromise: function () {\n    let resolve\n    let reject\n\n    // eslint-disable-next-line promise/param-names\n    const promise = new Promise((res, rej) => {\n      resolve = res\n      reject = rej\n    })\n    return {\n      promise,\n      resolve,\n      reject\n    }\n  },\n  promisify(fn) {\n    return new Promise((resolve, reject) => {\n      fn((err, ...args) => {\n        if (err) {\n          return reject(err)\n        }\n        return resolve(...args)\n      })\n    })\n  },\n  debuglog() {\n    return function () {}\n  },\n  format(format, ...args) {\n    // Simplified version of https://nodejs.org/api/util.html#utilformatformat-args\n    return format.replace(/%([sdifj])/g, function (...[_unused, type]) {\n      const replacement = args.shift()\n      if (type === 'f') {\n        return replacement.toFixed(6)\n      } else if (type === 'j') {\n        return JSON.stringify(replacement)\n      } else if (type === 's' && typeof replacement === 'object') {\n        const ctor = replacement.constructor !== Object ? replacement.constructor.name : ''\n        return `${ctor} {}`.trim()\n      } else {\n        return replacement.toString()\n      }\n    })\n  },\n  inspect(value) {\n    // Vastly simplified version of https://nodejs.org/api/util.html#utilinspectobject-options\n    switch (typeof value) {\n      case 'string':\n        if (value.includes(\"'\")) {\n          if (!value.includes('\"')) {\n            return `\"${value}\"`\n          } else if (!value.includes('`') && !value.includes('${')) {\n            return `\\`${value}\\``\n          }\n        }\n        return `'${value}'`\n      case 'number':\n        if (isNaN(value)) {\n          return 'NaN'\n        } else if (Object.is(value, -0)) {\n          return String(value)\n        }\n        return value\n      case 'bigint':\n        return `${String(value)}n`\n      case 'boolean':\n      case 'undefined':\n        return String(value)\n      case 'object':\n        return '{}'\n    }\n  },\n  types: {\n    isAsyncFunction(fn) {\n      return fn instanceof AsyncFunction\n    },\n    isArrayBufferView(arr) {\n      return ArrayBuffer.isView(arr)\n    }\n  },\n  isBlob,\n  deprecate(fn, message) {\n    return fn\n  },\n  addAbortListener:\n    require('events').addAbortListener ||\n    function addAbortListener(signal, listener) {\n      if (signal === undefined) {\n        throw new ERR_INVALID_ARG_TYPE('signal', 'AbortSignal', signal)\n      }\n      validateAbortSignal(signal, 'signal')\n      validateFunction(listener, 'listener')\n      let removeEventListener\n      if (signal.aborted) {\n        queueMicrotask(() => listener())\n      } else {\n        signal.addEventListener('abort', listener, {\n          __proto__: null,\n          once: true,\n          [kResistStopPropagation]: true\n        })\n        removeEventListener = () => {\n          signal.removeEventListener('abort', listener)\n        }\n      }\n      return {\n        __proto__: null,\n        [SymbolDispose]() {\n          var _removeEventListener\n          ;(_removeEventListener = removeEventListener) === null || _removeEventListener === undefined\n            ? undefined\n            : _removeEventListener()\n        }\n      }\n    },\n  AbortSignalAny:\n    AbortSignal.any ||\n    function AbortSignalAny(signals) {\n      // Fast path if there is only one signal.\n      if (signals.length === 1) {\n        return signals[0]\n      }\n      const ac = new AbortController()\n      const abort = () => ac.abort()\n      signals.forEach((signal) => {\n        validateAbortSignal(signal, 'signals')\n        signal.addEventListener('abort', abort, {\n          once: true\n        })\n      })\n      ac.signal.addEventListener(\n        'abort',\n        () => {\n          signals.forEach((signal) => signal.removeEventListener('abort', abort))\n        },\n        {\n          once: true\n        }\n      )\n      return ac.signal\n    }\n}\nmodule.exports.promisify.custom = Symbol.for('nodejs.util.promisify.custom')\n","'use strict'\n\nconst { format, inspect, AggregateError: CustomAggregateError } = require('./util')\n\n/*\n  This file is a reduced and adapted version of the main lib/internal/errors.js file defined at\n\n  https://github.com/nodejs/node/blob/master/lib/internal/errors.js\n\n  Don't try to replace with the original file and keep it up to date (starting from E(...) definitions)\n  with the upstream file.\n*/\n\nconst AggregateError = globalThis.AggregateError || CustomAggregateError\nconst kIsNodeError = Symbol('kIsNodeError')\nconst kTypes = [\n  'string',\n  'function',\n  'number',\n  'object',\n  // Accept 'Function' and 'Object' as alternative to the lower cased version.\n  'Function',\n  'Object',\n  'boolean',\n  'bigint',\n  'symbol'\n]\nconst classRegExp = /^([A-Z][a-z0-9]*)+$/\nconst nodeInternalPrefix = '__node_internal_'\nconst codes = {}\nfunction assert(value, message) {\n  if (!value) {\n    throw new codes.ERR_INTERNAL_ASSERTION(message)\n  }\n}\n\n// Only use this for integers! Decimal numbers do not work with this function.\nfunction addNumericalSeparator(val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\nfunction getMessage(key, msg, args) {\n  if (typeof msg === 'function') {\n    assert(\n      msg.length <= args.length,\n      // Default options do not count.\n      `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${msg.length}).`\n    )\n    return msg(...args)\n  }\n  const expectedLength = (msg.match(/%[dfijoOs]/g) || []).length\n  assert(\n    expectedLength === args.length,\n    `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${expectedLength}).`\n  )\n  if (args.length === 0) {\n    return msg\n  }\n  return format(msg, ...args)\n}\nfunction E(code, message, Base) {\n  if (!Base) {\n    Base = Error\n  }\n  class NodeError extends Base {\n    constructor(...args) {\n      super(getMessage(code, message, args))\n    }\n    toString() {\n      return `${this.name} [${code}]: ${this.message}`\n    }\n  }\n  Object.defineProperties(NodeError.prototype, {\n    name: {\n      value: Base.name,\n      writable: true,\n      enumerable: false,\n      configurable: true\n    },\n    toString: {\n      value() {\n        return `${this.name} [${code}]: ${this.message}`\n      },\n      writable: true,\n      enumerable: false,\n      configurable: true\n    }\n  })\n  NodeError.prototype.code = code\n  NodeError.prototype[kIsNodeError] = true\n  codes[code] = NodeError\n}\nfunction hideStackFrames(fn) {\n  // We rename the functions that will be hidden to cut off the stacktrace\n  // at the outermost one\n  const hidden = nodeInternalPrefix + fn.name\n  Object.defineProperty(fn, 'name', {\n    value: hidden\n  })\n  return fn\n}\nfunction aggregateTwoErrors(innerError, outerError) {\n  if (innerError && outerError && innerError !== outerError) {\n    if (Array.isArray(outerError.errors)) {\n      // If `outerError` is already an `AggregateError`.\n      outerError.errors.push(innerError)\n      return outerError\n    }\n    const err = new AggregateError([outerError, innerError], outerError.message)\n    err.code = outerError.code\n    return err\n  }\n  return innerError || outerError\n}\nclass AbortError extends Error {\n  constructor(message = 'The operation was aborted', options = undefined) {\n    if (options !== undefined && typeof options !== 'object') {\n      throw new codes.ERR_INVALID_ARG_TYPE('options', 'Object', options)\n    }\n    super(message, options)\n    this.code = 'ABORT_ERR'\n    this.name = 'AbortError'\n  }\n}\nE('ERR_ASSERTION', '%s', Error)\nE(\n  'ERR_INVALID_ARG_TYPE',\n  (name, expected, actual) => {\n    assert(typeof name === 'string', \"'name' must be a string\")\n    if (!Array.isArray(expected)) {\n      expected = [expected]\n    }\n    let msg = 'The '\n    if (name.endsWith(' argument')) {\n      // For cases like 'first argument'\n      msg += `${name} `\n    } else {\n      msg += `\"${name}\" ${name.includes('.') ? 'property' : 'argument'} `\n    }\n    msg += 'must be '\n    const types = []\n    const instances = []\n    const other = []\n    for (const value of expected) {\n      assert(typeof value === 'string', 'All expected entries have to be of type string')\n      if (kTypes.includes(value)) {\n        types.push(value.toLowerCase())\n      } else if (classRegExp.test(value)) {\n        instances.push(value)\n      } else {\n        assert(value !== 'object', 'The value \"object\" should be written as \"Object\"')\n        other.push(value)\n      }\n    }\n\n    // Special handle `object` in case other instances are allowed to outline\n    // the differences between each other.\n    if (instances.length > 0) {\n      const pos = types.indexOf('object')\n      if (pos !== -1) {\n        types.splice(types, pos, 1)\n        instances.push('Object')\n      }\n    }\n    if (types.length > 0) {\n      switch (types.length) {\n        case 1:\n          msg += `of type ${types[0]}`\n          break\n        case 2:\n          msg += `one of type ${types[0]} or ${types[1]}`\n          break\n        default: {\n          const last = types.pop()\n          msg += `one of type ${types.join(', ')}, or ${last}`\n        }\n      }\n      if (instances.length > 0 || other.length > 0) {\n        msg += ' or '\n      }\n    }\n    if (instances.length > 0) {\n      switch (instances.length) {\n        case 1:\n          msg += `an instance of ${instances[0]}`\n          break\n        case 2:\n          msg += `an instance of ${instances[0]} or ${instances[1]}`\n          break\n        default: {\n          const last = instances.pop()\n          msg += `an instance of ${instances.join(', ')}, or ${last}`\n        }\n      }\n      if (other.length > 0) {\n        msg += ' or '\n      }\n    }\n    switch (other.length) {\n      case 0:\n        break\n      case 1:\n        if (other[0].toLowerCase() !== other[0]) {\n          msg += 'an '\n        }\n        msg += `${other[0]}`\n        break\n      case 2:\n        msg += `one of ${other[0]} or ${other[1]}`\n        break\n      default: {\n        const last = other.pop()\n        msg += `one of ${other.join(', ')}, or ${last}`\n      }\n    }\n    if (actual == null) {\n      msg += `. Received ${actual}`\n    } else if (typeof actual === 'function' && actual.name) {\n      msg += `. Received function ${actual.name}`\n    } else if (typeof actual === 'object') {\n      var _actual$constructor\n      if (\n        (_actual$constructor = actual.constructor) !== null &&\n        _actual$constructor !== undefined &&\n        _actual$constructor.name\n      ) {\n        msg += `. Received an instance of ${actual.constructor.name}`\n      } else {\n        const inspected = inspect(actual, {\n          depth: -1\n        })\n        msg += `. Received ${inspected}`\n      }\n    } else {\n      let inspected = inspect(actual, {\n        colors: false\n      })\n      if (inspected.length > 25) {\n        inspected = `${inspected.slice(0, 25)}...`\n      }\n      msg += `. Received type ${typeof actual} (${inspected})`\n    }\n    return msg\n  },\n  TypeError\n)\nE(\n  'ERR_INVALID_ARG_VALUE',\n  (name, value, reason = 'is invalid') => {\n    let inspected = inspect(value)\n    if (inspected.length > 128) {\n      inspected = inspected.slice(0, 128) + '...'\n    }\n    const type = name.includes('.') ? 'property' : 'argument'\n    return `The ${type} '${name}' ${reason}. Received ${inspected}`\n  },\n  TypeError\n)\nE(\n  'ERR_INVALID_RETURN_VALUE',\n  (input, name, value) => {\n    var _value$constructor\n    const type =\n      value !== null &&\n      value !== undefined &&\n      (_value$constructor = value.constructor) !== null &&\n      _value$constructor !== undefined &&\n      _value$constructor.name\n        ? `instance of ${value.constructor.name}`\n        : `type ${typeof value}`\n    return `Expected ${input} to be returned from the \"${name}\"` + ` function but got ${type}.`\n  },\n  TypeError\n)\nE(\n  'ERR_MISSING_ARGS',\n  (...args) => {\n    assert(args.length > 0, 'At least one arg needs to be specified')\n    let msg\n    const len = args.length\n    args = (Array.isArray(args) ? args : [args]).map((a) => `\"${a}\"`).join(' or ')\n    switch (len) {\n      case 1:\n        msg += `The ${args[0]} argument`\n        break\n      case 2:\n        msg += `The ${args[0]} and ${args[1]} arguments`\n        break\n      default:\n        {\n          const last = args.pop()\n          msg += `The ${args.join(', ')}, and ${last} arguments`\n        }\n        break\n    }\n    return `${msg} must be specified`\n  },\n  TypeError\n)\nE(\n  'ERR_OUT_OF_RANGE',\n  (str, range, input) => {\n    assert(range, 'Missing \"range\" argument')\n    let received\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > 2n ** 32n || input < -(2n ** 32n)) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    } else {\n      received = inspect(input)\n    }\n    return `The value of \"${str}\" is out of range. It must be ${range}. Received ${received}`\n  },\n  RangeError\n)\nE('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times', Error)\nE('ERR_METHOD_NOT_IMPLEMENTED', 'The %s method is not implemented', Error)\nE('ERR_STREAM_ALREADY_FINISHED', 'Cannot call %s after a stream was finished', Error)\nE('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable', Error)\nE('ERR_STREAM_DESTROYED', 'Cannot call %s after a stream was destroyed', Error)\nE('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError)\nE('ERR_STREAM_PREMATURE_CLOSE', 'Premature close', Error)\nE('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF', Error)\nE('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event', Error)\nE('ERR_STREAM_WRITE_AFTER_END', 'write after end', Error)\nE('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError)\nmodule.exports = {\n  AbortError,\n  aggregateTwoErrors: hideStackFrames(aggregateTwoErrors),\n  hideStackFrames,\n  codes\n}\n","/* eslint jsdoc/require-jsdoc: \"error\" */\n\n'use strict'\n\nconst {\n  ArrayIsArray,\n  ArrayPrototypeIncludes,\n  ArrayPrototypeJoin,\n  ArrayPrototypeMap,\n  NumberIsInteger,\n  NumberIsNaN,\n  NumberMAX_SAFE_INTEGER,\n  NumberMIN_SAFE_INTEGER,\n  NumberParseInt,\n  ObjectPrototypeHasOwnProperty,\n  RegExpPrototypeExec,\n  String,\n  StringPrototypeToUpperCase,\n  StringPrototypeTrim\n} = require('../ours/primordials')\nconst {\n  hideStackFrames,\n  codes: { ERR_SOCKET_BAD_PORT, ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, ERR_OUT_OF_RANGE, ERR_UNKNOWN_SIGNAL }\n} = require('../ours/errors')\nconst { normalizeEncoding } = require('../ours/util')\nconst { isAsyncFunction, isArrayBufferView } = require('../ours/util').types\nconst signals = {}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isInt32(value) {\n  return value === (value | 0)\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isUint32(value) {\n  return value === value >>> 0\n}\nconst octalReg = /^[0-7]+$/\nconst modeDesc = 'must be a 32-bit unsigned integer or an octal string'\n\n/**\n * Parse and validate values that will be converted into mode_t (the S_*\n * constants). Only valid numbers and octal strings are allowed. They could be\n * converted to 32-bit unsigned integers or non-negative signed integers in the\n * C++ land, but any value higher than 0o777 will result in platform-specific\n * behaviors.\n * @param {*} value Values to be validated\n * @param {string} name Name of the argument\n * @param {number} [def] If specified, will be returned for invalid values\n * @returns {number}\n */\nfunction parseFileMode(value, name, def) {\n  if (typeof value === 'undefined') {\n    value = def\n  }\n  if (typeof value === 'string') {\n    if (RegExpPrototypeExec(octalReg, value) === null) {\n      throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc)\n    }\n    value = NumberParseInt(value, 8)\n  }\n  validateUint32(value, name)\n  return value\n}\n\n/**\n * @callback validateInteger\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInteger} */\nconst validateInteger = hideStackFrames((value, name, min = NumberMIN_SAFE_INTEGER, max = NumberMAX_SAFE_INTEGER) => {\n  if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  if (!NumberIsInteger(value)) throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  if (value < min || value > max) throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n})\n\n/**\n * @callback validateInt32\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInt32} */\nconst validateInt32 = hideStackFrames((value, name, min = -2147483648, max = 2147483647) => {\n  // The defaults for min and max correspond to the limits of 32-bit integers.\n  if (typeof value !== 'number') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n  if (!NumberIsInteger(value)) {\n    throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  }\n  if (value < min || value > max) {\n    throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n  }\n})\n\n/**\n * @callback validateUint32\n * @param {*} value\n * @param {string} name\n * @param {number|boolean} [positive=false]\n * @returns {asserts value is number}\n */\n\n/** @type {validateUint32} */\nconst validateUint32 = hideStackFrames((value, name, positive = false) => {\n  if (typeof value !== 'number') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n  if (!NumberIsInteger(value)) {\n    throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  }\n  const min = positive ? 1 : 0\n  // 2 ** 32 === 4294967296\n  const max = 4294967295\n  if (value < min || value > max) {\n    throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n  }\n})\n\n/**\n * @callback validateString\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string}\n */\n\n/** @type {validateString} */\nfunction validateString(value, name) {\n  if (typeof value !== 'string') throw new ERR_INVALID_ARG_TYPE(name, 'string', value)\n}\n\n/**\n * @callback validateNumber\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateNumber} */\nfunction validateNumber(value, name, min = undefined, max) {\n  if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  if (\n    (min != null && value < min) ||\n    (max != null && value > max) ||\n    ((min != null || max != null) && NumberIsNaN(value))\n  ) {\n    throw new ERR_OUT_OF_RANGE(\n      name,\n      `${min != null ? `>= ${min}` : ''}${min != null && max != null ? ' && ' : ''}${max != null ? `<= ${max}` : ''}`,\n      value\n    )\n  }\n}\n\n/**\n * @callback validateOneOf\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} oneOf\n */\n\n/** @type {validateOneOf} */\nconst validateOneOf = hideStackFrames((value, name, oneOf) => {\n  if (!ArrayPrototypeIncludes(oneOf, value)) {\n    const allowed = ArrayPrototypeJoin(\n      ArrayPrototypeMap(oneOf, (v) => (typeof v === 'string' ? `'${v}'` : String(v))),\n      ', '\n    )\n    const reason = 'must be one of: ' + allowed\n    throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n  }\n})\n\n/**\n * @callback validateBoolean\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean}\n */\n\n/** @type {validateBoolean} */\nfunction validateBoolean(value, name) {\n  if (typeof value !== 'boolean') throw new ERR_INVALID_ARG_TYPE(name, 'boolean', value)\n}\n\n/**\n * @param {any} options\n * @param {string} key\n * @param {boolean} defaultValue\n * @returns {boolean}\n */\nfunction getOwnPropertyValueOrDefault(options, key, defaultValue) {\n  return options == null || !ObjectPrototypeHasOwnProperty(options, key) ? defaultValue : options[key]\n}\n\n/**\n * @callback validateObject\n * @param {*} value\n * @param {string} name\n * @param {{\n *   allowArray?: boolean,\n *   allowFunction?: boolean,\n *   nullable?: boolean\n * }} [options]\n */\n\n/** @type {validateObject} */\nconst validateObject = hideStackFrames((value, name, options = null) => {\n  const allowArray = getOwnPropertyValueOrDefault(options, 'allowArray', false)\n  const allowFunction = getOwnPropertyValueOrDefault(options, 'allowFunction', false)\n  const nullable = getOwnPropertyValueOrDefault(options, 'nullable', false)\n  if (\n    (!nullable && value === null) ||\n    (!allowArray && ArrayIsArray(value)) ||\n    (typeof value !== 'object' && (!allowFunction || typeof value !== 'function'))\n  ) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'Object', value)\n  }\n})\n\n/**\n * @callback validateDictionary - We are using the Web IDL Standard definition\n *                                of \"dictionary\" here, which means any value\n *                                whose Type is either Undefined, Null, or\n *                                Object (which includes functions).\n * @param {*} value\n * @param {string} name\n * @see https://webidl.spec.whatwg.org/#es-dictionary\n * @see https://tc39.es/ecma262/#table-typeof-operator-results\n */\n\n/** @type {validateDictionary} */\nconst validateDictionary = hideStackFrames((value, name) => {\n  if (value != null && typeof value !== 'object' && typeof value !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'a dictionary', value)\n  }\n})\n\n/**\n * @callback validateArray\n * @param {*} value\n * @param {string} name\n * @param {number} [minLength]\n * @returns {asserts value is any[]}\n */\n\n/** @type {validateArray} */\nconst validateArray = hideStackFrames((value, name, minLength = 0) => {\n  if (!ArrayIsArray(value)) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'Array', value)\n  }\n  if (value.length < minLength) {\n    const reason = `must be longer than ${minLength}`\n    throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n  }\n})\n\n/**\n * @callback validateStringArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string[]}\n */\n\n/** @type {validateStringArray} */\nfunction validateStringArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    validateString(value[i], `${name}[${i}]`)\n  }\n}\n\n/**\n * @callback validateBooleanArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean[]}\n */\n\n/** @type {validateBooleanArray} */\nfunction validateBooleanArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    validateBoolean(value[i], `${name}[${i}]`)\n  }\n}\n\n/**\n * @callback validateAbortSignalArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is AbortSignal[]}\n */\n\n/** @type {validateAbortSignalArray} */\nfunction validateAbortSignalArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    const signal = value[i]\n    const indexedName = `${name}[${i}]`\n    if (signal == null) {\n      throw new ERR_INVALID_ARG_TYPE(indexedName, 'AbortSignal', signal)\n    }\n    validateAbortSignal(signal, indexedName)\n  }\n}\n\n/**\n * @param {*} signal\n * @param {string} [name='signal']\n * @returns {asserts signal is keyof signals}\n */\nfunction validateSignalName(signal, name = 'signal') {\n  validateString(signal, name)\n  if (signals[signal] === undefined) {\n    if (signals[StringPrototypeToUpperCase(signal)] !== undefined) {\n      throw new ERR_UNKNOWN_SIGNAL(signal + ' (signals must use all capital letters)')\n    }\n    throw new ERR_UNKNOWN_SIGNAL(signal)\n  }\n}\n\n/**\n * @callback validateBuffer\n * @param {*} buffer\n * @param {string} [name='buffer']\n * @returns {asserts buffer is ArrayBufferView}\n */\n\n/** @type {validateBuffer} */\nconst validateBuffer = hideStackFrames((buffer, name = 'buffer') => {\n  if (!isArrayBufferView(buffer)) {\n    throw new ERR_INVALID_ARG_TYPE(name, ['Buffer', 'TypedArray', 'DataView'], buffer)\n  }\n})\n\n/**\n * @param {string} data\n * @param {string} encoding\n */\nfunction validateEncoding(data, encoding) {\n  const normalizedEncoding = normalizeEncoding(encoding)\n  const length = data.length\n  if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n    throw new ERR_INVALID_ARG_VALUE('encoding', encoding, `is invalid for data of length ${length}`)\n  }\n}\n\n/**\n * Check that the port number is not NaN when coerced to a number,\n * is an integer and that it falls within the legal range of port numbers.\n * @param {*} port\n * @param {string} [name='Port']\n * @param {boolean} [allowZero=true]\n * @returns {number}\n */\nfunction validatePort(port, name = 'Port', allowZero = true) {\n  if (\n    (typeof port !== 'number' && typeof port !== 'string') ||\n    (typeof port === 'string' && StringPrototypeTrim(port).length === 0) ||\n    +port !== +port >>> 0 ||\n    port > 0xffff ||\n    (port === 0 && !allowZero)\n  ) {\n    throw new ERR_SOCKET_BAD_PORT(name, port, allowZero)\n  }\n  return port | 0\n}\n\n/**\n * @callback validateAbortSignal\n * @param {*} signal\n * @param {string} name\n */\n\n/** @type {validateAbortSignal} */\nconst validateAbortSignal = hideStackFrames((signal, name) => {\n  if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n})\n\n/**\n * @callback validateFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validateFunction} */\nconst validateFunction = hideStackFrames((value, name) => {\n  if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validatePlainFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validatePlainFunction} */\nconst validatePlainFunction = hideStackFrames((value, name) => {\n  if (typeof value !== 'function' || isAsyncFunction(value)) throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validateUndefined\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is undefined}\n */\n\n/** @type {validateUndefined} */\nconst validateUndefined = hideStackFrames((value, name) => {\n  if (value !== undefined) throw new ERR_INVALID_ARG_TYPE(name, 'undefined', value)\n})\n\n/**\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} union\n */\nfunction validateUnion(value, name, union) {\n  if (!ArrayPrototypeIncludes(union, value)) {\n    throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value)\n  }\n}\n\n/*\n  The rules for the Link header field are described here:\n  https://www.rfc-editor.org/rfc/rfc8288.html#section-3\n\n  This regex validates any string surrounded by angle brackets\n  (not necessarily a valid URI reference) followed by zero or more\n  link-params separated by semicolons.\n*/\nconst linkValueRegExp = /^(?:<[^>]*>)(?:\\s*;\\s*[^;\"\\s]+(?:=(\")?[^;\"\\s]*\\1)?)*$/\n\n/**\n * @param {any} value\n * @param {string} name\n */\nfunction validateLinkHeaderFormat(value, name) {\n  if (typeof value === 'undefined' || !RegExpPrototypeExec(linkValueRegExp, value)) {\n    throw new ERR_INVALID_ARG_VALUE(\n      name,\n      value,\n      'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n    )\n  }\n}\n\n/**\n * @param {any} hints\n * @return {string}\n */\nfunction validateLinkHeaderValue(hints) {\n  if (typeof hints === 'string') {\n    validateLinkHeaderFormat(hints, 'hints')\n    return hints\n  } else if (ArrayIsArray(hints)) {\n    const hintsLength = hints.length\n    let result = ''\n    if (hintsLength === 0) {\n      return result\n    }\n    for (let i = 0; i < hintsLength; i++) {\n      const link = hints[i]\n      validateLinkHeaderFormat(link, 'hints')\n      result += link\n      if (i !== hintsLength - 1) {\n        result += ', '\n      }\n    }\n    return result\n  }\n  throw new ERR_INVALID_ARG_VALUE(\n    'hints',\n    hints,\n    'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n  )\n}\nmodule.exports = {\n  isInt32,\n  isUint32,\n  parseFileMode,\n  validateArray,\n  validateStringArray,\n  validateBooleanArray,\n  validateAbortSignalArray,\n  validateBoolean,\n  validateBuffer,\n  validateDictionary,\n  validateEncoding,\n  validateFunction,\n  validateInt32,\n  validateInteger,\n  validateNumber,\n  validateObject,\n  validateOneOf,\n  validatePlainFunction,\n  validatePort,\n  validateSignalName,\n  validateString,\n  validateUint32,\n  validateUndefined,\n  validateUnion,\n  validateAbortSignal,\n  validateLinkHeaderValue\n}\n","'use strict'\n\nconst { SymbolAsyncIterator, SymbolIterator, SymbolFor } = require('../../ours/primordials')\n\n// We need to use SymbolFor to make these globally available\n// for interopt with readable-stream, i.e. readable-stream\n// and node core needs to be able to read/write private state\n// from each other for proper interoperability.\nconst kIsDestroyed = SymbolFor('nodejs.stream.destroyed')\nconst kIsErrored = SymbolFor('nodejs.stream.errored')\nconst kIsReadable = SymbolFor('nodejs.stream.readable')\nconst kIsWritable = SymbolFor('nodejs.stream.writable')\nconst kIsDisturbed = SymbolFor('nodejs.stream.disturbed')\nconst kIsClosedPromise = SymbolFor('nodejs.webstream.isClosedPromise')\nconst kControllerErrorFunction = SymbolFor('nodejs.webstream.controllerErrorFunction')\nfunction isReadableNodeStream(obj, strict = false) {\n  var _obj$_readableState\n  return !!(\n    (\n      obj &&\n      typeof obj.pipe === 'function' &&\n      typeof obj.on === 'function' &&\n      (!strict || (typeof obj.pause === 'function' && typeof obj.resume === 'function')) &&\n      (!obj._writableState ||\n        ((_obj$_readableState = obj._readableState) === null || _obj$_readableState === undefined\n          ? undefined\n          : _obj$_readableState.readable) !== false) &&\n      // Duplex\n      (!obj._writableState || obj._readableState)\n    ) // Writable has .pipe.\n  )\n}\n\nfunction isWritableNodeStream(obj) {\n  var _obj$_writableState\n  return !!(\n    (\n      obj &&\n      typeof obj.write === 'function' &&\n      typeof obj.on === 'function' &&\n      (!obj._readableState ||\n        ((_obj$_writableState = obj._writableState) === null || _obj$_writableState === undefined\n          ? undefined\n          : _obj$_writableState.writable) !== false)\n    ) // Duplex\n  )\n}\n\nfunction isDuplexNodeStream(obj) {\n  return !!(\n    obj &&\n    typeof obj.pipe === 'function' &&\n    obj._readableState &&\n    typeof obj.on === 'function' &&\n    typeof obj.write === 'function'\n  )\n}\nfunction isNodeStream(obj) {\n  return (\n    obj &&\n    (obj._readableState ||\n      obj._writableState ||\n      (typeof obj.write === 'function' && typeof obj.on === 'function') ||\n      (typeof obj.pipe === 'function' && typeof obj.on === 'function'))\n  )\n}\nfunction isReadableStream(obj) {\n  return !!(\n    obj &&\n    !isNodeStream(obj) &&\n    typeof obj.pipeThrough === 'function' &&\n    typeof obj.getReader === 'function' &&\n    typeof obj.cancel === 'function'\n  )\n}\nfunction isWritableStream(obj) {\n  return !!(obj && !isNodeStream(obj) && typeof obj.getWriter === 'function' && typeof obj.abort === 'function')\n}\nfunction isTransformStream(obj) {\n  return !!(obj && !isNodeStream(obj) && typeof obj.readable === 'object' && typeof obj.writable === 'object')\n}\nfunction isWebStream(obj) {\n  return isReadableStream(obj) || isWritableStream(obj) || isTransformStream(obj)\n}\nfunction isIterable(obj, isAsync) {\n  if (obj == null) return false\n  if (isAsync === true) return typeof obj[SymbolAsyncIterator] === 'function'\n  if (isAsync === false) return typeof obj[SymbolIterator] === 'function'\n  return typeof obj[SymbolAsyncIterator] === 'function' || typeof obj[SymbolIterator] === 'function'\n}\nfunction isDestroyed(stream) {\n  if (!isNodeStream(stream)) return null\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const state = wState || rState\n  return !!(stream.destroyed || stream[kIsDestroyed] || (state !== null && state !== undefined && state.destroyed))\n}\n\n// Have been end():d.\nfunction isWritableEnded(stream) {\n  if (!isWritableNodeStream(stream)) return null\n  if (stream.writableEnded === true) return true\n  const wState = stream._writableState\n  if (wState !== null && wState !== undefined && wState.errored) return false\n  if (typeof (wState === null || wState === undefined ? undefined : wState.ended) !== 'boolean') return null\n  return wState.ended\n}\n\n// Have emitted 'finish'.\nfunction isWritableFinished(stream, strict) {\n  if (!isWritableNodeStream(stream)) return null\n  if (stream.writableFinished === true) return true\n  const wState = stream._writableState\n  if (wState !== null && wState !== undefined && wState.errored) return false\n  if (typeof (wState === null || wState === undefined ? undefined : wState.finished) !== 'boolean') return null\n  return !!(wState.finished || (strict === false && wState.ended === true && wState.length === 0))\n}\n\n// Have been push(null):d.\nfunction isReadableEnded(stream) {\n  if (!isReadableNodeStream(stream)) return null\n  if (stream.readableEnded === true) return true\n  const rState = stream._readableState\n  if (!rState || rState.errored) return false\n  if (typeof (rState === null || rState === undefined ? undefined : rState.ended) !== 'boolean') return null\n  return rState.ended\n}\n\n// Have emitted 'end'.\nfunction isReadableFinished(stream, strict) {\n  if (!isReadableNodeStream(stream)) return null\n  const rState = stream._readableState\n  if (rState !== null && rState !== undefined && rState.errored) return false\n  if (typeof (rState === null || rState === undefined ? undefined : rState.endEmitted) !== 'boolean') return null\n  return !!(rState.endEmitted || (strict === false && rState.ended === true && rState.length === 0))\n}\nfunction isReadable(stream) {\n  if (stream && stream[kIsReadable] != null) return stream[kIsReadable]\n  if (typeof (stream === null || stream === undefined ? undefined : stream.readable) !== 'boolean') return null\n  if (isDestroyed(stream)) return false\n  return isReadableNodeStream(stream) && stream.readable && !isReadableFinished(stream)\n}\nfunction isWritable(stream) {\n  if (stream && stream[kIsWritable] != null) return stream[kIsWritable]\n  if (typeof (stream === null || stream === undefined ? undefined : stream.writable) !== 'boolean') return null\n  if (isDestroyed(stream)) return false\n  return isWritableNodeStream(stream) && stream.writable && !isWritableEnded(stream)\n}\nfunction isFinished(stream, opts) {\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (isDestroyed(stream)) {\n    return true\n  }\n  if ((opts === null || opts === undefined ? undefined : opts.readable) !== false && isReadable(stream)) {\n    return false\n  }\n  if ((opts === null || opts === undefined ? undefined : opts.writable) !== false && isWritable(stream)) {\n    return false\n  }\n  return true\n}\nfunction isWritableErrored(stream) {\n  var _stream$_writableStat, _stream$_writableStat2\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (stream.writableErrored) {\n    return stream.writableErrored\n  }\n  return (_stream$_writableStat =\n    (_stream$_writableStat2 = stream._writableState) === null || _stream$_writableStat2 === undefined\n      ? undefined\n      : _stream$_writableStat2.errored) !== null && _stream$_writableStat !== undefined\n    ? _stream$_writableStat\n    : null\n}\nfunction isReadableErrored(stream) {\n  var _stream$_readableStat, _stream$_readableStat2\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (stream.readableErrored) {\n    return stream.readableErrored\n  }\n  return (_stream$_readableStat =\n    (_stream$_readableStat2 = stream._readableState) === null || _stream$_readableStat2 === undefined\n      ? undefined\n      : _stream$_readableStat2.errored) !== null && _stream$_readableStat !== undefined\n    ? _stream$_readableStat\n    : null\n}\nfunction isClosed(stream) {\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (typeof stream.closed === 'boolean') {\n    return stream.closed\n  }\n  const wState = stream._writableState\n  const rState = stream._readableState\n  if (\n    typeof (wState === null || wState === undefined ? undefined : wState.closed) === 'boolean' ||\n    typeof (rState === null || rState === undefined ? undefined : rState.closed) === 'boolean'\n  ) {\n    return (\n      (wState === null || wState === undefined ? undefined : wState.closed) ||\n      (rState === null || rState === undefined ? undefined : rState.closed)\n    )\n  }\n  if (typeof stream._closed === 'boolean' && isOutgoingMessage(stream)) {\n    return stream._closed\n  }\n  return null\n}\nfunction isOutgoingMessage(stream) {\n  return (\n    typeof stream._closed === 'boolean' &&\n    typeof stream._defaultKeepAlive === 'boolean' &&\n    typeof stream._removedConnection === 'boolean' &&\n    typeof stream._removedContLen === 'boolean'\n  )\n}\nfunction isServerResponse(stream) {\n  return typeof stream._sent100 === 'boolean' && isOutgoingMessage(stream)\n}\nfunction isServerRequest(stream) {\n  var _stream$req\n  return (\n    typeof stream._consuming === 'boolean' &&\n    typeof stream._dumped === 'boolean' &&\n    ((_stream$req = stream.req) === null || _stream$req === undefined ? undefined : _stream$req.upgradeOrConnect) ===\n      undefined\n  )\n}\nfunction willEmitClose(stream) {\n  if (!isNodeStream(stream)) return null\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const state = wState || rState\n  return (\n    (!state && isServerResponse(stream)) || !!(state && state.autoDestroy && state.emitClose && state.closed === false)\n  )\n}\nfunction isDisturbed(stream) {\n  var _stream$kIsDisturbed\n  return !!(\n    stream &&\n    ((_stream$kIsDisturbed = stream[kIsDisturbed]) !== null && _stream$kIsDisturbed !== undefined\n      ? _stream$kIsDisturbed\n      : stream.readableDidRead || stream.readableAborted)\n  )\n}\nfunction isErrored(stream) {\n  var _ref,\n    _ref2,\n    _ref3,\n    _ref4,\n    _ref5,\n    _stream$kIsErrored,\n    _stream$_readableStat3,\n    _stream$_writableStat3,\n    _stream$_readableStat4,\n    _stream$_writableStat4\n  return !!(\n    stream &&\n    ((_ref =\n      (_ref2 =\n        (_ref3 =\n          (_ref4 =\n            (_ref5 =\n              (_stream$kIsErrored = stream[kIsErrored]) !== null && _stream$kIsErrored !== undefined\n                ? _stream$kIsErrored\n                : stream.readableErrored) !== null && _ref5 !== undefined\n              ? _ref5\n              : stream.writableErrored) !== null && _ref4 !== undefined\n            ? _ref4\n            : (_stream$_readableStat3 = stream._readableState) === null || _stream$_readableStat3 === undefined\n            ? undefined\n            : _stream$_readableStat3.errorEmitted) !== null && _ref3 !== undefined\n          ? _ref3\n          : (_stream$_writableStat3 = stream._writableState) === null || _stream$_writableStat3 === undefined\n          ? undefined\n          : _stream$_writableStat3.errorEmitted) !== null && _ref2 !== undefined\n        ? _ref2\n        : (_stream$_readableStat4 = stream._readableState) === null || _stream$_readableStat4 === undefined\n        ? undefined\n        : _stream$_readableStat4.errored) !== null && _ref !== undefined\n      ? _ref\n      : (_stream$_writableStat4 = stream._writableState) === null || _stream$_writableStat4 === undefined\n      ? undefined\n      : _stream$_writableStat4.errored)\n  )\n}\nmodule.exports = {\n  isDestroyed,\n  kIsDestroyed,\n  isDisturbed,\n  kIsDisturbed,\n  isErrored,\n  kIsErrored,\n  isReadable,\n  kIsReadable,\n  kIsClosedPromise,\n  kControllerErrorFunction,\n  kIsWritable,\n  isClosed,\n  isDuplexNodeStream,\n  isFinished,\n  isIterable,\n  isReadableNodeStream,\n  isReadableStream,\n  isReadableEnded,\n  isReadableFinished,\n  isReadableErrored,\n  isNodeStream,\n  isWebStream,\n  isWritable,\n  isWritableNodeStream,\n  isWritableStream,\n  isWritableEnded,\n  isWritableFinished,\n  isWritableErrored,\n  isServerRequest,\n  isServerResponse,\n  willEmitClose,\n  isTransformStream\n}\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_PREMATURE_CLOSE } = codes\nconst { kEmptyObject, once } = require('../../ours/util')\nconst { validateAbortSignal, validateFunction, validateObject, validateBoolean } = require('../validators')\nconst { Promise, PromisePrototypeThen, SymbolDispose } = require('../../ours/primordials')\nconst {\n  isClosed,\n  isReadable,\n  isReadableNodeStream,\n  isReadableStream,\n  isReadableFinished,\n  isReadableErrored,\n  isWritable,\n  isWritableNodeStream,\n  isWritableStream,\n  isWritableFinished,\n  isWritableErrored,\n  isNodeStream,\n  willEmitClose: _willEmitClose,\n  kIsClosedPromise\n} = require('./utils')\nlet addAbortListener\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function'\n}\nconst nop = () => {}\nfunction eos(stream, options, callback) {\n  var _options$readable, _options$writable\n  if (arguments.length === 2) {\n    callback = options\n    options = kEmptyObject\n  } else if (options == null) {\n    options = kEmptyObject\n  } else {\n    validateObject(options, 'options')\n  }\n  validateFunction(callback, 'callback')\n  validateAbortSignal(options.signal, 'options.signal')\n  callback = once(callback)\n  if (isReadableStream(stream) || isWritableStream(stream)) {\n    return eosWeb(stream, options, callback)\n  }\n  if (!isNodeStream(stream)) {\n    throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n  }\n  const readable =\n    (_options$readable = options.readable) !== null && _options$readable !== undefined\n      ? _options$readable\n      : isReadableNodeStream(stream)\n  const writable =\n    (_options$writable = options.writable) !== null && _options$writable !== undefined\n      ? _options$writable\n      : isWritableNodeStream(stream)\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const onlegacyfinish = () => {\n    if (!stream.writable) {\n      onfinish()\n    }\n  }\n\n  // TODO (ronag): Improve soft detection to include core modules and\n  // common ecosystem modules that do properly emit 'close' but fail\n  // this generic check.\n  let willEmitClose =\n    _willEmitClose(stream) && isReadableNodeStream(stream) === readable && isWritableNodeStream(stream) === writable\n  let writableFinished = isWritableFinished(stream, false)\n  const onfinish = () => {\n    writableFinished = true\n    // Stream should not be destroyed here. If it is that\n    // means that user space is doing something differently and\n    // we cannot trust willEmitClose.\n    if (stream.destroyed) {\n      willEmitClose = false\n    }\n    if (willEmitClose && (!stream.readable || readable)) {\n      return\n    }\n    if (!readable || readableFinished) {\n      callback.call(stream)\n    }\n  }\n  let readableFinished = isReadableFinished(stream, false)\n  const onend = () => {\n    readableFinished = true\n    // Stream should not be destroyed here. If it is that\n    // means that user space is doing something differently and\n    // we cannot trust willEmitClose.\n    if (stream.destroyed) {\n      willEmitClose = false\n    }\n    if (willEmitClose && (!stream.writable || writable)) {\n      return\n    }\n    if (!writable || writableFinished) {\n      callback.call(stream)\n    }\n  }\n  const onerror = (err) => {\n    callback.call(stream, err)\n  }\n  let closed = isClosed(stream)\n  const onclose = () => {\n    closed = true\n    const errored = isWritableErrored(stream) || isReadableErrored(stream)\n    if (errored && typeof errored !== 'boolean') {\n      return callback.call(stream, errored)\n    }\n    if (readable && !readableFinished && isReadableNodeStream(stream, true)) {\n      if (!isReadableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n    }\n    if (writable && !writableFinished) {\n      if (!isWritableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n    }\n    callback.call(stream)\n  }\n  const onclosed = () => {\n    closed = true\n    const errored = isWritableErrored(stream) || isReadableErrored(stream)\n    if (errored && typeof errored !== 'boolean') {\n      return callback.call(stream, errored)\n    }\n    callback.call(stream)\n  }\n  const onrequest = () => {\n    stream.req.on('finish', onfinish)\n  }\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish)\n    if (!willEmitClose) {\n      stream.on('abort', onclose)\n    }\n    if (stream.req) {\n      onrequest()\n    } else {\n      stream.on('request', onrequest)\n    }\n  } else if (writable && !wState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish)\n    stream.on('close', onlegacyfinish)\n  }\n\n  // Not all streams will emit 'close' after 'aborted'.\n  if (!willEmitClose && typeof stream.aborted === 'boolean') {\n    stream.on('aborted', onclose)\n  }\n  stream.on('end', onend)\n  stream.on('finish', onfinish)\n  if (options.error !== false) {\n    stream.on('error', onerror)\n  }\n  stream.on('close', onclose)\n  if (closed) {\n    process.nextTick(onclose)\n  } else if (\n    (wState !== null && wState !== undefined && wState.errorEmitted) ||\n    (rState !== null && rState !== undefined && rState.errorEmitted)\n  ) {\n    if (!willEmitClose) {\n      process.nextTick(onclosed)\n    }\n  } else if (\n    !readable &&\n    (!willEmitClose || isReadable(stream)) &&\n    (writableFinished || isWritable(stream) === false)\n  ) {\n    process.nextTick(onclosed)\n  } else if (\n    !writable &&\n    (!willEmitClose || isWritable(stream)) &&\n    (readableFinished || isReadable(stream) === false)\n  ) {\n    process.nextTick(onclosed)\n  } else if (rState && stream.req && stream.aborted) {\n    process.nextTick(onclosed)\n  }\n  const cleanup = () => {\n    callback = nop\n    stream.removeListener('aborted', onclose)\n    stream.removeListener('complete', onfinish)\n    stream.removeListener('abort', onclose)\n    stream.removeListener('request', onrequest)\n    if (stream.req) stream.req.removeListener('finish', onfinish)\n    stream.removeListener('end', onlegacyfinish)\n    stream.removeListener('close', onlegacyfinish)\n    stream.removeListener('finish', onfinish)\n    stream.removeListener('end', onend)\n    stream.removeListener('error', onerror)\n    stream.removeListener('close', onclose)\n  }\n  if (options.signal && !closed) {\n    const abort = () => {\n      // Keep it because cleanup removes it.\n      const endCallback = callback\n      cleanup()\n      endCallback.call(\n        stream,\n        new AbortError(undefined, {\n          cause: options.signal.reason\n        })\n      )\n    }\n    if (options.signal.aborted) {\n      process.nextTick(abort)\n    } else {\n      addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n      const disposable = addAbortListener(options.signal, abort)\n      const originalCallback = callback\n      callback = once((...args) => {\n        disposable[SymbolDispose]()\n        originalCallback.apply(stream, args)\n      })\n    }\n  }\n  return cleanup\n}\nfunction eosWeb(stream, options, callback) {\n  let isAborted = false\n  let abort = nop\n  if (options.signal) {\n    abort = () => {\n      isAborted = true\n      callback.call(\n        stream,\n        new AbortError(undefined, {\n          cause: options.signal.reason\n        })\n      )\n    }\n    if (options.signal.aborted) {\n      process.nextTick(abort)\n    } else {\n      addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n      const disposable = addAbortListener(options.signal, abort)\n      const originalCallback = callback\n      callback = once((...args) => {\n        disposable[SymbolDispose]()\n        originalCallback.apply(stream, args)\n      })\n    }\n  }\n  const resolverFn = (...args) => {\n    if (!isAborted) {\n      process.nextTick(() => callback.apply(stream, args))\n    }\n  }\n  PromisePrototypeThen(stream[kIsClosedPromise].promise, resolverFn, resolverFn)\n  return nop\n}\nfunction finished(stream, opts) {\n  var _opts\n  let autoCleanup = false\n  if (opts === null) {\n    opts = kEmptyObject\n  }\n  if ((_opts = opts) !== null && _opts !== undefined && _opts.cleanup) {\n    validateBoolean(opts.cleanup, 'cleanup')\n    autoCleanup = opts.cleanup\n  }\n  return new Promise((resolve, reject) => {\n    const cleanup = eos(stream, opts, (err) => {\n      if (autoCleanup) {\n        cleanup()\n      }\n      if (err) {\n        reject(err)\n      } else {\n        resolve()\n      }\n    })\n  })\n}\nmodule.exports = eos\nmodule.exports.finished = finished\n","'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n  aggregateTwoErrors,\n  codes: { ERR_MULTIPLE_CALLBACK },\n  AbortError\n} = require('../../ours/errors')\nconst { Symbol } = require('../../ours/primordials')\nconst { kIsDestroyed, isDestroyed, isFinished, isServerRequest } = require('./utils')\nconst kDestroy = Symbol('kDestroy')\nconst kConstruct = Symbol('kConstruct')\nfunction checkError(err, w, r) {\n  if (err) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    err.stack // eslint-disable-line no-unused-expressions\n\n    if (w && !w.errored) {\n      w.errored = err\n    }\n    if (r && !r.errored) {\n      r.errored = err\n    }\n  }\n}\n\n// Backwards compat. cb() is undocumented and unused in core but\n// unfortunately might be used by modules.\nfunction destroy(err, cb) {\n  const r = this._readableState\n  const w = this._writableState\n  // With duplex streams we use the writable side for state.\n  const s = w || r\n  if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n    if (typeof cb === 'function') {\n      cb()\n    }\n    return this\n  }\n\n  // We set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n  checkError(err, w, r)\n  if (w) {\n    w.destroyed = true\n  }\n  if (r) {\n    r.destroyed = true\n  }\n\n  // If still constructing then defer calling _destroy.\n  if (!s.constructed) {\n    this.once(kDestroy, function (er) {\n      _destroy(this, aggregateTwoErrors(er, err), cb)\n    })\n  } else {\n    _destroy(this, err, cb)\n  }\n  return this\n}\nfunction _destroy(self, err, cb) {\n  let called = false\n  function onDestroy(err) {\n    if (called) {\n      return\n    }\n    called = true\n    const r = self._readableState\n    const w = self._writableState\n    checkError(err, w, r)\n    if (w) {\n      w.closed = true\n    }\n    if (r) {\n      r.closed = true\n    }\n    if (typeof cb === 'function') {\n      cb(err)\n    }\n    if (err) {\n      process.nextTick(emitErrorCloseNT, self, err)\n    } else {\n      process.nextTick(emitCloseNT, self)\n    }\n  }\n  try {\n    self._destroy(err || null, onDestroy)\n  } catch (err) {\n    onDestroy(err)\n  }\n}\nfunction emitErrorCloseNT(self, err) {\n  emitErrorNT(self, err)\n  emitCloseNT(self)\n}\nfunction emitCloseNT(self) {\n  const r = self._readableState\n  const w = self._writableState\n  if (w) {\n    w.closeEmitted = true\n  }\n  if (r) {\n    r.closeEmitted = true\n  }\n  if ((w !== null && w !== undefined && w.emitClose) || (r !== null && r !== undefined && r.emitClose)) {\n    self.emit('close')\n  }\n}\nfunction emitErrorNT(self, err) {\n  const r = self._readableState\n  const w = self._writableState\n  if ((w !== null && w !== undefined && w.errorEmitted) || (r !== null && r !== undefined && r.errorEmitted)) {\n    return\n  }\n  if (w) {\n    w.errorEmitted = true\n  }\n  if (r) {\n    r.errorEmitted = true\n  }\n  self.emit('error', err)\n}\nfunction undestroy() {\n  const r = this._readableState\n  const w = this._writableState\n  if (r) {\n    r.constructed = true\n    r.closed = false\n    r.closeEmitted = false\n    r.destroyed = false\n    r.errored = null\n    r.errorEmitted = false\n    r.reading = false\n    r.ended = r.readable === false\n    r.endEmitted = r.readable === false\n  }\n  if (w) {\n    w.constructed = true\n    w.destroyed = false\n    w.closed = false\n    w.closeEmitted = false\n    w.errored = null\n    w.errorEmitted = false\n    w.finalCalled = false\n    w.prefinished = false\n    w.ended = w.writable === false\n    w.ending = w.writable === false\n    w.finished = w.writable === false\n  }\n}\nfunction errorOrDestroy(stream, err, sync) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  const r = stream._readableState\n  const w = stream._writableState\n  if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n    return this\n  }\n  if ((r !== null && r !== undefined && r.autoDestroy) || (w !== null && w !== undefined && w.autoDestroy))\n    stream.destroy(err)\n  else if (err) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    err.stack // eslint-disable-line no-unused-expressions\n\n    if (w && !w.errored) {\n      w.errored = err\n    }\n    if (r && !r.errored) {\n      r.errored = err\n    }\n    if (sync) {\n      process.nextTick(emitErrorNT, stream, err)\n    } else {\n      emitErrorNT(stream, err)\n    }\n  }\n}\nfunction construct(stream, cb) {\n  if (typeof stream._construct !== 'function') {\n    return\n  }\n  const r = stream._readableState\n  const w = stream._writableState\n  if (r) {\n    r.constructed = false\n  }\n  if (w) {\n    w.constructed = false\n  }\n  stream.once(kConstruct, cb)\n  if (stream.listenerCount(kConstruct) > 1) {\n    // Duplex\n    return\n  }\n  process.nextTick(constructNT, stream)\n}\nfunction constructNT(stream) {\n  let called = false\n  function onConstruct(err) {\n    if (called) {\n      errorOrDestroy(stream, err !== null && err !== undefined ? err : new ERR_MULTIPLE_CALLBACK())\n      return\n    }\n    called = true\n    const r = stream._readableState\n    const w = stream._writableState\n    const s = w || r\n    if (r) {\n      r.constructed = true\n    }\n    if (w) {\n      w.constructed = true\n    }\n    if (s.destroyed) {\n      stream.emit(kDestroy, err)\n    } else if (err) {\n      errorOrDestroy(stream, err, true)\n    } else {\n      process.nextTick(emitConstructNT, stream)\n    }\n  }\n  try {\n    stream._construct((err) => {\n      process.nextTick(onConstruct, err)\n    })\n  } catch (err) {\n    process.nextTick(onConstruct, err)\n  }\n}\nfunction emitConstructNT(stream) {\n  stream.emit(kConstruct)\n}\nfunction isRequest(stream) {\n  return (stream === null || stream === undefined ? undefined : stream.setHeader) && typeof stream.abort === 'function'\n}\nfunction emitCloseLegacy(stream) {\n  stream.emit('close')\n}\nfunction emitErrorCloseLegacy(stream, err) {\n  stream.emit('error', err)\n  process.nextTick(emitCloseLegacy, stream)\n}\n\n// Normalize destroy for legacy.\nfunction destroyer(stream, err) {\n  if (!stream || isDestroyed(stream)) {\n    return\n  }\n  if (!err && !isFinished(stream)) {\n    err = new AbortError()\n  }\n\n  // TODO: Remove isRequest branches.\n  if (isServerRequest(stream)) {\n    stream.socket = null\n    stream.destroy(err)\n  } else if (isRequest(stream)) {\n    stream.abort()\n  } else if (isRequest(stream.req)) {\n    stream.req.abort()\n  } else if (typeof stream.destroy === 'function') {\n    stream.destroy(err)\n  } else if (typeof stream.close === 'function') {\n    // TODO: Don't lose err?\n    stream.close()\n  } else if (err) {\n    process.nextTick(emitErrorCloseLegacy, stream, err)\n  } else {\n    process.nextTick(emitCloseLegacy, stream)\n  }\n  if (!stream.destroyed) {\n    stream[kIsDestroyed] = true\n  }\n}\nmodule.exports = {\n  construct,\n  destroyer,\n  destroy,\n  undestroy,\n  errorOrDestroy\n}\n","'use strict'\n\nconst { ArrayIsArray, ObjectSetPrototypeOf } = require('../../ours/primordials')\nconst { EventEmitter: EE } = require('events')\nfunction Stream(opts) {\n  EE.call(this, opts)\n}\nObjectSetPrototypeOf(Stream.prototype, EE.prototype)\nObjectSetPrototypeOf(Stream, EE)\nStream.prototype.pipe = function (dest, options) {\n  const source = this\n  function ondata(chunk) {\n    if (dest.writable && dest.write(chunk) === false && source.pause) {\n      source.pause()\n    }\n  }\n  source.on('data', ondata)\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume()\n    }\n  }\n  dest.on('drain', ondrain)\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend)\n    source.on('close', onclose)\n  }\n  let didOnEnd = false\n  function onend() {\n    if (didOnEnd) return\n    didOnEnd = true\n    dest.end()\n  }\n  function onclose() {\n    if (didOnEnd) return\n    didOnEnd = true\n    if (typeof dest.destroy === 'function') dest.destroy()\n  }\n\n  // Don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup()\n    if (EE.listenerCount(this, 'error') === 0) {\n      this.emit('error', er)\n    }\n  }\n  prependListener(source, 'error', onerror)\n  prependListener(dest, 'error', onerror)\n\n  // Remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata)\n    dest.removeListener('drain', ondrain)\n    source.removeListener('end', onend)\n    source.removeListener('close', onclose)\n    source.removeListener('error', onerror)\n    dest.removeListener('error', onerror)\n    source.removeListener('end', cleanup)\n    source.removeListener('close', cleanup)\n    dest.removeListener('close', cleanup)\n  }\n  source.on('end', cleanup)\n  source.on('close', cleanup)\n  dest.on('close', cleanup)\n  dest.emit('pipe', source)\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest\n}\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn)\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn)\n  else if (ArrayIsArray(emitter._events[event])) emitter._events[event].unshift(fn)\n  else emitter._events[event] = [fn, emitter._events[event]]\n}\nmodule.exports = {\n  Stream,\n  prependListener\n}\n","'use strict'\n\nconst { SymbolDispose } = require('../../ours/primordials')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { isNodeStream, isWebStream, kControllerErrorFunction } = require('./utils')\nconst eos = require('./end-of-stream')\nconst { ERR_INVALID_ARG_TYPE } = codes\nlet addAbortListener\n\n// This method is inlined here for readable-stream\n// It also does not allow for signal to not exist on the stream\n// https://github.com/nodejs/node/pull/36061#discussion_r533718029\nconst validateAbortSignal = (signal, name) => {\n  if (typeof signal !== 'object' || !('aborted' in signal)) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n}\nmodule.exports.addAbortSignal = function addAbortSignal(signal, stream) {\n  validateAbortSignal(signal, 'signal')\n  if (!isNodeStream(stream) && !isWebStream(stream)) {\n    throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n  }\n  return module.exports.addAbortSignalNoValidate(signal, stream)\n}\nmodule.exports.addAbortSignalNoValidate = function (signal, stream) {\n  if (typeof signal !== 'object' || !('aborted' in signal)) {\n    return stream\n  }\n  const onAbort = isNodeStream(stream)\n    ? () => {\n        stream.destroy(\n          new AbortError(undefined, {\n            cause: signal.reason\n          })\n        )\n      }\n    : () => {\n        stream[kControllerErrorFunction](\n          new AbortError(undefined, {\n            cause: signal.reason\n          })\n        )\n      }\n  if (signal.aborted) {\n    onAbort()\n  } else {\n    addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n    const disposable = addAbortListener(signal, onAbort)\n    eos(stream, disposable[SymbolDispose])\n  }\n  return stream\n}\n","'use strict'\n\nconst { StringPrototypeSlice, SymbolIterator, TypedArrayPrototypeSet, Uint8Array } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { inspect } = require('../../ours/util')\nmodule.exports = class BufferList {\n  constructor() {\n    this.head = null\n    this.tail = null\n    this.length = 0\n  }\n  push(v) {\n    const entry = {\n      data: v,\n      next: null\n    }\n    if (this.length > 0) this.tail.next = entry\n    else this.head = entry\n    this.tail = entry\n    ++this.length\n  }\n  unshift(v) {\n    const entry = {\n      data: v,\n      next: this.head\n    }\n    if (this.length === 0) this.tail = entry\n    this.head = entry\n    ++this.length\n  }\n  shift() {\n    if (this.length === 0) return\n    const ret = this.head.data\n    if (this.length === 1) this.head = this.tail = null\n    else this.head = this.head.next\n    --this.length\n    return ret\n  }\n  clear() {\n    this.head = this.tail = null\n    this.length = 0\n  }\n  join(s) {\n    if (this.length === 0) return ''\n    let p = this.head\n    let ret = '' + p.data\n    while ((p = p.next) !== null) ret += s + p.data\n    return ret\n  }\n  concat(n) {\n    if (this.length === 0) return Buffer.alloc(0)\n    const ret = Buffer.allocUnsafe(n >>> 0)\n    let p = this.head\n    let i = 0\n    while (p) {\n      TypedArrayPrototypeSet(ret, p.data, i)\n      i += p.data.length\n      p = p.next\n    }\n    return ret\n  }\n\n  // Consumes a specified amount of bytes or characters from the buffered data.\n  consume(n, hasStrings) {\n    const data = this.head.data\n    if (n < data.length) {\n      // `slice` is the same for buffers and strings.\n      const slice = data.slice(0, n)\n      this.head.data = data.slice(n)\n      return slice\n    }\n    if (n === data.length) {\n      // First chunk is a perfect match.\n      return this.shift()\n    }\n    // Result spans more than one buffer.\n    return hasStrings ? this._getString(n) : this._getBuffer(n)\n  }\n  first() {\n    return this.head.data\n  }\n  *[SymbolIterator]() {\n    for (let p = this.head; p; p = p.next) {\n      yield p.data\n    }\n  }\n\n  // Consumes a specified amount of characters from the buffered data.\n  _getString(n) {\n    let ret = ''\n    let p = this.head\n    let c = 0\n    do {\n      const str = p.data\n      if (n > str.length) {\n        ret += str\n        n -= str.length\n      } else {\n        if (n === str.length) {\n          ret += str\n          ++c\n          if (p.next) this.head = p.next\n          else this.head = this.tail = null\n        } else {\n          ret += StringPrototypeSlice(str, 0, n)\n          this.head = p\n          p.data = StringPrototypeSlice(str, n)\n        }\n        break\n      }\n      ++c\n    } while ((p = p.next) !== null)\n    this.length -= c\n    return ret\n  }\n\n  // Consumes a specified amount of bytes from the buffered data.\n  _getBuffer(n) {\n    const ret = Buffer.allocUnsafe(n)\n    const retLen = n\n    let p = this.head\n    let c = 0\n    do {\n      const buf = p.data\n      if (n > buf.length) {\n        TypedArrayPrototypeSet(ret, buf, retLen - n)\n        n -= buf.length\n      } else {\n        if (n === buf.length) {\n          TypedArrayPrototypeSet(ret, buf, retLen - n)\n          ++c\n          if (p.next) this.head = p.next\n          else this.head = this.tail = null\n        } else {\n          TypedArrayPrototypeSet(ret, new Uint8Array(buf.buffer, buf.byteOffset, n), retLen - n)\n          this.head = p\n          p.data = buf.slice(n)\n        }\n        break\n      }\n      ++c\n    } while ((p = p.next) !== null)\n    this.length -= c\n    return ret\n  }\n\n  // Make sure the linked list only shows the minimal necessary information.\n  [Symbol.for('nodejs.util.inspect.custom')](_, options) {\n    return inspect(this, {\n      ...options,\n      // Only inspect one level.\n      depth: 0,\n      // It should not recurse.\n      customInspect: false\n    })\n  }\n}\n","'use strict'\n\nconst { MathFloor, NumberIsInteger } = require('../../ours/primordials')\nconst { validateInteger } = require('../validators')\nconst { ERR_INVALID_ARG_VALUE } = require('../../ours/errors').codes\nlet defaultHighWaterMarkBytes = 16 * 1024\nlet defaultHighWaterMarkObjectMode = 16\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null\n}\nfunction getDefaultHighWaterMark(objectMode) {\n  return objectMode ? defaultHighWaterMarkObjectMode : defaultHighWaterMarkBytes\n}\nfunction setDefaultHighWaterMark(objectMode, value) {\n  validateInteger(value, 'value', 0)\n  if (objectMode) {\n    defaultHighWaterMarkObjectMode = value\n  } else {\n    defaultHighWaterMarkBytes = value\n  }\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  const hwm = highWaterMarkFrom(options, isDuplex, duplexKey)\n  if (hwm != null) {\n    if (!NumberIsInteger(hwm) || hwm < 0) {\n      const name = isDuplex ? `options.${duplexKey}` : 'options.highWaterMark'\n      throw new ERR_INVALID_ARG_VALUE(name, hwm)\n    }\n    return MathFloor(hwm)\n  }\n\n  // Default value\n  return getDefaultHighWaterMark(state.objectMode)\n}\nmodule.exports = {\n  getHighWaterMark,\n  getDefaultHighWaterMark,\n  setDefaultHighWaterMark\n}\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}","'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { PromisePrototypeThen, SymbolAsyncIterator, SymbolIterator } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_NULL_VALUES } = require('../../ours/errors').codes\nfunction from(Readable, iterable, opts) {\n  let iterator\n  if (typeof iterable === 'string' || iterable instanceof Buffer) {\n    return new Readable({\n      objectMode: true,\n      ...opts,\n      read() {\n        this.push(iterable)\n        this.push(null)\n      }\n    })\n  }\n  let isAsync\n  if (iterable && iterable[SymbolAsyncIterator]) {\n    isAsync = true\n    iterator = iterable[SymbolAsyncIterator]()\n  } else if (iterable && iterable[SymbolIterator]) {\n    isAsync = false\n    iterator = iterable[SymbolIterator]()\n  } else {\n    throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable)\n  }\n  const readable = new Readable({\n    objectMode: true,\n    highWaterMark: 1,\n    // TODO(ronag): What options should be allowed?\n    ...opts\n  })\n\n  // Flag to protect against _read\n  // being called before last iteration completion.\n  let reading = false\n  readable._read = function () {\n    if (!reading) {\n      reading = true\n      next()\n    }\n  }\n  readable._destroy = function (error, cb) {\n    PromisePrototypeThen(\n      close(error),\n      () => process.nextTick(cb, error),\n      // nextTick is here in case cb throws\n      (e) => process.nextTick(cb, e || error)\n    )\n  }\n  async function close(error) {\n    const hadError = error !== undefined && error !== null\n    const hasThrow = typeof iterator.throw === 'function'\n    if (hadError && hasThrow) {\n      const { value, done } = await iterator.throw(error)\n      await value\n      if (done) {\n        return\n      }\n    }\n    if (typeof iterator.return === 'function') {\n      const { value } = await iterator.return()\n      await value\n    }\n  }\n  async function next() {\n    for (;;) {\n      try {\n        const { value, done } = isAsync ? await iterator.next() : iterator.next()\n        if (done) {\n          readable.push(null)\n        } else {\n          const res = value && typeof value.then === 'function' ? await value : value\n          if (res === null) {\n            reading = false\n            throw new ERR_STREAM_NULL_VALUES()\n          } else if (readable.push(res)) {\n            continue\n          } else {\n            reading = false\n          }\n        }\n      } catch (err) {\n        readable.destroy(err)\n      }\n      break\n    }\n  }\n  return readable\n}\nmodule.exports = from\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n;('use strict')\nconst {\n  ArrayPrototypeIndexOf,\n  NumberIsInteger,\n  NumberIsNaN,\n  NumberParseInt,\n  ObjectDefineProperties,\n  ObjectKeys,\n  ObjectSetPrototypeOf,\n  Promise,\n  SafeSet,\n  SymbolAsyncDispose,\n  SymbolAsyncIterator,\n  Symbol\n} = require('../../ours/primordials')\nmodule.exports = Readable\nReadable.ReadableState = ReadableState\nconst { EventEmitter: EE } = require('events')\nconst { Stream, prependListener } = require('./legacy')\nconst { Buffer } = require('buffer')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst eos = require('./end-of-stream')\nlet debug = require('../../ours/util').debuglog('stream', (fn) => {\n  debug = fn\n})\nconst BufferList = require('./buffer_list')\nconst destroyImpl = require('./destroy')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n  aggregateTwoErrors,\n  codes: {\n    ERR_INVALID_ARG_TYPE,\n    ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_OUT_OF_RANGE,\n    ERR_STREAM_PUSH_AFTER_EOF,\n    ERR_STREAM_UNSHIFT_AFTER_END_EVENT\n  },\n  AbortError\n} = require('../../ours/errors')\nconst { validateObject } = require('../validators')\nconst kPaused = Symbol('kPaused')\nconst { StringDecoder } = require('string_decoder')\nconst from = require('./from')\nObjectSetPrototypeOf(Readable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Readable, Stream)\nconst nop = () => {}\nconst { errorOrDestroy } = destroyImpl\nconst kObjectMode = 1 << 0\nconst kEnded = 1 << 1\nconst kEndEmitted = 1 << 2\nconst kReading = 1 << 3\nconst kConstructed = 1 << 4\nconst kSync = 1 << 5\nconst kNeedReadable = 1 << 6\nconst kEmittedReadable = 1 << 7\nconst kReadableListening = 1 << 8\nconst kResumeScheduled = 1 << 9\nconst kErrorEmitted = 1 << 10\nconst kEmitClose = 1 << 11\nconst kAutoDestroy = 1 << 12\nconst kDestroyed = 1 << 13\nconst kClosed = 1 << 14\nconst kCloseEmitted = 1 << 15\nconst kMultiAwaitDrain = 1 << 16\nconst kReadingMore = 1 << 17\nconst kDataEmitted = 1 << 18\n\n// TODO(benjamingr) it is likely slower to do it this way than with free functions\nfunction makeBitMapDescriptor(bit) {\n  return {\n    enumerable: false,\n    get() {\n      return (this.state & bit) !== 0\n    },\n    set(value) {\n      if (value) this.state |= bit\n      else this.state &= ~bit\n    }\n  }\n}\nObjectDefineProperties(ReadableState.prototype, {\n  objectMode: makeBitMapDescriptor(kObjectMode),\n  ended: makeBitMapDescriptor(kEnded),\n  endEmitted: makeBitMapDescriptor(kEndEmitted),\n  reading: makeBitMapDescriptor(kReading),\n  // Stream is still being constructed and cannot be\n  // destroyed until construction finished or failed.\n  // Async construction is opt in, therefore we start as\n  // constructed.\n  constructed: makeBitMapDescriptor(kConstructed),\n  // A flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  sync: makeBitMapDescriptor(kSync),\n  // Whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  needReadable: makeBitMapDescriptor(kNeedReadable),\n  emittedReadable: makeBitMapDescriptor(kEmittedReadable),\n  readableListening: makeBitMapDescriptor(kReadableListening),\n  resumeScheduled: makeBitMapDescriptor(kResumeScheduled),\n  // True if the error was already emitted and should not be thrown again.\n  errorEmitted: makeBitMapDescriptor(kErrorEmitted),\n  emitClose: makeBitMapDescriptor(kEmitClose),\n  autoDestroy: makeBitMapDescriptor(kAutoDestroy),\n  // Has it been destroyed.\n  destroyed: makeBitMapDescriptor(kDestroyed),\n  // Indicates whether the stream has finished destroying.\n  closed: makeBitMapDescriptor(kClosed),\n  // True if close has been emitted or would have been emitted\n  // depending on emitClose.\n  closeEmitted: makeBitMapDescriptor(kCloseEmitted),\n  multiAwaitDrain: makeBitMapDescriptor(kMultiAwaitDrain),\n  // If true, a maybeReadMore has been scheduled.\n  readingMore: makeBitMapDescriptor(kReadingMore),\n  dataEmitted: makeBitMapDescriptor(kDataEmitted)\n})\nfunction ReadableState(options, stream, isDuplex) {\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n  // Bit map field to store ReadableState more effciently with 1 bit per field\n  // instead of a V8 slot per field.\n  this.state = kEmitClose | kAutoDestroy | kConstructed | kSync\n  // Object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away.\n  if (options && options.objectMode) this.state |= kObjectMode\n  if (isDuplex && options && options.readableObjectMode) this.state |= kObjectMode\n\n  // The point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = options\n    ? getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex)\n    : getDefaultHighWaterMark(false)\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift().\n  this.buffer = new BufferList()\n  this.length = 0\n  this.pipes = []\n  this.flowing = null\n  this[kPaused] = null\n\n  // Should close be emitted on destroy. Defaults to true.\n  if (options && options.emitClose === false) this.state &= ~kEmitClose\n\n  // Should .destroy() be called after 'end' (and potentially 'finish').\n  if (options && options.autoDestroy === false) this.state &= ~kAutoDestroy\n\n  // Indicates whether the stream has errored. When true no further\n  // _read calls, 'data' or 'readable' events should occur. This is needed\n  // since when autoDestroy is disabled we need a way to tell whether the\n  // stream has failed.\n  this.errored = null\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n  // Ref the piped dest which we need a drain event on it\n  // type: null | Writable | Set<Writable>.\n  this.awaitDrainWriters = null\n  this.decoder = null\n  this.encoding = null\n  if (options && options.encoding) {\n    this.decoder = new StringDecoder(options.encoding)\n    this.encoding = options.encoding\n  }\n}\nfunction Readable(options) {\n  if (!(this instanceof Readable)) return new Readable(options)\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5.\n  const isDuplex = this instanceof require('./duplex')\n  this._readableState = new ReadableState(options, this, isDuplex)\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read\n    if (typeof options.destroy === 'function') this._destroy = options.destroy\n    if (typeof options.construct === 'function') this._construct = options.construct\n    if (options.signal && !isDuplex) addAbortSignal(options.signal, this)\n  }\n  Stream.call(this, options)\n  destroyImpl.construct(this, () => {\n    if (this._readableState.needReadable) {\n      maybeReadMore(this, this._readableState)\n    }\n  })\n}\nReadable.prototype.destroy = destroyImpl.destroy\nReadable.prototype._undestroy = destroyImpl.undestroy\nReadable.prototype._destroy = function (err, cb) {\n  cb(err)\n}\nReadable.prototype[EE.captureRejectionSymbol] = function (err) {\n  this.destroy(err)\n}\nReadable.prototype[SymbolAsyncDispose] = function () {\n  let error\n  if (!this.destroyed) {\n    error = this.readableEnded ? null : new AbortError()\n    this.destroy(error)\n  }\n  return new Promise((resolve, reject) => eos(this, (err) => (err && err !== error ? reject(err) : resolve(null))))\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  return readableAddChunk(this, chunk, encoding, false)\n}\n\n// Unshift should *always* be something directly out of read().\nReadable.prototype.unshift = function (chunk, encoding) {\n  return readableAddChunk(this, chunk, encoding, true)\n}\nfunction readableAddChunk(stream, chunk, encoding, addToFront) {\n  debug('readableAddChunk', chunk)\n  const state = stream._readableState\n  let err\n  if ((state.state & kObjectMode) === 0) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding\n      if (state.encoding !== encoding) {\n        if (addToFront && state.encoding) {\n          // When unshifting, if state.encoding is set, we have to save\n          // the string in the BufferList with the state encoding.\n          chunk = Buffer.from(chunk, encoding).toString(state.encoding)\n        } else {\n          chunk = Buffer.from(chunk, encoding)\n          encoding = ''\n        }\n      }\n    } else if (chunk instanceof Buffer) {\n      encoding = ''\n    } else if (Stream._isUint8Array(chunk)) {\n      chunk = Stream._uint8ArrayToBuffer(chunk)\n      encoding = ''\n    } else if (chunk != null) {\n      err = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n    }\n  }\n  if (err) {\n    errorOrDestroy(stream, err)\n  } else if (chunk === null) {\n    state.state &= ~kReading\n    onEofChunk(stream, state)\n  } else if ((state.state & kObjectMode) !== 0 || (chunk && chunk.length > 0)) {\n    if (addToFront) {\n      if ((state.state & kEndEmitted) !== 0) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT())\n      else if (state.destroyed || state.errored) return false\n      else addChunk(stream, state, chunk, true)\n    } else if (state.ended) {\n      errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF())\n    } else if (state.destroyed || state.errored) {\n      return false\n    } else {\n      state.state &= ~kReading\n      if (state.decoder && !encoding) {\n        chunk = state.decoder.write(chunk)\n        if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false)\n        else maybeReadMore(stream, state)\n      } else {\n        addChunk(stream, state, chunk, false)\n      }\n    }\n  } else if (!addToFront) {\n    state.state &= ~kReading\n    maybeReadMore(stream, state)\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0)\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync && stream.listenerCount('data') > 0) {\n    // Use the guard to avoid creating `Set()` repeatedly\n    // when we have multiple pipes.\n    if ((state.state & kMultiAwaitDrain) !== 0) {\n      state.awaitDrainWriters.clear()\n    } else {\n      state.awaitDrainWriters = null\n    }\n    state.dataEmitted = true\n    stream.emit('data', chunk)\n  } else {\n    // Update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length\n    if (addToFront) state.buffer.unshift(chunk)\n    else state.buffer.push(chunk)\n    if ((state.state & kNeedReadable) !== 0) emitReadable(stream)\n  }\n  maybeReadMore(stream, state)\n}\nReadable.prototype.isPaused = function () {\n  const state = this._readableState\n  return state[kPaused] === true || state.flowing === false\n}\n\n// Backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  const decoder = new StringDecoder(enc)\n  this._readableState.decoder = decoder\n  // If setEncoding(null), decoder.encoding equals utf8.\n  this._readableState.encoding = this._readableState.decoder.encoding\n  const buffer = this._readableState.buffer\n  // Iterate over current buffer to convert already stored Buffers:\n  let content = ''\n  for (const data of buffer) {\n    content += decoder.write(data)\n  }\n  buffer.clear()\n  if (content !== '') buffer.push(content)\n  this._readableState.length = content.length\n  return this\n}\n\n// Don't raise the hwm > 1GB.\nconst MAX_HWM = 0x40000000\nfunction computeNewHighWaterMark(n) {\n  if (n > MAX_HWM) {\n    throw new ERR_OUT_OF_RANGE('size', '<= 1GiB', n)\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts.\n    n--\n    n |= n >>> 1\n    n |= n >>> 2\n    n |= n >>> 4\n    n |= n >>> 8\n    n |= n >>> 16\n    n++\n  }\n  return n\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || (state.length === 0 && state.ended)) return 0\n  if ((state.state & kObjectMode) !== 0) return 1\n  if (NumberIsNaN(n)) {\n    // Only flow one buffer at a time.\n    if (state.flowing && state.length) return state.buffer.first().length\n    return state.length\n  }\n  if (n <= state.length) return n\n  return state.ended ? state.length : 0\n}\n\n// You can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n)\n  // Same as parseInt(undefined, 10), however V8 7.3 performance regressed\n  // in this scenario, so we are doing it manually.\n  if (n === undefined) {\n    n = NaN\n  } else if (!NumberIsInteger(n)) {\n    n = NumberParseInt(n, 10)\n  }\n  const state = this._readableState\n  const nOrig = n\n\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n)\n  if (n !== 0) state.state &= ~kEmittedReadable\n\n  // If we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (\n    n === 0 &&\n    state.needReadable &&\n    ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)\n  ) {\n    debug('read: emitReadable', state.length, state.ended)\n    if (state.length === 0 && state.ended) endReadable(this)\n    else emitReadable(this)\n    return null\n  }\n  n = howMuchToRead(n, state)\n\n  // If we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this)\n    return null\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  let doRead = (state.state & kNeedReadable) !== 0\n  debug('need readable', doRead)\n\n  // If we currently have less than the highWaterMark, then also read some.\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true\n    debug('length less than watermark', doRead)\n  }\n\n  // However, if we've ended, then there's no point, if we're already\n  // reading, then it's unnecessary, if we're constructing we have to wait,\n  // and if we're destroyed or errored, then it's not allowed,\n  if (state.ended || state.reading || state.destroyed || state.errored || !state.constructed) {\n    doRead = false\n    debug('reading, ended or constructing', doRead)\n  } else if (doRead) {\n    debug('do read')\n    state.state |= kReading | kSync\n    // If the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.state |= kNeedReadable\n\n    // Call internal read method\n    try {\n      this._read(state.highWaterMark)\n    } catch (err) {\n      errorOrDestroy(this, err)\n    }\n    state.state &= ~kSync\n\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state)\n  }\n  let ret\n  if (n > 0) ret = fromList(n, state)\n  else ret = null\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark\n    n = 0\n  } else {\n    state.length -= n\n    if (state.multiAwaitDrain) {\n      state.awaitDrainWriters.clear()\n    } else {\n      state.awaitDrainWriters = null\n    }\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this)\n  }\n  if (ret !== null && !state.errorEmitted && !state.closeEmitted) {\n    state.dataEmitted = true\n    this.emit('data', ret)\n  }\n  return ret\n}\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk')\n  if (state.ended) return\n  if (state.decoder) {\n    const chunk = state.decoder.end()\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk)\n      state.length += state.objectMode ? 1 : chunk.length\n    }\n  }\n  state.ended = true\n  if (state.sync) {\n    // If we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call.\n    emitReadable(stream)\n  } else {\n    // Emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false\n    state.emittedReadable = true\n    // We have to emit readable now that we are EOF. Modules\n    // in the ecosystem (e.g. dicer) rely on this event being sync.\n    emitReadable_(stream)\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  const state = stream._readableState\n  debug('emitReadable', state.needReadable, state.emittedReadable)\n  state.needReadable = false\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing)\n    state.emittedReadable = true\n    process.nextTick(emitReadable_, stream)\n  }\n}\nfunction emitReadable_(stream) {\n  const state = stream._readableState\n  debug('emitReadable_', state.destroyed, state.length, state.ended)\n  if (!state.destroyed && !state.errored && (state.length || state.ended)) {\n    stream.emit('readable')\n    state.emittedReadable = false\n  }\n\n  // The stream needs another readable event if:\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark\n  flow(stream)\n}\n\n// At this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore && state.constructed) {\n    state.readingMore = true\n    process.nextTick(maybeReadMore_, stream, state)\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (\n    !state.reading &&\n    !state.ended &&\n    (state.length < state.highWaterMark || (state.flowing && state.length === 0))\n  ) {\n    const len = state.length\n    debug('maybeReadMore read 0')\n    stream.read(0)\n    if (len === state.length)\n      // Didn't get any data, stop spinning.\n      break\n  }\n  state.readingMore = false\n}\n\n// Abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  throw new ERR_METHOD_NOT_IMPLEMENTED('_read()')\n}\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  const src = this\n  const state = this._readableState\n  if (state.pipes.length === 1) {\n    if (!state.multiAwaitDrain) {\n      state.multiAwaitDrain = true\n      state.awaitDrainWriters = new SafeSet(state.awaitDrainWriters ? [state.awaitDrainWriters] : [])\n    }\n  }\n  state.pipes.push(dest)\n  debug('pipe count=%d opts=%j', state.pipes.length, pipeOpts)\n  const doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr\n  const endFn = doEnd ? onend : unpipe\n  if (state.endEmitted) process.nextTick(endFn)\n  else src.once('end', endFn)\n  dest.on('unpipe', onunpipe)\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe')\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true\n        cleanup()\n      }\n    }\n  }\n  function onend() {\n    debug('onend')\n    dest.end()\n  }\n  let ondrain\n  let cleanedUp = false\n  function cleanup() {\n    debug('cleanup')\n    // Cleanup event handlers once the pipe is broken.\n    dest.removeListener('close', onclose)\n    dest.removeListener('finish', onfinish)\n    if (ondrain) {\n      dest.removeListener('drain', ondrain)\n    }\n    dest.removeListener('error', onerror)\n    dest.removeListener('unpipe', onunpipe)\n    src.removeListener('end', onend)\n    src.removeListener('end', unpipe)\n    src.removeListener('data', ondata)\n    cleanedUp = true\n\n    // If the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (ondrain && state.awaitDrainWriters && (!dest._writableState || dest._writableState.needDrain)) ondrain()\n  }\n  function pause() {\n    // If the user unpiped during `dest.write()`, it is possible\n    // to get stuck in a permanently paused state if that write\n    // also returned false.\n    // => Check whether `dest` is still a piping destination.\n    if (!cleanedUp) {\n      if (state.pipes.length === 1 && state.pipes[0] === dest) {\n        debug('false write response, pause', 0)\n        state.awaitDrainWriters = dest\n        state.multiAwaitDrain = false\n      } else if (state.pipes.length > 1 && state.pipes.includes(dest)) {\n        debug('false write response, pause', state.awaitDrainWriters.size)\n        state.awaitDrainWriters.add(dest)\n      }\n      src.pause()\n    }\n    if (!ondrain) {\n      // When the dest drains, it reduces the awaitDrain counter\n      // on the source.  This would be more elegant with a .once()\n      // handler in flow(), but adding and removing repeatedly is\n      // too slow.\n      ondrain = pipeOnDrain(src, dest)\n      dest.on('drain', ondrain)\n    }\n  }\n  src.on('data', ondata)\n  function ondata(chunk) {\n    debug('ondata')\n    const ret = dest.write(chunk)\n    debug('dest.write', ret)\n    if (ret === false) {\n      pause()\n    }\n  }\n\n  // If the dest has an error, then stop piping into it.\n  // However, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er)\n    unpipe()\n    dest.removeListener('error', onerror)\n    if (dest.listenerCount('error') === 0) {\n      const s = dest._writableState || dest._readableState\n      if (s && !s.errorEmitted) {\n        // User incorrectly emitted 'error' directly on the stream.\n        errorOrDestroy(dest, er)\n      } else {\n        dest.emit('error', er)\n      }\n    }\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror)\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish)\n    unpipe()\n  }\n  dest.once('close', onclose)\n  function onfinish() {\n    debug('onfinish')\n    dest.removeListener('close', onclose)\n    unpipe()\n  }\n  dest.once('finish', onfinish)\n  function unpipe() {\n    debug('unpipe')\n    src.unpipe(dest)\n  }\n\n  // Tell the dest that it's being piped to.\n  dest.emit('pipe', src)\n\n  // Start the flow if it hasn't been started already.\n\n  if (dest.writableNeedDrain === true) {\n    pause()\n  } else if (!state.flowing) {\n    debug('pipe resume')\n    src.resume()\n  }\n  return dest\n}\nfunction pipeOnDrain(src, dest) {\n  return function pipeOnDrainFunctionResult() {\n    const state = src._readableState\n\n    // `ondrain` will call directly,\n    // `this` maybe not a reference to dest,\n    // so we use the real dest here.\n    if (state.awaitDrainWriters === dest) {\n      debug('pipeOnDrain', 1)\n      state.awaitDrainWriters = null\n    } else if (state.multiAwaitDrain) {\n      debug('pipeOnDrain', state.awaitDrainWriters.size)\n      state.awaitDrainWriters.delete(dest)\n    }\n    if ((!state.awaitDrainWriters || state.awaitDrainWriters.size === 0) && src.listenerCount('data')) {\n      src.resume()\n    }\n  }\n}\nReadable.prototype.unpipe = function (dest) {\n  const state = this._readableState\n  const unpipeInfo = {\n    hasUnpiped: false\n  }\n\n  // If we're not piping anywhere, then do nothing.\n  if (state.pipes.length === 0) return this\n  if (!dest) {\n    // remove all.\n    const dests = state.pipes\n    state.pipes = []\n    this.pause()\n    for (let i = 0; i < dests.length; i++)\n      dests[i].emit('unpipe', this, {\n        hasUnpiped: false\n      })\n    return this\n  }\n\n  // Try to find the right one.\n  const index = ArrayPrototypeIndexOf(state.pipes, dest)\n  if (index === -1) return this\n  state.pipes.splice(index, 1)\n  if (state.pipes.length === 0) this.pause()\n  dest.emit('unpipe', this, unpipeInfo)\n  return this\n}\n\n// Set up data events if they are asked for\n// Ensure readable listeners eventually get something.\nReadable.prototype.on = function (ev, fn) {\n  const res = Stream.prototype.on.call(this, ev, fn)\n  const state = this._readableState\n  if (ev === 'data') {\n    // Update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0\n\n    // Try start flowing on next tick if stream isn't explicitly paused.\n    if (state.flowing !== false) this.resume()\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true\n      state.flowing = false\n      state.emittedReadable = false\n      debug('on readable', state.length, state.reading)\n      if (state.length) {\n        emitReadable(this)\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this)\n      }\n    }\n  }\n  return res\n}\nReadable.prototype.addListener = Readable.prototype.on\nReadable.prototype.removeListener = function (ev, fn) {\n  const res = Stream.prototype.removeListener.call(this, ev, fn)\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this)\n  }\n  return res\n}\nReadable.prototype.off = Readable.prototype.removeListener\nReadable.prototype.removeAllListeners = function (ev) {\n  const res = Stream.prototype.removeAllListeners.apply(this, arguments)\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this)\n  }\n  return res\n}\nfunction updateReadableListening(self) {\n  const state = self._readableState\n  state.readableListening = self.listenerCount('readable') > 0\n  if (state.resumeScheduled && state[kPaused] === false) {\n    // Flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true\n\n    // Crude way to check if we should resume.\n  } else if (self.listenerCount('data') > 0) {\n    self.resume()\n  } else if (!state.readableListening) {\n    state.flowing = null\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0')\n  self.read(0)\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  const state = this._readableState\n  if (!state.flowing) {\n    debug('resume')\n    // We flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume().\n    state.flowing = !state.readableListening\n    resume(this, state)\n  }\n  state[kPaused] = false\n  return this\n}\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true\n    process.nextTick(resume_, stream, state)\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading)\n  if (!state.reading) {\n    stream.read(0)\n  }\n  state.resumeScheduled = false\n  stream.emit('resume')\n  flow(stream)\n  if (state.flowing && !state.reading) stream.read(0)\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing)\n  if (this._readableState.flowing !== false) {\n    debug('pause')\n    this._readableState.flowing = false\n    this.emit('pause')\n  }\n  this._readableState[kPaused] = true\n  return this\n}\nfunction flow(stream) {\n  const state = stream._readableState\n  debug('flow', state.flowing)\n  while (state.flowing && stream.read() !== null);\n}\n\n// Wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  let paused = false\n\n  // TODO (ronag): Should this.destroy(err) emit\n  // 'error' on the wrapped stream? Would require\n  // a static factory method, e.g. Readable.wrap(stream).\n\n  stream.on('data', (chunk) => {\n    if (!this.push(chunk) && stream.pause) {\n      paused = true\n      stream.pause()\n    }\n  })\n  stream.on('end', () => {\n    this.push(null)\n  })\n  stream.on('error', (err) => {\n    errorOrDestroy(this, err)\n  })\n  stream.on('close', () => {\n    this.destroy()\n  })\n  stream.on('destroy', () => {\n    this.destroy()\n  })\n  this._read = () => {\n    if (paused && stream.resume) {\n      paused = false\n      stream.resume()\n    }\n  }\n\n  // Proxy all the other methods. Important when wrapping filters and duplexes.\n  const streamKeys = ObjectKeys(stream)\n  for (let j = 1; j < streamKeys.length; j++) {\n    const i = streamKeys[j]\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = stream[i].bind(stream)\n    }\n  }\n  return this\n}\nReadable.prototype[SymbolAsyncIterator] = function () {\n  return streamToAsyncIterator(this)\n}\nReadable.prototype.iterator = function (options) {\n  if (options !== undefined) {\n    validateObject(options, 'options')\n  }\n  return streamToAsyncIterator(this, options)\n}\nfunction streamToAsyncIterator(stream, options) {\n  if (typeof stream.read !== 'function') {\n    stream = Readable.wrap(stream, {\n      objectMode: true\n    })\n  }\n  const iter = createAsyncIterator(stream, options)\n  iter.stream = stream\n  return iter\n}\nasync function* createAsyncIterator(stream, options) {\n  let callback = nop\n  function next(resolve) {\n    if (this === stream) {\n      callback()\n      callback = nop\n    } else {\n      callback = resolve\n    }\n  }\n  stream.on('readable', next)\n  let error\n  const cleanup = eos(\n    stream,\n    {\n      writable: false\n    },\n    (err) => {\n      error = err ? aggregateTwoErrors(error, err) : null\n      callback()\n      callback = nop\n    }\n  )\n  try {\n    while (true) {\n      const chunk = stream.destroyed ? null : stream.read()\n      if (chunk !== null) {\n        yield chunk\n      } else if (error) {\n        throw error\n      } else if (error === null) {\n        return\n      } else {\n        await new Promise(next)\n      }\n    }\n  } catch (err) {\n    error = aggregateTwoErrors(error, err)\n    throw error\n  } finally {\n    if (\n      (error || (options === null || options === undefined ? undefined : options.destroyOnReturn) !== false) &&\n      (error === undefined || stream._readableState.autoDestroy)\n    ) {\n      destroyImpl.destroyer(stream, null)\n    } else {\n      stream.off('readable', next)\n      cleanup()\n    }\n  }\n}\n\n// Making it explicit these properties are not enumerable\n// because otherwise some prototype manipulation in\n// userland will fail.\nObjectDefineProperties(Readable.prototype, {\n  readable: {\n    __proto__: null,\n    get() {\n      const r = this._readableState\n      // r.readable === false means that this is part of a Duplex stream\n      // where the readable side was disabled upon construction.\n      // Compat. The user might manually disable readable side through\n      // deprecated setter.\n      return !!r && r.readable !== false && !r.destroyed && !r.errorEmitted && !r.endEmitted\n    },\n    set(val) {\n      // Backwards compat.\n      if (this._readableState) {\n        this._readableState.readable = !!val\n      }\n    }\n  },\n  readableDidRead: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.dataEmitted\n    }\n  },\n  readableAborted: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return !!(\n        this._readableState.readable !== false &&\n        (this._readableState.destroyed || this._readableState.errored) &&\n        !this._readableState.endEmitted\n      )\n    }\n  },\n  readableHighWaterMark: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.highWaterMark\n    }\n  },\n  readableBuffer: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState && this._readableState.buffer\n    }\n  },\n  readableFlowing: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.flowing\n    },\n    set: function (state) {\n      if (this._readableState) {\n        this._readableState.flowing = state\n      }\n    }\n  },\n  readableLength: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState.length\n    }\n  },\n  readableObjectMode: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.objectMode : false\n    }\n  },\n  readableEncoding: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.encoding : null\n    }\n  },\n  errored: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.errored : null\n    }\n  },\n  closed: {\n    __proto__: null,\n    get() {\n      return this._readableState ? this._readableState.closed : false\n    }\n  },\n  destroyed: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.destroyed : false\n    },\n    set(value) {\n      // We ignore the value if the stream\n      // has not been initialized yet.\n      if (!this._readableState) {\n        return\n      }\n\n      // Backward compatibility, the user is explicitly\n      // managing destroyed.\n      this._readableState.destroyed = value\n    }\n  },\n  readableEnded: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.endEmitted : false\n    }\n  }\n})\nObjectDefineProperties(ReadableState.prototype, {\n  // Legacy getter for `pipesCount`.\n  pipesCount: {\n    __proto__: null,\n    get() {\n      return this.pipes.length\n    }\n  },\n  // Legacy property for `paused`.\n  paused: {\n    __proto__: null,\n    get() {\n      return this[kPaused] !== false\n    },\n    set(value) {\n      this[kPaused] = !!value\n    }\n  }\n})\n\n// Exposed for testing purposes only.\nReadable._fromList = fromList\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered.\n  if (state.length === 0) return null\n  let ret\n  if (state.objectMode) ret = state.buffer.shift()\n  else if (!n || n >= state.length) {\n    // Read it all, truncate the list.\n    if (state.decoder) ret = state.buffer.join('')\n    else if (state.buffer.length === 1) ret = state.buffer.first()\n    else ret = state.buffer.concat(state.length)\n    state.buffer.clear()\n  } else {\n    // read part of list.\n    ret = state.buffer.consume(n, state.decoder)\n  }\n  return ret\n}\nfunction endReadable(stream) {\n  const state = stream._readableState\n  debug('endReadable', state.endEmitted)\n  if (!state.endEmitted) {\n    state.ended = true\n    process.nextTick(endReadableNT, state, stream)\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length)\n\n  // Check that we didn't get one last unshift.\n  if (!state.errored && !state.closeEmitted && !state.endEmitted && state.length === 0) {\n    state.endEmitted = true\n    stream.emit('end')\n    if (stream.writable && stream.allowHalfOpen === false) {\n      process.nextTick(endWritableNT, stream)\n    } else if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well.\n      const wState = stream._writableState\n      const autoDestroy =\n        !wState ||\n        (wState.autoDestroy &&\n          // We don't expect the writable to ever 'finish'\n          // if writable is explicitly set to false.\n          (wState.finished || wState.writable === false))\n      if (autoDestroy) {\n        stream.destroy()\n      }\n    }\n  }\n}\nfunction endWritableNT(stream) {\n  const writable = stream.writable && !stream.writableEnded && !stream.destroyed\n  if (writable) {\n    stream.end()\n  }\n}\nReadable.from = function (iterable, opts) {\n  return from(Readable, iterable, opts)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nReadable.fromWeb = function (readableStream, options) {\n  return lazyWebStreams().newStreamReadableFromReadableStream(readableStream, options)\n}\nReadable.toWeb = function (streamReadable, options) {\n  return lazyWebStreams().newReadableStreamFromStreamReadable(streamReadable, options)\n}\nReadable.wrap = function (src, options) {\n  var _ref, _src$readableObjectMo\n  return new Readable({\n    objectMode:\n      (_ref =\n        (_src$readableObjectMo = src.readableObjectMode) !== null && _src$readableObjectMo !== undefined\n          ? _src$readableObjectMo\n          : src.objectMode) !== null && _ref !== undefined\n        ? _ref\n        : true,\n    ...options,\n    destroy(err, callback) {\n      destroyImpl.destroyer(src, err)\n      callback(err)\n    }\n  }).wrap(src)\n}\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n;('use strict')\nconst {\n  ArrayPrototypeSlice,\n  Error,\n  FunctionPrototypeSymbolHasInstance,\n  ObjectDefineProperty,\n  ObjectDefineProperties,\n  ObjectSetPrototypeOf,\n  StringPrototypeToLowerCase,\n  Symbol,\n  SymbolHasInstance\n} = require('../../ours/primordials')\nmodule.exports = Writable\nWritable.WritableState = WritableState\nconst { EventEmitter: EE } = require('events')\nconst Stream = require('./legacy').Stream\nconst { Buffer } = require('buffer')\nconst destroyImpl = require('./destroy')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n  ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED,\n  ERR_STREAM_ALREADY_FINISHED,\n  ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING\n} = require('../../ours/errors').codes\nconst { errorOrDestroy } = destroyImpl\nObjectSetPrototypeOf(Writable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Writable, Stream)\nfunction nop() {}\nconst kOnFinished = Symbol('kOnFinished')\nfunction WritableState(options, stream, isDuplex) {\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n  // Object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!(options && options.objectMode)\n  if (isDuplex) this.objectMode = this.objectMode || !!(options && options.writableObjectMode)\n\n  // The point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write().\n  this.highWaterMark = options\n    ? getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex)\n    : getDefaultHighWaterMark(false)\n\n  // if _final has been called.\n  this.finalCalled = false\n\n  // drain event flag.\n  this.needDrain = false\n  // At the start of calling end()\n  this.ending = false\n  // When end() has been called, and returned.\n  this.ended = false\n  // When 'finish' is emitted.\n  this.finished = false\n\n  // Has it been destroyed\n  this.destroyed = false\n\n  // Should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  const noDecode = !!(options && options.decodeStrings === false)\n  this.decodeStrings = !noDecode\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n  // Not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0\n\n  // A flag to see when we're in the middle of a write.\n  this.writing = false\n\n  // When true all writes will be buffered until .uncork() call.\n  this.corked = 0\n\n  // A flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true\n\n  // A flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false\n\n  // The callback that's passed to _write(chunk, cb).\n  this.onwrite = onwrite.bind(undefined, stream)\n\n  // The callback that the user supplies to write(chunk, encoding, cb).\n  this.writecb = null\n\n  // The amount that is being written when _write is called.\n  this.writelen = 0\n\n  // Storage for data passed to the afterWrite() callback in case of\n  // synchronous _write() completion.\n  this.afterWriteTickInfo = null\n  resetBuffer(this)\n\n  // Number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted.\n  this.pendingcb = 0\n\n  // Stream is still being constructed and cannot be\n  // destroyed until construction finished or failed.\n  // Async construction is opt in, therefore we start as\n  // constructed.\n  this.constructed = true\n\n  // Emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams.\n  this.prefinished = false\n\n  // True if the error was already emitted and should not be thrown again.\n  this.errorEmitted = false\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = !options || options.emitClose !== false\n\n  // Should .destroy() be called after 'finish' (and potentially 'end').\n  this.autoDestroy = !options || options.autoDestroy !== false\n\n  // Indicates whether the stream has errored. When true all write() calls\n  // should return false. This is needed since when autoDestroy\n  // is disabled we need a way to tell whether the stream has failed.\n  this.errored = null\n\n  // Indicates whether the stream has finished destroying.\n  this.closed = false\n\n  // True if close has been emitted or would have been emitted\n  // depending on emitClose.\n  this.closeEmitted = false\n  this[kOnFinished] = []\n}\nfunction resetBuffer(state) {\n  state.buffered = []\n  state.bufferedIndex = 0\n  state.allBuffers = true\n  state.allNoop = true\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  return ArrayPrototypeSlice(this.buffered, this.bufferedIndex)\n}\nObjectDefineProperty(WritableState.prototype, 'bufferedRequestCount', {\n  __proto__: null,\n  get() {\n    return this.buffered.length - this.bufferedIndex\n  }\n})\nfunction Writable(options) {\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5.\n  const isDuplex = this instanceof require('./duplex')\n  if (!isDuplex && !FunctionPrototypeSymbolHasInstance(Writable, this)) return new Writable(options)\n  this._writableState = new WritableState(options, this, isDuplex)\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write\n    if (typeof options.writev === 'function') this._writev = options.writev\n    if (typeof options.destroy === 'function') this._destroy = options.destroy\n    if (typeof options.final === 'function') this._final = options.final\n    if (typeof options.construct === 'function') this._construct = options.construct\n    if (options.signal) addAbortSignal(options.signal, this)\n  }\n  Stream.call(this, options)\n  destroyImpl.construct(this, () => {\n    const state = this._writableState\n    if (!state.writing) {\n      clearBuffer(this, state)\n    }\n    finishMaybe(this, state)\n  })\n}\nObjectDefineProperty(Writable, SymbolHasInstance, {\n  __proto__: null,\n  value: function (object) {\n    if (FunctionPrototypeSymbolHasInstance(this, object)) return true\n    if (this !== Writable) return false\n    return object && object._writableState instanceof WritableState\n  }\n})\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE())\n}\nfunction _write(stream, chunk, encoding, cb) {\n  const state = stream._writableState\n  if (typeof encoding === 'function') {\n    cb = encoding\n    encoding = state.defaultEncoding\n  } else {\n    if (!encoding) encoding = state.defaultEncoding\n    else if (encoding !== 'buffer' && !Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n    if (typeof cb !== 'function') cb = nop\n  }\n  if (chunk === null) {\n    throw new ERR_STREAM_NULL_VALUES()\n  } else if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      if (state.decodeStrings !== false) {\n        chunk = Buffer.from(chunk, encoding)\n        encoding = 'buffer'\n      }\n    } else if (chunk instanceof Buffer) {\n      encoding = 'buffer'\n    } else if (Stream._isUint8Array(chunk)) {\n      chunk = Stream._uint8ArrayToBuffer(chunk)\n      encoding = 'buffer'\n    } else {\n      throw new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n    }\n  }\n  let err\n  if (state.ending) {\n    err = new ERR_STREAM_WRITE_AFTER_END()\n  } else if (state.destroyed) {\n    err = new ERR_STREAM_DESTROYED('write')\n  }\n  if (err) {\n    process.nextTick(cb, err)\n    errorOrDestroy(stream, err, true)\n    return err\n  }\n  state.pendingcb++\n  return writeOrBuffer(stream, state, chunk, encoding, cb)\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  return _write(this, chunk, encoding, cb) === true\n}\nWritable.prototype.cork = function () {\n  this._writableState.corked++\n}\nWritable.prototype.uncork = function () {\n  const state = this._writableState\n  if (state.corked) {\n    state.corked--\n    if (!state.writing) clearBuffer(this, state)\n  }\n}\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = StringPrototypeToLowerCase(encoding)\n  if (!Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n  this._writableState.defaultEncoding = encoding\n  return this\n}\n\n// If we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, callback) {\n  const len = state.objectMode ? 1 : chunk.length\n  state.length += len\n\n  // stream._write resets state.length\n  const ret = state.length < state.highWaterMark\n  // We must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true\n  if (state.writing || state.corked || state.errored || !state.constructed) {\n    state.buffered.push({\n      chunk,\n      encoding,\n      callback\n    })\n    if (state.allBuffers && encoding !== 'buffer') {\n      state.allBuffers = false\n    }\n    if (state.allNoop && callback !== nop) {\n      state.allNoop = false\n    }\n  } else {\n    state.writelen = len\n    state.writecb = callback\n    state.writing = true\n    state.sync = true\n    stream._write(chunk, encoding, state.onwrite)\n    state.sync = false\n  }\n\n  // Return false if errored or destroyed in order to break\n  // any synchronous while(stream.write(data)) loops.\n  return ret && !state.errored && !state.destroyed\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len\n  state.writecb = cb\n  state.writing = true\n  state.sync = true\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'))\n  else if (writev) stream._writev(chunk, state.onwrite)\n  else stream._write(chunk, encoding, state.onwrite)\n  state.sync = false\n}\nfunction onwriteError(stream, state, er, cb) {\n  --state.pendingcb\n  cb(er)\n  // Ensure callbacks are invoked even when autoDestroy is\n  // not enabled. Passing `er` here doesn't make sense since\n  // it's related to one specific write, not to the buffered\n  // writes.\n  errorBuffer(state)\n  // This can emit error, but error must always follow cb.\n  errorOrDestroy(stream, er)\n}\nfunction onwrite(stream, er) {\n  const state = stream._writableState\n  const sync = state.sync\n  const cb = state.writecb\n  if (typeof cb !== 'function') {\n    errorOrDestroy(stream, new ERR_MULTIPLE_CALLBACK())\n    return\n  }\n  state.writing = false\n  state.writecb = null\n  state.length -= state.writelen\n  state.writelen = 0\n  if (er) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    er.stack // eslint-disable-line no-unused-expressions\n\n    if (!state.errored) {\n      state.errored = er\n    }\n\n    // In case of duplex streams we need to notify the readable side of the\n    // error.\n    if (stream._readableState && !stream._readableState.errored) {\n      stream._readableState.errored = er\n    }\n    if (sync) {\n      process.nextTick(onwriteError, stream, state, er, cb)\n    } else {\n      onwriteError(stream, state, er, cb)\n    }\n  } else {\n    if (state.buffered.length > state.bufferedIndex) {\n      clearBuffer(stream, state)\n    }\n    if (sync) {\n      // It is a common case that the callback passed to .write() is always\n      // the same. In that case, we do not schedule a new nextTick(), but\n      // rather just increase a counter, to improve performance and avoid\n      // memory allocations.\n      if (state.afterWriteTickInfo !== null && state.afterWriteTickInfo.cb === cb) {\n        state.afterWriteTickInfo.count++\n      } else {\n        state.afterWriteTickInfo = {\n          count: 1,\n          cb,\n          stream,\n          state\n        }\n        process.nextTick(afterWriteTick, state.afterWriteTickInfo)\n      }\n    } else {\n      afterWrite(stream, state, 1, cb)\n    }\n  }\n}\nfunction afterWriteTick({ stream, state, count, cb }) {\n  state.afterWriteTickInfo = null\n  return afterWrite(stream, state, count, cb)\n}\nfunction afterWrite(stream, state, count, cb) {\n  const needDrain = !state.ending && !stream.destroyed && state.length === 0 && state.needDrain\n  if (needDrain) {\n    state.needDrain = false\n    stream.emit('drain')\n  }\n  while (count-- > 0) {\n    state.pendingcb--\n    cb()\n  }\n  if (state.destroyed) {\n    errorBuffer(state)\n  }\n  finishMaybe(stream, state)\n}\n\n// If there's something in the buffer waiting, then invoke callbacks.\nfunction errorBuffer(state) {\n  if (state.writing) {\n    return\n  }\n  for (let n = state.bufferedIndex; n < state.buffered.length; ++n) {\n    var _state$errored\n    const { chunk, callback } = state.buffered[n]\n    const len = state.objectMode ? 1 : chunk.length\n    state.length -= len\n    callback(\n      (_state$errored = state.errored) !== null && _state$errored !== undefined\n        ? _state$errored\n        : new ERR_STREAM_DESTROYED('write')\n    )\n  }\n  const onfinishCallbacks = state[kOnFinished].splice(0)\n  for (let i = 0; i < onfinishCallbacks.length; i++) {\n    var _state$errored2\n    onfinishCallbacks[i](\n      (_state$errored2 = state.errored) !== null && _state$errored2 !== undefined\n        ? _state$errored2\n        : new ERR_STREAM_DESTROYED('end')\n    )\n  }\n  resetBuffer(state)\n}\n\n// If there's something in the buffer waiting, then process it.\nfunction clearBuffer(stream, state) {\n  if (state.corked || state.bufferProcessing || state.destroyed || !state.constructed) {\n    return\n  }\n  const { buffered, bufferedIndex, objectMode } = state\n  const bufferedLength = buffered.length - bufferedIndex\n  if (!bufferedLength) {\n    return\n  }\n  let i = bufferedIndex\n  state.bufferProcessing = true\n  if (bufferedLength > 1 && stream._writev) {\n    state.pendingcb -= bufferedLength - 1\n    const callback = state.allNoop\n      ? nop\n      : (err) => {\n          for (let n = i; n < buffered.length; ++n) {\n            buffered[n].callback(err)\n          }\n        }\n    // Make a copy of `buffered` if it's going to be used by `callback` above,\n    // since `doWrite` will mutate the array.\n    const chunks = state.allNoop && i === 0 ? buffered : ArrayPrototypeSlice(buffered, i)\n    chunks.allBuffers = state.allBuffers\n    doWrite(stream, state, true, state.length, chunks, '', callback)\n    resetBuffer(state)\n  } else {\n    do {\n      const { chunk, encoding, callback } = buffered[i]\n      buffered[i++] = null\n      const len = objectMode ? 1 : chunk.length\n      doWrite(stream, state, false, len, chunk, encoding, callback)\n    } while (i < buffered.length && !state.writing)\n    if (i === buffered.length) {\n      resetBuffer(state)\n    } else if (i > 256) {\n      buffered.splice(0, i)\n      state.bufferedIndex = 0\n    } else {\n      state.bufferedIndex = i\n    }\n  }\n  state.bufferProcessing = false\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  if (this._writev) {\n    this._writev(\n      [\n        {\n          chunk,\n          encoding\n        }\n      ],\n      cb\n    )\n  } else {\n    throw new ERR_METHOD_NOT_IMPLEMENTED('_write()')\n  }\n}\nWritable.prototype._writev = null\nWritable.prototype.end = function (chunk, encoding, cb) {\n  const state = this._writableState\n  if (typeof chunk === 'function') {\n    cb = chunk\n    chunk = null\n    encoding = null\n  } else if (typeof encoding === 'function') {\n    cb = encoding\n    encoding = null\n  }\n  let err\n  if (chunk !== null && chunk !== undefined) {\n    const ret = _write(this, chunk, encoding)\n    if (ret instanceof Error) {\n      err = ret\n    }\n  }\n\n  // .end() fully uncorks.\n  if (state.corked) {\n    state.corked = 1\n    this.uncork()\n  }\n  if (err) {\n    // Do nothing...\n  } else if (!state.errored && !state.ending) {\n    // This is forgiving in terms of unnecessary calls to end() and can hide\n    // logic errors. However, usually such errors are harmless and causing a\n    // hard error can be disproportionately destructive. It is not always\n    // trivial for the user to determine whether end() needs to be called\n    // or not.\n\n    state.ending = true\n    finishMaybe(this, state, true)\n    state.ended = true\n  } else if (state.finished) {\n    err = new ERR_STREAM_ALREADY_FINISHED('end')\n  } else if (state.destroyed) {\n    err = new ERR_STREAM_DESTROYED('end')\n  }\n  if (typeof cb === 'function') {\n    if (err || state.finished) {\n      process.nextTick(cb, err)\n    } else {\n      state[kOnFinished].push(cb)\n    }\n  }\n  return this\n}\nfunction needFinish(state) {\n  return (\n    state.ending &&\n    !state.destroyed &&\n    state.constructed &&\n    state.length === 0 &&\n    !state.errored &&\n    state.buffered.length === 0 &&\n    !state.finished &&\n    !state.writing &&\n    !state.errorEmitted &&\n    !state.closeEmitted\n  )\n}\nfunction callFinal(stream, state) {\n  let called = false\n  function onFinish(err) {\n    if (called) {\n      errorOrDestroy(stream, err !== null && err !== undefined ? err : ERR_MULTIPLE_CALLBACK())\n      return\n    }\n    called = true\n    state.pendingcb--\n    if (err) {\n      const onfinishCallbacks = state[kOnFinished].splice(0)\n      for (let i = 0; i < onfinishCallbacks.length; i++) {\n        onfinishCallbacks[i](err)\n      }\n      errorOrDestroy(stream, err, state.sync)\n    } else if (needFinish(state)) {\n      state.prefinished = true\n      stream.emit('prefinish')\n      // Backwards compat. Don't check state.sync here.\n      // Some streams assume 'finish' will be emitted\n      // asynchronously relative to _final callback.\n      state.pendingcb++\n      process.nextTick(finish, stream, state)\n    }\n  }\n  state.sync = true\n  state.pendingcb++\n  try {\n    stream._final(onFinish)\n  } catch (err) {\n    onFinish(err)\n  }\n  state.sync = false\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.finalCalled = true\n      callFinal(stream, state)\n    } else {\n      state.prefinished = true\n      stream.emit('prefinish')\n    }\n  }\n}\nfunction finishMaybe(stream, state, sync) {\n  if (needFinish(state)) {\n    prefinish(stream, state)\n    if (state.pendingcb === 0) {\n      if (sync) {\n        state.pendingcb++\n        process.nextTick(\n          (stream, state) => {\n            if (needFinish(state)) {\n              finish(stream, state)\n            } else {\n              state.pendingcb--\n            }\n          },\n          stream,\n          state\n        )\n      } else if (needFinish(state)) {\n        state.pendingcb++\n        finish(stream, state)\n      }\n    }\n  }\n}\nfunction finish(stream, state) {\n  state.pendingcb--\n  state.finished = true\n  const onfinishCallbacks = state[kOnFinished].splice(0)\n  for (let i = 0; i < onfinishCallbacks.length; i++) {\n    onfinishCallbacks[i]()\n  }\n  stream.emit('finish')\n  if (state.autoDestroy) {\n    // In case of duplex streams we need a way to detect\n    // if the readable side is ready for autoDestroy as well.\n    const rState = stream._readableState\n    const autoDestroy =\n      !rState ||\n      (rState.autoDestroy &&\n        // We don't expect the readable to ever 'end'\n        // if readable is explicitly set to false.\n        (rState.endEmitted || rState.readable === false))\n    if (autoDestroy) {\n      stream.destroy()\n    }\n  }\n}\nObjectDefineProperties(Writable.prototype, {\n  closed: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.closed : false\n    }\n  },\n  destroyed: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.destroyed : false\n    },\n    set(value) {\n      // Backward compatibility, the user is explicitly managing destroyed.\n      if (this._writableState) {\n        this._writableState.destroyed = value\n      }\n    }\n  },\n  writable: {\n    __proto__: null,\n    get() {\n      const w = this._writableState\n      // w.writable === false means that this is part of a Duplex stream\n      // where the writable side was disabled upon construction.\n      // Compat. The user might manually disable writable side through\n      // deprecated setter.\n      return !!w && w.writable !== false && !w.destroyed && !w.errored && !w.ending && !w.ended\n    },\n    set(val) {\n      // Backwards compatible.\n      if (this._writableState) {\n        this._writableState.writable = !!val\n      }\n    }\n  },\n  writableFinished: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.finished : false\n    }\n  },\n  writableObjectMode: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.objectMode : false\n    }\n  },\n  writableBuffer: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.getBuffer()\n    }\n  },\n  writableEnded: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.ending : false\n    }\n  },\n  writableNeedDrain: {\n    __proto__: null,\n    get() {\n      const wState = this._writableState\n      if (!wState) return false\n      return !wState.destroyed && !wState.ending && wState.needDrain\n    }\n  },\n  writableHighWaterMark: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.highWaterMark\n    }\n  },\n  writableCorked: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.corked : 0\n    }\n  },\n  writableLength: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.length\n    }\n  },\n  errored: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._writableState ? this._writableState.errored : null\n    }\n  },\n  writableAborted: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return !!(\n        this._writableState.writable !== false &&\n        (this._writableState.destroyed || this._writableState.errored) &&\n        !this._writableState.finished\n      )\n    }\n  }\n})\nconst destroy = destroyImpl.destroy\nWritable.prototype.destroy = function (err, cb) {\n  const state = this._writableState\n\n  // Invoke pending callbacks.\n  if (!state.destroyed && (state.bufferedIndex < state.buffered.length || state[kOnFinished].length)) {\n    process.nextTick(errorBuffer, state)\n  }\n  destroy.call(this, err, cb)\n  return this\n}\nWritable.prototype._undestroy = destroyImpl.undestroy\nWritable.prototype._destroy = function (err, cb) {\n  cb(err)\n}\nWritable.prototype[EE.captureRejectionSymbol] = function (err) {\n  this.destroy(err)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nWritable.fromWeb = function (writableStream, options) {\n  return lazyWebStreams().newStreamWritableFromWritableStream(writableStream, options)\n}\nWritable.toWeb = function (streamWritable) {\n  return lazyWebStreams().newWritableStreamFromStreamWritable(streamWritable)\n}\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\n;('use strict')\nconst bufferModule = require('buffer')\nconst {\n  isReadable,\n  isWritable,\n  isIterable,\n  isNodeStream,\n  isReadableNodeStream,\n  isWritableNodeStream,\n  isDuplexNodeStream,\n  isReadableStream,\n  isWritableStream\n} = require('./utils')\nconst eos = require('./end-of-stream')\nconst {\n  AbortError,\n  codes: { ERR_INVALID_ARG_TYPE, ERR_INVALID_RETURN_VALUE }\n} = require('../../ours/errors')\nconst { destroyer } = require('./destroy')\nconst Duplex = require('./duplex')\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nconst { createDeferredPromise } = require('../../ours/util')\nconst from = require('./from')\nconst Blob = globalThis.Blob || bufferModule.Blob\nconst isBlob =\n  typeof Blob !== 'undefined'\n    ? function isBlob(b) {\n        return b instanceof Blob\n      }\n    : function isBlob(b) {\n        return false\n      }\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst { FunctionPrototypeCall } = require('../../ours/primordials')\n\n// This is needed for pre node 17.\nclass Duplexify extends Duplex {\n  constructor(options) {\n    super(options)\n\n    // https://github.com/nodejs/node/pull/34385\n\n    if ((options === null || options === undefined ? undefined : options.readable) === false) {\n      this._readableState.readable = false\n      this._readableState.ended = true\n      this._readableState.endEmitted = true\n    }\n    if ((options === null || options === undefined ? undefined : options.writable) === false) {\n      this._writableState.writable = false\n      this._writableState.ending = true\n      this._writableState.ended = true\n      this._writableState.finished = true\n    }\n  }\n}\nmodule.exports = function duplexify(body, name) {\n  if (isDuplexNodeStream(body)) {\n    return body\n  }\n  if (isReadableNodeStream(body)) {\n    return _duplexify({\n      readable: body\n    })\n  }\n  if (isWritableNodeStream(body)) {\n    return _duplexify({\n      writable: body\n    })\n  }\n  if (isNodeStream(body)) {\n    return _duplexify({\n      writable: false,\n      readable: false\n    })\n  }\n  if (isReadableStream(body)) {\n    return _duplexify({\n      readable: Readable.fromWeb(body)\n    })\n  }\n  if (isWritableStream(body)) {\n    return _duplexify({\n      writable: Writable.fromWeb(body)\n    })\n  }\n  if (typeof body === 'function') {\n    const { value, write, final, destroy } = fromAsyncGen(body)\n    if (isIterable(value)) {\n      return from(Duplexify, value, {\n        // TODO (ronag): highWaterMark?\n        objectMode: true,\n        write,\n        final,\n        destroy\n      })\n    }\n    const then = value === null || value === undefined ? undefined : value.then\n    if (typeof then === 'function') {\n      let d\n      const promise = FunctionPrototypeCall(\n        then,\n        value,\n        (val) => {\n          if (val != null) {\n            throw new ERR_INVALID_RETURN_VALUE('nully', 'body', val)\n          }\n        },\n        (err) => {\n          destroyer(d, err)\n        }\n      )\n      return (d = new Duplexify({\n        // TODO (ronag): highWaterMark?\n        objectMode: true,\n        readable: false,\n        write,\n        final(cb) {\n          final(async () => {\n            try {\n              await promise\n              process.nextTick(cb, null)\n            } catch (err) {\n              process.nextTick(cb, err)\n            }\n          })\n        },\n        destroy\n      }))\n    }\n    throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or AsyncFunction', name, value)\n  }\n  if (isBlob(body)) {\n    return duplexify(body.arrayBuffer())\n  }\n  if (isIterable(body)) {\n    return from(Duplexify, body, {\n      // TODO (ronag): highWaterMark?\n      objectMode: true,\n      writable: false\n    })\n  }\n  if (\n    isReadableStream(body === null || body === undefined ? undefined : body.readable) &&\n    isWritableStream(body === null || body === undefined ? undefined : body.writable)\n  ) {\n    return Duplexify.fromWeb(body)\n  }\n  if (\n    typeof (body === null || body === undefined ? undefined : body.writable) === 'object' ||\n    typeof (body === null || body === undefined ? undefined : body.readable) === 'object'\n  ) {\n    const readable =\n      body !== null && body !== undefined && body.readable\n        ? isReadableNodeStream(body === null || body === undefined ? undefined : body.readable)\n          ? body === null || body === undefined\n            ? undefined\n            : body.readable\n          : duplexify(body.readable)\n        : undefined\n    const writable =\n      body !== null && body !== undefined && body.writable\n        ? isWritableNodeStream(body === null || body === undefined ? undefined : body.writable)\n          ? body === null || body === undefined\n            ? undefined\n            : body.writable\n          : duplexify(body.writable)\n        : undefined\n    return _duplexify({\n      readable,\n      writable\n    })\n  }\n  const then = body === null || body === undefined ? undefined : body.then\n  if (typeof then === 'function') {\n    let d\n    FunctionPrototypeCall(\n      then,\n      body,\n      (val) => {\n        if (val != null) {\n          d.push(val)\n        }\n        d.push(null)\n      },\n      (err) => {\n        destroyer(d, err)\n      }\n    )\n    return (d = new Duplexify({\n      objectMode: true,\n      writable: false,\n      read() {}\n    }))\n  }\n  throw new ERR_INVALID_ARG_TYPE(\n    name,\n    [\n      'Blob',\n      'ReadableStream',\n      'WritableStream',\n      'Stream',\n      'Iterable',\n      'AsyncIterable',\n      'Function',\n      '{ readable, writable } pair',\n      'Promise'\n    ],\n    body\n  )\n}\nfunction fromAsyncGen(fn) {\n  let { promise, resolve } = createDeferredPromise()\n  const ac = new AbortController()\n  const signal = ac.signal\n  const value = fn(\n    (async function* () {\n      while (true) {\n        const _promise = promise\n        promise = null\n        const { chunk, done, cb } = await _promise\n        process.nextTick(cb)\n        if (done) return\n        if (signal.aborted)\n          throw new AbortError(undefined, {\n            cause: signal.reason\n          })\n        ;({ promise, resolve } = createDeferredPromise())\n        yield chunk\n      }\n    })(),\n    {\n      signal\n    }\n  )\n  return {\n    value,\n    write(chunk, encoding, cb) {\n      const _resolve = resolve\n      resolve = null\n      _resolve({\n        chunk,\n        done: false,\n        cb\n      })\n    },\n    final(cb) {\n      const _resolve = resolve\n      resolve = null\n      _resolve({\n        done: true,\n        cb\n      })\n    },\n    destroy(err, cb) {\n      ac.abort()\n      cb(err)\n    }\n  }\n}\nfunction _duplexify(pair) {\n  const r = pair.readable && typeof pair.readable.read !== 'function' ? Readable.wrap(pair.readable) : pair.readable\n  const w = pair.writable\n  let readable = !!isReadable(r)\n  let writable = !!isWritable(w)\n  let ondrain\n  let onfinish\n  let onreadable\n  let onclose\n  let d\n  function onfinished(err) {\n    const cb = onclose\n    onclose = null\n    if (cb) {\n      cb(err)\n    } else if (err) {\n      d.destroy(err)\n    }\n  }\n\n  // TODO(ronag): Avoid double buffering.\n  // Implement Writable/Readable/Duplex traits.\n  // See, https://github.com/nodejs/node/pull/33515.\n  d = new Duplexify({\n    // TODO (ronag): highWaterMark?\n    readableObjectMode: !!(r !== null && r !== undefined && r.readableObjectMode),\n    writableObjectMode: !!(w !== null && w !== undefined && w.writableObjectMode),\n    readable,\n    writable\n  })\n  if (writable) {\n    eos(w, (err) => {\n      writable = false\n      if (err) {\n        destroyer(r, err)\n      }\n      onfinished(err)\n    })\n    d._write = function (chunk, encoding, callback) {\n      if (w.write(chunk, encoding)) {\n        callback()\n      } else {\n        ondrain = callback\n      }\n    }\n    d._final = function (callback) {\n      w.end()\n      onfinish = callback\n    }\n    w.on('drain', function () {\n      if (ondrain) {\n        const cb = ondrain\n        ondrain = null\n        cb()\n      }\n    })\n    w.on('finish', function () {\n      if (onfinish) {\n        const cb = onfinish\n        onfinish = null\n        cb()\n      }\n    })\n  }\n  if (readable) {\n    eos(r, (err) => {\n      readable = false\n      if (err) {\n        destroyer(r, err)\n      }\n      onfinished(err)\n    })\n    r.on('readable', function () {\n      if (onreadable) {\n        const cb = onreadable\n        onreadable = null\n        cb()\n      }\n    })\n    r.on('end', function () {\n      d.push(null)\n    })\n    d._read = function () {\n      while (true) {\n        const buf = r.read()\n        if (buf === null) {\n          onreadable = d._read\n          return\n        }\n        if (!d.push(buf)) {\n          return\n        }\n      }\n    }\n  }\n  d._destroy = function (err, callback) {\n    if (!err && onclose !== null) {\n      err = new AbortError()\n    }\n    onreadable = null\n    ondrain = null\n    onfinish = null\n    if (onclose === null) {\n      callback(err)\n    } else {\n      onclose = callback\n      destroyer(w, err)\n      destroyer(r, err)\n    }\n  }\n  return d\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototype inheritance, this class\n// prototypically inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict'\n\nconst {\n  ObjectDefineProperties,\n  ObjectGetOwnPropertyDescriptor,\n  ObjectKeys,\n  ObjectSetPrototypeOf\n} = require('../../ours/primordials')\nmodule.exports = Duplex\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nObjectSetPrototypeOf(Duplex.prototype, Readable.prototype)\nObjectSetPrototypeOf(Duplex, Readable)\n{\n  const keys = ObjectKeys(Writable.prototype)\n  // Allow the keys array to be GC'ed.\n  for (let i = 0; i < keys.length; i++) {\n    const method = keys[i]\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options)\n  Readable.call(this, options)\n  Writable.call(this, options)\n  if (options) {\n    this.allowHalfOpen = options.allowHalfOpen !== false\n    if (options.readable === false) {\n      this._readableState.readable = false\n      this._readableState.ended = true\n      this._readableState.endEmitted = true\n    }\n    if (options.writable === false) {\n      this._writableState.writable = false\n      this._writableState.ending = true\n      this._writableState.ended = true\n      this._writableState.finished = true\n    }\n  } else {\n    this.allowHalfOpen = true\n  }\n}\nObjectDefineProperties(Duplex.prototype, {\n  writable: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writable')\n  },\n  writableHighWaterMark: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableHighWaterMark')\n  },\n  writableObjectMode: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableObjectMode')\n  },\n  writableBuffer: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableBuffer')\n  },\n  writableLength: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableLength')\n  },\n  writableFinished: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableFinished')\n  },\n  writableCorked: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableCorked')\n  },\n  writableEnded: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableEnded')\n  },\n  writableNeedDrain: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableNeedDrain')\n  },\n  destroyed: {\n    __proto__: null,\n    get() {\n      if (this._readableState === undefined || this._writableState === undefined) {\n        return false\n      }\n      return this._readableState.destroyed && this._writableState.destroyed\n    },\n    set(value) {\n      // Backward compatibility, the user is explicitly\n      // managing destroyed.\n      if (this._readableState && this._writableState) {\n        this._readableState.destroyed = value\n        this._writableState.destroyed = value\n      }\n    }\n  }\n})\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nDuplex.fromWeb = function (pair, options) {\n  return lazyWebStreams().newStreamDuplexFromReadableWritablePair(pair, options)\n}\nDuplex.toWeb = function (duplex) {\n  return lazyWebStreams().newReadableWritablePairFromDuplex(duplex)\n}\nlet duplexify\nDuplex.from = function (body) {\n  if (!duplexify) {\n    duplexify = require('./duplexify')\n  }\n  return duplexify(body, 'body')\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf, Symbol } = require('../../ours/primordials')\nmodule.exports = Transform\nconst { ERR_METHOD_NOT_IMPLEMENTED } = require('../../ours/errors').codes\nconst Duplex = require('./duplex')\nconst { getHighWaterMark } = require('./state')\nObjectSetPrototypeOf(Transform.prototype, Duplex.prototype)\nObjectSetPrototypeOf(Transform, Duplex)\nconst kCallback = Symbol('kCallback')\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options)\n\n  // TODO (ronag): This should preferably always be\n  // applied but would be semver-major. Or even better;\n  // make Transform a Readable with the Writable interface.\n  const readableHighWaterMark = options ? getHighWaterMark(this, options, 'readableHighWaterMark', true) : null\n  if (readableHighWaterMark === 0) {\n    // A Duplex will buffer both on the writable and readable side while\n    // a Transform just wants to buffer hwm number of elements. To avoid\n    // buffering twice we disable buffering on the writable side.\n    options = {\n      ...options,\n      highWaterMark: null,\n      readableHighWaterMark,\n      // TODO (ronag): 0 is not optimal since we have\n      // a \"bug\" where we check needDrain before calling _write and not after.\n      // Refs: https://github.com/nodejs/node/pull/32887\n      // Refs: https://github.com/nodejs/node/pull/35941\n      writableHighWaterMark: options.writableHighWaterMark || 0\n    }\n  }\n  Duplex.call(this, options)\n\n  // We have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false\n  this[kCallback] = null\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform\n    if (typeof options.flush === 'function') this._flush = options.flush\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  // Backwards compat. Some Transform streams incorrectly implement _final\n  // instead of or in addition to _flush. By using 'prefinish' instead of\n  // implementing _final we continue supporting this unfortunate use case.\n  this.on('prefinish', prefinish)\n}\nfunction final(cb) {\n  if (typeof this._flush === 'function' && !this.destroyed) {\n    this._flush((er, data) => {\n      if (er) {\n        if (cb) {\n          cb(er)\n        } else {\n          this.destroy(er)\n        }\n        return\n      }\n      if (data != null) {\n        this.push(data)\n      }\n      this.push(null)\n      if (cb) {\n        cb()\n      }\n    })\n  } else {\n    this.push(null)\n    if (cb) {\n      cb()\n    }\n  }\n}\nfunction prefinish() {\n  if (this._final !== final) {\n    final.call(this)\n  }\n}\nTransform.prototype._final = final\nTransform.prototype._transform = function (chunk, encoding, callback) {\n  throw new ERR_METHOD_NOT_IMPLEMENTED('_transform()')\n}\nTransform.prototype._write = function (chunk, encoding, callback) {\n  const rState = this._readableState\n  const wState = this._writableState\n  const length = rState.length\n  this._transform(chunk, encoding, (err, val) => {\n    if (err) {\n      callback(err)\n      return\n    }\n    if (val != null) {\n      this.push(val)\n    }\n    if (\n      wState.ended ||\n      // Backwards compat.\n      length === rState.length ||\n      // Backwards compat.\n      rState.length < rState.highWaterMark\n    ) {\n      callback()\n    } else {\n      this[kCallback] = callback\n    }\n  })\n}\nTransform.prototype._read = function () {\n  if (this[kCallback]) {\n    const callback = this[kCallback]\n    this[kCallback] = null\n    callback()\n  }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf } = require('../../ours/primordials')\nmodule.exports = PassThrough\nconst Transform = require('./transform')\nObjectSetPrototypeOf(PassThrough.prototype, Transform.prototype)\nObjectSetPrototypeOf(PassThrough, Transform)\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options)\n  Transform.call(this, options)\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk)\n}\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { ArrayIsArray, Promise, SymbolAsyncIterator, SymbolDispose } = require('../../ours/primordials')\nconst eos = require('./end-of-stream')\nconst { once } = require('../../ours/util')\nconst destroyImpl = require('./destroy')\nconst Duplex = require('./duplex')\nconst {\n  aggregateTwoErrors,\n  codes: {\n    ERR_INVALID_ARG_TYPE,\n    ERR_INVALID_RETURN_VALUE,\n    ERR_MISSING_ARGS,\n    ERR_STREAM_DESTROYED,\n    ERR_STREAM_PREMATURE_CLOSE\n  },\n  AbortError\n} = require('../../ours/errors')\nconst { validateFunction, validateAbortSignal } = require('../validators')\nconst {\n  isIterable,\n  isReadable,\n  isReadableNodeStream,\n  isNodeStream,\n  isTransformStream,\n  isWebStream,\n  isReadableStream,\n  isReadableFinished\n} = require('./utils')\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nlet PassThrough\nlet Readable\nlet addAbortListener\nfunction destroyer(stream, reading, writing) {\n  let finished = false\n  stream.on('close', () => {\n    finished = true\n  })\n  const cleanup = eos(\n    stream,\n    {\n      readable: reading,\n      writable: writing\n    },\n    (err) => {\n      finished = !err\n    }\n  )\n  return {\n    destroy: (err) => {\n      if (finished) return\n      finished = true\n      destroyImpl.destroyer(stream, err || new ERR_STREAM_DESTROYED('pipe'))\n    },\n    cleanup\n  }\n}\nfunction popCallback(streams) {\n  // Streams should never be an empty array. It should always contain at least\n  // a single stream. Therefore optimize for the average case instead of\n  // checking for length === 0 as well.\n  validateFunction(streams[streams.length - 1], 'streams[stream.length - 1]')\n  return streams.pop()\n}\nfunction makeAsyncIterable(val) {\n  if (isIterable(val)) {\n    return val\n  } else if (isReadableNodeStream(val)) {\n    // Legacy streams are not Iterable.\n    return fromReadable(val)\n  }\n  throw new ERR_INVALID_ARG_TYPE('val', ['Readable', 'Iterable', 'AsyncIterable'], val)\n}\nasync function* fromReadable(val) {\n  if (!Readable) {\n    Readable = require('./readable')\n  }\n  yield* Readable.prototype[SymbolAsyncIterator].call(val)\n}\nasync function pumpToNode(iterable, writable, finish, { end }) {\n  let error\n  let onresolve = null\n  const resume = (err) => {\n    if (err) {\n      error = err\n    }\n    if (onresolve) {\n      const callback = onresolve\n      onresolve = null\n      callback()\n    }\n  }\n  const wait = () =>\n    new Promise((resolve, reject) => {\n      if (error) {\n        reject(error)\n      } else {\n        onresolve = () => {\n          if (error) {\n            reject(error)\n          } else {\n            resolve()\n          }\n        }\n      }\n    })\n  writable.on('drain', resume)\n  const cleanup = eos(\n    writable,\n    {\n      readable: false\n    },\n    resume\n  )\n  try {\n    if (writable.writableNeedDrain) {\n      await wait()\n    }\n    for await (const chunk of iterable) {\n      if (!writable.write(chunk)) {\n        await wait()\n      }\n    }\n    if (end) {\n      writable.end()\n      await wait()\n    }\n    finish()\n  } catch (err) {\n    finish(error !== err ? aggregateTwoErrors(error, err) : err)\n  } finally {\n    cleanup()\n    writable.off('drain', resume)\n  }\n}\nasync function pumpToWeb(readable, writable, finish, { end }) {\n  if (isTransformStream(writable)) {\n    writable = writable.writable\n  }\n  // https://streams.spec.whatwg.org/#example-manual-write-with-backpressure\n  const writer = writable.getWriter()\n  try {\n    for await (const chunk of readable) {\n      await writer.ready\n      writer.write(chunk).catch(() => {})\n    }\n    await writer.ready\n    if (end) {\n      await writer.close()\n    }\n    finish()\n  } catch (err) {\n    try {\n      await writer.abort(err)\n      finish(err)\n    } catch (err) {\n      finish(err)\n    }\n  }\n}\nfunction pipeline(...streams) {\n  return pipelineImpl(streams, once(popCallback(streams)))\n}\nfunction pipelineImpl(streams, callback, opts) {\n  if (streams.length === 1 && ArrayIsArray(streams[0])) {\n    streams = streams[0]\n  }\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams')\n  }\n  const ac = new AbortController()\n  const signal = ac.signal\n  const outerSignal = opts === null || opts === undefined ? undefined : opts.signal\n\n  // Need to cleanup event listeners if last stream is readable\n  // https://github.com/nodejs/node/issues/35452\n  const lastStreamCleanup = []\n  validateAbortSignal(outerSignal, 'options.signal')\n  function abort() {\n    finishImpl(new AbortError())\n  }\n  addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n  let disposable\n  if (outerSignal) {\n    disposable = addAbortListener(outerSignal, abort)\n  }\n  let error\n  let value\n  const destroys = []\n  let finishCount = 0\n  function finish(err) {\n    finishImpl(err, --finishCount === 0)\n  }\n  function finishImpl(err, final) {\n    var _disposable\n    if (err && (!error || error.code === 'ERR_STREAM_PREMATURE_CLOSE')) {\n      error = err\n    }\n    if (!error && !final) {\n      return\n    }\n    while (destroys.length) {\n      destroys.shift()(error)\n    }\n    ;(_disposable = disposable) === null || _disposable === undefined ? undefined : _disposable[SymbolDispose]()\n    ac.abort()\n    if (final) {\n      if (!error) {\n        lastStreamCleanup.forEach((fn) => fn())\n      }\n      process.nextTick(callback, error, value)\n    }\n  }\n  let ret\n  for (let i = 0; i < streams.length; i++) {\n    const stream = streams[i]\n    const reading = i < streams.length - 1\n    const writing = i > 0\n    const end = reading || (opts === null || opts === undefined ? undefined : opts.end) !== false\n    const isLastStream = i === streams.length - 1\n    if (isNodeStream(stream)) {\n      if (end) {\n        const { destroy, cleanup } = destroyer(stream, reading, writing)\n        destroys.push(destroy)\n        if (isReadable(stream) && isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      }\n\n      // Catch stream errors that occur after pipe/pump has completed.\n      function onError(err) {\n        if (err && err.name !== 'AbortError' && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n          finish(err)\n        }\n      }\n      stream.on('error', onError)\n      if (isReadable(stream) && isLastStream) {\n        lastStreamCleanup.push(() => {\n          stream.removeListener('error', onError)\n        })\n      }\n    }\n    if (i === 0) {\n      if (typeof stream === 'function') {\n        ret = stream({\n          signal\n        })\n        if (!isIterable(ret)) {\n          throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or Stream', 'source', ret)\n        }\n      } else if (isIterable(stream) || isReadableNodeStream(stream) || isTransformStream(stream)) {\n        ret = stream\n      } else {\n        ret = Duplex.from(stream)\n      }\n    } else if (typeof stream === 'function') {\n      if (isTransformStream(ret)) {\n        var _ret\n        ret = makeAsyncIterable((_ret = ret) === null || _ret === undefined ? undefined : _ret.readable)\n      } else {\n        ret = makeAsyncIterable(ret)\n      }\n      ret = stream(ret, {\n        signal\n      })\n      if (reading) {\n        if (!isIterable(ret, true)) {\n          throw new ERR_INVALID_RETURN_VALUE('AsyncIterable', `transform[${i - 1}]`, ret)\n        }\n      } else {\n        var _ret2\n        if (!PassThrough) {\n          PassThrough = require('./passthrough')\n        }\n\n        // If the last argument to pipeline is not a stream\n        // we must create a proxy stream so that pipeline(...)\n        // always returns a stream which can be further\n        // composed through `.pipe(stream)`.\n\n        const pt = new PassThrough({\n          objectMode: true\n        })\n\n        // Handle Promises/A+ spec, `then` could be a getter that throws on\n        // second use.\n        const then = (_ret2 = ret) === null || _ret2 === undefined ? undefined : _ret2.then\n        if (typeof then === 'function') {\n          finishCount++\n          then.call(\n            ret,\n            (val) => {\n              value = val\n              if (val != null) {\n                pt.write(val)\n              }\n              if (end) {\n                pt.end()\n              }\n              process.nextTick(finish)\n            },\n            (err) => {\n              pt.destroy(err)\n              process.nextTick(finish, err)\n            }\n          )\n        } else if (isIterable(ret, true)) {\n          finishCount++\n          pumpToNode(ret, pt, finish, {\n            end\n          })\n        } else if (isReadableStream(ret) || isTransformStream(ret)) {\n          const toRead = ret.readable || ret\n          finishCount++\n          pumpToNode(toRead, pt, finish, {\n            end\n          })\n        } else {\n          throw new ERR_INVALID_RETURN_VALUE('AsyncIterable or Promise', 'destination', ret)\n        }\n        ret = pt\n        const { destroy, cleanup } = destroyer(ret, false, true)\n        destroys.push(destroy)\n        if (isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      }\n    } else if (isNodeStream(stream)) {\n      if (isReadableNodeStream(ret)) {\n        finishCount += 2\n        const cleanup = pipe(ret, stream, finish, {\n          end\n        })\n        if (isReadable(stream) && isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      } else if (isTransformStream(ret) || isReadableStream(ret)) {\n        const toRead = ret.readable || ret\n        finishCount++\n        pumpToNode(toRead, stream, finish, {\n          end\n        })\n      } else if (isIterable(ret)) {\n        finishCount++\n        pumpToNode(ret, stream, finish, {\n          end\n        })\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\n          'val',\n          ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n          ret\n        )\n      }\n      ret = stream\n    } else if (isWebStream(stream)) {\n      if (isReadableNodeStream(ret)) {\n        finishCount++\n        pumpToWeb(makeAsyncIterable(ret), stream, finish, {\n          end\n        })\n      } else if (isReadableStream(ret) || isIterable(ret)) {\n        finishCount++\n        pumpToWeb(ret, stream, finish, {\n          end\n        })\n      } else if (isTransformStream(ret)) {\n        finishCount++\n        pumpToWeb(ret.readable, stream, finish, {\n          end\n        })\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\n          'val',\n          ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n          ret\n        )\n      }\n      ret = stream\n    } else {\n      ret = Duplex.from(stream)\n    }\n  }\n  if (\n    (signal !== null && signal !== undefined && signal.aborted) ||\n    (outerSignal !== null && outerSignal !== undefined && outerSignal.aborted)\n  ) {\n    process.nextTick(abort)\n  }\n  return ret\n}\nfunction pipe(src, dst, finish, { end }) {\n  let ended = false\n  dst.on('close', () => {\n    if (!ended) {\n      // Finish if the destination closes before the source has completed.\n      finish(new ERR_STREAM_PREMATURE_CLOSE())\n    }\n  })\n  src.pipe(dst, {\n    end: false\n  }) // If end is true we already will have a listener to end dst.\n\n  if (end) {\n    // Compat. Before node v10.12.0 stdio used to throw an error so\n    // pipe() did/does not end() stdio destinations.\n    // Now they allow it but \"secretly\" don't close the underlying fd.\n\n    function endFn() {\n      ended = true\n      dst.end()\n    }\n    if (isReadableFinished(src)) {\n      // End the destination if the source has already ended.\n      process.nextTick(endFn)\n    } else {\n      src.once('end', endFn)\n    }\n  } else {\n    finish()\n  }\n  eos(\n    src,\n    {\n      readable: true,\n      writable: false\n    },\n    (err) => {\n      const rState = src._readableState\n      if (\n        err &&\n        err.code === 'ERR_STREAM_PREMATURE_CLOSE' &&\n        rState &&\n        rState.ended &&\n        !rState.errored &&\n        !rState.errorEmitted\n      ) {\n        // Some readable streams will emit 'close' before 'end'. However, since\n        // this is on the readable side 'end' should still be emitted if the\n        // stream has been ended and no error emitted. This should be allowed in\n        // favor of backwards compatibility. Since the stream is piped to a\n        // destination this should not result in any observable difference.\n        // We don't need to check if this is a writable premature close since\n        // eos will only fail with premature close on the reading side for\n        // duplex streams.\n        src.once('end', finish).once('error', finish)\n      } else {\n        finish(err)\n      }\n    }\n  )\n  return eos(\n    dst,\n    {\n      readable: false,\n      writable: true\n    },\n    finish\n  )\n}\nmodule.exports = {\n  pipelineImpl,\n  pipeline\n}\n","'use strict'\n\nconst { pipeline } = require('./pipeline')\nconst Duplex = require('./duplex')\nconst { destroyer } = require('./destroy')\nconst {\n  isNodeStream,\n  isReadable,\n  isWritable,\n  isWebStream,\n  isTransformStream,\n  isWritableStream,\n  isReadableStream\n} = require('./utils')\nconst {\n  AbortError,\n  codes: { ERR_INVALID_ARG_VALUE, ERR_MISSING_ARGS }\n} = require('../../ours/errors')\nconst eos = require('./end-of-stream')\nmodule.exports = function compose(...streams) {\n  if (streams.length === 0) {\n    throw new ERR_MISSING_ARGS('streams')\n  }\n  if (streams.length === 1) {\n    return Duplex.from(streams[0])\n  }\n  const orgStreams = [...streams]\n  if (typeof streams[0] === 'function') {\n    streams[0] = Duplex.from(streams[0])\n  }\n  if (typeof streams[streams.length - 1] === 'function') {\n    const idx = streams.length - 1\n    streams[idx] = Duplex.from(streams[idx])\n  }\n  for (let n = 0; n < streams.length; ++n) {\n    if (!isNodeStream(streams[n]) && !isWebStream(streams[n])) {\n      // TODO(ronag): Add checks for non streams.\n      continue\n    }\n    if (\n      n < streams.length - 1 &&\n      !(isReadable(streams[n]) || isReadableStream(streams[n]) || isTransformStream(streams[n]))\n    ) {\n      throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be readable')\n    }\n    if (n > 0 && !(isWritable(streams[n]) || isWritableStream(streams[n]) || isTransformStream(streams[n]))) {\n      throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be writable')\n    }\n  }\n  let ondrain\n  let onfinish\n  let onreadable\n  let onclose\n  let d\n  function onfinished(err) {\n    const cb = onclose\n    onclose = null\n    if (cb) {\n      cb(err)\n    } else if (err) {\n      d.destroy(err)\n    } else if (!readable && !writable) {\n      d.destroy()\n    }\n  }\n  const head = streams[0]\n  const tail = pipeline(streams, onfinished)\n  const writable = !!(isWritable(head) || isWritableStream(head) || isTransformStream(head))\n  const readable = !!(isReadable(tail) || isReadableStream(tail) || isTransformStream(tail))\n\n  // TODO(ronag): Avoid double buffering.\n  // Implement Writable/Readable/Duplex traits.\n  // See, https://github.com/nodejs/node/pull/33515.\n  d = new Duplex({\n    // TODO (ronag): highWaterMark?\n    writableObjectMode: !!(head !== null && head !== undefined && head.writableObjectMode),\n    readableObjectMode: !!(tail !== null && tail !== undefined && tail.readableObjectMode),\n    writable,\n    readable\n  })\n  if (writable) {\n    if (isNodeStream(head)) {\n      d._write = function (chunk, encoding, callback) {\n        if (head.write(chunk, encoding)) {\n          callback()\n        } else {\n          ondrain = callback\n        }\n      }\n      d._final = function (callback) {\n        head.end()\n        onfinish = callback\n      }\n      head.on('drain', function () {\n        if (ondrain) {\n          const cb = ondrain\n          ondrain = null\n          cb()\n        }\n      })\n    } else if (isWebStream(head)) {\n      const writable = isTransformStream(head) ? head.writable : head\n      const writer = writable.getWriter()\n      d._write = async function (chunk, encoding, callback) {\n        try {\n          await writer.ready\n          writer.write(chunk).catch(() => {})\n          callback()\n        } catch (err) {\n          callback(err)\n        }\n      }\n      d._final = async function (callback) {\n        try {\n          await writer.ready\n          writer.close().catch(() => {})\n          onfinish = callback\n        } catch (err) {\n          callback(err)\n        }\n      }\n    }\n    const toRead = isTransformStream(tail) ? tail.readable : tail\n    eos(toRead, () => {\n      if (onfinish) {\n        const cb = onfinish\n        onfinish = null\n        cb()\n      }\n    })\n  }\n  if (readable) {\n    if (isNodeStream(tail)) {\n      tail.on('readable', function () {\n        if (onreadable) {\n          const cb = onreadable\n          onreadable = null\n          cb()\n        }\n      })\n      tail.on('end', function () {\n        d.push(null)\n      })\n      d._read = function () {\n        while (true) {\n          const buf = tail.read()\n          if (buf === null) {\n            onreadable = d._read\n            return\n          }\n          if (!d.push(buf)) {\n            return\n          }\n        }\n      }\n    } else if (isWebStream(tail)) {\n      const readable = isTransformStream(tail) ? tail.readable : tail\n      const reader = readable.getReader()\n      d._read = async function () {\n        while (true) {\n          try {\n            const { value, done } = await reader.read()\n            if (!d.push(value)) {\n              return\n            }\n            if (done) {\n              d.push(null)\n              return\n            }\n          } catch {\n            return\n          }\n        }\n      }\n    }\n  }\n  d._destroy = function (err, callback) {\n    if (!err && onclose !== null) {\n      err = new AbortError()\n    }\n    onreadable = null\n    ondrain = null\n    onfinish = null\n    if (onclose === null) {\n      callback(err)\n    } else {\n      onclose = callback\n      if (isNodeStream(tail)) {\n        destroyer(tail, err)\n      }\n    }\n  }\n  return d\n}\n","'use strict'\n\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst {\n  codes: { ERR_INVALID_ARG_VALUE, ERR_INVALID_ARG_TYPE, ERR_MISSING_ARGS, ERR_OUT_OF_RANGE },\n  AbortError\n} = require('../../ours/errors')\nconst { validateAbortSignal, validateInteger, validateObject } = require('../validators')\nconst kWeakHandler = require('../../ours/primordials').Symbol('kWeak')\nconst kResistStopPropagation = require('../../ours/primordials').Symbol('kResistStopPropagation')\nconst { finished } = require('./end-of-stream')\nconst staticCompose = require('./compose')\nconst { addAbortSignalNoValidate } = require('./add-abort-signal')\nconst { isWritable, isNodeStream } = require('./utils')\nconst { deprecate } = require('../../ours/util')\nconst {\n  ArrayPrototypePush,\n  Boolean,\n  MathFloor,\n  Number,\n  NumberIsNaN,\n  Promise,\n  PromiseReject,\n  PromiseResolve,\n  PromisePrototypeThen,\n  Symbol\n} = require('../../ours/primordials')\nconst kEmpty = Symbol('kEmpty')\nconst kEof = Symbol('kEof')\nfunction compose(stream, options) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  if (isNodeStream(stream) && !isWritable(stream)) {\n    throw new ERR_INVALID_ARG_VALUE('stream', stream, 'must be writable')\n  }\n  const composedStream = staticCompose(this, stream)\n  if (options !== null && options !== undefined && options.signal) {\n    // Not validating as we already validated before\n    addAbortSignalNoValidate(options.signal, composedStream)\n  }\n  return composedStream\n}\nfunction map(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  let concurrency = 1\n  if ((options === null || options === undefined ? undefined : options.concurrency) != null) {\n    concurrency = MathFloor(options.concurrency)\n  }\n  let highWaterMark = concurrency - 1\n  if ((options === null || options === undefined ? undefined : options.highWaterMark) != null) {\n    highWaterMark = MathFloor(options.highWaterMark)\n  }\n  validateInteger(concurrency, 'options.concurrency', 1)\n  validateInteger(highWaterMark, 'options.highWaterMark', 0)\n  highWaterMark += concurrency\n  return async function* map() {\n    const signal = require('../../ours/util').AbortSignalAny(\n      [options === null || options === undefined ? undefined : options.signal].filter(Boolean)\n    )\n    const stream = this\n    const queue = []\n    const signalOpt = {\n      signal\n    }\n    let next\n    let resume\n    let done = false\n    let cnt = 0\n    function onCatch() {\n      done = true\n      afterItemProcessed()\n    }\n    function afterItemProcessed() {\n      cnt -= 1\n      maybeResume()\n    }\n    function maybeResume() {\n      if (resume && !done && cnt < concurrency && queue.length < highWaterMark) {\n        resume()\n        resume = null\n      }\n    }\n    async function pump() {\n      try {\n        for await (let val of stream) {\n          if (done) {\n            return\n          }\n          if (signal.aborted) {\n            throw new AbortError()\n          }\n          try {\n            val = fn(val, signalOpt)\n            if (val === kEmpty) {\n              continue\n            }\n            val = PromiseResolve(val)\n          } catch (err) {\n            val = PromiseReject(err)\n          }\n          cnt += 1\n          PromisePrototypeThen(val, afterItemProcessed, onCatch)\n          queue.push(val)\n          if (next) {\n            next()\n            next = null\n          }\n          if (!done && (queue.length >= highWaterMark || cnt >= concurrency)) {\n            await new Promise((resolve) => {\n              resume = resolve\n            })\n          }\n        }\n        queue.push(kEof)\n      } catch (err) {\n        const val = PromiseReject(err)\n        PromisePrototypeThen(val, afterItemProcessed, onCatch)\n        queue.push(val)\n      } finally {\n        done = true\n        if (next) {\n          next()\n          next = null\n        }\n      }\n    }\n    pump()\n    try {\n      while (true) {\n        while (queue.length > 0) {\n          const val = await queue[0]\n          if (val === kEof) {\n            return\n          }\n          if (signal.aborted) {\n            throw new AbortError()\n          }\n          if (val !== kEmpty) {\n            yield val\n          }\n          queue.shift()\n          maybeResume()\n        }\n        await new Promise((resolve) => {\n          next = resolve\n        })\n      }\n    } finally {\n      done = true\n      if (resume) {\n        resume()\n        resume = null\n      }\n    }\n  }.call(this)\n}\nfunction asIndexedPairs(options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  return async function* asIndexedPairs() {\n    let index = 0\n    for await (const val of this) {\n      var _options$signal\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal = options.signal) !== null &&\n        _options$signal !== undefined &&\n        _options$signal.aborted\n      ) {\n        throw new AbortError({\n          cause: options.signal.reason\n        })\n      }\n      yield [index++, val]\n    }\n  }.call(this)\n}\nasync function some(fn, options = undefined) {\n  for await (const unused of filter.call(this, fn, options)) {\n    return true\n  }\n  return false\n}\nasync function every(fn, options = undefined) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  // https://en.wikipedia.org/wiki/De_Morgan%27s_laws\n  return !(await some.call(\n    this,\n    async (...args) => {\n      return !(await fn(...args))\n    },\n    options\n  ))\n}\nasync function find(fn, options) {\n  for await (const result of filter.call(this, fn, options)) {\n    return result\n  }\n  return undefined\n}\nasync function forEach(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  async function forEachFn(value, options) {\n    await fn(value, options)\n    return kEmpty\n  }\n  // eslint-disable-next-line no-unused-vars\n  for await (const unused of map.call(this, forEachFn, options));\n}\nfunction filter(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  async function filterFn(value, options) {\n    if (await fn(value, options)) {\n      return value\n    }\n    return kEmpty\n  }\n  return map.call(this, filterFn, options)\n}\n\n// Specific to provide better error to reduce since the argument is only\n// missing if the stream has no items in it - but the code is still appropriate\nclass ReduceAwareErrMissingArgs extends ERR_MISSING_ARGS {\n  constructor() {\n    super('reduce')\n    this.message = 'Reduce of an empty stream requires an initial value'\n  }\n}\nasync function reduce(reducer, initialValue, options) {\n  var _options$signal2\n  if (typeof reducer !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('reducer', ['Function', 'AsyncFunction'], reducer)\n  }\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  let hasInitialValue = arguments.length > 1\n  if (\n    options !== null &&\n    options !== undefined &&\n    (_options$signal2 = options.signal) !== null &&\n    _options$signal2 !== undefined &&\n    _options$signal2.aborted\n  ) {\n    const err = new AbortError(undefined, {\n      cause: options.signal.reason\n    })\n    this.once('error', () => {}) // The error is already propagated\n    await finished(this.destroy(err))\n    throw err\n  }\n  const ac = new AbortController()\n  const signal = ac.signal\n  if (options !== null && options !== undefined && options.signal) {\n    const opts = {\n      once: true,\n      [kWeakHandler]: this,\n      [kResistStopPropagation]: true\n    }\n    options.signal.addEventListener('abort', () => ac.abort(), opts)\n  }\n  let gotAnyItemFromStream = false\n  try {\n    for await (const value of this) {\n      var _options$signal3\n      gotAnyItemFromStream = true\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal3 = options.signal) !== null &&\n        _options$signal3 !== undefined &&\n        _options$signal3.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (!hasInitialValue) {\n        initialValue = value\n        hasInitialValue = true\n      } else {\n        initialValue = await reducer(initialValue, value, {\n          signal\n        })\n      }\n    }\n    if (!gotAnyItemFromStream && !hasInitialValue) {\n      throw new ReduceAwareErrMissingArgs()\n    }\n  } finally {\n    ac.abort()\n  }\n  return initialValue\n}\nasync function toArray(options) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  const result = []\n  for await (const val of this) {\n    var _options$signal4\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal4 = options.signal) !== null &&\n      _options$signal4 !== undefined &&\n      _options$signal4.aborted\n    ) {\n      throw new AbortError(undefined, {\n        cause: options.signal.reason\n      })\n    }\n    ArrayPrototypePush(result, val)\n  }\n  return result\n}\nfunction flatMap(fn, options) {\n  const values = map.call(this, fn, options)\n  return async function* flatMap() {\n    for await (const val of values) {\n      yield* val\n    }\n  }.call(this)\n}\nfunction toIntegerOrInfinity(number) {\n  // We coerce here to align with the spec\n  // https://github.com/tc39/proposal-iterator-helpers/issues/169\n  number = Number(number)\n  if (NumberIsNaN(number)) {\n    return 0\n  }\n  if (number < 0) {\n    throw new ERR_OUT_OF_RANGE('number', '>= 0', number)\n  }\n  return number\n}\nfunction drop(number, options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  number = toIntegerOrInfinity(number)\n  return async function* drop() {\n    var _options$signal5\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal5 = options.signal) !== null &&\n      _options$signal5 !== undefined &&\n      _options$signal5.aborted\n    ) {\n      throw new AbortError()\n    }\n    for await (const val of this) {\n      var _options$signal6\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal6 = options.signal) !== null &&\n        _options$signal6 !== undefined &&\n        _options$signal6.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (number-- <= 0) {\n        yield val\n      }\n    }\n  }.call(this)\n}\nfunction take(number, options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  number = toIntegerOrInfinity(number)\n  return async function* take() {\n    var _options$signal7\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal7 = options.signal) !== null &&\n      _options$signal7 !== undefined &&\n      _options$signal7.aborted\n    ) {\n      throw new AbortError()\n    }\n    for await (const val of this) {\n      var _options$signal8\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal8 = options.signal) !== null &&\n        _options$signal8 !== undefined &&\n        _options$signal8.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (number-- > 0) {\n        yield val\n      }\n\n      // Don't get another item from iterator in case we reached the end\n      if (number <= 0) {\n        return\n      }\n    }\n  }.call(this)\n}\nmodule.exports.streamReturningOperators = {\n  asIndexedPairs: deprecate(asIndexedPairs, 'readable.asIndexedPairs will be removed in a future version.'),\n  drop,\n  filter,\n  flatMap,\n  map,\n  take,\n  compose\n}\nmodule.exports.promiseReturningOperators = {\n  every,\n  forEach,\n  reduce,\n  toArray,\n  some,\n  find\n}\n","'use strict'\n\nconst { ArrayPrototypePop, Promise } = require('../ours/primordials')\nconst { isIterable, isNodeStream, isWebStream } = require('../internal/streams/utils')\nconst { pipelineImpl: pl } = require('../internal/streams/pipeline')\nconst { finished } = require('../internal/streams/end-of-stream')\nrequire('../../lib/stream.js')\nfunction pipeline(...streams) {\n  return new Promise((resolve, reject) => {\n    let signal\n    let end\n    const lastArg = streams[streams.length - 1]\n    if (\n      lastArg &&\n      typeof lastArg === 'object' &&\n      !isNodeStream(lastArg) &&\n      !isIterable(lastArg) &&\n      !isWebStream(lastArg)\n    ) {\n      const options = ArrayPrototypePop(streams)\n      signal = options.signal\n      end = options.end\n    }\n    pl(\n      streams,\n      (err, value) => {\n        if (err) {\n          reject(err)\n        } else {\n          resolve(value)\n        }\n      },\n      {\n        signal,\n        end\n      }\n    )\n  })\n}\nmodule.exports = {\n  finished,\n  pipeline\n}\n","/* replacement start */\n\nconst { Buffer } = require('buffer')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n;('use strict')\nconst { ObjectDefineProperty, ObjectKeys, ReflectApply } = require('./ours/primordials')\nconst {\n  promisify: { custom: customPromisify }\n} = require('./ours/util')\nconst { streamReturningOperators, promiseReturningOperators } = require('./internal/streams/operators')\nconst {\n  codes: { ERR_ILLEGAL_CONSTRUCTOR }\n} = require('./ours/errors')\nconst compose = require('./internal/streams/compose')\nconst { setDefaultHighWaterMark, getDefaultHighWaterMark } = require('./internal/streams/state')\nconst { pipeline } = require('./internal/streams/pipeline')\nconst { destroyer } = require('./internal/streams/destroy')\nconst eos = require('./internal/streams/end-of-stream')\nconst internalBuffer = {}\nconst promises = require('./stream/promises')\nconst utils = require('./internal/streams/utils')\nconst Stream = (module.exports = require('./internal/streams/legacy').Stream)\nStream.isDestroyed = utils.isDestroyed\nStream.isDisturbed = utils.isDisturbed\nStream.isErrored = utils.isErrored\nStream.isReadable = utils.isReadable\nStream.isWritable = utils.isWritable\nStream.Readable = require('./internal/streams/readable')\nfor (const key of ObjectKeys(streamReturningOperators)) {\n  const op = streamReturningOperators[key]\n  function fn(...args) {\n    if (new.target) {\n      throw ERR_ILLEGAL_CONSTRUCTOR()\n    }\n    return Stream.Readable.from(ReflectApply(op, this, args))\n  }\n  ObjectDefineProperty(fn, 'name', {\n    __proto__: null,\n    value: op.name\n  })\n  ObjectDefineProperty(fn, 'length', {\n    __proto__: null,\n    value: op.length\n  })\n  ObjectDefineProperty(Stream.Readable.prototype, key, {\n    __proto__: null,\n    value: fn,\n    enumerable: false,\n    configurable: true,\n    writable: true\n  })\n}\nfor (const key of ObjectKeys(promiseReturningOperators)) {\n  const op = promiseReturningOperators[key]\n  function fn(...args) {\n    if (new.target) {\n      throw ERR_ILLEGAL_CONSTRUCTOR()\n    }\n    return ReflectApply(op, this, args)\n  }\n  ObjectDefineProperty(fn, 'name', {\n    __proto__: null,\n    value: op.name\n  })\n  ObjectDefineProperty(fn, 'length', {\n    __proto__: null,\n    value: op.length\n  })\n  ObjectDefineProperty(Stream.Readable.prototype, key, {\n    __proto__: null,\n    value: fn,\n    enumerable: false,\n    configurable: true,\n    writable: true\n  })\n}\nStream.Writable = require('./internal/streams/writable')\nStream.Duplex = require('./internal/streams/duplex')\nStream.Transform = require('./internal/streams/transform')\nStream.PassThrough = require('./internal/streams/passthrough')\nStream.pipeline = pipeline\nconst { addAbortSignal } = require('./internal/streams/add-abort-signal')\nStream.addAbortSignal = addAbortSignal\nStream.finished = eos\nStream.destroy = destroyer\nStream.compose = compose\nStream.setDefaultHighWaterMark = setDefaultHighWaterMark\nStream.getDefaultHighWaterMark = getDefaultHighWaterMark\nObjectDefineProperty(Stream, 'promises', {\n  __proto__: null,\n  configurable: true,\n  enumerable: true,\n  get() {\n    return promises\n  }\n})\nObjectDefineProperty(pipeline, customPromisify, {\n  __proto__: null,\n  enumerable: true,\n  get() {\n    return promises.pipeline\n  }\n})\nObjectDefineProperty(eos, customPromisify, {\n  __proto__: null,\n  enumerable: true,\n  get() {\n    return promises.finished\n  }\n})\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream\nStream._isUint8Array = function isUint8Array(value) {\n  return value instanceof Uint8Array\n}\nStream._uint8ArrayToBuffer = function _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n}\n","'use strict'\n\nconst CustomStream = require('../stream')\nconst promises = require('../stream/promises')\nconst originalDestroy = CustomStream.Readable.destroy\nmodule.exports = CustomStream.Readable\n\n// Explicit export naming is needed for ESM\nmodule.exports._uint8ArrayToBuffer = CustomStream._uint8ArrayToBuffer\nmodule.exports._isUint8Array = CustomStream._isUint8Array\nmodule.exports.isDisturbed = CustomStream.isDisturbed\nmodule.exports.isErrored = CustomStream.isErrored\nmodule.exports.isReadable = CustomStream.isReadable\nmodule.exports.Readable = CustomStream.Readable\nmodule.exports.Writable = CustomStream.Writable\nmodule.exports.Duplex = CustomStream.Duplex\nmodule.exports.Transform = CustomStream.Transform\nmodule.exports.PassThrough = CustomStream.PassThrough\nmodule.exports.addAbortSignal = CustomStream.addAbortSignal\nmodule.exports.finished = CustomStream.finished\nmodule.exports.destroy = CustomStream.destroy\nmodule.exports.destroy = originalDestroy\nmodule.exports.pipeline = CustomStream.pipeline\nmodule.exports.compose = CustomStream.compose\nObject.defineProperty(CustomStream, 'promises', {\n  configurable: true,\n  enumerable: true,\n  get() {\n    return promises\n  }\n})\nmodule.exports.Stream = CustomStream.Stream\n\n// Allow default importing\nmodule.exports.default = module.exports\n",null,"/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","export default {}","var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n    ? Symbol.toStringTag\n    : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n    [].__proto__ === Array.prototype // eslint-disable-line no-proto\n        ? function (O) {\n            return O.__proto__; // eslint-disable-line no-proto\n        }\n        : null\n);\n\nfunction addNumericSeparator(num, str) {\n    if (\n        num === Infinity\n        || num === -Infinity\n        || num !== num\n        || (num && num > -1000 && num < 1000)\n        || $test.call(/e/, str)\n    ) {\n        return str;\n    }\n    var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n    if (typeof num === 'number') {\n        var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n        if (int !== num) {\n            var intStr = String(int);\n            var dec = $slice.call(str, intStr.length + 1);\n            return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n        }\n    }\n    return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nvar quotes = {\n    __proto__: null,\n    'double': '\"',\n    single: \"'\"\n};\nvar quoteREs = {\n    __proto__: null,\n    'double': /([\"\\\\])/g,\n    single: /(['\\\\])/g\n};\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n    var opts = options || {};\n\n    if (has(opts, 'quoteStyle') && !has(quotes, opts.quoteStyle)) {\n        throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n    }\n    if (\n        has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n            ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n            : opts.maxStringLength !== null\n        )\n    ) {\n        throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n    }\n    var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n    if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n        throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n    }\n\n    if (\n        has(opts, 'indent')\n        && opts.indent !== null\n        && opts.indent !== '\\t'\n        && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n    ) {\n        throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n    }\n    if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n        throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n    }\n    var numericSeparator = opts.numericSeparator;\n\n    if (typeof obj === 'undefined') {\n        return 'undefined';\n    }\n    if (obj === null) {\n        return 'null';\n    }\n    if (typeof obj === 'boolean') {\n        return obj ? 'true' : 'false';\n    }\n\n    if (typeof obj === 'string') {\n        return inspectString(obj, opts);\n    }\n    if (typeof obj === 'number') {\n        if (obj === 0) {\n            return Infinity / obj > 0 ? '0' : '-0';\n        }\n        var str = String(obj);\n        return numericSeparator ? addNumericSeparator(obj, str) : str;\n    }\n    if (typeof obj === 'bigint') {\n        var bigIntStr = String(obj) + 'n';\n        return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n    }\n\n    var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n    if (typeof depth === 'undefined') { depth = 0; }\n    if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n        return isArray(obj) ? '[Array]' : '[Object]';\n    }\n\n    var indent = getIndent(opts, depth);\n\n    if (typeof seen === 'undefined') {\n        seen = [];\n    } else if (indexOf(seen, obj) >= 0) {\n        return '[Circular]';\n    }\n\n    function inspect(value, from, noIndent) {\n        if (from) {\n            seen = $arrSlice.call(seen);\n            seen.push(from);\n        }\n        if (noIndent) {\n            var newOpts = {\n                depth: opts.depth\n            };\n            if (has(opts, 'quoteStyle')) {\n                newOpts.quoteStyle = opts.quoteStyle;\n            }\n            return inspect_(value, newOpts, depth + 1, seen);\n        }\n        return inspect_(value, opts, depth + 1, seen);\n    }\n\n    if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n        var name = nameOf(obj);\n        var keys = arrObjKeys(obj, inspect);\n        return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n    }\n    if (isSymbol(obj)) {\n        var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n        return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n    }\n    if (isElement(obj)) {\n        var s = '<' + $toLowerCase.call(String(obj.nodeName));\n        var attrs = obj.attributes || [];\n        for (var i = 0; i < attrs.length; i++) {\n            s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n        }\n        s += '>';\n        if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n        s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n        return s;\n    }\n    if (isArray(obj)) {\n        if (obj.length === 0) { return '[]'; }\n        var xs = arrObjKeys(obj, inspect);\n        if (indent && !singleLineValues(xs)) {\n            return '[' + indentedJoin(xs, indent) + ']';\n        }\n        return '[ ' + $join.call(xs, ', ') + ' ]';\n    }\n    if (isError(obj)) {\n        var parts = arrObjKeys(obj, inspect);\n        if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n            return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n        }\n        if (parts.length === 0) { return '[' + String(obj) + ']'; }\n        return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n    }\n    if (typeof obj === 'object' && customInspect) {\n        if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n            return utilInspect(obj, { depth: maxDepth - depth });\n        } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n            return obj.inspect();\n        }\n    }\n    if (isMap(obj)) {\n        var mapParts = [];\n        if (mapForEach) {\n            mapForEach.call(obj, function (value, key) {\n                mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n            });\n        }\n        return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n    }\n    if (isSet(obj)) {\n        var setParts = [];\n        if (setForEach) {\n            setForEach.call(obj, function (value) {\n                setParts.push(inspect(value, obj));\n            });\n        }\n        return collectionOf('Set', setSize.call(obj), setParts, indent);\n    }\n    if (isWeakMap(obj)) {\n        return weakCollectionOf('WeakMap');\n    }\n    if (isWeakSet(obj)) {\n        return weakCollectionOf('WeakSet');\n    }\n    if (isWeakRef(obj)) {\n        return weakCollectionOf('WeakRef');\n    }\n    if (isNumber(obj)) {\n        return markBoxed(inspect(Number(obj)));\n    }\n    if (isBigInt(obj)) {\n        return markBoxed(inspect(bigIntValueOf.call(obj)));\n    }\n    if (isBoolean(obj)) {\n        return markBoxed(booleanValueOf.call(obj));\n    }\n    if (isString(obj)) {\n        return markBoxed(inspect(String(obj)));\n    }\n    // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n    /* eslint-env browser */\n    if (typeof window !== 'undefined' && obj === window) {\n        return '{ [object Window] }';\n    }\n    if (\n        (typeof globalThis !== 'undefined' && obj === globalThis)\n        || (typeof global !== 'undefined' && obj === global)\n    ) {\n        return '{ [object globalThis] }';\n    }\n    if (!isDate(obj) && !isRegExp(obj)) {\n        var ys = arrObjKeys(obj, inspect);\n        var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n        var protoTag = obj instanceof Object ? '' : 'null prototype';\n        var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n        var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n        var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n        if (ys.length === 0) { return tag + '{}'; }\n        if (indent) {\n            return tag + '{' + indentedJoin(ys, indent) + '}';\n        }\n        return tag + '{ ' + $join.call(ys, ', ') + ' }';\n    }\n    return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n    var style = opts.quoteStyle || defaultStyle;\n    var quoteChar = quotes[style];\n    return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n    return $replace.call(String(s), /\"/g, '&quot;');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n    if (hasShammedSymbols) {\n        return obj && typeof obj === 'object' && obj instanceof Symbol;\n    }\n    if (typeof obj === 'symbol') {\n        return true;\n    }\n    if (!obj || typeof obj !== 'object' || !symToString) {\n        return false;\n    }\n    try {\n        symToString.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isBigInt(obj) {\n    if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n        return false;\n    }\n    try {\n        bigIntValueOf.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n    return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n    return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n    if (f.name) { return f.name; }\n    var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n    if (m) { return m[1]; }\n    return null;\n}\n\nfunction indexOf(xs, x) {\n    if (xs.indexOf) { return xs.indexOf(x); }\n    for (var i = 0, l = xs.length; i < l; i++) {\n        if (xs[i] === x) { return i; }\n    }\n    return -1;\n}\n\nfunction isMap(x) {\n    if (!mapSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        mapSize.call(x);\n        try {\n            setSize.call(x);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof Map; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakMap(x) {\n    if (!weakMapHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakMapHas.call(x, weakMapHas);\n        try {\n            weakSetHas.call(x, weakSetHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakRef(x) {\n    if (!weakRefDeref || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakRefDeref.call(x);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isSet(x) {\n    if (!setSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        setSize.call(x);\n        try {\n            mapSize.call(x);\n        } catch (m) {\n            return true;\n        }\n        return x instanceof Set; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakSet(x) {\n    if (!weakSetHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakSetHas.call(x, weakSetHas);\n        try {\n            weakMapHas.call(x, weakMapHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isElement(x) {\n    if (!x || typeof x !== 'object') { return false; }\n    if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n        return true;\n    }\n    return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n    if (str.length > opts.maxStringLength) {\n        var remaining = str.length - opts.maxStringLength;\n        var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n        return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n    }\n    var quoteRE = quoteREs[opts.quoteStyle || 'single'];\n    quoteRE.lastIndex = 0;\n    // eslint-disable-next-line no-control-regex\n    var s = $replace.call($replace.call(str, quoteRE, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n    return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n    var n = c.charCodeAt(0);\n    var x = {\n        8: 'b',\n        9: 't',\n        10: 'n',\n        12: 'f',\n        13: 'r'\n    }[n];\n    if (x) { return '\\\\' + x; }\n    return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n    return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n    return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n    var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n    return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n    for (var i = 0; i < xs.length; i++) {\n        if (indexOf(xs[i], '\\n') >= 0) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction getIndent(opts, depth) {\n    var baseIndent;\n    if (opts.indent === '\\t') {\n        baseIndent = '\\t';\n    } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n        baseIndent = $join.call(Array(opts.indent + 1), ' ');\n    } else {\n        return null;\n    }\n    return {\n        base: baseIndent,\n        prev: $join.call(Array(depth + 1), baseIndent)\n    };\n}\n\nfunction indentedJoin(xs, indent) {\n    if (xs.length === 0) { return ''; }\n    var lineJoiner = '\\n' + indent.prev + indent.base;\n    return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n    var isArr = isArray(obj);\n    var xs = [];\n    if (isArr) {\n        xs.length = obj.length;\n        for (var i = 0; i < obj.length; i++) {\n            xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n        }\n    }\n    var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n    var symMap;\n    if (hasShammedSymbols) {\n        symMap = {};\n        for (var k = 0; k < syms.length; k++) {\n            symMap['$' + syms[k]] = syms[k];\n        }\n    }\n\n    for (var key in obj) { // eslint-disable-line no-restricted-syntax\n        if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n            // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n            continue; // eslint-disable-line no-restricted-syntax, no-continue\n        } else if ($test.call(/[^\\w$]/, key)) {\n            xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n        } else {\n            xs.push(key + ': ' + inspect(obj[key], obj));\n        }\n    }\n    if (typeof gOPS === 'function') {\n        for (var j = 0; j < syms.length; j++) {\n            if (isEnumerable.call(obj, syms[j])) {\n                xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n            }\n        }\n    }\n    return xs;\n}\n","'use strict';\n\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\n\n/*\n* This function traverses the list returning the node corresponding to the given key.\n*\n* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list.\n* By doing so, all the recently used nodes can be accessed relatively quickly.\n*/\n/** @type {import('./list.d.ts').listGetNode} */\n// eslint-disable-next-line consistent-return\nvar listGetNode = function (list, key, isDelete) {\n\t/** @type {typeof list | NonNullable<(typeof list)['next']>} */\n\tvar prev = list;\n\t/** @type {(typeof list)['next']} */\n\tvar curr;\n\t// eslint-disable-next-line eqeqeq\n\tfor (; (curr = prev.next) != null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tif (!isDelete) {\n\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\tcurr.next = /** @type {NonNullable<typeof list.next>} */ (list.next);\n\t\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\t}\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\n/** @type {import('./list.d.ts').listGet} */\nvar listGet = function (objects, key) {\n\tif (!objects) {\n\t\treturn void undefined;\n\t}\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\n/** @type {import('./list.d.ts').listSet} */\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = /** @type {import('./list.d.ts').ListNode<typeof value, typeof key>} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t});\n\t}\n};\n/** @type {import('./list.d.ts').listHas} */\nvar listHas = function (objects, key) {\n\tif (!objects) {\n\t\treturn false;\n\t}\n\treturn !!listGetNode(objects, key);\n};\n/** @type {import('./list.d.ts').listDelete} */\n// eslint-disable-next-line consistent-return\nvar listDelete = function (objects, key) {\n\tif (objects) {\n\t\treturn listGetNode(objects, key, true);\n\t}\n};\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannelList() {\n\t/** @typedef {ReturnType<typeof getSideChannelList>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {import('./list.d.ts').RootNode<V, K> | undefined} */ var $o;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tvar root = $o && $o.next;\n\t\t\tvar deletedNode = listDelete($o, key);\n\t\t\tif (deletedNode && root && root === deletedNode) {\n\t\t\t\t$o = void undefined;\n\t\t\t}\n\t\t\treturn !!deletedNode;\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn listGet($o, key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn listHas($o, key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$o) {\n\t\t\t\t// Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head\n\t\t\t\t$o = {\n\t\t\t\t\tnext: void undefined\n\t\t\t\t};\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tlistSet(/** @type {NonNullable<typeof $o>} */ ($o), key, value);\n\t\t}\n\t};\n\t// @ts-expect-error TODO: figure out why this is erroring\n\treturn channel;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\nvar $Map = GetIntrinsic('%Map%', true);\n\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => V} */\nvar $mapGet = callBound('Map.prototype.get', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K, value: V) => void} */\nvar $mapSet = callBound('Map.prototype.set', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapHas = callBound('Map.prototype.has', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapDelete = callBound('Map.prototype.delete', true);\n/** @type {<K, V>(thisArg: Map<K, V>) => number} */\nvar $mapSize = callBound('Map.prototype.size', true);\n\n/** @type {import('.')} */\nmodule.exports = !!$Map && /** @type {Exclude<import('.'), false>} */ function getSideChannelMap() {\n\t/** @typedef {ReturnType<typeof getSideChannelMap>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {Map<K, V> | undefined} */ var $m;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tif ($m) {\n\t\t\t\tvar result = $mapDelete($m, key);\n\t\t\t\tif ($mapSize($m) === 0) {\n\t\t\t\t\t$m = void undefined;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($m) {\n\t\t\t\treturn $mapGet($m, key);\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($m) {\n\t\t\t\treturn $mapHas($m, key);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$m) {\n\t\t\t\t// @ts-expect-error TS can't handle narrowing a variable inside a closure\n\t\t\t\t$m = new $Map();\n\t\t\t}\n\t\t\t$mapSet($m, key, value);\n\t\t}\n\t};\n\n\t// @ts-expect-error TODO: figure out why TS is erroring here\n\treturn channel;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\nvar getSideChannelMap = require('side-channel-map');\n\nvar $TypeError = require('es-errors/type');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\n\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => V} */\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K, value: V) => void} */\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapDelete = callBound('WeakMap.prototype.delete', true);\n\n/** @type {import('.')} */\nmodule.exports = $WeakMap\n\t? /** @type {Exclude<import('.'), false>} */ function getSideChannelWeakMap() {\n\t\t/** @typedef {ReturnType<typeof getSideChannelWeakMap>} Channel */\n\t\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t\t/** @type {WeakMap<K & object, V> | undefined} */ var $wm;\n\t\t/** @type {Channel | undefined} */ var $m;\n\n\t\t/** @type {Channel} */\n\t\tvar channel = {\n\t\t\tassert: function (key) {\n\t\t\t\tif (!channel.has(key)) {\n\t\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t\t}\n\t\t\t},\n\t\t\t'delete': function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapDelete($wm, key);\n\t\t\t\t\t}\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif ($m) {\n\t\t\t\t\t\treturn $m['delete'](key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tget: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $m && $m.get(key);\n\t\t\t},\n\t\t\thas: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!$m && $m.has(key);\n\t\t\t},\n\t\t\tset: function (key, value) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif (!$wm) {\n\t\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t\t}\n\t\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif (!$m) {\n\t\t\t\t\t\t$m = getSideChannelMap();\n\t\t\t\t\t}\n\t\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\t\t/** @type {NonNullable<typeof $m>} */ ($m).set(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// @ts-expect-error TODO: figure out why this is erroring\n\t\treturn channel;\n\t}\n\t: getSideChannelMap;\n","'use strict';\n\nvar $TypeError = require('es-errors/type');\nvar inspect = require('object-inspect');\nvar getSideChannelList = require('side-channel-list');\nvar getSideChannelMap = require('side-channel-map');\nvar getSideChannelWeakMap = require('side-channel-weakmap');\n\nvar makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList;\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannel() {\n\t/** @typedef {ReturnType<typeof getSideChannel>} Channel */\n\n\t/** @type {Channel | undefined} */ var $channelData;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\treturn !!$channelData && $channelData['delete'](key);\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn $channelData && $channelData.get(key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn !!$channelData && $channelData.has(key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$channelData) {\n\t\t\t\t$channelData = makeChannel();\n\t\t\t}\n\n\t\t\t$channelData.set(key, value);\n\t\t}\n\t};\n\t// @ts-expect-error TODO: figure out why this is erroring\n\treturn channel;\n};\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n    'default': Format.RFC3986,\n    formatters: {\n        RFC1738: function (value) {\n            return replace.call(value, percentTwenties, '+');\n        },\n        RFC3986: function (value) {\n            return String(value);\n        }\n    },\n    RFC1738: Format.RFC1738,\n    RFC3986: Format.RFC3986\n};\n","'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    while (queue.length > 1) {\n        var item = queue.pop();\n        var obj = item.obj[item.prop];\n\n        if (isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted.push(obj[j]);\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? Object.create(null) : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar merge = function merge(target, source, options) {\n    /* eslint no-param-reassign: 0 */\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object') {\n        if (isArray(target)) {\n            target.push(source);\n        } else if (target && typeof target === 'object') {\n            if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n                target[source] = true;\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (!target || typeof target !== 'object') {\n        return [target].concat(source);\n    }\n\n    var mergeTarget = target;\n    if (isArray(target) && !isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (isArray(target) && isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                var targetItem = target[i];\n                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n                    target[i] = merge(targetItem, item, options);\n                } else {\n                    target.push(item);\n                }\n            } else {\n                target[i] = item;\n            }\n        });\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            acc[key] = merge(acc[key], value, options);\n        } else {\n            acc[key] = value;\n        }\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        acc[key] = source[key];\n        return acc;\n    }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n    var strWithoutPlus = str.replace(/\\+/g, ' ');\n    if (charset === 'iso-8859-1') {\n        // unescape never throws, no try...catch needed:\n        return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n    }\n    // utf-8\n    try {\n        return decodeURIComponent(strWithoutPlus);\n    } catch (e) {\n        return strWithoutPlus;\n    }\n};\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = str;\n    if (typeof str === 'symbol') {\n        string = Symbol.prototype.toString.call(str);\n    } else if (typeof str !== 'string') {\n        string = String(str);\n    }\n\n    if (charset === 'iso-8859-1') {\n        return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n            return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n        });\n    }\n\n    var out = '';\n    for (var i = 0; i < string.length; ++i) {\n        var c = string.charCodeAt(i);\n\n        if (\n            c === 0x2D // -\n            || c === 0x2E // .\n            || c === 0x5F // _\n            || c === 0x7E // ~\n            || (c >= 0x30 && c <= 0x39) // 0-9\n            || (c >= 0x41 && c <= 0x5A) // a-z\n            || (c >= 0x61 && c <= 0x7A) // A-Z\n            || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n        ) {\n            out += string.charAt(i);\n            continue;\n        }\n\n        if (c < 0x80) {\n            out = out + hexTable[c];\n            continue;\n        }\n\n        if (c < 0x800) {\n            out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        if (c < 0xD800 || c >= 0xE000) {\n            out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        i += 1;\n        c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n        /* eslint operator-linebreak: [2, \"before\"] */\n        out += hexTable[0xF0 | (c >> 18)]\n            + hexTable[0x80 | ((c >> 12) & 0x3F)]\n            + hexTable[0x80 | ((c >> 6) & 0x3F)]\n            + hexTable[0x80 | (c & 0x3F)];\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = [];\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n                queue.push({ obj: obj, prop: key });\n                refs.push(val);\n            }\n        }\n    }\n\n    compactQueue(queue);\n\n    return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (!obj || typeof obj !== 'object') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n    return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n    if (isArray(val)) {\n        var mapped = [];\n        for (var i = 0; i < val.length; i += 1) {\n            mapped.push(fn(val[i]));\n        }\n        return mapped;\n    }\n    return fn(val);\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    combine: combine,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isRegExp: isRegExp,\n    maybeMap: maybeMap,\n    merge: merge\n};\n","'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) {\n        return prefix + '[]';\n    },\n    comma: 'comma',\n    indices: function indices(prefix, key) {\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) {\n        return prefix;\n    }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n    addQueryPrefix: false,\n    allowDots: false,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    delimiter: '&',\n    encode: true,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    format: defaultFormat,\n    formatter: formats.formatters[defaultFormat],\n    // deprecated\n    indices: false,\n    serializeDate: function serializeDate(date) {\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n    return typeof v === 'string'\n        || typeof v === 'number'\n        || typeof v === 'boolean'\n        || typeof v === 'symbol'\n        || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n    object,\n    prefix,\n    generateArrayPrefix,\n    commaRoundTrip,\n    strictNullHandling,\n    skipNulls,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    format,\n    formatter,\n    encodeValuesOnly,\n    charset,\n    sideChannel\n) {\n    var obj = object;\n\n    var tmpSc = sideChannel;\n    var step = 0;\n    var findFlag = false;\n    while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n        // Where object last appeared in the ref tree\n        var pos = tmpSc.get(object);\n        step += 1;\n        if (typeof pos !== 'undefined') {\n            if (pos === step) {\n                throw new RangeError('Cyclic object value');\n            } else {\n                findFlag = true; // Break while\n            }\n        }\n        if (typeof tmpSc.get(sentinel) === 'undefined') {\n            step = 0;\n        }\n    }\n\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        obj = utils.maybeMap(obj, function (value) {\n            if (value instanceof Date) {\n                return serializeDate(value);\n            }\n            return value;\n        });\n    }\n\n    if (obj === null) {\n        if (strictNullHandling) {\n            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n        }\n\n        obj = '';\n    }\n\n    if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        // we need to join elements in\n        if (encodeValuesOnly && encoder) {\n            obj = utils.maybeMap(obj, encoder);\n        }\n        objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n    } else if (isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? prefix + '[]' : prefix;\n\n    for (var j = 0; j < objKeys.length; ++j) {\n        var key = objKeys[j];\n        var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n        if (skipNulls && value === null) {\n            continue;\n        }\n\n        var keyPrefix = isArray(obj)\n            ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, key) : adjustedPrefix\n            : adjustedPrefix + (allowDots ? '.' + key : '[' + key + ']');\n\n        sideChannel.set(object, step);\n        var valueSideChannel = getSideChannel();\n        valueSideChannel.set(sentinel, sideChannel);\n        pushToArray(values, stringify(\n            value,\n            keyPrefix,\n            generateArrayPrefix,\n            commaRoundTrip,\n            strictNullHandling,\n            skipNulls,\n            generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            format,\n            formatter,\n            encodeValuesOnly,\n            charset,\n            valueSideChannel\n        ));\n    }\n\n    return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var charset = opts.charset || defaults.charset;\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n\n    var format = formats['default'];\n    if (typeof opts.format !== 'undefined') {\n        if (!has.call(formats.formatters, opts.format)) {\n            throw new TypeError('Unknown format option provided.');\n        }\n        format = opts.format;\n    }\n    var formatter = formats.formatters[format];\n\n    var filter = defaults.filter;\n    if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n        filter = opts.filter;\n    }\n\n    return {\n        addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n        allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n        encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n        encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n        encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n        filter: filter,\n        format: format,\n        formatter: formatter,\n        serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n        skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n        sort: typeof opts.sort === 'function' ? opts.sort : null,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = normalizeStringifyOptions(opts);\n\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var arrayFormat;\n    if (opts && opts.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = opts.arrayFormat;\n    } else if (opts && 'indices' in opts) {\n        arrayFormat = opts.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = 'indices';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n    if (opts && 'commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n        throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n    }\n    var commaRoundTrip = generateArrayPrefix === 'comma' && opts && opts.commaRoundTrip;\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (options.sort) {\n        objKeys.sort(options.sort);\n    }\n\n    var sideChannel = getSideChannel();\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (options.skipNulls && obj[key] === null) {\n            continue;\n        }\n        pushToArray(keys, stringify(\n            obj[key],\n            key,\n            generateArrayPrefix,\n            commaRoundTrip,\n            options.strictNullHandling,\n            options.skipNulls,\n            options.encode ? options.encoder : null,\n            options.filter,\n            options.sort,\n            options.allowDots,\n            options.serializeDate,\n            options.format,\n            options.formatter,\n            options.encodeValuesOnly,\n            options.charset,\n            sideChannel\n        ));\n    }\n\n    var joined = keys.join(options.delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    if (options.charsetSentinel) {\n        if (options.charset === 'iso-8859-1') {\n            // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n            prefix += 'utf8=%26%2310003%3B&';\n        } else {\n            // encodeURIComponent('✓')\n            prefix += 'utf8=%E2%9C%93&';\n        }\n    }\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n    allowDots: false,\n    allowPrototypes: false,\n    allowSparse: false,\n    arrayLimit: 20,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    comma: false,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    ignoreQueryPrefix: false,\n    interpretNumericEntities: false,\n    parameterLimit: 1000,\n    parseArrays: true,\n    plainObjects: false,\n    strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n    return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n        return String.fromCharCode(parseInt(numberStr, 10));\n    });\n};\n\nvar parseArrayValue = function (val, options) {\n    if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n        return val.split(',');\n    }\n\n    return val;\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = { __proto__: null };\n\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n    var parts = cleanStr.split(options.delimiter, limit);\n    var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n    var i;\n\n    var charset = options.charset;\n    if (options.charsetSentinel) {\n        for (i = 0; i < parts.length; ++i) {\n            if (parts[i].indexOf('utf8=') === 0) {\n                if (parts[i] === charsetSentinel) {\n                    charset = 'utf-8';\n                } else if (parts[i] === isoSentinel) {\n                    charset = 'iso-8859-1';\n                }\n                skipIndex = i;\n                i = parts.length; // The eslint settings do not allow break;\n            }\n        }\n    }\n\n    for (i = 0; i < parts.length; ++i) {\n        if (i === skipIndex) {\n            continue;\n        }\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key, val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder, charset, 'key');\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n            val = utils.maybeMap(\n                parseArrayValue(part.slice(pos + 1), options),\n                function (encodedVal) {\n                    return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n                }\n            );\n        }\n\n        if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n            val = interpretNumericEntities(val);\n        }\n\n        if (part.indexOf('[]=') > -1) {\n            val = isArray(val) ? [val] : val;\n        }\n\n        if (has.call(obj, key)) {\n            obj[key] = utils.combine(obj[key], val);\n        } else {\n            obj[key] = val;\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n    var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]' && options.parseArrays) {\n            obj = [].concat(leaf);\n        } else {\n            obj = options.plainObjects ? Object.create(null) : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var index = parseInt(cleanRoot, 10);\n            if (!options.parseArrays && cleanRoot === '') {\n                obj = { 0: leaf };\n            } else if (\n                !isNaN(index)\n                && root !== cleanRoot\n                && String(index) === cleanRoot\n                && index >= 0\n                && (options.parseArrays && index <= options.arrayLimit)\n            ) {\n                obj = [];\n                obj[index] = leaf;\n            } else if (cleanRoot !== '__proto__') {\n                obj[cleanRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n    if (!givenKey) {\n        return;\n    }\n\n    // Transform dot notation to bracket notation\n    var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n    // The regex chunks\n\n    var brackets = /(\\[[^[\\]]*])/;\n    var child = /(\\[[^[\\]]*])/g;\n\n    // Get the parent\n\n    var segment = options.depth > 0 && brackets.exec(key);\n    var parent = segment ? key.slice(0, segment.index) : key;\n\n    // Stash the parent if it exists\n\n    var keys = [];\n    if (parent) {\n        // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys.push(parent);\n    }\n\n    // Loop through children appending to the array until we hit depth\n\n    var i = 0;\n    while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n        i += 1;\n        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n        keys.push(segment[1]);\n    }\n\n    // If there's a remainder, just add whatever is left\n\n    if (segment) {\n        keys.push('[' + key.slice(segment.index) + ']');\n    }\n\n    return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n    var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n    return {\n        allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n        allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n        allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n        arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n        decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n        delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n        // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n        depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n        ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n        interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n        parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n        parseArrays: opts.parseArrays !== false,\n        plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (str, opts) {\n    var options = normalizeParseOptions(opts);\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? Object.create(null) : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? Object.create(null) : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    if (options.allowSparse === true) {\n        return obj;\n    }\n\n    return utils.compact(obj);\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n    formats: formats,\n    parse: parse,\n    stringify: stringify\n};\n","/*\n * Copyright Joyent, Inc. and other Node contributors.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to permit\n * persons to whom the Software is furnished to do so, subject to the\n * following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n * USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n'use strict';\n\nvar punycode = require('punycode');\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n/*\n * define these here so at least they only have to be\n * compiled once on the first module load.\n */\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n  portPattern = /:[0-9]*$/,\n\n  // Special case for a simple path URL\n  simplePathPattern = /^(\\/\\/?(?!\\/)[^?\\s]*)(\\?[^\\s]*)?$/,\n\n  /*\n   * RFC 2396: characters reserved for delimiting URLs.\n   * We actually just auto-escape these.\n   */\n  delims = [\n    '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'\n  ],\n\n  // RFC 2396: characters not allowed for various reasons.\n  unwise = [\n    '{', '}', '|', '\\\\', '^', '`'\n  ].concat(delims),\n\n  // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n  autoEscape = ['\\''].concat(unwise),\n  /*\n   * Characters that are never ever allowed in a hostname.\n   * Note that any invalid chars are also handled, but these\n   * are the ones that are *expected* to be seen, so we fast-path\n   * them.\n   */\n  nonHostChars = [\n    '%', '/', '?', ';', '#'\n  ].concat(autoEscape),\n  hostEndingChars = [\n    '/', '?', '#'\n  ],\n  hostnameMaxLen = 255,\n  hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n  hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n  // protocols that can allow \"unsafe\" and \"unwise\" chars.\n  unsafeProtocol = {\n    javascript: true,\n    'javascript:': true\n  },\n  // protocols that never have a hostname.\n  hostlessProtocol = {\n    javascript: true,\n    'javascript:': true\n  },\n  // protocols that always contain a // bit.\n  slashedProtocol = {\n    http: true,\n    https: true,\n    ftp: true,\n    gopher: true,\n    file: true,\n    'http:': true,\n    'https:': true,\n    'ftp:': true,\n    'gopher:': true,\n    'file:': true\n  },\n  querystring = require('qs');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && typeof url === 'object' && url instanceof Url) { return url; }\n\n  var u = new Url();\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function (url, parseQueryString, slashesDenoteHost) {\n  if (typeof url !== 'string') {\n    throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n  }\n\n  /*\n   * Copy chrome, IE, opera backslash-handling behavior.\n   * Back slashes before the query string get converted to forward slashes\n   * See: https://code.google.com/p/chromium/issues/detail?id=25916\n   */\n  var queryIndex = url.indexOf('?'),\n    splitter = queryIndex !== -1 && queryIndex < url.indexOf('#') ? '?' : '#',\n    uSplit = url.split(splitter),\n    slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n\n  var rest = url;\n\n  /*\n   * trim before proceeding.\n   * This is to support parse stuff like \"  http://foo.com  \\n\"\n   */\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.path = rest;\n      this.href = rest;\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n        if (parseQueryString) {\n          this.query = querystring.parse(this.search.substr(1));\n        } else {\n          this.query = this.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        this.search = '';\n        this.query = {};\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    this.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  }\n\n  /*\n   * figure out if it's got a host\n   * user@server is *always* interpreted as a hostname, and url\n   * resolution will treat //foo/bar as host=foo,path=bar because that's\n   * how the browser resolves relative URLs.\n   */\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@/]+@[^@/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) {\n\n    /*\n     * there's a hostname.\n     * the first instance of /, ?, ;, or # ends the host.\n     *\n     * If there is an @ in the hostname, then non-host chars *are* allowed\n     * to the left of the last @ sign, unless some host-ending character\n     * comes *before* the @-sign.\n     * URLs are obnoxious.\n     *\n     * ex:\n     * http://a@b@c/ => user:a@b host:c\n     * http://a@b?@c => user:a host:c path:/?@c\n     */\n\n    /*\n     * v0.12 TODO(isaacs): This is not quite how Chrome does things.\n     * Review our test case against browsers more comprehensively.\n     */\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (var i = 0; i < hostEndingChars.length; i++) {\n      var hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; }\n    }\n\n    /*\n     * at this point, either we have an explicit point where the\n     * auth portion cannot go past, or the last @ char is the decider.\n     */\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      /*\n       * atSign must be in auth portion.\n       * http://a@b/c@d => host:b auth:a path:/c@d\n       */\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    /*\n     * Now we have a portion which is definitely the auth.\n     * Pull that off.\n     */\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = decodeURIComponent(auth);\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (var i = 0; i < nonHostChars.length; i++) {\n      var hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; }\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1) { hostEnd = rest.length; }\n\n    this.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost();\n\n    /*\n     * we've indicated that there is a hostname,\n     * so even if it's empty, it has to be present.\n     */\n    this.hostname = this.hostname || '';\n\n    /*\n     * if hostname begins with [ and ends with ]\n     * assume that it's an IPv6 address.\n     */\n    var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (var i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) { continue; }\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              /*\n               * we replace non-ASCII char with a temporary placeholder\n               * we need this to make sure size of hostname is not\n               * broken by replacing non-ASCII by nothing\n               */\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      this.hostname = this.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      /*\n       * IDNA Support: Returns a punycoded representation of \"domain\".\n       * It only converts parts of the domain name that\n       * have non-ASCII characters, i.e. it doesn't matter if\n       * you call it with a domain that already is ASCII-only.\n       */\n      this.hostname = punycode.toASCII(this.hostname);\n    }\n\n    var p = this.port ? ':' + this.port : '';\n    var h = this.hostname || '';\n    this.host = h + p;\n    this.href += this.host;\n\n    /*\n     * strip [ and ] from the hostname\n     * the host field still retains them, though\n     */\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  }\n\n  /*\n   * now rest is set to the post-host stuff.\n   * chop off any delim chars.\n   */\n  if (!unsafeProtocol[lowerProto]) {\n\n    /*\n     * First, make 100% sure that any \"autoEscape\" chars get\n     * escaped, even if encodeURIComponent doesn't think they\n     * need to be.\n     */\n    for (var i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1) { continue; }\n      var esc = encodeURIComponent(ae);\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n      rest = rest.split(ae).join(esc);\n    }\n  }\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    this.query = rest.substr(qm + 1);\n    if (parseQueryString) {\n      this.query = querystring.parse(this.query);\n    }\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    this.search = '';\n    this.query = {};\n  }\n  if (rest) { this.pathname = rest; }\n  if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {\n    this.pathname = '/';\n  }\n\n  // to support http.request\n  if (this.pathname || this.search) {\n    var p = this.pathname || '';\n    var s = this.search || '';\n    this.path = p + s;\n  }\n\n  // finally, reconstruct the href based on what has been validated.\n  this.href = this.format();\n  return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n  /*\n   * ensure it's an object, and not a string url.\n   * If it's an obj, this is a no-op.\n   * this way, you can call url_format() on strings\n   * to clean up potentially wonky urls.\n   */\n  if (typeof obj === 'string') { obj = urlParse(obj); }\n  if (!(obj instanceof Url)) { return Url.prototype.format.call(obj); }\n  return obj.format();\n}\n\nUrl.prototype.format = function () {\n  var auth = this.auth || '';\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = this.protocol || '',\n    pathname = this.pathname || '',\n    hash = this.hash || '',\n    host = false,\n    query = '';\n\n  if (this.host) {\n    host = auth + this.host;\n  } else if (this.hostname) {\n    host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']');\n    if (this.port) {\n      host += ':' + this.port;\n    }\n  }\n\n  if (this.query && typeof this.query === 'object' && Object.keys(this.query).length) {\n    query = querystring.stringify(this.query, {\n      arrayFormat: 'repeat',\n      addQueryPrefix: false\n    });\n  }\n\n  var search = this.search || (query && ('?' + query)) || '';\n\n  if (protocol && protocol.substr(-1) !== ':') { protocol += ':'; }\n\n  /*\n   * only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n   * unless they had them to begin with.\n   */\n  if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') { pathname = '/' + pathname; }\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') { hash = '#' + hash; }\n  if (search && search.charAt(0) !== '?') { search = '?' + search; }\n\n  pathname = pathname.replace(/[?#]/g, function (match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n\n  return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function (relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) { return relative; }\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function (relative) {\n  if (typeof relative === 'string') {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  }\n\n  /*\n   * hash is always overridden, no matter what.\n   * even href=\"\" will remove it.\n   */\n  result.hash = relative.hash;\n\n  // if the relative url is empty, then there's nothing left to do here.\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  }\n\n  // hrefs like //foo/bar always cut to the protocol.\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol') { result[rkey] = relative[rkey]; }\n    }\n\n    // urlParse appends trailing / to urls like http://www.example.com\n    if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) {\n      result.pathname = '/';\n      result.path = result.pathname;\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    /*\n     * if it's a known url protocol, then changing\n     * the protocol does weird things\n     * first, if it's not file:, then we MUST have a host,\n     * and if there was a path\n     * to begin with, then we MUST have a path.\n     * if it is file:, then the host is dropped,\n     * because that's known to be hostless.\n     * anything else is assumed to be absolute.\n     */\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      var relPath = (relative.pathname || '').split('/');\n      while (relPath.length && !(relative.host = relPath.shift())) { }\n      if (!relative.host) { relative.host = ''; }\n      if (!relative.hostname) { relative.hostname = ''; }\n      if (relPath[0] !== '') { relPath.unshift(''); }\n      if (relPath.length < 2) { relPath.unshift(''); }\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port;\n    // to support http.request\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = result.pathname && result.pathname.charAt(0) === '/',\n    isRelAbs = relative.host || relative.pathname && relative.pathname.charAt(0) === '/',\n    mustEndAbs = isRelAbs || isSourceAbs || (result.host && relative.pathname),\n    removeAllDots = mustEndAbs,\n    srcPath = result.pathname && result.pathname.split('/') || [],\n    relPath = relative.pathname && relative.pathname.split('/') || [],\n    psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n  /*\n   * if the url is a non-slashed url, then relative\n   * links like ../.. should be able\n   * to crawl up to the hostname, as well.  This is strange.\n   * result.protocol has already been set by now.\n   * Later on, put the first path part into the host field.\n   */\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n    if (result.host) {\n      if (srcPath[0] === '') { srcPath[0] = result.host; } else { srcPath.unshift(result.host); }\n    }\n    result.host = '';\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n      if (relative.host) {\n        if (relPath[0] === '') { relPath[0] = relative.host; } else { relPath.unshift(relative.host); }\n      }\n      relative.host = null;\n    }\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = relative.host || relative.host === '' ? relative.host : result.host;\n    result.hostname = relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath;\n    // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    /*\n     * it's relative\n     * throw away the existing file, and take the new path instead.\n     */\n    if (!srcPath) { srcPath = []; }\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (relative.search != null) {\n    /*\n     * just pull out the search.\n     * like href='?foo'.\n     * Put this after the other two cases because it simplifies the booleans\n     */\n    if (psychotic) {\n      result.host = srcPath.shift();\n      result.hostname = result.host;\n      /*\n       * occationaly the auth can get stuck only in host\n       * this especially happens in cases like\n       * url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n       */\n      var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.hostname = authInHost.shift();\n        result.host = result.hostname;\n      }\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    // to support http.request\n    if (result.pathname !== null || result.search !== null) {\n      result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    /*\n     * no path at all.  easy.\n     * we've already handled the other stuff above.\n     */\n    result.pathname = null;\n    // to support http.request\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  /*\n   * if a url ENDs in . or .., then it must get a trailing slash.\n   * however, if it ends in anything else non-slashy,\n   * then it must NOT get a trailing slash.\n   */\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..') || last === '';\n\n  /*\n   * strip single dots, resolve double dots to parent dir\n   * if the path tries to go above the root, `up` ends up > 0\n   */\n  var up = 0;\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' || (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n  // put the host back\n  if (psychotic) {\n    result.hostname = isAbsolute ? '' : srcPath.length ? srcPath.shift() : '';\n    result.host = result.hostname;\n    /*\n     * occationaly the auth can get stuck only in host\n     * this especially happens in cases like\n     * url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n     */\n    var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.hostname = authInHost.shift();\n      result.host = result.hostname;\n    }\n  }\n\n  mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (srcPath.length > 0) {\n    result.pathname = srcPath.join('/');\n  } else {\n    result.pathname = null;\n    result.path = null;\n  }\n\n  // to support request.http\n  if (result.pathname !== null || result.search !== null) {\n    result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n  }\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function () {\n  var host = this.host;\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) { this.hostname = host; }\n};\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// @ts-nocheck\nimport _url from '_url';\n\nexport function pathToFileURL(s: string) {\n  return s;\n}\n\nexport * from '_url';\n\nconst url = { ..._url, pathToFileURL };\n\nexport default url;\n",null,null,null,null,null,null,null,null,null,null,null,"/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { memfs } from 'memfs';\n\nconst { fs } = memfs({ '/tmp': null });\n\nexport const {\n  appendFile,\n  appendFileSync,\n  access,\n  accessSync,\n  chown,\n  chownSync,\n  chmod,\n  chmodSync,\n  close,\n  closeSync,\n  copyFile,\n  copyFileSync,\n  cp,\n  cpSync,\n  createReadStream,\n  createWriteStream,\n  exists,\n  existsSync,\n  fchown,\n  fchownSync,\n  fchmod,\n  fchmodSync,\n  fdatasync,\n  fdatasyncSync,\n  fstat,\n  fstatSync,\n  fsync,\n  fsyncSync,\n  ftruncate,\n  ftruncateSync,\n  futimes,\n  futimesSync,\n  lchown,\n  lchownSync,\n  lchmod,\n  lchmodSync,\n  link,\n  linkSync,\n  lstat,\n  lstatSync,\n  lutimes,\n  lutimesSync,\n  mkdir,\n  mkdirSync,\n  mkdtemp,\n  mkdtempSync,\n  open,\n  openSync,\n  opendir,\n  opendirSync,\n  readdir,\n  readdirSync,\n  read,\n  readSync,\n  readv,\n  readvSync,\n  readFile,\n  readFileSync,\n  readlink,\n  readlinkSync,\n  realpath,\n  realpathSync,\n  rename,\n  renameSync,\n  rm,\n  rmSync,\n  rmdir,\n  rmdirSync,\n  stat,\n  statfs,\n  statSync,\n  statfsSync,\n  symlink,\n  symlinkSync,\n  truncate,\n  truncateSync,\n  unwatchFile,\n  unlink,\n  unlinkSync,\n  utimes,\n  utimesSync,\n  watch,\n  watchFile,\n  writeFile,\n  writeFileSync,\n  write,\n  writeSync,\n  writev,\n  writevSync,\n  Dirent,\n  Stats,\n  ReadStream,\n  WriteStream,\n  constants,\n  promises,\n} = fs;\n\nexport default fs;\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport './process';\nimport './setImmediate';\nimport './buffer';\nimport './fs';\n\nself.global = self;\nself.__dirname = '/';\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class ValidationError extends Error {}\nexport type Validator = (arg: any, path: string, context: ValidatorContext) => any;\nexport type ValidatorContext = {\n  tChannelImpl: (names: '*' | string[], arg: any, path: string, context: ValidatorContext) => any;\n  binary: 'toBase64' | 'fromBase64' | 'buffer';\n  isUnderTest: () => boolean;\n};\nexport const scheme: { [key: string]: Validator } = {};\n\nexport function findValidator(type: string, method: string, kind: 'Initializer' | 'Event' | 'Params' | 'Result'): Validator {\n  const validator = maybeFindValidator(type, method, kind);\n  if (!validator)\n    throw new ValidationError(`Unknown scheme for ${kind}: ${type}.${method}`);\n  return validator;\n}\nexport function maybeFindValidator(type: string, method: string, kind: 'Initializer' | 'Event' | 'Params' | 'Result'): Validator | undefined {\n  const schemeName = type + (kind === 'Initializer' ? '' : method[0].toUpperCase() + method.substring(1)) + kind;\n  return scheme[schemeName];\n}\nexport function createMetadataValidator(): Validator {\n  return tOptional(scheme['Metadata']);\n}\n\nexport const tNumber: Validator = (arg: any, path: string, context: ValidatorContext) => {\n  if (arg instanceof Number)\n    return arg.valueOf();\n  if (typeof arg === 'number')\n    return arg;\n  throw new ValidationError(`${path}: expected number, got ${typeof arg}`);\n};\nexport const tBoolean: Validator = (arg: any, path: string, context: ValidatorContext) => {\n  if (arg instanceof Boolean)\n    return arg.valueOf();\n  if (typeof arg === 'boolean')\n    return arg;\n  throw new ValidationError(`${path}: expected boolean, got ${typeof arg}`);\n};\nexport const tString: Validator = (arg: any, path: string, context: ValidatorContext) => {\n  if (arg instanceof String)\n    return arg.valueOf();\n  if (typeof arg === 'string')\n    return arg;\n  throw new ValidationError(`${path}: expected string, got ${typeof arg}`);\n};\nexport const tBinary: Validator = (arg: any, path: string, context: ValidatorContext) => {\n  if (context.binary === 'fromBase64') {\n    if (arg instanceof String)\n      return Buffer.from(arg.valueOf(), 'base64');\n    if (typeof arg === 'string')\n      return Buffer.from(arg, 'base64');\n    throw new ValidationError(`${path}: expected base64-encoded buffer, got ${typeof arg}`);\n  }\n  if (context.binary === 'toBase64') {\n    if (!(arg instanceof Buffer))\n      throw new ValidationError(`${path}: expected Buffer, got ${typeof arg}`);\n    return (arg as Buffer).toString('base64');\n  }\n  if (context.binary === 'buffer') {\n    if (!(arg instanceof Buffer))\n      throw new ValidationError(`${path}: expected Buffer, got ${typeof arg}`);\n    return arg;\n  }\n  throw new ValidationError(`Unsupported binary behavior \"${context.binary}\"`);\n};\nexport const tUndefined: Validator = (arg: any, path: string, context: ValidatorContext) => {\n  if (Object.is(arg, undefined))\n    return arg;\n  throw new ValidationError(`${path}: expected undefined, got ${typeof arg}`);\n};\nexport const tAny: Validator = (arg: any, path: string, context: ValidatorContext) => {\n  return arg;\n};\nexport const tOptional = (v: Validator): Validator => {\n  return (arg: any, path: string, context: ValidatorContext) => {\n    if (Object.is(arg, undefined))\n      return arg;\n    return v(arg, path, context);\n  };\n};\nexport const tArray = (v: Validator): Validator => {\n  return (arg: any, path: string, context: ValidatorContext) => {\n    if (!Array.isArray(arg))\n      throw new ValidationError(`${path}: expected array, got ${typeof arg}`);\n    return arg.map((x, index) => v(x, path + '[' + index + ']', context));\n  };\n};\nexport const tObject = (s: { [key: string]: Validator }): Validator => {\n  return (arg: any, path: string, context: ValidatorContext) => {\n    if (Object.is(arg, null))\n      throw new ValidationError(`${path}: expected object, got null`);\n    if (typeof arg !== 'object')\n      throw new ValidationError(`${path}: expected object, got ${typeof arg}`);\n    const result: any = {};\n    for (const [key, v] of Object.entries(s)) {\n      const value = v(arg[key], path ? path + '.' + key : key, context);\n      if (!Object.is(value, undefined))\n        result[key] = value;\n    }\n    if (context.isUnderTest()) {\n      for (const [key, value] of Object.entries(arg)) {\n        if (key.startsWith('__testHook'))\n          result[key] = value;\n      }\n    }\n    return result;\n  };\n};\nexport const tEnum = (e: string[]): Validator => {\n  return (arg: any, path: string, context: ValidatorContext) => {\n    if (!e.includes(arg))\n      throw new ValidationError(`${path}: expected one of (${e.join('|')})`);\n    return arg;\n  };\n};\nexport const tChannel = (names: '*' | string[]): Validator => {\n  return (arg: any, path: string, context: ValidatorContext) => {\n    return context.tChannelImpl(names, arg, path, context);\n  };\n};\nexport const tType = (name: string): Validator => {\n  return (arg: any, path: string, context: ValidatorContext) => {\n    const v = scheme[name];\n    if (!v)\n      throw new ValidationError(path + ': unknown type \"' + name + '\"');\n    return v(arg, path, context);\n  };\n};\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is generated by generate_channels.js, do not edit manually.\n\nimport { scheme, tOptional, tObject, tBoolean, tNumber, tString, tAny, tEnum, tArray, tBinary, tChannel, tType } from './validatorPrimitives';\nexport type { Validator, ValidatorContext } from './validatorPrimitives';\nexport { ValidationError, findValidator, maybeFindValidator, createMetadataValidator } from './validatorPrimitives';\n\nscheme.StackFrame = tObject({\n  file: tString,\n  line: tNumber,\n  column: tNumber,\n  function: tOptional(tString),\n});\nscheme.Metadata = tObject({\n  location: tOptional(tObject({\n    file: tString,\n    line: tOptional(tNumber),\n    column: tOptional(tNumber),\n  })),\n  title: tOptional(tString),\n  internal: tOptional(tBoolean),\n  stepId: tOptional(tString),\n});\nscheme.ClientSideCallMetadata = tObject({\n  id: tNumber,\n  stack: tOptional(tArray(tType('StackFrame'))),\n});\nscheme.Point = tObject({\n  x: tNumber,\n  y: tNumber,\n});\nscheme.Rect = tObject({\n  x: tNumber,\n  y: tNumber,\n  width: tNumber,\n  height: tNumber,\n});\nscheme.SerializedValue = tObject({\n  n: tOptional(tNumber),\n  b: tOptional(tBoolean),\n  s: tOptional(tString),\n  v: tOptional(tEnum(['null', 'undefined', 'NaN', 'Infinity', '-Infinity', '-0'])),\n  d: tOptional(tString),\n  u: tOptional(tString),\n  bi: tOptional(tString),\n  ta: tOptional(tObject({\n    b: tBinary,\n    k: tEnum(['i8', 'ui8', 'ui8c', 'i16', 'ui16', 'i32', 'ui32', 'f32', 'f64', 'bi64', 'bui64']),\n  })),\n  e: tOptional(tObject({\n    m: tString,\n    n: tString,\n    s: tString,\n  })),\n  r: tOptional(tObject({\n    p: tString,\n    f: tString,\n  })),\n  a: tOptional(tArray(tType('SerializedValue'))),\n  o: tOptional(tArray(tObject({\n    k: tString,\n    v: tType('SerializedValue'),\n  }))),\n  h: tOptional(tNumber),\n  id: tOptional(tNumber),\n  ref: tOptional(tNumber),\n});\nscheme.SerializedArgument = tObject({\n  value: tType('SerializedValue'),\n  handles: tArray(tChannel('*')),\n});\nscheme.ExpectedTextValue = tObject({\n  string: tOptional(tString),\n  regexSource: tOptional(tString),\n  regexFlags: tOptional(tString),\n  matchSubstring: tOptional(tBoolean),\n  ignoreCase: tOptional(tBoolean),\n  normalizeWhiteSpace: tOptional(tBoolean),\n});\nscheme.SelectorEngine = tObject({\n  name: tString,\n  source: tString,\n  contentScript: tOptional(tBoolean),\n});\nscheme.AXNode = tObject({\n  role: tString,\n  name: tString,\n  valueString: tOptional(tString),\n  valueNumber: tOptional(tNumber),\n  description: tOptional(tString),\n  keyshortcuts: tOptional(tString),\n  roledescription: tOptional(tString),\n  valuetext: tOptional(tString),\n  disabled: tOptional(tBoolean),\n  expanded: tOptional(tBoolean),\n  focused: tOptional(tBoolean),\n  modal: tOptional(tBoolean),\n  multiline: tOptional(tBoolean),\n  multiselectable: tOptional(tBoolean),\n  readonly: tOptional(tBoolean),\n  required: tOptional(tBoolean),\n  selected: tOptional(tBoolean),\n  checked: tOptional(tEnum(['checked', 'unchecked', 'mixed'])),\n  pressed: tOptional(tEnum(['pressed', 'released', 'mixed'])),\n  level: tOptional(tNumber),\n  valuemin: tOptional(tNumber),\n  valuemax: tOptional(tNumber),\n  autocomplete: tOptional(tString),\n  haspopup: tOptional(tString),\n  invalid: tOptional(tString),\n  orientation: tOptional(tString),\n  children: tOptional(tArray(tType('AXNode'))),\n});\nscheme.SetNetworkCookie = tObject({\n  name: tString,\n  value: tString,\n  url: tOptional(tString),\n  domain: tOptional(tString),\n  path: tOptional(tString),\n  expires: tOptional(tNumber),\n  httpOnly: tOptional(tBoolean),\n  secure: tOptional(tBoolean),\n  sameSite: tOptional(tEnum(['Strict', 'Lax', 'None'])),\n});\nscheme.NetworkCookie = tObject({\n  name: tString,\n  value: tString,\n  domain: tString,\n  path: tString,\n  expires: tNumber,\n  httpOnly: tBoolean,\n  secure: tBoolean,\n  sameSite: tEnum(['Strict', 'Lax', 'None']),\n});\nscheme.NameValue = tObject({\n  name: tString,\n  value: tString,\n});\nscheme.IndexedDBDatabase = tObject({\n  name: tString,\n  version: tNumber,\n  stores: tArray(tObject({\n    name: tString,\n    autoIncrement: tBoolean,\n    keyPath: tOptional(tString),\n    keyPathArray: tOptional(tArray(tString)),\n    records: tArray(tObject({\n      key: tOptional(tAny),\n      keyEncoded: tOptional(tAny),\n      value: tOptional(tAny),\n      valueEncoded: tOptional(tAny),\n    })),\n    indexes: tArray(tObject({\n      name: tString,\n      keyPath: tOptional(tString),\n      keyPathArray: tOptional(tArray(tString)),\n      multiEntry: tBoolean,\n      unique: tBoolean,\n    })),\n  })),\n});\nscheme.SetOriginStorage = tObject({\n  origin: tString,\n  localStorage: tArray(tType('NameValue')),\n  indexedDB: tOptional(tArray(tType('IndexedDBDatabase'))),\n});\nscheme.OriginStorage = tObject({\n  origin: tString,\n  localStorage: tArray(tType('NameValue')),\n  indexedDB: tOptional(tArray(tType('IndexedDBDatabase'))),\n});\nscheme.SerializedError = tObject({\n  error: tOptional(tObject({\n    message: tString,\n    name: tString,\n    stack: tOptional(tString),\n  })),\n  value: tOptional(tType('SerializedValue')),\n});\nscheme.RecordHarOptions = tObject({\n  zip: tOptional(tBoolean),\n  content: tOptional(tEnum(['embed', 'attach', 'omit'])),\n  mode: tOptional(tEnum(['full', 'minimal'])),\n  urlGlob: tOptional(tString),\n  urlRegexSource: tOptional(tString),\n  urlRegexFlags: tOptional(tString),\n});\nscheme.FormField = tObject({\n  name: tString,\n  value: tOptional(tString),\n  file: tOptional(tObject({\n    name: tString,\n    mimeType: tOptional(tString),\n    buffer: tBinary,\n  })),\n});\nscheme.APIRequestContextInitializer = tObject({\n  tracing: tChannel(['Tracing']),\n});\nscheme.APIRequestContextFetchParams = tObject({\n  url: tString,\n  encodedParams: tOptional(tString),\n  params: tOptional(tArray(tType('NameValue'))),\n  method: tOptional(tString),\n  headers: tOptional(tArray(tType('NameValue'))),\n  postData: tOptional(tBinary),\n  jsonData: tOptional(tString),\n  formData: tOptional(tArray(tType('NameValue'))),\n  multipartData: tOptional(tArray(tType('FormField'))),\n  timeout: tNumber,\n  failOnStatusCode: tOptional(tBoolean),\n  ignoreHTTPSErrors: tOptional(tBoolean),\n  maxRedirects: tOptional(tNumber),\n  maxRetries: tOptional(tNumber),\n});\nscheme.APIRequestContextFetchResult = tObject({\n  response: tType('APIResponse'),\n});\nscheme.APIRequestContextFetchResponseBodyParams = tObject({\n  fetchUid: tString,\n});\nscheme.APIRequestContextFetchResponseBodyResult = tObject({\n  binary: tOptional(tBinary),\n});\nscheme.APIRequestContextFetchLogParams = tObject({\n  fetchUid: tString,\n});\nscheme.APIRequestContextFetchLogResult = tObject({\n  log: tArray(tString),\n});\nscheme.APIRequestContextStorageStateParams = tObject({\n  indexedDB: tOptional(tBoolean),\n});\nscheme.APIRequestContextStorageStateResult = tObject({\n  cookies: tArray(tType('NetworkCookie')),\n  origins: tArray(tType('OriginStorage')),\n});\nscheme.APIRequestContextDisposeAPIResponseParams = tObject({\n  fetchUid: tString,\n});\nscheme.APIRequestContextDisposeAPIResponseResult = tOptional(tObject({}));\nscheme.APIRequestContextDisposeParams = tObject({\n  reason: tOptional(tString),\n});\nscheme.APIRequestContextDisposeResult = tOptional(tObject({}));\nscheme.APIResponse = tObject({\n  fetchUid: tString,\n  url: tString,\n  status: tNumber,\n  statusText: tString,\n  headers: tArray(tType('NameValue')),\n});\nscheme.LifecycleEvent = tEnum(['load', 'domcontentloaded', 'networkidle', 'commit']);\nscheme.LocalUtilsInitializer = tObject({\n  deviceDescriptors: tArray(tObject({\n    name: tString,\n    descriptor: tObject({\n      userAgent: tString,\n      viewport: tObject({\n        width: tNumber,\n        height: tNumber,\n      }),\n      screen: tOptional(tObject({\n        width: tNumber,\n        height: tNumber,\n      })),\n      deviceScaleFactor: tNumber,\n      isMobile: tBoolean,\n      hasTouch: tBoolean,\n      defaultBrowserType: tEnum(['chromium', 'firefox', 'webkit']),\n    }),\n  })),\n});\nscheme.LocalUtilsZipParams = tObject({\n  zipFile: tString,\n  entries: tArray(tType('NameValue')),\n  stacksId: tOptional(tString),\n  mode: tEnum(['write', 'append']),\n  includeSources: tBoolean,\n});\nscheme.LocalUtilsZipResult = tOptional(tObject({}));\nscheme.LocalUtilsHarOpenParams = tObject({\n  file: tString,\n});\nscheme.LocalUtilsHarOpenResult = tObject({\n  harId: tOptional(tString),\n  error: tOptional(tString),\n});\nscheme.LocalUtilsHarLookupParams = tObject({\n  harId: tString,\n  url: tString,\n  method: tString,\n  headers: tArray(tType('NameValue')),\n  postData: tOptional(tBinary),\n  isNavigationRequest: tBoolean,\n});\nscheme.LocalUtilsHarLookupResult = tObject({\n  action: tEnum(['error', 'redirect', 'fulfill', 'noentry']),\n  message: tOptional(tString),\n  redirectURL: tOptional(tString),\n  status: tOptional(tNumber),\n  headers: tOptional(tArray(tType('NameValue'))),\n  body: tOptional(tBinary),\n});\nscheme.LocalUtilsHarCloseParams = tObject({\n  harId: tString,\n});\nscheme.LocalUtilsHarCloseResult = tOptional(tObject({}));\nscheme.LocalUtilsHarUnzipParams = tObject({\n  zipFile: tString,\n  harFile: tString,\n});\nscheme.LocalUtilsHarUnzipResult = tOptional(tObject({}));\nscheme.LocalUtilsConnectParams = tObject({\n  wsEndpoint: tString,\n  headers: tOptional(tAny),\n  exposeNetwork: tOptional(tString),\n  slowMo: tOptional(tNumber),\n  timeout: tNumber,\n  socksProxyRedirectPortForTest: tOptional(tNumber),\n});\nscheme.LocalUtilsConnectResult = tObject({\n  pipe: tChannel(['JsonPipe']),\n  headers: tArray(tType('NameValue')),\n});\nscheme.LocalUtilsTracingStartedParams = tObject({\n  tracesDir: tOptional(tString),\n  traceName: tString,\n});\nscheme.LocalUtilsTracingStartedResult = tObject({\n  stacksId: tString,\n});\nscheme.LocalUtilsAddStackToTracingNoReplyParams = tObject({\n  callData: tType('ClientSideCallMetadata'),\n});\nscheme.LocalUtilsAddStackToTracingNoReplyResult = tOptional(tObject({}));\nscheme.LocalUtilsTraceDiscardedParams = tObject({\n  stacksId: tString,\n});\nscheme.LocalUtilsTraceDiscardedResult = tOptional(tObject({}));\nscheme.LocalUtilsGlobToRegexParams = tObject({\n  glob: tString,\n  baseURL: tOptional(tString),\n  webSocketUrl: tOptional(tBoolean),\n});\nscheme.LocalUtilsGlobToRegexResult = tObject({\n  regex: tString,\n});\nscheme.RootInitializer = tOptional(tObject({}));\nscheme.RootInitializeParams = tObject({\n  sdkLanguage: tEnum(['javascript', 'python', 'java', 'csharp']),\n});\nscheme.RootInitializeResult = tObject({\n  playwright: tChannel(['Playwright']),\n});\nscheme.PlaywrightInitializer = tObject({\n  chromium: tChannel(['BrowserType']),\n  firefox: tChannel(['BrowserType']),\n  webkit: tChannel(['BrowserType']),\n  bidiChromium: tChannel(['BrowserType']),\n  bidiFirefox: tChannel(['BrowserType']),\n  android: tChannel(['Android']),\n  electron: tChannel(['Electron']),\n  utils: tOptional(tChannel(['LocalUtils'])),\n  preLaunchedBrowser: tOptional(tChannel(['Browser'])),\n  preConnectedAndroidDevice: tOptional(tChannel(['AndroidDevice'])),\n  socksSupport: tOptional(tChannel(['SocksSupport'])),\n});\nscheme.PlaywrightNewRequestParams = tObject({\n  baseURL: tOptional(tString),\n  userAgent: tOptional(tString),\n  ignoreHTTPSErrors: tOptional(tBoolean),\n  extraHTTPHeaders: tOptional(tArray(tType('NameValue'))),\n  failOnStatusCode: tOptional(tBoolean),\n  clientCertificates: tOptional(tArray(tObject({\n    origin: tString,\n    cert: tOptional(tBinary),\n    key: tOptional(tBinary),\n    passphrase: tOptional(tString),\n    pfx: tOptional(tBinary),\n  }))),\n  maxRedirects: tOptional(tNumber),\n  httpCredentials: tOptional(tObject({\n    username: tString,\n    password: tString,\n    origin: tOptional(tString),\n    send: tOptional(tEnum(['always', 'unauthorized'])),\n  })),\n  proxy: tOptional(tObject({\n    server: tString,\n    bypass: tOptional(tString),\n    username: tOptional(tString),\n    password: tOptional(tString),\n  })),\n  storageState: tOptional(tObject({\n    cookies: tOptional(tArray(tType('NetworkCookie'))),\n    origins: tOptional(tArray(tType('SetOriginStorage'))),\n  })),\n  tracesDir: tOptional(tString),\n});\nscheme.PlaywrightNewRequestResult = tObject({\n  request: tChannel(['APIRequestContext']),\n});\nscheme.RecorderSource = tObject({\n  isRecorded: tBoolean,\n  id: tString,\n  label: tString,\n  text: tString,\n  language: tString,\n  highlight: tArray(tObject({\n    line: tNumber,\n    type: tString,\n  })),\n  revealLine: tOptional(tNumber),\n  group: tOptional(tString),\n});\nscheme.DebugControllerInitializer = tOptional(tObject({}));\nscheme.DebugControllerInspectRequestedEvent = tObject({\n  selector: tString,\n  locator: tString,\n  ariaSnapshot: tString,\n});\nscheme.DebugControllerSetModeRequestedEvent = tObject({\n  mode: tString,\n});\nscheme.DebugControllerStateChangedEvent = tObject({\n  pageCount: tNumber,\n});\nscheme.DebugControllerSourceChangedEvent = tObject({\n  text: tString,\n  header: tOptional(tString),\n  footer: tOptional(tString),\n  actions: tOptional(tArray(tString)),\n});\nscheme.DebugControllerPausedEvent = tObject({\n  paused: tBoolean,\n});\nscheme.DebugControllerInitializeParams = tObject({\n  codegenId: tString,\n  sdkLanguage: tEnum(['javascript', 'python', 'java', 'csharp']),\n});\nscheme.DebugControllerInitializeResult = tOptional(tObject({}));\nscheme.DebugControllerSetReportStateChangedParams = tObject({\n  enabled: tBoolean,\n});\nscheme.DebugControllerSetReportStateChangedResult = tOptional(tObject({}));\nscheme.DebugControllerResetForReuseParams = tOptional(tObject({}));\nscheme.DebugControllerResetForReuseResult = tOptional(tObject({}));\nscheme.DebugControllerNavigateParams = tObject({\n  url: tString,\n});\nscheme.DebugControllerNavigateResult = tOptional(tObject({}));\nscheme.DebugControllerSetRecorderModeParams = tObject({\n  mode: tEnum(['inspecting', 'recording', 'none']),\n  testIdAttributeName: tOptional(tString),\n});\nscheme.DebugControllerSetRecorderModeResult = tOptional(tObject({}));\nscheme.DebugControllerHighlightParams = tObject({\n  selector: tOptional(tString),\n  ariaTemplate: tOptional(tString),\n});\nscheme.DebugControllerHighlightResult = tOptional(tObject({}));\nscheme.DebugControllerHideHighlightParams = tOptional(tObject({}));\nscheme.DebugControllerHideHighlightResult = tOptional(tObject({}));\nscheme.DebugControllerResumeParams = tOptional(tObject({}));\nscheme.DebugControllerResumeResult = tOptional(tObject({}));\nscheme.DebugControllerKillParams = tOptional(tObject({}));\nscheme.DebugControllerKillResult = tOptional(tObject({}));\nscheme.DebugControllerCloseAllBrowsersParams = tOptional(tObject({}));\nscheme.DebugControllerCloseAllBrowsersResult = tOptional(tObject({}));\nscheme.SocksSupportInitializer = tOptional(tObject({}));\nscheme.SocksSupportSocksRequestedEvent = tObject({\n  uid: tString,\n  host: tString,\n  port: tNumber,\n});\nscheme.SocksSupportSocksDataEvent = tObject({\n  uid: tString,\n  data: tBinary,\n});\nscheme.SocksSupportSocksClosedEvent = tObject({\n  uid: tString,\n});\nscheme.SocksSupportSocksConnectedParams = tObject({\n  uid: tString,\n  host: tString,\n  port: tNumber,\n});\nscheme.SocksSupportSocksConnectedResult = tOptional(tObject({}));\nscheme.SocksSupportSocksFailedParams = tObject({\n  uid: tString,\n  errorCode: tString,\n});\nscheme.SocksSupportSocksFailedResult = tOptional(tObject({}));\nscheme.SocksSupportSocksDataParams = tObject({\n  uid: tString,\n  data: tBinary,\n});\nscheme.SocksSupportSocksDataResult = tOptional(tObject({}));\nscheme.SocksSupportSocksErrorParams = tObject({\n  uid: tString,\n  error: tString,\n});\nscheme.SocksSupportSocksErrorResult = tOptional(tObject({}));\nscheme.SocksSupportSocksEndParams = tObject({\n  uid: tString,\n});\nscheme.SocksSupportSocksEndResult = tOptional(tObject({}));\nscheme.BrowserTypeInitializer = tObject({\n  executablePath: tString,\n  name: tString,\n});\nscheme.BrowserTypeLaunchParams = tObject({\n  channel: tOptional(tString),\n  executablePath: tOptional(tString),\n  args: tOptional(tArray(tString)),\n  ignoreAllDefaultArgs: tOptional(tBoolean),\n  ignoreDefaultArgs: tOptional(tArray(tString)),\n  assistantMode: tOptional(tBoolean),\n  handleSIGINT: tOptional(tBoolean),\n  handleSIGTERM: tOptional(tBoolean),\n  handleSIGHUP: tOptional(tBoolean),\n  timeout: tNumber,\n  env: tOptional(tArray(tType('NameValue'))),\n  headless: tOptional(tBoolean),\n  devtools: tOptional(tBoolean),\n  proxy: tOptional(tObject({\n    server: tString,\n    bypass: tOptional(tString),\n    username: tOptional(tString),\n    password: tOptional(tString),\n  })),\n  downloadsPath: tOptional(tString),\n  tracesDir: tOptional(tString),\n  chromiumSandbox: tOptional(tBoolean),\n  firefoxUserPrefs: tOptional(tAny),\n  cdpPort: tOptional(tNumber),\n  slowMo: tOptional(tNumber),\n});\nscheme.BrowserTypeLaunchResult = tObject({\n  browser: tChannel(['Browser']),\n});\nscheme.BrowserTypeLaunchPersistentContextParams = tObject({\n  channel: tOptional(tString),\n  executablePath: tOptional(tString),\n  args: tOptional(tArray(tString)),\n  ignoreAllDefaultArgs: tOptional(tBoolean),\n  ignoreDefaultArgs: tOptional(tArray(tString)),\n  assistantMode: tOptional(tBoolean),\n  handleSIGINT: tOptional(tBoolean),\n  handleSIGTERM: tOptional(tBoolean),\n  handleSIGHUP: tOptional(tBoolean),\n  timeout: tNumber,\n  env: tOptional(tArray(tType('NameValue'))),\n  headless: tOptional(tBoolean),\n  devtools: tOptional(tBoolean),\n  proxy: tOptional(tObject({\n    server: tString,\n    bypass: tOptional(tString),\n    username: tOptional(tString),\n    password: tOptional(tString),\n  })),\n  downloadsPath: tOptional(tString),\n  tracesDir: tOptional(tString),\n  chromiumSandbox: tOptional(tBoolean),\n  firefoxUserPrefs: tOptional(tAny),\n  cdpPort: tOptional(tNumber),\n  noDefaultViewport: tOptional(tBoolean),\n  viewport: tOptional(tObject({\n    width: tNumber,\n    height: tNumber,\n  })),\n  screen: tOptional(tObject({\n    width: tNumber,\n    height: tNumber,\n  })),\n  ignoreHTTPSErrors: tOptional(tBoolean),\n  clientCertificates: tOptional(tArray(tObject({\n    origin: tString,\n    cert: tOptional(tBinary),\n    key: tOptional(tBinary),\n    passphrase: tOptional(tString),\n    pfx: tOptional(tBinary),\n  }))),\n  javaScriptEnabled: tOptional(tBoolean),\n  bypassCSP: tOptional(tBoolean),\n  userAgent: tOptional(tString),\n  locale: tOptional(tString),\n  timezoneId: tOptional(tString),\n  geolocation: tOptional(tObject({\n    longitude: tNumber,\n    latitude: tNumber,\n    accuracy: tOptional(tNumber),\n  })),\n  permissions: tOptional(tArray(tString)),\n  extraHTTPHeaders: tOptional(tArray(tType('NameValue'))),\n  offline: tOptional(tBoolean),\n  httpCredentials: tOptional(tObject({\n    username: tString,\n    password: tString,\n    origin: tOptional(tString),\n    send: tOptional(tEnum(['always', 'unauthorized'])),\n  })),\n  deviceScaleFactor: tOptional(tNumber),\n  isMobile: tOptional(tBoolean),\n  hasTouch: tOptional(tBoolean),\n  colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'no-override'])),\n  reducedMotion: tOptional(tEnum(['reduce', 'no-preference', 'no-override'])),\n  forcedColors: tOptional(tEnum(['active', 'none', 'no-override'])),\n  acceptDownloads: tOptional(tEnum(['accept', 'deny', 'internal-browser-default'])),\n  contrast: tOptional(tEnum(['no-preference', 'more', 'no-override'])),\n  baseURL: tOptional(tString),\n  recordVideo: tOptional(tObject({\n    dir: tString,\n    size: tOptional(tObject({\n      width: tNumber,\n      height: tNumber,\n    })),\n  })),\n  strictSelectors: tOptional(tBoolean),\n  serviceWorkers: tOptional(tEnum(['allow', 'block'])),\n  selectorEngines: tOptional(tArray(tType('SelectorEngine'))),\n  testIdAttributeName: tOptional(tString),\n  userDataDir: tString,\n  slowMo: tOptional(tNumber),\n});\nscheme.BrowserTypeLaunchPersistentContextResult = tObject({\n  browser: tChannel(['Browser']),\n  context: tChannel(['BrowserContext']),\n});\nscheme.BrowserTypeConnectOverCDPParams = tObject({\n  endpointURL: tString,\n  headers: tOptional(tArray(tType('NameValue'))),\n  slowMo: tOptional(tNumber),\n  timeout: tNumber,\n});\nscheme.BrowserTypeConnectOverCDPResult = tObject({\n  browser: tChannel(['Browser']),\n  defaultContext: tOptional(tChannel(['BrowserContext'])),\n});\nscheme.BrowserInitializer = tObject({\n  version: tString,\n  name: tString,\n});\nscheme.BrowserContextEvent = tObject({\n  context: tChannel(['BrowserContext']),\n});\nscheme.BrowserCloseEvent = tOptional(tObject({}));\nscheme.BrowserCloseParams = tObject({\n  reason: tOptional(tString),\n});\nscheme.BrowserCloseResult = tOptional(tObject({}));\nscheme.BrowserKillForTestsParams = tOptional(tObject({}));\nscheme.BrowserKillForTestsResult = tOptional(tObject({}));\nscheme.BrowserDefaultUserAgentForTestParams = tOptional(tObject({}));\nscheme.BrowserDefaultUserAgentForTestResult = tObject({\n  userAgent: tString,\n});\nscheme.BrowserNewContextParams = tObject({\n  noDefaultViewport: tOptional(tBoolean),\n  viewport: tOptional(tObject({\n    width: tNumber,\n    height: tNumber,\n  })),\n  screen: tOptional(tObject({\n    width: tNumber,\n    height: tNumber,\n  })),\n  ignoreHTTPSErrors: tOptional(tBoolean),\n  clientCertificates: tOptional(tArray(tObject({\n    origin: tString,\n    cert: tOptional(tBinary),\n    key: tOptional(tBinary),\n    passphrase: tOptional(tString),\n    pfx: tOptional(tBinary),\n  }))),\n  javaScriptEnabled: tOptional(tBoolean),\n  bypassCSP: tOptional(tBoolean),\n  userAgent: tOptional(tString),\n  locale: tOptional(tString),\n  timezoneId: tOptional(tString),\n  geolocation: tOptional(tObject({\n    longitude: tNumber,\n    latitude: tNumber,\n    accuracy: tOptional(tNumber),\n  })),\n  permissions: tOptional(tArray(tString)),\n  extraHTTPHeaders: tOptional(tArray(tType('NameValue'))),\n  offline: tOptional(tBoolean),\n  httpCredentials: tOptional(tObject({\n    username: tString,\n    password: tString,\n    origin: tOptional(tString),\n    send: tOptional(tEnum(['always', 'unauthorized'])),\n  })),\n  deviceScaleFactor: tOptional(tNumber),\n  isMobile: tOptional(tBoolean),\n  hasTouch: tOptional(tBoolean),\n  colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'no-override'])),\n  reducedMotion: tOptional(tEnum(['reduce', 'no-preference', 'no-override'])),\n  forcedColors: tOptional(tEnum(['active', 'none', 'no-override'])),\n  acceptDownloads: tOptional(tEnum(['accept', 'deny', 'internal-browser-default'])),\n  contrast: tOptional(tEnum(['no-preference', 'more', 'no-override'])),\n  baseURL: tOptional(tString),\n  recordVideo: tOptional(tObject({\n    dir: tString,\n    size: tOptional(tObject({\n      width: tNumber,\n      height: tNumber,\n    })),\n  })),\n  strictSelectors: tOptional(tBoolean),\n  serviceWorkers: tOptional(tEnum(['allow', 'block'])),\n  selectorEngines: tOptional(tArray(tType('SelectorEngine'))),\n  testIdAttributeName: tOptional(tString),\n  proxy: tOptional(tObject({\n    server: tString,\n    bypass: tOptional(tString),\n    username: tOptional(tString),\n    password: tOptional(tString),\n  })),\n  storageState: tOptional(tObject({\n    cookies: tOptional(tArray(tType('SetNetworkCookie'))),\n    origins: tOptional(tArray(tType('SetOriginStorage'))),\n  })),\n});\nscheme.BrowserNewContextResult = tObject({\n  context: tChannel(['BrowserContext']),\n});\nscheme.BrowserNewContextForReuseParams = tObject({\n  noDefaultViewport: tOptional(tBoolean),\n  viewport: tOptional(tObject({\n    width: tNumber,\n    height: tNumber,\n  })),\n  screen: tOptional(tObject({\n    width: tNumber,\n    height: tNumber,\n  })),\n  ignoreHTTPSErrors: tOptional(tBoolean),\n  clientCertificates: tOptional(tArray(tObject({\n    origin: tString,\n    cert: tOptional(tBinary),\n    key: tOptional(tBinary),\n    passphrase: tOptional(tString),\n    pfx: tOptional(tBinary),\n  }))),\n  javaScriptEnabled: tOptional(tBoolean),\n  bypassCSP: tOptional(tBoolean),\n  userAgent: tOptional(tString),\n  locale: tOptional(tString),\n  timezoneId: tOptional(tString),\n  geolocation: tOptional(tObject({\n    longitude: tNumber,\n    latitude: tNumber,\n    accuracy: tOptional(tNumber),\n  })),\n  permissions: tOptional(tArray(tString)),\n  extraHTTPHeaders: tOptional(tArray(tType('NameValue'))),\n  offline: tOptional(tBoolean),\n  httpCredentials: tOptional(tObject({\n    username: tString,\n    password: tString,\n    origin: tOptional(tString),\n    send: tOptional(tEnum(['always', 'unauthorized'])),\n  })),\n  deviceScaleFactor: tOptional(tNumber),\n  isMobile: tOptional(tBoolean),\n  hasTouch: tOptional(tBoolean),\n  colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'no-override'])),\n  reducedMotion: tOptional(tEnum(['reduce', 'no-preference', 'no-override'])),\n  forcedColors: tOptional(tEnum(['active', 'none', 'no-override'])),\n  acceptDownloads: tOptional(tEnum(['accept', 'deny', 'internal-browser-default'])),\n  contrast: tOptional(tEnum(['no-preference', 'more', 'no-override'])),\n  baseURL: tOptional(tString),\n  recordVideo: tOptional(tObject({\n    dir: tString,\n    size: tOptional(tObject({\n      width: tNumber,\n      height: tNumber,\n    })),\n  })),\n  strictSelectors: tOptional(tBoolean),\n  serviceWorkers: tOptional(tEnum(['allow', 'block'])),\n  selectorEngines: tOptional(tArray(tType('SelectorEngine'))),\n  testIdAttributeName: tOptional(tString),\n  proxy: tOptional(tObject({\n    server: tString,\n    bypass: tOptional(tString),\n    username: tOptional(tString),\n    password: tOptional(tString),\n  })),\n  storageState: tOptional(tObject({\n    cookies: tOptional(tArray(tType('SetNetworkCookie'))),\n    origins: tOptional(tArray(tType('SetOriginStorage'))),\n  })),\n});\nscheme.BrowserNewContextForReuseResult = tObject({\n  context: tChannel(['BrowserContext']),\n});\nscheme.BrowserStopPendingOperationsParams = tObject({\n  reason: tString,\n});\nscheme.BrowserStopPendingOperationsResult = tOptional(tObject({}));\nscheme.BrowserNewBrowserCDPSessionParams = tOptional(tObject({}));\nscheme.BrowserNewBrowserCDPSessionResult = tObject({\n  session: tChannel(['CDPSession']),\n});\nscheme.BrowserStartTracingParams = tObject({\n  page: tOptional(tChannel(['Page'])),\n  screenshots: tOptional(tBoolean),\n  categories: tOptional(tArray(tString)),\n});\nscheme.BrowserStartTracingResult = tOptional(tObject({}));\nscheme.BrowserStopTracingParams = tOptional(tObject({}));\nscheme.BrowserStopTracingResult = tObject({\n  artifact: tChannel(['Artifact']),\n});\nscheme.EventTargetInitializer = tOptional(tObject({}));\nscheme.EventTargetWaitForEventInfoParams = tObject({\n  info: tObject({\n    waitId: tString,\n    phase: tEnum(['before', 'after', 'log']),\n    event: tOptional(tString),\n    message: tOptional(tString),\n    error: tOptional(tString),\n  }),\n});\nscheme.BrowserContextWaitForEventInfoParams = tType('EventTargetWaitForEventInfoParams');\nscheme.PageWaitForEventInfoParams = tType('EventTargetWaitForEventInfoParams');\nscheme.WebSocketWaitForEventInfoParams = tType('EventTargetWaitForEventInfoParams');\nscheme.ElectronApplicationWaitForEventInfoParams = tType('EventTargetWaitForEventInfoParams');\nscheme.AndroidDeviceWaitForEventInfoParams = tType('EventTargetWaitForEventInfoParams');\nscheme.EventTargetWaitForEventInfoResult = tOptional(tObject({}));\nscheme.BrowserContextWaitForEventInfoResult = tType('EventTargetWaitForEventInfoResult');\nscheme.PageWaitForEventInfoResult = tType('EventTargetWaitForEventInfoResult');\nscheme.WebSocketWaitForEventInfoResult = tType('EventTargetWaitForEventInfoResult');\nscheme.ElectronApplicationWaitForEventInfoResult = tType('EventTargetWaitForEventInfoResult');\nscheme.AndroidDeviceWaitForEventInfoResult = tType('EventTargetWaitForEventInfoResult');\nscheme.BrowserContextInitializer = tObject({\n  isChromium: tBoolean,\n  requestContext: tChannel(['APIRequestContext']),\n  tracing: tChannel(['Tracing']),\n  options: tObject({\n    noDefaultViewport: tOptional(tBoolean),\n    viewport: tOptional(tObject({\n      width: tNumber,\n      height: tNumber,\n    })),\n    screen: tOptional(tObject({\n      width: tNumber,\n      height: tNumber,\n    })),\n    ignoreHTTPSErrors: tOptional(tBoolean),\n    clientCertificates: tOptional(tArray(tObject({\n      origin: tString,\n      cert: tOptional(tBinary),\n      key: tOptional(tBinary),\n      passphrase: tOptional(tString),\n      pfx: tOptional(tBinary),\n    }))),\n    javaScriptEnabled: tOptional(tBoolean),\n    bypassCSP: tOptional(tBoolean),\n    userAgent: tOptional(tString),\n    locale: tOptional(tString),\n    timezoneId: tOptional(tString),\n    geolocation: tOptional(tObject({\n      longitude: tNumber,\n      latitude: tNumber,\n      accuracy: tOptional(tNumber),\n    })),\n    permissions: tOptional(tArray(tString)),\n    extraHTTPHeaders: tOptional(tArray(tType('NameValue'))),\n    offline: tOptional(tBoolean),\n    httpCredentials: tOptional(tObject({\n      username: tString,\n      password: tString,\n      origin: tOptional(tString),\n      send: tOptional(tEnum(['always', 'unauthorized'])),\n    })),\n    deviceScaleFactor: tOptional(tNumber),\n    isMobile: tOptional(tBoolean),\n    hasTouch: tOptional(tBoolean),\n    colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'no-override'])),\n    reducedMotion: tOptional(tEnum(['reduce', 'no-preference', 'no-override'])),\n    forcedColors: tOptional(tEnum(['active', 'none', 'no-override'])),\n    acceptDownloads: tOptional(tEnum(['accept', 'deny', 'internal-browser-default'])),\n    contrast: tOptional(tEnum(['no-preference', 'more', 'no-override'])),\n    baseURL: tOptional(tString),\n    recordVideo: tOptional(tObject({\n      dir: tString,\n      size: tOptional(tObject({\n        width: tNumber,\n        height: tNumber,\n      })),\n    })),\n    strictSelectors: tOptional(tBoolean),\n    serviceWorkers: tOptional(tEnum(['allow', 'block'])),\n    selectorEngines: tOptional(tArray(tType('SelectorEngine'))),\n    testIdAttributeName: tOptional(tString),\n  }),\n});\nscheme.BrowserContextBindingCallEvent = tObject({\n  binding: tChannel(['BindingCall']),\n});\nscheme.BrowserContextConsoleEvent = tObject({\n  type: tString,\n  text: tString,\n  args: tArray(tChannel(['ElementHandle', 'JSHandle'])),\n  location: tObject({\n    url: tString,\n    lineNumber: tNumber,\n    columnNumber: tNumber,\n  }),\n  page: tChannel(['Page']),\n});\nscheme.BrowserContextCloseEvent = tOptional(tObject({}));\nscheme.BrowserContextDialogEvent = tObject({\n  dialog: tChannel(['Dialog']),\n});\nscheme.BrowserContextPageEvent = tObject({\n  page: tChannel(['Page']),\n});\nscheme.BrowserContextPageErrorEvent = tObject({\n  error: tType('SerializedError'),\n  page: tChannel(['Page']),\n});\nscheme.BrowserContextRouteEvent = tObject({\n  route: tChannel(['Route']),\n});\nscheme.BrowserContextWebSocketRouteEvent = tObject({\n  webSocketRoute: tChannel(['WebSocketRoute']),\n});\nscheme.BrowserContextVideoEvent = tObject({\n  artifact: tChannel(['Artifact']),\n});\nscheme.BrowserContextBackgroundPageEvent = tObject({\n  page: tChannel(['Page']),\n});\nscheme.BrowserContextServiceWorkerEvent = tObject({\n  worker: tChannel(['Worker']),\n});\nscheme.BrowserContextRequestEvent = tObject({\n  request: tChannel(['Request']),\n  page: tOptional(tChannel(['Page'])),\n});\nscheme.BrowserContextRequestFailedEvent = tObject({\n  request: tChannel(['Request']),\n  failureText: tOptional(tString),\n  responseEndTiming: tNumber,\n  page: tOptional(tChannel(['Page'])),\n});\nscheme.BrowserContextRequestFinishedEvent = tObject({\n  request: tChannel(['Request']),\n  response: tOptional(tChannel(['Response'])),\n  responseEndTiming: tNumber,\n  page: tOptional(tChannel(['Page'])),\n});\nscheme.BrowserContextResponseEvent = tObject({\n  response: tChannel(['Response']),\n  page: tOptional(tChannel(['Page'])),\n});\nscheme.BrowserContextAddCookiesParams = tObject({\n  cookies: tArray(tType('SetNetworkCookie')),\n});\nscheme.BrowserContextAddCookiesResult = tOptional(tObject({}));\nscheme.BrowserContextAddInitScriptParams = tObject({\n  source: tString,\n});\nscheme.BrowserContextAddInitScriptResult = tOptional(tObject({}));\nscheme.BrowserContextClearCookiesParams = tObject({\n  name: tOptional(tString),\n  nameRegexSource: tOptional(tString),\n  nameRegexFlags: tOptional(tString),\n  domain: tOptional(tString),\n  domainRegexSource: tOptional(tString),\n  domainRegexFlags: tOptional(tString),\n  path: tOptional(tString),\n  pathRegexSource: tOptional(tString),\n  pathRegexFlags: tOptional(tString),\n});\nscheme.BrowserContextClearCookiesResult = tOptional(tObject({}));\nscheme.BrowserContextClearPermissionsParams = tOptional(tObject({}));\nscheme.BrowserContextClearPermissionsResult = tOptional(tObject({}));\nscheme.BrowserContextCloseParams = tObject({\n  reason: tOptional(tString),\n});\nscheme.BrowserContextCloseResult = tOptional(tObject({}));\nscheme.BrowserContextCookiesParams = tObject({\n  urls: tArray(tString),\n});\nscheme.BrowserContextCookiesResult = tObject({\n  cookies: tArray(tType('NetworkCookie')),\n});\nscheme.BrowserContextExposeBindingParams = tObject({\n  name: tString,\n  needsHandle: tOptional(tBoolean),\n});\nscheme.BrowserContextExposeBindingResult = tOptional(tObject({}));\nscheme.BrowserContextGrantPermissionsParams = tObject({\n  permissions: tArray(tString),\n  origin: tOptional(tString),\n});\nscheme.BrowserContextGrantPermissionsResult = tOptional(tObject({}));\nscheme.BrowserContextNewPageParams = tOptional(tObject({}));\nscheme.BrowserContextNewPageResult = tObject({\n  page: tChannel(['Page']),\n});\nscheme.BrowserContextRegisterSelectorEngineParams = tObject({\n  selectorEngine: tType('SelectorEngine'),\n});\nscheme.BrowserContextRegisterSelectorEngineResult = tOptional(tObject({}));\nscheme.BrowserContextSetTestIdAttributeNameParams = tObject({\n  testIdAttributeName: tString,\n});\nscheme.BrowserContextSetTestIdAttributeNameResult = tOptional(tObject({}));\nscheme.BrowserContextSetExtraHTTPHeadersParams = tObject({\n  headers: tArray(tType('NameValue')),\n});\nscheme.BrowserContextSetExtraHTTPHeadersResult = tOptional(tObject({}));\nscheme.BrowserContextSetGeolocationParams = tObject({\n  geolocation: tOptional(tObject({\n    longitude: tNumber,\n    latitude: tNumber,\n    accuracy: tOptional(tNumber),\n  })),\n});\nscheme.BrowserContextSetGeolocationResult = tOptional(tObject({}));\nscheme.BrowserContextSetHTTPCredentialsParams = tObject({\n  httpCredentials: tOptional(tObject({\n    username: tString,\n    password: tString,\n    origin: tOptional(tString),\n  })),\n});\nscheme.BrowserContextSetHTTPCredentialsResult = tOptional(tObject({}));\nscheme.BrowserContextSetNetworkInterceptionPatternsParams = tObject({\n  patterns: tArray(tObject({\n    glob: tOptional(tString),\n    regexSource: tOptional(tString),\n    regexFlags: tOptional(tString),\n  })),\n});\nscheme.BrowserContextSetNetworkInterceptionPatternsResult = tOptional(tObject({}));\nscheme.BrowserContextSetWebSocketInterceptionPatternsParams = tObject({\n  patterns: tArray(tObject({\n    glob: tOptional(tString),\n    regexSource: tOptional(tString),\n    regexFlags: tOptional(tString),\n  })),\n});\nscheme.BrowserContextSetWebSocketInterceptionPatternsResult = tOptional(tObject({}));\nscheme.BrowserContextSetOfflineParams = tObject({\n  offline: tBoolean,\n});\nscheme.BrowserContextSetOfflineResult = tOptional(tObject({}));\nscheme.BrowserContextStorageStateParams = tObject({\n  indexedDB: tOptional(tBoolean),\n});\nscheme.BrowserContextStorageStateResult = tObject({\n  cookies: tArray(tType('NetworkCookie')),\n  origins: tArray(tType('OriginStorage')),\n});\nscheme.BrowserContextPauseParams = tOptional(tObject({}));\nscheme.BrowserContextPauseResult = tOptional(tObject({}));\nscheme.BrowserContextEnableRecorderParams = tObject({\n  language: tOptional(tString),\n  mode: tOptional(tEnum(['inspecting', 'recording'])),\n  pauseOnNextStatement: tOptional(tBoolean),\n  testIdAttributeName: tOptional(tString),\n  launchOptions: tOptional(tAny),\n  contextOptions: tOptional(tAny),\n  device: tOptional(tString),\n  saveStorage: tOptional(tString),\n  outputFile: tOptional(tString),\n  handleSIGINT: tOptional(tBoolean),\n  omitCallTracking: tOptional(tBoolean),\n});\nscheme.BrowserContextEnableRecorderResult = tOptional(tObject({}));\nscheme.BrowserContextNewCDPSessionParams = tObject({\n  page: tOptional(tChannel(['Page'])),\n  frame: tOptional(tChannel(['Frame'])),\n});\nscheme.BrowserContextNewCDPSessionResult = tObject({\n  session: tChannel(['CDPSession']),\n});\nscheme.BrowserContextHarStartParams = tObject({\n  page: tOptional(tChannel(['Page'])),\n  options: tType('RecordHarOptions'),\n});\nscheme.BrowserContextHarStartResult = tObject({\n  harId: tString,\n});\nscheme.BrowserContextHarExportParams = tObject({\n  harId: tOptional(tString),\n});\nscheme.BrowserContextHarExportResult = tObject({\n  artifact: tChannel(['Artifact']),\n});\nscheme.BrowserContextCreateTempFilesParams = tObject({\n  rootDirName: tOptional(tString),\n  items: tArray(tObject({\n    name: tString,\n    lastModifiedMs: tOptional(tNumber),\n  })),\n});\nscheme.BrowserContextCreateTempFilesResult = tObject({\n  rootDir: tOptional(tChannel(['WritableStream'])),\n  writableStreams: tArray(tChannel(['WritableStream'])),\n});\nscheme.BrowserContextUpdateSubscriptionParams = tObject({\n  event: tEnum(['console', 'dialog', 'request', 'response', 'requestFinished', 'requestFailed']),\n  enabled: tBoolean,\n});\nscheme.BrowserContextUpdateSubscriptionResult = tOptional(tObject({}));\nscheme.BrowserContextClockFastForwardParams = tObject({\n  ticksNumber: tOptional(tNumber),\n  ticksString: tOptional(tString),\n});\nscheme.BrowserContextClockFastForwardResult = tOptional(tObject({}));\nscheme.BrowserContextClockInstallParams = tObject({\n  timeNumber: tOptional(tNumber),\n  timeString: tOptional(tString),\n});\nscheme.BrowserContextClockInstallResult = tOptional(tObject({}));\nscheme.BrowserContextClockPauseAtParams = tObject({\n  timeNumber: tOptional(tNumber),\n  timeString: tOptional(tString),\n});\nscheme.BrowserContextClockPauseAtResult = tOptional(tObject({}));\nscheme.BrowserContextClockResumeParams = tOptional(tObject({}));\nscheme.BrowserContextClockResumeResult = tOptional(tObject({}));\nscheme.BrowserContextClockRunForParams = tObject({\n  ticksNumber: tOptional(tNumber),\n  ticksString: tOptional(tString),\n});\nscheme.BrowserContextClockRunForResult = tOptional(tObject({}));\nscheme.BrowserContextClockSetFixedTimeParams = tObject({\n  timeNumber: tOptional(tNumber),\n  timeString: tOptional(tString),\n});\nscheme.BrowserContextClockSetFixedTimeResult = tOptional(tObject({}));\nscheme.BrowserContextClockSetSystemTimeParams = tObject({\n  timeNumber: tOptional(tNumber),\n  timeString: tOptional(tString),\n});\nscheme.BrowserContextClockSetSystemTimeResult = tOptional(tObject({}));\nscheme.PageInitializer = tObject({\n  mainFrame: tChannel(['Frame']),\n  viewportSize: tOptional(tObject({\n    width: tNumber,\n    height: tNumber,\n  })),\n  isClosed: tBoolean,\n  opener: tOptional(tChannel(['Page'])),\n});\nscheme.PageBindingCallEvent = tObject({\n  binding: tChannel(['BindingCall']),\n});\nscheme.PageCloseEvent = tOptional(tObject({}));\nscheme.PageCrashEvent = tOptional(tObject({}));\nscheme.PageDownloadEvent = tObject({\n  url: tString,\n  suggestedFilename: tString,\n  artifact: tChannel(['Artifact']),\n});\nscheme.PageViewportSizeChangedEvent = tObject({\n  viewportSize: tOptional(tObject({\n    width: tNumber,\n    height: tNumber,\n  })),\n});\nscheme.PageFileChooserEvent = tObject({\n  element: tChannel(['ElementHandle']),\n  isMultiple: tBoolean,\n});\nscheme.PageFrameAttachedEvent = tObject({\n  frame: tChannel(['Frame']),\n});\nscheme.PageFrameDetachedEvent = tObject({\n  frame: tChannel(['Frame']),\n});\nscheme.PageLocatorHandlerTriggeredEvent = tObject({\n  uid: tNumber,\n});\nscheme.PageRouteEvent = tObject({\n  route: tChannel(['Route']),\n});\nscheme.PageWebSocketRouteEvent = tObject({\n  webSocketRoute: tChannel(['WebSocketRoute']),\n});\nscheme.PageVideoEvent = tObject({\n  artifact: tChannel(['Artifact']),\n});\nscheme.PageWebSocketEvent = tObject({\n  webSocket: tChannel(['WebSocket']),\n});\nscheme.PageWorkerEvent = tObject({\n  worker: tChannel(['Worker']),\n});\nscheme.PageAddInitScriptParams = tObject({\n  source: tString,\n});\nscheme.PageAddInitScriptResult = tOptional(tObject({}));\nscheme.PageCloseParams = tObject({\n  runBeforeUnload: tOptional(tBoolean),\n  reason: tOptional(tString),\n});\nscheme.PageCloseResult = tOptional(tObject({}));\nscheme.PageEmulateMediaParams = tObject({\n  media: tOptional(tEnum(['screen', 'print', 'no-override'])),\n  colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'no-override'])),\n  reducedMotion: tOptional(tEnum(['reduce', 'no-preference', 'no-override'])),\n  forcedColors: tOptional(tEnum(['active', 'none', 'no-override'])),\n  contrast: tOptional(tEnum(['no-preference', 'more', 'no-override'])),\n});\nscheme.PageEmulateMediaResult = tOptional(tObject({}));\nscheme.PageExposeBindingParams = tObject({\n  name: tString,\n  needsHandle: tOptional(tBoolean),\n});\nscheme.PageExposeBindingResult = tOptional(tObject({}));\nscheme.PageGoBackParams = tObject({\n  timeout: tNumber,\n  waitUntil: tOptional(tType('LifecycleEvent')),\n});\nscheme.PageGoBackResult = tObject({\n  response: tOptional(tChannel(['Response'])),\n});\nscheme.PageGoForwardParams = tObject({\n  timeout: tNumber,\n  waitUntil: tOptional(tType('LifecycleEvent')),\n});\nscheme.PageGoForwardResult = tObject({\n  response: tOptional(tChannel(['Response'])),\n});\nscheme.PageRequestGCParams = tOptional(tObject({}));\nscheme.PageRequestGCResult = tOptional(tObject({}));\nscheme.PageRegisterLocatorHandlerParams = tObject({\n  selector: tString,\n  noWaitAfter: tOptional(tBoolean),\n});\nscheme.PageRegisterLocatorHandlerResult = tObject({\n  uid: tNumber,\n});\nscheme.PageResolveLocatorHandlerNoReplyParams = tObject({\n  uid: tNumber,\n  remove: tOptional(tBoolean),\n});\nscheme.PageResolveLocatorHandlerNoReplyResult = tOptional(tObject({}));\nscheme.PageUnregisterLocatorHandlerParams = tObject({\n  uid: tNumber,\n});\nscheme.PageUnregisterLocatorHandlerResult = tOptional(tObject({}));\nscheme.PageReloadParams = tObject({\n  timeout: tNumber,\n  waitUntil: tOptional(tType('LifecycleEvent')),\n});\nscheme.PageReloadResult = tObject({\n  response: tOptional(tChannel(['Response'])),\n});\nscheme.PageExpectScreenshotParams = tObject({\n  expected: tOptional(tBinary),\n  timeout: tNumber,\n  isNot: tBoolean,\n  locator: tOptional(tObject({\n    frame: tChannel(['Frame']),\n    selector: tString,\n  })),\n  comparator: tOptional(tString),\n  maxDiffPixels: tOptional(tNumber),\n  maxDiffPixelRatio: tOptional(tNumber),\n  threshold: tOptional(tNumber),\n  fullPage: tOptional(tBoolean),\n  clip: tOptional(tType('Rect')),\n  omitBackground: tOptional(tBoolean),\n  caret: tOptional(tEnum(['hide', 'initial'])),\n  animations: tOptional(tEnum(['disabled', 'allow'])),\n  scale: tOptional(tEnum(['css', 'device'])),\n  mask: tOptional(tArray(tObject({\n    frame: tChannel(['Frame']),\n    selector: tString,\n  }))),\n  maskColor: tOptional(tString),\n  style: tOptional(tString),\n});\nscheme.PageExpectScreenshotResult = tObject({\n  diff: tOptional(tBinary),\n  errorMessage: tOptional(tString),\n  actual: tOptional(tBinary),\n  previous: tOptional(tBinary),\n  timedOut: tOptional(tBoolean),\n  log: tOptional(tArray(tString)),\n});\nscheme.PageScreenshotParams = tObject({\n  timeout: tNumber,\n  type: tOptional(tEnum(['png', 'jpeg'])),\n  quality: tOptional(tNumber),\n  fullPage: tOptional(tBoolean),\n  clip: tOptional(tType('Rect')),\n  omitBackground: tOptional(tBoolean),\n  caret: tOptional(tEnum(['hide', 'initial'])),\n  animations: tOptional(tEnum(['disabled', 'allow'])),\n  scale: tOptional(tEnum(['css', 'device'])),\n  mask: tOptional(tArray(tObject({\n    frame: tChannel(['Frame']),\n    selector: tString,\n  }))),\n  maskColor: tOptional(tString),\n  style: tOptional(tString),\n});\nscheme.PageScreenshotResult = tObject({\n  binary: tBinary,\n});\nscheme.PageSetExtraHTTPHeadersParams = tObject({\n  headers: tArray(tType('NameValue')),\n});\nscheme.PageSetExtraHTTPHeadersResult = tOptional(tObject({}));\nscheme.PageSetNetworkInterceptionPatternsParams = tObject({\n  patterns: tArray(tObject({\n    glob: tOptional(tString),\n    regexSource: tOptional(tString),\n    regexFlags: tOptional(tString),\n  })),\n});\nscheme.PageSetNetworkInterceptionPatternsResult = tOptional(tObject({}));\nscheme.PageSetWebSocketInterceptionPatternsParams = tObject({\n  patterns: tArray(tObject({\n    glob: tOptional(tString),\n    regexSource: tOptional(tString),\n    regexFlags: tOptional(tString),\n  })),\n});\nscheme.PageSetWebSocketInterceptionPatternsResult = tOptional(tObject({}));\nscheme.PageSetViewportSizeParams = tObject({\n  viewportSize: tObject({\n    width: tNumber,\n    height: tNumber,\n  }),\n});\nscheme.PageSetViewportSizeResult = tOptional(tObject({}));\nscheme.PageKeyboardDownParams = tObject({\n  key: tString,\n});\nscheme.PageKeyboardDownResult = tOptional(tObject({}));\nscheme.PageKeyboardUpParams = tObject({\n  key: tString,\n});\nscheme.PageKeyboardUpResult = tOptional(tObject({}));\nscheme.PageKeyboardInsertTextParams = tObject({\n  text: tString,\n});\nscheme.PageKeyboardInsertTextResult = tOptional(tObject({}));\nscheme.PageKeyboardTypeParams = tObject({\n  text: tString,\n  delay: tOptional(tNumber),\n});\nscheme.PageKeyboardTypeResult = tOptional(tObject({}));\nscheme.PageKeyboardPressParams = tObject({\n  key: tString,\n  delay: tOptional(tNumber),\n});\nscheme.PageKeyboardPressResult = tOptional(tObject({}));\nscheme.PageMouseMoveParams = tObject({\n  x: tNumber,\n  y: tNumber,\n  steps: tOptional(tNumber),\n});\nscheme.PageMouseMoveResult = tOptional(tObject({}));\nscheme.PageMouseDownParams = tObject({\n  button: tOptional(tEnum(['left', 'right', 'middle'])),\n  clickCount: tOptional(tNumber),\n});\nscheme.PageMouseDownResult = tOptional(tObject({}));\nscheme.PageMouseUpParams = tObject({\n  button: tOptional(tEnum(['left', 'right', 'middle'])),\n  clickCount: tOptional(tNumber),\n});\nscheme.PageMouseUpResult = tOptional(tObject({}));\nscheme.PageMouseClickParams = tObject({\n  x: tNumber,\n  y: tNumber,\n  delay: tOptional(tNumber),\n  button: tOptional(tEnum(['left', 'right', 'middle'])),\n  clickCount: tOptional(tNumber),\n});\nscheme.PageMouseClickResult = tOptional(tObject({}));\nscheme.PageMouseWheelParams = tObject({\n  deltaX: tNumber,\n  deltaY: tNumber,\n});\nscheme.PageMouseWheelResult = tOptional(tObject({}));\nscheme.PageTouchscreenTapParams = tObject({\n  x: tNumber,\n  y: tNumber,\n});\nscheme.PageTouchscreenTapResult = tOptional(tObject({}));\nscheme.PageAccessibilitySnapshotParams = tObject({\n  interestingOnly: tOptional(tBoolean),\n  root: tOptional(tChannel(['ElementHandle'])),\n});\nscheme.PageAccessibilitySnapshotResult = tObject({\n  rootAXNode: tOptional(tType('AXNode')),\n});\nscheme.PagePdfParams = tObject({\n  scale: tOptional(tNumber),\n  displayHeaderFooter: tOptional(tBoolean),\n  headerTemplate: tOptional(tString),\n  footerTemplate: tOptional(tString),\n  printBackground: tOptional(tBoolean),\n  landscape: tOptional(tBoolean),\n  pageRanges: tOptional(tString),\n  format: tOptional(tString),\n  width: tOptional(tString),\n  height: tOptional(tString),\n  preferCSSPageSize: tOptional(tBoolean),\n  margin: tOptional(tObject({\n    top: tOptional(tString),\n    bottom: tOptional(tString),\n    left: tOptional(tString),\n    right: tOptional(tString),\n  })),\n  tagged: tOptional(tBoolean),\n  outline: tOptional(tBoolean),\n});\nscheme.PagePdfResult = tObject({\n  pdf: tBinary,\n});\nscheme.PageSnapshotForAIParams = tOptional(tObject({}));\nscheme.PageSnapshotForAIResult = tObject({\n  snapshot: tString,\n});\nscheme.PageStartJSCoverageParams = tObject({\n  resetOnNavigation: tOptional(tBoolean),\n  reportAnonymousScripts: tOptional(tBoolean),\n});\nscheme.PageStartJSCoverageResult = tOptional(tObject({}));\nscheme.PageStopJSCoverageParams = tOptional(tObject({}));\nscheme.PageStopJSCoverageResult = tObject({\n  entries: tArray(tObject({\n    url: tString,\n    scriptId: tString,\n    source: tOptional(tString),\n    functions: tArray(tObject({\n      functionName: tString,\n      isBlockCoverage: tBoolean,\n      ranges: tArray(tObject({\n        startOffset: tNumber,\n        endOffset: tNumber,\n        count: tNumber,\n      })),\n    })),\n  })),\n});\nscheme.PageStartCSSCoverageParams = tObject({\n  resetOnNavigation: tOptional(tBoolean),\n});\nscheme.PageStartCSSCoverageResult = tOptional(tObject({}));\nscheme.PageStopCSSCoverageParams = tOptional(tObject({}));\nscheme.PageStopCSSCoverageResult = tObject({\n  entries: tArray(tObject({\n    url: tString,\n    text: tOptional(tString),\n    ranges: tArray(tObject({\n      start: tNumber,\n      end: tNumber,\n    })),\n  })),\n});\nscheme.PageBringToFrontParams = tOptional(tObject({}));\nscheme.PageBringToFrontResult = tOptional(tObject({}));\nscheme.PageUpdateSubscriptionParams = tObject({\n  event: tEnum(['console', 'dialog', 'fileChooser', 'request', 'response', 'requestFinished', 'requestFailed']),\n  enabled: tBoolean,\n});\nscheme.PageUpdateSubscriptionResult = tOptional(tObject({}));\nscheme.FrameInitializer = tObject({\n  url: tString,\n  name: tString,\n  parentFrame: tOptional(tChannel(['Frame'])),\n  loadStates: tArray(tType('LifecycleEvent')),\n});\nscheme.FrameLoadstateEvent = tObject({\n  add: tOptional(tType('LifecycleEvent')),\n  remove: tOptional(tType('LifecycleEvent')),\n});\nscheme.FrameNavigatedEvent = tObject({\n  url: tString,\n  name: tString,\n  newDocument: tOptional(tObject({\n    request: tOptional(tChannel(['Request'])),\n  })),\n  error: tOptional(tString),\n});\nscheme.FrameEvalOnSelectorParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  expression: tString,\n  isFunction: tOptional(tBoolean),\n  arg: tType('SerializedArgument'),\n});\nscheme.FrameEvalOnSelectorResult = tObject({\n  value: tType('SerializedValue'),\n});\nscheme.FrameEvalOnSelectorAllParams = tObject({\n  selector: tString,\n  expression: tString,\n  isFunction: tOptional(tBoolean),\n  arg: tType('SerializedArgument'),\n});\nscheme.FrameEvalOnSelectorAllResult = tObject({\n  value: tType('SerializedValue'),\n});\nscheme.FrameAddScriptTagParams = tObject({\n  url: tOptional(tString),\n  content: tOptional(tString),\n  type: tOptional(tString),\n});\nscheme.FrameAddScriptTagResult = tObject({\n  element: tChannel(['ElementHandle']),\n});\nscheme.FrameAddStyleTagParams = tObject({\n  url: tOptional(tString),\n  content: tOptional(tString),\n});\nscheme.FrameAddStyleTagResult = tObject({\n  element: tChannel(['ElementHandle']),\n});\nscheme.FrameAriaSnapshotParams = tObject({\n  selector: tString,\n  forAI: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FrameAriaSnapshotResult = tObject({\n  snapshot: tString,\n});\nscheme.FrameBlurParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FrameBlurResult = tOptional(tObject({}));\nscheme.FrameCheckParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  force: tOptional(tBoolean),\n  position: tOptional(tType('Point')),\n  timeout: tNumber,\n  trial: tOptional(tBoolean),\n});\nscheme.FrameCheckResult = tOptional(tObject({}));\nscheme.FrameClickParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  force: tOptional(tBoolean),\n  noWaitAfter: tOptional(tBoolean),\n  modifiers: tOptional(tArray(tEnum(['Alt', 'Control', 'ControlOrMeta', 'Meta', 'Shift']))),\n  position: tOptional(tType('Point')),\n  delay: tOptional(tNumber),\n  button: tOptional(tEnum(['left', 'right', 'middle'])),\n  clickCount: tOptional(tNumber),\n  timeout: tNumber,\n  trial: tOptional(tBoolean),\n});\nscheme.FrameClickResult = tOptional(tObject({}));\nscheme.FrameContentParams = tOptional(tObject({}));\nscheme.FrameContentResult = tObject({\n  value: tString,\n});\nscheme.FrameDragAndDropParams = tObject({\n  source: tString,\n  target: tString,\n  force: tOptional(tBoolean),\n  timeout: tNumber,\n  trial: tOptional(tBoolean),\n  sourcePosition: tOptional(tType('Point')),\n  targetPosition: tOptional(tType('Point')),\n  strict: tOptional(tBoolean),\n});\nscheme.FrameDragAndDropResult = tOptional(tObject({}));\nscheme.FrameDblclickParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  force: tOptional(tBoolean),\n  modifiers: tOptional(tArray(tEnum(['Alt', 'Control', 'ControlOrMeta', 'Meta', 'Shift']))),\n  position: tOptional(tType('Point')),\n  delay: tOptional(tNumber),\n  button: tOptional(tEnum(['left', 'right', 'middle'])),\n  timeout: tNumber,\n  trial: tOptional(tBoolean),\n});\nscheme.FrameDblclickResult = tOptional(tObject({}));\nscheme.FrameDispatchEventParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  type: tString,\n  eventInit: tType('SerializedArgument'),\n  timeout: tNumber,\n});\nscheme.FrameDispatchEventResult = tOptional(tObject({}));\nscheme.FrameEvaluateExpressionParams = tObject({\n  expression: tString,\n  isFunction: tOptional(tBoolean),\n  arg: tType('SerializedArgument'),\n});\nscheme.FrameEvaluateExpressionResult = tObject({\n  value: tType('SerializedValue'),\n});\nscheme.FrameEvaluateExpressionHandleParams = tObject({\n  expression: tString,\n  isFunction: tOptional(tBoolean),\n  arg: tType('SerializedArgument'),\n});\nscheme.FrameEvaluateExpressionHandleResult = tObject({\n  handle: tChannel(['ElementHandle', 'JSHandle']),\n});\nscheme.FrameFillParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  value: tString,\n  force: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FrameFillResult = tOptional(tObject({}));\nscheme.FrameFocusParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FrameFocusResult = tOptional(tObject({}));\nscheme.FrameFrameElementParams = tOptional(tObject({}));\nscheme.FrameFrameElementResult = tObject({\n  element: tChannel(['ElementHandle']),\n});\nscheme.FrameHighlightParams = tObject({\n  selector: tString,\n});\nscheme.FrameHighlightResult = tOptional(tObject({}));\nscheme.FrameGetAttributeParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  name: tString,\n  timeout: tNumber,\n});\nscheme.FrameGetAttributeResult = tObject({\n  value: tOptional(tString),\n});\nscheme.FrameGotoParams = tObject({\n  url: tString,\n  timeout: tNumber,\n  waitUntil: tOptional(tType('LifecycleEvent')),\n  referer: tOptional(tString),\n});\nscheme.FrameGotoResult = tObject({\n  response: tOptional(tChannel(['Response'])),\n});\nscheme.FrameHoverParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  force: tOptional(tBoolean),\n  modifiers: tOptional(tArray(tEnum(['Alt', 'Control', 'ControlOrMeta', 'Meta', 'Shift']))),\n  position: tOptional(tType('Point')),\n  timeout: tNumber,\n  trial: tOptional(tBoolean),\n});\nscheme.FrameHoverResult = tOptional(tObject({}));\nscheme.FrameInnerHTMLParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FrameInnerHTMLResult = tObject({\n  value: tString,\n});\nscheme.FrameInnerTextParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FrameInnerTextResult = tObject({\n  value: tString,\n});\nscheme.FrameInputValueParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FrameInputValueResult = tObject({\n  value: tString,\n});\nscheme.FrameIsCheckedParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FrameIsCheckedResult = tObject({\n  value: tBoolean,\n});\nscheme.FrameIsDisabledParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FrameIsDisabledResult = tObject({\n  value: tBoolean,\n});\nscheme.FrameIsEnabledParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FrameIsEnabledResult = tObject({\n  value: tBoolean,\n});\nscheme.FrameIsHiddenParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n});\nscheme.FrameIsHiddenResult = tObject({\n  value: tBoolean,\n});\nscheme.FrameIsVisibleParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n});\nscheme.FrameIsVisibleResult = tObject({\n  value: tBoolean,\n});\nscheme.FrameIsEditableParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FrameIsEditableResult = tObject({\n  value: tBoolean,\n});\nscheme.FramePressParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  key: tString,\n  delay: tOptional(tNumber),\n  noWaitAfter: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FramePressResult = tOptional(tObject({}));\nscheme.FrameQuerySelectorParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n});\nscheme.FrameQuerySelectorResult = tObject({\n  element: tOptional(tChannel(['ElementHandle'])),\n});\nscheme.FrameQuerySelectorAllParams = tObject({\n  selector: tString,\n});\nscheme.FrameQuerySelectorAllResult = tObject({\n  elements: tArray(tChannel(['ElementHandle'])),\n});\nscheme.FrameQueryCountParams = tObject({\n  selector: tString,\n});\nscheme.FrameQueryCountResult = tObject({\n  value: tNumber,\n});\nscheme.FrameSelectOptionParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  elements: tOptional(tArray(tChannel(['ElementHandle']))),\n  options: tOptional(tArray(tObject({\n    valueOrLabel: tOptional(tString),\n    value: tOptional(tString),\n    label: tOptional(tString),\n    index: tOptional(tNumber),\n  }))),\n  force: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FrameSelectOptionResult = tObject({\n  values: tArray(tString),\n});\nscheme.FrameSetContentParams = tObject({\n  html: tString,\n  timeout: tNumber,\n  waitUntil: tOptional(tType('LifecycleEvent')),\n});\nscheme.FrameSetContentResult = tOptional(tObject({}));\nscheme.FrameSetInputFilesParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  payloads: tOptional(tArray(tObject({\n    name: tString,\n    mimeType: tOptional(tString),\n    buffer: tBinary,\n  }))),\n  localDirectory: tOptional(tString),\n  directoryStream: tOptional(tChannel(['WritableStream'])),\n  localPaths: tOptional(tArray(tString)),\n  streams: tOptional(tArray(tChannel(['WritableStream']))),\n  timeout: tNumber,\n});\nscheme.FrameSetInputFilesResult = tOptional(tObject({}));\nscheme.FrameTapParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  force: tOptional(tBoolean),\n  modifiers: tOptional(tArray(tEnum(['Alt', 'Control', 'ControlOrMeta', 'Meta', 'Shift']))),\n  position: tOptional(tType('Point')),\n  timeout: tNumber,\n  trial: tOptional(tBoolean),\n});\nscheme.FrameTapResult = tOptional(tObject({}));\nscheme.FrameTextContentParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.FrameTextContentResult = tObject({\n  value: tOptional(tString),\n});\nscheme.FrameTitleParams = tOptional(tObject({}));\nscheme.FrameTitleResult = tObject({\n  value: tString,\n});\nscheme.FrameTypeParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  text: tString,\n  delay: tOptional(tNumber),\n  timeout: tNumber,\n});\nscheme.FrameTypeResult = tOptional(tObject({}));\nscheme.FrameUncheckParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  force: tOptional(tBoolean),\n  position: tOptional(tType('Point')),\n  timeout: tNumber,\n  trial: tOptional(tBoolean),\n});\nscheme.FrameUncheckResult = tOptional(tObject({}));\nscheme.FrameWaitForTimeoutParams = tObject({\n  timeout: tNumber,\n});\nscheme.FrameWaitForTimeoutResult = tOptional(tObject({}));\nscheme.FrameWaitForFunctionParams = tObject({\n  expression: tString,\n  isFunction: tOptional(tBoolean),\n  arg: tType('SerializedArgument'),\n  timeout: tNumber,\n  pollingInterval: tOptional(tNumber),\n});\nscheme.FrameWaitForFunctionResult = tObject({\n  handle: tChannel(['ElementHandle', 'JSHandle']),\n});\nscheme.FrameWaitForSelectorParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  timeout: tNumber,\n  state: tOptional(tEnum(['attached', 'detached', 'visible', 'hidden'])),\n  omitReturnValue: tOptional(tBoolean),\n});\nscheme.FrameWaitForSelectorResult = tObject({\n  element: tOptional(tChannel(['ElementHandle'])),\n});\nscheme.FrameExpectParams = tObject({\n  selector: tString,\n  expression: tString,\n  expressionArg: tOptional(tAny),\n  expectedText: tOptional(tArray(tType('ExpectedTextValue'))),\n  expectedNumber: tOptional(tNumber),\n  expectedValue: tOptional(tType('SerializedArgument')),\n  useInnerText: tOptional(tBoolean),\n  isNot: tBoolean,\n  timeout: tNumber,\n});\nscheme.FrameExpectResult = tObject({\n  matches: tBoolean,\n  received: tOptional(tType('SerializedValue')),\n  timedOut: tOptional(tBoolean),\n  log: tOptional(tArray(tString)),\n});\nscheme.WorkerInitializer = tObject({\n  url: tString,\n});\nscheme.WorkerCloseEvent = tOptional(tObject({}));\nscheme.WorkerEvaluateExpressionParams = tObject({\n  expression: tString,\n  isFunction: tOptional(tBoolean),\n  arg: tType('SerializedArgument'),\n});\nscheme.WorkerEvaluateExpressionResult = tObject({\n  value: tType('SerializedValue'),\n});\nscheme.WorkerEvaluateExpressionHandleParams = tObject({\n  expression: tString,\n  isFunction: tOptional(tBoolean),\n  arg: tType('SerializedArgument'),\n});\nscheme.WorkerEvaluateExpressionHandleResult = tObject({\n  handle: tChannel(['ElementHandle', 'JSHandle']),\n});\nscheme.JSHandleInitializer = tObject({\n  preview: tString,\n});\nscheme.JSHandlePreviewUpdatedEvent = tObject({\n  preview: tString,\n});\nscheme.ElementHandlePreviewUpdatedEvent = tType('JSHandlePreviewUpdatedEvent');\nscheme.JSHandleDisposeParams = tOptional(tObject({}));\nscheme.ElementHandleDisposeParams = tType('JSHandleDisposeParams');\nscheme.JSHandleDisposeResult = tOptional(tObject({}));\nscheme.ElementHandleDisposeResult = tType('JSHandleDisposeResult');\nscheme.JSHandleEvaluateExpressionParams = tObject({\n  expression: tString,\n  isFunction: tOptional(tBoolean),\n  arg: tType('SerializedArgument'),\n});\nscheme.ElementHandleEvaluateExpressionParams = tType('JSHandleEvaluateExpressionParams');\nscheme.JSHandleEvaluateExpressionResult = tObject({\n  value: tType('SerializedValue'),\n});\nscheme.ElementHandleEvaluateExpressionResult = tType('JSHandleEvaluateExpressionResult');\nscheme.JSHandleEvaluateExpressionHandleParams = tObject({\n  expression: tString,\n  isFunction: tOptional(tBoolean),\n  arg: tType('SerializedArgument'),\n});\nscheme.ElementHandleEvaluateExpressionHandleParams = tType('JSHandleEvaluateExpressionHandleParams');\nscheme.JSHandleEvaluateExpressionHandleResult = tObject({\n  handle: tChannel(['ElementHandle', 'JSHandle']),\n});\nscheme.ElementHandleEvaluateExpressionHandleResult = tType('JSHandleEvaluateExpressionHandleResult');\nscheme.JSHandleGetPropertyListParams = tOptional(tObject({}));\nscheme.ElementHandleGetPropertyListParams = tType('JSHandleGetPropertyListParams');\nscheme.JSHandleGetPropertyListResult = tObject({\n  properties: tArray(tObject({\n    name: tString,\n    value: tChannel(['ElementHandle', 'JSHandle']),\n  })),\n});\nscheme.ElementHandleGetPropertyListResult = tType('JSHandleGetPropertyListResult');\nscheme.JSHandleGetPropertyParams = tObject({\n  name: tString,\n});\nscheme.ElementHandleGetPropertyParams = tType('JSHandleGetPropertyParams');\nscheme.JSHandleGetPropertyResult = tObject({\n  handle: tChannel(['ElementHandle', 'JSHandle']),\n});\nscheme.ElementHandleGetPropertyResult = tType('JSHandleGetPropertyResult');\nscheme.JSHandleJsonValueParams = tOptional(tObject({}));\nscheme.ElementHandleJsonValueParams = tType('JSHandleJsonValueParams');\nscheme.JSHandleJsonValueResult = tObject({\n  value: tType('SerializedValue'),\n});\nscheme.ElementHandleJsonValueResult = tType('JSHandleJsonValueResult');\nscheme.ElementHandleInitializer = tObject({\n  preview: tString,\n});\nscheme.ElementHandleEvalOnSelectorParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  expression: tString,\n  isFunction: tOptional(tBoolean),\n  arg: tType('SerializedArgument'),\n});\nscheme.ElementHandleEvalOnSelectorResult = tObject({\n  value: tType('SerializedValue'),\n});\nscheme.ElementHandleEvalOnSelectorAllParams = tObject({\n  selector: tString,\n  expression: tString,\n  isFunction: tOptional(tBoolean),\n  arg: tType('SerializedArgument'),\n});\nscheme.ElementHandleEvalOnSelectorAllResult = tObject({\n  value: tType('SerializedValue'),\n});\nscheme.ElementHandleBoundingBoxParams = tOptional(tObject({}));\nscheme.ElementHandleBoundingBoxResult = tObject({\n  value: tOptional(tType('Rect')),\n});\nscheme.ElementHandleCheckParams = tObject({\n  force: tOptional(tBoolean),\n  position: tOptional(tType('Point')),\n  timeout: tNumber,\n  trial: tOptional(tBoolean),\n});\nscheme.ElementHandleCheckResult = tOptional(tObject({}));\nscheme.ElementHandleClickParams = tObject({\n  force: tOptional(tBoolean),\n  noWaitAfter: tOptional(tBoolean),\n  modifiers: tOptional(tArray(tEnum(['Alt', 'Control', 'ControlOrMeta', 'Meta', 'Shift']))),\n  position: tOptional(tType('Point')),\n  delay: tOptional(tNumber),\n  button: tOptional(tEnum(['left', 'right', 'middle'])),\n  clickCount: tOptional(tNumber),\n  timeout: tNumber,\n  trial: tOptional(tBoolean),\n});\nscheme.ElementHandleClickResult = tOptional(tObject({}));\nscheme.ElementHandleContentFrameParams = tOptional(tObject({}));\nscheme.ElementHandleContentFrameResult = tObject({\n  frame: tOptional(tChannel(['Frame'])),\n});\nscheme.ElementHandleDblclickParams = tObject({\n  force: tOptional(tBoolean),\n  modifiers: tOptional(tArray(tEnum(['Alt', 'Control', 'ControlOrMeta', 'Meta', 'Shift']))),\n  position: tOptional(tType('Point')),\n  delay: tOptional(tNumber),\n  button: tOptional(tEnum(['left', 'right', 'middle'])),\n  timeout: tNumber,\n  trial: tOptional(tBoolean),\n});\nscheme.ElementHandleDblclickResult = tOptional(tObject({}));\nscheme.ElementHandleDispatchEventParams = tObject({\n  type: tString,\n  eventInit: tType('SerializedArgument'),\n});\nscheme.ElementHandleDispatchEventResult = tOptional(tObject({}));\nscheme.ElementHandleFillParams = tObject({\n  value: tString,\n  force: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.ElementHandleFillResult = tOptional(tObject({}));\nscheme.ElementHandleFocusParams = tOptional(tObject({}));\nscheme.ElementHandleFocusResult = tOptional(tObject({}));\nscheme.ElementHandleGenerateLocatorStringParams = tOptional(tObject({}));\nscheme.ElementHandleGenerateLocatorStringResult = tObject({\n  value: tOptional(tString),\n});\nscheme.ElementHandleGetAttributeParams = tObject({\n  name: tString,\n});\nscheme.ElementHandleGetAttributeResult = tObject({\n  value: tOptional(tString),\n});\nscheme.ElementHandleHoverParams = tObject({\n  force: tOptional(tBoolean),\n  modifiers: tOptional(tArray(tEnum(['Alt', 'Control', 'ControlOrMeta', 'Meta', 'Shift']))),\n  position: tOptional(tType('Point')),\n  timeout: tNumber,\n  trial: tOptional(tBoolean),\n});\nscheme.ElementHandleHoverResult = tOptional(tObject({}));\nscheme.ElementHandleInnerHTMLParams = tOptional(tObject({}));\nscheme.ElementHandleInnerHTMLResult = tObject({\n  value: tString,\n});\nscheme.ElementHandleInnerTextParams = tOptional(tObject({}));\nscheme.ElementHandleInnerTextResult = tObject({\n  value: tString,\n});\nscheme.ElementHandleInputValueParams = tOptional(tObject({}));\nscheme.ElementHandleInputValueResult = tObject({\n  value: tString,\n});\nscheme.ElementHandleIsCheckedParams = tOptional(tObject({}));\nscheme.ElementHandleIsCheckedResult = tObject({\n  value: tBoolean,\n});\nscheme.ElementHandleIsDisabledParams = tOptional(tObject({}));\nscheme.ElementHandleIsDisabledResult = tObject({\n  value: tBoolean,\n});\nscheme.ElementHandleIsEditableParams = tOptional(tObject({}));\nscheme.ElementHandleIsEditableResult = tObject({\n  value: tBoolean,\n});\nscheme.ElementHandleIsEnabledParams = tOptional(tObject({}));\nscheme.ElementHandleIsEnabledResult = tObject({\n  value: tBoolean,\n});\nscheme.ElementHandleIsHiddenParams = tOptional(tObject({}));\nscheme.ElementHandleIsHiddenResult = tObject({\n  value: tBoolean,\n});\nscheme.ElementHandleIsVisibleParams = tOptional(tObject({}));\nscheme.ElementHandleIsVisibleResult = tObject({\n  value: tBoolean,\n});\nscheme.ElementHandleOwnerFrameParams = tOptional(tObject({}));\nscheme.ElementHandleOwnerFrameResult = tObject({\n  frame: tOptional(tChannel(['Frame'])),\n});\nscheme.ElementHandlePressParams = tObject({\n  key: tString,\n  delay: tOptional(tNumber),\n  timeout: tNumber,\n  noWaitAfter: tOptional(tBoolean),\n});\nscheme.ElementHandlePressResult = tOptional(tObject({}));\nscheme.ElementHandleQuerySelectorParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n});\nscheme.ElementHandleQuerySelectorResult = tObject({\n  element: tOptional(tChannel(['ElementHandle'])),\n});\nscheme.ElementHandleQuerySelectorAllParams = tObject({\n  selector: tString,\n});\nscheme.ElementHandleQuerySelectorAllResult = tObject({\n  elements: tArray(tChannel(['ElementHandle'])),\n});\nscheme.ElementHandleScreenshotParams = tObject({\n  timeout: tNumber,\n  type: tOptional(tEnum(['png', 'jpeg'])),\n  quality: tOptional(tNumber),\n  omitBackground: tOptional(tBoolean),\n  caret: tOptional(tEnum(['hide', 'initial'])),\n  animations: tOptional(tEnum(['disabled', 'allow'])),\n  scale: tOptional(tEnum(['css', 'device'])),\n  mask: tOptional(tArray(tObject({\n    frame: tChannel(['Frame']),\n    selector: tString,\n  }))),\n  maskColor: tOptional(tString),\n  style: tOptional(tString),\n});\nscheme.ElementHandleScreenshotResult = tObject({\n  binary: tBinary,\n});\nscheme.ElementHandleScrollIntoViewIfNeededParams = tObject({\n  timeout: tNumber,\n});\nscheme.ElementHandleScrollIntoViewIfNeededResult = tOptional(tObject({}));\nscheme.ElementHandleSelectOptionParams = tObject({\n  elements: tOptional(tArray(tChannel(['ElementHandle']))),\n  options: tOptional(tArray(tObject({\n    valueOrLabel: tOptional(tString),\n    value: tOptional(tString),\n    label: tOptional(tString),\n    index: tOptional(tNumber),\n  }))),\n  force: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.ElementHandleSelectOptionResult = tObject({\n  values: tArray(tString),\n});\nscheme.ElementHandleSelectTextParams = tObject({\n  force: tOptional(tBoolean),\n  timeout: tNumber,\n});\nscheme.ElementHandleSelectTextResult = tOptional(tObject({}));\nscheme.ElementHandleSetInputFilesParams = tObject({\n  payloads: tOptional(tArray(tObject({\n    name: tString,\n    mimeType: tOptional(tString),\n    buffer: tBinary,\n  }))),\n  localDirectory: tOptional(tString),\n  directoryStream: tOptional(tChannel(['WritableStream'])),\n  localPaths: tOptional(tArray(tString)),\n  streams: tOptional(tArray(tChannel(['WritableStream']))),\n  timeout: tNumber,\n});\nscheme.ElementHandleSetInputFilesResult = tOptional(tObject({}));\nscheme.ElementHandleTapParams = tObject({\n  force: tOptional(tBoolean),\n  modifiers: tOptional(tArray(tEnum(['Alt', 'Control', 'ControlOrMeta', 'Meta', 'Shift']))),\n  position: tOptional(tType('Point')),\n  timeout: tNumber,\n  trial: tOptional(tBoolean),\n});\nscheme.ElementHandleTapResult = tOptional(tObject({}));\nscheme.ElementHandleTextContentParams = tOptional(tObject({}));\nscheme.ElementHandleTextContentResult = tObject({\n  value: tOptional(tString),\n});\nscheme.ElementHandleTypeParams = tObject({\n  text: tString,\n  delay: tOptional(tNumber),\n  timeout: tNumber,\n});\nscheme.ElementHandleTypeResult = tOptional(tObject({}));\nscheme.ElementHandleUncheckParams = tObject({\n  force: tOptional(tBoolean),\n  position: tOptional(tType('Point')),\n  timeout: tNumber,\n  trial: tOptional(tBoolean),\n});\nscheme.ElementHandleUncheckResult = tOptional(tObject({}));\nscheme.ElementHandleWaitForElementStateParams = tObject({\n  state: tEnum(['visible', 'hidden', 'stable', 'enabled', 'disabled', 'editable']),\n  timeout: tNumber,\n});\nscheme.ElementHandleWaitForElementStateResult = tOptional(tObject({}));\nscheme.ElementHandleWaitForSelectorParams = tObject({\n  selector: tString,\n  strict: tOptional(tBoolean),\n  timeout: tNumber,\n  state: tOptional(tEnum(['attached', 'detached', 'visible', 'hidden'])),\n});\nscheme.ElementHandleWaitForSelectorResult = tObject({\n  element: tOptional(tChannel(['ElementHandle'])),\n});\nscheme.RequestInitializer = tObject({\n  frame: tOptional(tChannel(['Frame'])),\n  serviceWorker: tOptional(tChannel(['Worker'])),\n  url: tString,\n  resourceType: tString,\n  method: tString,\n  postData: tOptional(tBinary),\n  headers: tArray(tType('NameValue')),\n  isNavigationRequest: tBoolean,\n  redirectedFrom: tOptional(tChannel(['Request'])),\n});\nscheme.RequestResponseParams = tOptional(tObject({}));\nscheme.RequestResponseResult = tObject({\n  response: tOptional(tChannel(['Response'])),\n});\nscheme.RequestRawRequestHeadersParams = tOptional(tObject({}));\nscheme.RequestRawRequestHeadersResult = tObject({\n  headers: tArray(tType('NameValue')),\n});\nscheme.RouteInitializer = tObject({\n  request: tChannel(['Request']),\n});\nscheme.RouteRedirectNavigationRequestParams = tObject({\n  url: tString,\n});\nscheme.RouteRedirectNavigationRequestResult = tOptional(tObject({}));\nscheme.RouteAbortParams = tObject({\n  errorCode: tOptional(tString),\n});\nscheme.RouteAbortResult = tOptional(tObject({}));\nscheme.RouteContinueParams = tObject({\n  url: tOptional(tString),\n  method: tOptional(tString),\n  headers: tOptional(tArray(tType('NameValue'))),\n  postData: tOptional(tBinary),\n  isFallback: tBoolean,\n});\nscheme.RouteContinueResult = tOptional(tObject({}));\nscheme.RouteFulfillParams = tObject({\n  status: tOptional(tNumber),\n  headers: tOptional(tArray(tType('NameValue'))),\n  body: tOptional(tString),\n  isBase64: tOptional(tBoolean),\n  fetchResponseUid: tOptional(tString),\n});\nscheme.RouteFulfillResult = tOptional(tObject({}));\nscheme.WebSocketRouteInitializer = tObject({\n  url: tString,\n});\nscheme.WebSocketRouteMessageFromPageEvent = tObject({\n  message: tString,\n  isBase64: tBoolean,\n});\nscheme.WebSocketRouteMessageFromServerEvent = tObject({\n  message: tString,\n  isBase64: tBoolean,\n});\nscheme.WebSocketRouteClosePageEvent = tObject({\n  code: tOptional(tNumber),\n  reason: tOptional(tString),\n  wasClean: tBoolean,\n});\nscheme.WebSocketRouteCloseServerEvent = tObject({\n  code: tOptional(tNumber),\n  reason: tOptional(tString),\n  wasClean: tBoolean,\n});\nscheme.WebSocketRouteConnectParams = tOptional(tObject({}));\nscheme.WebSocketRouteConnectResult = tOptional(tObject({}));\nscheme.WebSocketRouteEnsureOpenedParams = tOptional(tObject({}));\nscheme.WebSocketRouteEnsureOpenedResult = tOptional(tObject({}));\nscheme.WebSocketRouteSendToPageParams = tObject({\n  message: tString,\n  isBase64: tBoolean,\n});\nscheme.WebSocketRouteSendToPageResult = tOptional(tObject({}));\nscheme.WebSocketRouteSendToServerParams = tObject({\n  message: tString,\n  isBase64: tBoolean,\n});\nscheme.WebSocketRouteSendToServerResult = tOptional(tObject({}));\nscheme.WebSocketRouteClosePageParams = tObject({\n  code: tOptional(tNumber),\n  reason: tOptional(tString),\n  wasClean: tBoolean,\n});\nscheme.WebSocketRouteClosePageResult = tOptional(tObject({}));\nscheme.WebSocketRouteCloseServerParams = tObject({\n  code: tOptional(tNumber),\n  reason: tOptional(tString),\n  wasClean: tBoolean,\n});\nscheme.WebSocketRouteCloseServerResult = tOptional(tObject({}));\nscheme.ResourceTiming = tObject({\n  startTime: tNumber,\n  domainLookupStart: tNumber,\n  domainLookupEnd: tNumber,\n  connectStart: tNumber,\n  secureConnectionStart: tNumber,\n  connectEnd: tNumber,\n  requestStart: tNumber,\n  responseStart: tNumber,\n});\nscheme.ResponseInitializer = tObject({\n  request: tChannel(['Request']),\n  url: tString,\n  status: tNumber,\n  statusText: tString,\n  headers: tArray(tType('NameValue')),\n  timing: tType('ResourceTiming'),\n  fromServiceWorker: tBoolean,\n});\nscheme.ResponseBodyParams = tOptional(tObject({}));\nscheme.ResponseBodyResult = tObject({\n  binary: tBinary,\n});\nscheme.ResponseSecurityDetailsParams = tOptional(tObject({}));\nscheme.ResponseSecurityDetailsResult = tObject({\n  value: tOptional(tType('SecurityDetails')),\n});\nscheme.ResponseServerAddrParams = tOptional(tObject({}));\nscheme.ResponseServerAddrResult = tObject({\n  value: tOptional(tType('RemoteAddr')),\n});\nscheme.ResponseRawResponseHeadersParams = tOptional(tObject({}));\nscheme.ResponseRawResponseHeadersResult = tObject({\n  headers: tArray(tType('NameValue')),\n});\nscheme.ResponseSizesParams = tOptional(tObject({}));\nscheme.ResponseSizesResult = tObject({\n  sizes: tType('RequestSizes'),\n});\nscheme.SecurityDetails = tObject({\n  issuer: tOptional(tString),\n  protocol: tOptional(tString),\n  subjectName: tOptional(tString),\n  validFrom: tOptional(tNumber),\n  validTo: tOptional(tNumber),\n});\nscheme.RequestSizes = tObject({\n  requestBodySize: tNumber,\n  requestHeadersSize: tNumber,\n  responseBodySize: tNumber,\n  responseHeadersSize: tNumber,\n});\nscheme.RemoteAddr = tObject({\n  ipAddress: tString,\n  port: tNumber,\n});\nscheme.WebSocketInitializer = tObject({\n  url: tString,\n});\nscheme.WebSocketOpenEvent = tOptional(tObject({}));\nscheme.WebSocketFrameSentEvent = tObject({\n  opcode: tNumber,\n  data: tString,\n});\nscheme.WebSocketFrameReceivedEvent = tObject({\n  opcode: tNumber,\n  data: tString,\n});\nscheme.WebSocketSocketErrorEvent = tObject({\n  error: tString,\n});\nscheme.WebSocketCloseEvent = tOptional(tObject({}));\nscheme.BindingCallInitializer = tObject({\n  frame: tChannel(['Frame']),\n  name: tString,\n  args: tOptional(tArray(tType('SerializedValue'))),\n  handle: tOptional(tChannel(['ElementHandle', 'JSHandle'])),\n});\nscheme.BindingCallRejectParams = tObject({\n  error: tType('SerializedError'),\n});\nscheme.BindingCallRejectResult = tOptional(tObject({}));\nscheme.BindingCallResolveParams = tObject({\n  result: tType('SerializedArgument'),\n});\nscheme.BindingCallResolveResult = tOptional(tObject({}));\nscheme.DialogInitializer = tObject({\n  page: tOptional(tChannel(['Page'])),\n  type: tString,\n  message: tString,\n  defaultValue: tString,\n});\nscheme.DialogAcceptParams = tObject({\n  promptText: tOptional(tString),\n});\nscheme.DialogAcceptResult = tOptional(tObject({}));\nscheme.DialogDismissParams = tOptional(tObject({}));\nscheme.DialogDismissResult = tOptional(tObject({}));\nscheme.TracingInitializer = tOptional(tObject({}));\nscheme.TracingTracingStartParams = tObject({\n  name: tOptional(tString),\n  snapshots: tOptional(tBoolean),\n  screenshots: tOptional(tBoolean),\n  live: tOptional(tBoolean),\n});\nscheme.TracingTracingStartResult = tOptional(tObject({}));\nscheme.TracingTracingStartChunkParams = tObject({\n  name: tOptional(tString),\n  title: tOptional(tString),\n});\nscheme.TracingTracingStartChunkResult = tObject({\n  traceName: tString,\n});\nscheme.TracingTracingGroupParams = tObject({\n  name: tString,\n  location: tOptional(tObject({\n    file: tString,\n    line: tOptional(tNumber),\n    column: tOptional(tNumber),\n  })),\n});\nscheme.TracingTracingGroupResult = tOptional(tObject({}));\nscheme.TracingTracingGroupEndParams = tOptional(tObject({}));\nscheme.TracingTracingGroupEndResult = tOptional(tObject({}));\nscheme.TracingTracingStopChunkParams = tObject({\n  mode: tEnum(['archive', 'discard', 'entries']),\n});\nscheme.TracingTracingStopChunkResult = tObject({\n  artifact: tOptional(tChannel(['Artifact'])),\n  entries: tOptional(tArray(tType('NameValue'))),\n});\nscheme.TracingTracingStopParams = tOptional(tObject({}));\nscheme.TracingTracingStopResult = tOptional(tObject({}));\nscheme.ArtifactInitializer = tObject({\n  absolutePath: tString,\n});\nscheme.ArtifactPathAfterFinishedParams = tOptional(tObject({}));\nscheme.ArtifactPathAfterFinishedResult = tObject({\n  value: tString,\n});\nscheme.ArtifactSaveAsParams = tObject({\n  path: tString,\n});\nscheme.ArtifactSaveAsResult = tOptional(tObject({}));\nscheme.ArtifactSaveAsStreamParams = tOptional(tObject({}));\nscheme.ArtifactSaveAsStreamResult = tObject({\n  stream: tChannel(['Stream']),\n});\nscheme.ArtifactFailureParams = tOptional(tObject({}));\nscheme.ArtifactFailureResult = tObject({\n  error: tOptional(tString),\n});\nscheme.ArtifactStreamParams = tOptional(tObject({}));\nscheme.ArtifactStreamResult = tObject({\n  stream: tChannel(['Stream']),\n});\nscheme.ArtifactCancelParams = tOptional(tObject({}));\nscheme.ArtifactCancelResult = tOptional(tObject({}));\nscheme.ArtifactDeleteParams = tOptional(tObject({}));\nscheme.ArtifactDeleteResult = tOptional(tObject({}));\nscheme.StreamInitializer = tOptional(tObject({}));\nscheme.StreamReadParams = tObject({\n  size: tOptional(tNumber),\n});\nscheme.StreamReadResult = tObject({\n  binary: tBinary,\n});\nscheme.StreamCloseParams = tOptional(tObject({}));\nscheme.StreamCloseResult = tOptional(tObject({}));\nscheme.WritableStreamInitializer = tOptional(tObject({}));\nscheme.WritableStreamWriteParams = tObject({\n  binary: tBinary,\n});\nscheme.WritableStreamWriteResult = tOptional(tObject({}));\nscheme.WritableStreamCloseParams = tOptional(tObject({}));\nscheme.WritableStreamCloseResult = tOptional(tObject({}));\nscheme.CDPSessionInitializer = tOptional(tObject({}));\nscheme.CDPSessionEventEvent = tObject({\n  method: tString,\n  params: tOptional(tAny),\n});\nscheme.CDPSessionSendParams = tObject({\n  method: tString,\n  params: tOptional(tAny),\n});\nscheme.CDPSessionSendResult = tObject({\n  result: tAny,\n});\nscheme.CDPSessionDetachParams = tOptional(tObject({}));\nscheme.CDPSessionDetachResult = tOptional(tObject({}));\nscheme.ElectronInitializer = tOptional(tObject({}));\nscheme.ElectronLaunchParams = tObject({\n  executablePath: tOptional(tString),\n  args: tOptional(tArray(tString)),\n  cwd: tOptional(tString),\n  env: tOptional(tArray(tType('NameValue'))),\n  timeout: tNumber,\n  acceptDownloads: tOptional(tEnum(['accept', 'deny', 'internal-browser-default'])),\n  bypassCSP: tOptional(tBoolean),\n  colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'no-override'])),\n  extraHTTPHeaders: tOptional(tArray(tType('NameValue'))),\n  geolocation: tOptional(tObject({\n    longitude: tNumber,\n    latitude: tNumber,\n    accuracy: tOptional(tNumber),\n  })),\n  httpCredentials: tOptional(tObject({\n    username: tString,\n    password: tString,\n    origin: tOptional(tString),\n  })),\n  ignoreHTTPSErrors: tOptional(tBoolean),\n  locale: tOptional(tString),\n  offline: tOptional(tBoolean),\n  recordVideo: tOptional(tObject({\n    dir: tString,\n    size: tOptional(tObject({\n      width: tNumber,\n      height: tNumber,\n    })),\n  })),\n  strictSelectors: tOptional(tBoolean),\n  timezoneId: tOptional(tString),\n  tracesDir: tOptional(tString),\n  selectorEngines: tOptional(tArray(tType('SelectorEngine'))),\n  testIdAttributeName: tOptional(tString),\n});\nscheme.ElectronLaunchResult = tObject({\n  electronApplication: tChannel(['ElectronApplication']),\n});\nscheme.ElectronApplicationInitializer = tObject({\n  context: tChannel(['BrowserContext']),\n});\nscheme.ElectronApplicationCloseEvent = tOptional(tObject({}));\nscheme.ElectronApplicationConsoleEvent = tObject({\n  type: tString,\n  text: tString,\n  args: tArray(tChannel(['ElementHandle', 'JSHandle'])),\n  location: tObject({\n    url: tString,\n    lineNumber: tNumber,\n    columnNumber: tNumber,\n  }),\n});\nscheme.ElectronApplicationBrowserWindowParams = tObject({\n  page: tChannel(['Page']),\n});\nscheme.ElectronApplicationBrowserWindowResult = tObject({\n  handle: tChannel(['ElementHandle', 'JSHandle']),\n});\nscheme.ElectronApplicationEvaluateExpressionParams = tObject({\n  expression: tString,\n  isFunction: tOptional(tBoolean),\n  arg: tType('SerializedArgument'),\n});\nscheme.ElectronApplicationEvaluateExpressionResult = tObject({\n  value: tType('SerializedValue'),\n});\nscheme.ElectronApplicationEvaluateExpressionHandleParams = tObject({\n  expression: tString,\n  isFunction: tOptional(tBoolean),\n  arg: tType('SerializedArgument'),\n});\nscheme.ElectronApplicationEvaluateExpressionHandleResult = tObject({\n  handle: tChannel(['ElementHandle', 'JSHandle']),\n});\nscheme.ElectronApplicationUpdateSubscriptionParams = tObject({\n  event: tEnum(['console']),\n  enabled: tBoolean,\n});\nscheme.ElectronApplicationUpdateSubscriptionResult = tOptional(tObject({}));\nscheme.AndroidInitializer = tOptional(tObject({}));\nscheme.AndroidDevicesParams = tObject({\n  host: tOptional(tString),\n  port: tOptional(tNumber),\n  omitDriverInstall: tOptional(tBoolean),\n});\nscheme.AndroidDevicesResult = tObject({\n  devices: tArray(tChannel(['AndroidDevice'])),\n});\nscheme.AndroidSocketInitializer = tOptional(tObject({}));\nscheme.AndroidSocketDataEvent = tObject({\n  data: tBinary,\n});\nscheme.AndroidSocketCloseEvent = tOptional(tObject({}));\nscheme.AndroidSocketWriteParams = tObject({\n  data: tBinary,\n});\nscheme.AndroidSocketWriteResult = tOptional(tObject({}));\nscheme.AndroidSocketCloseParams = tOptional(tObject({}));\nscheme.AndroidSocketCloseResult = tOptional(tObject({}));\nscheme.AndroidDeviceInitializer = tObject({\n  model: tString,\n  serial: tString,\n});\nscheme.AndroidDeviceCloseEvent = tOptional(tObject({}));\nscheme.AndroidDeviceWebViewAddedEvent = tObject({\n  webView: tType('AndroidWebView'),\n});\nscheme.AndroidDeviceWebViewRemovedEvent = tObject({\n  socketName: tString,\n});\nscheme.AndroidDeviceWaitParams = tObject({\n  androidSelector: tType('AndroidSelector'),\n  state: tOptional(tEnum(['gone'])),\n  timeout: tNumber,\n});\nscheme.AndroidDeviceWaitResult = tOptional(tObject({}));\nscheme.AndroidDeviceFillParams = tObject({\n  androidSelector: tType('AndroidSelector'),\n  text: tString,\n  timeout: tNumber,\n});\nscheme.AndroidDeviceFillResult = tOptional(tObject({}));\nscheme.AndroidDeviceTapParams = tObject({\n  androidSelector: tType('AndroidSelector'),\n  duration: tOptional(tNumber),\n  timeout: tNumber,\n});\nscheme.AndroidDeviceTapResult = tOptional(tObject({}));\nscheme.AndroidDeviceDragParams = tObject({\n  androidSelector: tType('AndroidSelector'),\n  dest: tType('Point'),\n  speed: tOptional(tNumber),\n  timeout: tNumber,\n});\nscheme.AndroidDeviceDragResult = tOptional(tObject({}));\nscheme.AndroidDeviceFlingParams = tObject({\n  androidSelector: tType('AndroidSelector'),\n  direction: tEnum(['up', 'down', 'left', 'right']),\n  speed: tOptional(tNumber),\n  timeout: tNumber,\n});\nscheme.AndroidDeviceFlingResult = tOptional(tObject({}));\nscheme.AndroidDeviceLongTapParams = tObject({\n  androidSelector: tType('AndroidSelector'),\n  timeout: tNumber,\n});\nscheme.AndroidDeviceLongTapResult = tOptional(tObject({}));\nscheme.AndroidDevicePinchCloseParams = tObject({\n  androidSelector: tType('AndroidSelector'),\n  percent: tNumber,\n  speed: tOptional(tNumber),\n  timeout: tNumber,\n});\nscheme.AndroidDevicePinchCloseResult = tOptional(tObject({}));\nscheme.AndroidDevicePinchOpenParams = tObject({\n  androidSelector: tType('AndroidSelector'),\n  percent: tNumber,\n  speed: tOptional(tNumber),\n  timeout: tNumber,\n});\nscheme.AndroidDevicePinchOpenResult = tOptional(tObject({}));\nscheme.AndroidDeviceScrollParams = tObject({\n  androidSelector: tType('AndroidSelector'),\n  direction: tEnum(['up', 'down', 'left', 'right']),\n  percent: tNumber,\n  speed: tOptional(tNumber),\n  timeout: tNumber,\n});\nscheme.AndroidDeviceScrollResult = tOptional(tObject({}));\nscheme.AndroidDeviceSwipeParams = tObject({\n  androidSelector: tType('AndroidSelector'),\n  direction: tEnum(['up', 'down', 'left', 'right']),\n  percent: tNumber,\n  speed: tOptional(tNumber),\n  timeout: tNumber,\n});\nscheme.AndroidDeviceSwipeResult = tOptional(tObject({}));\nscheme.AndroidDeviceInfoParams = tObject({\n  androidSelector: tType('AndroidSelector'),\n});\nscheme.AndroidDeviceInfoResult = tObject({\n  info: tType('AndroidElementInfo'),\n});\nscheme.AndroidDeviceScreenshotParams = tOptional(tObject({}));\nscheme.AndroidDeviceScreenshotResult = tObject({\n  binary: tBinary,\n});\nscheme.AndroidDeviceInputTypeParams = tObject({\n  text: tString,\n});\nscheme.AndroidDeviceInputTypeResult = tOptional(tObject({}));\nscheme.AndroidDeviceInputPressParams = tObject({\n  key: tString,\n});\nscheme.AndroidDeviceInputPressResult = tOptional(tObject({}));\nscheme.AndroidDeviceInputTapParams = tObject({\n  point: tType('Point'),\n});\nscheme.AndroidDeviceInputTapResult = tOptional(tObject({}));\nscheme.AndroidDeviceInputSwipeParams = tObject({\n  segments: tArray(tType('Point')),\n  steps: tNumber,\n});\nscheme.AndroidDeviceInputSwipeResult = tOptional(tObject({}));\nscheme.AndroidDeviceInputDragParams = tObject({\n  from: tType('Point'),\n  to: tType('Point'),\n  steps: tNumber,\n});\nscheme.AndroidDeviceInputDragResult = tOptional(tObject({}));\nscheme.AndroidDeviceLaunchBrowserParams = tObject({\n  noDefaultViewport: tOptional(tBoolean),\n  viewport: tOptional(tObject({\n    width: tNumber,\n    height: tNumber,\n  })),\n  screen: tOptional(tObject({\n    width: tNumber,\n    height: tNumber,\n  })),\n  ignoreHTTPSErrors: tOptional(tBoolean),\n  clientCertificates: tOptional(tArray(tObject({\n    origin: tString,\n    cert: tOptional(tBinary),\n    key: tOptional(tBinary),\n    passphrase: tOptional(tString),\n    pfx: tOptional(tBinary),\n  }))),\n  javaScriptEnabled: tOptional(tBoolean),\n  bypassCSP: tOptional(tBoolean),\n  userAgent: tOptional(tString),\n  locale: tOptional(tString),\n  timezoneId: tOptional(tString),\n  geolocation: tOptional(tObject({\n    longitude: tNumber,\n    latitude: tNumber,\n    accuracy: tOptional(tNumber),\n  })),\n  permissions: tOptional(tArray(tString)),\n  extraHTTPHeaders: tOptional(tArray(tType('NameValue'))),\n  offline: tOptional(tBoolean),\n  httpCredentials: tOptional(tObject({\n    username: tString,\n    password: tString,\n    origin: tOptional(tString),\n    send: tOptional(tEnum(['always', 'unauthorized'])),\n  })),\n  deviceScaleFactor: tOptional(tNumber),\n  isMobile: tOptional(tBoolean),\n  hasTouch: tOptional(tBoolean),\n  colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'no-override'])),\n  reducedMotion: tOptional(tEnum(['reduce', 'no-preference', 'no-override'])),\n  forcedColors: tOptional(tEnum(['active', 'none', 'no-override'])),\n  acceptDownloads: tOptional(tEnum(['accept', 'deny', 'internal-browser-default'])),\n  contrast: tOptional(tEnum(['no-preference', 'more', 'no-override'])),\n  baseURL: tOptional(tString),\n  recordVideo: tOptional(tObject({\n    dir: tString,\n    size: tOptional(tObject({\n      width: tNumber,\n      height: tNumber,\n    })),\n  })),\n  strictSelectors: tOptional(tBoolean),\n  serviceWorkers: tOptional(tEnum(['allow', 'block'])),\n  selectorEngines: tOptional(tArray(tType('SelectorEngine'))),\n  testIdAttributeName: tOptional(tString),\n  pkg: tOptional(tString),\n  args: tOptional(tArray(tString)),\n  proxy: tOptional(tObject({\n    server: tString,\n    bypass: tOptional(tString),\n    username: tOptional(tString),\n    password: tOptional(tString),\n  })),\n});\nscheme.AndroidDeviceLaunchBrowserResult = tObject({\n  context: tChannel(['BrowserContext']),\n});\nscheme.AndroidDeviceOpenParams = tObject({\n  command: tString,\n});\nscheme.AndroidDeviceOpenResult = tObject({\n  socket: tChannel(['AndroidSocket']),\n});\nscheme.AndroidDeviceShellParams = tObject({\n  command: tString,\n});\nscheme.AndroidDeviceShellResult = tObject({\n  result: tBinary,\n});\nscheme.AndroidDeviceInstallApkParams = tObject({\n  file: tBinary,\n  args: tOptional(tArray(tString)),\n});\nscheme.AndroidDeviceInstallApkResult = tOptional(tObject({}));\nscheme.AndroidDevicePushParams = tObject({\n  file: tBinary,\n  path: tString,\n  mode: tOptional(tNumber),\n});\nscheme.AndroidDevicePushResult = tOptional(tObject({}));\nscheme.AndroidDeviceConnectToWebViewParams = tObject({\n  socketName: tString,\n});\nscheme.AndroidDeviceConnectToWebViewResult = tObject({\n  context: tChannel(['BrowserContext']),\n});\nscheme.AndroidDeviceCloseParams = tOptional(tObject({}));\nscheme.AndroidDeviceCloseResult = tOptional(tObject({}));\nscheme.AndroidWebView = tObject({\n  pid: tNumber,\n  pkg: tString,\n  socketName: tString,\n});\nscheme.AndroidSelector = tObject({\n  checkable: tOptional(tBoolean),\n  checked: tOptional(tBoolean),\n  clazz: tOptional(tString),\n  clickable: tOptional(tBoolean),\n  depth: tOptional(tNumber),\n  desc: tOptional(tString),\n  enabled: tOptional(tBoolean),\n  focusable: tOptional(tBoolean),\n  focused: tOptional(tBoolean),\n  hasChild: tOptional(tObject({\n    androidSelector: tType('AndroidSelector'),\n  })),\n  hasDescendant: tOptional(tObject({\n    androidSelector: tType('AndroidSelector'),\n    maxDepth: tOptional(tNumber),\n  })),\n  longClickable: tOptional(tBoolean),\n  pkg: tOptional(tString),\n  res: tOptional(tString),\n  scrollable: tOptional(tBoolean),\n  selected: tOptional(tBoolean),\n  text: tOptional(tString),\n});\nscheme.AndroidElementInfo = tObject({\n  children: tOptional(tArray(tType('AndroidElementInfo'))),\n  clazz: tString,\n  desc: tString,\n  res: tString,\n  pkg: tString,\n  text: tString,\n  bounds: tType('Rect'),\n  checkable: tBoolean,\n  checked: tBoolean,\n  clickable: tBoolean,\n  enabled: tBoolean,\n  focusable: tBoolean,\n  focused: tBoolean,\n  longClickable: tBoolean,\n  scrollable: tBoolean,\n  selected: tBoolean,\n});\nscheme.JsonPipeInitializer = tOptional(tObject({}));\nscheme.JsonPipeMessageEvent = tObject({\n  message: tAny,\n});\nscheme.JsonPipeClosedEvent = tObject({\n  reason: tOptional(tString),\n});\nscheme.JsonPipeSendParams = tObject({\n  message: tAny,\n});\nscheme.JsonPipeSendResult = tOptional(tObject({}));\nscheme.JsonPipeCloseParams = tOptional(tObject({}));\nscheme.JsonPipeCloseResult = tOptional(tObject({}));\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport 'playwright-core/lib/protocol/validator';\n\nimport { scheme, tArray, tBoolean, tChannel, tEnum, tNumber, tObject, tOptional, tString } from 'playwright-core/lib/protocol/validatorPrimitives';\n\nconst tBrowserContextOptions = () => tObject({\n  colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference'])),\n  locale: tOptional(tString),\n  timezoneId: tOptional(tString),\n  geolocation: tOptional(tObject({\n    latitude: tNumber,\n    longitude: tNumber,\n  })),\n  viewport: tOptional(tObject({\n    width: tNumber,\n    height: tNumber,\n  })),\n  permissions: tOptional(tArray(tString)),\n  serviceWorkers: tOptional(tEnum(['allow', 'block'])),\n});\n\n// \"override\" PlaywrightInitializer, adds _crx\nscheme.PlaywrightInitializer = tObject({\n  chromium: tChannel(['BrowserType']),\n  firefox: tChannel(['BrowserType']),\n  webkit: tChannel(['BrowserType']),\n  bidiChromium: tChannel(['BrowserType']),\n  bidiFirefox: tChannel(['BrowserType']),\n  android: tChannel(['Android']),\n  electron: tChannel(['Electron']),\n  utils: tOptional(tChannel(['LocalUtils'])),\n  preLaunchedBrowser: tOptional(tChannel(['Browser'])),\n  preConnectedAndroidDevice: tOptional(tChannel(['AndroidDevice'])),\n  socksSupport: tOptional(tChannel(['SocksSupport'])),\n  _crx: tChannel(['Crx']),\n});\n\nscheme.CrxInitializer = tOptional(tObject({}));\nscheme.CrxStartParams = tObject({\n  slowMo: tOptional(tNumber),\n  artifactsDir: tOptional(tString),\n  downloadsPath: tOptional(tString),\n  tracesDir: tOptional(tString),\n  incognito: tOptional(tBoolean),\n  deviceName: tOptional(tString),\n  contextOptions: tOptional(tBrowserContextOptions()),\n});\nscheme.CrxStartResult = tObject({\n  crxApplication: tChannel(['CrxApplication']),\n});\nscheme.CrxApplicationInitializer = tObject({\n  context: tChannel(['BrowserContext']),\n});\nscheme.CrxApplicationHideEvent = tOptional(tObject({}));\nscheme.CrxApplicationShowEvent = tOptional(tObject({}));\nscheme.CrxApplicationAttachedEvent = tObject({\n  page: tChannel(['Page']),\n  tabId: tNumber,\n});\nscheme.CrxApplicationDetachedEvent = tObject({\n  tabId: tNumber,\n});\nscheme.CrxApplicationModeChangedEvent = tObject({\n  mode: tEnum(['none', 'recording', 'inspecting', 'assertingText', 'recording-inspecting', 'standby', 'assertingVisibility', 'assertingValue']),\n});\nscheme.CrxApplicationAttachParams = tObject({\n  tabId: tNumber,\n});\nscheme.CrxApplicationAttachResult = tObject({\n  page: tChannel(['Page']),\n});\nscheme.CrxApplicationAttachAllParams = tObject({\n  status: tOptional(tEnum(['loading', 'complete'])),\n  lastFocusedWindow: tOptional(tBoolean),\n  windowId: tOptional(tNumber),\n  windowType: tOptional(tEnum(['normal', 'popup', 'panel', 'app', 'devtools'])),\n  active: tOptional(tBoolean),\n  index: tOptional(tNumber),\n  title: tOptional(tString),\n  url: tOptional(tArray(tString)),\n  currentWindow: tOptional(tBoolean),\n  highlighted: tOptional(tBoolean),\n  discarded: tOptional(tBoolean),\n  autoDiscardable: tOptional(tBoolean),\n  pinned: tOptional(tBoolean),\n  audible: tOptional(tBoolean),\n  muted: tOptional(tBoolean),\n  groupId: tOptional(tNumber),\n});\nscheme.CrxApplicationAttachAllResult = tObject({\n  pages: tArray(tChannel(['Page'])),\n});\nscheme.CrxApplicationDetachParams = tObject({\n  tabId: tOptional(tNumber),\n  page: tOptional(tChannel(['Page'])),\n});\nscheme.CrxApplicationDetachResult = tOptional(tObject({}));\nscheme.CrxApplicationDetachAllParams = tOptional(tObject({}));\nscheme.CrxApplicationDetachAllResult = tOptional(tObject({}));\nscheme.CrxApplicationNewPageParams = tObject({\n  index: tOptional(tNumber),\n  openerTabId: tOptional(tNumber),\n  url: tOptional(tString),\n  pinned: tOptional(tBoolean),\n  windowId: tOptional(tNumber),\n  active: tOptional(tBoolean),\n  selected: tOptional(tBoolean),\n});\nscheme.CrxApplicationNewPageResult = tObject({\n  page: tChannel(['Page']),\n});\nscheme.CrxApplicationShowRecorderParams = tObject({\n  mode: tOptional(tEnum(['none', 'recording', 'inspecting', 'assertingText', 'recording-inspecting', 'standby', 'assertingVisibility', 'assertingValue'])),\n  language: tOptional(tString),\n  testIdAttributeName: tOptional(tString),\n  playInIncognito: tOptional(tBoolean),\n  window: tOptional(tObject({\n    type: tOptional(tEnum(['popup', 'sidepanel'])),\n    url: tOptional(tString),\n  })),\n});\nscheme.CrxApplicationShowRecorderResult = tOptional(tObject({}));\nscheme.CrxApplicationHideRecorderParams = tOptional(tObject({}));\nscheme.CrxApplicationHideRecorderResult = tOptional(tObject({}));\nscheme.CrxApplicationSetModeParams = tObject({\n  mode: tEnum(['none', 'recording', 'inspecting', 'assertingText', 'recording-inspecting', 'standby', 'assertingVisibility', 'assertingValue']),\n});\nscheme.CrxApplicationSetModeResult = tOptional(tObject({}));\nscheme.CrxApplicationCloseParams = tOptional(tObject({}));\nscheme.CrxApplicationCloseResult = tOptional(tObject({}));\nscheme.CrxApplicationListParams = tObject({\n  code: tString,\n});\nscheme.CrxApplicationListResult = tObject({\n  tests: tArray(tObject({\n    title: tString,\n    options: tOptional(tObject({\n      deviceName: tOptional(tString),\n      contextOptions: tOptional(tBrowserContextOptions()),\n    })),\n    location: tOptional(tObject({\n      file: tString,\n      line: tOptional(tNumber),\n      column: tOptional(tNumber),\n    })),\n  }))\n});\nscheme.CrxApplicationLoadParams = tObject({\n  code: tString,\n});\nscheme.CrxApplicationLoadResult = tOptional(tObject({}));\nscheme.CrxApplicationRunParams = tObject({\n  page: tOptional(tChannel(['Page'])),\n  code: tString,\n});\nscheme.CrxApplicationRunResult = tOptional(tObject({}));\n","exports.endianness = function () { return 'LE' };\n\nexports.hostname = function () {\n    if (typeof location !== 'undefined') {\n        return location.hostname\n    }\n    else return '';\n};\n\nexports.loadavg = function () { return [] };\n\nexports.uptime = function () { return 0 };\n\nexports.freemem = function () {\n    return Number.MAX_VALUE;\n};\n\nexports.totalmem = function () {\n    return Number.MAX_VALUE;\n};\n\nexports.cpus = function () { return [] };\n\nexports.type = function () { return 'Browser' };\n\nexports.release = function () {\n    if (typeof navigator !== 'undefined') {\n        return navigator.appVersion;\n    }\n    return '';\n};\n\nexports.networkInterfaces\n= exports.getNetworkInterfaces\n= function () { return {} };\n\nexports.arch = function () { return 'javascript' };\n\nexports.platform = function () { return 'browser' };\n\nexports.tmpdir = exports.tmpDir = function () {\n    return '/tmp';\n};\n\nexports.EOL = '\\n';\n\nexports.homedir = function () {\n\treturn '/'\n};\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nfunction noop() {}\n\nexport const spawn = noop;\nexport const spawnSync = noop;\nexport const execSync = noop;\nexport const fork = noop;\n\nexport default {\n  spawn,\n  spawnSync,\n  execSync,\n  fork,\n};\n","function RetryOperation(timeouts, options) {\n  // Compatibility for the old (timeouts, retryForever) signature\n  if (typeof options === 'boolean') {\n    options = { forever: options };\n  }\n\n  this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n  this._timeouts = timeouts;\n  this._options = options || {};\n  this._maxRetryTime = options && options.maxRetryTime || Infinity;\n  this._fn = null;\n  this._errors = [];\n  this._attempts = 1;\n  this._operationTimeout = null;\n  this._operationTimeoutCb = null;\n  this._timeout = null;\n  this._operationStart = null;\n\n  if (this._options.forever) {\n    this._cachedTimeouts = this._timeouts.slice(0);\n  }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n  this._attempts = 1;\n  this._timeouts = this._originalTimeouts;\n}\n\nRetryOperation.prototype.stop = function() {\n  if (this._timeout) {\n    clearTimeout(this._timeout);\n  }\n\n  this._timeouts       = [];\n  this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n  if (this._timeout) {\n    clearTimeout(this._timeout);\n  }\n\n  if (!err) {\n    return false;\n  }\n  var currentTime = new Date().getTime();\n  if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n    this._errors.unshift(new Error('RetryOperation timeout occurred'));\n    return false;\n  }\n\n  this._errors.push(err);\n\n  var timeout = this._timeouts.shift();\n  if (timeout === undefined) {\n    if (this._cachedTimeouts) {\n      // retry forever, only keep last error\n      this._errors.splice(this._errors.length - 1, this._errors.length);\n      this._timeouts = this._cachedTimeouts.slice(0);\n      timeout = this._timeouts.shift();\n    } else {\n      return false;\n    }\n  }\n\n  var self = this;\n  var timer = setTimeout(function() {\n    self._attempts++;\n\n    if (self._operationTimeoutCb) {\n      self._timeout = setTimeout(function() {\n        self._operationTimeoutCb(self._attempts);\n      }, self._operationTimeout);\n\n      if (self._options.unref) {\n          self._timeout.unref();\n      }\n    }\n\n    self._fn(self._attempts);\n  }, timeout);\n\n  if (this._options.unref) {\n      timer.unref();\n  }\n\n  return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n  this._fn = fn;\n\n  if (timeoutOps) {\n    if (timeoutOps.timeout) {\n      this._operationTimeout = timeoutOps.timeout;\n    }\n    if (timeoutOps.cb) {\n      this._operationTimeoutCb = timeoutOps.cb;\n    }\n  }\n\n  var self = this;\n  if (this._operationTimeoutCb) {\n    this._timeout = setTimeout(function() {\n      self._operationTimeoutCb();\n    }, self._operationTimeout);\n  }\n\n  this._operationStart = new Date().getTime();\n\n  this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n  console.log('Using RetryOperation.try() is deprecated');\n  this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n  console.log('Using RetryOperation.start() is deprecated');\n  this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n  return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n  return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n  if (this._errors.length === 0) {\n    return null;\n  }\n\n  var counts = {};\n  var mainError = null;\n  var mainErrorCount = 0;\n\n  for (var i = 0; i < this._errors.length; i++) {\n    var error = this._errors[i];\n    var message = error.message;\n    var count = (counts[message] || 0) + 1;\n\n    counts[message] = count;\n\n    if (count >= mainErrorCount) {\n      mainError = error;\n      mainErrorCount = count;\n    }\n  }\n\n  return mainError;\n};\n","var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n  var timeouts = exports.timeouts(options);\n  return new RetryOperation(timeouts, {\n      forever: options && options.forever,\n      unref: options && options.unref,\n      maxRetryTime: options && options.maxRetryTime\n  });\n};\n\nexports.timeouts = function(options) {\n  if (options instanceof Array) {\n    return [].concat(options);\n  }\n\n  var opts = {\n    retries: 10,\n    factor: 2,\n    minTimeout: 1 * 1000,\n    maxTimeout: Infinity,\n    randomize: false\n  };\n  for (var key in options) {\n    opts[key] = options[key];\n  }\n\n  if (opts.minTimeout > opts.maxTimeout) {\n    throw new Error('minTimeout is greater than maxTimeout');\n  }\n\n  var timeouts = [];\n  for (var i = 0; i < opts.retries; i++) {\n    timeouts.push(this.createTimeout(i, opts));\n  }\n\n  if (options && options.forever && !timeouts.length) {\n    timeouts.push(this.createTimeout(i, opts));\n  }\n\n  // sort the array numerically ascending\n  timeouts.sort(function(a,b) {\n    return a - b;\n  });\n\n  return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n  var random = (opts.randomize)\n    ? (Math.random() + 1)\n    : 1;\n\n  var timeout = Math.round(random * opts.minTimeout * Math.pow(opts.factor, attempt));\n  timeout = Math.min(timeout, opts.maxTimeout);\n\n  return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n  if (options instanceof Array) {\n    methods = options;\n    options = null;\n  }\n\n  if (!methods) {\n    methods = [];\n    for (var key in obj) {\n      if (typeof obj[key] === 'function') {\n        methods.push(key);\n      }\n    }\n  }\n\n  for (var i = 0; i < methods.length; i++) {\n    var method   = methods[i];\n    var original = obj[method];\n\n    obj[method] = function retryWrapper(original) {\n      var op       = exports.operation(options);\n      var args     = Array.prototype.slice.call(arguments, 1);\n      var callback = args.pop();\n\n      args.push(function(err) {\n        if (op.retry(err)) {\n          return;\n        }\n        if (err) {\n          arguments[0] = op.mainError();\n        }\n        callback.apply(this, arguments);\n      });\n\n      op.attempt(function() {\n        original.apply(obj, args);\n      });\n    }.bind(obj, original);\n    obj[method].options = options;\n  }\n};\n","module.exports = require('./lib/retry');","// This is not the set of all possible signals.\n//\n// It IS, however, the set of all signals that trigger\n// an exit on either Linux or BSD systems.  Linux is a\n// superset of the signal names supported on BSD, and\n// the unknown signals just fail to register, so we can\n// catch that easily enough.\n//\n// Don't bother with SIGKILL.  It's uncatchable, which\n// means that we can't fire any callbacks anyway.\n//\n// If a user does happen to register a handler on a non-\n// fatal signal like SIGWINCH or something, and then\n// exit, it'll end up firing `process.emit('exit')`, so\n// the handler will be fired anyway.\n//\n// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n// artificially, inherently leave the process in a\n// state from which it is not safe to try and enter JS\n// listeners.\nmodule.exports = [\n  'SIGABRT',\n  'SIGALRM',\n  'SIGHUP',\n  'SIGINT',\n  'SIGTERM'\n]\n\nif (process.platform !== 'win32') {\n  module.exports.push(\n    'SIGVTALRM',\n    'SIGXCPU',\n    'SIGXFSZ',\n    'SIGUSR2',\n    'SIGTRAP',\n    'SIGSYS',\n    'SIGQUIT',\n    'SIGIOT'\n    // should detect profiler and enable/disable accordingly.\n    // see #21\n    // 'SIGPROF'\n  )\n}\n\nif (process.platform === 'linux') {\n  module.exports.push(\n    'SIGIO',\n    'SIGPOLL',\n    'SIGPWR',\n    'SIGSTKFLT',\n    'SIGUNUSED'\n  )\n}\n","// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nvar process = global.process\n\nconst processOk = function (process) {\n  return process &&\n    typeof process === 'object' &&\n    typeof process.removeListener === 'function' &&\n    typeof process.emit === 'function' &&\n    typeof process.reallyExit === 'function' &&\n    typeof process.listeners === 'function' &&\n    typeof process.kill === 'function' &&\n    typeof process.pid === 'number' &&\n    typeof process.on === 'function'\n}\n\n// some kind of non-node environment, just no-op\n/* istanbul ignore if */\nif (!processOk(process)) {\n  module.exports = function () {\n    return function () {}\n  }\n} else {\n  var assert = require('assert')\n  var signals = require('./signals.js')\n  var isWin = /^win/i.test(process.platform)\n\n  var EE = require('events')\n  /* istanbul ignore if */\n  if (typeof EE !== 'function') {\n    EE = EE.EventEmitter\n  }\n\n  var emitter\n  if (process.__signal_exit_emitter__) {\n    emitter = process.__signal_exit_emitter__\n  } else {\n    emitter = process.__signal_exit_emitter__ = new EE()\n    emitter.count = 0\n    emitter.emitted = {}\n  }\n\n  // Because this emitter is a global, we have to check to see if a\n  // previous version of this library failed to enable infinite listeners.\n  // I know what you're about to say.  But literally everything about\n  // signal-exit is a compromise with evil.  Get used to it.\n  if (!emitter.infinite) {\n    emitter.setMaxListeners(Infinity)\n    emitter.infinite = true\n  }\n\n  module.exports = function (cb, opts) {\n    /* istanbul ignore if */\n    if (!processOk(global.process)) {\n      return function () {}\n    }\n    assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')\n\n    if (loaded === false) {\n      load()\n    }\n\n    var ev = 'exit'\n    if (opts && opts.alwaysLast) {\n      ev = 'afterexit'\n    }\n\n    var remove = function () {\n      emitter.removeListener(ev, cb)\n      if (emitter.listeners('exit').length === 0 &&\n          emitter.listeners('afterexit').length === 0) {\n        unload()\n      }\n    }\n    emitter.on(ev, cb)\n\n    return remove\n  }\n\n  var unload = function unload () {\n    if (!loaded || !processOk(global.process)) {\n      return\n    }\n    loaded = false\n\n    signals.forEach(function (sig) {\n      try {\n        process.removeListener(sig, sigListeners[sig])\n      } catch (er) {}\n    })\n    process.emit = originalProcessEmit\n    process.reallyExit = originalProcessReallyExit\n    emitter.count -= 1\n  }\n  module.exports.unload = unload\n\n  var emit = function emit (event, code, signal) {\n    /* istanbul ignore if */\n    if (emitter.emitted[event]) {\n      return\n    }\n    emitter.emitted[event] = true\n    emitter.emit(event, code, signal)\n  }\n\n  // { <signal>: <listener fn>, ... }\n  var sigListeners = {}\n  signals.forEach(function (sig) {\n    sigListeners[sig] = function listener () {\n      /* istanbul ignore if */\n      if (!processOk(global.process)) {\n        return\n      }\n      // If there are no other listeners, an exit is coming!\n      // Simplest way: remove us and then re-send the signal.\n      // We know that this will kill the process, so we can\n      // safely emit now.\n      var listeners = process.listeners(sig)\n      if (listeners.length === emitter.count) {\n        unload()\n        emit('exit', null, sig)\n        /* istanbul ignore next */\n        emit('afterexit', null, sig)\n        /* istanbul ignore next */\n        if (isWin && sig === 'SIGHUP') {\n          // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n          // so use a supported signal instead\n          sig = 'SIGINT'\n        }\n        /* istanbul ignore next */\n        process.kill(process.pid, sig)\n      }\n    }\n  })\n\n  module.exports.signals = function () {\n    return signals\n  }\n\n  var loaded = false\n\n  var load = function load () {\n    if (loaded || !processOk(global.process)) {\n      return\n    }\n    loaded = true\n\n    // This is the number of onSignalExit's that are in play.\n    // It's important so that we can count the correct number of\n    // listeners on signals, and don't wait for the other one to\n    // handle it instead of us.\n    emitter.count += 1\n\n    signals = signals.filter(function (sig) {\n      try {\n        process.on(sig, sigListeners[sig])\n        return true\n      } catch (er) {\n        return false\n      }\n    })\n\n    process.emit = processEmit\n    process.reallyExit = processReallyExit\n  }\n  module.exports.load = load\n\n  var originalProcessReallyExit = process.reallyExit\n  var processReallyExit = function processReallyExit (code) {\n    /* istanbul ignore if */\n    if (!processOk(global.process)) {\n      return\n    }\n    process.exitCode = code || /* istanbul ignore next */ 0\n    emit('exit', process.exitCode, null)\n    /* istanbul ignore next */\n    emit('afterexit', process.exitCode, null)\n    /* istanbul ignore next */\n    originalProcessReallyExit.call(process, process.exitCode)\n  }\n\n  var originalProcessEmit = process.emit\n  var processEmit = function processEmit (ev, arg) {\n    if (ev === 'exit' && processOk(global.process)) {\n      /* istanbul ignore else */\n      if (arg !== undefined) {\n        process.exitCode = arg\n      }\n      var ret = originalProcessEmit.apply(this, arguments)\n      /* istanbul ignore next */\n      emit('exit', process.exitCode, null)\n      /* istanbul ignore next */\n      emit('afterexit', process.exitCode, null)\n      /* istanbul ignore next */\n      return ret\n    } else {\n      return originalProcessEmit.apply(this, arguments)\n    }\n  }\n}\n","/**\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2018 Made With MOXY Lda <hello@moxy.studio>\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n'use strict';\n\nconst path = require('path');\nconst fs = require('graceful-fs');\nconst retry = require('retry');\nconst onExit = require('signal-exit');\n\nconst locks = {};\nconst cacheSymbol = Symbol();\n\nfunction probe(file, fs, callback) {\n    const cachedPrecision = fs[cacheSymbol];\n\n    if (cachedPrecision) {\n        return fs.stat(file, (err, stat) => {\n            /* istanbul ignore if */\n            if (err) {\n                return callback(err);\n            }\n\n            callback(null, stat.mtime, cachedPrecision);\n        });\n    }\n\n    // Set mtime by ceiling Date.now() to seconds + 5ms so that it's \"not on the second\"\n    const mtime = new Date((Math.ceil(Date.now() / 1000) * 1000) + 5);\n\n    fs.utimes(file, mtime, mtime, (err) => {\n        /* istanbul ignore if */\n        if (err) {\n            return callback(err);\n        }\n\n        fs.stat(file, (err, stat) => {\n            /* istanbul ignore if */\n            if (err) {\n                return callback(err);\n            }\n\n            const precision = stat.mtime.getTime() % 1000 === 0 ? 's' : 'ms';\n\n            // Cache the precision in a non-enumerable way\n            Object.defineProperty(fs, cacheSymbol, { value: precision });\n\n            callback(null, stat.mtime, precision);\n        });\n    });\n}\n\nfunction getMtime(precision) {\n    let now = Date.now();\n\n    if (precision === 's') {\n        now = Math.ceil(now / 1000) * 1000;\n    }\n\n    return new Date(now);\n}\n\nfunction getLockFile(file, options) {\n    return options.lockfilePath || `${file}.lock`;\n}\n\nfunction resolveCanonicalPath(file, options, callback) {\n    if (!options.realpath) {\n        return callback(null, path.resolve(file));\n    }\n\n    // Use realpath to resolve symlinks\n    // It also resolves relative paths\n    options.fs.realpath(file, callback);\n}\n\nfunction acquireLock(file, options, callback) {\n    const lockfilePath = getLockFile(file, options);\n\n    // Use mkdir to create the lockfile (atomic operation)\n    options.fs.mkdir(lockfilePath, (err) => {\n        if (!err) {\n            // At this point, we acquired the lock!\n            // Probe the mtime precision\n            return probe(lockfilePath, options.fs, (err, mtime, mtimePrecision) => {\n                // If it failed, try to remove the lock..\n                /* istanbul ignore if */\n                if (err) {\n                    options.fs.rmdir(lockfilePath, () => {});\n\n                    return callback(err);\n                }\n\n                callback(null, mtime, mtimePrecision);\n            });\n        }\n\n        // If error is not EEXIST then some other error occurred while locking\n        if (err.code !== 'EEXIST') {\n            return callback(err);\n        }\n\n        // Otherwise, check if lock is stale by analyzing the file mtime\n        if (options.stale <= 0) {\n            return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n        }\n\n        options.fs.stat(lockfilePath, (err, stat) => {\n            if (err) {\n                // Retry if the lockfile has been removed (meanwhile)\n                // Skip stale check to avoid recursiveness\n                if (err.code === 'ENOENT') {\n                    return acquireLock(file, { ...options, stale: 0 }, callback);\n                }\n\n                return callback(err);\n            }\n\n            if (!isLockStale(stat, options)) {\n                return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n            }\n\n            // If it's stale, remove it and try again!\n            // Skip stale check to avoid recursiveness\n            removeLock(file, options, (err) => {\n                if (err) {\n                    return callback(err);\n                }\n\n                acquireLock(file, { ...options, stale: 0 }, callback);\n            });\n        });\n    });\n}\n\nfunction isLockStale(stat, options) {\n    return stat.mtime.getTime() < Date.now() - options.stale;\n}\n\nfunction removeLock(file, options, callback) {\n    // Remove lockfile, ignoring ENOENT errors\n    options.fs.rmdir(getLockFile(file, options), (err) => {\n        if (err && err.code !== 'ENOENT') {\n            return callback(err);\n        }\n\n        callback();\n    });\n}\n\nfunction updateLock(file, options) {\n    const lock = locks[file];\n\n    // Just for safety, should never happen\n    /* istanbul ignore if */\n    if (lock.updateTimeout) {\n        return;\n    }\n\n    lock.updateDelay = lock.updateDelay || options.update;\n    lock.updateTimeout = setTimeout(() => {\n        lock.updateTimeout = null;\n\n        // Stat the file to check if mtime is still ours\n        // If it is, we can still recover from a system sleep or a busy event loop\n        options.fs.stat(lock.lockfilePath, (err, stat) => {\n            const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n            // If it failed to update the lockfile, keep trying unless\n            // the lockfile was deleted or we are over the threshold\n            if (err) {\n                if (err.code === 'ENOENT' || isOverThreshold) {\n                    return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n                }\n\n                lock.updateDelay = 1000;\n\n                return updateLock(file, options);\n            }\n\n            const isMtimeOurs = lock.mtime.getTime() === stat.mtime.getTime();\n\n            if (!isMtimeOurs) {\n                return setLockAsCompromised(\n                    file,\n                    lock,\n                    Object.assign(\n                        new Error('Unable to update lock within the stale threshold'),\n                        { code: 'ECOMPROMISED' }\n                    ));\n            }\n\n            const mtime = getMtime(lock.mtimePrecision);\n\n            options.fs.utimes(lock.lockfilePath, mtime, mtime, (err) => {\n                const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n                // Ignore if the lock was released\n                if (lock.released) {\n                    return;\n                }\n\n                // If it failed to update the lockfile, keep trying unless\n                // the lockfile was deleted or we are over the threshold\n                if (err) {\n                    if (err.code === 'ENOENT' || isOverThreshold) {\n                        return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n                    }\n\n                    lock.updateDelay = 1000;\n\n                    return updateLock(file, options);\n                }\n\n                // All ok, keep updating..\n                lock.mtime = mtime;\n                lock.lastUpdate = Date.now();\n                lock.updateDelay = null;\n                updateLock(file, options);\n            });\n        });\n    }, lock.updateDelay);\n\n    // Unref the timer so that the nodejs process can exit freely\n    // This is safe because all acquired locks will be automatically released\n    // on process exit\n\n    // We first check that `lock.updateTimeout.unref` exists because some users\n    // may be using this module outside of NodeJS (e.g., in an electron app),\n    // and in those cases `setTimeout` return an integer.\n    /* istanbul ignore else */\n    if (lock.updateTimeout.unref) {\n        lock.updateTimeout.unref();\n    }\n}\n\nfunction setLockAsCompromised(file, lock, err) {\n    // Signal the lock has been released\n    lock.released = true;\n\n    // Cancel lock mtime update\n    // Just for safety, at this point updateTimeout should be null\n    /* istanbul ignore if */\n    if (lock.updateTimeout) {\n        clearTimeout(lock.updateTimeout);\n    }\n\n    if (locks[file] === lock) {\n        delete locks[file];\n    }\n\n    lock.options.onCompromised(err);\n}\n\n// ----------------------------------------------------------\n\nfunction lock(file, options, callback) {\n    /* istanbul ignore next */\n    options = {\n        stale: 10000,\n        update: null,\n        realpath: true,\n        retries: 0,\n        fs,\n        onCompromised: (err) => { throw err; },\n        ...options,\n    };\n\n    options.retries = options.retries || 0;\n    options.retries = typeof options.retries === 'number' ? { retries: options.retries } : options.retries;\n    options.stale = Math.max(options.stale || 0, 2000);\n    options.update = options.update == null ? options.stale / 2 : options.update || 0;\n    options.update = Math.max(Math.min(options.update, options.stale / 2), 1000);\n\n    // Resolve to a canonical file path\n    resolveCanonicalPath(file, options, (err, file) => {\n        if (err) {\n            return callback(err);\n        }\n\n        // Attempt to acquire the lock\n        const operation = retry.operation(options.retries);\n\n        operation.attempt(() => {\n            acquireLock(file, options, (err, mtime, mtimePrecision) => {\n                if (operation.retry(err)) {\n                    return;\n                }\n\n                if (err) {\n                    return callback(operation.mainError());\n                }\n\n                // We now own the lock\n                const lock = locks[file] = {\n                    lockfilePath: getLockFile(file, options),\n                    mtime,\n                    mtimePrecision,\n                    options,\n                    lastUpdate: Date.now(),\n                };\n\n                // We must keep the lock fresh to avoid staleness\n                updateLock(file, options);\n\n                callback(null, (releasedCallback) => {\n                    if (lock.released) {\n                        return releasedCallback &&\n                            releasedCallback(Object.assign(new Error('Lock is already released'), { code: 'ERELEASED' }));\n                    }\n\n                    // Not necessary to use realpath twice when unlocking\n                    unlock(file, { ...options, realpath: false }, releasedCallback);\n                });\n            });\n        });\n    });\n}\n\nfunction unlock(file, options, callback) {\n    options = {\n        fs,\n        realpath: true,\n        ...options,\n    };\n\n    // Resolve to a canonical file path\n    resolveCanonicalPath(file, options, (err, file) => {\n        if (err) {\n            return callback(err);\n        }\n\n        // Skip if the lock is not acquired\n        const lock = locks[file];\n\n        if (!lock) {\n            return callback(Object.assign(new Error('Lock is not acquired/owned by you'), { code: 'ENOTACQUIRED' }));\n        }\n\n        lock.updateTimeout && clearTimeout(lock.updateTimeout); // Cancel lock mtime update\n        lock.released = true; // Signal the lock has been released\n        delete locks[file]; // Delete from locks\n\n        removeLock(file, options, callback);\n    });\n}\n\nfunction toPromise(method) {\n    return (...args) => new Promise((resolve, reject) => {\n        args.push((err, result) => {\n            if (err) {\n                reject(err);\n            } else {\n                resolve(result);\n            }\n        });\n        method(...args);\n    });\n}\n\n// Remove acquired locks on exit\n/* istanbul ignore next */\nlet cleanupInitialized = false;\nfunction ensureCleanup() {\n    if (cleanupInitialized) {\n        return;\n    }\n    cleanupInitialized = true;\n    onExit(() => {\n        for (const file in locks) {\n            const options = locks[file].options;\n\n            try { options.fs.rmdirSync(getLockFile(file, options)); } catch (e) { /* Empty */ }\n        }\n    });\n}\n\nmodule.exports.lock = async (file, options) => {\n    ensureCleanup();\n    const release = await toPromise(lock)(file, options);\n    return toPromise(release);\n}\n","/*\nThe MIT License (MIT)\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\nvar styles = {};\nmodule['exports'] = styles;\n\nvar codes = {\n  reset: [0, 0],\n\n  bold: [1, 22],\n  dim: [2, 22],\n  italic: [3, 23],\n  underline: [4, 24],\n  inverse: [7, 27],\n  hidden: [8, 28],\n  strikethrough: [9, 29],\n\n  black: [30, 39],\n  red: [31, 39],\n  green: [32, 39],\n  yellow: [33, 39],\n  blue: [34, 39],\n  magenta: [35, 39],\n  cyan: [36, 39],\n  white: [37, 39],\n  gray: [90, 39],\n  grey: [90, 39],\n\n  brightRed: [91, 39],\n  brightGreen: [92, 39],\n  brightYellow: [93, 39],\n  brightBlue: [94, 39],\n  brightMagenta: [95, 39],\n  brightCyan: [96, 39],\n  brightWhite: [97, 39],\n\n  bgBlack: [40, 49],\n  bgRed: [41, 49],\n  bgGreen: [42, 49],\n  bgYellow: [43, 49],\n  bgBlue: [44, 49],\n  bgMagenta: [45, 49],\n  bgCyan: [46, 49],\n  bgWhite: [47, 49],\n  bgGray: [100, 49],\n  bgGrey: [100, 49],\n\n  bgBrightRed: [101, 49],\n  bgBrightGreen: [102, 49],\n  bgBrightYellow: [103, 49],\n  bgBrightBlue: [104, 49],\n  bgBrightMagenta: [105, 49],\n  bgBrightCyan: [106, 49],\n  bgBrightWhite: [107, 49],\n\n  // legacy styles for colors pre v1.0.0\n  blackBG: [40, 49],\n  redBG: [41, 49],\n  greenBG: [42, 49],\n  yellowBG: [43, 49],\n  blueBG: [44, 49],\n  magentaBG: [45, 49],\n  cyanBG: [46, 49],\n  whiteBG: [47, 49],\n\n};\n\nObject.keys(codes).forEach(function(key) {\n  var val = codes[key];\n  var style = styles[key] = [];\n  style.open = '\\u001b[' + val[0] + 'm';\n  style.close = '\\u001b[' + val[1] + 'm';\n});\n","/*\nMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n'use strict';\n\nmodule.exports = function(flag, argv) {\n  argv = argv || process.argv;\n\n  var terminatorPos = argv.indexOf('--');\n  var prefix = /^-{1,2}/.test(flag) ? '' : '--';\n  var pos = argv.indexOf(prefix + flag);\n\n  return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);\n};\n","/*\nThe MIT License (MIT)\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\n'use strict';\n\nvar os = require('os');\nvar hasFlag = require('./has-flag.js');\n\nvar env = process.env;\n\nvar forceColor = void 0;\nif (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false')) {\n  forceColor = false;\n} else if (hasFlag('color') || hasFlag('colors') || hasFlag('color=true')\n           || hasFlag('color=always')) {\n  forceColor = true;\n}\nif ('FORCE_COLOR' in env) {\n  forceColor = env.FORCE_COLOR.length === 0\n    || parseInt(env.FORCE_COLOR, 10) !== 0;\n}\n\nfunction translateLevel(level) {\n  if (level === 0) {\n    return false;\n  }\n\n  return {\n    level: level,\n    hasBasic: true,\n    has256: level >= 2,\n    has16m: level >= 3,\n  };\n}\n\nfunction supportsColor(stream) {\n  if (forceColor === false) {\n    return 0;\n  }\n\n  if (hasFlag('color=16m') || hasFlag('color=full')\n      || hasFlag('color=truecolor')) {\n    return 3;\n  }\n\n  if (hasFlag('color=256')) {\n    return 2;\n  }\n\n  if (stream && !stream.isTTY && forceColor !== true) {\n    return 0;\n  }\n\n  var min = forceColor ? 1 : 0;\n\n  if (process.platform === 'win32') {\n    // Node.js 7.5.0 is the first version of Node.js to include a patch to\n    // libuv that enables 256 color output on Windows. Anything earlier and it\n    // won't work. However, here we target Node.js 8 at minimum as it is an LTS\n    // release, and Node.js 7 is not. Windows 10 build 10586 is the first\n    // Windows release that supports 256 colors. Windows 10 build 14931 is the\n    // first release that supports 16m/TrueColor.\n    var osRelease = os.release().split('.');\n    if (Number(process.versions.node.split('.')[0]) >= 8\n        && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {\n      return Number(osRelease[2]) >= 14931 ? 3 : 2;\n    }\n\n    return 1;\n  }\n\n  if ('CI' in env) {\n    if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(function(sign) {\n      return sign in env;\n    }) || env.CI_NAME === 'codeship') {\n      return 1;\n    }\n\n    return min;\n  }\n\n  if ('TEAMCITY_VERSION' in env) {\n    return (/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0\n    );\n  }\n\n  if ('TERM_PROGRAM' in env) {\n    var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n    switch (env.TERM_PROGRAM) {\n      case 'iTerm.app':\n        return version >= 3 ? 3 : 2;\n      case 'Hyper':\n        return 3;\n      case 'Apple_Terminal':\n        return 2;\n      // No default\n    }\n  }\n\n  if (/-256(color)?$/i.test(env.TERM)) {\n    return 2;\n  }\n\n  if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n    return 1;\n  }\n\n  if ('COLORTERM' in env) {\n    return 1;\n  }\n\n  if (env.TERM === 'dumb') {\n    return min;\n  }\n\n  return min;\n}\n\nfunction getSupportLevel(stream) {\n  var level = supportsColor(stream);\n  return translateLevel(level);\n}\n\nmodule.exports = {\n  supportsColor: getSupportLevel,\n  stdout: getSupportLevel(process.stdout),\n  stderr: getSupportLevel(process.stderr),\n};\n","module['exports'] = function runTheTrap(text, options) {\n  var result = '';\n  text = text || 'Run the trap, drop the bass';\n  text = text.split('');\n  var trap = {\n    a: ['\\u0040', '\\u0104', '\\u023a', '\\u0245', '\\u0394', '\\u039b', '\\u0414'],\n    b: ['\\u00df', '\\u0181', '\\u0243', '\\u026e', '\\u03b2', '\\u0e3f'],\n    c: ['\\u00a9', '\\u023b', '\\u03fe'],\n    d: ['\\u00d0', '\\u018a', '\\u0500', '\\u0501', '\\u0502', '\\u0503'],\n    e: ['\\u00cb', '\\u0115', '\\u018e', '\\u0258', '\\u03a3', '\\u03be', '\\u04bc',\n      '\\u0a6c'],\n    f: ['\\u04fa'],\n    g: ['\\u0262'],\n    h: ['\\u0126', '\\u0195', '\\u04a2', '\\u04ba', '\\u04c7', '\\u050a'],\n    i: ['\\u0f0f'],\n    j: ['\\u0134'],\n    k: ['\\u0138', '\\u04a0', '\\u04c3', '\\u051e'],\n    l: ['\\u0139'],\n    m: ['\\u028d', '\\u04cd', '\\u04ce', '\\u0520', '\\u0521', '\\u0d69'],\n    n: ['\\u00d1', '\\u014b', '\\u019d', '\\u0376', '\\u03a0', '\\u048a'],\n    o: ['\\u00d8', '\\u00f5', '\\u00f8', '\\u01fe', '\\u0298', '\\u047a', '\\u05dd',\n      '\\u06dd', '\\u0e4f'],\n    p: ['\\u01f7', '\\u048e'],\n    q: ['\\u09cd'],\n    r: ['\\u00ae', '\\u01a6', '\\u0210', '\\u024c', '\\u0280', '\\u042f'],\n    s: ['\\u00a7', '\\u03de', '\\u03df', '\\u03e8'],\n    t: ['\\u0141', '\\u0166', '\\u0373'],\n    u: ['\\u01b1', '\\u054d'],\n    v: ['\\u05d8'],\n    w: ['\\u0428', '\\u0460', '\\u047c', '\\u0d70'],\n    x: ['\\u04b2', '\\u04fe', '\\u04fc', '\\u04fd'],\n    y: ['\\u00a5', '\\u04b0', '\\u04cb'],\n    z: ['\\u01b5', '\\u0240'],\n  };\n  text.forEach(function(c) {\n    c = c.toLowerCase();\n    var chars = trap[c] || [' '];\n    var rand = Math.floor(Math.random() * chars.length);\n    if (typeof trap[c] !== 'undefined') {\n      result += trap[c][rand];\n    } else {\n      result += c;\n    }\n  });\n  return result;\n};\n","// please no\nmodule['exports'] = function zalgo(text, options) {\n  text = text || '   he is here   ';\n  var soul = {\n    'up': [\n      '̍', '̎', '̄', '̅',\n      '̿', '̑', '̆', '̐',\n      '͒', '͗', '͑', '̇',\n      '̈', '̊', '͂', '̓',\n      '̈', '͊', '͋', '͌',\n      '̃', '̂', '̌', '͐',\n      '̀', '́', '̋', '̏',\n      '̒', '̓', '̔', '̽',\n      '̉', 'ͣ', 'ͤ', 'ͥ',\n      'ͦ', 'ͧ', 'ͨ', 'ͩ',\n      'ͪ', 'ͫ', 'ͬ', 'ͭ',\n      'ͮ', 'ͯ', '̾', '͛',\n      '͆', '̚',\n    ],\n    'down': [\n      '̖', '̗', '̘', '̙',\n      '̜', '̝', '̞', '̟',\n      '̠', '̤', '̥', '̦',\n      '̩', '̪', '̫', '̬',\n      '̭', '̮', '̯', '̰',\n      '̱', '̲', '̳', '̹',\n      '̺', '̻', '̼', 'ͅ',\n      '͇', '͈', '͉', '͍',\n      '͎', '͓', '͔', '͕',\n      '͖', '͙', '͚', '̣',\n    ],\n    'mid': [\n      '̕', '̛', '̀', '́',\n      '͘', '̡', '̢', '̧',\n      '̨', '̴', '̵', '̶',\n      '͜', '͝', '͞',\n      '͟', '͠', '͢', '̸',\n      '̷', '͡', ' ҉',\n    ],\n  };\n  var all = [].concat(soul.up, soul.down, soul.mid);\n\n  function randomNumber(range) {\n    var r = Math.floor(Math.random() * range);\n    return r;\n  }\n\n  function isChar(character) {\n    var bool = false;\n    all.filter(function(i) {\n      bool = (i === character);\n    });\n    return bool;\n  }\n\n\n  function heComes(text, options) {\n    var result = '';\n    var counts;\n    var l;\n    options = options || {};\n    options['up'] =\n      typeof options['up'] !== 'undefined' ? options['up'] : true;\n    options['mid'] =\n      typeof options['mid'] !== 'undefined' ? options['mid'] : true;\n    options['down'] =\n      typeof options['down'] !== 'undefined' ? options['down'] : true;\n    options['size'] =\n      typeof options['size'] !== 'undefined' ? options['size'] : 'maxi';\n    text = text.split('');\n    for (l in text) {\n      if (isChar(l)) {\n        continue;\n      }\n      result = result + text[l];\n      counts = {'up': 0, 'down': 0, 'mid': 0};\n      switch (options.size) {\n        case 'mini':\n          counts.up = randomNumber(8);\n          counts.mid = randomNumber(2);\n          counts.down = randomNumber(8);\n          break;\n        case 'maxi':\n          counts.up = randomNumber(16) + 3;\n          counts.mid = randomNumber(4) + 1;\n          counts.down = randomNumber(64) + 3;\n          break;\n        default:\n          counts.up = randomNumber(8) + 1;\n          counts.mid = randomNumber(6) / 2;\n          counts.down = randomNumber(8) + 1;\n          break;\n      }\n\n      var arr = ['up', 'mid', 'down'];\n      for (var d in arr) {\n        var index = arr[d];\n        for (var i = 0; i <= counts[index]; i++) {\n          if (options[index]) {\n            result = result + soul[index][randomNumber(soul[index].length)];\n          }\n        }\n      }\n    }\n    return result;\n  }\n  // don't summon him\n  return heComes(text, options);\n};\n\n","module['exports'] = function(colors) {\n  return function(letter, i, exploded) {\n    if (letter === ' ') return letter;\n    switch (i%3) {\n      case 0: return colors.red(letter);\n      case 1: return colors.white(letter);\n      case 2: return colors.blue(letter);\n    }\n  };\n};\n","module['exports'] = function(colors) {\n  return function(letter, i, exploded) {\n    return i % 2 === 0 ? letter : colors.inverse(letter);\n  };\n};\n","module['exports'] = function(colors) {\n  // RoY G BiV\n  var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta'];\n  return function(letter, i, exploded) {\n    if (letter === ' ') {\n      return letter;\n    } else {\n      return colors[rainbowColors[i++ % rainbowColors.length]](letter);\n    }\n  };\n};\n\n","module['exports'] = function(colors) {\n  var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green',\n    'blue', 'white', 'cyan', 'magenta', 'brightYellow', 'brightRed',\n    'brightGreen', 'brightBlue', 'brightWhite', 'brightCyan', 'brightMagenta'];\n  return function(letter, i, exploded) {\n    return letter === ' ' ? letter :\n      colors[\n          available[Math.round(Math.random() * (available.length - 2))]\n      ](letter);\n  };\n};\n","/*\n\nThe MIT License (MIT)\n\nOriginal Library\n  - Copyright (c) Marak Squires\n\nAdditional functionality\n - Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\nvar colors = {};\nmodule['exports'] = colors;\n\ncolors.themes = {};\n\nvar util = require('util');\nvar ansiStyles = colors.styles = require('./styles');\nvar defineProps = Object.defineProperties;\nvar newLineRegex = new RegExp(/[\\r\\n]+/g);\n\ncolors.supportsColor = require('./system/supports-colors').supportsColor;\n\nif (typeof colors.enabled === 'undefined') {\n  colors.enabled = colors.supportsColor() !== false;\n}\n\ncolors.enable = function() {\n  colors.enabled = true;\n};\n\ncolors.disable = function() {\n  colors.enabled = false;\n};\n\ncolors.stripColors = colors.strip = function(str) {\n  return ('' + str).replace(/\\x1B\\[\\d+m/g, '');\n};\n\n// eslint-disable-next-line no-unused-vars\nvar stylize = colors.stylize = function stylize(str, style) {\n  if (!colors.enabled) {\n    return str+'';\n  }\n\n  var styleMap = ansiStyles[style];\n\n  // Stylize should work for non-ANSI styles, too\n  if(!styleMap && style in colors){\n    // Style maps like trap operate as functions on strings;\n    // they don't have properties like open or close.\n    return colors[style](str);\n  }\n\n  return styleMap.open + str + styleMap.close;\n};\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\nvar escapeStringRegexp = function(str) {\n  if (typeof str !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n  return str.replace(matchOperatorsRe, '\\\\$&');\n};\n\nfunction build(_styles) {\n  var builder = function builder() {\n    return applyStyle.apply(builder, arguments);\n  };\n  builder._styles = _styles;\n  // __proto__ is used because we must return a function, but there is\n  // no way to create a function with a different prototype.\n  builder.__proto__ = proto;\n  return builder;\n}\n\nvar styles = (function() {\n  var ret = {};\n  ansiStyles.grey = ansiStyles.gray;\n  Object.keys(ansiStyles).forEach(function(key) {\n    ansiStyles[key].closeRe =\n      new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');\n    ret[key] = {\n      get: function() {\n        return build(this._styles.concat(key));\n      },\n    };\n  });\n  return ret;\n})();\n\nvar proto = defineProps(function colors() {}, styles);\n\nfunction applyStyle() {\n  var args = Array.prototype.slice.call(arguments);\n\n  var str = args.map(function(arg) {\n    // Use weak equality check so we can colorize null/undefined in safe mode\n    if (arg != null && arg.constructor === String) {\n      return arg;\n    } else {\n      return util.inspect(arg);\n    }\n  }).join(' ');\n\n  if (!colors.enabled || !str) {\n    return str;\n  }\n\n  var newLinesPresent = str.indexOf('\\n') != -1;\n\n  var nestedStyles = this._styles;\n\n  var i = nestedStyles.length;\n  while (i--) {\n    var code = ansiStyles[nestedStyles[i]];\n    str = code.open + str.replace(code.closeRe, code.open) + code.close;\n    if (newLinesPresent) {\n      str = str.replace(newLineRegex, function(match) {\n        return code.close + match + code.open;\n      });\n    }\n  }\n\n  return str;\n}\n\ncolors.setTheme = function(theme) {\n  if (typeof theme === 'string') {\n    console.log('colors.setTheme now only accepts an object, not a string.  ' +\n      'If you are trying to set a theme from a file, it is now your (the ' +\n      'caller\\'s) responsibility to require the file.  The old syntax ' +\n      'looked like colors.setTheme(__dirname + ' +\n      '\\'/../themes/generic-logging.js\\'); The new syntax looks like '+\n      'colors.setTheme(require(__dirname + ' +\n      '\\'/../themes/generic-logging.js\\'));');\n    return;\n  }\n  for (var style in theme) {\n    (function(style) {\n      colors[style] = function(str) {\n        if (typeof theme[style] === 'object') {\n          var out = str;\n          for (var i in theme[style]) {\n            out = colors[theme[style][i]](out);\n          }\n          return out;\n        }\n        return colors[theme[style]](str);\n      };\n    })(style);\n  }\n};\n\nfunction init() {\n  var ret = {};\n  Object.keys(styles).forEach(function(name) {\n    ret[name] = {\n      get: function() {\n        return build([name]);\n      },\n    };\n  });\n  return ret;\n}\n\nvar sequencer = function sequencer(map, str) {\n  var exploded = str.split('');\n  exploded = exploded.map(map);\n  return exploded.join('');\n};\n\n// custom formatter methods\ncolors.trap = require('./custom/trap');\ncolors.zalgo = require('./custom/zalgo');\n\n// maps\ncolors.maps = {};\ncolors.maps.america = require('./maps/america')(colors);\ncolors.maps.zebra = require('./maps/zebra')(colors);\ncolors.maps.rainbow = require('./maps/rainbow')(colors);\ncolors.maps.random = require('./maps/random')(colors);\n\nfor (var map in colors.maps) {\n  (function(map) {\n    colors[map] = function(str) {\n      return sequencer(colors.maps[map], str);\n    };\n  })(map);\n}\n\ndefineProps(colors, init());\n","//\n// Remark: Requiring this file will use the \"safe\" colors API,\n// which will not touch String.prototype.\n//\n//   var colors = require('colors/safe');\n//   colors.red(\"foo\")\n//\n//\nvar colors = require('./lib/colors');\nmodule['exports'] = colors;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","function Diff() {}\nDiff.prototype = {\n  diff: function diff(oldString, newString) {\n    var _options$timeout;\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var callback = options.callback;\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n    var self = this;\n    function done(value) {\n      value = self.postProcess(value, options);\n      if (callback) {\n        setTimeout(function () {\n          callback(value);\n        }, 0);\n        return true;\n      } else {\n        return value;\n      }\n    }\n\n    // Allow subclasses to massage the input prior to running\n    oldString = this.castInput(oldString, options);\n    newString = this.castInput(newString, options);\n    oldString = this.removeEmpty(this.tokenize(oldString, options));\n    newString = this.removeEmpty(this.tokenize(newString, options));\n    var newLen = newString.length,\n      oldLen = oldString.length;\n    var editLength = 1;\n    var maxEditLength = newLen + oldLen;\n    if (options.maxEditLength != null) {\n      maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n    }\n    var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity;\n    var abortAfterTimestamp = Date.now() + maxExecutionTime;\n    var bestPath = [{\n      oldPos: -1,\n      lastComponent: undefined\n    }];\n\n    // Seed editLength = 0, i.e. the content starts with the same values\n    var newPos = this.extractCommon(bestPath[0], newString, oldString, 0, options);\n    if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n      // Identity per the equality and tokenizer\n      return done(buildValues(self, bestPath[0].lastComponent, newString, oldString, self.useLongestToken));\n    }\n\n    // Once we hit the right edge of the edit graph on some diagonal k, we can\n    // definitely reach the end of the edit graph in no more than k edits, so\n    // there's no point in considering any moves to diagonal k+1 any more (from\n    // which we're guaranteed to need at least k+1 more edits).\n    // Similarly, once we've reached the bottom of the edit graph, there's no\n    // point considering moves to lower diagonals.\n    // We record this fact by setting minDiagonalToConsider and\n    // maxDiagonalToConsider to some finite value once we've hit the edge of\n    // the edit graph.\n    // This optimization is not faithful to the original algorithm presented in\n    // Myers's paper, which instead pointlessly extends D-paths off the end of\n    // the edit graph - see page 7 of Myers's paper which notes this point\n    // explicitly and illustrates it with a diagram. This has major performance\n    // implications for some common scenarios. For instance, to compute a diff\n    // where the new text simply appends d characters on the end of the\n    // original text of length n, the true Myers algorithm will take O(n+d^2)\n    // time while this optimization needs only O(n+d) time.\n    var minDiagonalToConsider = -Infinity,\n      maxDiagonalToConsider = Infinity;\n\n    // Main worker method. checks all permutations of a given edit length for acceptance.\n    function execEditLength() {\n      for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n        var basePath = void 0;\n        var removePath = bestPath[diagonalPath - 1],\n          addPath = bestPath[diagonalPath + 1];\n        if (removePath) {\n          // No one else is going to attempt to use this value, clear it\n          bestPath[diagonalPath - 1] = undefined;\n        }\n        var canAdd = false;\n        if (addPath) {\n          // what newPos will be after we do an insertion:\n          var addPathNewPos = addPath.oldPos - diagonalPath;\n          canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n        }\n        var canRemove = removePath && removePath.oldPos + 1 < oldLen;\n        if (!canAdd && !canRemove) {\n          // If this path is a terminal then prune\n          bestPath[diagonalPath] = undefined;\n          continue;\n        }\n\n        // Select the diagonal that we want to branch from. We select the prior\n        // path whose position in the old string is the farthest from the origin\n        // and does not pass the bounds of the diff graph\n        if (!canRemove || canAdd && removePath.oldPos < addPath.oldPos) {\n          basePath = self.addToPath(addPath, true, false, 0, options);\n        } else {\n          basePath = self.addToPath(removePath, false, true, 1, options);\n        }\n        newPos = self.extractCommon(basePath, newString, oldString, diagonalPath, options);\n        if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n          // If we have hit the end of both strings, then we are done\n          return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken));\n        } else {\n          bestPath[diagonalPath] = basePath;\n          if (basePath.oldPos + 1 >= oldLen) {\n            maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n          }\n          if (newPos + 1 >= newLen) {\n            minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n          }\n        }\n      }\n      editLength++;\n    }\n\n    // Performs the length of edit iteration. Is a bit fugly as this has to support the\n    // sync and async mode which is never fun. Loops over execEditLength until a value\n    // is produced, or until the edit length exceeds options.maxEditLength (if given),\n    // in which case it will return undefined.\n    if (callback) {\n      (function exec() {\n        setTimeout(function () {\n          if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n            return callback();\n          }\n          if (!execEditLength()) {\n            exec();\n          }\n        }, 0);\n      })();\n    } else {\n      while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n        var ret = execEditLength();\n        if (ret) {\n          return ret;\n        }\n      }\n    }\n  },\n  addToPath: function addToPath(path, added, removed, oldPosInc, options) {\n    var last = path.lastComponent;\n    if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) {\n      return {\n        oldPos: path.oldPos + oldPosInc,\n        lastComponent: {\n          count: last.count + 1,\n          added: added,\n          removed: removed,\n          previousComponent: last.previousComponent\n        }\n      };\n    } else {\n      return {\n        oldPos: path.oldPos + oldPosInc,\n        lastComponent: {\n          count: 1,\n          added: added,\n          removed: removed,\n          previousComponent: last\n        }\n      };\n    }\n  },\n  extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath, options) {\n    var newLen = newString.length,\n      oldLen = oldString.length,\n      oldPos = basePath.oldPos,\n      newPos = oldPos - diagonalPath,\n      commonCount = 0;\n    while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldString[oldPos + 1], newString[newPos + 1], options)) {\n      newPos++;\n      oldPos++;\n      commonCount++;\n      if (options.oneChangePerToken) {\n        basePath.lastComponent = {\n          count: 1,\n          previousComponent: basePath.lastComponent,\n          added: false,\n          removed: false\n        };\n      }\n    }\n    if (commonCount && !options.oneChangePerToken) {\n      basePath.lastComponent = {\n        count: commonCount,\n        previousComponent: basePath.lastComponent,\n        added: false,\n        removed: false\n      };\n    }\n    basePath.oldPos = oldPos;\n    return newPos;\n  },\n  equals: function equals(left, right, options) {\n    if (options.comparator) {\n      return options.comparator(left, right);\n    } else {\n      return left === right || options.ignoreCase && left.toLowerCase() === right.toLowerCase();\n    }\n  },\n  removeEmpty: function removeEmpty(array) {\n    var ret = [];\n    for (var i = 0; i < array.length; i++) {\n      if (array[i]) {\n        ret.push(array[i]);\n      }\n    }\n    return ret;\n  },\n  castInput: function castInput(value) {\n    return value;\n  },\n  tokenize: function tokenize(value) {\n    return Array.from(value);\n  },\n  join: function join(chars) {\n    return chars.join('');\n  },\n  postProcess: function postProcess(changeObjects) {\n    return changeObjects;\n  }\n};\nfunction buildValues(diff, lastComponent, newString, oldString, useLongestToken) {\n  // First we convert our linked list of components in reverse order to an\n  // array in the right order:\n  var components = [];\n  var nextComponent;\n  while (lastComponent) {\n    components.push(lastComponent);\n    nextComponent = lastComponent.previousComponent;\n    delete lastComponent.previousComponent;\n    lastComponent = nextComponent;\n  }\n  components.reverse();\n  var componentPos = 0,\n    componentLen = components.length,\n    newPos = 0,\n    oldPos = 0;\n  for (; componentPos < componentLen; componentPos++) {\n    var component = components[componentPos];\n    if (!component.removed) {\n      if (!component.added && useLongestToken) {\n        var value = newString.slice(newPos, newPos + component.count);\n        value = value.map(function (value, i) {\n          var oldValue = oldString[oldPos + i];\n          return oldValue.length > value.length ? oldValue : value;\n        });\n        component.value = diff.join(value);\n      } else {\n        component.value = diff.join(newString.slice(newPos, newPos + component.count));\n      }\n      newPos += component.count;\n\n      // Common case\n      if (!component.added) {\n        oldPos += component.count;\n      }\n    } else {\n      component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n      oldPos += component.count;\n    }\n  }\n  return components;\n}\n\nvar characterDiff = new Diff();\nfunction diffChars(oldStr, newStr, options) {\n  return characterDiff.diff(oldStr, newStr, options);\n}\n\nfunction longestCommonPrefix(str1, str2) {\n  var i;\n  for (i = 0; i < str1.length && i < str2.length; i++) {\n    if (str1[i] != str2[i]) {\n      return str1.slice(0, i);\n    }\n  }\n  return str1.slice(0, i);\n}\nfunction longestCommonSuffix(str1, str2) {\n  var i;\n\n  // Unlike longestCommonPrefix, we need a special case to handle all scenarios\n  // where we return the empty string since str1.slice(-0) will return the\n  // entire string.\n  if (!str1 || !str2 || str1[str1.length - 1] != str2[str2.length - 1]) {\n    return '';\n  }\n  for (i = 0; i < str1.length && i < str2.length; i++) {\n    if (str1[str1.length - (i + 1)] != str2[str2.length - (i + 1)]) {\n      return str1.slice(-i);\n    }\n  }\n  return str1.slice(-i);\n}\nfunction replacePrefix(string, oldPrefix, newPrefix) {\n  if (string.slice(0, oldPrefix.length) != oldPrefix) {\n    throw Error(\"string \".concat(JSON.stringify(string), \" doesn't start with prefix \").concat(JSON.stringify(oldPrefix), \"; this is a bug\"));\n  }\n  return newPrefix + string.slice(oldPrefix.length);\n}\nfunction replaceSuffix(string, oldSuffix, newSuffix) {\n  if (!oldSuffix) {\n    return string + newSuffix;\n  }\n  if (string.slice(-oldSuffix.length) != oldSuffix) {\n    throw Error(\"string \".concat(JSON.stringify(string), \" doesn't end with suffix \").concat(JSON.stringify(oldSuffix), \"; this is a bug\"));\n  }\n  return string.slice(0, -oldSuffix.length) + newSuffix;\n}\nfunction removePrefix(string, oldPrefix) {\n  return replacePrefix(string, oldPrefix, '');\n}\nfunction removeSuffix(string, oldSuffix) {\n  return replaceSuffix(string, oldSuffix, '');\n}\nfunction maximumOverlap(string1, string2) {\n  return string2.slice(0, overlapCount(string1, string2));\n}\n\n// Nicked from https://stackoverflow.com/a/60422853/1709587\nfunction overlapCount(a, b) {\n  // Deal with cases where the strings differ in length\n  var startA = 0;\n  if (a.length > b.length) {\n    startA = a.length - b.length;\n  }\n  var endB = b.length;\n  if (a.length < b.length) {\n    endB = a.length;\n  }\n  // Create a back-reference for each index\n  //   that should be followed in case of a mismatch.\n  //   We only need B to make these references:\n  var map = Array(endB);\n  var k = 0; // Index that lags behind j\n  map[0] = 0;\n  for (var j = 1; j < endB; j++) {\n    if (b[j] == b[k]) {\n      map[j] = map[k]; // skip over the same character (optional optimisation)\n    } else {\n      map[j] = k;\n    }\n    while (k > 0 && b[j] != b[k]) {\n      k = map[k];\n    }\n    if (b[j] == b[k]) {\n      k++;\n    }\n  }\n  // Phase 2: use these references while iterating over A\n  k = 0;\n  for (var i = startA; i < a.length; i++) {\n    while (k > 0 && a[i] != b[k]) {\n      k = map[k];\n    }\n    if (a[i] == b[k]) {\n      k++;\n    }\n  }\n  return k;\n}\n\n/**\n * Returns true if the string consistently uses Windows line endings.\n */\nfunction hasOnlyWinLineEndings(string) {\n  return string.includes('\\r\\n') && !string.startsWith('\\n') && !string.match(/[^\\r]\\n/);\n}\n\n/**\n * Returns true if the string consistently uses Unix line endings.\n */\nfunction hasOnlyUnixLineEndings(string) {\n  return !string.includes('\\r\\n') && string.includes('\\n');\n}\n\n// Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode\n//\n// Ranges and exceptions:\n// Latin-1 Supplement, 0080–00FF\n//  - U+00D7  × Multiplication sign\n//  - U+00F7  ÷ Division sign\n// Latin Extended-A, 0100–017F\n// Latin Extended-B, 0180–024F\n// IPA Extensions, 0250–02AF\n// Spacing Modifier Letters, 02B0–02FF\n//  - U+02C7  ˇ &#711;  Caron\n//  - U+02D8  ˘ &#728;  Breve\n//  - U+02D9  ˙ &#729;  Dot Above\n//  - U+02DA  ˚ &#730;  Ring Above\n//  - U+02DB  ˛ &#731;  Ogonek\n//  - U+02DC  ˜ &#732;  Small Tilde\n//  - U+02DD  ˝ &#733;  Double Acute Accent\n// Latin Extended Additional, 1E00–1EFF\nvar extendedWordChars = \"a-zA-Z0-9_\\\\u{C0}-\\\\u{FF}\\\\u{D8}-\\\\u{F6}\\\\u{F8}-\\\\u{2C6}\\\\u{2C8}-\\\\u{2D7}\\\\u{2DE}-\\\\u{2FF}\\\\u{1E00}-\\\\u{1EFF}\";\n\n// Each token is one of the following:\n// - A punctuation mark plus the surrounding whitespace\n// - A word plus the surrounding whitespace\n// - Pure whitespace (but only in the special case where this the entire text\n//   is just whitespace)\n//\n// We have to include surrounding whitespace in the tokens because the two\n// alternative approaches produce horribly broken results:\n// * If we just discard the whitespace, we can't fully reproduce the original\n//   text from the sequence of tokens and any attempt to render the diff will\n//   get the whitespace wrong.\n// * If we have separate tokens for whitespace, then in a typical text every\n//   second token will be a single space character. But this often results in\n//   the optimal diff between two texts being a perverse one that preserves\n//   the spaces between words but deletes and reinserts actual common words.\n//   See https://github.com/kpdecker/jsdiff/issues/160#issuecomment-1866099640\n//   for an example.\n//\n// Keeping the surrounding whitespace of course has implications for .equals\n// and .join, not just .tokenize.\n\n// This regex does NOT fully implement the tokenization rules described above.\n// Instead, it gives runs of whitespace their own \"token\". The tokenize method\n// then handles stitching whitespace tokens onto adjacent word or punctuation\n// tokens.\nvar tokenizeIncludingWhitespace = new RegExp(\"[\".concat(extendedWordChars, \"]+|\\\\s+|[^\").concat(extendedWordChars, \"]\"), 'ug');\nvar wordDiff = new Diff();\nwordDiff.equals = function (left, right, options) {\n  if (options.ignoreCase) {\n    left = left.toLowerCase();\n    right = right.toLowerCase();\n  }\n  return left.trim() === right.trim();\n};\nwordDiff.tokenize = function (value) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var parts;\n  if (options.intlSegmenter) {\n    if (options.intlSegmenter.resolvedOptions().granularity != 'word') {\n      throw new Error('The segmenter passed must have a granularity of \"word\"');\n    }\n    parts = Array.from(options.intlSegmenter.segment(value), function (segment) {\n      return segment.segment;\n    });\n  } else {\n    parts = value.match(tokenizeIncludingWhitespace) || [];\n  }\n  var tokens = [];\n  var prevPart = null;\n  parts.forEach(function (part) {\n    if (/\\s/.test(part)) {\n      if (prevPart == null) {\n        tokens.push(part);\n      } else {\n        tokens.push(tokens.pop() + part);\n      }\n    } else if (/\\s/.test(prevPart)) {\n      if (tokens[tokens.length - 1] == prevPart) {\n        tokens.push(tokens.pop() + part);\n      } else {\n        tokens.push(prevPart + part);\n      }\n    } else {\n      tokens.push(part);\n    }\n    prevPart = part;\n  });\n  return tokens;\n};\nwordDiff.join = function (tokens) {\n  // Tokens being joined here will always have appeared consecutively in the\n  // same text, so we can simply strip off the leading whitespace from all the\n  // tokens except the first (and except any whitespace-only tokens - but such\n  // a token will always be the first and only token anyway) and then join them\n  // and the whitespace around words and punctuation will end up correct.\n  return tokens.map(function (token, i) {\n    if (i == 0) {\n      return token;\n    } else {\n      return token.replace(/^\\s+/, '');\n    }\n  }).join('');\n};\nwordDiff.postProcess = function (changes, options) {\n  if (!changes || options.oneChangePerToken) {\n    return changes;\n  }\n  var lastKeep = null;\n  // Change objects representing any insertion or deletion since the last\n  // \"keep\" change object. There can be at most one of each.\n  var insertion = null;\n  var deletion = null;\n  changes.forEach(function (change) {\n    if (change.added) {\n      insertion = change;\n    } else if (change.removed) {\n      deletion = change;\n    } else {\n      if (insertion || deletion) {\n        // May be false at start of text\n        dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, change);\n      }\n      lastKeep = change;\n      insertion = null;\n      deletion = null;\n    }\n  });\n  if (insertion || deletion) {\n    dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, null);\n  }\n  return changes;\n};\nfunction diffWords(oldStr, newStr, options) {\n  // This option has never been documented and never will be (it's clearer to\n  // just call `diffWordsWithSpace` directly if you need that behavior), but\n  // has existed in jsdiff for a long time, so we retain support for it here\n  // for the sake of backwards compatibility.\n  if ((options === null || options === void 0 ? void 0 : options.ignoreWhitespace) != null && !options.ignoreWhitespace) {\n    return diffWordsWithSpace(oldStr, newStr, options);\n  }\n  return wordDiff.diff(oldStr, newStr, options);\n}\nfunction dedupeWhitespaceInChangeObjects(startKeep, deletion, insertion, endKeep) {\n  // Before returning, we tidy up the leading and trailing whitespace of the\n  // change objects to eliminate cases where trailing whitespace in one object\n  // is repeated as leading whitespace in the next.\n  // Below are examples of the outcomes we want here to explain the code.\n  // I=insert, K=keep, D=delete\n  // 1. diffing 'foo bar baz' vs 'foo baz'\n  //    Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n  //    After cleanup, we want:   K:'foo ' D:'bar ' K:'baz'\n  //\n  // 2. Diffing 'foo bar baz' vs 'foo qux baz'\n  //    Prior to cleanup, we have K:'foo ' D:' bar ' I:' qux ' K:' baz'\n  //    After cleanup, we want K:'foo ' D:'bar' I:'qux' K:' baz'\n  //\n  // 3. Diffing 'foo\\nbar baz' vs 'foo baz'\n  //    Prior to cleanup, we have K:'foo ' D:'\\nbar ' K:' baz'\n  //    After cleanup, we want K'foo' D:'\\nbar' K:' baz'\n  //\n  // 4. Diffing 'foo baz' vs 'foo\\nbar baz'\n  //    Prior to cleanup, we have K:'foo\\n' I:'\\nbar ' K:' baz'\n  //    After cleanup, we ideally want K'foo' I:'\\nbar' K:' baz'\n  //    but don't actually manage this currently (the pre-cleanup change\n  //    objects don't contain enough information to make it possible).\n  //\n  // 5. Diffing 'foo   bar baz' vs 'foo  baz'\n  //    Prior to cleanup, we have K:'foo  ' D:'   bar ' K:'  baz'\n  //    After cleanup, we want K:'foo  ' D:' bar ' K:'baz'\n  //\n  // Our handling is unavoidably imperfect in the case where there's a single\n  // indel between keeps and the whitespace has changed. For instance, consider\n  // diffing 'foo\\tbar\\nbaz' vs 'foo baz'. Unless we create an extra change\n  // object to represent the insertion of the space character (which isn't even\n  // a token), we have no way to avoid losing information about the texts'\n  // original whitespace in the result we return. Still, we do our best to\n  // output something that will look sensible if we e.g. print it with\n  // insertions in green and deletions in red.\n\n  // Between two \"keep\" change objects (or before the first or after the last\n  // change object), we can have either:\n  // * A \"delete\" followed by an \"insert\"\n  // * Just an \"insert\"\n  // * Just a \"delete\"\n  // We handle the three cases separately.\n  if (deletion && insertion) {\n    var oldWsPrefix = deletion.value.match(/^\\s*/)[0];\n    var oldWsSuffix = deletion.value.match(/\\s*$/)[0];\n    var newWsPrefix = insertion.value.match(/^\\s*/)[0];\n    var newWsSuffix = insertion.value.match(/\\s*$/)[0];\n    if (startKeep) {\n      var commonWsPrefix = longestCommonPrefix(oldWsPrefix, newWsPrefix);\n      startKeep.value = replaceSuffix(startKeep.value, newWsPrefix, commonWsPrefix);\n      deletion.value = removePrefix(deletion.value, commonWsPrefix);\n      insertion.value = removePrefix(insertion.value, commonWsPrefix);\n    }\n    if (endKeep) {\n      var commonWsSuffix = longestCommonSuffix(oldWsSuffix, newWsSuffix);\n      endKeep.value = replacePrefix(endKeep.value, newWsSuffix, commonWsSuffix);\n      deletion.value = removeSuffix(deletion.value, commonWsSuffix);\n      insertion.value = removeSuffix(insertion.value, commonWsSuffix);\n    }\n  } else if (insertion) {\n    // The whitespaces all reflect what was in the new text rather than\n    // the old, so we essentially have no information about whitespace\n    // insertion or deletion. We just want to dedupe the whitespace.\n    // We do that by having each change object keep its trailing\n    // whitespace and deleting duplicate leading whitespace where\n    // present.\n    if (startKeep) {\n      insertion.value = insertion.value.replace(/^\\s*/, '');\n    }\n    if (endKeep) {\n      endKeep.value = endKeep.value.replace(/^\\s*/, '');\n    }\n    // otherwise we've got a deletion and no insertion\n  } else if (startKeep && endKeep) {\n    var newWsFull = endKeep.value.match(/^\\s*/)[0],\n      delWsStart = deletion.value.match(/^\\s*/)[0],\n      delWsEnd = deletion.value.match(/\\s*$/)[0];\n\n    // Any whitespace that comes straight after startKeep in both the old and\n    // new texts, assign to startKeep and remove from the deletion.\n    var newWsStart = longestCommonPrefix(newWsFull, delWsStart);\n    deletion.value = removePrefix(deletion.value, newWsStart);\n\n    // Any whitespace that comes straight before endKeep in both the old and\n    // new texts, and hasn't already been assigned to startKeep, assign to\n    // endKeep and remove from the deletion.\n    var newWsEnd = longestCommonSuffix(removePrefix(newWsFull, newWsStart), delWsEnd);\n    deletion.value = removeSuffix(deletion.value, newWsEnd);\n    endKeep.value = replacePrefix(endKeep.value, newWsFull, newWsEnd);\n\n    // If there's any whitespace from the new text that HASN'T already been\n    // assigned, assign it to the start:\n    startKeep.value = replaceSuffix(startKeep.value, newWsFull, newWsFull.slice(0, newWsFull.length - newWsEnd.length));\n  } else if (endKeep) {\n    // We are at the start of the text. Preserve all the whitespace on\n    // endKeep, and just remove whitespace from the end of deletion to the\n    // extent that it overlaps with the start of endKeep.\n    var endKeepWsPrefix = endKeep.value.match(/^\\s*/)[0];\n    var deletionWsSuffix = deletion.value.match(/\\s*$/)[0];\n    var overlap = maximumOverlap(deletionWsSuffix, endKeepWsPrefix);\n    deletion.value = removeSuffix(deletion.value, overlap);\n  } else if (startKeep) {\n    // We are at the END of the text. Preserve all the whitespace on\n    // startKeep, and just remove whitespace from the start of deletion to\n    // the extent that it overlaps with the end of startKeep.\n    var startKeepWsSuffix = startKeep.value.match(/\\s*$/)[0];\n    var deletionWsPrefix = deletion.value.match(/^\\s*/)[0];\n    var _overlap = maximumOverlap(startKeepWsSuffix, deletionWsPrefix);\n    deletion.value = removePrefix(deletion.value, _overlap);\n  }\n}\nvar wordWithSpaceDiff = new Diff();\nwordWithSpaceDiff.tokenize = function (value) {\n  // Slightly different to the tokenizeIncludingWhitespace regex used above in\n  // that this one treats each individual newline as a distinct tokens, rather\n  // than merging them into other surrounding whitespace. This was requested\n  // in https://github.com/kpdecker/jsdiff/issues/180 &\n  //    https://github.com/kpdecker/jsdiff/issues/211\n  var regex = new RegExp(\"(\\\\r?\\\\n)|[\".concat(extendedWordChars, \"]+|[^\\\\S\\\\n\\\\r]+|[^\").concat(extendedWordChars, \"]\"), 'ug');\n  return value.match(regex) || [];\n};\nfunction diffWordsWithSpace(oldStr, newStr, options) {\n  return wordWithSpaceDiff.diff(oldStr, newStr, options);\n}\n\nfunction generateOptions(options, defaults) {\n  if (typeof options === 'function') {\n    defaults.callback = options;\n  } else if (options) {\n    for (var name in options) {\n      /* istanbul ignore else */\n      if (options.hasOwnProperty(name)) {\n        defaults[name] = options[name];\n      }\n    }\n  }\n  return defaults;\n}\n\nvar lineDiff = new Diff();\nlineDiff.tokenize = function (value, options) {\n  if (options.stripTrailingCr) {\n    // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n    value = value.replace(/\\r\\n/g, '\\n');\n  }\n  var retLines = [],\n    linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n\n  // Ignore the final empty token that occurs if the string ends with a new line\n  if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n    linesAndNewlines.pop();\n  }\n\n  // Merge the content and line separators into single tokens\n  for (var i = 0; i < linesAndNewlines.length; i++) {\n    var line = linesAndNewlines[i];\n    if (i % 2 && !options.newlineIsToken) {\n      retLines[retLines.length - 1] += line;\n    } else {\n      retLines.push(line);\n    }\n  }\n  return retLines;\n};\nlineDiff.equals = function (left, right, options) {\n  // If we're ignoring whitespace, we need to normalise lines by stripping\n  // whitespace before checking equality. (This has an annoying interaction\n  // with newlineIsToken that requires special handling: if newlines get their\n  // own token, then we DON'T want to trim the *newline* tokens down to empty\n  // strings, since this would cause us to treat whitespace-only line content\n  // as equal to a separator between lines, which would be weird and\n  // inconsistent with the documented behavior of the options.)\n  if (options.ignoreWhitespace) {\n    if (!options.newlineIsToken || !left.includes('\\n')) {\n      left = left.trim();\n    }\n    if (!options.newlineIsToken || !right.includes('\\n')) {\n      right = right.trim();\n    }\n  } else if (options.ignoreNewlineAtEof && !options.newlineIsToken) {\n    if (left.endsWith('\\n')) {\n      left = left.slice(0, -1);\n    }\n    if (right.endsWith('\\n')) {\n      right = right.slice(0, -1);\n    }\n  }\n  return Diff.prototype.equals.call(this, left, right, options);\n};\nfunction diffLines(oldStr, newStr, callback) {\n  return lineDiff.diff(oldStr, newStr, callback);\n}\n\n// Kept for backwards compatibility. This is a rather arbitrary wrapper method\n// that just calls `diffLines` with `ignoreWhitespace: true`. It's confusing to\n// have two ways to do exactly the same thing in the API, so we no longer\n// document this one (library users should explicitly use `diffLines` with\n// `ignoreWhitespace: true` instead) but we keep it around to maintain\n// compatibility with code that used old versions.\nfunction diffTrimmedLines(oldStr, newStr, callback) {\n  var options = generateOptions(callback, {\n    ignoreWhitespace: true\n  });\n  return lineDiff.diff(oldStr, newStr, options);\n}\n\nvar sentenceDiff = new Diff();\nsentenceDiff.tokenize = function (value) {\n  return value.split(/(\\S.+?[.!?])(?=\\s+|$)/);\n};\nfunction diffSentences(oldStr, newStr, callback) {\n  return sentenceDiff.diff(oldStr, newStr, callback);\n}\n\nvar cssDiff = new Diff();\ncssDiff.tokenize = function (value) {\n  return value.split(/([{}:;,]|\\s+)/);\n};\nfunction diffCss(oldStr, newStr, callback) {\n  return cssDiff.diff(oldStr, newStr, callback);\n}\n\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nfunction _defineProperty(obj, key, value) {\n  key = _toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n  return arr2;\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar jsonDiff = new Diff();\n// Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\njsonDiff.useLongestToken = true;\njsonDiff.tokenize = lineDiff.tokenize;\njsonDiff.castInput = function (value, options) {\n  var undefinedReplacement = options.undefinedReplacement,\n    _options$stringifyRep = options.stringifyReplacer,\n    stringifyReplacer = _options$stringifyRep === void 0 ? function (k, v) {\n      return typeof v === 'undefined' ? undefinedReplacement : v;\n    } : _options$stringifyRep;\n  return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, '  ');\n};\njsonDiff.equals = function (left, right, options) {\n  return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'), options);\n};\nfunction diffJson(oldObj, newObj, options) {\n  return jsonDiff.diff(oldObj, newObj, options);\n}\n\n// This function handles the presence of circular references by bailing out when encountering an\n// object that is already on the \"stack\" of items being processed. Accepts an optional replacer\nfunction canonicalize(obj, stack, replacementStack, replacer, key) {\n  stack = stack || [];\n  replacementStack = replacementStack || [];\n  if (replacer) {\n    obj = replacer(key, obj);\n  }\n  var i;\n  for (i = 0; i < stack.length; i += 1) {\n    if (stack[i] === obj) {\n      return replacementStack[i];\n    }\n  }\n  var canonicalizedObj;\n  if ('[object Array]' === Object.prototype.toString.call(obj)) {\n    stack.push(obj);\n    canonicalizedObj = new Array(obj.length);\n    replacementStack.push(canonicalizedObj);\n    for (i = 0; i < obj.length; i += 1) {\n      canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);\n    }\n    stack.pop();\n    replacementStack.pop();\n    return canonicalizedObj;\n  }\n  if (obj && obj.toJSON) {\n    obj = obj.toJSON();\n  }\n  if (_typeof(obj) === 'object' && obj !== null) {\n    stack.push(obj);\n    canonicalizedObj = {};\n    replacementStack.push(canonicalizedObj);\n    var sortedKeys = [],\n      _key;\n    for (_key in obj) {\n      /* istanbul ignore else */\n      if (Object.prototype.hasOwnProperty.call(obj, _key)) {\n        sortedKeys.push(_key);\n      }\n    }\n    sortedKeys.sort();\n    for (i = 0; i < sortedKeys.length; i += 1) {\n      _key = sortedKeys[i];\n      canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);\n    }\n    stack.pop();\n    replacementStack.pop();\n  } else {\n    canonicalizedObj = obj;\n  }\n  return canonicalizedObj;\n}\n\nvar arrayDiff = new Diff();\narrayDiff.tokenize = function (value) {\n  return value.slice();\n};\narrayDiff.join = arrayDiff.removeEmpty = function (value) {\n  return value;\n};\nfunction diffArrays(oldArr, newArr, callback) {\n  return arrayDiff.diff(oldArr, newArr, callback);\n}\n\nfunction unixToWin(patch) {\n  if (Array.isArray(patch)) {\n    return patch.map(unixToWin);\n  }\n  return _objectSpread2(_objectSpread2({}, patch), {}, {\n    hunks: patch.hunks.map(function (hunk) {\n      return _objectSpread2(_objectSpread2({}, hunk), {}, {\n        lines: hunk.lines.map(function (line, i) {\n          var _hunk$lines;\n          return line.startsWith('\\\\') || line.endsWith('\\r') || (_hunk$lines = hunk.lines[i + 1]) !== null && _hunk$lines !== void 0 && _hunk$lines.startsWith('\\\\') ? line : line + '\\r';\n        })\n      });\n    })\n  });\n}\nfunction winToUnix(patch) {\n  if (Array.isArray(patch)) {\n    return patch.map(winToUnix);\n  }\n  return _objectSpread2(_objectSpread2({}, patch), {}, {\n    hunks: patch.hunks.map(function (hunk) {\n      return _objectSpread2(_objectSpread2({}, hunk), {}, {\n        lines: hunk.lines.map(function (line) {\n          return line.endsWith('\\r') ? line.substring(0, line.length - 1) : line;\n        })\n      });\n    })\n  });\n}\n\n/**\n * Returns true if the patch consistently uses Unix line endings (or only involves one line and has\n * no line endings).\n */\nfunction isUnix(patch) {\n  if (!Array.isArray(patch)) {\n    patch = [patch];\n  }\n  return !patch.some(function (index) {\n    return index.hunks.some(function (hunk) {\n      return hunk.lines.some(function (line) {\n        return !line.startsWith('\\\\') && line.endsWith('\\r');\n      });\n    });\n  });\n}\n\n/**\n * Returns true if the patch uses Windows line endings and only Windows line endings.\n */\nfunction isWin(patch) {\n  if (!Array.isArray(patch)) {\n    patch = [patch];\n  }\n  return patch.some(function (index) {\n    return index.hunks.some(function (hunk) {\n      return hunk.lines.some(function (line) {\n        return line.endsWith('\\r');\n      });\n    });\n  }) && patch.every(function (index) {\n    return index.hunks.every(function (hunk) {\n      return hunk.lines.every(function (line, i) {\n        var _hunk$lines2;\n        return line.startsWith('\\\\') || line.endsWith('\\r') || ((_hunk$lines2 = hunk.lines[i + 1]) === null || _hunk$lines2 === void 0 ? void 0 : _hunk$lines2.startsWith('\\\\'));\n      });\n    });\n  });\n}\n\nfunction parsePatch(uniDiff) {\n  var diffstr = uniDiff.split(/\\n/),\n    list = [],\n    i = 0;\n  function parseIndex() {\n    var index = {};\n    list.push(index);\n\n    // Parse diff metadata\n    while (i < diffstr.length) {\n      var line = diffstr[i];\n\n      // File header found, end parsing diff metadata\n      if (/^(\\-\\-\\-|\\+\\+\\+|@@)\\s/.test(line)) {\n        break;\n      }\n\n      // Diff index\n      var header = /^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/.exec(line);\n      if (header) {\n        index.index = header[1];\n      }\n      i++;\n    }\n\n    // Parse file headers if they are defined. Unified diff requires them, but\n    // there's no technical issues to have an isolated hunk without file header\n    parseFileHeader(index);\n    parseFileHeader(index);\n\n    // Parse hunks\n    index.hunks = [];\n    while (i < diffstr.length) {\n      var _line = diffstr[i];\n      if (/^(Index:\\s|diff\\s|\\-\\-\\-\\s|\\+\\+\\+\\s|===================================================================)/.test(_line)) {\n        break;\n      } else if (/^@@/.test(_line)) {\n        index.hunks.push(parseHunk());\n      } else if (_line) {\n        throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));\n      } else {\n        i++;\n      }\n    }\n  }\n\n  // Parses the --- and +++ headers, if none are found, no lines\n  // are consumed.\n  function parseFileHeader(index) {\n    var fileHeader = /^(---|\\+\\+\\+)\\s+(.*)\\r?$/.exec(diffstr[i]);\n    if (fileHeader) {\n      var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';\n      var data = fileHeader[2].split('\\t', 2);\n      var fileName = data[0].replace(/\\\\\\\\/g, '\\\\');\n      if (/^\".*\"$/.test(fileName)) {\n        fileName = fileName.substr(1, fileName.length - 2);\n      }\n      index[keyPrefix + 'FileName'] = fileName;\n      index[keyPrefix + 'Header'] = (data[1] || '').trim();\n      i++;\n    }\n  }\n\n  // Parses a hunk\n  // This assumes that we are at the start of a hunk.\n  function parseHunk() {\n    var chunkHeaderIndex = i,\n      chunkHeaderLine = diffstr[i++],\n      chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n    var hunk = {\n      oldStart: +chunkHeader[1],\n      oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],\n      newStart: +chunkHeader[3],\n      newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],\n      lines: []\n    };\n\n    // Unified Diff Format quirk: If the chunk size is 0,\n    // the first number is one lower than one would expect.\n    // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n    if (hunk.oldLines === 0) {\n      hunk.oldStart += 1;\n    }\n    if (hunk.newLines === 0) {\n      hunk.newStart += 1;\n    }\n    var addCount = 0,\n      removeCount = 0;\n    for (; i < diffstr.length && (removeCount < hunk.oldLines || addCount < hunk.newLines || (_diffstr$i = diffstr[i]) !== null && _diffstr$i !== void 0 && _diffstr$i.startsWith('\\\\')); i++) {\n      var _diffstr$i;\n      var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];\n      if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n        hunk.lines.push(diffstr[i]);\n        if (operation === '+') {\n          addCount++;\n        } else if (operation === '-') {\n          removeCount++;\n        } else if (operation === ' ') {\n          addCount++;\n          removeCount++;\n        }\n      } else {\n        throw new Error(\"Hunk at line \".concat(chunkHeaderIndex + 1, \" contained invalid line \").concat(diffstr[i]));\n      }\n    }\n\n    // Handle the empty block count case\n    if (!addCount && hunk.newLines === 1) {\n      hunk.newLines = 0;\n    }\n    if (!removeCount && hunk.oldLines === 1) {\n      hunk.oldLines = 0;\n    }\n\n    // Perform sanity checking\n    if (addCount !== hunk.newLines) {\n      throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n    }\n    if (removeCount !== hunk.oldLines) {\n      throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n    }\n    return hunk;\n  }\n  while (i < diffstr.length) {\n    parseIndex();\n  }\n  return list;\n}\n\n// Iterator that traverses in the range of [min, max], stepping\n// by distance from a given start position. I.e. for [0, 4], with\n// start of 2, this will iterate 2, 3, 1, 4, 0.\nfunction distanceIterator (start, minLine, maxLine) {\n  var wantForward = true,\n    backwardExhausted = false,\n    forwardExhausted = false,\n    localOffset = 1;\n  return function iterator() {\n    if (wantForward && !forwardExhausted) {\n      if (backwardExhausted) {\n        localOffset++;\n      } else {\n        wantForward = false;\n      }\n\n      // Check if trying to fit beyond text length, and if not, check it fits\n      // after offset location (or desired location on first iteration)\n      if (start + localOffset <= maxLine) {\n        return start + localOffset;\n      }\n      forwardExhausted = true;\n    }\n    if (!backwardExhausted) {\n      if (!forwardExhausted) {\n        wantForward = true;\n      }\n\n      // Check if trying to fit before text beginning, and if not, check it fits\n      // before offset location\n      if (minLine <= start - localOffset) {\n        return start - localOffset++;\n      }\n      backwardExhausted = true;\n      return iterator();\n    }\n\n    // We tried to fit hunk before text beginning and beyond text length, then\n    // hunk can't fit on the text. Return undefined\n  };\n}\n\nfunction applyPatch(source, uniDiff) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  if (typeof uniDiff === 'string') {\n    uniDiff = parsePatch(uniDiff);\n  }\n  if (Array.isArray(uniDiff)) {\n    if (uniDiff.length > 1) {\n      throw new Error('applyPatch only works with a single input.');\n    }\n    uniDiff = uniDiff[0];\n  }\n  if (options.autoConvertLineEndings || options.autoConvertLineEndings == null) {\n    if (hasOnlyWinLineEndings(source) && isUnix(uniDiff)) {\n      uniDiff = unixToWin(uniDiff);\n    } else if (hasOnlyUnixLineEndings(source) && isWin(uniDiff)) {\n      uniDiff = winToUnix(uniDiff);\n    }\n  }\n\n  // Apply the diff to the input\n  var lines = source.split('\\n'),\n    hunks = uniDiff.hunks,\n    compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) {\n      return line === patchContent;\n    },\n    fuzzFactor = options.fuzzFactor || 0,\n    minLine = 0;\n  if (fuzzFactor < 0 || !Number.isInteger(fuzzFactor)) {\n    throw new Error('fuzzFactor must be a non-negative integer');\n  }\n\n  // Special case for empty patch.\n  if (!hunks.length) {\n    return source;\n  }\n\n  // Before anything else, handle EOFNL insertion/removal. If the patch tells us to make a change\n  // to the EOFNL that is redundant/impossible - i.e. to remove a newline that's not there, or add a\n  // newline that already exists - then we either return false and fail to apply the patch (if\n  // fuzzFactor is 0) or simply ignore the problem and do nothing (if fuzzFactor is >0).\n  // If we do need to remove/add a newline at EOF, this will always be in the final hunk:\n  var prevLine = '',\n    removeEOFNL = false,\n    addEOFNL = false;\n  for (var i = 0; i < hunks[hunks.length - 1].lines.length; i++) {\n    var line = hunks[hunks.length - 1].lines[i];\n    if (line[0] == '\\\\') {\n      if (prevLine[0] == '+') {\n        removeEOFNL = true;\n      } else if (prevLine[0] == '-') {\n        addEOFNL = true;\n      }\n    }\n    prevLine = line;\n  }\n  if (removeEOFNL) {\n    if (addEOFNL) {\n      // This means the final line gets changed but doesn't have a trailing newline in either the\n      // original or patched version. In that case, we do nothing if fuzzFactor > 0, and if\n      // fuzzFactor is 0, we simply validate that the source file has no trailing newline.\n      if (!fuzzFactor && lines[lines.length - 1] == '') {\n        return false;\n      }\n    } else if (lines[lines.length - 1] == '') {\n      lines.pop();\n    } else if (!fuzzFactor) {\n      return false;\n    }\n  } else if (addEOFNL) {\n    if (lines[lines.length - 1] != '') {\n      lines.push('');\n    } else if (!fuzzFactor) {\n      return false;\n    }\n  }\n\n  /**\n   * Checks if the hunk can be made to fit at the provided location with at most `maxErrors`\n   * insertions, substitutions, or deletions, while ensuring also that:\n   * - lines deleted in the hunk match exactly, and\n   * - wherever an insertion operation or block of insertion operations appears in the hunk, the\n   *   immediately preceding and following lines of context match exactly\n   *\n   * `toPos` should be set such that lines[toPos] is meant to match hunkLines[0].\n   *\n   * If the hunk can be applied, returns an object with properties `oldLineLastI` and\n   * `replacementLines`. Otherwise, returns null.\n   */\n  function applyHunk(hunkLines, toPos, maxErrors) {\n    var hunkLinesI = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n    var lastContextLineMatched = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n    var patchedLines = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];\n    var patchedLinesLength = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n    var nConsecutiveOldContextLines = 0;\n    var nextContextLineMustMatch = false;\n    for (; hunkLinesI < hunkLines.length; hunkLinesI++) {\n      var hunkLine = hunkLines[hunkLinesI],\n        operation = hunkLine.length > 0 ? hunkLine[0] : ' ',\n        content = hunkLine.length > 0 ? hunkLine.substr(1) : hunkLine;\n      if (operation === '-') {\n        if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n          toPos++;\n          nConsecutiveOldContextLines = 0;\n        } else {\n          if (!maxErrors || lines[toPos] == null) {\n            return null;\n          }\n          patchedLines[patchedLinesLength] = lines[toPos];\n          return applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1);\n        }\n      }\n      if (operation === '+') {\n        if (!lastContextLineMatched) {\n          return null;\n        }\n        patchedLines[patchedLinesLength] = content;\n        patchedLinesLength++;\n        nConsecutiveOldContextLines = 0;\n        nextContextLineMustMatch = true;\n      }\n      if (operation === ' ') {\n        nConsecutiveOldContextLines++;\n        patchedLines[patchedLinesLength] = lines[toPos];\n        if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n          patchedLinesLength++;\n          lastContextLineMatched = true;\n          nextContextLineMustMatch = false;\n          toPos++;\n        } else {\n          if (nextContextLineMustMatch || !maxErrors) {\n            return null;\n          }\n\n          // Consider 3 possibilities in sequence:\n          // 1. lines contains a *substitution* not included in the patch context, or\n          // 2. lines contains an *insertion* not included in the patch context, or\n          // 3. lines contains a *deletion* not included in the patch context\n          // The first two options are of course only possible if the line from lines is non-null -\n          // i.e. only option 3 is possible if we've overrun the end of the old file.\n          return lines[toPos] && (applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength + 1) || applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1)) || applyHunk(hunkLines, toPos, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength);\n        }\n      }\n    }\n\n    // Before returning, trim any unmodified context lines off the end of patchedLines and reduce\n    // toPos (and thus oldLineLastI) accordingly. This allows later hunks to be applied to a region\n    // that starts in this hunk's trailing context.\n    patchedLinesLength -= nConsecutiveOldContextLines;\n    toPos -= nConsecutiveOldContextLines;\n    patchedLines.length = patchedLinesLength;\n    return {\n      patchedLines: patchedLines,\n      oldLineLastI: toPos - 1\n    };\n  }\n  var resultLines = [];\n\n  // Search best fit offsets for each hunk based on the previous ones\n  var prevHunkOffset = 0;\n  for (var _i = 0; _i < hunks.length; _i++) {\n    var hunk = hunks[_i];\n    var hunkResult = void 0;\n    var maxLine = lines.length - hunk.oldLines + fuzzFactor;\n    var toPos = void 0;\n    for (var maxErrors = 0; maxErrors <= fuzzFactor; maxErrors++) {\n      toPos = hunk.oldStart + prevHunkOffset - 1;\n      var iterator = distanceIterator(toPos, minLine, maxLine);\n      for (; toPos !== undefined; toPos = iterator()) {\n        hunkResult = applyHunk(hunk.lines, toPos, maxErrors);\n        if (hunkResult) {\n          break;\n        }\n      }\n      if (hunkResult) {\n        break;\n      }\n    }\n    if (!hunkResult) {\n      return false;\n    }\n\n    // Copy everything from the end of where we applied the last hunk to the start of this hunk\n    for (var _i2 = minLine; _i2 < toPos; _i2++) {\n      resultLines.push(lines[_i2]);\n    }\n\n    // Add the lines produced by applying the hunk:\n    for (var _i3 = 0; _i3 < hunkResult.patchedLines.length; _i3++) {\n      var _line = hunkResult.patchedLines[_i3];\n      resultLines.push(_line);\n    }\n\n    // Set lower text limit to end of the current hunk, so next ones don't try\n    // to fit over already patched text\n    minLine = hunkResult.oldLineLastI + 1;\n\n    // Note the offset between where the patch said the hunk should've applied and where we\n    // applied it, so we can adjust future hunks accordingly:\n    prevHunkOffset = toPos + 1 - hunk.oldStart;\n  }\n\n  // Copy over the rest of the lines from the old text\n  for (var _i4 = minLine; _i4 < lines.length; _i4++) {\n    resultLines.push(lines[_i4]);\n  }\n  return resultLines.join('\\n');\n}\n\n// Wrapper that supports multiple file patches via callbacks.\nfunction applyPatches(uniDiff, options) {\n  if (typeof uniDiff === 'string') {\n    uniDiff = parsePatch(uniDiff);\n  }\n  var currentIndex = 0;\n  function processIndex() {\n    var index = uniDiff[currentIndex++];\n    if (!index) {\n      return options.complete();\n    }\n    options.loadFile(index, function (err, data) {\n      if (err) {\n        return options.complete(err);\n      }\n      var updatedContent = applyPatch(data, index, options);\n      options.patched(index, updatedContent, function (err) {\n        if (err) {\n          return options.complete(err);\n        }\n        processIndex();\n      });\n    });\n  }\n  processIndex();\n}\n\nfunction structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n  if (!options) {\n    options = {};\n  }\n  if (typeof options === 'function') {\n    options = {\n      callback: options\n    };\n  }\n  if (typeof options.context === 'undefined') {\n    options.context = 4;\n  }\n  if (options.newlineIsToken) {\n    throw new Error('newlineIsToken may not be used with patch-generation functions, only with diffing functions');\n  }\n  if (!options.callback) {\n    return diffLinesResultToPatch(diffLines(oldStr, newStr, options));\n  } else {\n    var _options = options,\n      _callback = _options.callback;\n    diffLines(oldStr, newStr, _objectSpread2(_objectSpread2({}, options), {}, {\n      callback: function callback(diff) {\n        var patch = diffLinesResultToPatch(diff);\n        _callback(patch);\n      }\n    }));\n  }\n  function diffLinesResultToPatch(diff) {\n    // STEP 1: Build up the patch with no \"\\ No newline at end of file\" lines and with the arrays\n    //         of lines containing trailing newline characters. We'll tidy up later...\n\n    if (!diff) {\n      return;\n    }\n    diff.push({\n      value: '',\n      lines: []\n    }); // Append an empty value to make cleanup easier\n\n    function contextLines(lines) {\n      return lines.map(function (entry) {\n        return ' ' + entry;\n      });\n    }\n    var hunks = [];\n    var oldRangeStart = 0,\n      newRangeStart = 0,\n      curRange = [],\n      oldLine = 1,\n      newLine = 1;\n    var _loop = function _loop() {\n      var current = diff[i],\n        lines = current.lines || splitLines(current.value);\n      current.lines = lines;\n      if (current.added || current.removed) {\n        var _curRange;\n        // If we have previous context, start with that\n        if (!oldRangeStart) {\n          var prev = diff[i - 1];\n          oldRangeStart = oldLine;\n          newRangeStart = newLine;\n          if (prev) {\n            curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];\n            oldRangeStart -= curRange.length;\n            newRangeStart -= curRange.length;\n          }\n        }\n\n        // Output our changes\n        (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) {\n          return (current.added ? '+' : '-') + entry;\n        })));\n\n        // Track the updated file position\n        if (current.added) {\n          newLine += lines.length;\n        } else {\n          oldLine += lines.length;\n        }\n      } else {\n        // Identical context lines. Track line changes\n        if (oldRangeStart) {\n          // Close out any changes that have been output (or join overlapping)\n          if (lines.length <= options.context * 2 && i < diff.length - 2) {\n            var _curRange2;\n            // Overlapping\n            (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines)));\n          } else {\n            var _curRange3;\n            // end the range and output\n            var contextSize = Math.min(lines.length, options.context);\n            (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize))));\n            var _hunk = {\n              oldStart: oldRangeStart,\n              oldLines: oldLine - oldRangeStart + contextSize,\n              newStart: newRangeStart,\n              newLines: newLine - newRangeStart + contextSize,\n              lines: curRange\n            };\n            hunks.push(_hunk);\n            oldRangeStart = 0;\n            newRangeStart = 0;\n            curRange = [];\n          }\n        }\n        oldLine += lines.length;\n        newLine += lines.length;\n      }\n    };\n    for (var i = 0; i < diff.length; i++) {\n      _loop();\n    }\n\n    // Step 2: eliminate the trailing `\\n` from each line of each hunk, and, where needed, add\n    //         \"\\ No newline at end of file\".\n    for (var _i = 0, _hunks = hunks; _i < _hunks.length; _i++) {\n      var hunk = _hunks[_i];\n      for (var _i2 = 0; _i2 < hunk.lines.length; _i2++) {\n        if (hunk.lines[_i2].endsWith('\\n')) {\n          hunk.lines[_i2] = hunk.lines[_i2].slice(0, -1);\n        } else {\n          hunk.lines.splice(_i2 + 1, 0, '\\\\ No newline at end of file');\n          _i2++; // Skip the line we just added, then continue iterating\n        }\n      }\n    }\n    return {\n      oldFileName: oldFileName,\n      newFileName: newFileName,\n      oldHeader: oldHeader,\n      newHeader: newHeader,\n      hunks: hunks\n    };\n  }\n}\nfunction formatPatch(diff) {\n  if (Array.isArray(diff)) {\n    return diff.map(formatPatch).join('\\n');\n  }\n  var ret = [];\n  if (diff.oldFileName == diff.newFileName) {\n    ret.push('Index: ' + diff.oldFileName);\n  }\n  ret.push('===================================================================');\n  ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\\t' + diff.oldHeader));\n  ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\\t' + diff.newHeader));\n  for (var i = 0; i < diff.hunks.length; i++) {\n    var hunk = diff.hunks[i];\n    // Unified Diff Format quirk: If the chunk size is 0,\n    // the first number is one lower than one would expect.\n    // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n    if (hunk.oldLines === 0) {\n      hunk.oldStart -= 1;\n    }\n    if (hunk.newLines === 0) {\n      hunk.newStart -= 1;\n    }\n    ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');\n    ret.push.apply(ret, hunk.lines);\n  }\n  return ret.join('\\n') + '\\n';\n}\nfunction createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n  var _options2;\n  if (typeof options === 'function') {\n    options = {\n      callback: options\n    };\n  }\n  if (!((_options2 = options) !== null && _options2 !== void 0 && _options2.callback)) {\n    var patchObj = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);\n    if (!patchObj) {\n      return;\n    }\n    return formatPatch(patchObj);\n  } else {\n    var _options3 = options,\n      _callback2 = _options3.callback;\n    structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, _objectSpread2(_objectSpread2({}, options), {}, {\n      callback: function callback(patchObj) {\n        if (!patchObj) {\n          _callback2();\n        } else {\n          _callback2(formatPatch(patchObj));\n        }\n      }\n    }));\n  }\n}\nfunction createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n  return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n\n/**\n * Split `text` into an array of lines, including the trailing newline character (where present)\n */\nfunction splitLines(text) {\n  var hasTrailingNl = text.endsWith('\\n');\n  var result = text.split('\\n').map(function (line) {\n    return line + '\\n';\n  });\n  if (hasTrailingNl) {\n    result.pop();\n  } else {\n    result.push(result.pop().slice(0, -1));\n  }\n  return result;\n}\n\nfunction arrayEqual(a, b) {\n  if (a.length !== b.length) {\n    return false;\n  }\n  return arrayStartsWith(a, b);\n}\nfunction arrayStartsWith(array, start) {\n  if (start.length > array.length) {\n    return false;\n  }\n  for (var i = 0; i < start.length; i++) {\n    if (start[i] !== array[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction calcLineCount(hunk) {\n  var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines),\n    oldLines = _calcOldNewLineCount.oldLines,\n    newLines = _calcOldNewLineCount.newLines;\n  if (oldLines !== undefined) {\n    hunk.oldLines = oldLines;\n  } else {\n    delete hunk.oldLines;\n  }\n  if (newLines !== undefined) {\n    hunk.newLines = newLines;\n  } else {\n    delete hunk.newLines;\n  }\n}\nfunction merge(mine, theirs, base) {\n  mine = loadPatch(mine, base);\n  theirs = loadPatch(theirs, base);\n  var ret = {};\n\n  // For index we just let it pass through as it doesn't have any necessary meaning.\n  // Leaving sanity checks on this to the API consumer that may know more about the\n  // meaning in their own context.\n  if (mine.index || theirs.index) {\n    ret.index = mine.index || theirs.index;\n  }\n  if (mine.newFileName || theirs.newFileName) {\n    if (!fileNameChanged(mine)) {\n      // No header or no change in ours, use theirs (and ours if theirs does not exist)\n      ret.oldFileName = theirs.oldFileName || mine.oldFileName;\n      ret.newFileName = theirs.newFileName || mine.newFileName;\n      ret.oldHeader = theirs.oldHeader || mine.oldHeader;\n      ret.newHeader = theirs.newHeader || mine.newHeader;\n    } else if (!fileNameChanged(theirs)) {\n      // No header or no change in theirs, use ours\n      ret.oldFileName = mine.oldFileName;\n      ret.newFileName = mine.newFileName;\n      ret.oldHeader = mine.oldHeader;\n      ret.newHeader = mine.newHeader;\n    } else {\n      // Both changed... figure it out\n      ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);\n      ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);\n      ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);\n      ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);\n    }\n  }\n  ret.hunks = [];\n  var mineIndex = 0,\n    theirsIndex = 0,\n    mineOffset = 0,\n    theirsOffset = 0;\n  while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {\n    var mineCurrent = mine.hunks[mineIndex] || {\n        oldStart: Infinity\n      },\n      theirsCurrent = theirs.hunks[theirsIndex] || {\n        oldStart: Infinity\n      };\n    if (hunkBefore(mineCurrent, theirsCurrent)) {\n      // This patch does not overlap with any of the others, yay.\n      ret.hunks.push(cloneHunk(mineCurrent, mineOffset));\n      mineIndex++;\n      theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;\n    } else if (hunkBefore(theirsCurrent, mineCurrent)) {\n      // This patch does not overlap with any of the others, yay.\n      ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));\n      theirsIndex++;\n      mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;\n    } else {\n      // Overlap, merge as best we can\n      var mergedHunk = {\n        oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),\n        oldLines: 0,\n        newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),\n        newLines: 0,\n        lines: []\n      };\n      mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);\n      theirsIndex++;\n      mineIndex++;\n      ret.hunks.push(mergedHunk);\n    }\n  }\n  return ret;\n}\nfunction loadPatch(param, base) {\n  if (typeof param === 'string') {\n    if (/^@@/m.test(param) || /^Index:/m.test(param)) {\n      return parsePatch(param)[0];\n    }\n    if (!base) {\n      throw new Error('Must provide a base reference or pass in a patch');\n    }\n    return structuredPatch(undefined, undefined, base, param);\n  }\n  return param;\n}\nfunction fileNameChanged(patch) {\n  return patch.newFileName && patch.newFileName !== patch.oldFileName;\n}\nfunction selectField(index, mine, theirs) {\n  if (mine === theirs) {\n    return mine;\n  } else {\n    index.conflict = true;\n    return {\n      mine: mine,\n      theirs: theirs\n    };\n  }\n}\nfunction hunkBefore(test, check) {\n  return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;\n}\nfunction cloneHunk(hunk, offset) {\n  return {\n    oldStart: hunk.oldStart,\n    oldLines: hunk.oldLines,\n    newStart: hunk.newStart + offset,\n    newLines: hunk.newLines,\n    lines: hunk.lines\n  };\n}\nfunction mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {\n  // This will generally result in a conflicted hunk, but there are cases where the context\n  // is the only overlap where we can successfully merge the content here.\n  var mine = {\n      offset: mineOffset,\n      lines: mineLines,\n      index: 0\n    },\n    their = {\n      offset: theirOffset,\n      lines: theirLines,\n      index: 0\n    };\n\n  // Handle any leading content\n  insertLeading(hunk, mine, their);\n  insertLeading(hunk, their, mine);\n\n  // Now in the overlap content. Scan through and select the best changes from each.\n  while (mine.index < mine.lines.length && their.index < their.lines.length) {\n    var mineCurrent = mine.lines[mine.index],\n      theirCurrent = their.lines[their.index];\n    if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {\n      // Both modified ...\n      mutualChange(hunk, mine, their);\n    } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {\n      var _hunk$lines;\n      // Mine inserted\n      (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine)));\n    } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {\n      var _hunk$lines2;\n      // Theirs inserted\n      (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their)));\n    } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {\n      // Mine removed or edited\n      removal(hunk, mine, their);\n    } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {\n      // Their removed or edited\n      removal(hunk, their, mine, true);\n    } else if (mineCurrent === theirCurrent) {\n      // Context identity\n      hunk.lines.push(mineCurrent);\n      mine.index++;\n      their.index++;\n    } else {\n      // Context mismatch\n      conflict(hunk, collectChange(mine), collectChange(their));\n    }\n  }\n\n  // Now push anything that may be remaining\n  insertTrailing(hunk, mine);\n  insertTrailing(hunk, their);\n  calcLineCount(hunk);\n}\nfunction mutualChange(hunk, mine, their) {\n  var myChanges = collectChange(mine),\n    theirChanges = collectChange(their);\n  if (allRemoves(myChanges) && allRemoves(theirChanges)) {\n    // Special case for remove changes that are supersets of one another\n    if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {\n      var _hunk$lines3;\n      (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges));\n      return;\n    } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {\n      var _hunk$lines4;\n      (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges));\n      return;\n    }\n  } else if (arrayEqual(myChanges, theirChanges)) {\n    var _hunk$lines5;\n    (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges));\n    return;\n  }\n  conflict(hunk, myChanges, theirChanges);\n}\nfunction removal(hunk, mine, their, swap) {\n  var myChanges = collectChange(mine),\n    theirChanges = collectContext(their, myChanges);\n  if (theirChanges.merged) {\n    var _hunk$lines6;\n    (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged));\n  } else {\n    conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);\n  }\n}\nfunction conflict(hunk, mine, their) {\n  hunk.conflict = true;\n  hunk.lines.push({\n    conflict: true,\n    mine: mine,\n    theirs: their\n  });\n}\nfunction insertLeading(hunk, insert, their) {\n  while (insert.offset < their.offset && insert.index < insert.lines.length) {\n    var line = insert.lines[insert.index++];\n    hunk.lines.push(line);\n    insert.offset++;\n  }\n}\nfunction insertTrailing(hunk, insert) {\n  while (insert.index < insert.lines.length) {\n    var line = insert.lines[insert.index++];\n    hunk.lines.push(line);\n  }\n}\nfunction collectChange(state) {\n  var ret = [],\n    operation = state.lines[state.index][0];\n  while (state.index < state.lines.length) {\n    var line = state.lines[state.index];\n\n    // Group additions that are immediately after subtractions and treat them as one \"atomic\" modify change.\n    if (operation === '-' && line[0] === '+') {\n      operation = '+';\n    }\n    if (operation === line[0]) {\n      ret.push(line);\n      state.index++;\n    } else {\n      break;\n    }\n  }\n  return ret;\n}\nfunction collectContext(state, matchChanges) {\n  var changes = [],\n    merged = [],\n    matchIndex = 0,\n    contextChanges = false,\n    conflicted = false;\n  while (matchIndex < matchChanges.length && state.index < state.lines.length) {\n    var change = state.lines[state.index],\n      match = matchChanges[matchIndex];\n\n    // Once we've hit our add, then we are done\n    if (match[0] === '+') {\n      break;\n    }\n    contextChanges = contextChanges || change[0] !== ' ';\n    merged.push(match);\n    matchIndex++;\n\n    // Consume any additions in the other block as a conflict to attempt\n    // to pull in the remaining context after this\n    if (change[0] === '+') {\n      conflicted = true;\n      while (change[0] === '+') {\n        changes.push(change);\n        change = state.lines[++state.index];\n      }\n    }\n    if (match.substr(1) === change.substr(1)) {\n      changes.push(change);\n      state.index++;\n    } else {\n      conflicted = true;\n    }\n  }\n  if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {\n    conflicted = true;\n  }\n  if (conflicted) {\n    return changes;\n  }\n  while (matchIndex < matchChanges.length) {\n    merged.push(matchChanges[matchIndex++]);\n  }\n  return {\n    merged: merged,\n    changes: changes\n  };\n}\nfunction allRemoves(changes) {\n  return changes.reduce(function (prev, change) {\n    return prev && change[0] === '-';\n  }, true);\n}\nfunction skipRemoveSuperset(state, removeChanges, delta) {\n  for (var i = 0; i < delta; i++) {\n    var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);\n    if (state.lines[state.index + i] !== ' ' + changeContent) {\n      return false;\n    }\n  }\n  state.index += delta;\n  return true;\n}\nfunction calcOldNewLineCount(lines) {\n  var oldLines = 0;\n  var newLines = 0;\n  lines.forEach(function (line) {\n    if (typeof line !== 'string') {\n      var myCount = calcOldNewLineCount(line.mine);\n      var theirCount = calcOldNewLineCount(line.theirs);\n      if (oldLines !== undefined) {\n        if (myCount.oldLines === theirCount.oldLines) {\n          oldLines += myCount.oldLines;\n        } else {\n          oldLines = undefined;\n        }\n      }\n      if (newLines !== undefined) {\n        if (myCount.newLines === theirCount.newLines) {\n          newLines += myCount.newLines;\n        } else {\n          newLines = undefined;\n        }\n      }\n    } else {\n      if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {\n        newLines++;\n      }\n      if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {\n        oldLines++;\n      }\n    }\n  });\n  return {\n    oldLines: oldLines,\n    newLines: newLines\n  };\n}\n\nfunction reversePatch(structuredPatch) {\n  if (Array.isArray(structuredPatch)) {\n    return structuredPatch.map(reversePatch).reverse();\n  }\n  return _objectSpread2(_objectSpread2({}, structuredPatch), {}, {\n    oldFileName: structuredPatch.newFileName,\n    oldHeader: structuredPatch.newHeader,\n    newFileName: structuredPatch.oldFileName,\n    newHeader: structuredPatch.oldHeader,\n    hunks: structuredPatch.hunks.map(function (hunk) {\n      return {\n        oldLines: hunk.newLines,\n        oldStart: hunk.newStart,\n        newLines: hunk.oldLines,\n        newStart: hunk.oldStart,\n        lines: hunk.lines.map(function (l) {\n          if (l.startsWith('-')) {\n            return \"+\".concat(l.slice(1));\n          }\n          if (l.startsWith('+')) {\n            return \"-\".concat(l.slice(1));\n          }\n          return l;\n        })\n      };\n    })\n  });\n}\n\n// See: http://code.google.com/p/google-diff-match-patch/wiki/API\nfunction convertChangesToDMP(changes) {\n  var ret = [],\n    change,\n    operation;\n  for (var i = 0; i < changes.length; i++) {\n    change = changes[i];\n    if (change.added) {\n      operation = 1;\n    } else if (change.removed) {\n      operation = -1;\n    } else {\n      operation = 0;\n    }\n    ret.push([operation, change.value]);\n  }\n  return ret;\n}\n\nfunction convertChangesToXML(changes) {\n  var ret = [];\n  for (var i = 0; i < changes.length; i++) {\n    var change = changes[i];\n    if (change.added) {\n      ret.push('<ins>');\n    } else if (change.removed) {\n      ret.push('<del>');\n    }\n    ret.push(escapeHTML(change.value));\n    if (change.added) {\n      ret.push('</ins>');\n    } else if (change.removed) {\n      ret.push('</del>');\n    }\n  }\n  return ret.join('');\n}\nfunction escapeHTML(s) {\n  var n = s;\n  n = n.replace(/&/g, '&amp;');\n  n = n.replace(/</g, '&lt;');\n  n = n.replace(/>/g, '&gt;');\n  n = n.replace(/\"/g, '&quot;');\n  return n;\n}\n\nexport { Diff, applyPatch, applyPatches, canonicalize, convertChangesToDMP, convertChangesToXML, createPatch, createTwoFilesPatch, diffArrays, diffChars, diffCss, diffJson, diffLines, diffSentences, diffTrimmedLines, diffWords, diffWordsWithSpace, formatPatch, merge, parsePatch, reversePatch, structuredPatch };\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n  throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n  module.exports = randomBytes\n} else {\n  module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n  // phantomjs needs to throw\n  if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n  var bytes = Buffer.allocUnsafe(size)\n\n  if (size > 0) {  // getRandomValues fails on IE if size == 0\n    if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n      // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n      for (var generated = 0; generated < size; generated += MAX_BYTES) {\n        // buffer.slice automatically checks if the end is past the end of\n        // the buffer so we don't have to here\n        crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n      }\n    } else {\n      crypto.getRandomValues(bytes)\n    }\n  }\n\n  if (typeof cb === 'function') {\n    return process.nextTick(function () {\n      cb(null, bytes)\n    })\n  }\n\n  return bytes\n}\n","module.exports = require('events').EventEmitter;\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var entry = {\n        data: v,\n        next: this.head\n      };\n      if (this.length === 0) this.tail = entry;\n      this.head = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, i);\n        i += p.data.length;\n        p = p.next;\n      }\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes or characters from the buffered data.\n  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();","'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n      if (state.autoDestroy) {\n        // In case of duplex streams we need a way to detect\n        // if the readable side is ready for autoDestroy as well\n        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\n    stream.removeListener('complete', onfinish);\n    stream.removeListener('abort', onclose);\n    stream.removeListener('request', onrequest);\n    if (stream.req) stream.req.removeListener('finish', onfinish);\n    stream.removeListener('end', onlegacyfinish);\n    stream.removeListener('close', onlegacyfinish);\n    stream.removeListener('finish', onfinish);\n    stream.removeListener('end', onend);\n    stream.removeListener('error', onerror);\n    stream.removeListener('close', onclose);\n  };\n}\nmodule.exports = eos;","'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;","module.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n      } else if (state.destroyed) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    state.awaitDrain = 0;\n    stream.emit('data', chunk);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var decoder = new StringDecoder(enc);\n  this._readableState.decoder = decoder;\n  // If setEncoding(null), decoder.encoding equals utf8\n  this._readableState.encoding = this._readableState.decoder.encoding;\n\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n  if (state.sync) {\n    // if we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call\n    emitReadable(stream);\n  } else {\n    // emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false;\n    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  debug('emitReadable', state.needReadable, state.emittedReadable);\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    process.nextTick(emitReadable_, stream);\n  }\n}\nfunction emitReadable_(stream) {\n  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (state.length || state.ended)) {\n    stream.emit('readable');\n    state.emittedReadable = false;\n  }\n\n  // The stream needs another readable event if\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(maybeReadMore_, stream, state);\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var len = state.length;\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n  var state = this._readableState;\n  if (ev === 'data') {\n    // update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0;\n\n    // Try start flowing on next tick if stream isn't explicitly paused\n    if (state.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.flowing = false;\n      state.emittedReadable = false;\n      debug('on readable', state.length, state.reading);\n      if (state.length) {\n        emitReadable(this);\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this);\n      }\n    }\n  }\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n  var res = Stream.prototype.removeListener.call(this, ev, fn);\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nfunction updateReadableListening(self) {\n  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\n    // flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true;\n\n    // crude way to check if we should resume\n  } else if (self.listenerCount('data') > 0) {\n    self.resume();\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    // we flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume()\n    state.flowing = !state.readableListening;\n    resume(this, state);\n  }\n  state.paused = false;\n  return this;\n};\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(resume_, stream, state);\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading);\n  if (!state.reading) {\n    stream.read(0);\n  }\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (this._readableState.flowing !== false) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  this._readableState.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = state.buffer.consume(n, state.decoder);\n  }\n  return ret;\n}\nfunction endReadable(stream) {\n  var state = stream._readableState;\n  debug('endReadable', state.endEmitted);\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(endReadableNT, state, stream);\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length);\n\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well\n      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n  if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n    throw new TypeError(prefix + ' must be a string or a buffer')\n  }\n}\n\nfunction HashBase (blockSize) {\n  Transform.call(this)\n\n  this._block = Buffer.allocUnsafe(blockSize)\n  this._blockSize = blockSize\n  this._blockOffset = 0\n  this._length = [0, 0, 0, 0]\n\n  this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n  var error = null\n  try {\n    this.update(chunk, encoding)\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n  var error = null\n  try {\n    this.push(this.digest())\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n  throwIfNotStringOrBuffer(data, 'Data')\n  if (this._finalized) throw new Error('Digest already called')\n  if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n  // consume data\n  var block = this._block\n  var offset = 0\n  while (this._blockOffset + data.length - offset >= this._blockSize) {\n    for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n    this._update()\n    this._blockOffset = 0\n  }\n  while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n  // update length\n  for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n    this._length[j] += carry\n    carry = (this._length[j] / 0x0100000000) | 0\n    if (carry > 0) this._length[j] -= 0x0100000000 * carry\n  }\n\n  return this\n}\n\nHashBase.prototype._update = function () {\n  throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n  if (this._finalized) throw new Error('Digest already called')\n  this._finalized = true\n\n  var digest = this._digest()\n  if (encoding !== undefined) digest = digest.toString(encoding)\n\n  // reset state\n  this._block.fill(0)\n  this._blockOffset = 0\n  for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n  return digest\n}\n\nHashBase.prototype._digest = function () {\n  throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n  var M = ARRAY16\n  for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n  var a = this._a\n  var b = this._b\n  var c = this._c\n  var d = this._d\n\n  a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n  d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n  c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n  b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n  a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n  d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n  c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n  b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n  a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n  d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n  c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n  b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n  a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n  d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n  c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n  b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n  a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n  d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n  c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n  b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n  a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n  d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n  c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n  b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n  a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n  d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n  c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n  b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n  a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n  d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n  c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n  b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n  a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n  d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n  c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n  b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n  a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n  d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n  c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n  b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n  a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n  d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n  c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n  b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n  a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n  d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n  c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n  b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n  a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n  d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n  c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n  b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n  a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n  d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n  c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n  b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n  a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n  d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n  c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n  b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n  a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n  d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n  c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n  b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n  this._a = (this._a + a) | 0\n  this._b = (this._b + b) | 0\n  this._c = (this._c + c) | 0\n  this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.allocUnsafe(16)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n  return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n  var words = ARRAY16\n  for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n  var al = this._a | 0\n  var bl = this._b | 0\n  var cl = this._c | 0\n  var dl = this._d | 0\n  var el = this._e | 0\n\n  var ar = this._a | 0\n  var br = this._b | 0\n  var cr = this._c | 0\n  var dr = this._d | 0\n  var er = this._e | 0\n\n  // computation\n  for (var i = 0; i < 80; i += 1) {\n    var tl\n    var tr\n    if (i < 16) {\n      tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n      tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n    } else if (i < 32) {\n      tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n      tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n    } else if (i < 48) {\n      tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n      tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n    } else if (i < 64) {\n      tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n      tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n    } else { // if (i<80) {\n      tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n      tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n    }\n\n    al = el\n    el = dl\n    dl = rotl(cl, 10)\n    cl = bl\n    bl = tl\n\n    ar = er\n    er = dr\n    dr = rotl(cr, 10)\n    cr = br\n    br = tr\n  }\n\n  // update state\n  var t = (this._b + cl + dr) | 0\n  this._b = (this._c + dl + er) | 0\n  this._c = (this._d + el + ar) | 0\n  this._d = (this._e + al + br) | 0\n  this._e = (this._a + bl + cr) | 0\n  this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  buffer.writeInt32LE(this._e, 16)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n  this._block = Buffer.alloc(blockSize)\n  this._finalSize = finalSize\n  this._blockSize = blockSize\n  this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n  if (typeof data === 'string') {\n    enc = enc || 'utf8'\n    data = Buffer.from(data, enc)\n  }\n\n  var block = this._block\n  var blockSize = this._blockSize\n  var length = data.length\n  var accum = this._len\n\n  for (var offset = 0; offset < length;) {\n    var assigned = accum % blockSize\n    var remainder = Math.min(length - offset, blockSize - assigned)\n\n    for (var i = 0; i < remainder; i++) {\n      block[assigned + i] = data[offset + i]\n    }\n\n    accum += remainder\n    offset += remainder\n\n    if ((accum % blockSize) === 0) {\n      this._update(block)\n    }\n  }\n\n  this._len += length\n  return this\n}\n\nHash.prototype.digest = function (enc) {\n  var rem = this._len % this._blockSize\n\n  this._block[rem] = 0x80\n\n  // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n  // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n  this._block.fill(0, rem + 1)\n\n  if (rem >= this._finalSize) {\n    this._update(this._block)\n    this._block.fill(0)\n  }\n\n  var bits = this._len * 8\n\n  // uint32\n  if (bits <= 0xffffffff) {\n    this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n  // uint64\n  } else {\n    var lowBits = (bits & 0xffffffff) >>> 0\n    var highBits = (bits - lowBits) / 0x100000000\n\n    this._block.writeUInt32BE(highBits, this._blockSize - 8)\n    this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n  }\n\n  this._update(this._block)\n  var hash = this._hash()\n\n  return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n  throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl1 (num) {\n  return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n  0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n  0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n  0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n  0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n  0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n  0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n  0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n  0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n  0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n  0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n  0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n  0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n  0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n  0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n  0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n  this._a = 0x6a09e667\n  this._b = 0xbb67ae85\n  this._c = 0x3c6ef372\n  this._d = 0xa54ff53a\n  this._e = 0x510e527f\n  this._f = 0x9b05688c\n  this._g = 0x1f83d9ab\n  this._h = 0x5be0cd19\n\n  return this\n}\n\nfunction ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n  return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n  return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n  return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n  return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n  var f = this._f | 0\n  var g = this._g | 0\n  var h = this._h | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n  for (var j = 0; j < 64; ++j) {\n    var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n    var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n    h = g\n    g = f\n    f = e\n    e = (d + T1) | 0\n    d = c\n    c = b\n    b = a\n    a = (T1 + T2) | 0\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n  this._f = (f + this._f) | 0\n  this._g = (g + this._g) | 0\n  this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(32)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n  H.writeInt32BE(this._h, 28)\n\n  return H\n}\n\nmodule.exports = Sha256\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n  this._a = 0xc1059ed8\n  this._b = 0x367cd507\n  this._c = 0x3070dd17\n  this._d = 0xf70e5939\n  this._e = 0xffc00b31\n  this._f = 0x68581511\n  this._g = 0x64f98fa7\n  this._h = 0xbefa4fa4\n\n  return this\n}\n\nSha224.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(28)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n\n  return H\n}\n\nmodule.exports = Sha224\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n  this._ah = 0x6a09e667\n  this._bh = 0xbb67ae85\n  this._ch = 0x3c6ef372\n  this._dh = 0xa54ff53a\n  this._eh = 0x510e527f\n  this._fh = 0x9b05688c\n  this._gh = 0x1f83d9ab\n  this._hh = 0x5be0cd19\n\n  this._al = 0xf3bcc908\n  this._bl = 0x84caa73b\n  this._cl = 0xfe94f82b\n  this._dl = 0x5f1d36f1\n  this._el = 0xade682d1\n  this._fl = 0x2b3e6c1f\n  this._gl = 0xfb41bd6b\n  this._hl = 0x137e2179\n\n  return this\n}\n\nfunction Ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n  return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n  return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n  return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n  var W = this._w\n\n  var ah = this._ah | 0\n  var bh = this._bh | 0\n  var ch = this._ch | 0\n  var dh = this._dh | 0\n  var eh = this._eh | 0\n  var fh = this._fh | 0\n  var gh = this._gh | 0\n  var hh = this._hh | 0\n\n  var al = this._al | 0\n  var bl = this._bl | 0\n  var cl = this._cl | 0\n  var dl = this._dl | 0\n  var el = this._el | 0\n  var fl = this._fl | 0\n  var gl = this._gl | 0\n  var hl = this._hl | 0\n\n  for (var i = 0; i < 32; i += 2) {\n    W[i] = M.readInt32BE(i * 4)\n    W[i + 1] = M.readInt32BE(i * 4 + 4)\n  }\n  for (; i < 160; i += 2) {\n    var xh = W[i - 15 * 2]\n    var xl = W[i - 15 * 2 + 1]\n    var gamma0 = Gamma0(xh, xl)\n    var gamma0l = Gamma0l(xl, xh)\n\n    xh = W[i - 2 * 2]\n    xl = W[i - 2 * 2 + 1]\n    var gamma1 = Gamma1(xh, xl)\n    var gamma1l = Gamma1l(xl, xh)\n\n    // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n    var Wi7h = W[i - 7 * 2]\n    var Wi7l = W[i - 7 * 2 + 1]\n\n    var Wi16h = W[i - 16 * 2]\n    var Wi16l = W[i - 16 * 2 + 1]\n\n    var Wil = (gamma0l + Wi7l) | 0\n    var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n    Wil = (Wil + gamma1l) | 0\n    Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n    Wil = (Wil + Wi16l) | 0\n    Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n    W[i] = Wih\n    W[i + 1] = Wil\n  }\n\n  for (var j = 0; j < 160; j += 2) {\n    Wih = W[j]\n    Wil = W[j + 1]\n\n    var majh = maj(ah, bh, ch)\n    var majl = maj(al, bl, cl)\n\n    var sigma0h = sigma0(ah, al)\n    var sigma0l = sigma0(al, ah)\n    var sigma1h = sigma1(eh, el)\n    var sigma1l = sigma1(el, eh)\n\n    // t1 = h + sigma1 + ch + K[j] + W[j]\n    var Kih = K[j]\n    var Kil = K[j + 1]\n\n    var chh = Ch(eh, fh, gh)\n    var chl = Ch(el, fl, gl)\n\n    var t1l = (hl + sigma1l) | 0\n    var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n    t1l = (t1l + chl) | 0\n    t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n    t1l = (t1l + Kil) | 0\n    t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n    t1l = (t1l + Wil) | 0\n    t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n    // t2 = sigma0 + maj\n    var t2l = (sigma0l + majl) | 0\n    var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n    hh = gh\n    hl = gl\n    gh = fh\n    gl = fl\n    fh = eh\n    fl = el\n    el = (dl + t1l) | 0\n    eh = (dh + t1h + getCarry(el, dl)) | 0\n    dh = ch\n    dl = cl\n    ch = bh\n    cl = bl\n    bh = ah\n    bl = al\n    al = (t1l + t2l) | 0\n    ah = (t1h + t2h + getCarry(al, t1l)) | 0\n  }\n\n  this._al = (this._al + al) | 0\n  this._bl = (this._bl + bl) | 0\n  this._cl = (this._cl + cl) | 0\n  this._dl = (this._dl + dl) | 0\n  this._el = (this._el + el) | 0\n  this._fl = (this._fl + fl) | 0\n  this._gl = (this._gl + gl) | 0\n  this._hl = (this._hl + hl) | 0\n\n  this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n  this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n  this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n  this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n  this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n  this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n  this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n  this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(64)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n  writeInt64BE(this._gh, this._gl, 48)\n  writeInt64BE(this._hh, this._hl, 56)\n\n  return H\n}\n\nmodule.exports = Sha512\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n  this._ah = 0xcbbb9d5d\n  this._bh = 0x629a292a\n  this._ch = 0x9159015a\n  this._dh = 0x152fecd8\n  this._eh = 0x67332667\n  this._fh = 0x8eb44a87\n  this._gh = 0xdb0c2e0d\n  this._hh = 0x47b5481d\n\n  this._al = 0xc1059ed8\n  this._bl = 0x367cd507\n  this._cl = 0x3070dd17\n  this._dl = 0xf70e5939\n  this._el = 0xffc00b31\n  this._fl = 0x68581511\n  this._gl = 0x64f98fa7\n  this._hl = 0xbefa4fa4\n\n  return this\n}\n\nSha384.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(48)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n\n  return H\n}\n\nmodule.exports = Sha384\n","var exports = module.exports = function SHA (algorithm) {\n  algorithm = algorithm.toLowerCase()\n\n  var Algorithm = exports[algorithm]\n  if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n  return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n  Transform.call(this)\n  this.hashMode = typeof hashMode === 'string'\n  if (this.hashMode) {\n    this[hashMode] = this._finalOrDigest\n  } else {\n    this.final = this._finalOrDigest\n  }\n  if (this._final) {\n    this.__final = this._final\n    this._final = null\n  }\n  this._decoder = null\n  this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n  if (typeof data === 'string') {\n    data = Buffer.from(data, inputEnc)\n  }\n\n  var outData = this._update(data)\n  if (this.hashMode) return this\n\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc)\n  }\n\n  return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n  throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n  throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n  throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n  var err\n  try {\n    if (this.hashMode) {\n      this._update(data)\n    } else {\n      this.push(this._update(data))\n    }\n  } catch (e) {\n    err = e\n  } finally {\n    next(err)\n  }\n}\nCipherBase.prototype._flush = function (done) {\n  var err\n  try {\n    this.push(this.__final())\n  } catch (e) {\n    err = e\n  }\n\n  done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n  var outData = this.__final() || Buffer.alloc(0)\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc, true)\n  }\n  return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n  if (!this._decoder) {\n    this._decoder = new StringDecoder(enc)\n    this._encoding = enc\n  }\n\n  if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n  var out = this._decoder.write(value)\n  if (fin) {\n    out += this._decoder.end()\n  }\n\n  return out\n}\n\nmodule.exports = CipherBase\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n  Base.call(this, 'digest')\n\n  this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n  return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n  alg = alg.toLowerCase()\n  if (alg === 'md5') return new MD5()\n  if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n  return new Hash(sha(alg))\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  this._alg = alg\n  this._key = key\n\n  if (key.length > blocksize) {\n    key = alg(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._alg(Buffer.concat(this._hash))\n  return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n  return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  this._alg = alg\n  this._key = key\n  if (key.length > blocksize) {\n    var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n    key = hash.update(key).digest()\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n  this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n  this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._hash.digest()\n  var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n  return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n  alg = alg.toLowerCase()\n  if (alg === 'rmd160' || alg === 'ripemd160') {\n    return new Hmac('rmd160', key)\n  }\n  if (alg === 'md5') {\n    return new Legacy(md5, key)\n  }\n  return new Hmac(alg, key)\n}\n","module.exports = require('./browser/algorithms.json')\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n  if (typeof iterations !== 'number') {\n    throw new TypeError('Iterations not a number')\n  }\n\n  if (iterations < 0) {\n    throw new TypeError('Bad iterations')\n  }\n\n  if (typeof keylen !== 'number') {\n    throw new TypeError('Key length not a number')\n  }\n\n  if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n    throw new TypeError('Bad key length')\n  }\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n  defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n  var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n  defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n  defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n  if (Buffer.isBuffer(thing)) {\n    return thing\n  } else if (typeof thing === 'string') {\n    return Buffer.from(thing, encoding)\n  } else if (ArrayBuffer.isView(thing)) {\n    return Buffer.from(thing.buffer)\n  } else {\n    throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n  }\n}\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n  md5: 16,\n  sha1: 20,\n  sha224: 28,\n  sha256: 32,\n  sha384: 48,\n  sha512: 64,\n  rmd160: 20,\n  ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n  var hash = getDigest(alg)\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  if (key.length > blocksize) {\n    key = hash(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n  ipad.copy(ipad1, 0, 0, blocksize)\n  this.ipad1 = ipad1\n  this.ipad2 = ipad\n  this.opad = opad\n  this.alg = alg\n  this.blocksize = blocksize\n  this.hash = hash\n  this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n  data.copy(ipad, this.blocksize)\n  var h = this.hash(ipad)\n  h.copy(this.opad, this.blocksize)\n  return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n  function shaFunc (data) {\n    return sha(alg).update(data).digest()\n  }\n  function rmd160Func (data) {\n    return new RIPEMD160().update(data).digest()\n  }\n\n  if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n  if (alg === 'md5') return md5\n  return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n  checkParameters(iterations, keylen)\n  password = toBuffer(password, defaultEncoding, 'Password')\n  salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n  digest = digest || 'sha1'\n\n  var hmac = new Hmac(digest, password, salt.length)\n\n  var DK = Buffer.allocUnsafe(keylen)\n  var block1 = Buffer.allocUnsafe(salt.length + 4)\n  salt.copy(block1, 0, 0, salt.length)\n\n  var destPos = 0\n  var hLen = sizes[digest]\n  var l = Math.ceil(keylen / hLen)\n\n  for (var i = 1; i <= l; i++) {\n    block1.writeUInt32BE(i, salt.length)\n\n    var T = hmac.run(block1, hmac.ipad1)\n    var U = T\n\n    for (var j = 1; j < iterations; j++) {\n      U = hmac.run(U, hmac.ipad2)\n      for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n    }\n\n    T.copy(DK, destPos)\n    destPos += hLen\n  }\n\n  return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n  sha: 'SHA-1',\n  'sha-1': 'SHA-1',\n  sha1: 'SHA-1',\n  sha256: 'SHA-256',\n  'sha-256': 'SHA-256',\n  sha384: 'SHA-384',\n  'sha-384': 'SHA-384',\n  'sha-512': 'SHA-512',\n  sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n  if (global.process && !global.process.browser) {\n    return Promise.resolve(false)\n  }\n  if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n    return Promise.resolve(false)\n  }\n  if (checks[algo] !== undefined) {\n    return checks[algo]\n  }\n  ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n  var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n    .then(function () {\n      return true\n    }).catch(function () {\n      return false\n    })\n  checks[algo] = prom\n  return prom\n}\nvar nextTick\nfunction getNextTick () {\n  if (nextTick) {\n    return nextTick\n  }\n  if (global.process && global.process.nextTick) {\n    nextTick = global.process.nextTick\n  } else if (global.queueMicrotask) {\n    nextTick = global.queueMicrotask\n  } else if (global.setImmediate) {\n    nextTick = global.setImmediate\n  } else {\n    nextTick = global.setTimeout\n  }\n  return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n  return subtle.importKey(\n    'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n  ).then(function (key) {\n    return subtle.deriveBits({\n      name: 'PBKDF2',\n      salt: salt,\n      iterations: iterations,\n      hash: {\n        name: algo\n      }\n    }, key, length << 3)\n  }).then(function (res) {\n    return Buffer.from(res)\n  })\n}\n\nfunction resolvePromise (promise, callback) {\n  promise.then(function (out) {\n    getNextTick()(function () {\n      callback(null, out)\n    })\n  }, function (e) {\n    getNextTick()(function () {\n      callback(e)\n    })\n  })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n  if (typeof digest === 'function') {\n    callback = digest\n    digest = undefined\n  }\n\n  digest = digest || 'sha1'\n  var algo = toBrowser[digest.toLowerCase()]\n\n  if (!algo || typeof global.Promise !== 'function') {\n    getNextTick()(function () {\n      var out\n      try {\n        out = sync(password, salt, iterations, keylen, digest)\n      } catch (e) {\n        return callback(e)\n      }\n      callback(null, out)\n    })\n    return\n  }\n\n  checkParameters(iterations, keylen)\n  password = toBuffer(password, defaultEncoding, 'Password')\n  salt = toBuffer(salt, defaultEncoding, 'Salt')\n  if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n  resolvePromise(checkNative(algo).then(function (resp) {\n    if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n    return sync(password, salt, iterations, keylen, digest)\n  }), callback)\n}\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n  var res =  (bytes[0 + off] << 24) |\n             (bytes[1 + off] << 16) |\n             (bytes[2 + off] << 8) |\n             bytes[3 + off];\n  return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n  bytes[0 + off] = value >>> 24;\n  bytes[1 + off] = (value >>> 16) & 0xff;\n  bytes[2 + off] = (value >>> 8) & 0xff;\n  bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 0; i < 4; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n  for (var i = 4; i < 8; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  // 7, 15, 23, 31, 39, 47, 55, 63\n  // 6, 14, 22, 30, 39, 47, 55, 63\n  // 5, 13, 21, 29, 39, 47, 55, 63\n  // 4, 12, 20, 28\n  for (var i = 7; i >= 5; i--) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outL <<= 1;\n    outL |= (inR >> (j + i)) & 1;\n  }\n\n  // 1, 9, 17, 25, 33, 41, 49, 57\n  // 2, 10, 18, 26, 34, 42, 50, 58\n  // 3, 11, 19, 27, 35, 43, 51, 59\n  // 36, 44, 52, 60\n  for (var i = 1; i <= 3; i++) {\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outR <<= 1;\n    outR |= (inL >> (j + i)) & 1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n  return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n  // inL => outL\n  14, 11, 17, 4, 27, 23, 25, 0,\n  13, 22, 7, 18, 5, 9, 16, 24,\n  2, 20, 12, 21, 1, 8, 15, 26,\n\n  // inR => outR\n  15, 4, 25, 19, 9, 1, 26, 16,\n  5, 11, 23, 8, 12, 7, 17, 0,\n  22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  var len = pc2table.length >>> 1;\n  for (var i = 0; i < len; i++) {\n    outL <<= 1;\n    outL |= (inL >>> pc2table[i]) & 0x1;\n  }\n  for (var i = len; i < pc2table.length; i++) {\n    outR <<= 1;\n    outR |= (inR >>> pc2table[i]) & 0x1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  outL = ((r & 1) << 5) | (r >>> 27);\n  for (var i = 23; i >= 15; i -= 4) {\n    outL <<= 6;\n    outL |= (r >>> i) & 0x3f;\n  }\n  for (var i = 11; i >= 3; i -= 4) {\n    outR |= (r >>> i) & 0x3f;\n    outR <<= 6;\n  }\n  outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n  14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n  3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n  4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n  15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n  15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n  9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n  0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n  5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n  10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n  1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n  13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n  11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n  7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n  1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n  10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n  15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n  2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n  8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n  4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n  15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n  12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n  0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n  9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n  7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n  4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n  3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n  1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n  10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n  13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n  10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n  7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n  0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n  var out = 0;\n  for (var i = 0; i < 4; i++) {\n    var b = (inL >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  for (var i = 0; i < 4; i++) {\n    var b = (inR >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  return out >>> 0;\n};\n\nvar permuteTable = [\n  16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n  30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n  var out = 0;\n  for (var i = 0; i < permuteTable.length; i++) {\n    out <<= 1;\n    out |= (num >>> permuteTable[i]) & 0x1;\n  }\n  return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n  var str = num.toString(2);\n  while (str.length < size)\n    str = '0' + str;\n\n  var out = [];\n  for (var i = 0; i < size; i += group)\n    out.push(str.slice(i, i + group));\n  return out.join(' ');\n};\n","module.exports = assert;\n\nfunction assert(val, msg) {\n  if (!val)\n    throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n  if (l != r)\n    throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n  this.options = options;\n\n  this.type = this.options.type;\n  this.blockSize = 8;\n  this._init();\n\n  this.buffer = new Array(this.blockSize);\n  this.bufferOff = 0;\n  this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n  // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n  if (data.length === 0)\n    return [];\n\n  if (this.type === 'decrypt')\n    return this._updateDecrypt(data);\n  else\n    return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n  // Append data to buffer\n  var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n  for (var i = 0; i < min; i++)\n    this.buffer[this.bufferOff + i] = data[off + i];\n  this.bufferOff += min;\n\n  // Shift next\n  return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n  this._update(this.buffer, 0, out, off);\n  this.bufferOff = 0;\n  return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n  var out = new Array(count * this.blockSize);\n\n  if (this.bufferOff !== 0) {\n    inputOff += this._buffer(data, inputOff);\n\n    if (this.bufferOff === this.buffer.length)\n      outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Write blocks\n  var max = data.length - ((data.length - inputOff) % this.blockSize);\n  for (; inputOff < max; inputOff += this.blockSize) {\n    this._update(data, inputOff, out, outputOff);\n    outputOff += this.blockSize;\n  }\n\n  // Queue rest\n  for (; inputOff < data.length; inputOff++, this.bufferOff++)\n    this.buffer[this.bufferOff] = data[inputOff];\n\n  return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n  var out = new Array(count * this.blockSize);\n\n  // TODO(indutny): optimize it, this is far from optimal\n  for (; count > 0; count--) {\n    inputOff += this._buffer(data, inputOff);\n    outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Buffer rest of the input\n  inputOff += this._buffer(data, inputOff);\n\n  return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n  var first;\n  if (buffer)\n    first = this.update(buffer);\n\n  var last;\n  if (this.type === 'encrypt')\n    last = this._finalEncrypt();\n  else\n    last = this._finalDecrypt();\n\n  if (first)\n    return first.concat(last);\n  else\n    return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n  if (off === 0)\n    return false;\n\n  while (off < buffer.length)\n    buffer[off++] = 0;\n\n  return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n  if (!this._pad(this.buffer, this.bufferOff))\n    return [];\n\n  var out = new Array(this.blockSize);\n  this._update(this.buffer, 0, out, 0);\n  return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n  return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n  assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n  var out = new Array(this.blockSize);\n  this._flushBuffer(out, 0);\n\n  return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n  this.tmp = new Array(2);\n  this.keys = null;\n}\n\nfunction DES(options) {\n  Cipher.call(this, options);\n\n  var state = new DESState();\n  this._desState = state;\n\n  this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n  return new DES(options);\n};\n\nvar shiftTable = [\n  1, 1, 2, 2, 2, 2, 2, 2,\n  1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n  state.keys = new Array(16 * 2);\n\n  assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n  var kL = utils.readUInt32BE(key, 0);\n  var kR = utils.readUInt32BE(key, 4);\n\n  utils.pc1(kL, kR, state.tmp, 0);\n  kL = state.tmp[0];\n  kR = state.tmp[1];\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var shift = shiftTable[i >>> 1];\n    kL = utils.r28shl(kL, shift);\n    kR = utils.r28shl(kR, shift);\n    utils.pc2(kL, kR, state.keys, i);\n  }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._desState;\n\n  var l = utils.readUInt32BE(inp, inOff);\n  var r = utils.readUInt32BE(inp, inOff + 4);\n\n  // Initial Permutation\n  utils.ip(l, r, state.tmp, 0);\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  if (this.type === 'encrypt')\n    this._encrypt(state, l, r, state.tmp, 0);\n  else\n    this._decrypt(state, l, r, state.tmp, 0);\n\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  utils.writeUInt32BE(out, l, outOff);\n  utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n  if (this.padding === false) {\n    return false;\n  }\n\n  var value = buffer.length - off;\n  for (var i = off; i < buffer.length; i++)\n    buffer[i] = value;\n\n  return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n  if (this.padding === false) {\n    return buffer;\n  }\n\n  var pad = buffer[buffer.length - 1];\n  for (var i = buffer.length - pad; i < buffer.length; i++)\n    assert.equal(buffer[i], pad);\n\n  return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n  var l = lStart;\n  var r = rStart;\n\n  // Apply f() x16 times\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(r, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = r;\n    r = (l ^ f) >>> 0;\n    l = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n  var l = rStart;\n  var r = lStart;\n\n  // Apply f() x16 times\n  for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(l, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = l;\n    l = (r ^ f) >>> 0;\n    r = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n  assert.equal(iv.length, 8, 'Invalid IV length');\n\n  this.iv = new Array(8);\n  for (var i = 0; i < this.iv.length; i++)\n    this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n  function CBC(options) {\n    Base.call(this, options);\n    this._cbcInit();\n  }\n  inherits(CBC, Base);\n\n  var keys = Object.keys(proto);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    CBC.prototype[key] = proto[key];\n  }\n\n  CBC.create = function create(options) {\n    return new CBC(options);\n  };\n\n  return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n  var state = new CBCState(this.options.iv);\n  this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n  var state = this._cbcState;\n  var superProto = this.constructor.super_.prototype;\n\n  var iv = state.iv;\n  if (this.type === 'encrypt') {\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] ^= inp[inOff + i];\n\n    superProto._update.call(this, iv, 0, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = out[outOff + i];\n  } else {\n    superProto._update.call(this, inp, inOff, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      out[outOff + i] ^= iv[i];\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = inp[inOff + i];\n  }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n  assert.equal(key.length, 24, 'Invalid key length');\n\n  var k1 = key.slice(0, 8);\n  var k2 = key.slice(8, 16);\n  var k3 = key.slice(16, 24);\n\n  if (type === 'encrypt') {\n    this.ciphers = [\n      DES.create({ type: 'encrypt', key: k1 }),\n      DES.create({ type: 'decrypt', key: k2 }),\n      DES.create({ type: 'encrypt', key: k3 })\n    ];\n  } else {\n    this.ciphers = [\n      DES.create({ type: 'decrypt', key: k3 }),\n      DES.create({ type: 'encrypt', key: k2 }),\n      DES.create({ type: 'decrypt', key: k1 })\n    ];\n  }\n}\n\nfunction EDE(options) {\n  Cipher.call(this, options);\n\n  var state = new EDEState(this.type, this.options.key);\n  this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n  return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._edeState;\n\n  state.ciphers[0]._update(inp, inOff, out, outOff);\n  state.ciphers[1]._update(out, outOff, out, outOff);\n  state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n  'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede3': des.EDE,\n  'des-ede-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede': des.EDE,\n  'des-cbc': des.CBC.instantiate(des.DES),\n  'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n  CipherBase.call(this)\n  var modeName = opts.mode.toLowerCase()\n  var mode = modes[modeName]\n  var type\n  if (opts.decrypt) {\n    type = 'decrypt'\n  } else {\n    type = 'encrypt'\n  }\n  var key = opts.key\n  if (!Buffer.isBuffer(key)) {\n    key = Buffer.from(key)\n  }\n  if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n    key = Buffer.concat([key, key.slice(0, 8)])\n  }\n  var iv = opts.iv\n  if (!Buffer.isBuffer(iv)) {\n    iv = Buffer.from(iv)\n  }\n  this._des = mode.create({\n    key: key,\n    iv: iv,\n    type: type\n  })\n}\nDES.prototype._update = function (data) {\n  return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n  return Buffer.from(this._des.final())\n}\n","exports.encrypt = function (self, block) {\n  return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n  return self._cipher.decryptBlock(block)\n}\n","module.exports = function xor (a, b) {\n  var length = Math.min(a.length, b.length)\n  var buffer = new Buffer(length)\n\n  for (var i = 0; i < length; ++i) {\n    buffer[i] = a[i] ^ b[i]\n  }\n\n  return buffer\n}\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n  var data = xor(block, self._prev)\n\n  self._prev = self._cipher.encryptBlock(data)\n  return self._prev\n}\n\nexports.decrypt = function (self, block) {\n  var pad = self._prev\n\n  self._prev = block\n  var out = self._cipher.decryptBlock(block)\n\n  return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n  var len = data.length\n  var out = xor(data, self._cache)\n  self._cache = self._cache.slice(len)\n  self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n  return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n  var out = Buffer.allocUnsafe(0)\n  var len\n\n  while (data.length) {\n    if (self._cache.length === 0) {\n      self._cache = self._cipher.encryptBlock(self._prev)\n      self._prev = Buffer.allocUnsafe(0)\n    }\n\n    if (self._cache.length <= data.length) {\n      len = self._cache.length\n      out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n      data = data.slice(len)\n    } else {\n      out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n      break\n    }\n  }\n\n  return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad = self._cipher.encryptBlock(self._prev)\n  var out = pad[0] ^ byteParam\n\n  self._prev = Buffer.concat([\n    self._prev.slice(1),\n    Buffer.from([decrypt ? byteParam : out])\n  ])\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad\n  var i = -1\n  var len = 8\n  var out = 0\n  var bit, value\n  while (++i < len) {\n    pad = self._cipher.encryptBlock(self._prev)\n    bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n    value = pad[0] ^ bit\n    out += ((value & 0x80) >> (i % 8))\n    self._prev = shiftIn(self._prev, decrypt ? bit : value)\n  }\n  return out\n}\n\nfunction shiftIn (buffer, value) {\n  var len = buffer.length\n  var i = -1\n  var out = Buffer.allocUnsafe(buffer.length)\n  buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n  while (++i < len) {\n    out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n  }\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n  self._prev = self._cipher.encryptBlock(self._prev)\n  return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n  while (self._cache.length < chunk.length) {\n    self._cache = Buffer.concat([self._cache, getBlock(self)])\n  }\n\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n","function incr32 (iv) {\n  var len = iv.length\n  var item\n  while (len--) {\n    item = iv.readUInt8(len)\n    if (item === 255) {\n      iv.writeUInt8(0, len)\n    } else {\n      item++\n      iv.writeUInt8(item, len)\n      break\n    }\n  }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n  var out = self._cipher.encryptBlockRaw(self._prev)\n  incr32(self._prev)\n  return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n  var chunkNum = Math.ceil(chunk.length / blockSize)\n  var start = self._cache.length\n  self._cache = Buffer.concat([\n    self._cache,\n    Buffer.allocUnsafe(chunkNum * blockSize)\n  ])\n  for (var i = 0; i < chunkNum; i++) {\n    var out = getBlock(self)\n    var offset = start + i * blockSize\n    self._cache.writeUInt32BE(out[0], offset + 0)\n    self._cache.writeUInt32BE(out[1], offset + 4)\n    self._cache.writeUInt32BE(out[2], offset + 8)\n    self._cache.writeUInt32BE(out[3], offset + 12)\n  }\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n","var modeModules = {\n  ECB: require('./ecb'),\n  CBC: require('./cbc'),\n  CFB: require('./cfb'),\n  CFB8: require('./cfb8'),\n  CFB1: require('./cfb1'),\n  OFB: require('./ofb'),\n  CTR: require('./ctr'),\n  GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n  modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n  if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n  var len = (buf.length / 4) | 0\n  var out = new Array(len)\n\n  for (var i = 0; i < len; i++) {\n    out[i] = buf.readUInt32BE(i * 4)\n  }\n\n  return out\n}\n\nfunction scrubVec (v) {\n  for (var i = 0; i < v.length; v++) {\n    v[i] = 0\n  }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n  var SUB_MIX0 = SUB_MIX[0]\n  var SUB_MIX1 = SUB_MIX[1]\n  var SUB_MIX2 = SUB_MIX[2]\n  var SUB_MIX3 = SUB_MIX[3]\n\n  var s0 = M[0] ^ keySchedule[0]\n  var s1 = M[1] ^ keySchedule[1]\n  var s2 = M[2] ^ keySchedule[2]\n  var s3 = M[3] ^ keySchedule[3]\n  var t0, t1, t2, t3\n  var ksRow = 4\n\n  for (var round = 1; round < nRounds; round++) {\n    t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n    t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n    t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n    t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n    s0 = t0\n    s1 = t1\n    s2 = t2\n    s3 = t3\n  }\n\n  t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n  t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n  t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n  t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n  t0 = t0 >>> 0\n  t1 = t1 >>> 0\n  t2 = t2 >>> 0\n  t3 = t3 >>> 0\n\n  return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n  // Compute double table\n  var d = new Array(256)\n  for (var j = 0; j < 256; j++) {\n    if (j < 128) {\n      d[j] = j << 1\n    } else {\n      d[j] = (j << 1) ^ 0x11b\n    }\n  }\n\n  var SBOX = []\n  var INV_SBOX = []\n  var SUB_MIX = [[], [], [], []]\n  var INV_SUB_MIX = [[], [], [], []]\n\n  // Walk GF(2^8)\n  var x = 0\n  var xi = 0\n  for (var i = 0; i < 256; ++i) {\n    // Compute sbox\n    var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n    sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n    SBOX[x] = sx\n    INV_SBOX[sx] = x\n\n    // Compute multiplication\n    var x2 = d[x]\n    var x4 = d[x2]\n    var x8 = d[x4]\n\n    // Compute sub bytes, mix columns tables\n    var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n    SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n    SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n    SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n    SUB_MIX[3][x] = t\n\n    // Compute inv sub bytes, inv mix columns tables\n    t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n    INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n    INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n    INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n    INV_SUB_MIX[3][sx] = t\n\n    if (x === 0) {\n      x = xi = 1\n    } else {\n      x = x2 ^ d[d[d[x8 ^ x2]]]\n      xi ^= d[d[xi]]\n    }\n  }\n\n  return {\n    SBOX: SBOX,\n    INV_SBOX: INV_SBOX,\n    SUB_MIX: SUB_MIX,\n    INV_SUB_MIX: INV_SUB_MIX\n  }\n})()\n\nfunction AES (key) {\n  this._key = asUInt32Array(key)\n  this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n  var keyWords = this._key\n  var keySize = keyWords.length\n  var nRounds = keySize + 6\n  var ksRows = (nRounds + 1) * 4\n\n  var keySchedule = []\n  for (var k = 0; k < keySize; k++) {\n    keySchedule[k] = keyWords[k]\n  }\n\n  for (k = keySize; k < ksRows; k++) {\n    var t = keySchedule[k - 1]\n\n    if (k % keySize === 0) {\n      t = (t << 8) | (t >>> 24)\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n\n      t ^= RCON[(k / keySize) | 0] << 24\n    } else if (keySize > 6 && k % keySize === 4) {\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n    }\n\n    keySchedule[k] = keySchedule[k - keySize] ^ t\n  }\n\n  var invKeySchedule = []\n  for (var ik = 0; ik < ksRows; ik++) {\n    var ksR = ksRows - ik\n    var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n    if (ik < 4 || ksR <= 4) {\n      invKeySchedule[ik] = tt\n    } else {\n      invKeySchedule[ik] =\n        G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n        G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n        G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n        G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n    }\n  }\n\n  this._nRounds = nRounds\n  this._keySchedule = keySchedule\n  this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n  M = asUInt32Array(M)\n  return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n  var out = this.encryptBlockRaw(M)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[1], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[3], 12)\n  return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n  M = asUInt32Array(M)\n\n  // swap\n  var m1 = M[1]\n  M[1] = M[3]\n  M[3] = m1\n\n  var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[3], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[1], 12)\n  return buf\n}\n\nAES.prototype.scrub = function () {\n  scrubVec(this._keySchedule)\n  scrubVec(this._invKeySchedule)\n  scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n  return [\n    buf.readUInt32BE(0),\n    buf.readUInt32BE(4),\n    buf.readUInt32BE(8),\n    buf.readUInt32BE(12)\n  ]\n}\n\nfunction fromArray (out) {\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0] >>> 0, 0)\n  buf.writeUInt32BE(out[1] >>> 0, 4)\n  buf.writeUInt32BE(out[2] >>> 0, 8)\n  buf.writeUInt32BE(out[3] >>> 0, 12)\n  return buf\n}\n\nfunction GHASH (key) {\n  this.h = key\n  this.state = Buffer.alloc(16, 0)\n  this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n  var i = -1\n  while (++i < block.length) {\n    this.state[i] ^= block[i]\n  }\n  this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n  var Vi = toArray(this.h)\n  var Zi = [0, 0, 0, 0]\n  var j, xi, lsbVi\n  var i = -1\n  while (++i < 128) {\n    xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n    if (xi) {\n      // Z_i+1 = Z_i ^ V_i\n      Zi[0] ^= Vi[0]\n      Zi[1] ^= Vi[1]\n      Zi[2] ^= Vi[2]\n      Zi[3] ^= Vi[3]\n    }\n\n    // Store the value of LSB(V_i)\n    lsbVi = (Vi[3] & 1) !== 0\n\n    // V_i+1 = V_i >> 1\n    for (j = 3; j > 0; j--) {\n      Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n    }\n    Vi[0] = Vi[0] >>> 1\n\n    // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n    if (lsbVi) {\n      Vi[0] = Vi[0] ^ (0xe1 << 24)\n    }\n  }\n  this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n  this.cache = Buffer.concat([this.cache, buf])\n  var chunk\n  while (this.cache.length >= 16) {\n    chunk = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    this.ghash(chunk)\n  }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n  if (this.cache.length) {\n    this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n  }\n\n  this.ghash(fromArray([0, abl, 0, bl]))\n  return this.state\n}\n\nmodule.exports = GHASH\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n  var out = 0\n  if (a.length !== b.length) out++\n\n  var len = Math.min(a.length, b.length)\n  for (var i = 0; i < len; ++i) {\n    out += (a[i] ^ b[i])\n  }\n\n  return out\n}\n\nfunction calcIv (self, iv, ck) {\n  if (iv.length === 12) {\n    self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n    return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n  }\n  var ghash = new GHASH(ck)\n  var len = iv.length\n  var toPad = len % 16\n  ghash.update(iv)\n  if (toPad) {\n    toPad = 16 - toPad\n    ghash.update(Buffer.alloc(toPad, 0))\n  }\n  ghash.update(Buffer.alloc(8, 0))\n  var ivBits = len * 8\n  var tail = Buffer.alloc(8)\n  tail.writeUIntBE(ivBits, 0, 8)\n  ghash.update(tail)\n  self._finID = ghash.state\n  var out = Buffer.from(self._finID)\n  incr32(out)\n  return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  var h = Buffer.alloc(4, 0)\n\n  this._cipher = new aes.AES(key)\n  var ck = this._cipher.encryptBlock(h)\n  this._ghash = new GHASH(ck)\n  iv = calcIv(this, iv, ck)\n\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._alen = 0\n  this._len = 0\n  this._mode = mode\n\n  this._authTag = null\n  this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  if (!this._called && this._alen) {\n    var rump = 16 - (this._alen % 16)\n    if (rump < 16) {\n      rump = Buffer.alloc(rump, 0)\n      this._ghash.update(rump)\n    }\n  }\n\n  this._called = true\n  var out = this._mode.encrypt(this, chunk)\n  if (this._decrypt) {\n    this._ghash.update(chunk)\n  } else {\n    this._ghash.update(out)\n  }\n  this._len += chunk.length\n  return out\n}\n\nStreamCipher.prototype._final = function () {\n  if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n  var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n  if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n  this._authTag = tag\n  this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n  if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n  return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n  if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n  this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n  if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n  this._ghash.update(buf)\n  this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n  this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n  if (salt) {\n    if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n    if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n  }\n\n  var keyLen = keyBits / 8\n  var key = Buffer.alloc(keyLen)\n  var iv = Buffer.alloc(ivLen || 0)\n  var tmp = Buffer.alloc(0)\n\n  while (keyLen > 0 || ivLen > 0) {\n    var hash = new MD5()\n    hash.update(tmp)\n    hash.update(password)\n    if (salt) hash.update(salt)\n    tmp = hash.digest()\n\n    var used = 0\n\n    if (keyLen > 0) {\n      var keyStart = key.length - keyLen\n      used = Math.min(keyLen, tmp.length)\n      tmp.copy(key, keyStart, 0, used)\n      keyLen -= used\n    }\n\n    if (used < tmp.length && ivLen > 0) {\n      var ivStart = iv.length - ivLen\n      var length = Math.min(ivLen, tmp.length - used)\n      tmp.copy(iv, ivStart, used, used + length)\n      ivLen -= length\n    }\n  }\n\n  tmp.fill(0)\n  return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n\n  while ((chunk = this._cache.get())) {\n    thing = this._mode.encrypt(this, chunk)\n    out.push(thing)\n  }\n\n  return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    chunk = this._mode.encrypt(this, chunk)\n    this._cipher.scrub()\n    return chunk\n  }\n\n  if (!chunk.equals(PADDING)) {\n    this._cipher.scrub()\n    throw new Error('data not multiple of block length')\n  }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n  if (this.cache.length > 15) {\n    var out = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    return out\n  }\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  var len = 16 - this.cache.length\n  var padBuff = Buffer.allocUnsafe(len)\n\n  var i = -1\n  while (++i < len) {\n    padBuff.writeUInt8(len, i)\n  }\n\n  return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv)\n  }\n\n  return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._last = void 0\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n  while ((chunk = this._cache.get(this._autopadding))) {\n    thing = this._mode.decrypt(this, chunk)\n    out.push(thing)\n  }\n  return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    return unpad(this._mode.decrypt(this, chunk))\n  } else if (chunk) {\n    throw new Error('data not multiple of block length')\n  }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n  var out\n  if (autoPadding) {\n    if (this.cache.length > 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  } else {\n    if (this.cache.length >= 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  }\n\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n  var padded = last[15]\n  if (padded < 1 || padded > 16) {\n    throw new Error('unable to decrypt data')\n  }\n  var i = -1\n  while (++i < padded) {\n    if (last[(i + (16 - padded))] !== padded) {\n      throw new Error('unable to decrypt data')\n    }\n  }\n  if (padded === 16) return\n\n  return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv, true)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv, true)\n  }\n\n  return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n  return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","exports['des-ecb'] = {\n  key: 8,\n  iv: 0\n}\nexports['des-cbc'] = exports.des = {\n  key: 8,\n  iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n  key: 24,\n  iv: 8\n}\nexports['des-ede3'] = {\n  key: 24,\n  iv: 0\n}\nexports['des-ede-cbc'] = {\n  key: 16,\n  iv: 8\n}\nexports['des-ede'] = {\n  key: 16,\n  iv: 0\n}\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n  return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","var r;\n\nmodule.exports = function rand(len) {\n  if (!r)\n    r = new Rand(null);\n\n  return r.generate(len);\n};\n\nfunction Rand(rand) {\n  this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n  return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n  if (this.rand.getBytes)\n    return this.rand.getBytes(n);\n\n  var res = new Uint8Array(n);\n  for (var i = 0; i < res.length; i++)\n    res[i] = this.rand.getByte();\n  return res;\n};\n\nif (typeof self === 'object') {\n  if (self.crypto && self.crypto.getRandomValues) {\n    // Modern browsers\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.crypto.getRandomValues(arr);\n      return arr;\n    };\n  } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n    // IE\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.msCrypto.getRandomValues(arr);\n      return arr;\n    };\n\n  // Safari's WebWorkers do not have `crypto`\n  } else if (typeof window === 'object') {\n    // Old junk\n    Rand.prototype._rand = function() {\n      throw new Error('Not implemented yet');\n    };\n  }\n} else {\n  // Node.js or Web worker with no crypto support\n  try {\n    var crypto = require('crypto');\n    if (typeof crypto.randomBytes !== 'function')\n      throw new Error('Not supported');\n\n    Rand.prototype._rand = function _rand(n) {\n      return crypto.randomBytes(n);\n    };\n  } catch (e) {\n  }\n}\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n  this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n  return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n  var len = n.bitLength();\n  var min_bytes = Math.ceil(len / 8);\n\n  // Generage random bytes until a number less than n is found.\n  // This ensures that 0..n-1 have an equal probability of being selected.\n  do\n    var a = new bn(this.rand.generate(min_bytes));\n  while (a.cmp(n) >= 0);\n\n  return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n  // Generate a random number greater than or equal to start and less than stop.\n  var size = stop.sub(start);\n  return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  var prime = true;\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n    if (cb)\n      cb(a);\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return false;\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s)\n      return false;\n  }\n\n  return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n\n    var g = n.gcd(a);\n    if (g.cmpn(1) !== 0)\n      return g;\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return x.fromRed().subn(1).gcd(n);\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s) {\n      x = x.redSqr();\n      return x.fromRed().subn(1).gcd(n);\n    }\n  }\n\n  return false;\n};\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n  if (primes !== null)\n    return primes;\n\n  var limit = 0x100000;\n  var res = [];\n  res[0] = 2;\n  for (var i = 1, k = 3; k < limit; k += 2) {\n    var sqrt = Math.ceil(Math.sqrt(k));\n    for (var j = 0; j < i && res[j] <= sqrt; j++)\n      if (k % res[j] === 0)\n        break;\n\n    if (i !== j && res[j] <= sqrt)\n      continue;\n\n    res[i++] = k;\n  }\n  primes = res;\n  return res;\n}\n\nfunction simpleSieve(p) {\n  var primes = _getPrimes();\n\n  for (var i = 0; i < primes.length; i++)\n    if (p.modn(primes[i]) === 0) {\n      if (p.cmpn(primes[i]) === 0) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n\n  return true;\n}\n\nfunction fermatTest(p) {\n  var red = BN.mont(p);\n  return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n  if (bits < 16) {\n    // this is what openssl does\n    if (gen === 2 || gen === 5) {\n      return new BN([0x8c, 0x7b]);\n    } else {\n      return new BN([0x8c, 0x27]);\n    }\n  }\n  gen = new BN(gen);\n\n  var num, n2;\n\n  while (true) {\n    num = new BN(randomBytes(Math.ceil(bits / 8)));\n    while (num.bitLength() > bits) {\n      num.ishrn(1);\n    }\n    if (num.isEven()) {\n      num.iadd(ONE);\n    }\n    if (!num.testn(1)) {\n      num.iadd(TWO);\n    }\n    if (!gen.cmp(TWO)) {\n      while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        num.iadd(FOUR);\n      }\n    } else if (!gen.cmp(FIVE)) {\n      while (num.mod(TEN).cmp(THREE)) {\n        num.iadd(FOUR);\n      }\n    }\n    n2 = num.shrn(1);\n    if (simpleSieve(n2) && simpleSieve(num) &&\n      fermatTest(n2) && fermatTest(num) &&\n      millerRabin.test(n2) && millerRabin.test(num)) {\n      return num;\n    }\n  }\n\n}\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc);\n  }\n  this._pub = new BN(pub);\n  return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc);\n  }\n  this._priv = new BN(priv);\n  return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n  var gen = generator.toString('hex');\n  var hex = [gen, prime.toString(16)].join('_');\n  if (hex in primeCache) {\n    return primeCache[hex];\n  }\n  var error = 0;\n\n  if (prime.isEven() ||\n    !primes.simpleSieve ||\n    !primes.fermatTest(prime) ||\n    !millerRabin.test(prime)) {\n    //not a prime so +1\n    error += 1;\n\n    if (gen === '02' || gen === '05') {\n      // we'd be able to check the generator\n      // it would fail so +8\n      error += 8;\n    } else {\n      //we wouldn't be able to test the generator\n      // so +4\n      error += 4;\n    }\n    primeCache[hex] = error;\n    return error;\n  }\n  if (!millerRabin.test(prime.shrn(1))) {\n    //not a safe prime\n    error += 2;\n  }\n  var rem;\n  switch (gen) {\n    case '02':\n      if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        // unsuidable generator\n        error += 8;\n      }\n      break;\n    case '05':\n      rem = prime.mod(TEN);\n      if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n        // prime mod 10 needs to equal 3 or 7\n        error += 8;\n      }\n      break;\n    default:\n      error += 4;\n  }\n  primeCache[hex] = error;\n  return error;\n}\n\nfunction DH(prime, generator, malleable) {\n  this.setGenerator(generator);\n  this.__prime = new BN(prime);\n  this._prime = BN.mont(this.__prime);\n  this._primeLen = prime.length;\n  this._pub = undefined;\n  this._priv = undefined;\n  this._primeCode = undefined;\n  if (malleable) {\n    this.setPublicKey = setPublicKey;\n    this.setPrivateKey = setPrivateKey;\n  } else {\n    this._primeCode = 8;\n  }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n  enumerable: true,\n  get: function () {\n    if (typeof this._primeCode !== 'number') {\n      this._primeCode = checkPrime(this.__prime, this.__gen);\n    }\n    return this._primeCode;\n  }\n});\nDH.prototype.generateKeys = function () {\n  if (!this._priv) {\n    this._priv = new BN(randomBytes(this._primeLen));\n  }\n  this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n  return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n  other = new BN(other);\n  other = other.toRed(this._prime);\n  var secret = other.redPow(this._priv).fromRed();\n  var out = new Buffer(secret.toArray());\n  var prime = this.getPrime();\n  if (out.length < prime.length) {\n    var front = new Buffer(prime.length - out.length);\n    front.fill(0);\n    out = Buffer.concat([front, out]);\n  }\n  return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n  return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n  return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n  return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n  return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(gen)) {\n    gen = new Buffer(gen, enc);\n  }\n  this.__gen = gen;\n  this._gen = new BN(gen);\n  return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n  var buf = new Buffer(bn.toArray());\n  if (!enc) {\n    return buf;\n  } else {\n    return buf.toString(enc);\n  }\n}\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n  var prime = new Buffer(primes[mod].prime, 'hex')\n  var gen = new Buffer(primes[mod].gen, 'hex')\n\n  return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n  'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n  if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n    return createDiffieHellman(prime, 'binary', enc, generator)\n  }\n\n  enc = enc || 'binary'\n  genc = genc || 'binary'\n  generator = generator || new Buffer([2])\n\n  if (!Buffer.isBuffer(generator)) {\n    generator = new Buffer(generator, genc)\n  }\n\n  if (typeof prime === 'number') {\n    return new DH(generatePrime(prime, generator), generator, true)\n  }\n\n  if (!Buffer.isBuffer(prime)) {\n    prime = new Buffer(prime, enc)\n  }\n\n  return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","module.exports = require('events').EventEmitter;\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var entry = {\n        data: v,\n        next: this.head\n      };\n      if (this.length === 0) this.tail = entry;\n      this.head = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, i);\n        i += p.data.length;\n        p = p.next;\n      }\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes or characters from the buffered data.\n  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();","'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n      if (state.autoDestroy) {\n        // In case of duplex streams we need a way to detect\n        // if the readable side is ready for autoDestroy as well\n        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\n    stream.removeListener('complete', onfinish);\n    stream.removeListener('abort', onclose);\n    stream.removeListener('request', onrequest);\n    if (stream.req) stream.req.removeListener('finish', onfinish);\n    stream.removeListener('end', onlegacyfinish);\n    stream.removeListener('close', onlegacyfinish);\n    stream.removeListener('finish', onfinish);\n    stream.removeListener('end', onend);\n    stream.removeListener('error', onerror);\n    stream.removeListener('close', onclose);\n  };\n}\nmodule.exports = eos;","'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;","module.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n      } else if (state.destroyed) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    state.awaitDrain = 0;\n    stream.emit('data', chunk);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var decoder = new StringDecoder(enc);\n  this._readableState.decoder = decoder;\n  // If setEncoding(null), decoder.encoding equals utf8\n  this._readableState.encoding = this._readableState.decoder.encoding;\n\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n  if (state.sync) {\n    // if we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call\n    emitReadable(stream);\n  } else {\n    // emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false;\n    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  debug('emitReadable', state.needReadable, state.emittedReadable);\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    process.nextTick(emitReadable_, stream);\n  }\n}\nfunction emitReadable_(stream) {\n  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (state.length || state.ended)) {\n    stream.emit('readable');\n    state.emittedReadable = false;\n  }\n\n  // The stream needs another readable event if\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(maybeReadMore_, stream, state);\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var len = state.length;\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n  var state = this._readableState;\n  if (ev === 'data') {\n    // update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0;\n\n    // Try start flowing on next tick if stream isn't explicitly paused\n    if (state.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.flowing = false;\n      state.emittedReadable = false;\n      debug('on readable', state.length, state.reading);\n      if (state.length) {\n        emitReadable(this);\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this);\n      }\n    }\n  }\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n  var res = Stream.prototype.removeListener.call(this, ev, fn);\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nfunction updateReadableListening(self) {\n  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\n    // flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true;\n\n    // crude way to check if we should resume\n  } else if (self.listenerCount('data') > 0) {\n    self.resume();\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    // we flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume()\n    state.flowing = !state.readableListening;\n    resume(this, state);\n  }\n  state.paused = false;\n  return this;\n};\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(resume_, stream, state);\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading);\n  if (!state.reading) {\n    stream.read(0);\n  }\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (this._readableState.flowing !== false) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  this._readableState.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = state.buffer.consume(n, state.decoder);\n  }\n  return ret;\n}\nfunction endReadable(stream) {\n  var state = stream._readableState;\n  debug('endReadable', state.endEmitted);\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(endReadableNT, state, stream);\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length);\n\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well\n      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [number & 0x3ffffff];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [0];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this._strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // '0' - '9'\n    if (c >= 48 && c <= 57) {\n      return c - 48;\n    // 'A' - 'F'\n    } else if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    } else {\n      assert(false, 'Invalid character in ' + string);\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this._strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var b = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        b = c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        b = c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        b = c;\n      }\n      assert(c >= 0 && b < mul, 'Invalid character');\n      r += b;\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [0];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this._strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  function move (dest, src) {\n    dest.words = src.words;\n    dest.length = src.length;\n    dest.negative = src.negative;\n    dest.red = src.red;\n  }\n\n  BN.prototype._move = function _move (dest) {\n    move(dest, this);\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype._strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  // Check Symbol.for because not everywhere where Symbol defined\n  // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n  if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n    try {\n      BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n    } catch (e) {\n      BN.prototype.inspect = inspect;\n    }\n  } else {\n    BN.prototype.inspect = inspect;\n  }\n\n  function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  }\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modrn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16, 2);\n  };\n\n  if (Buffer) {\n    BN.prototype.toBuffer = function toBuffer (endian, length) {\n      return this.toArrayLike(Buffer, endian, length);\n    };\n  }\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  var allocate = function allocate (ArrayType, size) {\n    if (ArrayType.allocUnsafe) {\n      return ArrayType.allocUnsafe(size);\n    }\n    return new ArrayType(size);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    this._strip();\n\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    var res = allocate(ArrayType, reqLength);\n    var postfix = endian === 'le' ? 'LE' : 'BE';\n    this['_toArrayLike' + postfix](res, byteLength);\n    return res;\n  };\n\n  BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n    var position = 0;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position++] = word & 0xff;\n      if (position < res.length) {\n        res[position++] = (word >> 8) & 0xff;\n      }\n      if (position < res.length) {\n        res[position++] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position < res.length) {\n          res[position++] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position < res.length) {\n      res[position++] = carry;\n\n      while (position < res.length) {\n        res[position++] = 0;\n      }\n    }\n  };\n\n  BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n    var position = res.length - 1;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position--] = word & 0xff;\n      if (position >= 0) {\n        res[position--] = (word >> 8) & 0xff;\n      }\n      if (position >= 0) {\n        res[position--] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position >= 0) {\n          res[position--] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position >= 0) {\n      res[position--] = carry;\n\n      while (position >= 0) {\n        res[position--] = 0;\n      }\n    }\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] >>> wbit) & 0x01;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this._strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this._strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this._strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n    // var fftm = new FFTM();\n    // return fftm.mulp(self, num, out);\n    return bigMulTo(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out._strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this._strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) <= num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this._strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this._strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q._strip();\n    }\n    a._strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modrn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modrn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modrn = function modrn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return isNegNum ? -acc : acc;\n  };\n\n  // WARNING: DEPRECATED\n  BN.prototype.modn = function modn (num) {\n    return this.modrn(num);\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    this._strip();\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this._strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is a BN v4 instance\n        r.strip();\n      } else {\n        // r is a BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n    move(a, a.umod(this.m)._forceRed(this));\n    return a;\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n  var r = getr(priv)\n  var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n  return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n  var len = priv.modulus.byteLength()\n  var r\n  do {\n    r = new BN(randomBytes(len))\n  } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n  return r\n}\n\nfunction crt (msg, priv) {\n  var blinds = blind(priv)\n  var len = priv.modulus.byteLength()\n  var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n  var c1 = blinded.toRed(BN.mont(priv.prime1))\n  var c2 = blinded.toRed(BN.mont(priv.prime2))\n  var qinv = priv.coefficient\n  var p = priv.prime1\n  var q = priv.prime2\n  var m1 = c1.redPow(priv.exponent1).fromRed()\n  var m2 = c2.redPow(priv.exponent2).fromRed()\n  var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n  return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg !== 'string') {\n    for (var i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n    return res;\n  }\n  if (enc === 'hex') {\n    msg = msg.replace(/[^a-z0-9]+/ig, '');\n    if (msg.length % 2 !== 0)\n      msg = '0' + msg;\n    for (var i = 0; i < msg.length; i += 2)\n      res.push(parseInt(msg[i] + msg[i + 1], 16));\n  } else {\n    for (var i = 0; i < msg.length; i++) {\n      var c = msg.charCodeAt(i);\n      var hi = c >> 8;\n      var lo = c & 0xff;\n      if (hi)\n        res.push(hi, lo);\n      else\n        res.push(lo);\n    }\n  }\n  return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n  if (enc === 'hex')\n    return toHex(arr);\n  else\n    return arr;\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n  var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n  naf.fill(0);\n\n  var ws = 1 << (w + 1);\n  var k = num.clone();\n\n  for (var i = 0; i < naf.length; i++) {\n    var z;\n    var mod = k.andln(ws - 1);\n    if (k.isOdd()) {\n      if (mod > (ws >> 1) - 1)\n        z = (ws >> 1) - mod;\n      else\n        z = mod;\n      k.isubn(z);\n    } else {\n      z = 0;\n    }\n\n    naf[i] = z;\n    k.iushrn(1);\n  }\n\n  return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n  var jsf = [\n    [],\n    [],\n  ];\n\n  k1 = k1.clone();\n  k2 = k2.clone();\n  var d1 = 0;\n  var d2 = 0;\n  var m8;\n  while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n    // First phase\n    var m14 = (k1.andln(3) + d1) & 3;\n    var m24 = (k2.andln(3) + d2) & 3;\n    if (m14 === 3)\n      m14 = -1;\n    if (m24 === 3)\n      m24 = -1;\n    var u1;\n    if ((m14 & 1) === 0) {\n      u1 = 0;\n    } else {\n      m8 = (k1.andln(7) + d1) & 7;\n      if ((m8 === 3 || m8 === 5) && m24 === 2)\n        u1 = -m14;\n      else\n        u1 = m14;\n    }\n    jsf[0].push(u1);\n\n    var u2;\n    if ((m24 & 1) === 0) {\n      u2 = 0;\n    } else {\n      m8 = (k2.andln(7) + d2) & 7;\n      if ((m8 === 3 || m8 === 5) && m14 === 2)\n        u2 = -m24;\n      else\n        u2 = m24;\n    }\n    jsf[1].push(u2);\n\n    // Second phase\n    if (2 * d1 === u1 + 1)\n      d1 = 1 - d1;\n    if (2 * d2 === u2 + 1)\n      d2 = 1 - d2;\n    k1.iushrn(1);\n    k2.iushrn(1);\n  }\n\n  return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n  var key = '_' + name;\n  obj.prototype[name] = function cachedProperty() {\n    return this[key] !== undefined ? this[key] :\n      this[key] = computer.call(this);\n  };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n  return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n    bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n  return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n  this.type = type;\n  this.p = new BN(conf.p, 16);\n\n  // Use Montgomery, when there is no fast reduction for the prime\n  this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n  // Useful for many curves\n  this.zero = new BN(0).toRed(this.red);\n  this.one = new BN(1).toRed(this.red);\n  this.two = new BN(2).toRed(this.red);\n\n  // Curve configuration, optional\n  this.n = conf.n && new BN(conf.n, 16);\n  this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n  // Temporary arrays\n  this._wnafT1 = new Array(4);\n  this._wnafT2 = new Array(4);\n  this._wnafT3 = new Array(4);\n  this._wnafT4 = new Array(4);\n\n  this._bitLength = this.n ? this.n.bitLength() : 0;\n\n  // Generalized Greg Maxwell's trick\n  var adjustCount = this.n && this.p.div(this.n);\n  if (!adjustCount || adjustCount.cmpn(100) > 0) {\n    this.redN = null;\n  } else {\n    this._maxwellTrick = true;\n    this.redN = this.n.toRed(this.red);\n  }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n  assert(p.precomputed);\n  var doubles = p._getDoubles();\n\n  var naf = getNAF(k, 1, this._bitLength);\n  var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n  I /= 3;\n\n  // Translate into more windowed form\n  var repr = [];\n  var j;\n  var nafW;\n  for (j = 0; j < naf.length; j += doubles.step) {\n    nafW = 0;\n    for (var l = j + doubles.step - 1; l >= j; l--)\n      nafW = (nafW << 1) + naf[l];\n    repr.push(nafW);\n  }\n\n  var a = this.jpoint(null, null, null);\n  var b = this.jpoint(null, null, null);\n  for (var i = I; i > 0; i--) {\n    for (j = 0; j < repr.length; j++) {\n      nafW = repr[j];\n      if (nafW === i)\n        b = b.mixedAdd(doubles.points[j]);\n      else if (nafW === -i)\n        b = b.mixedAdd(doubles.points[j].neg());\n    }\n    a = a.add(b);\n  }\n  return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n  var w = 4;\n\n  // Precompute window\n  var nafPoints = p._getNAFPoints(w);\n  w = nafPoints.wnd;\n  var wnd = nafPoints.points;\n\n  // Get NAF form\n  var naf = getNAF(k, w, this._bitLength);\n\n  // Add `this`*(N+1) for every w-NAF index\n  var acc = this.jpoint(null, null, null);\n  for (var i = naf.length - 1; i >= 0; i--) {\n    // Count zeroes\n    for (var l = 0; i >= 0 && naf[i] === 0; i--)\n      l++;\n    if (i >= 0)\n      l++;\n    acc = acc.dblp(l);\n\n    if (i < 0)\n      break;\n    var z = naf[i];\n    assert(z !== 0);\n    if (p.type === 'affine') {\n      // J +- P\n      if (z > 0)\n        acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n    } else {\n      // J +- J\n      if (z > 0)\n        acc = acc.add(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.add(wnd[(-z - 1) >> 1].neg());\n    }\n  }\n  return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n  points,\n  coeffs,\n  len,\n  jacobianResult) {\n  var wndWidth = this._wnafT1;\n  var wnd = this._wnafT2;\n  var naf = this._wnafT3;\n\n  // Fill all arrays\n  var max = 0;\n  var i;\n  var j;\n  var p;\n  for (i = 0; i < len; i++) {\n    p = points[i];\n    var nafPoints = p._getNAFPoints(defW);\n    wndWidth[i] = nafPoints.wnd;\n    wnd[i] = nafPoints.points;\n  }\n\n  // Comb small window NAFs\n  for (i = len - 1; i >= 1; i -= 2) {\n    var a = i - 1;\n    var b = i;\n    if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n      naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n      naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n      max = Math.max(naf[a].length, max);\n      max = Math.max(naf[b].length, max);\n      continue;\n    }\n\n    var comb = [\n      points[a], /* 1 */\n      null, /* 3 */\n      null, /* 5 */\n      points[b], /* 7 */\n    ];\n\n    // Try to avoid Projective points, if possible\n    if (points[a].y.cmp(points[b].y) === 0) {\n      comb[1] = points[a].add(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].add(points[b].neg());\n    } else {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    }\n\n    var index = [\n      -3, /* -1 -1 */\n      -1, /* -1 0 */\n      -5, /* -1 1 */\n      -7, /* 0 -1 */\n      0, /* 0 0 */\n      7, /* 0 1 */\n      5, /* 1 -1 */\n      1, /* 1 0 */\n      3,  /* 1 1 */\n    ];\n\n    var jsf = getJSF(coeffs[a], coeffs[b]);\n    max = Math.max(jsf[0].length, max);\n    naf[a] = new Array(max);\n    naf[b] = new Array(max);\n    for (j = 0; j < max; j++) {\n      var ja = jsf[0][j] | 0;\n      var jb = jsf[1][j] | 0;\n\n      naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n      naf[b][j] = 0;\n      wnd[a] = comb;\n    }\n  }\n\n  var acc = this.jpoint(null, null, null);\n  var tmp = this._wnafT4;\n  for (i = max; i >= 0; i--) {\n    var k = 0;\n\n    while (i >= 0) {\n      var zero = true;\n      for (j = 0; j < len; j++) {\n        tmp[j] = naf[j][i] | 0;\n        if (tmp[j] !== 0)\n          zero = false;\n      }\n      if (!zero)\n        break;\n      k++;\n      i--;\n    }\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n    if (i < 0)\n      break;\n\n    for (j = 0; j < len; j++) {\n      var z = tmp[j];\n      p;\n      if (z === 0)\n        continue;\n      else if (z > 0)\n        p = wnd[j][(z - 1) >> 1];\n      else if (z < 0)\n        p = wnd[j][(-z - 1) >> 1].neg();\n\n      if (p.type === 'affine')\n        acc = acc.mixedAdd(p);\n      else\n        acc = acc.add(p);\n    }\n  }\n  // Zeroify references\n  for (i = 0; i < len; i++)\n    wnd[i] = null;\n\n  if (jacobianResult)\n    return acc;\n  else\n    return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n  this.curve = curve;\n  this.type = type;\n  this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n  throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n  return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  bytes = utils.toArray(bytes, enc);\n\n  var len = this.p.byteLength();\n\n  // uncompressed, hybrid-odd, hybrid-even\n  if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n      bytes.length - 1 === 2 * len) {\n    if (bytes[0] === 0x06)\n      assert(bytes[bytes.length - 1] % 2 === 0);\n    else if (bytes[0] === 0x07)\n      assert(bytes[bytes.length - 1] % 2 === 1);\n\n    var res =  this.point(bytes.slice(1, 1 + len),\n      bytes.slice(1 + len, 1 + 2 * len));\n\n    return res;\n  } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n              bytes.length - 1 === len) {\n    return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n  }\n  throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n  return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n  var len = this.curve.p.byteLength();\n  var x = this.getX().toArray('be', len);\n\n  if (compact)\n    return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n  return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n  return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n  if (this.precomputed)\n    return this;\n\n  var precomputed = {\n    doubles: null,\n    naf: null,\n    beta: null,\n  };\n  precomputed.naf = this._getNAFPoints(8);\n  precomputed.doubles = this._getDoubles(4, power);\n  precomputed.beta = this._getBeta();\n  this.precomputed = precomputed;\n\n  return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n  if (!this.precomputed)\n    return false;\n\n  var doubles = this.precomputed.doubles;\n  if (!doubles)\n    return false;\n\n  return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n  if (this.precomputed && this.precomputed.doubles)\n    return this.precomputed.doubles;\n\n  var doubles = [ this ];\n  var acc = this;\n  for (var i = 0; i < power; i += step) {\n    for (var j = 0; j < step; j++)\n      acc = acc.dbl();\n    doubles.push(acc);\n  }\n  return {\n    step: step,\n    points: doubles,\n  };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n  if (this.precomputed && this.precomputed.naf)\n    return this.precomputed.naf;\n\n  var res = [ this ];\n  var max = (1 << wnd) - 1;\n  var dbl = max === 1 ? null : this.dbl();\n  for (var i = 1; i < max; i++)\n    res[i] = res[i - 1].add(dbl);\n  return {\n    wnd: wnd,\n    points: res,\n  };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n  return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n  var r = this;\n  for (var i = 0; i < k; i++)\n    r = r.dbl();\n  return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n  Base.call(this, 'short', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.tinv = this.two.redInvm();\n\n  this.zeroA = this.a.fromRed().cmpn(0) === 0;\n  this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n  // If the curve is endomorphic, precalculate beta and lambda\n  this.endo = this._getEndomorphism(conf);\n  this._endoWnafT1 = new Array(4);\n  this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n  // No efficient endomorphism\n  if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n    return;\n\n  // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n  var beta;\n  var lambda;\n  if (conf.beta) {\n    beta = new BN(conf.beta, 16).toRed(this.red);\n  } else {\n    var betas = this._getEndoRoots(this.p);\n    // Choose the smallest beta\n    beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n    beta = beta.toRed(this.red);\n  }\n  if (conf.lambda) {\n    lambda = new BN(conf.lambda, 16);\n  } else {\n    // Choose the lambda that is matching selected beta\n    var lambdas = this._getEndoRoots(this.n);\n    if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n      lambda = lambdas[0];\n    } else {\n      lambda = lambdas[1];\n      assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n    }\n  }\n\n  // Get basis vectors, used for balanced length-two representation\n  var basis;\n  if (conf.basis) {\n    basis = conf.basis.map(function(vec) {\n      return {\n        a: new BN(vec.a, 16),\n        b: new BN(vec.b, 16),\n      };\n    });\n  } else {\n    basis = this._getEndoBasis(lambda);\n  }\n\n  return {\n    beta: beta,\n    lambda: lambda,\n    basis: basis,\n  };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n  // Find roots of for x^2 + x + 1 in F\n  // Root = (-1 +- Sqrt(-3)) / 2\n  //\n  var red = num === this.p ? this.red : BN.mont(num);\n  var tinv = new BN(2).toRed(red).redInvm();\n  var ntinv = tinv.redNeg();\n\n  var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n  var l1 = ntinv.redAdd(s).fromRed();\n  var l2 = ntinv.redSub(s).fromRed();\n  return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n  // aprxSqrt >= sqrt(this.n)\n  var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n  // 3.74\n  // Run EGCD, until r(L + 1) < aprxSqrt\n  var u = lambda;\n  var v = this.n.clone();\n  var x1 = new BN(1);\n  var y1 = new BN(0);\n  var x2 = new BN(0);\n  var y2 = new BN(1);\n\n  // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n  var a0;\n  var b0;\n  // First vector\n  var a1;\n  var b1;\n  // Second vector\n  var a2;\n  var b2;\n\n  var prevR;\n  var i = 0;\n  var r;\n  var x;\n  while (u.cmpn(0) !== 0) {\n    var q = v.div(u);\n    r = v.sub(q.mul(u));\n    x = x2.sub(q.mul(x1));\n    var y = y2.sub(q.mul(y1));\n\n    if (!a1 && r.cmp(aprxSqrt) < 0) {\n      a0 = prevR.neg();\n      b0 = x1;\n      a1 = r.neg();\n      b1 = x;\n    } else if (a1 && ++i === 2) {\n      break;\n    }\n    prevR = r;\n\n    v = u;\n    u = r;\n    x2 = x1;\n    x1 = x;\n    y2 = y1;\n    y1 = y;\n  }\n  a2 = r.neg();\n  b2 = x;\n\n  var len1 = a1.sqr().add(b1.sqr());\n  var len2 = a2.sqr().add(b2.sqr());\n  if (len2.cmp(len1) >= 0) {\n    a2 = a0;\n    b2 = b0;\n  }\n\n  // Normalize signs\n  if (a1.negative) {\n    a1 = a1.neg();\n    b1 = b1.neg();\n  }\n  if (a2.negative) {\n    a2 = a2.neg();\n    b2 = b2.neg();\n  }\n\n  return [\n    { a: a1, b: b1 },\n    { a: a2, b: b2 },\n  ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n  var basis = this.endo.basis;\n  var v1 = basis[0];\n  var v2 = basis[1];\n\n  var c1 = v2.b.mul(k).divRound(this.n);\n  var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n  var p1 = c1.mul(v1.a);\n  var p2 = c2.mul(v2.a);\n  var q1 = c1.mul(v1.b);\n  var q2 = c2.mul(v2.b);\n\n  // Calculate answer\n  var k1 = k.sub(p1).sub(p2);\n  var k2 = q1.add(q2).neg();\n  return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  // XXX Is there any way to tell if the number is odd without converting it\n  // to non-red form?\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n  if (point.inf)\n    return true;\n\n  var x = point.x;\n  var y = point.y;\n\n  var ax = this.a.redMul(x);\n  var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n  return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n    function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n      var npoints = this._endoWnafT1;\n      var ncoeffs = this._endoWnafT2;\n      for (var i = 0; i < points.length; i++) {\n        var split = this._endoSplit(coeffs[i]);\n        var p = points[i];\n        var beta = p._getBeta();\n\n        if (split.k1.negative) {\n          split.k1.ineg();\n          p = p.neg(true);\n        }\n        if (split.k2.negative) {\n          split.k2.ineg();\n          beta = beta.neg(true);\n        }\n\n        npoints[i * 2] = p;\n        npoints[i * 2 + 1] = beta;\n        ncoeffs[i * 2] = split.k1;\n        ncoeffs[i * 2 + 1] = split.k2;\n      }\n      var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n      // Clean-up references to points and coefficients\n      for (var j = 0; j < i * 2; j++) {\n        npoints[j] = null;\n        ncoeffs[j] = null;\n      }\n      return res;\n    };\n\nfunction Point(curve, x, y, isRed) {\n  Base.BasePoint.call(this, curve, 'affine');\n  if (x === null && y === null) {\n    this.x = null;\n    this.y = null;\n    this.inf = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    // Force redgomery representation when loading from JSON\n    if (isRed) {\n      this.x.forceRed(this.curve.red);\n      this.y.forceRed(this.curve.red);\n    }\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    this.inf = false;\n  }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n  return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n  return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n  if (!this.curve.endo)\n    return;\n\n  var pre = this.precomputed;\n  if (pre && pre.beta)\n    return pre.beta;\n\n  var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n  if (pre) {\n    var curve = this.curve;\n    var endoMul = function(p) {\n      return curve.point(p.x.redMul(curve.endo.beta), p.y);\n    };\n    pre.beta = beta;\n    beta.precomputed = {\n      beta: null,\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(endoMul),\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(endoMul),\n      },\n    };\n  }\n  return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n  if (!this.precomputed)\n    return [ this.x, this.y ];\n\n  return [ this.x, this.y, this.precomputed && {\n    doubles: this.precomputed.doubles && {\n      step: this.precomputed.doubles.step,\n      points: this.precomputed.doubles.points.slice(1),\n    },\n    naf: this.precomputed.naf && {\n      wnd: this.precomputed.naf.wnd,\n      points: this.precomputed.naf.points.slice(1),\n    },\n  } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n  if (typeof obj === 'string')\n    obj = JSON.parse(obj);\n  var res = curve.point(obj[0], obj[1], red);\n  if (!obj[2])\n    return res;\n\n  function obj2point(obj) {\n    return curve.point(obj[0], obj[1], red);\n  }\n\n  var pre = obj[2];\n  res.precomputed = {\n    beta: null,\n    doubles: pre.doubles && {\n      step: pre.doubles.step,\n      points: [ res ].concat(pre.doubles.points.map(obj2point)),\n    },\n    naf: pre.naf && {\n      wnd: pre.naf.wnd,\n      points: [ res ].concat(pre.naf.points.map(obj2point)),\n    },\n  };\n  return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.inf)\n    return p;\n\n  // P + O = P\n  if (p.inf)\n    return this;\n\n  // P + P = 2P\n  if (this.eq(p))\n    return this.dbl();\n\n  // P + (-P) = O\n  if (this.neg().eq(p))\n    return this.curve.point(null, null);\n\n  // P + Q = O\n  if (this.x.cmp(p.x) === 0)\n    return this.curve.point(null, null);\n\n  var c = this.y.redSub(p.y);\n  if (c.cmpn(0) !== 0)\n    c = c.redMul(this.x.redSub(p.x).redInvm());\n  var nx = c.redSqr().redISub(this.x).redISub(p.x);\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.inf)\n    return this;\n\n  // 2P = O\n  var ys1 = this.y.redAdd(this.y);\n  if (ys1.cmpn(0) === 0)\n    return this.curve.point(null, null);\n\n  var a = this.curve.a;\n\n  var x2 = this.x.redSqr();\n  var dyinv = ys1.redInvm();\n  var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n  var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n  k = new BN(k, 16);\n  if (this.isInfinity())\n    return this;\n  else if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else if (this.curve.endo)\n    return this.curve._endoWnafMulAdd([ this ], [ k ]);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs, true);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n  return this === p ||\n         this.inf === p.inf &&\n             (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n  if (this.inf)\n    return this;\n\n  var res = this.curve.point(this.x, this.y.redNeg());\n  if (_precompute && this.precomputed) {\n    var pre = this.precomputed;\n    var negate = function(p) {\n      return p.neg();\n    };\n    res.precomputed = {\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(negate),\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(negate),\n      },\n    };\n  }\n  return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n  if (this.inf)\n    return this.curve.jpoint(null, null, null);\n\n  var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n  return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n  Base.BasePoint.call(this, curve, 'jacobian');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.one;\n    this.y = this.curve.one;\n    this.z = new BN(0);\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = new BN(z, 16);\n  }\n  if (!this.x.red)\n    this.x = this.x.toRed(this.curve.red);\n  if (!this.y.red)\n    this.y = this.y.toRed(this.curve.red);\n  if (!this.z.red)\n    this.z = this.z.toRed(this.curve.red);\n\n  this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n  return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n  if (this.isInfinity())\n    return this.curve.point(null, null);\n\n  var zinv = this.z.redInvm();\n  var zinv2 = zinv.redSqr();\n  var ax = this.x.redMul(zinv2);\n  var ay = this.y.redMul(zinv2).redMul(zinv);\n\n  return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n  return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p;\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 12M + 4S + 7A\n  var pz2 = p.z.redSqr();\n  var z2 = this.z.redSqr();\n  var u1 = this.x.redMul(pz2);\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y.redMul(pz2.redMul(p.z));\n  var s2 = p.y.redMul(z2.redMul(this.z));\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(p.z).redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p.toJ();\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 8M + 3S + 7A\n  var z2 = this.z.redSqr();\n  var u1 = this.x;\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y;\n  var s2 = p.y.redMul(z2).redMul(this.z);\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n  if (pow === 0)\n    return this;\n  if (this.isInfinity())\n    return this;\n  if (!pow)\n    return this.dbl();\n\n  var i;\n  if (this.curve.zeroA || this.curve.threeA) {\n    var r = this;\n    for (i = 0; i < pow; i++)\n      r = r.dbl();\n    return r;\n  }\n\n  // 1M + 2S + 1A + N * (4S + 5M + 8A)\n  // N = 1 => 6M + 6S + 9A\n  var a = this.curve.a;\n  var tinv = this.curve.tinv;\n\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  // Reuse results\n  var jyd = jy.redAdd(jy);\n  for (i = 0; i < pow; i++) {\n    var jx2 = jx.redSqr();\n    var jyd2 = jyd.redSqr();\n    var jyd4 = jyd2.redSqr();\n    var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n    var t1 = jx.redMul(jyd2);\n    var nx = c.redSqr().redISub(t1.redAdd(t1));\n    var t2 = t1.redISub(nx);\n    var dny = c.redMul(t2);\n    dny = dny.redIAdd(dny).redISub(jyd4);\n    var nz = jyd.redMul(jz);\n    if (i + 1 < pow)\n      jz4 = jz4.redMul(jyd4);\n\n    jx = nx;\n    jz = nz;\n    jyd = dny;\n  }\n\n  return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  if (this.curve.zeroA)\n    return this._zeroDbl();\n  else if (this.curve.threeA)\n    return this._threeDbl();\n  else\n    return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 14A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a; a = 0\n    var m = xx.redAdd(xx).redIAdd(xx);\n    // T = M ^ 2 - 2*S\n    var t = m.redSqr().redISub(s).redISub(s);\n\n    // 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2*Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-dbl-2009-l\n    // 2M + 5S + 13A\n\n    // A = X1^2\n    var a = this.x.redSqr();\n    // B = Y1^2\n    var b = this.y.redSqr();\n    // C = B^2\n    var c = b.redSqr();\n    // D = 2 * ((X1 + B)^2 - A - C)\n    var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n    d = d.redIAdd(d);\n    // E = 3 * A\n    var e = a.redAdd(a).redIAdd(a);\n    // F = E^2\n    var f = e.redSqr();\n\n    // 8 * C\n    var c8 = c.redIAdd(c);\n    c8 = c8.redIAdd(c8);\n    c8 = c8.redIAdd(c8);\n\n    // X3 = F - 2 * D\n    nx = f.redISub(d).redISub(d);\n    // Y3 = E * (D - X3) - 8 * C\n    ny = e.redMul(d.redISub(nx)).redISub(c8);\n    // Z3 = 2 * Y1 * Z1\n    nz = this.y.redMul(this.z);\n    nz = nz.redIAdd(nz);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 15A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a\n    var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n    // T = M^2 - 2 * S\n    var t = m.redSqr().redISub(s).redISub(s);\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2 * Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n    // 3M + 5S\n\n    // delta = Z1^2\n    var delta = this.z.redSqr();\n    // gamma = Y1^2\n    var gamma = this.y.redSqr();\n    // beta = X1 * gamma\n    var beta = this.x.redMul(gamma);\n    // alpha = 3 * (X1 - delta) * (X1 + delta)\n    var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n    alpha = alpha.redAdd(alpha).redIAdd(alpha);\n    // X3 = alpha^2 - 8 * beta\n    var beta4 = beta.redIAdd(beta);\n    beta4 = beta4.redIAdd(beta4);\n    var beta8 = beta4.redAdd(beta4);\n    nx = alpha.redSqr().redISub(beta8);\n    // Z3 = (Y1 + Z1)^2 - gamma - delta\n    nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n    // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n    var ggamma8 = gamma.redSqr();\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n  var a = this.curve.a;\n\n  // 4M + 6S + 10A\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  var jx2 = jx.redSqr();\n  var jy2 = jy.redSqr();\n\n  var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n  var jxd4 = jx.redAdd(jx);\n  jxd4 = jxd4.redIAdd(jxd4);\n  var t1 = jxd4.redMul(jy2);\n  var nx = c.redSqr().redISub(t1.redAdd(t1));\n  var t2 = t1.redISub(nx);\n\n  var jyd8 = jy2.redSqr();\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  var ny = c.redMul(t2).redISub(jyd8);\n  var nz = jy.redAdd(jy).redMul(jz);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n  if (!this.curve.zeroA)\n    return this.dbl().add(this);\n\n  // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n  // 5M + 10S + ...\n\n  // XX = X1^2\n  var xx = this.x.redSqr();\n  // YY = Y1^2\n  var yy = this.y.redSqr();\n  // ZZ = Z1^2\n  var zz = this.z.redSqr();\n  // YYYY = YY^2\n  var yyyy = yy.redSqr();\n  // M = 3 * XX + a * ZZ2; a = 0\n  var m = xx.redAdd(xx).redIAdd(xx);\n  // MM = M^2\n  var mm = m.redSqr();\n  // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n  var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n  e = e.redIAdd(e);\n  e = e.redAdd(e).redIAdd(e);\n  e = e.redISub(mm);\n  // EE = E^2\n  var ee = e.redSqr();\n  // T = 16*YYYY\n  var t = yyyy.redIAdd(yyyy);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  // U = (M + E)^2 - MM - EE - T\n  var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n  // X3 = 4 * (X1 * EE - 4 * YY * U)\n  var yyu4 = yy.redMul(u);\n  yyu4 = yyu4.redIAdd(yyu4);\n  yyu4 = yyu4.redIAdd(yyu4);\n  var nx = this.x.redMul(ee).redISub(yyu4);\n  nx = nx.redIAdd(nx);\n  nx = nx.redIAdd(nx);\n  // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n  var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  // Z3 = (Z1 + E)^2 - ZZ - EE\n  var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n  k = new BN(k, kbase);\n\n  return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n  if (p.type === 'affine')\n    return this.eq(p.toJ());\n\n  if (this === p)\n    return true;\n\n  // x1 * z2^2 == x2 * z1^2\n  var z2 = this.z.redSqr();\n  var pz2 = p.z.redSqr();\n  if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n    return false;\n\n  // y1 * z2^3 == y2 * z1^3\n  var z3 = z2.redMul(this.z);\n  var pz3 = pz2.redMul(p.z);\n  return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n  var zs = this.z.redSqr();\n  var rx = x.toRed(this.curve.red).redMul(zs);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(zs);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\nJPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC JPoint Infinity>';\n  return '<EC JPoint x: ' + this.x.toString(16, 2) +\n      ' y: ' + this.y.toString(16, 2) +\n      ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n  Base.call(this, 'mont', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.i4 = new BN(4).toRed(this.red).redInvm();\n  this.two = new BN(2).toRed(this.red);\n  this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n  var x = point.normalize().x;\n  var x2 = x.redSqr();\n  var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n  var y = rhs.redSqrt();\n\n  return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && z === null) {\n    this.x = this.curve.one;\n    this.z = this.curve.zero;\n  } else {\n    this.x = new BN(x, 16);\n    this.z = new BN(z, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n  }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n  return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n  // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n  return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n  // 2M + 2S + 4A\n\n  // A = X1 + Z1\n  var a = this.x.redAdd(this.z);\n  // AA = A^2\n  var aa = a.redSqr();\n  // B = X1 - Z1\n  var b = this.x.redSub(this.z);\n  // BB = B^2\n  var bb = b.redSqr();\n  // C = AA - BB\n  var c = aa.redSub(bb);\n  // X3 = AA * BB\n  var nx = aa.redMul(bb);\n  // Z3 = C * (BB + A24 * C)\n  var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n  // 4M + 2S + 6A\n\n  // A = X2 + Z2\n  var a = this.x.redAdd(this.z);\n  // B = X2 - Z2\n  var b = this.x.redSub(this.z);\n  // C = X3 + Z3\n  var c = p.x.redAdd(p.z);\n  // D = X3 - Z3\n  var d = p.x.redSub(p.z);\n  // DA = D * A\n  var da = d.redMul(a);\n  // CB = C * B\n  var cb = c.redMul(b);\n  // X5 = Z1 * (DA + CB)^2\n  var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n  // Z5 = X1 * (DA - CB)^2\n  var nz = diff.x.redMul(da.redISub(cb).redSqr());\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n  var t = k.clone();\n  var a = this; // (N / 2) * Q + Q\n  var b = this.curve.point(null, null); // (N / 2) * Q\n  var c = this; // Q\n\n  for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n    bits.push(t.andln(1));\n\n  for (var i = bits.length - 1; i >= 0; i--) {\n    if (bits[i] === 0) {\n      // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n      a = a.diffAdd(b, c);\n      // N * Q = 2 * ((N / 2) * Q + Q))\n      b = b.dbl();\n    } else {\n      // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n      b = a.diffAdd(b, c);\n      // N * Q + Q = 2 * ((N / 2) * Q + Q)\n      a = a.dbl();\n    }\n  }\n  return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n  this.x = this.x.redMul(this.z.redInvm());\n  this.z = this.curve.one;\n  return this;\n};\n\nPoint.prototype.getX = function getX() {\n  // Normalize coordinates\n  this.normalize();\n\n  return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n  // NOTE: Important as we are creating point in Base.call()\n  this.twisted = (conf.a | 0) !== 1;\n  this.mOneA = this.twisted && (conf.a | 0) === -1;\n  this.extended = this.mOneA;\n\n  Base.call(this, 'edwards', conf);\n\n  this.a = new BN(conf.a, 16).umod(this.red.m);\n  this.a = this.a.toRed(this.red);\n  this.c = new BN(conf.c, 16).toRed(this.red);\n  this.c2 = this.c.redSqr();\n  this.d = new BN(conf.d, 16).toRed(this.red);\n  this.dd = this.d.redAdd(this.d);\n\n  assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n  this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n  if (this.mOneA)\n    return num.redNeg();\n  else\n    return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n  if (this.oneC)\n    return num;\n  else\n    return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n  return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var x2 = x.redSqr();\n  var rhs = this.c2.redSub(this.a.redMul(x2));\n  var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n  var y2 = rhs.redMul(lhs.redInvm());\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n  y = new BN(y, 16);\n  if (!y.red)\n    y = y.toRed(this.red);\n\n  // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n  var y2 = y.redSqr();\n  var lhs = y2.redSub(this.c2);\n  var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n  var x2 = lhs.redMul(rhs.redInvm());\n\n  if (x2.cmp(this.zero) === 0) {\n    if (odd)\n      throw new Error('invalid point');\n    else\n      return this.point(this.zero, y);\n  }\n\n  var x = x2.redSqrt();\n  if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  if (x.fromRed().isOdd() !== odd)\n    x = x.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n  if (point.isInfinity())\n    return true;\n\n  // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n  point.normalize();\n\n  var x2 = point.x.redSqr();\n  var y2 = point.y.redSqr();\n  var lhs = x2.redMul(this.a).redAdd(y2);\n  var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n  return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.zero;\n    this.y = this.curve.one;\n    this.z = this.curve.one;\n    this.t = this.curve.zero;\n    this.zOne = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = z ? new BN(z, 16) : this.curve.one;\n    this.t = t && new BN(t, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n    if (this.t && !this.t.red)\n      this.t = this.t.toRed(this.curve.red);\n    this.zOne = this.z === this.curve.one;\n\n    // Use extended coordinates\n    if (this.curve.extended && !this.t) {\n      this.t = this.x.redMul(this.y);\n      if (!this.zOne)\n        this.t = this.t.redMul(this.z.redInvm());\n    }\n  }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n  return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.x.cmpn(0) === 0 &&\n    (this.y.cmp(this.z) === 0 ||\n    (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #doubling-dbl-2008-hwcd\n  // 4M + 4S\n\n  // A = X1^2\n  var a = this.x.redSqr();\n  // B = Y1^2\n  var b = this.y.redSqr();\n  // C = 2 * Z1^2\n  var c = this.z.redSqr();\n  c = c.redIAdd(c);\n  // D = a * A\n  var d = this.curve._mulA(a);\n  // E = (X1 + Y1)^2 - A - B\n  var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n  // G = D + B\n  var g = d.redAdd(b);\n  // F = G - C\n  var f = g.redSub(c);\n  // H = D - B\n  var h = d.redSub(b);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #doubling-dbl-2008-bbjlp\n  //     #doubling-dbl-2007-bl\n  // and others\n  // Generally 3M + 4S or 2M + 4S\n\n  // B = (X1 + Y1)^2\n  var b = this.x.redAdd(this.y).redSqr();\n  // C = X1^2\n  var c = this.x.redSqr();\n  // D = Y1^2\n  var d = this.y.redSqr();\n\n  var nx;\n  var ny;\n  var nz;\n  var e;\n  var h;\n  var j;\n  if (this.curve.twisted) {\n    // E = a * C\n    e = this.curve._mulA(c);\n    // F = E + D\n    var f = e.redAdd(d);\n    if (this.zOne) {\n      // X3 = (B - C - D) * (F - 2)\n      nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F^2 - 2 * F\n      nz = f.redSqr().redSub(f).redSub(f);\n    } else {\n      // H = Z1^2\n      h = this.z.redSqr();\n      // J = F - 2 * H\n      j = f.redSub(h).redISub(h);\n      // X3 = (B-C-D)*J\n      nx = b.redSub(c).redISub(d).redMul(j);\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F * J\n      nz = f.redMul(j);\n    }\n  } else {\n    // E = C + D\n    e = c.redAdd(d);\n    // H = (c * Z1)^2\n    h = this.curve._mulC(this.z).redSqr();\n    // J = E - 2 * H\n    j = e.redSub(h).redSub(h);\n    // X3 = c * (B - E) * J\n    nx = this.curve._mulC(b.redISub(e)).redMul(j);\n    // Y3 = c * E * (C - D)\n    ny = this.curve._mulC(e).redMul(c.redISub(d));\n    // Z3 = E * J\n    nz = e.redMul(j);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  // Double in extended coordinates\n  if (this.curve.extended)\n    return this._extDbl();\n  else\n    return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #addition-add-2008-hwcd-3\n  // 8M\n\n  // A = (Y1 - X1) * (Y2 - X2)\n  var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n  // B = (Y1 + X1) * (Y2 + X2)\n  var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n  // C = T1 * k * T2\n  var c = this.t.redMul(this.curve.dd).redMul(p.t);\n  // D = Z1 * 2 * Z2\n  var d = this.z.redMul(p.z.redAdd(p.z));\n  // E = B - A\n  var e = b.redSub(a);\n  // F = D - C\n  var f = d.redSub(c);\n  // G = D + C\n  var g = d.redAdd(c);\n  // H = B + A\n  var h = b.redAdd(a);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #addition-add-2008-bbjlp\n  //     #addition-add-2007-bl\n  // 10M + 1S\n\n  // A = Z1 * Z2\n  var a = this.z.redMul(p.z);\n  // B = A^2\n  var b = a.redSqr();\n  // C = X1 * X2\n  var c = this.x.redMul(p.x);\n  // D = Y1 * Y2\n  var d = this.y.redMul(p.y);\n  // E = d * C * D\n  var e = this.curve.d.redMul(c).redMul(d);\n  // F = B - E\n  var f = b.redSub(e);\n  // G = B + E\n  var g = b.redAdd(e);\n  // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n  var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n  var nx = a.redMul(f).redMul(tmp);\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // Y3 = A * G * (D - a * C)\n    ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n    // Z3 = F * G\n    nz = f.redMul(g);\n  } else {\n    // Y3 = A * G * (D - C)\n    ny = a.redMul(g).redMul(d.redSub(c));\n    // Z3 = c * F * G\n    nz = this.curve._mulC(f).redMul(g);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n  if (this.isInfinity())\n    return p;\n  if (p.isInfinity())\n    return this;\n\n  if (this.curve.extended)\n    return this._extAdd(p);\n  else\n    return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n  if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n  if (this.zOne)\n    return this;\n\n  // Normalize coordinates\n  var zi = this.z.redInvm();\n  this.x = this.x.redMul(zi);\n  this.y = this.y.redMul(zi);\n  if (this.t)\n    this.t = this.t.redMul(zi);\n  this.z = this.curve.one;\n  this.zOne = true;\n  return this;\n};\n\nPoint.prototype.neg = function neg() {\n  return this.curve.point(this.x.redNeg(),\n    this.y,\n    this.z,\n    this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n  this.normalize();\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  this.normalize();\n  return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this === other ||\n         this.getX().cmp(other.getX()) === 0 &&\n         this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n  var rx = x.toRed(this.curve.red).redMul(this.z);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(this.z);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n  if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n    return false;\n  }\n  if (i < 0 || i + 1 >= msg.length) {\n    return false;\n  }\n  return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg === 'string') {\n    if (!enc) {\n      // Inspired by stringToUtf8ByteArray() in closure-library by Google\n      // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n      // Apache License 2.0\n      // https://github.com/google/closure-library/blob/master/LICENSE\n      var p = 0;\n      for (var i = 0; i < msg.length; i++) {\n        var c = msg.charCodeAt(i);\n        if (c < 128) {\n          res[p++] = c;\n        } else if (c < 2048) {\n          res[p++] = (c >> 6) | 192;\n          res[p++] = (c & 63) | 128;\n        } else if (isSurrogatePair(msg, i)) {\n          c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n          res[p++] = (c >> 18) | 240;\n          res[p++] = ((c >> 12) & 63) | 128;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        } else {\n          res[p++] = (c >> 12) | 224;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        }\n      }\n    } else if (enc === 'hex') {\n      msg = msg.replace(/[^a-z0-9]+/ig, '');\n      if (msg.length % 2 !== 0)\n        msg = '0' + msg;\n      for (i = 0; i < msg.length; i += 2)\n        res.push(parseInt(msg[i] + msg[i + 1], 16));\n    }\n  } else {\n    for (i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n  }\n  return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n  var res = (w >>> 24) |\n            ((w >>> 8) & 0xff00) |\n            ((w << 8) & 0xff0000) |\n            ((w & 0xff) << 24);\n  return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++) {\n    var w = msg[i];\n    if (endian === 'little')\n      w = htonl(w);\n    res += zero8(w.toString(16));\n  }\n  return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n  if (word.length === 7)\n    return '0' + word;\n  else if (word.length === 6)\n    return '00' + word;\n  else if (word.length === 5)\n    return '000' + word;\n  else if (word.length === 4)\n    return '0000' + word;\n  else if (word.length === 3)\n    return '00000' + word;\n  else if (word.length === 2)\n    return '000000' + word;\n  else if (word.length === 1)\n    return '0000000' + word;\n  else\n    return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n  var len = end - start;\n  assert(len % 4 === 0);\n  var res = new Array(len / 4);\n  for (var i = 0, k = start; i < res.length; i++, k += 4) {\n    var w;\n    if (endian === 'big')\n      w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n    else\n      w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n    res[i] = w >>> 0;\n  }\n  return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n  var res = new Array(msg.length * 4);\n  for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n    var m = msg[i];\n    if (endian === 'big') {\n      res[k] = m >>> 24;\n      res[k + 1] = (m >>> 16) & 0xff;\n      res[k + 2] = (m >>> 8) & 0xff;\n      res[k + 3] = m & 0xff;\n    } else {\n      res[k + 3] = m >>> 24;\n      res[k + 2] = (m >>> 16) & 0xff;\n      res[k + 1] = (m >>> 8) & 0xff;\n      res[k] = m & 0xff;\n    }\n  }\n  return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n  return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n  return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n  return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n  return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n  return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n  return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n  var bh = buf[pos];\n  var bl = buf[pos + 1];\n\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  buf[pos] = hi >>> 0;\n  buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n  var lo = al + bl;\n  return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + carry;\n  return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n  var lo = al + bl + cl + dl;\n  return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n  lo = (lo + el) >>> 0;\n  carry += lo < el ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + eh + carry;\n  return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var lo = al + bl + cl + dl + el;\n\n  return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n  var r = (al << (32 - num)) | (ah >>> num);\n  return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n  return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n  this.pending = null;\n  this.pendingTotal = 0;\n  this.blockSize = this.constructor.blockSize;\n  this.outSize = this.constructor.outSize;\n  this.hmacStrength = this.constructor.hmacStrength;\n  this.padLength = this.constructor.padLength / 8;\n  this.endian = 'big';\n\n  this._delta8 = this.blockSize / 8;\n  this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n  // Convert message to array, pad it, and join into 32bit blocks\n  msg = utils.toArray(msg, enc);\n  if (!this.pending)\n    this.pending = msg;\n  else\n    this.pending = this.pending.concat(msg);\n  this.pendingTotal += msg.length;\n\n  // Enough data, try updating\n  if (this.pending.length >= this._delta8) {\n    msg = this.pending;\n\n    // Process pending data in blocks\n    var r = msg.length % this._delta8;\n    this.pending = msg.slice(msg.length - r, msg.length);\n    if (this.pending.length === 0)\n      this.pending = null;\n\n    msg = utils.join32(msg, 0, msg.length - r, this.endian);\n    for (var i = 0; i < msg.length; i += this._delta32)\n      this._update(msg, i, i + this._delta32);\n  }\n\n  return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n  this.update(this._pad());\n  assert(this.pending === null);\n\n  return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n  var len = this.pendingTotal;\n  var bytes = this._delta8;\n  var k = bytes - ((len + this.padLength) % bytes);\n  var res = new Array(k + this.padLength);\n  res[0] = 0x80;\n  for (var i = 1; i < k; i++)\n    res[i] = 0;\n\n  // Append length\n  len <<= 3;\n  if (this.endian === 'big') {\n    for (var t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = len & 0xff;\n  } else {\n    res[i++] = len & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n\n    for (t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n  }\n\n  return res;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n  if (s === 0)\n    return ch32(x, y, z);\n  if (s === 1 || s === 3)\n    return p32(x, y, z);\n  if (s === 2)\n    return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n  return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n  return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n  return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n  return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n  return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n  return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n  return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n  0x5A827999, 0x6ED9EBA1,\n  0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n  if (!(this instanceof SHA1))\n    return new SHA1();\n\n  BlockHash.call(this);\n  this.h = [\n    0x67452301, 0xefcdab89, 0x98badcfe,\n    0x10325476, 0xc3d2e1f0 ];\n  this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n\n  for(; i < W.length; i++)\n    W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n\n  for (i = 0; i < W.length; i++) {\n    var s = ~~(i / 20);\n    var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n    e = d;\n    d = c;\n    c = rotl32(b, 30);\n    b = a;\n    a = t;\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n  0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n  0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n  if (!(this instanceof SHA256))\n    return new SHA256();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n    0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n  ];\n  this.k = sha256_K;\n  this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i++)\n    W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n  var f = this.h[5];\n  var g = this.h[6];\n  var h = this.h[7];\n\n  assert(this.k.length === W.length);\n  for (i = 0; i < W.length; i++) {\n    var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n    var T2 = sum32(s0_256(a), maj32(a, b, c));\n    h = g;\n    g = f;\n    f = e;\n    e = sum32(d, T1);\n    d = c;\n    c = b;\n    b = a;\n    a = sum32(T1, T2);\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n  this.h[5] = sum32(this.h[5], f);\n  this.h[6] = sum32(this.h[6], g);\n  this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n  if (!(this instanceof SHA224))\n    return new SHA224();\n\n  SHA256.call(this);\n  this.h = [\n    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n    0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n  // Just truncate output\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 7), 'big');\n  else\n    return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n  if (!(this instanceof SHA512))\n    return new SHA512();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xf3bcc908,\n    0xbb67ae85, 0x84caa73b,\n    0x3c6ef372, 0xfe94f82b,\n    0xa54ff53a, 0x5f1d36f1,\n    0x510e527f, 0xade682d1,\n    0x9b05688c, 0x2b3e6c1f,\n    0x1f83d9ab, 0xfb41bd6b,\n    0x5be0cd19, 0x137e2179 ];\n  this.k = sha512_K;\n  this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n  var W = this.W;\n\n  // 32 x 32bit words\n  for (var i = 0; i < 32; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i += 2) {\n    var c0_hi = g1_512_hi(W[i - 4], W[i - 3]);  // i - 2\n    var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n    var c1_hi = W[i - 14];  // i - 7\n    var c1_lo = W[i - 13];\n    var c2_hi = g0_512_hi(W[i - 30], W[i - 29]);  // i - 15\n    var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n    var c3_hi = W[i - 32];  // i - 16\n    var c3_lo = W[i - 31];\n\n    W[i] = sum64_4_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n    W[i + 1] = sum64_4_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n  }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n  this._prepareBlock(msg, start);\n\n  var W = this.W;\n\n  var ah = this.h[0];\n  var al = this.h[1];\n  var bh = this.h[2];\n  var bl = this.h[3];\n  var ch = this.h[4];\n  var cl = this.h[5];\n  var dh = this.h[6];\n  var dl = this.h[7];\n  var eh = this.h[8];\n  var el = this.h[9];\n  var fh = this.h[10];\n  var fl = this.h[11];\n  var gh = this.h[12];\n  var gl = this.h[13];\n  var hh = this.h[14];\n  var hl = this.h[15];\n\n  assert(this.k.length === W.length);\n  for (var i = 0; i < W.length; i += 2) {\n    var c0_hi = hh;\n    var c0_lo = hl;\n    var c1_hi = s1_512_hi(eh, el);\n    var c1_lo = s1_512_lo(eh, el);\n    var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n    var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n    var c3_hi = this.k[i];\n    var c3_lo = this.k[i + 1];\n    var c4_hi = W[i];\n    var c4_lo = W[i + 1];\n\n    var T1_hi = sum64_5_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n    var T1_lo = sum64_5_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n\n    c0_hi = s0_512_hi(ah, al);\n    c0_lo = s0_512_lo(ah, al);\n    c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n    c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n    var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n    var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n    hh = gh;\n    hl = gl;\n\n    gh = fh;\n    gl = fl;\n\n    fh = eh;\n    fl = el;\n\n    eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n    el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n    dh = ch;\n    dl = cl;\n\n    ch = bh;\n    cl = bl;\n\n    bh = ah;\n    bl = al;\n\n    ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n    al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n  }\n\n  sum64(this.h, 0, ah, al);\n  sum64(this.h, 2, bh, bl);\n  sum64(this.h, 4, ch, cl);\n  sum64(this.h, 6, dh, dl);\n  sum64(this.h, 8, eh, el);\n  sum64(this.h, 10, fh, fl);\n  sum64(this.h, 12, gh, gl);\n  sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ ((~xh) & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ ((~xl) & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 28);\n  var c1_hi = rotr64_hi(xl, xh, 2);  // 34\n  var c2_hi = rotr64_hi(xl, xh, 7);  // 39\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 28);\n  var c1_lo = rotr64_lo(xl, xh, 2);  // 34\n  var c2_lo = rotr64_lo(xl, xh, 7);  // 39\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 14);\n  var c1_hi = rotr64_hi(xh, xl, 18);\n  var c2_hi = rotr64_hi(xl, xh, 9);  // 41\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 14);\n  var c1_lo = rotr64_lo(xh, xl, 18);\n  var c2_lo = rotr64_lo(xl, xh, 9);  // 41\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 1);\n  var c1_hi = rotr64_hi(xh, xl, 8);\n  var c2_hi = shr64_hi(xh, xl, 7);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 1);\n  var c1_lo = rotr64_lo(xh, xl, 8);\n  var c2_lo = shr64_lo(xh, xl, 7);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 19);\n  var c1_hi = rotr64_hi(xl, xh, 29);  // 61\n  var c2_hi = shr64_hi(xh, xl, 6);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 19);\n  var c1_lo = rotr64_lo(xl, xh, 29);  // 61\n  var c2_lo = shr64_lo(xh, xl, 6);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n  if (!(this instanceof SHA384))\n    return new SHA384();\n\n  SHA512.call(this);\n  this.h = [\n    0xcbbb9d5d, 0xc1059ed8,\n    0x629a292a, 0x367cd507,\n    0x9159015a, 0x3070dd17,\n    0x152fecd8, 0xf70e5939,\n    0x67332667, 0xffc00b31,\n    0x8eb44a87, 0x68581511,\n    0xdb0c2e0d, 0x64f98fa7,\n    0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 12), 'big');\n  else\n    return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n  if (!(this instanceof RIPEMD160))\n    return new RIPEMD160();\n\n  BlockHash.call(this);\n\n  this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n  this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n  var A = this.h[0];\n  var B = this.h[1];\n  var C = this.h[2];\n  var D = this.h[3];\n  var E = this.h[4];\n  var Ah = A;\n  var Bh = B;\n  var Ch = C;\n  var Dh = D;\n  var Eh = E;\n  for (var j = 0; j < 80; j++) {\n    var T = sum32(\n      rotl32(\n        sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n        s[j]),\n      E);\n    A = E;\n    E = D;\n    D = rotl32(C, 10);\n    C = B;\n    B = T;\n    T = sum32(\n      rotl32(\n        sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n        sh[j]),\n      Eh);\n    Ah = Eh;\n    Eh = Dh;\n    Dh = rotl32(Ch, 10);\n    Ch = Bh;\n    Bh = T;\n  }\n  T = sum32_3(this.h[1], C, Dh);\n  this.h[1] = sum32_3(this.h[2], D, Eh);\n  this.h[2] = sum32_3(this.h[3], E, Ah);\n  this.h[3] = sum32_3(this.h[4], A, Bh);\n  this.h[4] = sum32_3(this.h[0], B, Ch);\n  this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'little');\n  else\n    return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n  if (j <= 15)\n    return x ^ y ^ z;\n  else if (j <= 31)\n    return (x & y) | ((~x) & z);\n  else if (j <= 47)\n    return (x | (~y)) ^ z;\n  else if (j <= 63)\n    return (x & z) | (y & (~z));\n  else\n    return x ^ (y | (~z));\n}\n\nfunction K(j) {\n  if (j <= 15)\n    return 0x00000000;\n  else if (j <= 31)\n    return 0x5a827999;\n  else if (j <= 47)\n    return 0x6ed9eba1;\n  else if (j <= 63)\n    return 0x8f1bbcdc;\n  else\n    return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n  if (j <= 15)\n    return 0x50a28be6;\n  else if (j <= 31)\n    return 0x5c4dd124;\n  else if (j <= 47)\n    return 0x6d703ef3;\n  else if (j <= 63)\n    return 0x7a6d76e9;\n  else\n    return 0x00000000;\n}\n\nvar r = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n  if (!(this instanceof Hmac))\n    return new Hmac(hash, key, enc);\n  this.Hash = hash;\n  this.blockSize = hash.blockSize / 8;\n  this.outSize = hash.outSize / 8;\n  this.inner = null;\n  this.outer = null;\n\n  this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n  // Shorten key, if needed\n  if (key.length > this.blockSize)\n    key = new this.Hash().update(key).digest();\n  assert(key.length <= this.blockSize);\n\n  // Add padding to key\n  for (var i = key.length; i < this.blockSize; i++)\n    key.push(0);\n\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x36;\n  this.inner = new this.Hash().update(key);\n\n  // 0x36 ^ 0x5c = 0x6a\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x6a;\n  this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n  this.inner.update(msg, enc);\n  return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n  this.outer.update(this.inner.digest());\n  return this.outer.digest(enc);\n};\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","module.exports = {\n  doubles: {\n    step: 4,\n    points: [\n      [\n        'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n        'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n      ],\n      [\n        '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n        '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n      ],\n      [\n        '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n        'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n      ],\n      [\n        '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n        '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n      ],\n      [\n        '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n        '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n      ],\n      [\n        '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n        '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n      ],\n      [\n        'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n        '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n      ],\n      [\n        '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n        'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n      ],\n      [\n        'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n        '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n      ],\n      [\n        'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n        'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n      ],\n      [\n        'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n        '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n      ],\n      [\n        '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n        '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n      ],\n      [\n        '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n        '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n      ],\n      [\n        '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n        '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n      ],\n      [\n        '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n        '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n      ],\n      [\n        '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n        '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n      ],\n      [\n        '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n        '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n      ],\n      [\n        '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n        '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n      ],\n      [\n        '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n        'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n      ],\n      [\n        'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n        '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n      ],\n      [\n        'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n        '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n      ],\n      [\n        '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n        '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n      ],\n      [\n        '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n        '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n      ],\n      [\n        'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n        '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n      ],\n      [\n        '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n        'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n      ],\n      [\n        'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n        '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n      ],\n      [\n        'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n        'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n      ],\n      [\n        'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n        '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n      ],\n      [\n        'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n        'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n      ],\n      [\n        'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n        '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n      ],\n      [\n        '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n        'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n      ],\n      [\n        '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n        '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n      ],\n      [\n        'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n        '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n      ],\n      [\n        '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n        'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n      ],\n      [\n        'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n        '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n      ],\n      [\n        'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n        '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n      ],\n      [\n        'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n        'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n      ],\n      [\n        '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n        '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n      ],\n      [\n        '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n        '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n      ],\n      [\n        '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n        'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n      ],\n      [\n        '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n        '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n      ],\n      [\n        'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n        '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n      ],\n      [\n        '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n        '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n      ],\n      [\n        '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n        'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n      ],\n      [\n        '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n        '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n      ],\n      [\n        'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n        '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n      ],\n      [\n        '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n        'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n      ],\n      [\n        'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n        'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n      ],\n      [\n        'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n        '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n      ],\n      [\n        '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n        'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n      ],\n      [\n        '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n        'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n      ],\n      [\n        'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n        '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n      ],\n      [\n        'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n        '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n      ],\n      [\n        'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n        '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n      ],\n      [\n        '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n        'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n      ],\n      [\n        '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n        '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n      ],\n      [\n        'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n        'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n      ],\n      [\n        '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n        'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n      ],\n      [\n        '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n        '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n      ],\n      [\n        '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n        '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n      ],\n      [\n        'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n        'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n      ],\n      [\n        '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n        '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n      ],\n      [\n        '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n        '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n      ],\n      [\n        'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n        '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n      ],\n      [\n        'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n        'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n      ],\n    ],\n  },\n  naf: {\n    wnd: 7,\n    points: [\n      [\n        'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n        '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n      ],\n      [\n        '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n        'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n      ],\n      [\n        '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n        '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n      ],\n      [\n        'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n        'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n      ],\n      [\n        '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n        'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n      ],\n      [\n        'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n        'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n      ],\n      [\n        'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n        '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n      ],\n      [\n        'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n        '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n      ],\n      [\n        '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n        '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n      ],\n      [\n        '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n        '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n      ],\n      [\n        '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n        '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n      ],\n      [\n        '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n        '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n      ],\n      [\n        'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n        'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n      ],\n      [\n        'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n        '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n      ],\n      [\n        '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n        'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n      ],\n      [\n        '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n        'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n      ],\n      [\n        '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n        '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n      ],\n      [\n        '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n        '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n      ],\n      [\n        '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n        '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n      ],\n      [\n        '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n        'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n      ],\n      [\n        'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n        'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n      ],\n      [\n        '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n        '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n      ],\n      [\n        '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n        '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n      ],\n      [\n        'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n        'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n      ],\n      [\n        '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n        '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n      ],\n      [\n        'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n        'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n      ],\n      [\n        'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n        'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n      ],\n      [\n        '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n        '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n      ],\n      [\n        '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n        '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n      ],\n      [\n        '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n        '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n      ],\n      [\n        'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n        '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n      ],\n      [\n        '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n        '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n      ],\n      [\n        'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n        '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n      ],\n      [\n        '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n        'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n      ],\n      [\n        '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n        'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n      ],\n      [\n        'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n        'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n      ],\n      [\n        '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n        '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n      ],\n      [\n        '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n        'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n      ],\n      [\n        'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n        'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n      ],\n      [\n        '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n        '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n      ],\n      [\n        '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n        'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n      ],\n      [\n        '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n        '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n      ],\n      [\n        '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n        'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n      ],\n      [\n        'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n        '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n      ],\n      [\n        '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n        '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n      ],\n      [\n        '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n        'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n      ],\n      [\n        '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n        'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n      ],\n      [\n        'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n        'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n      ],\n      [\n        'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n        'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n      ],\n      [\n        '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n        '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n      ],\n      [\n        '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n        '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n      ],\n      [\n        'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n        '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n      ],\n      [\n        'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n        'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n      ],\n      [\n        '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n        '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n      ],\n      [\n        '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n        '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n      ],\n      [\n        'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n        '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n      ],\n      [\n        '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n        '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n      ],\n      [\n        'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n        'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n      ],\n      [\n        '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n        'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n      ],\n      [\n        '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n        '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n      ],\n      [\n        'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n        '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n      ],\n      [\n        'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n        '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n      ],\n      [\n        '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n        '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n      ],\n      [\n        '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n        '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n      ],\n      [\n        '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n        'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n      ],\n      [\n        '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n        'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n      ],\n      [\n        '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n        '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n      ],\n      [\n        '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n        '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n      ],\n      [\n        '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n        '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n      ],\n      [\n        '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n        'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n      ],\n      [\n        'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n        'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n      ],\n      [\n        '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n        'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n      ],\n      [\n        'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n        '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n      ],\n      [\n        'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n        '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n      ],\n      [\n        'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n        '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n      ],\n      [\n        'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n        '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n      ],\n      [\n        '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n        'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n      ],\n      [\n        '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n        '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n      ],\n      [\n        '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n        'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n      ],\n      [\n        'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n        'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n      ],\n      [\n        'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n        '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n      ],\n      [\n        'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n        'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n      ],\n      [\n        'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n        '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n      ],\n      [\n        '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n        '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n      ],\n      [\n        'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n        '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n      ],\n      [\n        'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n        '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n      ],\n      [\n        '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n        '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n      ],\n      [\n        '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n        'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n      ],\n      [\n        'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n        '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n      ],\n      [\n        'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n        '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n      ],\n      [\n        'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n        '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n      ],\n      [\n        '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n        '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n      ],\n      [\n        'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n        'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n      ],\n      [\n        '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n        'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n      ],\n      [\n        'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n        'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n      ],\n      [\n        'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n        '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n      ],\n      [\n        '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n        'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n      ],\n      [\n        'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n        '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n      ],\n      [\n        'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n        '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n      ],\n      [\n        'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n        '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n      ],\n      [\n        '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n        'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n      ],\n      [\n        '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n        'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n      ],\n      [\n        'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n        '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n      ],\n      [\n        '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n        'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n      ],\n      [\n        '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n        '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n      ],\n      [\n        '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n        'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n      ],\n      [\n        'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n        'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n      ],\n      [\n        '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n        'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n      ],\n      [\n        '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n        '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n      ],\n      [\n        '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n        'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n      ],\n      [\n        '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n        '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n      ],\n      [\n        'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n        'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n      ],\n      [\n        '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n        '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n      ],\n      [\n        'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n        '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n      ],\n      [\n        '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n        '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n      ],\n      [\n        'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n        'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n      ],\n      [\n        'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n        '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n      ],\n      [\n        'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n        'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n      ],\n      [\n        '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n        'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n      ],\n      [\n        '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n        '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n      ],\n      [\n        '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n        'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n      ],\n      [\n        '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n        '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n      ],\n      [\n        '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n        '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n      ],\n      [\n        '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n        'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n      ],\n      [\n        '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n        '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n      ],\n      [\n        '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n        '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n      ],\n      [\n        '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n        '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n      ],\n    ],\n  },\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n  if (options.type === 'short')\n    this.curve = new curve.short(options);\n  else if (options.type === 'edwards')\n    this.curve = new curve.edwards(options);\n  else\n    this.curve = new curve.mont(options);\n  this.g = this.curve.g;\n  this.n = this.curve.n;\n  this.hash = options.hash;\n\n  assert(this.g.validate(), 'Invalid curve');\n  assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n  Object.defineProperty(curves, name, {\n    configurable: true,\n    enumerable: true,\n    get: function() {\n      var curve = new PresetCurve(options);\n      Object.defineProperty(curves, name, {\n        configurable: true,\n        enumerable: true,\n        value: curve,\n      });\n      return curve;\n    },\n  });\n}\n\ndefineCurve('p192', {\n  type: 'short',\n  prime: 'p192',\n  p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n  b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n  n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n    '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n  ],\n});\n\ndefineCurve('p224', {\n  type: 'short',\n  prime: 'p224',\n  p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n  b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n  n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n    'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n  ],\n});\n\ndefineCurve('p256', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n  a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n  b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n  n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n    '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n  ],\n});\n\ndefineCurve('p384', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 ffffffff',\n  a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 fffffffc',\n  b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n     '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n  n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n     'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n  hash: hash.sha384,\n  gRed: false,\n  g: [\n    'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n    '5502f25d bf55296c 3a545e38 72760ab7',\n    '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n    '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n  ],\n});\n\ndefineCurve('p521', {\n  type: 'short',\n  prime: null,\n  p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff',\n  a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff fffffffc',\n  b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n     '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n     '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n  n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n     'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n  hash: hash.sha512,\n  gRed: false,\n  g: [\n    '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n    '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n    'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n    '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n    '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n    '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n  ],\n});\n\ndefineCurve('curve25519', {\n  type: 'mont',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '76d06',\n  b: '1',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '9',\n  ],\n});\n\ndefineCurve('ed25519', {\n  type: 'edwards',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '-1',\n  c: '1',\n  // -121665 * (121666^(-1)) (mod P)\n  d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n    // 4/5\n    '6666666666666666666666666666666666666666666666666666666666666658',\n  ],\n});\n\nvar pre;\ntry {\n  pre = require('./precomputed/secp256k1');\n} catch (e) {\n  pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n  type: 'short',\n  prime: 'k256',\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n  a: '0',\n  b: '7',\n  n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n  h: '1',\n  hash: hash.sha256,\n\n  // Precomputed endomorphism\n  beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n  lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n  basis: [\n    {\n      a: '3086d221a7d46bcde86c90e49284eb15',\n      b: '-e4437ed6010e88286f547fa90abfe4c3',\n    },\n    {\n      a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n      b: '3086d221a7d46bcde86c90e49284eb15',\n    },\n  ],\n\n  gRed: false,\n  g: [\n    '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n    '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n    pre,\n  ],\n});\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n  if (!(this instanceof HmacDRBG))\n    return new HmacDRBG(options);\n  this.hash = options.hash;\n  this.predResist = !!options.predResist;\n\n  this.outLen = this.hash.outSize;\n  this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n  this._reseed = null;\n  this.reseedInterval = null;\n  this.K = null;\n  this.V = null;\n\n  var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n  var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n  var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n  this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n  var seed = entropy.concat(nonce).concat(pers);\n\n  this.K = new Array(this.outLen / 8);\n  this.V = new Array(this.outLen / 8);\n  for (var i = 0; i < this.V.length; i++) {\n    this.K[i] = 0x00;\n    this.V[i] = 0x01;\n  }\n\n  this._update(seed);\n  this._reseed = 1;\n  this.reseedInterval = 0x1000000000000;  // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n  return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n  var kmac = this._hmac()\n                 .update(this.V)\n                 .update([ 0x00 ]);\n  if (seed)\n    kmac = kmac.update(seed);\n  this.K = kmac.digest();\n  this.V = this._hmac().update(this.V).digest();\n  if (!seed)\n    return;\n\n  this.K = this._hmac()\n               .update(this.V)\n               .update([ 0x01 ])\n               .update(seed)\n               .digest();\n  this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n  // Optional entropy enc\n  if (typeof entropyEnc !== 'string') {\n    addEnc = add;\n    add = entropyEnc;\n    entropyEnc = null;\n  }\n\n  entropy = utils.toArray(entropy, entropyEnc);\n  add = utils.toArray(add, addEnc);\n\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n  this._update(entropy.concat(add || []));\n  this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n  if (this._reseed > this.reseedInterval)\n    throw new Error('Reseed is required');\n\n  // Optional encoding\n  if (typeof enc !== 'string') {\n    addEnc = add;\n    add = enc;\n    enc = null;\n  }\n\n  // Optional additional data\n  if (add) {\n    add = utils.toArray(add, addEnc || 'hex');\n    this._update(add);\n  }\n\n  var temp = [];\n  while (temp.length < len) {\n    this.V = this._hmac().update(this.V).digest();\n    temp = temp.concat(this.V);\n  }\n\n  var res = temp.slice(0, len);\n  this._update(add);\n  this._reseed++;\n  return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n  this.ec = ec;\n  this.priv = null;\n  this.pub = null;\n\n  // KeyPair(ec, { priv: ..., pub: ... })\n  if (options.priv)\n    this._importPrivate(options.priv, options.privEnc);\n  if (options.pub)\n    this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n  if (pub instanceof KeyPair)\n    return pub;\n\n  return new KeyPair(ec, {\n    pub: pub,\n    pubEnc: enc,\n  });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n  if (priv instanceof KeyPair)\n    return priv;\n\n  return new KeyPair(ec, {\n    priv: priv,\n    privEnc: enc,\n  });\n};\n\nKeyPair.prototype.validate = function validate() {\n  var pub = this.getPublic();\n\n  if (pub.isInfinity())\n    return { result: false, reason: 'Invalid public key' };\n  if (!pub.validate())\n    return { result: false, reason: 'Public key is not a point' };\n  if (!pub.mul(this.ec.curve.n).isInfinity())\n    return { result: false, reason: 'Public key * N != O' };\n\n  return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n  // compact is optional argument\n  if (typeof compact === 'string') {\n    enc = compact;\n    compact = null;\n  }\n\n  if (!this.pub)\n    this.pub = this.ec.g.mul(this.priv);\n\n  if (!enc)\n    return this.pub;\n\n  return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n  if (enc === 'hex')\n    return this.priv.toString(16, 2);\n  else\n    return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n  this.priv = new BN(key, enc || 16);\n\n  // Ensure that the priv won't be bigger than n, otherwise we may fail\n  // in fixed multiplication method\n  this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n  if (key.x || key.y) {\n    // Montgomery points only have an `x` coordinate.\n    // Weierstrass/Edwards points on the other hand have both `x` and\n    // `y` coordinates.\n    if (this.ec.curve.type === 'mont') {\n      assert(key.x, 'Need x coordinate');\n    } else if (this.ec.curve.type === 'short' ||\n               this.ec.curve.type === 'edwards') {\n      assert(key.x && key.y, 'Need both x and y coordinate');\n    }\n    this.pub = this.ec.curve.point(key.x, key.y);\n    return;\n  }\n  this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n  if(!pub.validate()) {\n    assert(pub.validate(), 'public point not validated');\n  }\n  return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n  return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n  return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n  return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n         ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n  if (options instanceof Signature)\n    return options;\n\n  if (this._importDER(options, enc))\n    return;\n\n  assert(options.r && options.s, 'Signature without r or s');\n  this.r = new BN(options.r, 16);\n  this.s = new BN(options.s, 16);\n  if (options.recoveryParam === undefined)\n    this.recoveryParam = null;\n  else\n    this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n  this.place = 0;\n}\n\nfunction getLength(buf, p) {\n  var initial = buf[p.place++];\n  if (!(initial & 0x80)) {\n    return initial;\n  }\n  var octetLen = initial & 0xf;\n\n  // Indefinite length or overflow\n  if (octetLen === 0 || octetLen > 4) {\n    return false;\n  }\n\n  var val = 0;\n  for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n    val <<= 8;\n    val |= buf[off];\n    val >>>= 0;\n  }\n\n  // Leading zeroes\n  if (val <= 0x7f) {\n    return false;\n  }\n\n  p.place = off;\n  return val;\n}\n\nfunction rmPadding(buf) {\n  var i = 0;\n  var len = buf.length - 1;\n  while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n    i++;\n  }\n  if (i === 0) {\n    return buf;\n  }\n  return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n  data = utils.toArray(data, enc);\n  var p = new Position();\n  if (data[p.place++] !== 0x30) {\n    return false;\n  }\n  var len = getLength(data, p);\n  if (len === false) {\n    return false;\n  }\n  if ((len + p.place) !== data.length) {\n    return false;\n  }\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var rlen = getLength(data, p);\n  if (rlen === false) {\n    return false;\n  }\n  var r = data.slice(p.place, rlen + p.place);\n  p.place += rlen;\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var slen = getLength(data, p);\n  if (slen === false) {\n    return false;\n  }\n  if (data.length !== slen + p.place) {\n    return false;\n  }\n  var s = data.slice(p.place, slen + p.place);\n  if (r[0] === 0) {\n    if (r[1] & 0x80) {\n      r = r.slice(1);\n    } else {\n      // Leading zeroes\n      return false;\n    }\n  }\n  if (s[0] === 0) {\n    if (s[1] & 0x80) {\n      s = s.slice(1);\n    } else {\n      // Leading zeroes\n      return false;\n    }\n  }\n\n  this.r = new BN(r);\n  this.s = new BN(s);\n  this.recoveryParam = null;\n\n  return true;\n};\n\nfunction constructLength(arr, len) {\n  if (len < 0x80) {\n    arr.push(len);\n    return;\n  }\n  var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n  arr.push(octets | 0x80);\n  while (--octets) {\n    arr.push((len >>> (octets << 3)) & 0xff);\n  }\n  arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n  var r = this.r.toArray();\n  var s = this.s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80)\n    r = [ 0 ].concat(r);\n  // Pad values\n  if (s[0] & 0x80)\n    s = [ 0 ].concat(s);\n\n  r = rmPadding(r);\n  s = rmPadding(s);\n\n  while (!s[0] && !(s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n  var arr = [ 0x02 ];\n  constructLength(arr, r.length);\n  arr = arr.concat(r);\n  arr.push(0x02);\n  constructLength(arr, s.length);\n  var backHalf = arr.concat(s);\n  var res = [ 0x30 ];\n  constructLength(res, backHalf.length);\n  res = res.concat(backHalf);\n  return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC))\n    return new EC(options);\n\n  // Shortcut `elliptic.ec(curve-name)`\n  if (typeof options === 'string') {\n    assert(Object.prototype.hasOwnProperty.call(curves, options),\n      'Unknown curve ' + options);\n\n    options = curves[options];\n  }\n\n  // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n  if (options instanceof curves.PresetCurve)\n    options = { curve: options };\n\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g;\n\n  // Point on curve\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1);\n\n  // Hash for function for DRBG\n  this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n  return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n  return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n  if (!options)\n    options = {};\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n    entropy: options.entropy || rand(this.hash.hmacStrength),\n    entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n    nonce: this.n.toArray(),\n  });\n\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n  for (;;) {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0)\n      continue;\n\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n  var delta = msg.byteLength() * 8 - this.n.bitLength();\n  if (delta > 0)\n    msg = msg.ushrn(delta);\n  if (!truncOnly && msg.cmp(this.n) >= 0)\n    return msg.sub(this.n);\n  else\n    return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n  if (typeof enc === 'object') {\n    options = enc;\n    enc = null;\n  }\n  if (!options)\n    options = {};\n\n  key = this.keyFromPrivate(key, enc);\n  msg = this._truncateToN(new BN(msg, 16));\n\n  // Zero-extend key to provide enough entropy\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes);\n\n  // Zero-extend nonce to have the same byte size as N\n  var nonce = msg.toArray('be', bytes);\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n  });\n\n  // Number of bytes to generate\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; ; iter++) {\n    var k = options.k ?\n      options.k(iter) :\n      new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n      continue;\n\n    var kp = this.g.mul(k);\n    if (kp.isInfinity())\n      continue;\n\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0)\n      continue;\n\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0)\n      continue;\n\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n                        (kpX.cmp(r) !== 0 ? 2 : 0);\n\n    // Use complement of `s`, if it is > `n / 2`\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n  msg = this._truncateToN(new BN(msg, 16));\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex');\n\n  // Perform primitive values validation\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n    return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n    return false;\n\n  // Validate signature\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n  var p;\n\n  if (!this.curve._maxwellTrick) {\n    p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity())\n      return false;\n\n    return p.getX().umod(this.n).cmp(r) === 0;\n  }\n\n  // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n  p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity())\n    return false;\n\n  // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s;\n\n  // A set LSB signifies that the y-coordinate is odd\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n    throw new Error('Unable to find sencond key candinate');\n\n  // 1.1. Let x = r + jn.\n  if (isSecondKey)\n    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n  else\n    r = this.curve.pointFromX(r, isYOdd);\n\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n);\n\n  // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null)\n    return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q))\n      return i;\n  }\n  throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n  this.eddsa = eddsa;\n  this._secret = parseBytes(params.secret);\n  if (eddsa.isPoint(params.pub))\n    this._pub = params.pub;\n  else\n    this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n  if (pub instanceof KeyPair)\n    return pub;\n  return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n  if (secret instanceof KeyPair)\n    return secret;\n  return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n  return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n  return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n  if (this._pubBytes)\n    return this.eddsa.decodePoint(this._pubBytes);\n  return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n  var eddsa = this.eddsa;\n  var hash = this.hash();\n  var lastIx = eddsa.encodingLength - 1;\n\n  var a = hash.slice(0, eddsa.encodingLength);\n  a[0] &= 248;\n  a[lastIx] &= 127;\n  a[lastIx] |= 64;\n\n  return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n  return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n  return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n  return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n  assert(this._secret, 'KeyPair can only verify');\n  return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n  return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n  assert(this._secret, 'KeyPair is public only');\n  return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n  return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n  this.eddsa = eddsa;\n\n  if (typeof sig !== 'object')\n    sig = parseBytes(sig);\n\n  if (Array.isArray(sig)) {\n    sig = {\n      R: sig.slice(0, eddsa.encodingLength),\n      S: sig.slice(eddsa.encodingLength),\n    };\n  }\n\n  assert(sig.R && sig.S, 'Signature without R or S');\n\n  if (eddsa.isPoint(sig.R))\n    this._R = sig.R;\n  if (sig.S instanceof BN)\n    this._S = sig.S;\n\n  this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n  this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n  return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n  return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n  return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n  return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n  return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n  return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n  assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n  if (!(this instanceof EDDSA))\n    return new EDDSA(curve);\n\n  curve = curves[curve].curve;\n  this.curve = curve;\n  this.g = curve.g;\n  this.g.precompute(curve.n.bitLength() + 1);\n\n  this.pointClass = curve.point().constructor;\n  this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n  this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n  message = parseBytes(message);\n  var key = this.keyFromSecret(secret);\n  var r = this.hashInt(key.messagePrefix(), message);\n  var R = this.g.mul(r);\n  var Rencoded = this.encodePoint(R);\n  var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n    .mul(key.priv());\n  var S = r.add(s_).umod(this.curve.n);\n  return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n  message = parseBytes(message);\n  sig = this.makeSignature(sig);\n  var key = this.keyFromPublic(pub);\n  var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n  var SG = this.g.mul(sig.S());\n  var RplusAh = sig.R().add(key.pub().mul(h));\n  return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n  var hash = this.hash();\n  for (var i = 0; i < arguments.length; i++)\n    hash.update(arguments[i]);\n  return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n  return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n  return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n  if (sig instanceof Signature)\n    return sig;\n  return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n  var enc = point.getY().toArray('le', this.encodingLength);\n  enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n  return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n  bytes = utils.parseBytes(bytes);\n\n  var lastIx = bytes.length - 1;\n  var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n  var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n  var y = utils.intFromLE(normed);\n  return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n  return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n  return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n  return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n  if (!buffer.hasOwnProperty(key)) continue\n  if (key === 'SlowBuffer' || key === 'Buffer') continue\n  safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue\n  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n  Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n  Safer.from = function (value, encodingOrOffset, length) {\n    if (typeof value === 'number') {\n      throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n    }\n    if (value && typeof value.length === 'undefined') {\n      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n    }\n    return Buffer(value, encodingOrOffset, length)\n  }\n}\n\nif (!Safer.alloc) {\n  Safer.alloc = function (size, fill, encoding) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n    }\n    var buf = Buffer(size)\n    if (!fill || fill.length === 0) {\n      buf.fill(0)\n    } else if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n    return buf\n  }\n}\n\nif (!safer.kStringMaxLength) {\n  try {\n    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n  } catch (e) {\n    // we can't determine kStringMaxLength in environments where process.binding\n    // is unsupported, so let's not set it\n  }\n}\n\nif (!safer.constants) {\n  safer.constants = {\n    MAX_LENGTH: safer.kMaxLength\n  }\n  if (safer.kStringMaxLength) {\n    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n  }\n}\n\nmodule.exports = safer\n","'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n  this._reporterState = {\n    obj: null,\n    path: [],\n    options: options || {},\n    errors: []\n  };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n  return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n  const state = this._reporterState;\n\n  return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n  const state = this._reporterState;\n\n  state.obj = data.obj;\n  state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n  return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n  const state = this._reporterState;\n\n  state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n  const state = this._reporterState;\n\n  this.exitKey(index);\n  if (state.obj !== null)\n    state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n  return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n  const state = this._reporterState;\n\n  const prev = state.obj;\n  state.obj = {};\n  return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n  const state = this._reporterState;\n\n  const now = state.obj;\n  state.obj = prev;\n  return now;\n};\n\nReporter.prototype.error = function error(msg) {\n  let err;\n  const state = this._reporterState;\n\n  const inherited = msg instanceof ReporterError;\n  if (inherited) {\n    err = msg;\n  } else {\n    err = new ReporterError(state.path.map(function(elem) {\n      return '[' + JSON.stringify(elem) + ']';\n    }).join(''), msg.message || msg, msg.stack);\n  }\n\n  if (!state.options.partial)\n    throw err;\n\n  if (!inherited)\n    state.errors.push(err);\n\n  return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n  const state = this._reporterState;\n  if (!state.options.partial)\n    return result;\n\n  return {\n    result: this.isError(result) ? null : result,\n    errors: state.errors\n  };\n};\n\nfunction ReporterError(path, msg) {\n  this.path = path;\n  this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n  this.message = msg + ' at: ' + (this.path || '(shallow)');\n  if (Error.captureStackTrace)\n    Error.captureStackTrace(this, ReporterError);\n\n  if (!this.stack) {\n    try {\n      // IE only adds stack when thrown\n      throw new Error(this.message);\n    } catch (e) {\n      this.stack = e.stack;\n    }\n  }\n  return this;\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n  Reporter.call(this, options);\n  if (!Buffer.isBuffer(base)) {\n    this.error('Input not Buffer');\n    return;\n  }\n\n  this.base = base;\n  this.offset = 0;\n  this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n  if (data instanceof DecoderBuffer) {\n    return true;\n  }\n\n  // Or accept compatible API\n  const isCompatible = typeof data === 'object' &&\n    Buffer.isBuffer(data.base) &&\n    data.constructor.name === 'DecoderBuffer' &&\n    typeof data.offset === 'number' &&\n    typeof data.length === 'number' &&\n    typeof data.save === 'function' &&\n    typeof data.restore === 'function' &&\n    typeof data.isEmpty === 'function' &&\n    typeof data.readUInt8 === 'function' &&\n    typeof data.skip === 'function' &&\n    typeof data.raw === 'function';\n\n  return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n  return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n  // Return skipped data\n  const res = new DecoderBuffer(this.base);\n  res.offset = save.offset;\n  res.length = this.offset;\n\n  this.offset = save.offset;\n  Reporter.prototype.restore.call(this, save.reporter);\n\n  return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n  return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n  if (this.offset + 1 <= this.length)\n    return this.base.readUInt8(this.offset++, true);\n  else\n    return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n  if (!(this.offset + bytes <= this.length))\n    return this.error(fail || 'DecoderBuffer overrun');\n\n  const res = new DecoderBuffer(this.base);\n\n  // Share reporter state\n  res._reporterState = this._reporterState;\n\n  res.offset = this.offset;\n  res.length = this.offset + bytes;\n  this.offset += bytes;\n  return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n  return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n  if (Array.isArray(value)) {\n    this.length = 0;\n    this.value = value.map(function(item) {\n      if (!EncoderBuffer.isEncoderBuffer(item))\n        item = new EncoderBuffer(item, reporter);\n      this.length += item.length;\n      return item;\n    }, this);\n  } else if (typeof value === 'number') {\n    if (!(0 <= value && value <= 0xff))\n      return reporter.error('non-byte EncoderBuffer value');\n    this.value = value;\n    this.length = 1;\n  } else if (typeof value === 'string') {\n    this.value = value;\n    this.length = Buffer.byteLength(value);\n  } else if (Buffer.isBuffer(value)) {\n    this.value = value;\n    this.length = value.length;\n  } else {\n    return reporter.error('Unsupported type: ' + typeof value);\n  }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n  if (data instanceof EncoderBuffer) {\n    return true;\n  }\n\n  // Or accept compatible API\n  const isCompatible = typeof data === 'object' &&\n    data.constructor.name === 'EncoderBuffer' &&\n    typeof data.length === 'number' &&\n    typeof data.join === 'function';\n\n  return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n  if (!out)\n    out = Buffer.alloc(this.length);\n  if (!offset)\n    offset = 0;\n\n  if (this.length === 0)\n    return out;\n\n  if (Array.isArray(this.value)) {\n    this.value.forEach(function(item) {\n      item.join(out, offset);\n      offset += item.length;\n    });\n  } else {\n    if (typeof this.value === 'number')\n      out[offset] = this.value;\n    else if (typeof this.value === 'string')\n      out.write(this.value, offset);\n    else if (Buffer.isBuffer(this.value))\n      this.value.copy(out, offset);\n    offset += this.length;\n  }\n\n  return out;\n};\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n  'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n  'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n  'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n  'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n  'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n  'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n  '_peekTag', '_decodeTag', '_use',\n  '_decodeStr', '_decodeObjid', '_decodeTime',\n  '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n  '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n  '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n  const state = {};\n  this._baseState = state;\n\n  state.name = name;\n  state.enc = enc;\n\n  state.parent = parent || null;\n  state.children = null;\n\n  // State\n  state.tag = null;\n  state.args = null;\n  state.reverseArgs = null;\n  state.choice = null;\n  state.optional = false;\n  state.any = false;\n  state.obj = false;\n  state.use = null;\n  state.useDecoder = null;\n  state.key = null;\n  state['default'] = null;\n  state.explicit = null;\n  state.implicit = null;\n  state.contains = null;\n\n  // Should create new instance on each method\n  if (!state.parent) {\n    state.children = [];\n    this._wrap();\n  }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n  'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n  'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n  'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n  const state = this._baseState;\n  const cstate = {};\n  stateProps.forEach(function(prop) {\n    cstate[prop] = state[prop];\n  });\n  const res = new this.constructor(cstate.parent);\n  res._baseState = cstate;\n  return res;\n};\n\nNode.prototype._wrap = function wrap() {\n  const state = this._baseState;\n  methods.forEach(function(method) {\n    this[method] = function _wrappedMethod() {\n      const clone = new this.constructor(this);\n      state.children.push(clone);\n      return clone[method].apply(clone, arguments);\n    };\n  }, this);\n};\n\nNode.prototype._init = function init(body) {\n  const state = this._baseState;\n\n  assert(state.parent === null);\n  body.call(this);\n\n  // Filter children\n  state.children = state.children.filter(function(child) {\n    return child._baseState.parent === this;\n  }, this);\n  assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n  const state = this._baseState;\n\n  // Filter children and args\n  const children = args.filter(function(arg) {\n    return arg instanceof this.constructor;\n  }, this);\n  args = args.filter(function(arg) {\n    return !(arg instanceof this.constructor);\n  }, this);\n\n  if (children.length !== 0) {\n    assert(state.children === null);\n    state.children = children;\n\n    // Replace parent to maintain backward link\n    children.forEach(function(child) {\n      child._baseState.parent = this;\n    }, this);\n  }\n  if (args.length !== 0) {\n    assert(state.args === null);\n    state.args = args;\n    state.reverseArgs = args.map(function(arg) {\n      if (typeof arg !== 'object' || arg.constructor !== Object)\n        return arg;\n\n      const res = {};\n      Object.keys(arg).forEach(function(key) {\n        if (key == (key | 0))\n          key |= 0;\n        const value = arg[key];\n        res[value] = key;\n      });\n      return res;\n    });\n  }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n  Node.prototype[method] = function _overrided() {\n    const state = this._baseState;\n    throw new Error(method + ' not implemented for encoding: ' + state.enc);\n  };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n  Node.prototype[tag] = function _tagMethod() {\n    const state = this._baseState;\n    const args = Array.prototype.slice.call(arguments);\n\n    assert(state.tag === null);\n    state.tag = tag;\n\n    this._useArgs(args);\n\n    return this;\n  };\n});\n\nNode.prototype.use = function use(item) {\n  assert(item);\n  const state = this._baseState;\n\n  assert(state.use === null);\n  state.use = item;\n\n  return this;\n};\n\nNode.prototype.optional = function optional() {\n  const state = this._baseState;\n\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.def = function def(val) {\n  const state = this._baseState;\n\n  assert(state['default'] === null);\n  state['default'] = val;\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n  const state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.explicit = num;\n\n  return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n  const state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.implicit = num;\n\n  return this;\n};\n\nNode.prototype.obj = function obj() {\n  const state = this._baseState;\n  const args = Array.prototype.slice.call(arguments);\n\n  state.obj = true;\n\n  if (args.length !== 0)\n    this._useArgs(args);\n\n  return this;\n};\n\nNode.prototype.key = function key(newKey) {\n  const state = this._baseState;\n\n  assert(state.key === null);\n  state.key = newKey;\n\n  return this;\n};\n\nNode.prototype.any = function any() {\n  const state = this._baseState;\n\n  state.any = true;\n\n  return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n  const state = this._baseState;\n\n  assert(state.choice === null);\n  state.choice = obj;\n  this._useArgs(Object.keys(obj).map(function(key) {\n    return obj[key];\n  }));\n\n  return this;\n};\n\nNode.prototype.contains = function contains(item) {\n  const state = this._baseState;\n\n  assert(state.use === null);\n  state.contains = item;\n\n  return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n  const state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return input.wrapResult(state.children[0]._decode(input, options));\n\n  let result = state['default'];\n  let present = true;\n\n  let prevKey = null;\n  if (state.key !== null)\n    prevKey = input.enterKey(state.key);\n\n  // Check if tag is there\n  if (state.optional) {\n    let tag = null;\n    if (state.explicit !== null)\n      tag = state.explicit;\n    else if (state.implicit !== null)\n      tag = state.implicit;\n    else if (state.tag !== null)\n      tag = state.tag;\n\n    if (tag === null && !state.any) {\n      // Trial and Error\n      const save = input.save();\n      try {\n        if (state.choice === null)\n          this._decodeGeneric(state.tag, input, options);\n        else\n          this._decodeChoice(input, options);\n        present = true;\n      } catch (e) {\n        present = false;\n      }\n      input.restore(save);\n    } else {\n      present = this._peekTag(input, tag, state.any);\n\n      if (input.isError(present))\n        return present;\n    }\n  }\n\n  // Push object on stack\n  let prevObj;\n  if (state.obj && present)\n    prevObj = input.enterObject();\n\n  if (present) {\n    // Unwrap explicit values\n    if (state.explicit !== null) {\n      const explicit = this._decodeTag(input, state.explicit);\n      if (input.isError(explicit))\n        return explicit;\n      input = explicit;\n    }\n\n    const start = input.offset;\n\n    // Unwrap implicit and normal values\n    if (state.use === null && state.choice === null) {\n      let save;\n      if (state.any)\n        save = input.save();\n      const body = this._decodeTag(\n        input,\n        state.implicit !== null ? state.implicit : state.tag,\n        state.any\n      );\n      if (input.isError(body))\n        return body;\n\n      if (state.any)\n        result = input.raw(save);\n      else\n        input = body;\n    }\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), start, input.length, 'tagged');\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), input.offset, input.length, 'content');\n\n    // Select proper method for tag\n    if (state.any) {\n      // no-op\n    } else if (state.choice === null) {\n      result = this._decodeGeneric(state.tag, input, options);\n    } else {\n      result = this._decodeChoice(input, options);\n    }\n\n    if (input.isError(result))\n      return result;\n\n    // Decode children\n    if (!state.any && state.choice === null && state.children !== null) {\n      state.children.forEach(function decodeChildren(child) {\n        // NOTE: We are ignoring errors here, to let parser continue with other\n        // parts of encoded data\n        child._decode(input, options);\n      });\n    }\n\n    // Decode contained/encoded by schema, only in bit or octet strings\n    if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n      const data = new DecoderBuffer(result);\n      result = this._getUse(state.contains, input._reporterState.obj)\n        ._decode(data, options);\n    }\n  }\n\n  // Pop object\n  if (state.obj && present)\n    result = input.leaveObject(prevObj);\n\n  // Set key\n  if (state.key !== null && (result !== null || present === true))\n    input.leaveKey(prevKey, state.key, result);\n  else if (prevKey !== null)\n    input.exitKey(prevKey);\n\n  return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n  const state = this._baseState;\n\n  if (tag === 'seq' || tag === 'set')\n    return null;\n  if (tag === 'seqof' || tag === 'setof')\n    return this._decodeList(input, tag, state.args[0], options);\n  else if (/str$/.test(tag))\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'objid' && state.args)\n    return this._decodeObjid(input, state.args[0], state.args[1], options);\n  else if (tag === 'objid')\n    return this._decodeObjid(input, null, null, options);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._decodeTime(input, tag, options);\n  else if (tag === 'null_')\n    return this._decodeNull(input, options);\n  else if (tag === 'bool')\n    return this._decodeBool(input, options);\n  else if (tag === 'objDesc')\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'int' || tag === 'enum')\n    return this._decodeInt(input, state.args && state.args[0], options);\n\n  if (state.use !== null) {\n    return this._getUse(state.use, input._reporterState.obj)\n      ._decode(input, options);\n  } else {\n    return input.error('unknown tag: ' + tag);\n  }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n  const state = this._baseState;\n  // Create altered use decoder if implicit is set\n  state.useDecoder = this._use(entity, obj);\n  assert(state.useDecoder._baseState.parent === null);\n  state.useDecoder = state.useDecoder._baseState.children[0];\n  if (state.implicit !== state.useDecoder._baseState.implicit) {\n    state.useDecoder = state.useDecoder.clone();\n    state.useDecoder._baseState.implicit = state.implicit;\n  }\n  return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n  const state = this._baseState;\n  let result = null;\n  let match = false;\n\n  Object.keys(state.choice).some(function(key) {\n    const save = input.save();\n    const node = state.choice[key];\n    try {\n      const value = node._decode(input, options);\n      if (input.isError(value))\n        return false;\n\n      result = { type: key, value: value };\n      match = true;\n    } catch (e) {\n      input.restore(save);\n      return false;\n    }\n    return true;\n  }, this);\n\n  if (!match)\n    return input.error('Choice not matched');\n\n  return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n  return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n  const state = this._baseState;\n  if (state['default'] !== null && state['default'] === data)\n    return;\n\n  const result = this._encodeValue(data, reporter, parent);\n  if (result === undefined)\n    return;\n\n  if (this._skipDefault(result, reporter, parent))\n    return;\n\n  return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n  const state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return state.children[0]._encode(data, reporter || new Reporter());\n\n  let result = null;\n\n  // Set reporter to share it with a child class\n  this.reporter = reporter;\n\n  // Check if data is there\n  if (state.optional && data === undefined) {\n    if (state['default'] !== null)\n      data = state['default'];\n    else\n      return;\n  }\n\n  // Encode children first\n  let content = null;\n  let primitive = false;\n  if (state.any) {\n    // Anything that was given is translated to buffer\n    result = this._createEncoderBuffer(data);\n  } else if (state.choice) {\n    result = this._encodeChoice(data, reporter);\n  } else if (state.contains) {\n    content = this._getUse(state.contains, parent)._encode(data, reporter);\n    primitive = true;\n  } else if (state.children) {\n    content = state.children.map(function(child) {\n      if (child._baseState.tag === 'null_')\n        return child._encode(null, reporter, data);\n\n      if (child._baseState.key === null)\n        return reporter.error('Child should have a key');\n      const prevKey = reporter.enterKey(child._baseState.key);\n\n      if (typeof data !== 'object')\n        return reporter.error('Child expected, but input is not object');\n\n      const res = child._encode(data[child._baseState.key], reporter, data);\n      reporter.leaveKey(prevKey);\n\n      return res;\n    }, this).filter(function(child) {\n      return child;\n    });\n    content = this._createEncoderBuffer(content);\n  } else {\n    if (state.tag === 'seqof' || state.tag === 'setof') {\n      // TODO(indutny): this should be thrown on DSL level\n      if (!(state.args && state.args.length === 1))\n        return reporter.error('Too many args for : ' + state.tag);\n\n      if (!Array.isArray(data))\n        return reporter.error('seqof/setof, but data is not Array');\n\n      const child = this.clone();\n      child._baseState.implicit = null;\n      content = this._createEncoderBuffer(data.map(function(item) {\n        const state = this._baseState;\n\n        return this._getUse(state.args[0], data)._encode(item, reporter);\n      }, child));\n    } else if (state.use !== null) {\n      result = this._getUse(state.use, parent)._encode(data, reporter);\n    } else {\n      content = this._encodePrimitive(state.tag, data);\n      primitive = true;\n    }\n  }\n\n  // Encode data itself\n  if (!state.any && state.choice === null) {\n    const tag = state.implicit !== null ? state.implicit : state.tag;\n    const cls = state.implicit === null ? 'universal' : 'context';\n\n    if (tag === null) {\n      if (state.use === null)\n        reporter.error('Tag could be omitted only for .use()');\n    } else {\n      if (state.use === null)\n        result = this._encodeComposite(tag, primitive, cls, content);\n    }\n  }\n\n  // Wrap in explicit\n  if (state.explicit !== null)\n    result = this._encodeComposite(state.explicit, false, 'context', result);\n\n  return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n  const state = this._baseState;\n\n  const node = state.choice[data.type];\n  if (!node) {\n    assert(\n      false,\n      data.type + ' not found in ' +\n            JSON.stringify(Object.keys(state.choice)));\n  }\n  return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n  const state = this._baseState;\n\n  if (/str$/.test(tag))\n    return this._encodeStr(data, tag);\n  else if (tag === 'objid' && state.args)\n    return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n  else if (tag === 'objid')\n    return this._encodeObjid(data, null, null);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._encodeTime(data, tag);\n  else if (tag === 'null_')\n    return this._encodeNull();\n  else if (tag === 'int' || tag === 'enum')\n    return this._encodeInt(data, state.args && state.reverseArgs[0]);\n  else if (tag === 'bool')\n    return this._encodeBool(data);\n  else if (tag === 'objDesc')\n    return this._encodeStr(data, tag);\n  else\n    throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n  return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n  return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n","'use strict';\n\n// Helper\nfunction reverse(map) {\n  const res = {};\n\n  Object.keys(map).forEach(function(key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key)\n      key = key | 0;\n\n    const value = map[key];\n    res[value] = key;\n  });\n\n  return res;\n}\n\nexports.tagClass = {\n  0: 'universal',\n  1: 'application',\n  2: 'context',\n  3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n  0x00: 'end',\n  0x01: 'bool',\n  0x02: 'int',\n  0x03: 'bitstr',\n  0x04: 'octstr',\n  0x05: 'null_',\n  0x06: 'objid',\n  0x07: 'objDesc',\n  0x08: 'external',\n  0x09: 'real',\n  0x0a: 'enum',\n  0x0b: 'embed',\n  0x0c: 'utf8str',\n  0x0d: 'relativeOid',\n  0x10: 'seq',\n  0x11: 'set',\n  0x12: 'numstr',\n  0x13: 'printstr',\n  0x14: 't61str',\n  0x15: 'videostr',\n  0x16: 'ia5str',\n  0x17: 'utctime',\n  0x18: 'gentime',\n  0x19: 'graphstr',\n  0x1a: 'iso646str',\n  0x1b: 'genstr',\n  0x1c: 'unistr',\n  0x1d: 'charstr',\n  0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n  return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n  primitive,\n  cls,\n  content) {\n  const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n  // Short form\n  if (content.length < 0x80) {\n    const header = Buffer.alloc(2);\n    header[0] = encodedTag;\n    header[1] = content.length;\n    return this._createEncoderBuffer([ header, content ]);\n  }\n\n  // Long form\n  // Count octets required to store length\n  let lenOctets = 1;\n  for (let i = content.length; i >= 0x100; i >>= 8)\n    lenOctets++;\n\n  const header = Buffer.alloc(1 + 1 + lenOctets);\n  header[0] = encodedTag;\n  header[1] = 0x80 | lenOctets;\n\n  for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n    header[i] = j & 0xff;\n\n  return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n  if (tag === 'bitstr') {\n    return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n  } else if (tag === 'bmpstr') {\n    const buf = Buffer.alloc(str.length * 2);\n    for (let i = 0; i < str.length; i++) {\n      buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n    }\n    return this._createEncoderBuffer(buf);\n  } else if (tag === 'numstr') {\n    if (!this._isNumstr(str)) {\n      return this.reporter.error('Encoding of string type: numstr supports ' +\n                                 'only digits and space');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'printstr') {\n    if (!this._isPrintstr(str)) {\n      return this.reporter.error('Encoding of string type: printstr supports ' +\n                                 'only latin upper and lower case letters, ' +\n                                 'digits, space, apostrophe, left and rigth ' +\n                                 'parenthesis, plus sign, comma, hyphen, ' +\n                                 'dot, slash, colon, equal sign, ' +\n                                 'question mark');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (/str$/.test(tag)) {\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'objDesc') {\n    return this._createEncoderBuffer(str);\n  } else {\n    return this.reporter.error('Encoding of string type: ' + tag +\n                               ' unsupported');\n  }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n  if (typeof id === 'string') {\n    if (!values)\n      return this.reporter.error('string objid given, but no values map found');\n    if (!values.hasOwnProperty(id))\n      return this.reporter.error('objid not found in values map');\n    id = values[id].split(/[\\s.]+/g);\n    for (let i = 0; i < id.length; i++)\n      id[i] |= 0;\n  } else if (Array.isArray(id)) {\n    id = id.slice();\n    for (let i = 0; i < id.length; i++)\n      id[i] |= 0;\n  }\n\n  if (!Array.isArray(id)) {\n    return this.reporter.error('objid() should be either array or string, ' +\n                               'got: ' + JSON.stringify(id));\n  }\n\n  if (!relative) {\n    if (id[1] >= 40)\n      return this.reporter.error('Second objid identifier OOB');\n    id.splice(0, 2, id[0] * 40 + id[1]);\n  }\n\n  // Count number of octets\n  let size = 0;\n  for (let i = 0; i < id.length; i++) {\n    let ident = id[i];\n    for (size++; ident >= 0x80; ident >>= 7)\n      size++;\n  }\n\n  const objid = Buffer.alloc(size);\n  let offset = objid.length - 1;\n  for (let i = id.length - 1; i >= 0; i--) {\n    let ident = id[i];\n    objid[offset--] = ident & 0x7f;\n    while ((ident >>= 7) > 0)\n      objid[offset--] = 0x80 | (ident & 0x7f);\n  }\n\n  return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n  if (num < 10)\n    return '0' + num;\n  else\n    return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n  let str;\n  const date = new Date(time);\n\n  if (tag === 'gentime') {\n    str = [\n      two(date.getUTCFullYear()),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else if (tag === 'utctime') {\n    str = [\n      two(date.getUTCFullYear() % 100),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else {\n    this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n  }\n\n  return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n  return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n  if (typeof num === 'string') {\n    if (!values)\n      return this.reporter.error('String int or enum given, but no values map');\n    if (!values.hasOwnProperty(num)) {\n      return this.reporter.error('Values map doesn\\'t contain: ' +\n                                 JSON.stringify(num));\n    }\n    num = values[num];\n  }\n\n  // Bignum, assume big endian\n  if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n    const numArray = num.toArray();\n    if (!num.sign && numArray[0] & 0x80) {\n      numArray.unshift(0);\n    }\n    num = Buffer.from(numArray);\n  }\n\n  if (Buffer.isBuffer(num)) {\n    let size = num.length;\n    if (num.length === 0)\n      size++;\n\n    const out = Buffer.alloc(size);\n    num.copy(out);\n    if (num.length === 0)\n      out[0] = 0;\n    return this._createEncoderBuffer(out);\n  }\n\n  if (num < 0x80)\n    return this._createEncoderBuffer(num);\n\n  if (num < 0x100)\n    return this._createEncoderBuffer([0, num]);\n\n  let size = 1;\n  for (let i = num; i >= 0x100; i >>= 8)\n    size++;\n\n  const out = new Array(size);\n  for (let i = out.length - 1; i >= 0; i--) {\n    out[i] = num & 0xff;\n    num >>= 8;\n  }\n  if(out[0] & 0x80) {\n    out.unshift(0);\n  }\n\n  return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n  return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n  const state = this._baseState;\n  let i;\n  if (state['default'] === null)\n    return false;\n\n  const data = dataBuffer.join();\n  if (state.defaultBuffer === undefined)\n    state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n  if (data.length !== state.defaultBuffer.length)\n    return false;\n\n  for (i=0; i < data.length; i++)\n    if (data[i] !== state.defaultBuffer[i])\n      return false;\n\n  return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n  let res;\n\n  if (tag === 'seqof')\n    tag = 'seq';\n  else if (tag === 'setof')\n    tag = 'set';\n\n  if (der.tagByName.hasOwnProperty(tag))\n    res = der.tagByName[tag];\n  else if (typeof tag === 'number' && (tag | 0) === tag)\n    res = tag;\n  else\n    return reporter.error('Unknown tag: ' + tag);\n\n  if (res >= 0x1f)\n    return reporter.error('Multi-octet tag encoding unsupported');\n\n  if (!primitive)\n    res |= 0x20;\n\n  res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n  return res;\n}\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n  DEREncoder.call(this, entity);\n  this.enc = 'pem';\n}\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n  const buf = DEREncoder.prototype.encode.call(this, data);\n\n  const p = buf.toString('base64');\n  const out = [ '-----BEGIN ' + options.label + '-----' ];\n  for (let i = 0; i < p.length; i += 64)\n    out.push(p.slice(i, i + 64));\n  out.push('-----END ' + options.label + '-----');\n  return out.join('\\n');\n};\n","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n  if (!DecoderBuffer.isDecoderBuffer(data)) {\n    data = new DecoderBuffer(data, options);\n  }\n\n  return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n  if (buffer.isEmpty())\n    return false;\n\n  const state = buffer.save();\n  const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  buffer.restore(state);\n\n  return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n    (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n  const decodedTag = derDecodeTag(buffer,\n    'Failed to decode tag of \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  let len = derDecodeLen(buffer,\n    decodedTag.primitive,\n    'Failed to get length of \"' + tag + '\"');\n\n  // Failure\n  if (buffer.isError(len))\n    return len;\n\n  if (!any &&\n      decodedTag.tag !== tag &&\n      decodedTag.tagStr !== tag &&\n      decodedTag.tagStr + 'of' !== tag) {\n    return buffer.error('Failed to match tag: \"' + tag + '\"');\n  }\n\n  if (decodedTag.primitive || len !== null)\n    return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n  // Indefinite length... find END tag\n  const state = buffer.save();\n  const res = this._skipUntilEnd(\n    buffer,\n    'Failed to skip indefinite length body: \"' + this.tag + '\"');\n  if (buffer.isError(res))\n    return res;\n\n  len = buffer.offset - state.offset;\n  buffer.restore(state);\n  return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n  for (;;) {\n    const tag = derDecodeTag(buffer, fail);\n    if (buffer.isError(tag))\n      return tag;\n    const len = derDecodeLen(buffer, tag.primitive, fail);\n    if (buffer.isError(len))\n      return len;\n\n    let res;\n    if (tag.primitive || len !== null)\n      res = buffer.skip(len);\n    else\n      res = this._skipUntilEnd(buffer, fail);\n\n    // Failure\n    if (buffer.isError(res))\n      return res;\n\n    if (tag.tagStr === 'end')\n      break;\n  }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n  options) {\n  const result = [];\n  while (!buffer.isEmpty()) {\n    const possibleEnd = this._peekTag(buffer, 'end');\n    if (buffer.isError(possibleEnd))\n      return possibleEnd;\n\n    const res = decoder.decode(buffer, 'der', options);\n    if (buffer.isError(res) && possibleEnd)\n      break;\n    result.push(res);\n  }\n  return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n  if (tag === 'bitstr') {\n    const unused = buffer.readUInt8();\n    if (buffer.isError(unused))\n      return unused;\n    return { unused: unused, data: buffer.raw() };\n  } else if (tag === 'bmpstr') {\n    const raw = buffer.raw();\n    if (raw.length % 2 === 1)\n      return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n    let str = '';\n    for (let i = 0; i < raw.length / 2; i++) {\n      str += String.fromCharCode(raw.readUInt16BE(i * 2));\n    }\n    return str;\n  } else if (tag === 'numstr') {\n    const numstr = buffer.raw().toString('ascii');\n    if (!this._isNumstr(numstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'numstr unsupported characters');\n    }\n    return numstr;\n  } else if (tag === 'octstr') {\n    return buffer.raw();\n  } else if (tag === 'objDesc') {\n    return buffer.raw();\n  } else if (tag === 'printstr') {\n    const printstr = buffer.raw().toString('ascii');\n    if (!this._isPrintstr(printstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'printstr unsupported characters');\n    }\n    return printstr;\n  } else if (/str$/.test(tag)) {\n    return buffer.raw().toString();\n  } else {\n    return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n  }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n  let result;\n  const identifiers = [];\n  let ident = 0;\n  let subident = 0;\n  while (!buffer.isEmpty()) {\n    subident = buffer.readUInt8();\n    ident <<= 7;\n    ident |= subident & 0x7f;\n    if ((subident & 0x80) === 0) {\n      identifiers.push(ident);\n      ident = 0;\n    }\n  }\n  if (subident & 0x80)\n    identifiers.push(ident);\n\n  const first = (identifiers[0] / 40) | 0;\n  const second = identifiers[0] % 40;\n\n  if (relative)\n    result = identifiers;\n  else\n    result = [first, second].concat(identifiers.slice(1));\n\n  if (values) {\n    let tmp = values[result.join(' ')];\n    if (tmp === undefined)\n      tmp = values[result.join('.')];\n    if (tmp !== undefined)\n      result = tmp;\n  }\n\n  return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n  const str = buffer.raw().toString();\n\n  let year;\n  let mon;\n  let day;\n  let hour;\n  let min;\n  let sec;\n  if (tag === 'gentime') {\n    year = str.slice(0, 4) | 0;\n    mon = str.slice(4, 6) | 0;\n    day = str.slice(6, 8) | 0;\n    hour = str.slice(8, 10) | 0;\n    min = str.slice(10, 12) | 0;\n    sec = str.slice(12, 14) | 0;\n  } else if (tag === 'utctime') {\n    year = str.slice(0, 2) | 0;\n    mon = str.slice(2, 4) | 0;\n    day = str.slice(4, 6) | 0;\n    hour = str.slice(6, 8) | 0;\n    min = str.slice(8, 10) | 0;\n    sec = str.slice(10, 12) | 0;\n    if (year < 70)\n      year = 2000 + year;\n    else\n      year = 1900 + year;\n  } else {\n    return buffer.error('Decoding ' + tag + ' time is not supported yet');\n  }\n\n  return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n  return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n  const res = buffer.readUInt8();\n  if (buffer.isError(res))\n    return res;\n  else\n    return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n  // Bigint, return as it is (assume big endian)\n  const raw = buffer.raw();\n  let res = new bignum(raw);\n\n  if (values)\n    res = values[res.toString(10)] || res;\n\n  return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n  let tag = buf.readUInt8(fail);\n  if (buf.isError(tag))\n    return tag;\n\n  const cls = der.tagClass[tag >> 6];\n  const primitive = (tag & 0x20) === 0;\n\n  // Multi-octet tag - load\n  if ((tag & 0x1f) === 0x1f) {\n    let oct = tag;\n    tag = 0;\n    while ((oct & 0x80) === 0x80) {\n      oct = buf.readUInt8(fail);\n      if (buf.isError(oct))\n        return oct;\n\n      tag <<= 7;\n      tag |= oct & 0x7f;\n    }\n  } else {\n    tag &= 0x1f;\n  }\n  const tagStr = der.tag[tag];\n\n  return {\n    cls: cls,\n    primitive: primitive,\n    tag: tag,\n    tagStr: tagStr\n  };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n  let len = buf.readUInt8(fail);\n  if (buf.isError(len))\n    return len;\n\n  // Indefinite form\n  if (!primitive && len === 0x80)\n    return null;\n\n  // Definite form\n  if ((len & 0x80) === 0) {\n    // Short form\n    return len;\n  }\n\n  // Long form\n  const num = len & 0x7f;\n  if (num > 4)\n    return buf.error('length octect is too long');\n\n  len = 0;\n  for (let i = 0; i < num; i++) {\n    len <<= 8;\n    const j = buf.readUInt8(fail);\n    if (buf.isError(j))\n      return j;\n    len |= j;\n  }\n\n  return len;\n}\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n  DERDecoder.call(this, entity);\n  this.enc = 'pem';\n}\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n  const lines = data.toString().split(/[\\r\\n]+/g);\n\n  const label = options.label.toUpperCase();\n\n  const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n  let start = -1;\n  let end = -1;\n  for (let i = 0; i < lines.length; i++) {\n    const match = lines[i].match(re);\n    if (match === null)\n      continue;\n\n    if (match[2] !== label)\n      continue;\n\n    if (start === -1) {\n      if (match[1] !== 'BEGIN')\n        break;\n      start = i;\n    } else {\n      if (match[1] !== 'END')\n        break;\n      end = i;\n      break;\n    }\n  }\n  if (start === -1 || end === -1)\n    throw new Error('PEM section not found for: ' + label);\n\n  const base64 = lines.slice(start + 1, end).join('');\n  // Remove excessive symbols\n  base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n  const input = Buffer.from(base64, 'base64');\n  return DERDecoder.prototype.decode.call(this, input, options);\n};\n","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst api = exports;\n\napi.define = function define(name, body) {\n  return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n  this.name = name;\n  this.body = body;\n\n  this.decoders = {};\n  this.encoders = {};\n}\n\nEntity.prototype._createNamed = function createNamed(Base) {\n  const name = this.name;\n\n  function Generated(entity) {\n    this._initNamed(entity, name);\n  }\n  inherits(Generated, Base);\n  Generated.prototype._initNamed = function _initNamed(entity, name) {\n    Base.call(this, entity, name);\n  };\n\n  return new Generated(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n  enc = enc || 'der';\n  // Lazily create decoder\n  if (!this.decoders.hasOwnProperty(enc))\n    this.decoders[enc] = this._createNamed(decoders[enc]);\n  return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n  return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n  enc = enc || 'der';\n  // Lazily create encoder\n  if (!this.encoders.hasOwnProperty(enc))\n    this.encoders[enc] = this._createNamed(encoders[enc]);\n  return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n  return this._getEncoder(enc).encode(data, reporter);\n};\n","'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n  const res = {};\n\n  Object.keys(map).forEach(function(key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key)\n      key = key | 0;\n\n    const value = map[key];\n    res[value] = key;\n  });\n\n  return res;\n};\n\nconstants.der = require('./der');\n","'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n  this.choice({\n    utcTime: this.utctime(),\n    generalTime: this.gentime()\n  })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n  this.seq().obj(\n    this.key('type').objid(),\n    this.key('value').any()\n  )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('parameters').optional(),\n    this.key('curve').objid().optional()\n  )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n  this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n  this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n  this.choice({\n    rdnSequence: this.use(RDNSequence)\n  })\n})\n\nvar Validity = asn.define('Validity', function () {\n  this.seq().obj(\n    this.key('notBefore').use(Time),\n    this.key('notAfter').use(Time)\n  )\n})\n\nvar Extension = asn.define('Extension', function () {\n  this.seq().obj(\n    this.key('extnID').objid(),\n    this.key('critical').bool().def(false),\n    this.key('extnValue').octstr()\n  )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n  this.seq().obj(\n    this.key('version').explicit(0).int().optional(),\n    this.key('serialNumber').int(),\n    this.key('signature').use(AlgorithmIdentifier),\n    this.key('issuer').use(Name),\n    this.key('validity').use(Validity),\n    this.key('subject').use(Name),\n    this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n    this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n    this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n    this.key('extensions').explicit(3).seqof(Extension).optional()\n  )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n  this.seq().obj(\n    this.key('tbsCertificate').use(TBSCertificate),\n    this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n    this.key('signatureValue').bitstr()\n  )\n})\n\nmodule.exports = X509Certificate\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('modulus').int(),\n    this.key('publicExponent').int(),\n    this.key('privateExponent').int(),\n    this.key('prime1').int(),\n    this.key('prime2').int(),\n    this.key('exponent1').int(),\n    this.key('exponent2').int(),\n    this.key('coefficient').int()\n  )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n  this.seq().obj(\n    this.key('modulus').int(),\n    this.key('publicExponent').int()\n  )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('none').null_().optional(),\n    this.key('curve').objid().optional(),\n    this.key('params').seq().obj(\n      this.key('p').int(),\n      this.key('q').int(),\n      this.key('g').int()\n    ).optional()\n  )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').seq().obj(\n      this.key('id').objid(),\n      this.key('decrypt').seq().obj(\n        this.key('kde').seq().obj(\n          this.key('id').objid(),\n          this.key('kdeparams').seq().obj(\n            this.key('salt').octstr(),\n            this.key('iters').int()\n          )\n        ),\n        this.key('cipher').seq().obj(\n          this.key('algo').objid(),\n          this.key('iv').octstr()\n        )\n      )\n    ),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('p').int(),\n    this.key('q').int(),\n    this.key('g').int(),\n    this.key('pub_key').int(),\n    this.key('priv_key').int()\n  )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n  this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('privateKey').octstr(),\n    this.key('parameters').optional().explicit(0).use(ECParameters),\n    this.key('publicKey').optional().explicit(1).bitstr()\n  )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n  this.choice({\n    namedCurve: this.objid()\n  })\n})\n\nexports.signature = asn1.define('signature', function () {\n  this.seq().obj(\n    this.key('r').int(),\n    this.key('s').int()\n  )\n})\n","// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n  var key = okey.toString()\n  var match = key.match(findProc)\n  var decrypted\n  if (!match) {\n    var match2 = key.match(fullRegex)\n    decrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n  } else {\n    var suite = 'aes' + match[1]\n    var iv = Buffer.from(match[2], 'hex')\n    var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n    var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n    var out = []\n    var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n    out.push(cipher.update(cipherText))\n    out.push(cipher.final())\n    decrypted = Buffer.concat(out)\n  }\n  var tag = key.match(startRegex)[1]\n  return {\n    tag: tag,\n    data: decrypted\n  }\n}\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n  var password\n  if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n    password = buffer.passphrase\n    buffer = buffer.key\n  }\n  if (typeof buffer === 'string') {\n    buffer = Buffer.from(buffer)\n  }\n\n  var stripped = fixProc(buffer, password)\n\n  var type = stripped.tag\n  var data = stripped.data\n  var subtype, ndata\n  switch (type) {\n    case 'CERTIFICATE':\n      ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n      // falls through\n    case 'PUBLIC KEY':\n      if (!ndata) {\n        ndata = asn1.PublicKey.decode(data, 'der')\n      }\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n        case '1.2.840.10045.2.1':\n          ndata.subjectPrivateKey = ndata.subjectPublicKey\n          return {\n            type: 'ec',\n            data: ndata\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n          return {\n            type: 'dsa',\n            data: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      // throw new Error('unknown key type ' + type)\n    case 'ENCRYPTED PRIVATE KEY':\n      data = asn1.EncryptedPrivateKey.decode(data, 'der')\n      data = decrypt(data, password)\n      // falls through\n    case 'PRIVATE KEY':\n      ndata = asn1.PrivateKey.decode(data, 'der')\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n        case '1.2.840.10045.2.1':\n          return {\n            curve: ndata.algorithm.curve,\n            privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n          return {\n            type: 'dsa',\n            params: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      // throw new Error('unknown key type ' + type)\n    case 'RSA PUBLIC KEY':\n      return asn1.RSAPublicKey.decode(data, 'der')\n    case 'RSA PRIVATE KEY':\n      return asn1.RSAPrivateKey.decode(data, 'der')\n    case 'DSA PRIVATE KEY':\n      return {\n        type: 'dsa',\n        params: asn1.DSAPrivateKey.decode(data, 'der')\n      }\n    case 'EC PRIVATE KEY':\n      data = asn1.ECPrivateKey.decode(data, 'der')\n      return {\n        curve: data.parameters.value,\n        privateKey: data.privateKey\n      }\n    default: throw new Error('unknown key type ' + type)\n  }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n  var salt = data.algorithm.decrypt.kde.kdeparams.salt\n  var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n  var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n  var iv = data.algorithm.decrypt.cipher.iv\n  var cipherText = data.subjectPrivateKey\n  var keylen = parseInt(algo.split('-')[1], 10) / 8\n  var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n  var cipher = ciphers.createDecipheriv(algo, key, iv)\n  var out = []\n  out.push(cipher.update(cipherText))\n  out.push(cipher.final())\n  return Buffer.concat(out)\n}\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n  var priv = parseKeys(key)\n  if (priv.curve) {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n    return ecSign(hash, priv)\n  } else if (priv.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong private key type')\n    return dsaSign(hash, priv, hashType)\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n  }\n  hash = Buffer.concat([tag, hash])\n  var len = priv.modulus.byteLength()\n  var pad = [0, 1]\n  while (hash.length + pad.length + 1 < len) pad.push(0xff)\n  pad.push(0x00)\n  var i = -1\n  while (++i < hash.length) pad.push(hash[i])\n\n  var out = crt(pad, priv)\n  return out\n}\n\nfunction ecSign (hash, priv) {\n  var curveId = curves[priv.curve.join('.')]\n  if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n  var curve = new EC(curveId)\n  var key = curve.keyFromPrivate(priv.privateKey)\n  var out = key.sign(hash)\n\n  return Buffer.from(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n  var x = priv.params.priv_key\n  var p = priv.params.p\n  var q = priv.params.q\n  var g = priv.params.g\n  var r = new BN(0)\n  var k\n  var H = bits2int(hash, q).mod(q)\n  var s = false\n  var kv = getKey(x, q, hash, algo)\n  while (s === false) {\n    k = makeKey(q, kv, algo)\n    r = makeR(g, k, p, q)\n    s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n    if (s.cmpn(0) === 0) {\n      s = false\n      r = new BN(0)\n    }\n  }\n  return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n  r = r.toArray()\n  s = s.toArray()\n\n  // Pad values\n  if (r[0] & 0x80) r = [0].concat(r)\n  if (s[0] & 0x80) s = [0].concat(s)\n\n  var total = r.length + s.length + 4\n  var res = [0x30, total, 0x02, r.length]\n  res = res.concat(r, [0x02, s.length], s)\n  return Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n  x = Buffer.from(x.toArray())\n  if (x.length < q.byteLength()) {\n    var zeros = Buffer.alloc(q.byteLength() - x.length)\n    x = Buffer.concat([zeros, x])\n  }\n  var hlen = hash.length\n  var hbits = bits2octets(hash, q)\n  var v = Buffer.alloc(hlen)\n  v.fill(1)\n  var k = Buffer.alloc(hlen)\n  k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n  v = createHmac(algo, k).update(v).digest()\n  k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest()\n  v = createHmac(algo, k).update(v).digest()\n  return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n  var bits = new BN(obits)\n  var shift = (obits.length << 3) - q.bitLength()\n  if (shift > 0) bits.ishrn(shift)\n  return bits\n}\n\nfunction bits2octets (bits, q) {\n  bits = bits2int(bits, q)\n  bits = bits.mod(q)\n  var out = Buffer.from(bits.toArray())\n  if (out.length < q.byteLength()) {\n    var zeros = Buffer.alloc(q.byteLength() - out.length)\n    out = Buffer.concat([zeros, out])\n  }\n  return out\n}\n\nfunction makeKey (q, kv, algo) {\n  var t\n  var k\n\n  do {\n    t = Buffer.alloc(0)\n\n    while (t.length * 8 < q.bitLength()) {\n      kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n      t = Buffer.concat([t, kv.v])\n    }\n\n    k = bits2int(t, q)\n    kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest()\n    kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n  } while (k.cmp(q) !== -1)\n\n  return k\n}\n\nfunction makeR (g, k, p, q) {\n  return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n  var pub = parseKeys(key)\n  if (pub.type === 'ec') {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n    return ecVerify(sig, hash, pub)\n  } else if (pub.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong public key type')\n    return dsaVerify(sig, hash, pub)\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n  }\n  hash = Buffer.concat([tag, hash])\n  var len = pub.modulus.byteLength()\n  var pad = [1]\n  var padNum = 0\n  while (hash.length + pad.length + 2 < len) {\n    pad.push(0xff)\n    padNum++\n  }\n  pad.push(0x00)\n  var i = -1\n  while (++i < hash.length) {\n    pad.push(hash[i])\n  }\n  pad = Buffer.from(pad)\n  var red = BN.mont(pub.modulus)\n  sig = new BN(sig).toRed(red)\n\n  sig = sig.redPow(new BN(pub.publicExponent))\n  sig = Buffer.from(sig.fromRed().toArray())\n  var out = padNum < 8 ? 1 : 0\n  len = Math.min(sig.length, pad.length)\n  if (sig.length !== pad.length) out = 1\n\n  i = -1\n  while (++i < len) out |= sig[i] ^ pad[i]\n  return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n  var curveId = curves[pub.data.algorithm.curve.join('.')]\n  if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n  var curve = new EC(curveId)\n  var pubkey = pub.data.subjectPrivateKey.data\n\n  return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n  var p = pub.data.p\n  var q = pub.data.q\n  var g = pub.data.g\n  var y = pub.data.pub_key\n  var unpacked = parseKeys.signature.decode(sig, 'der')\n  var s = unpacked.s\n  var r = unpacked.r\n  checkValue(s, q)\n  checkValue(r, q)\n  var montp = BN.mont(p)\n  var w = s.invm(q)\n  var v = g.toRed(montp)\n    .redPow(new BN(hash).mul(w).mod(q))\n    .fromRed()\n    .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n    .mod(p)\n    .mod(q)\n  return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n  if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n  if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n","var Buffer = require('safe-buffer').Buffer\nvar createHash = require('create-hash')\nvar stream = require('readable-stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n  algorithms[key].id = Buffer.from(algorithms[key].id, 'hex')\n  algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n  stream.Writable.call(this)\n\n  var data = algorithms[algorithm]\n  if (!data) throw new Error('Unknown message digest')\n\n  this._hashType = data.hash\n  this._hash = createHash(data.hash)\n  this._tag = data.id\n  this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n  this._hash.update(data)\n  done()\n}\n\nSign.prototype.update = function update (data, enc) {\n  if (typeof data === 'string') data = Buffer.from(data, enc)\n\n  this._hash.update(data)\n  return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n  this.end()\n  var hash = this._hash.digest()\n  var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n  return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n  stream.Writable.call(this)\n\n  var data = algorithms[algorithm]\n  if (!data) throw new Error('Unknown message digest')\n\n  this._hash = createHash(data.hash)\n  this._tag = data.id\n  this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n  this._hash.update(data)\n  done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n  if (typeof data === 'string') data = Buffer.from(data, enc)\n\n  this._hash.update(data)\n  return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n  if (typeof sig === 'string') sig = Buffer.from(sig, enc)\n\n  this.end()\n  var hash = this._hash.digest()\n  return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n  return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n  return new Verify(algorithm)\n}\n\nmodule.exports = {\n  Sign: createSign,\n  Verify: createVerify,\n  createSign: createSign,\n  createVerify: createVerify\n}\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n  return new ECDH(curve)\n}\n\nvar aliases = {\n  secp256k1: {\n    name: 'secp256k1',\n    byteLength: 32\n  },\n  secp224r1: {\n    name: 'p224',\n    byteLength: 28\n  },\n  prime256v1: {\n    name: 'p256',\n    byteLength: 32\n  },\n  prime192v1: {\n    name: 'p192',\n    byteLength: 24\n  },\n  ed25519: {\n    name: 'ed25519',\n    byteLength: 32\n  },\n  secp384r1: {\n    name: 'p384',\n    byteLength: 48\n  },\n  secp521r1: {\n    name: 'p521',\n    byteLength: 66\n  }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n  this.curveType = aliases[curve]\n  if (!this.curveType) {\n    this.curveType = {\n      name: curve\n    }\n  }\n  this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n  this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n  this.keys = this.curve.genKeyPair()\n  return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n  inenc = inenc || 'utf8'\n  if (!Buffer.isBuffer(other)) {\n    other = new Buffer(other, inenc)\n  }\n  var otherPub = this.curve.keyFromPublic(other).getPublic()\n  var out = otherPub.mul(this.keys.getPrivate()).getX()\n  return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n  var key = this.keys.getPublic(format === 'compressed', true)\n  if (format === 'hybrid') {\n    if (key[key.length - 1] % 2) {\n      key[0] = 7\n    } else {\n      key[0] = 6\n    }\n  }\n  return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n  return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc)\n  }\n  this.keys._importPublic(pub)\n  return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc)\n  }\n\n  var _priv = new BN(priv)\n  _priv = _priv.toString(16)\n  this.keys = this.curve.genKeyPair()\n  this.keys._importPrivate(_priv)\n  return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n  if (!Array.isArray(bn)) {\n    bn = bn.toArray()\n  }\n  var buf = new Buffer(bn)\n  if (len && buf.length < len) {\n    var zeros = new Buffer(len - buf.length)\n    zeros.fill(0)\n    buf = Buffer.concat([zeros, buf])\n  }\n  if (!enc) {\n    return buf\n  } else {\n    return buf.toString(enc)\n  }\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n  var t = Buffer.alloc(0)\n  var i = 0\n  var c\n  while (t.length < len) {\n    c = i2ops(i++)\n    t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n  }\n  return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n  var out = Buffer.allocUnsafe(4)\n  out.writeUInt32BE(c, 0)\n  return out\n}\n","module.exports = function xor (a, b) {\n  var len = a.length\n  var i = -1\n  while (++i < len) {\n    a[i] ^= b[i]\n  }\n  return a\n}\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n  return Buffer.from(paddedMsg\n    .toRed(BN.mont(key.modulus))\n    .redPow(new BN(key.publicExponent))\n    .fromRed()\n    .toArray())\n}\n\nmodule.exports = withPublic\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n  var padding\n  if (publicKey.padding) {\n    padding = publicKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n  var key = parseKeys(publicKey)\n  var paddedMsg\n  if (padding === 4) {\n    paddedMsg = oaep(key, msg)\n  } else if (padding === 1) {\n    paddedMsg = pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    paddedMsg = new BN(msg)\n    if (paddedMsg.cmp(key.modulus) >= 0) {\n      throw new Error('data too long for modulus')\n    }\n  } else {\n    throw new Error('unknown padding')\n  }\n  if (reverse) {\n    return crt(paddedMsg, key)\n  } else {\n    return withPublic(paddedMsg, key)\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var mLen = msg.length\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  var hLen2 = 2 * hLen\n  if (mLen > k - hLen2 - 2) {\n    throw new Error('message too long')\n  }\n  var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n  var dblen = k - hLen - 1\n  var seed = randomBytes(hLen)\n  var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n  var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n  return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n  var mLen = msg.length\n  var k = key.modulus.byteLength()\n  if (mLen > k - 11) {\n    throw new Error('message too long')\n  }\n  var ps\n  if (reverse) {\n    ps = Buffer.alloc(k - mLen - 3, 0xff)\n  } else {\n    ps = nonZero(k - mLen - 3)\n  }\n  return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n  var out = Buffer.allocUnsafe(len)\n  var i = 0\n  var cache = randomBytes(len * 2)\n  var cur = 0\n  var num\n  while (i < len) {\n    if (cur === cache.length) {\n      cache = randomBytes(len * 2)\n      cur = 0\n    }\n    num = cache[cur++]\n    if (num) {\n      out[i++] = num\n    }\n  }\n  return out\n}\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n  var padding\n  if (privateKey.padding) {\n    padding = privateKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n\n  var key = parseKeys(privateKey)\n  var k = key.modulus.byteLength()\n  if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n    throw new Error('decryption error')\n  }\n  var msg\n  if (reverse) {\n    msg = withPublic(new BN(enc), key)\n  } else {\n    msg = crt(enc, key)\n  }\n  var zBuffer = Buffer.alloc(k - msg.length)\n  msg = Buffer.concat([zBuffer, msg], k)\n  if (padding === 4) {\n    return oaep(key, msg)\n  } else if (padding === 1) {\n    return pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    return msg\n  } else {\n    throw new Error('unknown padding')\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  if (msg[0] !== 0) {\n    throw new Error('decryption error')\n  }\n  var maskedSeed = msg.slice(1, hLen + 1)\n  var maskedDb = msg.slice(hLen + 1)\n  var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n  var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n  if (compare(iHash, db.slice(0, hLen))) {\n    throw new Error('decryption error')\n  }\n  var i = hLen\n  while (db[i] === 0) {\n    i++\n  }\n  if (db[i++] !== 1) {\n    throw new Error('decryption error')\n  }\n  return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n  var p1 = msg.slice(0, 2)\n  var i = 2\n  var status = 0\n  while (msg[i++] !== 0) {\n    if (i >= msg.length) {\n      status++\n      break\n    }\n  }\n  var ps = msg.slice(2, i - 1)\n\n  if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n    status++\n  }\n  if (ps.length < 8) {\n    status++\n  }\n  if (status) {\n    throw new Error('decryption error')\n  }\n  return msg.slice(i)\n}\nfunction compare (a, b) {\n  a = Buffer.from(a)\n  b = Buffer.from(b)\n  var dif = 0\n  var len = a.length\n  if (a.length !== b.length) {\n    dif++\n    len = Math.min(a.length, b.length)\n  }\n  var i = -1\n  while (++i < len) {\n    dif += (a[i] ^ b[i])\n  }\n  return dif\n}\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n  return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n  return exports.privateDecrypt(key, buf, true)\n}\n","'use strict'\n\nfunction oldBrowser () {\n  throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n  if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n    throw new TypeError('offset must be a number')\n  }\n\n  if (offset > kMaxUint32 || offset < 0) {\n    throw new TypeError('offset must be a uint32')\n  }\n\n  if (offset > kBufferMaxLength || offset > length) {\n    throw new RangeError('offset out of range')\n  }\n}\n\nfunction assertSize (size, offset, length) {\n  if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n    throw new TypeError('size must be a number')\n  }\n\n  if (size > kMaxUint32 || size < 0) {\n    throw new TypeError('size must be a uint32')\n  }\n\n  if (size + offset > length || size > kBufferMaxLength) {\n    throw new RangeError('buffer too small')\n  }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n  exports.randomFill = randomFill\n  exports.randomFillSync = randomFillSync\n} else {\n  exports.randomFill = oldBrowser\n  exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  if (typeof offset === 'function') {\n    cb = offset\n    offset = 0\n    size = buf.length\n  } else if (typeof size === 'function') {\n    cb = size\n    size = buf.length - offset\n  } else if (typeof cb !== 'function') {\n    throw new TypeError('\"cb\" argument must be a function')\n  }\n  assertOffset(offset, buf.length)\n  assertSize(size, offset, buf.length)\n  return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n  if (process.browser) {\n    var ourBuf = buf.buffer\n    var uint = new Uint8Array(ourBuf, offset, size)\n    crypto.getRandomValues(uint)\n    if (cb) {\n      process.nextTick(function () {\n        cb(null, buf)\n      })\n      return\n    }\n    return buf\n  }\n  if (cb) {\n    randombytes(size, function (err, bytes) {\n      if (err) {\n        return cb(err)\n      }\n      bytes.copy(buf, offset)\n      cb(null, buf)\n    })\n    return\n  }\n  var bytes = randombytes(size)\n  bytes.copy(buf, offset)\n  return buf\n}\nfunction randomFillSync (buf, offset, size) {\n  if (typeof offset === 'undefined') {\n    offset = 0\n  }\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  assertOffset(offset, buf.length)\n\n  if (size === undefined) size = buf.length - offset\n\n  assertSize(size, offset, buf.length)\n\n  return actualFill(buf, offset, size)\n}\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n  return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n//   'createCredentials'\n// ].forEach(function (name) {\n//   exports[name] = function () {\n//     throw new Error([\n//       'sorry, ' + name + ' is not implemented yet',\n//       'we accept pull requests',\n//       'https://github.com/crypto-browserify/crypto-browserify'\n//     ].join('\\n'))\n//   }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n  throw new Error([\n    'sorry, createCredentials is not implemented yet',\n    'we accept pull requests',\n    'https://github.com/crypto-browserify/crypto-browserify'\n  ].join('\\n'))\n}\n\nexports.constants = {\n  'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n  'DH_CHECK_P_NOT_PRIME': 1,\n  'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n  'DH_NOT_SUITABLE_GENERATOR': 8,\n  'NPN_ENABLED': 1,\n  'ALPN_ENABLED': 1,\n  'RSA_PKCS1_PADDING': 1,\n  'RSA_SSLV23_PADDING': 2,\n  'RSA_NO_PADDING': 3,\n  'RSA_PKCS1_OAEP_PADDING': 4,\n  'RSA_X931_PADDING': 5,\n  'RSA_PKCS1_PSS_PADDING': 6,\n  'POINT_CONVERSION_COMPRESSED': 2,\n  'POINT_CONVERSION_UNCOMPRESSED': 4,\n  'POINT_CONVERSION_HYBRID': 6\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n  const obj = {}\n\n  // Convert buffer to string\n  let lines = src.toString()\n\n  // Convert line breaks to same format\n  lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n  let match\n  while ((match = LINE.exec(lines)) != null) {\n    const key = match[1]\n\n    // Default undefined or null to empty string\n    let value = (match[2] || '')\n\n    // Remove whitespace\n    value = value.trim()\n\n    // Check if double quoted\n    const maybeQuote = value[0]\n\n    // Remove surrounding quotes\n    value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n    // Expand newlines if double quoted\n    if (maybeQuote === '\"') {\n      value = value.replace(/\\\\n/g, '\\n')\n      value = value.replace(/\\\\r/g, '\\r')\n    }\n\n    // Add to object\n    obj[key] = value\n  }\n\n  return obj\n}\n\nfunction _parseVault (options) {\n  const vaultPath = _vaultPath(options)\n\n  // Parse .env.vault\n  const result = DotenvModule.configDotenv({ path: vaultPath })\n  if (!result.parsed) {\n    const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n    err.code = 'MISSING_DATA'\n    throw err\n  }\n\n  // handle scenario for comma separated keys - for use with key rotation\n  // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n  const keys = _dotenvKey(options).split(',')\n  const length = keys.length\n\n  let decrypted\n  for (let i = 0; i < length; i++) {\n    try {\n      // Get full key\n      const key = keys[i].trim()\n\n      // Get instructions for decrypt\n      const attrs = _instructions(result, key)\n\n      // Decrypt\n      decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n      break\n    } catch (error) {\n      // last key\n      if (i + 1 >= length) {\n        throw error\n      }\n      // try next key\n    }\n  }\n\n  // Parse decrypted .env string\n  return DotenvModule.parse(decrypted)\n}\n\nfunction _log (message) {\n  console.log(`[dotenv@${version}][INFO] ${message}`)\n}\n\nfunction _warn (message) {\n  console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n  console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n  // prioritize developer directly setting options.DOTENV_KEY\n  if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n    return options.DOTENV_KEY\n  }\n\n  // secondary infra already contains a DOTENV_KEY environment variable\n  if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n    return process.env.DOTENV_KEY\n  }\n\n  // fallback to empty string\n  return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n  // Parse DOTENV_KEY. Format is a URI\n  let uri\n  try {\n    uri = new URL(dotenvKey)\n  } catch (error) {\n    if (error.code === 'ERR_INVALID_URL') {\n      const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    }\n\n    throw error\n  }\n\n  // Get decrypt key\n  const key = uri.password\n  if (!key) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get environment\n  const environment = uri.searchParams.get('environment')\n  if (!environment) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get ciphertext payload\n  const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n  const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n  if (!ciphertext) {\n    const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n    err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n    throw err\n  }\n\n  return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n  let possibleVaultPath = null\n\n  if (options && options.path && options.path.length > 0) {\n    if (Array.isArray(options.path)) {\n      for (const filepath of options.path) {\n        if (fs.existsSync(filepath)) {\n          possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n        }\n      }\n    } else {\n      possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n    }\n  } else {\n    possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n  }\n\n  if (fs.existsSync(possibleVaultPath)) {\n    return possibleVaultPath\n  }\n\n  return null\n}\n\nfunction _resolveHome (envPath) {\n  return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n  _log('Loading env from encrypted .env.vault')\n\n  const parsed = DotenvModule._parseVault(options)\n\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n\n  DotenvModule.populate(processEnv, parsed, options)\n\n  return { parsed }\n}\n\nfunction configDotenv (options) {\n  const dotenvPath = path.resolve(process.cwd(), '.env')\n  let encoding = 'utf8'\n  const debug = Boolean(options && options.debug)\n\n  if (options && options.encoding) {\n    encoding = options.encoding\n  } else {\n    if (debug) {\n      _debug('No encoding is specified. UTF-8 is used by default')\n    }\n  }\n\n  let optionPaths = [dotenvPath] // default, look for .env\n  if (options && options.path) {\n    if (!Array.isArray(options.path)) {\n      optionPaths = [_resolveHome(options.path)]\n    } else {\n      optionPaths = [] // reset default\n      for (const filepath of options.path) {\n        optionPaths.push(_resolveHome(filepath))\n      }\n    }\n  }\n\n  // Build the parsed data in a temporary object (because we need to return it).  Once we have the final\n  // parsed data, we will combine it with process.env (or options.processEnv if provided).\n  let lastError\n  const parsedAll = {}\n  for (const path of optionPaths) {\n    try {\n      // Specifying an encoding returns a string instead of a buffer\n      const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n      DotenvModule.populate(parsedAll, parsed, options)\n    } catch (e) {\n      if (debug) {\n        _debug(`Failed to load ${path} ${e.message}`)\n      }\n      lastError = e\n    }\n  }\n\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n\n  DotenvModule.populate(processEnv, parsedAll, options)\n\n  if (lastError) {\n    return { parsed: parsedAll, error: lastError }\n  } else {\n    return { parsed: parsedAll }\n  }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n  // fallback to original dotenv if DOTENV_KEY is not set\n  if (_dotenvKey(options).length === 0) {\n    return DotenvModule.configDotenv(options)\n  }\n\n  const vaultPath = _vaultPath(options)\n\n  // dotenvKey exists but .env.vault file does not exist\n  if (!vaultPath) {\n    _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n    return DotenvModule.configDotenv(options)\n  }\n\n  return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n  const key = Buffer.from(keyStr.slice(-64), 'hex')\n  let ciphertext = Buffer.from(encrypted, 'base64')\n\n  const nonce = ciphertext.subarray(0, 12)\n  const authTag = ciphertext.subarray(-16)\n  ciphertext = ciphertext.subarray(12, -16)\n\n  try {\n    const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n    aesgcm.setAuthTag(authTag)\n    return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n  } catch (error) {\n    const isRange = error instanceof RangeError\n    const invalidKeyLength = error.message === 'Invalid key length'\n    const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n    if (isRange || invalidKeyLength) {\n      const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    } else if (decryptionFailed) {\n      const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n      err.code = 'DECRYPTION_FAILED'\n      throw err\n    } else {\n      throw error\n    }\n  }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n  const debug = Boolean(options && options.debug)\n  const override = Boolean(options && options.override)\n\n  if (typeof parsed !== 'object') {\n    const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n    err.code = 'OBJECT_REQUIRED'\n    throw err\n  }\n\n  // Set process.env\n  for (const key of Object.keys(parsed)) {\n    if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n      if (override === true) {\n        processEnv[key] = parsed[key]\n      }\n\n      if (debug) {\n        if (override === true) {\n          _debug(`\"${key}\" is already defined and WAS overwritten`)\n        } else {\n          _debug(`\"${key}\" is already defined and was NOT overwritten`)\n        }\n      }\n    } else {\n      processEnv[key] = parsed[key]\n    }\n  }\n}\n\nconst DotenvModule = {\n  configDotenv,\n  _configVault,\n  _parseVault,\n  config,\n  decrypt,\n  parse,\n  populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","'use strict';\n\nvar parseUrl = require('url').parse;\n\nvar DEFAULT_PORTS = {\n  ftp: 21,\n  gopher: 70,\n  http: 80,\n  https: 443,\n  ws: 80,\n  wss: 443,\n};\n\nvar stringEndsWith = String.prototype.endsWith || function(s) {\n  return s.length <= this.length &&\n    this.indexOf(s, this.length - s.length) !== -1;\n};\n\n/**\n * @param {string|object} url - The URL, or the result from url.parse.\n * @return {string} The URL of the proxy that should handle the request to the\n *  given URL. If no proxy is set, this will be an empty string.\n */\nfunction getProxyForUrl(url) {\n  var parsedUrl = typeof url === 'string' ? parseUrl(url) : url || {};\n  var proto = parsedUrl.protocol;\n  var hostname = parsedUrl.host;\n  var port = parsedUrl.port;\n  if (typeof hostname !== 'string' || !hostname || typeof proto !== 'string') {\n    return '';  // Don't proxy URLs without a valid scheme or host.\n  }\n\n  proto = proto.split(':', 1)[0];\n  // Stripping ports in this way instead of using parsedUrl.hostname to make\n  // sure that the brackets around IPv6 addresses are kept.\n  hostname = hostname.replace(/:\\d*$/, '');\n  port = parseInt(port) || DEFAULT_PORTS[proto] || 0;\n  if (!shouldProxy(hostname, port)) {\n    return '';  // Don't proxy URLs that match NO_PROXY.\n  }\n\n  var proxy =\n    getEnv('npm_config_' + proto + '_proxy') ||\n    getEnv(proto + '_proxy') ||\n    getEnv('npm_config_proxy') ||\n    getEnv('all_proxy');\n  if (proxy && proxy.indexOf('://') === -1) {\n    // Missing scheme in proxy, default to the requested URL's scheme.\n    proxy = proto + '://' + proxy;\n  }\n  return proxy;\n}\n\n/**\n * Determines whether a given URL should be proxied.\n *\n * @param {string} hostname - The host name of the URL.\n * @param {number} port - The effective port of the URL.\n * @returns {boolean} Whether the given URL should be proxied.\n * @private\n */\nfunction shouldProxy(hostname, port) {\n  var NO_PROXY =\n    (getEnv('npm_config_no_proxy') || getEnv('no_proxy')).toLowerCase();\n  if (!NO_PROXY) {\n    return true;  // Always proxy if NO_PROXY is not set.\n  }\n  if (NO_PROXY === '*') {\n    return false;  // Never proxy if wildcard is set.\n  }\n\n  return NO_PROXY.split(/[,\\s]/).every(function(proxy) {\n    if (!proxy) {\n      return true;  // Skip zero-length hosts.\n    }\n    var parsedProxy = proxy.match(/^(.+):(\\d+)$/);\n    var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;\n    var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;\n    if (parsedProxyPort && parsedProxyPort !== port) {\n      return true;  // Skip if ports don't match.\n    }\n\n    if (!/^[.*]/.test(parsedProxyHostname)) {\n      // No wildcards, so stop proxying if there is an exact match.\n      return hostname !== parsedProxyHostname;\n    }\n\n    if (parsedProxyHostname.charAt(0) === '*') {\n      // Remove leading wildcard.\n      parsedProxyHostname = parsedProxyHostname.slice(1);\n    }\n    // Stop proxying if the hostname ends with the no_proxy host.\n    return !stringEndsWith.call(hostname, parsedProxyHostname);\n  });\n}\n\n/**\n * Get the value for an environment variable.\n *\n * @param {string} key - The name of the environment variable.\n * @return {string} The value of the environment variable.\n * @private\n */\nfunction getEnv(key) {\n  return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || '';\n}\n\nexports.getProxyForUrl = getProxyForUrl;\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nfunction noop() {}\n\nexport const createConnection = noop;\nexport const isIP = noop;\n\nexport default {\n  createConnection,\n  isIP,\n};\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nfunction noop() {}\n\nexport const connect = noop;\nexport const TLSSocket = noop;\n\nexport default {\n  connect,\n  TLSSocket,\n};\n","import {\n\tAgent,\n\tClientRequest,\n\tRequestOptions,\n\tAgentCallbackCallback,\n\tAgentCallbackPromise,\n\tAgentCallbackReturn\n} from './index';\n\ntype LegacyCallback = (\n\treq: ClientRequest,\n\topts: RequestOptions,\n\tfn: AgentCallbackCallback\n) => void;\n\nexport default function promisify(fn: LegacyCallback): AgentCallbackPromise {\n\treturn function(this: Agent, req: ClientRequest, opts: RequestOptions) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tfn.call(\n\t\t\t\tthis,\n\t\t\t\treq,\n\t\t\t\topts,\n\t\t\t\t(err: Error | null | undefined, rtn?: AgentCallbackReturn) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(rtn);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t};\n}\n","import net from 'net';\nimport http from 'http';\nimport https from 'https';\nimport { Duplex } from 'stream';\nimport { EventEmitter } from 'events';\nimport createDebug from 'debug';\nimport promisify from './promisify';\n\nconst debug = createDebug('agent-base');\n\nfunction isAgent(v: any): v is createAgent.AgentLike {\n\treturn Boolean(v) && typeof v.addRequest === 'function';\n}\n\nfunction isSecureEndpoint(): boolean {\n\tconst { stack } = new Error();\n\tif (typeof stack !== 'string') return false;\n\treturn stack.split('\\n').some(l => l.indexOf('(https.js:') !== -1  || l.indexOf('node:https:') !== -1);\n}\n\nfunction createAgent(opts?: createAgent.AgentOptions): createAgent.Agent;\nfunction createAgent(\n\tcallback: createAgent.AgentCallback,\n\topts?: createAgent.AgentOptions\n): createAgent.Agent;\nfunction createAgent(\n\tcallback?: createAgent.AgentCallback | createAgent.AgentOptions,\n\topts?: createAgent.AgentOptions\n) {\n\treturn new createAgent.Agent(callback, opts);\n}\n\nnamespace createAgent {\n\texport interface ClientRequest extends http.ClientRequest {\n\t\t_last?: boolean;\n\t\t_hadError?: boolean;\n\t\tmethod: string;\n\t}\n\n\texport interface AgentRequestOptions {\n\t\thost?: string;\n\t\tpath?: string;\n\t\t// `port` on `http.RequestOptions` can be a string or undefined,\n\t\t// but `net.TcpNetConnectOpts` expects only a number\n\t\tport: number;\n\t}\n\n\texport interface HttpRequestOptions\n\t\textends AgentRequestOptions,\n\t\t\tOmit<http.RequestOptions, keyof AgentRequestOptions> {\n\t\tsecureEndpoint: false;\n\t}\n\n\texport interface HttpsRequestOptions\n\t\textends AgentRequestOptions,\n\t\t\tOmit<https.RequestOptions, keyof AgentRequestOptions> {\n\t\tsecureEndpoint: true;\n\t}\n\n\texport type RequestOptions = HttpRequestOptions | HttpsRequestOptions;\n\n\texport type AgentLike = Pick<createAgent.Agent, 'addRequest'> | http.Agent;\n\n\texport type AgentCallbackReturn = Duplex | AgentLike;\n\n\texport type AgentCallbackCallback = (\n\t\terr?: Error | null,\n\t\tsocket?: createAgent.AgentCallbackReturn\n\t) => void;\n\n\texport type AgentCallbackPromise = (\n\t\treq: createAgent.ClientRequest,\n\t\topts: createAgent.RequestOptions\n\t) =>\n\t\t| createAgent.AgentCallbackReturn\n\t\t| Promise<createAgent.AgentCallbackReturn>;\n\n\texport type AgentCallback = typeof Agent.prototype.callback;\n\n\texport type AgentOptions = {\n\t\ttimeout?: number;\n\t};\n\n\t/**\n\t * Base `http.Agent` implementation.\n\t * No pooling/keep-alive is implemented by default.\n\t *\n\t * @param {Function} callback\n\t * @api public\n\t */\n\texport class Agent extends EventEmitter {\n\t\tpublic timeout: number | null;\n\t\tpublic maxFreeSockets: number;\n\t\tpublic maxTotalSockets: number;\n\t\tpublic maxSockets: number;\n\t\tpublic sockets: {\n\t\t\t[key: string]: net.Socket[];\n\t\t};\n\t\tpublic freeSockets: {\n\t\t\t[key: string]: net.Socket[];\n\t\t};\n\t\tpublic requests: {\n\t\t\t[key: string]: http.IncomingMessage[];\n\t\t};\n\t\tpublic options: https.AgentOptions;\n\t\tprivate promisifiedCallback?: createAgent.AgentCallbackPromise;\n\t\tprivate explicitDefaultPort?: number;\n\t\tprivate explicitProtocol?: string;\n\n\t\tconstructor(\n\t\t\tcallback?: createAgent.AgentCallback | createAgent.AgentOptions,\n\t\t\t_opts?: createAgent.AgentOptions\n\t\t) {\n\t\t\tsuper();\n\n\t\t\tlet opts = _opts;\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tthis.callback = callback;\n\t\t\t} else if (callback) {\n\t\t\t\topts = callback;\n\t\t\t}\n\n\t\t\t// Timeout for the socket to be returned from the callback\n\t\t\tthis.timeout = null;\n\t\t\tif (opts && typeof opts.timeout === 'number') {\n\t\t\t\tthis.timeout = opts.timeout;\n\t\t\t}\n\n\t\t\t// These aren't actually used by `agent-base`, but are required\n\t\t\t// for the TypeScript definition files in `@types/node` :/\n\t\t\tthis.maxFreeSockets = 1;\n\t\t\tthis.maxSockets = 1;\n\t\t\tthis.maxTotalSockets = Infinity;\n\t\t\tthis.sockets = {};\n\t\t\tthis.freeSockets = {};\n\t\t\tthis.requests = {};\n\t\t\tthis.options = {};\n\t\t}\n\n\t\tget defaultPort(): number {\n\t\t\tif (typeof this.explicitDefaultPort === 'number') {\n\t\t\t\treturn this.explicitDefaultPort;\n\t\t\t}\n\t\t\treturn isSecureEndpoint() ? 443 : 80;\n\t\t}\n\n\t\tset defaultPort(v: number) {\n\t\t\tthis.explicitDefaultPort = v;\n\t\t}\n\n\t\tget protocol(): string {\n\t\t\tif (typeof this.explicitProtocol === 'string') {\n\t\t\t\treturn this.explicitProtocol;\n\t\t\t}\n\t\t\treturn isSecureEndpoint() ? 'https:' : 'http:';\n\t\t}\n\n\t\tset protocol(v: string) {\n\t\t\tthis.explicitProtocol = v;\n\t\t}\n\n\t\tcallback(\n\t\t\treq: createAgent.ClientRequest,\n\t\t\topts: createAgent.RequestOptions,\n\t\t\tfn: createAgent.AgentCallbackCallback\n\t\t): void;\n\t\tcallback(\n\t\t\treq: createAgent.ClientRequest,\n\t\t\topts: createAgent.RequestOptions\n\t\t):\n\t\t\t| createAgent.AgentCallbackReturn\n\t\t\t| Promise<createAgent.AgentCallbackReturn>;\n\t\tcallback(\n\t\t\treq: createAgent.ClientRequest,\n\t\t\topts: createAgent.AgentOptions,\n\t\t\tfn?: createAgent.AgentCallbackCallback\n\t\t):\n\t\t\t| createAgent.AgentCallbackReturn\n\t\t\t| Promise<createAgent.AgentCallbackReturn>\n\t\t\t| void {\n\t\t\tthrow new Error(\n\t\t\t\t'\"agent-base\" has no default implementation, you must subclass and override `callback()`'\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Called by node-core's \"_http_client.js\" module when creating\n\t\t * a new HTTP request with this Agent instance.\n\t\t *\n\t\t * @api public\n\t\t */\n\t\taddRequest(req: ClientRequest, _opts: RequestOptions): void {\n\t\t\tconst opts: RequestOptions = { ..._opts };\n\n\t\t\tif (typeof opts.secureEndpoint !== 'boolean') {\n\t\t\t\topts.secureEndpoint = isSecureEndpoint();\n\t\t\t}\n\n\t\t\tif (opts.host == null) {\n\t\t\t\topts.host = 'localhost';\n\t\t\t}\n\n\t\t\tif (opts.port == null) {\n\t\t\t\topts.port = opts.secureEndpoint ? 443 : 80;\n\t\t\t}\n\n\t\t\tif (opts.protocol == null) {\n\t\t\t\topts.protocol = opts.secureEndpoint ? 'https:' : 'http:';\n\t\t\t}\n\n\t\t\tif (opts.host && opts.path) {\n\t\t\t\t// If both a `host` and `path` are specified then it's most\n\t\t\t\t// likely the result of a `url.parse()` call... we need to\n\t\t\t\t// remove the `path` portion so that `net.connect()` doesn't\n\t\t\t\t// attempt to open that as a unix socket file.\n\t\t\t\tdelete opts.path;\n\t\t\t}\n\n\t\t\tdelete opts.agent;\n\t\t\tdelete opts.hostname;\n\t\t\tdelete opts._defaultAgent;\n\t\t\tdelete opts.defaultPort;\n\t\t\tdelete opts.createConnection;\n\n\t\t\t// Hint to use \"Connection: close\"\n\t\t\t// XXX: non-documented `http` module API :(\n\t\t\treq._last = true;\n\t\t\treq.shouldKeepAlive = false;\n\n\t\t\tlet timedOut = false;\n\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | null = null;\n\t\t\tconst timeoutMs = opts.timeout || this.timeout;\n\n\t\t\tconst onerror = (err: NodeJS.ErrnoException) => {\n\t\t\t\tif (req._hadError) return;\n\t\t\t\treq.emit('error', err);\n\t\t\t\t// For Safety. Some additional errors might fire later on\n\t\t\t\t// and we need to make sure we don't double-fire the error event.\n\t\t\t\treq._hadError = true;\n\t\t\t};\n\n\t\t\tconst ontimeout = () => {\n\t\t\t\ttimeoutId = null;\n\t\t\t\ttimedOut = true;\n\t\t\t\tconst err: NodeJS.ErrnoException = new Error(\n\t\t\t\t\t`A \"socket\" was not created for HTTP request before ${timeoutMs}ms`\n\t\t\t\t);\n\t\t\t\terr.code = 'ETIMEOUT';\n\t\t\t\tonerror(err);\n\t\t\t};\n\n\t\t\tconst callbackError = (err: NodeJS.ErrnoException) => {\n\t\t\t\tif (timedOut) return;\n\t\t\t\tif (timeoutId !== null) {\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\ttimeoutId = null;\n\t\t\t\t}\n\t\t\t\tonerror(err);\n\t\t\t};\n\n\t\t\tconst onsocket = (socket: AgentCallbackReturn) => {\n\t\t\t\tif (timedOut) return;\n\t\t\t\tif (timeoutId != null) {\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\ttimeoutId = null;\n\t\t\t\t}\n\n\t\t\t\tif (isAgent(socket)) {\n\t\t\t\t\t// `socket` is actually an `http.Agent` instance, so\n\t\t\t\t\t// relinquish responsibility for this `req` to the Agent\n\t\t\t\t\t// from here on\n\t\t\t\t\tdebug(\n\t\t\t\t\t\t'Callback returned another Agent instance %o',\n\t\t\t\t\t\tsocket.constructor.name\n\t\t\t\t\t);\n\t\t\t\t\t(socket as createAgent.Agent).addRequest(req, opts);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (socket) {\n\t\t\t\t\tsocket.once('free', () => {\n\t\t\t\t\t\tthis.freeSocket(socket as net.Socket, opts);\n\t\t\t\t\t});\n\t\t\t\t\treq.onSocket(socket as net.Socket);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst err = new Error(\n\t\t\t\t\t`no Duplex stream was returned to agent-base for \\`${req.method} ${req.path}\\``\n\t\t\t\t);\n\t\t\t\tonerror(err);\n\t\t\t};\n\n\t\t\tif (typeof this.callback !== 'function') {\n\t\t\t\tonerror(new Error('`callback` is not defined'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!this.promisifiedCallback) {\n\t\t\t\tif (this.callback.length >= 3) {\n\t\t\t\t\tdebug('Converting legacy callback function to promise');\n\t\t\t\t\tthis.promisifiedCallback = promisify(this.callback);\n\t\t\t\t} else {\n\t\t\t\t\tthis.promisifiedCallback = this.callback;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof timeoutMs === 'number' && timeoutMs > 0) {\n\t\t\t\ttimeoutId = setTimeout(ontimeout, timeoutMs);\n\t\t\t}\n\n\t\t\tif ('port' in opts && typeof opts.port !== 'number') {\n\t\t\t\topts.port = Number(opts.port);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tdebug(\n\t\t\t\t\t'Resolving socket for %o request: %o',\n\t\t\t\t\topts.protocol,\n\t\t\t\t\t`${req.method} ${req.path}`\n\t\t\t\t);\n\t\t\t\tPromise.resolve(this.promisifiedCallback(req, opts)).then(\n\t\t\t\t\tonsocket,\n\t\t\t\t\tcallbackError\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\tPromise.reject(err).catch(callbackError);\n\t\t\t}\n\t\t}\n\n\t\tfreeSocket(socket: net.Socket, opts: AgentOptions) {\n\t\t\tdebug('Freeing socket %o %o', socket.constructor.name, opts);\n\t\t\tsocket.destroy();\n\t\t}\n\n\t\tdestroy() {\n\t\t\tdebug('Destroying agent %o', this.constructor.name);\n\t\t}\n\t}\n\n\t// So that `instanceof` works correctly\n\tcreateAgent.prototype = createAgent.Agent.prototype;\n}\n\nexport = createAgent;\n",null,null,null,"/*\n  Copyright (c) 2008, Adobe Systems Incorporated\n  All rights reserved.\n\n  Redistribution and use in source and binary forms, with or without \n  modification, are permitted provided that the following conditions are\n  met:\n\n  * Redistributions of source code must retain the above copyright notice, \n    this list of conditions and the following disclaimer.\n  \n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the \n    documentation and/or other materials provided with the distribution.\n  \n  * Neither the name of Adobe Systems Incorporated nor the names of its \n    contributors may be used to endorse or promote products derived from \n    this software without specific prior written permission.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n  IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\nJPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n\nBasic GUI blocking jpeg encoder\n*/\n\nvar btoa = btoa || function(buf) {\n  return Buffer.from(buf).toString('base64');\n};\n\nfunction JPEGEncoder(quality) {\n  var self = this;\n\tvar fround = Math.round;\n\tvar ffloor = Math.floor;\n\tvar YTable = new Array(64);\n\tvar UVTable = new Array(64);\n\tvar fdtbl_Y = new Array(64);\n\tvar fdtbl_UV = new Array(64);\n\tvar YDC_HT;\n\tvar UVDC_HT;\n\tvar YAC_HT;\n\tvar UVAC_HT;\n\t\n\tvar bitcode = new Array(65535);\n\tvar category = new Array(65535);\n\tvar outputfDCTQuant = new Array(64);\n\tvar DU = new Array(64);\n\tvar byteout = [];\n\tvar bytenew = 0;\n\tvar bytepos = 7;\n\t\n\tvar YDU = new Array(64);\n\tvar UDU = new Array(64);\n\tvar VDU = new Array(64);\n\tvar clt = new Array(256);\n\tvar RGB_YUV_TABLE = new Array(2048);\n\tvar currentQuality;\n\t\n\tvar ZigZag = [\n\t\t\t 0, 1, 5, 6,14,15,27,28,\n\t\t\t 2, 4, 7,13,16,26,29,42,\n\t\t\t 3, 8,12,17,25,30,41,43,\n\t\t\t 9,11,18,24,31,40,44,53,\n\t\t\t10,19,23,32,39,45,52,54,\n\t\t\t20,22,33,38,46,51,55,60,\n\t\t\t21,34,37,47,50,56,59,61,\n\t\t\t35,36,48,49,57,58,62,63\n\t\t];\n\t\n\tvar std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];\n\tvar std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n\tvar std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];\n\tvar std_ac_luminance_values = [\n\t\t\t0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,\n\t\t\t0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,\n\t\t\t0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n\t\t\t0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,\n\t\t\t0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,\n\t\t\t0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n\t\t\t0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,\n\t\t\t0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\n\t\t\t0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n\t\t\t0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\n\t\t\t0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,\n\t\t\t0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n\t\t\t0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,\n\t\t\t0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,\n\t\t\t0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n\t\t\t0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,\n\t\t\t0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,\n\t\t\t0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n\t\t\t0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,\n\t\t\t0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n\t\t\t0xf9,0xfa\n\t\t];\n\t\n\tvar std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];\n\tvar std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n\tvar std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];\n\tvar std_ac_chrominance_values = [\n\t\t\t0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,\n\t\t\t0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,\n\t\t\t0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n\t\t\t0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,\n\t\t\t0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,\n\t\t\t0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n\t\t\t0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,\n\t\t\t0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,\n\t\t\t0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n\t\t\t0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,\n\t\t\t0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,\n\t\t\t0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n\t\t\t0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,\n\t\t\t0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,\n\t\t\t0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n\t\t\t0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,\n\t\t\t0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,\n\t\t\t0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n\t\t\t0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,\n\t\t\t0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n\t\t\t0xf9,0xfa\n\t\t];\n\t\n\tfunction initQuantTables(sf){\n\t\t\tvar YQT = [\n\t\t\t\t16, 11, 10, 16, 24, 40, 51, 61,\n\t\t\t\t12, 12, 14, 19, 26, 58, 60, 55,\n\t\t\t\t14, 13, 16, 24, 40, 57, 69, 56,\n\t\t\t\t14, 17, 22, 29, 51, 87, 80, 62,\n\t\t\t\t18, 22, 37, 56, 68,109,103, 77,\n\t\t\t\t24, 35, 55, 64, 81,104,113, 92,\n\t\t\t\t49, 64, 78, 87,103,121,120,101,\n\t\t\t\t72, 92, 95, 98,112,100,103, 99\n\t\t\t];\n\t\t\t\n\t\t\tfor (var i = 0; i < 64; i++) {\n\t\t\t\tvar t = ffloor((YQT[i]*sf+50)/100);\n\t\t\t\tif (t < 1) {\n\t\t\t\t\tt = 1;\n\t\t\t\t} else if (t > 255) {\n\t\t\t\t\tt = 255;\n\t\t\t\t}\n\t\t\t\tYTable[ZigZag[i]] = t;\n\t\t\t}\n\t\t\tvar UVQT = [\n\t\t\t\t17, 18, 24, 47, 99, 99, 99, 99,\n\t\t\t\t18, 21, 26, 66, 99, 99, 99, 99,\n\t\t\t\t24, 26, 56, 99, 99, 99, 99, 99,\n\t\t\t\t47, 66, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99\n\t\t\t];\n\t\t\tfor (var j = 0; j < 64; j++) {\n\t\t\t\tvar u = ffloor((UVQT[j]*sf+50)/100);\n\t\t\t\tif (u < 1) {\n\t\t\t\t\tu = 1;\n\t\t\t\t} else if (u > 255) {\n\t\t\t\t\tu = 255;\n\t\t\t\t}\n\t\t\t\tUVTable[ZigZag[j]] = u;\n\t\t\t}\n\t\t\tvar aasf = [\n\t\t\t\t1.0, 1.387039845, 1.306562965, 1.175875602,\n\t\t\t\t1.0, 0.785694958, 0.541196100, 0.275899379\n\t\t\t];\n\t\t\tvar k = 0;\n\t\t\tfor (var row = 0; row < 8; row++)\n\t\t\t{\n\t\t\t\tfor (var col = 0; col < 8; col++)\n\t\t\t\t{\n\t\t\t\t\tfdtbl_Y[k]  = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n\t\t\t\t\tfdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction computeHuffmanTbl(nrcodes, std_table){\n\t\t\tvar codevalue = 0;\n\t\t\tvar pos_in_table = 0;\n\t\t\tvar HT = new Array();\n\t\t\tfor (var k = 1; k <= 16; k++) {\n\t\t\t\tfor (var j = 1; j <= nrcodes[k]; j++) {\n\t\t\t\t\tHT[std_table[pos_in_table]] = [];\n\t\t\t\t\tHT[std_table[pos_in_table]][0] = codevalue;\n\t\t\t\t\tHT[std_table[pos_in_table]][1] = k;\n\t\t\t\t\tpos_in_table++;\n\t\t\t\t\tcodevalue++;\n\t\t\t\t}\n\t\t\t\tcodevalue*=2;\n\t\t\t}\n\t\t\treturn HT;\n\t\t}\n\t\t\n\t\tfunction initHuffmanTbl()\n\t\t{\n\t\t\tYDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);\n\t\t\tUVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);\n\t\t\tYAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);\n\t\t\tUVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);\n\t\t}\n\t\n\t\tfunction initCategoryNumber()\n\t\t{\n\t\t\tvar nrlower = 1;\n\t\t\tvar nrupper = 2;\n\t\t\tfor (var cat = 1; cat <= 15; cat++) {\n\t\t\t\t//Positive numbers\n\t\t\t\tfor (var nr = nrlower; nr<nrupper; nr++) {\n\t\t\t\t\tcategory[32767+nr] = cat;\n\t\t\t\t\tbitcode[32767+nr] = [];\n\t\t\t\t\tbitcode[32767+nr][1] = cat;\n\t\t\t\t\tbitcode[32767+nr][0] = nr;\n\t\t\t\t}\n\t\t\t\t//Negative numbers\n\t\t\t\tfor (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) {\n\t\t\t\t\tcategory[32767+nrneg] = cat;\n\t\t\t\t\tbitcode[32767+nrneg] = [];\n\t\t\t\t\tbitcode[32767+nrneg][1] = cat;\n\t\t\t\t\tbitcode[32767+nrneg][0] = nrupper-1+nrneg;\n\t\t\t\t}\n\t\t\t\tnrlower <<= 1;\n\t\t\t\tnrupper <<= 1;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction initRGBYUVTable() {\n\t\t\tfor(var i = 0; i < 256;i++) {\n\t\t\t\tRGB_YUV_TABLE[i]      \t\t=  19595 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+ 256)>>0] \t=  38470 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+ 512)>>0] \t=   7471 * i + 0x8000;\n\t\t\t\tRGB_YUV_TABLE[(i+ 768)>>0] \t= -11059 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+1024)>>0] \t= -21709 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+1280)>>0] \t=  32768 * i + 0x807FFF;\n\t\t\t\tRGB_YUV_TABLE[(i+1536)>>0] \t= -27439 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+1792)>>0] \t= - 5329 * i;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// IO functions\n\t\tfunction writeBits(bs)\n\t\t{\n\t\t\tvar value = bs[0];\n\t\t\tvar posval = bs[1]-1;\n\t\t\twhile ( posval >= 0 ) {\n\t\t\t\tif (value & (1 << posval) ) {\n\t\t\t\t\tbytenew |= (1 << bytepos);\n\t\t\t\t}\n\t\t\t\tposval--;\n\t\t\t\tbytepos--;\n\t\t\t\tif (bytepos < 0) {\n\t\t\t\t\tif (bytenew == 0xFF) {\n\t\t\t\t\t\twriteByte(0xFF);\n\t\t\t\t\t\twriteByte(0);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\twriteByte(bytenew);\n\t\t\t\t\t}\n\t\t\t\t\tbytepos=7;\n\t\t\t\t\tbytenew=0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\tfunction writeByte(value)\n\t\t{\n\t\t\t//byteout.push(clt[value]); // write char directly instead of converting later\n      byteout.push(value);\n\t\t}\n\t\n\t\tfunction writeWord(value)\n\t\t{\n\t\t\twriteByte((value>>8)&0xFF);\n\t\t\twriteByte((value   )&0xFF);\n\t\t}\n\t\t\n\t\t// DCT & quantization core\n\t\tfunction fDCTQuant(data, fdtbl)\n\t\t{\n\t\t\tvar d0, d1, d2, d3, d4, d5, d6, d7;\n\t\t\t/* Pass 1: process rows. */\n\t\t\tvar dataOff=0;\n\t\t\tvar i;\n\t\t\tvar I8 = 8;\n\t\t\tvar I64 = 64;\n\t\t\tfor (i=0; i<I8; ++i)\n\t\t\t{\n\t\t\t\td0 = data[dataOff];\n\t\t\t\td1 = data[dataOff+1];\n\t\t\t\td2 = data[dataOff+2];\n\t\t\t\td3 = data[dataOff+3];\n\t\t\t\td4 = data[dataOff+4];\n\t\t\t\td5 = data[dataOff+5];\n\t\t\t\td6 = data[dataOff+6];\n\t\t\t\td7 = data[dataOff+7];\n\t\t\t\t\n\t\t\t\tvar tmp0 = d0 + d7;\n\t\t\t\tvar tmp7 = d0 - d7;\n\t\t\t\tvar tmp1 = d1 + d6;\n\t\t\t\tvar tmp6 = d1 - d6;\n\t\t\t\tvar tmp2 = d2 + d5;\n\t\t\t\tvar tmp5 = d2 - d5;\n\t\t\t\tvar tmp3 = d3 + d4;\n\t\t\t\tvar tmp4 = d3 - d4;\n\t\n\t\t\t\t/* Even part */\n\t\t\t\tvar tmp10 = tmp0 + tmp3;\t/* phase 2 */\n\t\t\t\tvar tmp13 = tmp0 - tmp3;\n\t\t\t\tvar tmp11 = tmp1 + tmp2;\n\t\t\t\tvar tmp12 = tmp1 - tmp2;\n\t\n\t\t\t\tdata[dataOff] = tmp10 + tmp11; /* phase 3 */\n\t\t\t\tdata[dataOff+4] = tmp10 - tmp11;\n\t\n\t\t\t\tvar z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n\t\t\t\tdata[dataOff+2] = tmp13 + z1; /* phase 5 */\n\t\t\t\tdata[dataOff+6] = tmp13 - z1;\n\t\n\t\t\t\t/* Odd part */\n\t\t\t\ttmp10 = tmp4 + tmp5; /* phase 2 */\n\t\t\t\ttmp11 = tmp5 + tmp6;\n\t\t\t\ttmp12 = tmp6 + tmp7;\n\t\n\t\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\t\tvar z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n\t\t\t\tvar z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */\n\t\t\t\tvar z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n\t\t\t\tvar z3 = tmp11 * 0.707106781; /* c4 */\n\t\n\t\t\t\tvar z11 = tmp7 + z3;\t/* phase 5 */\n\t\t\t\tvar z13 = tmp7 - z3;\n\t\n\t\t\t\tdata[dataOff+5] = z13 + z2;\t/* phase 6 */\n\t\t\t\tdata[dataOff+3] = z13 - z2;\n\t\t\t\tdata[dataOff+1] = z11 + z4;\n\t\t\t\tdata[dataOff+7] = z11 - z4;\n\t\n\t\t\t\tdataOff += 8; /* advance pointer to next row */\n\t\t\t}\n\t\n\t\t\t/* Pass 2: process columns. */\n\t\t\tdataOff = 0;\n\t\t\tfor (i=0; i<I8; ++i)\n\t\t\t{\n\t\t\t\td0 = data[dataOff];\n\t\t\t\td1 = data[dataOff + 8];\n\t\t\t\td2 = data[dataOff + 16];\n\t\t\t\td3 = data[dataOff + 24];\n\t\t\t\td4 = data[dataOff + 32];\n\t\t\t\td5 = data[dataOff + 40];\n\t\t\t\td6 = data[dataOff + 48];\n\t\t\t\td7 = data[dataOff + 56];\n\t\t\t\t\n\t\t\t\tvar tmp0p2 = d0 + d7;\n\t\t\t\tvar tmp7p2 = d0 - d7;\n\t\t\t\tvar tmp1p2 = d1 + d6;\n\t\t\t\tvar tmp6p2 = d1 - d6;\n\t\t\t\tvar tmp2p2 = d2 + d5;\n\t\t\t\tvar tmp5p2 = d2 - d5;\n\t\t\t\tvar tmp3p2 = d3 + d4;\n\t\t\t\tvar tmp4p2 = d3 - d4;\n\t\n\t\t\t\t/* Even part */\n\t\t\t\tvar tmp10p2 = tmp0p2 + tmp3p2;\t/* phase 2 */\n\t\t\t\tvar tmp13p2 = tmp0p2 - tmp3p2;\n\t\t\t\tvar tmp11p2 = tmp1p2 + tmp2p2;\n\t\t\t\tvar tmp12p2 = tmp1p2 - tmp2p2;\n\t\n\t\t\t\tdata[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n\t\t\t\tdata[dataOff+32] = tmp10p2 - tmp11p2;\n\t\n\t\t\t\tvar z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n\t\t\t\tdata[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */\n\t\t\t\tdata[dataOff+48] = tmp13p2 - z1p2;\n\t\n\t\t\t\t/* Odd part */\n\t\t\t\ttmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n\t\t\t\ttmp11p2 = tmp5p2 + tmp6p2;\n\t\t\t\ttmp12p2 = tmp6p2 + tmp7p2;\n\t\n\t\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\t\tvar z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n\t\t\t\tvar z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */\n\t\t\t\tvar z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n\t\t\t\tvar z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\t\n\t\t\t\tvar z11p2 = tmp7p2 + z3p2;\t/* phase 5 */\n\t\t\t\tvar z13p2 = tmp7p2 - z3p2;\n\t\n\t\t\t\tdata[dataOff+40] = z13p2 + z2p2; /* phase 6 */\n\t\t\t\tdata[dataOff+24] = z13p2 - z2p2;\n\t\t\t\tdata[dataOff+ 8] = z11p2 + z4p2;\n\t\t\t\tdata[dataOff+56] = z11p2 - z4p2;\n\t\n\t\t\t\tdataOff++; /* advance pointer to next column */\n\t\t\t}\n\t\n\t\t\t// Quantize/descale the coefficients\n\t\t\tvar fDCTQuant;\n\t\t\tfor (i=0; i<I64; ++i)\n\t\t\t{\n\t\t\t\t// Apply the quantization and scaling factor & Round to nearest integer\n\t\t\t\tfDCTQuant = data[i]*fdtbl[i];\n\t\t\t\toutputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0);\n\t\t\t\t//outputfDCTQuant[i] = fround(fDCTQuant);\n\n\t\t\t}\n\t\t\treturn outputfDCTQuant;\n\t\t}\n\t\t\n\t\tfunction writeAPP0()\n\t\t{\n\t\t\twriteWord(0xFFE0); // marker\n\t\t\twriteWord(16); // length\n\t\t\twriteByte(0x4A); // J\n\t\t\twriteByte(0x46); // F\n\t\t\twriteByte(0x49); // I\n\t\t\twriteByte(0x46); // F\n\t\t\twriteByte(0); // = \"JFIF\",'\\0'\n\t\t\twriteByte(1); // versionhi\n\t\t\twriteByte(1); // versionlo\n\t\t\twriteByte(0); // xyunits\n\t\t\twriteWord(1); // xdensity\n\t\t\twriteWord(1); // ydensity\n\t\t\twriteByte(0); // thumbnwidth\n\t\t\twriteByte(0); // thumbnheight\n\t\t}\n\n\t\tfunction writeAPP1(exifBuffer) {\n\t\t\tif (!exifBuffer) return;\n\n\t\t\twriteWord(0xFFE1); // APP1 marker\n\n\t\t\tif (exifBuffer[0] === 0x45 &&\n\t\t\t\t\texifBuffer[1] === 0x78 &&\n\t\t\t\t\texifBuffer[2] === 0x69 &&\n\t\t\t\t\texifBuffer[3] === 0x66) {\n\t\t\t\t// Buffer already starts with EXIF, just use it directly\n\t\t\t\twriteWord(exifBuffer.length + 2); // length is buffer + length itself!\n\t\t\t} else {\n\t\t\t\t// Buffer doesn't start with EXIF, write it for them\n\t\t\t\twriteWord(exifBuffer.length + 5 + 2); // length is buffer + EXIF\\0 + length itself!\n\t\t\t\twriteByte(0x45); // E\n\t\t\t\twriteByte(0x78); // X\n\t\t\t\twriteByte(0x69); // I\n\t\t\t\twriteByte(0x66); // F\n\t\t\t\twriteByte(0); // = \"EXIF\",'\\0'\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < exifBuffer.length; i++) {\n\t\t\t\twriteByte(exifBuffer[i]);\n\t\t\t}\n\t\t}\n\n\t\tfunction writeSOF0(width, height)\n\t\t{\n\t\t\twriteWord(0xFFC0); // marker\n\t\t\twriteWord(17);   // length, truecolor YUV JPG\n\t\t\twriteByte(8);    // precision\n\t\t\twriteWord(height);\n\t\t\twriteWord(width);\n\t\t\twriteByte(3);    // nrofcomponents\n\t\t\twriteByte(1);    // IdY\n\t\t\twriteByte(0x11); // HVY\n\t\t\twriteByte(0);    // QTY\n\t\t\twriteByte(2);    // IdU\n\t\t\twriteByte(0x11); // HVU\n\t\t\twriteByte(1);    // QTU\n\t\t\twriteByte(3);    // IdV\n\t\t\twriteByte(0x11); // HVV\n\t\t\twriteByte(1);    // QTV\n\t\t}\n\t\n\t\tfunction writeDQT()\n\t\t{\n\t\t\twriteWord(0xFFDB); // marker\n\t\t\twriteWord(132);\t   // length\n\t\t\twriteByte(0);\n\t\t\tfor (var i=0; i<64; i++) {\n\t\t\t\twriteByte(YTable[i]);\n\t\t\t}\n\t\t\twriteByte(1);\n\t\t\tfor (var j=0; j<64; j++) {\n\t\t\t\twriteByte(UVTable[j]);\n\t\t\t}\n\t\t}\n\t\n\t\tfunction writeDHT()\n\t\t{\n\t\t\twriteWord(0xFFC4); // marker\n\t\t\twriteWord(0x01A2); // length\n\t\n\t\t\twriteByte(0); // HTYDCinfo\n\t\t\tfor (var i=0; i<16; i++) {\n\t\t\t\twriteByte(std_dc_luminance_nrcodes[i+1]);\n\t\t\t}\n\t\t\tfor (var j=0; j<=11; j++) {\n\t\t\t\twriteByte(std_dc_luminance_values[j]);\n\t\t\t}\n\t\n\t\t\twriteByte(0x10); // HTYACinfo\n\t\t\tfor (var k=0; k<16; k++) {\n\t\t\t\twriteByte(std_ac_luminance_nrcodes[k+1]);\n\t\t\t}\n\t\t\tfor (var l=0; l<=161; l++) {\n\t\t\t\twriteByte(std_ac_luminance_values[l]);\n\t\t\t}\n\t\n\t\t\twriteByte(1); // HTUDCinfo\n\t\t\tfor (var m=0; m<16; m++) {\n\t\t\t\twriteByte(std_dc_chrominance_nrcodes[m+1]);\n\t\t\t}\n\t\t\tfor (var n=0; n<=11; n++) {\n\t\t\t\twriteByte(std_dc_chrominance_values[n]);\n\t\t\t}\n\t\n\t\t\twriteByte(0x11); // HTUACinfo\n\t\t\tfor (var o=0; o<16; o++) {\n\t\t\t\twriteByte(std_ac_chrominance_nrcodes[o+1]);\n\t\t\t}\n\t\t\tfor (var p=0; p<=161; p++) {\n\t\t\t\twriteByte(std_ac_chrominance_values[p]);\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction writeCOM(comments)\n\t\t{\n\t\t\tif (typeof comments === \"undefined\" || comments.constructor !== Array) return;\n\t\t\tcomments.forEach(e => {\n\t\t\t\tif (typeof e !== \"string\") return;\n\t\t\t\twriteWord(0xFFFE); // marker\n\t\t\t\tvar l = e.length;\n\t\t\t\twriteWord(l + 2); // length itself as well\n\t\t\t\tvar i;\n\t\t\t\tfor (i = 0; i < l; i++)\n\t\t\t\t\twriteByte(e.charCodeAt(i));\n\t\t\t});\n\t\t}\n\t\n\t\tfunction writeSOS()\n\t\t{\n\t\t\twriteWord(0xFFDA); // marker\n\t\t\twriteWord(12); // length\n\t\t\twriteByte(3); // nrofcomponents\n\t\t\twriteByte(1); // IdY\n\t\t\twriteByte(0); // HTY\n\t\t\twriteByte(2); // IdU\n\t\t\twriteByte(0x11); // HTU\n\t\t\twriteByte(3); // IdV\n\t\t\twriteByte(0x11); // HTV\n\t\t\twriteByte(0); // Ss\n\t\t\twriteByte(0x3f); // Se\n\t\t\twriteByte(0); // Bf\n\t\t}\n\t\t\n\t\tfunction processDU(CDU, fdtbl, DC, HTDC, HTAC){\n\t\t\tvar EOB = HTAC[0x00];\n\t\t\tvar M16zeroes = HTAC[0xF0];\n\t\t\tvar pos;\n\t\t\tvar I16 = 16;\n\t\t\tvar I63 = 63;\n\t\t\tvar I64 = 64;\n\t\t\tvar DU_DCT = fDCTQuant(CDU, fdtbl);\n\t\t\t//ZigZag reorder\n\t\t\tfor (var j=0;j<I64;++j) {\n\t\t\t\tDU[ZigZag[j]]=DU_DCT[j];\n\t\t\t}\n\t\t\tvar Diff = DU[0] - DC; DC = DU[0];\n\t\t\t//Encode DC\n\t\t\tif (Diff==0) {\n\t\t\t\twriteBits(HTDC[0]); // Diff might be 0\n\t\t\t} else {\n\t\t\t\tpos = 32767+Diff;\n\t\t\t\twriteBits(HTDC[category[pos]]);\n\t\t\t\twriteBits(bitcode[pos]);\n\t\t\t}\n\t\t\t//Encode ACs\n\t\t\tvar end0pos = 63; // was const... which is crazy\n\t\t\tfor (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {};\n\t\t\t//end0pos = first element in reverse order !=0\n\t\t\tif ( end0pos == 0) {\n\t\t\t\twriteBits(EOB);\n\t\t\t\treturn DC;\n\t\t\t}\n\t\t\tvar i = 1;\n\t\t\tvar lng;\n\t\t\twhile ( i <= end0pos ) {\n\t\t\t\tvar startpos = i;\n\t\t\t\tfor (; (DU[i]==0) && (i<=end0pos); ++i) {}\n\t\t\t\tvar nrzeroes = i-startpos;\n\t\t\t\tif ( nrzeroes >= I16 ) {\n\t\t\t\t\tlng = nrzeroes>>4;\n\t\t\t\t\tfor (var nrmarker=1; nrmarker <= lng; ++nrmarker)\n\t\t\t\t\t\twriteBits(M16zeroes);\n\t\t\t\t\tnrzeroes = nrzeroes&0xF;\n\t\t\t\t}\n\t\t\t\tpos = 32767+DU[i];\n\t\t\t\twriteBits(HTAC[(nrzeroes<<4)+category[pos]]);\n\t\t\t\twriteBits(bitcode[pos]);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif ( end0pos != I63 ) {\n\t\t\t\twriteBits(EOB);\n\t\t\t}\n\t\t\treturn DC;\n\t\t}\n\n\t\tfunction initCharLookupTable(){\n\t\t\tvar sfcc = String.fromCharCode;\n\t\t\tfor(var i=0; i < 256; i++){ ///// ACHTUNG // 255\n\t\t\t\tclt[i] = sfcc(i);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.encode = function(image,quality) // image data object\n\t\t{\n\t\t\tvar time_start = new Date().getTime();\n\t\t\t\n\t\t\tif(quality) setQuality(quality);\n\t\t\t\n\t\t\t// Initialize bit writer\n\t\t\tbyteout = new Array();\n\t\t\tbytenew=0;\n\t\t\tbytepos=7;\n\t\n\t\t\t// Add JPEG headers\n\t\t\twriteWord(0xFFD8); // SOI\n\t\t\twriteAPP0();\n\t\t\twriteCOM(image.comments);\n\t\t\twriteAPP1(image.exifBuffer);\n\t\t\twriteDQT();\n\t\t\twriteSOF0(image.width,image.height);\n\t\t\twriteDHT();\n\t\t\twriteSOS();\n\n\t\n\t\t\t// Encode 8x8 macroblocks\n\t\t\tvar DCY=0;\n\t\t\tvar DCU=0;\n\t\t\tvar DCV=0;\n\t\t\t\n\t\t\tbytenew=0;\n\t\t\tbytepos=7;\n\t\t\t\n\t\t\t\n\t\t\tthis.encode.displayName = \"_encode_\";\n\n\t\t\tvar imageData = image.data;\n\t\t\tvar width = image.width;\n\t\t\tvar height = image.height;\n\n\t\t\tvar quadWidth = width*4;\n\t\t\tvar tripleWidth = width*3;\n\t\t\t\n\t\t\tvar x, y = 0;\n\t\t\tvar r, g, b;\n\t\t\tvar start,p, col,row,pos;\n\t\t\twhile(y < height){\n\t\t\t\tx = 0;\n\t\t\t\twhile(x < quadWidth){\n\t\t\t\tstart = quadWidth * y + x;\n\t\t\t\tp = start;\n\t\t\t\tcol = -1;\n\t\t\t\trow = 0;\n\t\t\t\t\n\t\t\t\tfor(pos=0; pos < 64; pos++){\n\t\t\t\t\trow = pos >> 3;// /8\n\t\t\t\t\tcol = ( pos & 7 ) * 4; // %8\n\t\t\t\t\tp = start + ( row * quadWidth ) + col;\t\t\n\t\t\t\t\t\n\t\t\t\t\tif(y+row >= height){ // padding bottom\n\t\t\t\t\t\tp-= (quadWidth*(y+1+row-height));\n\t\t\t\t\t}\n\n\t\t\t\t\tif(x+col >= quadWidth){ // padding right\t\n\t\t\t\t\t\tp-= ((x+col) - quadWidth +4)\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tr = imageData[ p++ ];\n\t\t\t\t\tg = imageData[ p++ ];\n\t\t\t\t\tb = imageData[ p++ ];\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t/* // calculate YUV values dynamically\n\t\t\t\t\tYDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n\t\t\t\t\tUDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n\t\t\t\t\tVDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n\t\t\t\t\t*/\n\t\t\t\t\t\n\t\t\t\t\t// use lookup table (slightly faster)\n\t\t\t\t\tYDU[pos] = ((RGB_YUV_TABLE[r]             + RGB_YUV_TABLE[(g +  256)>>0] + RGB_YUV_TABLE[(b +  512)>>0]) >> 16)-128;\n\t\t\t\t\tUDU[pos] = ((RGB_YUV_TABLE[(r +  768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128;\n\t\t\t\t\tVDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128;\n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tDCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n\t\t\t\tDCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n\t\t\t\tDCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n\t\t\t\tx+=32;\n\t\t\t\t}\n\t\t\t\ty+=8;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t////////////////////////////////////////////////////////////////\n\t\n\t\t\t// Do the bit alignment of the EOI marker\n\t\t\tif ( bytepos >= 0 ) {\n\t\t\t\tvar fillbits = [];\n\t\t\t\tfillbits[1] = bytepos+1;\n\t\t\t\tfillbits[0] = (1<<(bytepos+1))-1;\n\t\t\t\twriteBits(fillbits);\n\t\t\t}\n\t\n\t\t\twriteWord(0xFFD9); //EOI\n\n\t\t\tif (typeof module === 'undefined') return new Uint8Array(byteout);\n      return Buffer.from(byteout);\n\n\t\t\tvar jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join(''));\n\t\t\t\n\t\t\tbyteout = [];\n\t\t\t\n\t\t\t// benchmarking\n\t\t\tvar duration = new Date().getTime() - time_start;\n    \t\t//console.log('Encoding time: '+ duration + 'ms');\n    \t\t//\n\t\t\t\n\t\t\treturn jpegDataUri\t\t\t\n\t}\n\t\n\tfunction setQuality(quality){\n\t\tif (quality <= 0) {\n\t\t\tquality = 1;\n\t\t}\n\t\tif (quality > 100) {\n\t\t\tquality = 100;\n\t\t}\n\t\t\n\t\tif(currentQuality == quality) return // don't recalc if unchanged\n\t\t\n\t\tvar sf = 0;\n\t\tif (quality < 50) {\n\t\t\tsf = Math.floor(5000 / quality);\n\t\t} else {\n\t\t\tsf = Math.floor(200 - quality*2);\n\t\t}\n\t\t\n\t\tinitQuantTables(sf);\n\t\tcurrentQuality = quality;\n\t\t//console.log('Quality set to: '+quality +'%');\n\t}\n\t\n\tfunction init(){\n\t\tvar time_start = new Date().getTime();\n\t\tif(!quality) quality = 50;\n\t\t// Create tables\n\t\tinitCharLookupTable()\n\t\tinitHuffmanTbl();\n\t\tinitCategoryNumber();\n\t\tinitRGBYUVTable();\n\t\t\n\t\tsetQuality(quality);\n\t\tvar duration = new Date().getTime() - time_start;\n    \t//console.log('Initialization '+ duration + 'ms');\n\t}\n\t\n\tinit();\n\t\n};\n\nif (typeof module !== 'undefined') {\n\tmodule.exports = encode;\n} else if (typeof window !== 'undefined') {\n\twindow['jpeg-js'] = window['jpeg-js'] || {};\n\twindow['jpeg-js'].encode = encode;\n}\n\nfunction encode(imgData, qu) {\n  if (typeof qu === 'undefined') qu = 50;\n  var encoder = new JPEGEncoder(qu);\n\tvar data = encoder.encode(imgData, qu);\n  return {\n    data: data,\n    width: imgData.width,\n    height: imgData.height,\n  };\n}\n\n// helper function to get the imageData of an existing image on the current page.\nfunction getImageDataFromImage(idOrElement){\n\tvar theImg = (typeof(idOrElement)=='string')? document.getElementById(idOrElement):idOrElement;\n\tvar cvs = document.createElement('canvas');\n\tcvs.width = theImg.width;\n\tcvs.height = theImg.height;\n\tvar ctx = cvs.getContext(\"2d\");\n\tctx.drawImage(theImg,0,0);\n\t\n\treturn (ctx.getImageData(0, 0, cvs.width, cvs.height));\n}\n","/* -*- tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\n/*\n   Copyright 2011 notmasteryet\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n*/\n\n// - The JPEG specification can be found in the ITU CCITT Recommendation T.81\n//   (www.w3.org/Graphics/JPEG/itu-t81.pdf)\n// - The JFIF specification can be found in the JPEG File Interchange Format\n//   (www.w3.org/Graphics/JPEG/jfif3.pdf)\n// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters\n//   in PostScript Level 2, Technical Note #5116\n//   (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)\n\nvar JpegImage = (function jpegImage() {\n  \"use strict\";\n  var dctZigZag = new Int32Array([\n     0,\n     1,  8,\n    16,  9,  2,\n     3, 10, 17, 24,\n    32, 25, 18, 11, 4,\n     5, 12, 19, 26, 33, 40,\n    48, 41, 34, 27, 20, 13,  6,\n     7, 14, 21, 28, 35, 42, 49, 56,\n    57, 50, 43, 36, 29, 22, 15,\n    23, 30, 37, 44, 51, 58,\n    59, 52, 45, 38, 31,\n    39, 46, 53, 60,\n    61, 54, 47,\n    55, 62,\n    63\n  ]);\n\n  var dctCos1  =  4017   // cos(pi/16)\n  var dctSin1  =   799   // sin(pi/16)\n  var dctCos3  =  3406   // cos(3*pi/16)\n  var dctSin3  =  2276   // sin(3*pi/16)\n  var dctCos6  =  1567   // cos(6*pi/16)\n  var dctSin6  =  3784   // sin(6*pi/16)\n  var dctSqrt2 =  5793   // sqrt(2)\n  var dctSqrt1d2 = 2896  // sqrt(2) / 2\n\n  function constructor() {\n  }\n\n  function buildHuffmanTable(codeLengths, values) {\n    var k = 0, code = [], i, j, length = 16;\n    while (length > 0 && !codeLengths[length - 1])\n      length--;\n    code.push({children: [], index: 0});\n    var p = code[0], q;\n    for (i = 0; i < length; i++) {\n      for (j = 0; j < codeLengths[i]; j++) {\n        p = code.pop();\n        p.children[p.index] = values[k];\n        while (p.index > 0) {\n          if (code.length === 0)\n            throw new Error('Could not recreate Huffman Table');\n          p = code.pop();\n        }\n        p.index++;\n        code.push(p);\n        while (code.length <= i) {\n          code.push(q = {children: [], index: 0});\n          p.children[p.index] = q.children;\n          p = q;\n        }\n        k++;\n      }\n      if (i + 1 < length) {\n        // p here points to last code\n        code.push(q = {children: [], index: 0});\n        p.children[p.index] = q.children;\n        p = q;\n      }\n    }\n    return code[0].children;\n  }\n\n  function decodeScan(data, offset,\n                      frame, components, resetInterval,\n                      spectralStart, spectralEnd,\n                      successivePrev, successive, opts) {\n    var precision = frame.precision;\n    var samplesPerLine = frame.samplesPerLine;\n    var scanLines = frame.scanLines;\n    var mcusPerLine = frame.mcusPerLine;\n    var progressive = frame.progressive;\n    var maxH = frame.maxH, maxV = frame.maxV;\n\n    var startOffset = offset, bitsData = 0, bitsCount = 0;\n    function readBit() {\n      if (bitsCount > 0) {\n        bitsCount--;\n        return (bitsData >> bitsCount) & 1;\n      }\n      bitsData = data[offset++];\n      if (bitsData == 0xFF) {\n        var nextByte = data[offset++];\n        if (nextByte) {\n          throw new Error(\"unexpected marker: \" + ((bitsData << 8) | nextByte).toString(16));\n        }\n        // unstuff 0\n      }\n      bitsCount = 7;\n      return bitsData >>> 7;\n    }\n    function decodeHuffman(tree) {\n      var node = tree, bit;\n      while ((bit = readBit()) !== null) {\n        node = node[bit];\n        if (typeof node === 'number')\n          return node;\n        if (typeof node !== 'object')\n          throw new Error(\"invalid huffman sequence\");\n      }\n      return null;\n    }\n    function receive(length) {\n      var n = 0;\n      while (length > 0) {\n        var bit = readBit();\n        if (bit === null) return;\n        n = (n << 1) | bit;\n        length--;\n      }\n      return n;\n    }\n    function receiveAndExtend(length) {\n      var n = receive(length);\n      if (n >= 1 << (length - 1))\n        return n;\n      return n + (-1 << length) + 1;\n    }\n    function decodeBaseline(component, zz) {\n      var t = decodeHuffman(component.huffmanTableDC);\n      var diff = t === 0 ? 0 : receiveAndExtend(t);\n      zz[0]= (component.pred += diff);\n      var k = 1;\n      while (k < 64) {\n        var rs = decodeHuffman(component.huffmanTableAC);\n        var s = rs & 15, r = rs >> 4;\n        if (s === 0) {\n          if (r < 15)\n            break;\n          k += 16;\n          continue;\n        }\n        k += r;\n        var z = dctZigZag[k];\n        zz[z] = receiveAndExtend(s);\n        k++;\n      }\n    }\n    function decodeDCFirst(component, zz) {\n      var t = decodeHuffman(component.huffmanTableDC);\n      var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive);\n      zz[0] = (component.pred += diff);\n    }\n    function decodeDCSuccessive(component, zz) {\n      zz[0] |= readBit() << successive;\n    }\n    var eobrun = 0;\n    function decodeACFirst(component, zz) {\n      if (eobrun > 0) {\n        eobrun--;\n        return;\n      }\n      var k = spectralStart, e = spectralEnd;\n      while (k <= e) {\n        var rs = decodeHuffman(component.huffmanTableAC);\n        var s = rs & 15, r = rs >> 4;\n        if (s === 0) {\n          if (r < 15) {\n            eobrun = receive(r) + (1 << r) - 1;\n            break;\n          }\n          k += 16;\n          continue;\n        }\n        k += r;\n        var z = dctZigZag[k];\n        zz[z] = receiveAndExtend(s) * (1 << successive);\n        k++;\n      }\n    }\n    var successiveACState = 0, successiveACNextValue;\n    function decodeACSuccessive(component, zz) {\n      var k = spectralStart, e = spectralEnd, r = 0;\n      while (k <= e) {\n        var z = dctZigZag[k];\n        var direction = zz[z] < 0 ? -1 : 1;\n        switch (successiveACState) {\n        case 0: // initial state\n          var rs = decodeHuffman(component.huffmanTableAC);\n          var s = rs & 15, r = rs >> 4;\n          if (s === 0) {\n            if (r < 15) {\n              eobrun = receive(r) + (1 << r);\n              successiveACState = 4;\n            } else {\n              r = 16;\n              successiveACState = 1;\n            }\n          } else {\n            if (s !== 1)\n              throw new Error(\"invalid ACn encoding\");\n            successiveACNextValue = receiveAndExtend(s);\n            successiveACState = r ? 2 : 3;\n          }\n          continue;\n        case 1: // skipping r zero items\n        case 2:\n          if (zz[z])\n            zz[z] += (readBit() << successive) * direction;\n          else {\n            r--;\n            if (r === 0)\n              successiveACState = successiveACState == 2 ? 3 : 0;\n          }\n          break;\n        case 3: // set value for a zero item\n          if (zz[z])\n            zz[z] += (readBit() << successive) * direction;\n          else {\n            zz[z] = successiveACNextValue << successive;\n            successiveACState = 0;\n          }\n          break;\n        case 4: // eob\n          if (zz[z])\n            zz[z] += (readBit() << successive) * direction;\n          break;\n        }\n        k++;\n      }\n      if (successiveACState === 4) {\n        eobrun--;\n        if (eobrun === 0)\n          successiveACState = 0;\n      }\n    }\n    function decodeMcu(component, decode, mcu, row, col) {\n      var mcuRow = (mcu / mcusPerLine) | 0;\n      var mcuCol = mcu % mcusPerLine;\n      var blockRow = mcuRow * component.v + row;\n      var blockCol = mcuCol * component.h + col;\n      // If the block is missing and we're in tolerant mode, just skip it.\n      if (component.blocks[blockRow] === undefined && opts.tolerantDecoding)\n        return;\n      decode(component, component.blocks[blockRow][blockCol]);\n    }\n    function decodeBlock(component, decode, mcu) {\n      var blockRow = (mcu / component.blocksPerLine) | 0;\n      var blockCol = mcu % component.blocksPerLine;\n      // If the block is missing and we're in tolerant mode, just skip it.\n      if (component.blocks[blockRow] === undefined && opts.tolerantDecoding)\n        return;\n      decode(component, component.blocks[blockRow][blockCol]);\n    }\n\n    var componentsLength = components.length;\n    var component, i, j, k, n;\n    var decodeFn;\n    if (progressive) {\n      if (spectralStart === 0)\n        decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n      else\n        decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n    } else {\n      decodeFn = decodeBaseline;\n    }\n\n    var mcu = 0, marker;\n    var mcuExpected;\n    if (componentsLength == 1) {\n      mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n    } else {\n      mcuExpected = mcusPerLine * frame.mcusPerColumn;\n    }\n    if (!resetInterval) resetInterval = mcuExpected;\n\n    var h, v;\n    while (mcu < mcuExpected) {\n      // reset interval stuff\n      for (i = 0; i < componentsLength; i++)\n        components[i].pred = 0;\n      eobrun = 0;\n\n      if (componentsLength == 1) {\n        component = components[0];\n        for (n = 0; n < resetInterval; n++) {\n          decodeBlock(component, decodeFn, mcu);\n          mcu++;\n        }\n      } else {\n        for (n = 0; n < resetInterval; n++) {\n          for (i = 0; i < componentsLength; i++) {\n            component = components[i];\n            h = component.h;\n            v = component.v;\n            for (j = 0; j < v; j++) {\n              for (k = 0; k < h; k++) {\n                decodeMcu(component, decodeFn, mcu, j, k);\n              }\n            }\n          }\n          mcu++;\n\n          // If we've reached our expected MCU's, stop decoding\n          if (mcu === mcuExpected) break;\n        }\n      }\n\n      if (mcu === mcuExpected) {\n        // Skip trailing bytes at the end of the scan - until we reach the next marker\n        do {\n          if (data[offset] === 0xFF) {\n            if (data[offset + 1] !== 0x00) {\n              break;\n            }\n          }\n          offset += 1;\n        } while (offset < data.length - 2);\n      }\n\n      // find marker\n      bitsCount = 0;\n      marker = (data[offset] << 8) | data[offset + 1];\n      if (marker < 0xFF00) {\n        throw new Error(\"marker was not found\");\n      }\n\n      if (marker >= 0xFFD0 && marker <= 0xFFD7) { // RSTx\n        offset += 2;\n      }\n      else\n        break;\n    }\n\n    return offset - startOffset;\n  }\n\n  function buildComponentData(frame, component) {\n    var lines = [];\n    var blocksPerLine = component.blocksPerLine;\n    var blocksPerColumn = component.blocksPerColumn;\n    var samplesPerLine = blocksPerLine << 3;\n    // Only 1 used per invocation of this function and garbage collected after invocation, so no need to account for its memory footprint.\n    var R = new Int32Array(64), r = new Uint8Array(64);\n\n    // A port of poppler's IDCT method which in turn is taken from:\n    //   Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\n    //   \"Practical Fast 1-D DCT Algorithms with 11 Multiplications\",\n    //   IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\n    //   988-991.\n    function quantizeAndInverse(zz, dataOut, dataIn) {\n      var qt = component.quantizationTable;\n      var v0, v1, v2, v3, v4, v5, v6, v7, t;\n      var p = dataIn;\n      var i;\n\n      // dequant\n      for (i = 0; i < 64; i++)\n        p[i] = zz[i] * qt[i];\n\n      // inverse DCT on rows\n      for (i = 0; i < 8; ++i) {\n        var row = 8 * i;\n\n        // check for all-zero AC coefficients\n        if (p[1 + row] == 0 && p[2 + row] == 0 && p[3 + row] == 0 &&\n            p[4 + row] == 0 && p[5 + row] == 0 && p[6 + row] == 0 &&\n            p[7 + row] == 0) {\n          t = (dctSqrt2 * p[0 + row] + 512) >> 10;\n          p[0 + row] = t;\n          p[1 + row] = t;\n          p[2 + row] = t;\n          p[3 + row] = t;\n          p[4 + row] = t;\n          p[5 + row] = t;\n          p[6 + row] = t;\n          p[7 + row] = t;\n          continue;\n        }\n\n        // stage 4\n        v0 = (dctSqrt2 * p[0 + row] + 128) >> 8;\n        v1 = (dctSqrt2 * p[4 + row] + 128) >> 8;\n        v2 = p[2 + row];\n        v3 = p[6 + row];\n        v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8;\n        v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8;\n        v5 = p[3 + row] << 4;\n        v6 = p[5 + row] << 4;\n\n        // stage 3\n        t = (v0 - v1+ 1) >> 1;\n        v0 = (v0 + v1 + 1) >> 1;\n        v1 = t;\n        t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\n        v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\n        v3 = t;\n        t = (v4 - v6 + 1) >> 1;\n        v4 = (v4 + v6 + 1) >> 1;\n        v6 = t;\n        t = (v7 + v5 + 1) >> 1;\n        v5 = (v7 - v5 + 1) >> 1;\n        v7 = t;\n\n        // stage 2\n        t = (v0 - v3 + 1) >> 1;\n        v0 = (v0 + v3 + 1) >> 1;\n        v3 = t;\n        t = (v1 - v2 + 1) >> 1;\n        v1 = (v1 + v2 + 1) >> 1;\n        v2 = t;\n        t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n        v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n        v7 = t;\n        t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n        v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n        v6 = t;\n\n        // stage 1\n        p[0 + row] = v0 + v7;\n        p[7 + row] = v0 - v7;\n        p[1 + row] = v1 + v6;\n        p[6 + row] = v1 - v6;\n        p[2 + row] = v2 + v5;\n        p[5 + row] = v2 - v5;\n        p[3 + row] = v3 + v4;\n        p[4 + row] = v3 - v4;\n      }\n\n      // inverse DCT on columns\n      for (i = 0; i < 8; ++i) {\n        var col = i;\n\n        // check for all-zero AC coefficients\n        if (p[1*8 + col] == 0 && p[2*8 + col] == 0 && p[3*8 + col] == 0 &&\n            p[4*8 + col] == 0 && p[5*8 + col] == 0 && p[6*8 + col] == 0 &&\n            p[7*8 + col] == 0) {\n          t = (dctSqrt2 * dataIn[i+0] + 8192) >> 14;\n          p[0*8 + col] = t;\n          p[1*8 + col] = t;\n          p[2*8 + col] = t;\n          p[3*8 + col] = t;\n          p[4*8 + col] = t;\n          p[5*8 + col] = t;\n          p[6*8 + col] = t;\n          p[7*8 + col] = t;\n          continue;\n        }\n\n        // stage 4\n        v0 = (dctSqrt2 * p[0*8 + col] + 2048) >> 12;\n        v1 = (dctSqrt2 * p[4*8 + col] + 2048) >> 12;\n        v2 = p[2*8 + col];\n        v3 = p[6*8 + col];\n        v4 = (dctSqrt1d2 * (p[1*8 + col] - p[7*8 + col]) + 2048) >> 12;\n        v7 = (dctSqrt1d2 * (p[1*8 + col] + p[7*8 + col]) + 2048) >> 12;\n        v5 = p[3*8 + col];\n        v6 = p[5*8 + col];\n\n        // stage 3\n        t = (v0 - v1 + 1) >> 1;\n        v0 = (v0 + v1 + 1) >> 1;\n        v1 = t;\n        t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\n        v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\n        v3 = t;\n        t = (v4 - v6 + 1) >> 1;\n        v4 = (v4 + v6 + 1) >> 1;\n        v6 = t;\n        t = (v7 + v5 + 1) >> 1;\n        v5 = (v7 - v5 + 1) >> 1;\n        v7 = t;\n\n        // stage 2\n        t = (v0 - v3 + 1) >> 1;\n        v0 = (v0 + v3 + 1) >> 1;\n        v3 = t;\n        t = (v1 - v2 + 1) >> 1;\n        v1 = (v1 + v2 + 1) >> 1;\n        v2 = t;\n        t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n        v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n        v7 = t;\n        t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n        v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n        v6 = t;\n\n        // stage 1\n        p[0*8 + col] = v0 + v7;\n        p[7*8 + col] = v0 - v7;\n        p[1*8 + col] = v1 + v6;\n        p[6*8 + col] = v1 - v6;\n        p[2*8 + col] = v2 + v5;\n        p[5*8 + col] = v2 - v5;\n        p[3*8 + col] = v3 + v4;\n        p[4*8 + col] = v3 - v4;\n      }\n\n      // convert to 8-bit integers\n      for (i = 0; i < 64; ++i) {\n        var sample = 128 + ((p[i] + 8) >> 4);\n        dataOut[i] = sample < 0 ? 0 : sample > 0xFF ? 0xFF : sample;\n      }\n    }\n\n    requestMemoryAllocation(samplesPerLine * blocksPerColumn * 8);\n\n    var i, j;\n    for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n      var scanLine = blockRow << 3;\n      for (i = 0; i < 8; i++)\n        lines.push(new Uint8Array(samplesPerLine));\n      for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n        quantizeAndInverse(component.blocks[blockRow][blockCol], r, R);\n\n        var offset = 0, sample = blockCol << 3;\n        for (j = 0; j < 8; j++) {\n          var line = lines[scanLine + j];\n          for (i = 0; i < 8; i++)\n            line[sample + i] = r[offset++];\n        }\n      }\n    }\n    return lines;\n  }\n\n  function clampTo8bit(a) {\n    return a < 0 ? 0 : a > 255 ? 255 : a;\n  }\n\n  constructor.prototype = {\n    load: function load(path) {\n      var xhr = new XMLHttpRequest();\n      xhr.open(\"GET\", path, true);\n      xhr.responseType = \"arraybuffer\";\n      xhr.onload = (function() {\n        // TODO catch parse error\n        var data = new Uint8Array(xhr.response || xhr.mozResponseArrayBuffer);\n        this.parse(data);\n        if (this.onload)\n          this.onload();\n      }).bind(this);\n      xhr.send(null);\n    },\n    parse: function parse(data) {\n      var maxResolutionInPixels = this.opts.maxResolutionInMP * 1000 * 1000;\n      var offset = 0, length = data.length;\n      function readUint16() {\n        var value = (data[offset] << 8) | data[offset + 1];\n        offset += 2;\n        return value;\n      }\n      function readDataBlock() {\n        var length = readUint16();\n        var array = data.subarray(offset, offset + length - 2);\n        offset += array.length;\n        return array;\n      }\n      function prepareComponents(frame) {\n        // According to the JPEG standard, the sampling factor must be between 1 and 4\n        // See https://github.com/libjpeg-turbo/libjpeg-turbo/blob/9abeff46d87bd201a952e276f3e4339556a403a3/libjpeg.txt#L1138-L1146\n        var maxH = 1, maxV = 1;\n        var component, componentId;\n        for (componentId in frame.components) {\n          if (frame.components.hasOwnProperty(componentId)) {\n            component = frame.components[componentId];\n            if (maxH < component.h) maxH = component.h;\n            if (maxV < component.v) maxV = component.v;\n          }\n        }\n        var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / maxH);\n        var mcusPerColumn = Math.ceil(frame.scanLines / 8 / maxV);\n        for (componentId in frame.components) {\n          if (frame.components.hasOwnProperty(componentId)) {\n            component = frame.components[componentId];\n            var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / maxH);\n            var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines  / 8) * component.v / maxV);\n            var blocksPerLineForMcu = mcusPerLine * component.h;\n            var blocksPerColumnForMcu = mcusPerColumn * component.v;\n            var blocksToAllocate = blocksPerColumnForMcu * blocksPerLineForMcu;\n            var blocks = [];\n\n            // Each block is a Int32Array of length 64 (4 x 64 = 256 bytes)\n            requestMemoryAllocation(blocksToAllocate * 256);\n\n            for (var i = 0; i < blocksPerColumnForMcu; i++) {\n              var row = [];\n              for (var j = 0; j < blocksPerLineForMcu; j++)\n                row.push(new Int32Array(64));\n              blocks.push(row);\n            }\n            component.blocksPerLine = blocksPerLine;\n            component.blocksPerColumn = blocksPerColumn;\n            component.blocks = blocks;\n          }\n        }\n        frame.maxH = maxH;\n        frame.maxV = maxV;\n        frame.mcusPerLine = mcusPerLine;\n        frame.mcusPerColumn = mcusPerColumn;\n      }\n      var jfif = null;\n      var adobe = null;\n      var pixels = null;\n      var frame, resetInterval;\n      var quantizationTables = [], frames = [];\n      var huffmanTablesAC = [], huffmanTablesDC = [];\n      var fileMarker = readUint16();\n      var malformedDataOffset = -1;\n      this.comments = [];\n      if (fileMarker != 0xFFD8) { // SOI (Start of Image)\n        throw new Error(\"SOI not found\");\n      }\n\n      fileMarker = readUint16();\n      while (fileMarker != 0xFFD9) { // EOI (End of image)\n        var i, j, l;\n        switch(fileMarker) {\n          case 0xFF00: break;\n          case 0xFFE0: // APP0 (Application Specific)\n          case 0xFFE1: // APP1\n          case 0xFFE2: // APP2\n          case 0xFFE3: // APP3\n          case 0xFFE4: // APP4\n          case 0xFFE5: // APP5\n          case 0xFFE6: // APP6\n          case 0xFFE7: // APP7\n          case 0xFFE8: // APP8\n          case 0xFFE9: // APP9\n          case 0xFFEA: // APP10\n          case 0xFFEB: // APP11\n          case 0xFFEC: // APP12\n          case 0xFFED: // APP13\n          case 0xFFEE: // APP14\n          case 0xFFEF: // APP15\n          case 0xFFFE: // COM (Comment)\n            var appData = readDataBlock();\n\n            if (fileMarker === 0xFFFE) {\n              var comment = String.fromCharCode.apply(null, appData);\n              this.comments.push(comment);\n            }\n\n            if (fileMarker === 0xFFE0) {\n              if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 &&\n                appData[3] === 0x46 && appData[4] === 0) { // 'JFIF\\x00'\n                jfif = {\n                  version: { major: appData[5], minor: appData[6] },\n                  densityUnits: appData[7],\n                  xDensity: (appData[8] << 8) | appData[9],\n                  yDensity: (appData[10] << 8) | appData[11],\n                  thumbWidth: appData[12],\n                  thumbHeight: appData[13],\n                  thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])\n                };\n              }\n            }\n            // TODO APP1 - Exif\n            if (fileMarker === 0xFFE1) {\n              if (appData[0] === 0x45 &&\n                appData[1] === 0x78 &&\n                appData[2] === 0x69 &&\n                appData[3] === 0x66 &&\n                appData[4] === 0) { // 'EXIF\\x00'\n                this.exifBuffer = appData.subarray(5, appData.length);\n              }\n            }\n\n            if (fileMarker === 0xFFEE) {\n              if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F &&\n                appData[3] === 0x62 && appData[4] === 0x65 && appData[5] === 0) { // 'Adobe\\x00'\n                adobe = {\n                  version: appData[6],\n                  flags0: (appData[7] << 8) | appData[8],\n                  flags1: (appData[9] << 8) | appData[10],\n                  transformCode: appData[11]\n                };\n              }\n            }\n            break;\n\n          case 0xFFDB: // DQT (Define Quantization Tables)\n            var quantizationTablesLength = readUint16();\n            var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n            while (offset < quantizationTablesEnd) {\n              var quantizationTableSpec = data[offset++];\n              requestMemoryAllocation(64 * 4);\n              var tableData = new Int32Array(64);\n              if ((quantizationTableSpec >> 4) === 0) { // 8 bit values\n                for (j = 0; j < 64; j++) {\n                  var z = dctZigZag[j];\n                  tableData[z] = data[offset++];\n                }\n              } else if ((quantizationTableSpec >> 4) === 1) { //16 bit\n                for (j = 0; j < 64; j++) {\n                  var z = dctZigZag[j];\n                  tableData[z] = readUint16();\n                }\n              } else\n                throw new Error(\"DQT: invalid table spec\");\n              quantizationTables[quantizationTableSpec & 15] = tableData;\n            }\n            break;\n\n          case 0xFFC0: // SOF0 (Start of Frame, Baseline DCT)\n          case 0xFFC1: // SOF1 (Start of Frame, Extended DCT)\n          case 0xFFC2: // SOF2 (Start of Frame, Progressive DCT)\n            readUint16(); // skip data length\n            frame = {};\n            frame.extended = (fileMarker === 0xFFC1);\n            frame.progressive = (fileMarker === 0xFFC2);\n            frame.precision = data[offset++];\n            frame.scanLines = readUint16();\n            frame.samplesPerLine = readUint16();\n            frame.components = {};\n            frame.componentsOrder = [];\n\n            var pixelsInFrame = frame.scanLines * frame.samplesPerLine;\n            if (pixelsInFrame > maxResolutionInPixels) {\n              var exceededAmount = Math.ceil((pixelsInFrame - maxResolutionInPixels) / 1e6);\n              throw new Error(`maxResolutionInMP limit exceeded by ${exceededAmount}MP`);\n            }\n\n            var componentsCount = data[offset++], componentId;\n            var maxH = 0, maxV = 0;\n            for (i = 0; i < componentsCount; i++) {\n              componentId = data[offset];\n              var h = data[offset + 1] >> 4;\n              var v = data[offset + 1] & 15;\n              var qId = data[offset + 2];\n\n              if ( h <= 0 || v <= 0 ) {\n                throw new Error('Invalid sampling factor, expected values above 0');\n              }\n\n              frame.componentsOrder.push(componentId);\n              frame.components[componentId] = {\n                h: h,\n                v: v,\n                quantizationIdx: qId\n              };\n              offset += 3;\n            }\n            prepareComponents(frame);\n            frames.push(frame);\n            break;\n\n          case 0xFFC4: // DHT (Define Huffman Tables)\n            var huffmanLength = readUint16();\n            for (i = 2; i < huffmanLength;) {\n              var huffmanTableSpec = data[offset++];\n              var codeLengths = new Uint8Array(16);\n              var codeLengthSum = 0;\n              for (j = 0; j < 16; j++, offset++) {\n                codeLengthSum += (codeLengths[j] = data[offset]);\n              }\n              requestMemoryAllocation(16 + codeLengthSum);\n              var huffmanValues = new Uint8Array(codeLengthSum);\n              for (j = 0; j < codeLengthSum; j++, offset++)\n                huffmanValues[j] = data[offset];\n              i += 17 + codeLengthSum;\n\n              ((huffmanTableSpec >> 4) === 0 ?\n                huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] =\n                buildHuffmanTable(codeLengths, huffmanValues);\n            }\n            break;\n\n          case 0xFFDD: // DRI (Define Restart Interval)\n            readUint16(); // skip data length\n            resetInterval = readUint16();\n            break;\n\n          case 0xFFDC: // Number of Lines marker\n            readUint16() // skip data length\n            readUint16() // Ignore this data since it represents the image height\n            break;\n            \n          case 0xFFDA: // SOS (Start of Scan)\n            var scanLength = readUint16();\n            var selectorsCount = data[offset++];\n            var components = [], component;\n            for (i = 0; i < selectorsCount; i++) {\n              component = frame.components[data[offset++]];\n              var tableSpec = data[offset++];\n              component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n              component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n              components.push(component);\n            }\n            var spectralStart = data[offset++];\n            var spectralEnd = data[offset++];\n            var successiveApproximation = data[offset++];\n            var processed = decodeScan(data, offset,\n              frame, components, resetInterval,\n              spectralStart, spectralEnd,\n              successiveApproximation >> 4, successiveApproximation & 15, this.opts);\n            offset += processed;\n            break;\n\n          case 0xFFFF: // Fill bytes\n            if (data[offset] !== 0xFF) { // Avoid skipping a valid marker.\n              offset--;\n            }\n            break;\n          default:\n            if (data[offset - 3] == 0xFF &&\n                data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) {\n              // could be incorrect encoding -- last 0xFF byte of the previous\n              // block was eaten by the encoder\n              offset -= 3;\n              break;\n            }\n            else if (fileMarker === 0xE0 || fileMarker == 0xE1) {\n              // Recover from malformed APP1 markers popular in some phone models.\n              // See https://github.com/eugeneware/jpeg-js/issues/82\n              if (malformedDataOffset !== -1) {\n                throw new Error(`first unknown JPEG marker at offset ${malformedDataOffset.toString(16)}, second unknown JPEG marker ${fileMarker.toString(16)} at offset ${(offset - 1).toString(16)}`);\n              }\n              malformedDataOffset = offset - 1;\n              const nextOffset = readUint16();\n              if (data[offset + nextOffset - 2] === 0xFF) {\n                offset += nextOffset - 2;\n                break;\n              }\n            }\n            throw new Error(\"unknown JPEG marker \" + fileMarker.toString(16));\n        }\n        fileMarker = readUint16();\n      }\n      if (frames.length != 1)\n        throw new Error(\"only single frame JPEGs supported\");\n\n      // set each frame's components quantization table\n      for (var i = 0; i < frames.length; i++) {\n        var cp = frames[i].components;\n        for (var j in cp) {\n          cp[j].quantizationTable = quantizationTables[cp[j].quantizationIdx];\n          delete cp[j].quantizationIdx;\n        }\n      }\n\n      this.width = frame.samplesPerLine;\n      this.height = frame.scanLines;\n      this.jfif = jfif;\n      this.adobe = adobe;\n      this.components = [];\n      for (var i = 0; i < frame.componentsOrder.length; i++) {\n        var component = frame.components[frame.componentsOrder[i]];\n        this.components.push({\n          lines: buildComponentData(frame, component),\n          scaleX: component.h / frame.maxH,\n          scaleY: component.v / frame.maxV\n        });\n      }\n    },\n    getData: function getData(width, height) {\n      var scaleX = this.width / width, scaleY = this.height / height;\n\n      var component1, component2, component3, component4;\n      var component1Line, component2Line, component3Line, component4Line;\n      var x, y;\n      var offset = 0;\n      var Y, Cb, Cr, K, C, M, Ye, R, G, B;\n      var colorTransform;\n      var dataLength = width * height * this.components.length;\n      requestMemoryAllocation(dataLength);\n      var data = new Uint8Array(dataLength);\n      switch (this.components.length) {\n        case 1:\n          component1 = this.components[0];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n\n              data[offset++] = Y;\n            }\n          }\n          break;\n        case 2:\n          // PDF might compress two component data in custom colorspace\n          component1 = this.components[0];\n          component2 = this.components[1];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n              data[offset++] = Y;\n              Y = component2Line[0 | (x * component2.scaleX * scaleX)];\n              data[offset++] = Y;\n            }\n          }\n          break;\n        case 3:\n          // The default transform for three components is true\n          colorTransform = true;\n          // The adobe transform marker overrides any previous setting\n          if (this.adobe && this.adobe.transformCode)\n            colorTransform = true;\n          else if (typeof this.opts.colorTransform !== 'undefined')\n            colorTransform = !!this.opts.colorTransform;\n\n          component1 = this.components[0];\n          component2 = this.components[1];\n          component3 = this.components[2];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];\n            component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              if (!colorTransform) {\n                R = component1Line[0 | (x * component1.scaleX * scaleX)];\n                G = component2Line[0 | (x * component2.scaleX * scaleX)];\n                B = component3Line[0 | (x * component3.scaleX * scaleX)];\n              } else {\n                Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n                Cb = component2Line[0 | (x * component2.scaleX * scaleX)];\n                Cr = component3Line[0 | (x * component3.scaleX * scaleX)];\n\n                R = clampTo8bit(Y + 1.402 * (Cr - 128));\n                G = clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128));\n                B = clampTo8bit(Y + 1.772 * (Cb - 128));\n              }\n\n              data[offset++] = R;\n              data[offset++] = G;\n              data[offset++] = B;\n            }\n          }\n          break;\n        case 4:\n          if (!this.adobe)\n            throw new Error('Unsupported color mode (4 components)');\n          // The default transform for four components is false\n          colorTransform = false;\n          // The adobe transform marker overrides any previous setting\n          if (this.adobe && this.adobe.transformCode)\n            colorTransform = true;\n          else if (typeof this.opts.colorTransform !== 'undefined')\n            colorTransform = !!this.opts.colorTransform;\n\n          component1 = this.components[0];\n          component2 = this.components[1];\n          component3 = this.components[2];\n          component4 = this.components[3];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];\n            component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)];\n            component4Line = component4.lines[0 | (y * component4.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              if (!colorTransform) {\n                C = component1Line[0 | (x * component1.scaleX * scaleX)];\n                M = component2Line[0 | (x * component2.scaleX * scaleX)];\n                Ye = component3Line[0 | (x * component3.scaleX * scaleX)];\n                K = component4Line[0 | (x * component4.scaleX * scaleX)];\n              } else {\n                Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n                Cb = component2Line[0 | (x * component2.scaleX * scaleX)];\n                Cr = component3Line[0 | (x * component3.scaleX * scaleX)];\n                K = component4Line[0 | (x * component4.scaleX * scaleX)];\n\n                C = 255 - clampTo8bit(Y + 1.402 * (Cr - 128));\n                M = 255 - clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128));\n                Ye = 255 - clampTo8bit(Y + 1.772 * (Cb - 128));\n              }\n              data[offset++] = 255-C;\n              data[offset++] = 255-M;\n              data[offset++] = 255-Ye;\n              data[offset++] = 255-K;\n            }\n          }\n          break;\n        default:\n          throw new Error('Unsupported color mode');\n      }\n      return data;\n    },\n    copyToImageData: function copyToImageData(imageData, formatAsRGBA) {\n      var width = imageData.width, height = imageData.height;\n      var imageDataArray = imageData.data;\n      var data = this.getData(width, height);\n      var i = 0, j = 0, x, y;\n      var Y, K, C, M, R, G, B;\n      switch (this.components.length) {\n        case 1:\n          for (y = 0; y < height; y++) {\n            for (x = 0; x < width; x++) {\n              Y = data[i++];\n\n              imageDataArray[j++] = Y;\n              imageDataArray[j++] = Y;\n              imageDataArray[j++] = Y;\n              if (formatAsRGBA) {\n                imageDataArray[j++] = 255;\n              }\n            }\n          }\n          break;\n        case 3:\n          for (y = 0; y < height; y++) {\n            for (x = 0; x < width; x++) {\n              R = data[i++];\n              G = data[i++];\n              B = data[i++];\n\n              imageDataArray[j++] = R;\n              imageDataArray[j++] = G;\n              imageDataArray[j++] = B;\n              if (formatAsRGBA) {\n                imageDataArray[j++] = 255;\n              }\n            }\n          }\n          break;\n        case 4:\n          for (y = 0; y < height; y++) {\n            for (x = 0; x < width; x++) {\n              C = data[i++];\n              M = data[i++];\n              Y = data[i++];\n              K = data[i++];\n\n              R = 255 - clampTo8bit(C * (1 - K / 255) + K);\n              G = 255 - clampTo8bit(M * (1 - K / 255) + K);\n              B = 255 - clampTo8bit(Y * (1 - K / 255) + K);\n\n              imageDataArray[j++] = R;\n              imageDataArray[j++] = G;\n              imageDataArray[j++] = B;\n              if (formatAsRGBA) {\n                imageDataArray[j++] = 255;\n              }\n            }\n          }\n          break;\n        default:\n          throw new Error('Unsupported color mode');\n      }\n    }\n  };\n\n\n  // We cap the amount of memory used by jpeg-js to avoid unexpected OOMs from untrusted content.\n  var totalBytesAllocated = 0;\n  var maxMemoryUsageBytes = 0;\n  function requestMemoryAllocation(increaseAmount = 0) {\n    var totalMemoryImpactBytes = totalBytesAllocated + increaseAmount;\n    if (totalMemoryImpactBytes > maxMemoryUsageBytes) {\n      var exceededAmount = Math.ceil((totalMemoryImpactBytes - maxMemoryUsageBytes) / 1024 / 1024);\n      throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${exceededAmount}MB`);\n    }\n\n    totalBytesAllocated = totalMemoryImpactBytes;\n  }\n\n  constructor.resetMaxMemoryUsage = function (maxMemoryUsageBytes_) {\n    totalBytesAllocated = 0;\n    maxMemoryUsageBytes = maxMemoryUsageBytes_;\n  };\n\n  constructor.getBytesAllocated = function () {\n    return totalBytesAllocated;\n  };\n\n  constructor.requestMemoryAllocation = requestMemoryAllocation;\n\n  return constructor;\n})();\n\nif (typeof module !== 'undefined') {\n\tmodule.exports = decode;\n} else if (typeof window !== 'undefined') {\n\twindow['jpeg-js'] = window['jpeg-js'] || {};\n\twindow['jpeg-js'].decode = decode;\n}\n\nfunction decode(jpegData, userOpts = {}) {\n  var defaultOpts = {\n    // \"undefined\" means \"Choose whether to transform colors based on the image’s color model.\"\n    colorTransform: undefined,\n    useTArray: false,\n    formatAsRGBA: true,\n    tolerantDecoding: true,\n    maxResolutionInMP: 100, // Don't decode more than 100 megapixels\n    maxMemoryUsageInMB: 512, // Don't decode if memory footprint is more than 512MB\n  };\n\n  var opts = {...defaultOpts, ...userOpts};\n  var arr = new Uint8Array(jpegData);\n  var decoder = new JpegImage();\n  decoder.opts = opts;\n  // If this constructor ever supports async decoding this will need to be done differently.\n  // Until then, treating as singleton limit is fine.\n  JpegImage.resetMaxMemoryUsage(opts.maxMemoryUsageInMB * 1024 * 1024);\n  decoder.parse(arr);\n\n  var channels = (opts.formatAsRGBA) ? 4 : 3;\n  var bytesNeeded = decoder.width * decoder.height * channels;\n  try {\n    JpegImage.requestMemoryAllocation(bytesNeeded);\n    var image = {\n      width: decoder.width,\n      height: decoder.height,\n      exifBuffer: decoder.exifBuffer,\n      data: opts.useTArray ?\n        new Uint8Array(bytesNeeded) :\n        Buffer.alloc(bytesNeeded)\n    };\n    if(decoder.comments.length > 0) {\n      image[\"comments\"] = decoder.comments;\n    }\n  } catch (err) {\n    if (err instanceof RangeError) {\n      throw new Error(\"Could not allocate enough memory for the image. \" +\n                      \"Required: \" + bytesNeeded);\n    } \n    \n    if (err instanceof ReferenceError) {\n      if (err.message === \"Buffer is not defined\") {\n        throw new Error(\"Buffer is not globally defined in this environment. \" +\n                        \"Consider setting useTArray to true\");\n      }\n    }\n    throw err;\n  }\n\n  decoder.copyToImageData(image, opts.formatAsRGBA);\n\n  return image;\n}\n","var encode = require('./lib/encoder'),\n    decode = require('./lib/decoder');\n\nmodule.exports = {\n  encode: encode,\n  decode: decode\n};\n","'use strict';\n\n/**\n * @param typeMap [Object] Map of MIME type -> Array[extensions]\n * @param ...\n */\nfunction Mime() {\n  this._types = Object.create(null);\n  this._extensions = Object.create(null);\n\n  for (let i = 0; i < arguments.length; i++) {\n    this.define(arguments[i]);\n  }\n\n  this.define = this.define.bind(this);\n  this.getType = this.getType.bind(this);\n  this.getExtension = this.getExtension.bind(this);\n}\n\n/**\n * Define mimetype -> extension mappings.  Each key is a mime-type that maps\n * to an array of extensions associated with the type.  The first extension is\n * used as the default extension for the type.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n *\n * If a type declares an extension that has already been defined, an error will\n * be thrown.  To suppress this error and force the extension to be associated\n * with the new type, pass `force`=true.  Alternatively, you may prefix the\n * extension with \"*\" to map the type to extension, without mapping the\n * extension to the type.\n *\n * e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']});\n *\n *\n * @param map (Object) type definitions\n * @param force (Boolean) if true, force overriding of existing definitions\n */\nMime.prototype.define = function(typeMap, force) {\n  for (let type in typeMap) {\n    let extensions = typeMap[type].map(function(t) {\n      return t.toLowerCase();\n    });\n    type = type.toLowerCase();\n\n    for (let i = 0; i < extensions.length; i++) {\n      const ext = extensions[i];\n\n      // '*' prefix = not the preferred type for this extension.  So fixup the\n      // extension, and skip it.\n      if (ext[0] === '*') {\n        continue;\n      }\n\n      if (!force && (ext in this._types)) {\n        throw new Error(\n          'Attempt to change mapping for \"' + ext +\n          '\" extension from \"' + this._types[ext] + '\" to \"' + type +\n          '\". Pass `force=true` to allow this, otherwise remove \"' + ext +\n          '\" from the list of extensions for \"' + type + '\".'\n        );\n      }\n\n      this._types[ext] = type;\n    }\n\n    // Use first extension as default\n    if (force || !this._extensions[type]) {\n      const ext = extensions[0];\n      this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1);\n    }\n  }\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.getType = function(path) {\n  path = String(path);\n  let last = path.replace(/^.*[/\\\\]/, '').toLowerCase();\n  let ext = last.replace(/^.*\\./, '').toLowerCase();\n\n  let hasPath = last.length < path.length;\n  let hasDot = ext.length < last.length - 1;\n\n  return (hasDot || !hasPath) && this._types[ext] || null;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.getExtension = function(type) {\n  type = /^\\s*([^;\\s]*)/.test(type) && RegExp.$1;\n  return type && this._extensions[type.toLowerCase()] || null;\n};\n\nmodule.exports = Mime;\n","module.exports = {\"application/andrew-inset\":[\"ez\"],\"application/applixware\":[\"aw\"],\"application/atom+xml\":[\"atom\"],\"application/atomcat+xml\":[\"atomcat\"],\"application/atomdeleted+xml\":[\"atomdeleted\"],\"application/atomsvc+xml\":[\"atomsvc\"],\"application/atsc-dwd+xml\":[\"dwd\"],\"application/atsc-held+xml\":[\"held\"],\"application/atsc-rsat+xml\":[\"rsat\"],\"application/bdoc\":[\"bdoc\"],\"application/calendar+xml\":[\"xcs\"],\"application/ccxml+xml\":[\"ccxml\"],\"application/cdfx+xml\":[\"cdfx\"],\"application/cdmi-capability\":[\"cdmia\"],\"application/cdmi-container\":[\"cdmic\"],\"application/cdmi-domain\":[\"cdmid\"],\"application/cdmi-object\":[\"cdmio\"],\"application/cdmi-queue\":[\"cdmiq\"],\"application/cu-seeme\":[\"cu\"],\"application/dash+xml\":[\"mpd\"],\"application/davmount+xml\":[\"davmount\"],\"application/docbook+xml\":[\"dbk\"],\"application/dssc+der\":[\"dssc\"],\"application/dssc+xml\":[\"xdssc\"],\"application/ecmascript\":[\"es\",\"ecma\"],\"application/emma+xml\":[\"emma\"],\"application/emotionml+xml\":[\"emotionml\"],\"application/epub+zip\":[\"epub\"],\"application/exi\":[\"exi\"],\"application/express\":[\"exp\"],\"application/fdt+xml\":[\"fdt\"],\"application/font-tdpfr\":[\"pfr\"],\"application/geo+json\":[\"geojson\"],\"application/gml+xml\":[\"gml\"],\"application/gpx+xml\":[\"gpx\"],\"application/gxf\":[\"gxf\"],\"application/gzip\":[\"gz\"],\"application/hjson\":[\"hjson\"],\"application/hyperstudio\":[\"stk\"],\"application/inkml+xml\":[\"ink\",\"inkml\"],\"application/ipfix\":[\"ipfix\"],\"application/its+xml\":[\"its\"],\"application/java-archive\":[\"jar\",\"war\",\"ear\"],\"application/java-serialized-object\":[\"ser\"],\"application/java-vm\":[\"class\"],\"application/javascript\":[\"js\",\"mjs\"],\"application/json\":[\"json\",\"map\"],\"application/json5\":[\"json5\"],\"application/jsonml+json\":[\"jsonml\"],\"application/ld+json\":[\"jsonld\"],\"application/lgr+xml\":[\"lgr\"],\"application/lost+xml\":[\"lostxml\"],\"application/mac-binhex40\":[\"hqx\"],\"application/mac-compactpro\":[\"cpt\"],\"application/mads+xml\":[\"mads\"],\"application/manifest+json\":[\"webmanifest\"],\"application/marc\":[\"mrc\"],\"application/marcxml+xml\":[\"mrcx\"],\"application/mathematica\":[\"ma\",\"nb\",\"mb\"],\"application/mathml+xml\":[\"mathml\"],\"application/mbox\":[\"mbox\"],\"application/mediaservercontrol+xml\":[\"mscml\"],\"application/metalink+xml\":[\"metalink\"],\"application/metalink4+xml\":[\"meta4\"],\"application/mets+xml\":[\"mets\"],\"application/mmt-aei+xml\":[\"maei\"],\"application/mmt-usd+xml\":[\"musd\"],\"application/mods+xml\":[\"mods\"],\"application/mp21\":[\"m21\",\"mp21\"],\"application/mp4\":[\"mp4s\",\"m4p\"],\"application/msword\":[\"doc\",\"dot\"],\"application/mxf\":[\"mxf\"],\"application/n-quads\":[\"nq\"],\"application/n-triples\":[\"nt\"],\"application/node\":[\"cjs\"],\"application/octet-stream\":[\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"],\"application/oda\":[\"oda\"],\"application/oebps-package+xml\":[\"opf\"],\"application/ogg\":[\"ogx\"],\"application/omdoc+xml\":[\"omdoc\"],\"application/onenote\":[\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"],\"application/oxps\":[\"oxps\"],\"application/p2p-overlay+xml\":[\"relo\"],\"application/patch-ops-error+xml\":[\"xer\"],\"application/pdf\":[\"pdf\"],\"application/pgp-encrypted\":[\"pgp\"],\"application/pgp-signature\":[\"asc\",\"sig\"],\"application/pics-rules\":[\"prf\"],\"application/pkcs10\":[\"p10\"],\"application/pkcs7-mime\":[\"p7m\",\"p7c\"],\"application/pkcs7-signature\":[\"p7s\"],\"application/pkcs8\":[\"p8\"],\"application/pkix-attr-cert\":[\"ac\"],\"application/pkix-cert\":[\"cer\"],\"application/pkix-crl\":[\"crl\"],\"application/pkix-pkipath\":[\"pkipath\"],\"application/pkixcmp\":[\"pki\"],\"application/pls+xml\":[\"pls\"],\"application/postscript\":[\"ai\",\"eps\",\"ps\"],\"application/provenance+xml\":[\"provx\"],\"application/pskc+xml\":[\"pskcxml\"],\"application/raml+yaml\":[\"raml\"],\"application/rdf+xml\":[\"rdf\",\"owl\"],\"application/reginfo+xml\":[\"rif\"],\"application/relax-ng-compact-syntax\":[\"rnc\"],\"application/resource-lists+xml\":[\"rl\"],\"application/resource-lists-diff+xml\":[\"rld\"],\"application/rls-services+xml\":[\"rs\"],\"application/route-apd+xml\":[\"rapd\"],\"application/route-s-tsid+xml\":[\"sls\"],\"application/route-usd+xml\":[\"rusd\"],\"application/rpki-ghostbusters\":[\"gbr\"],\"application/rpki-manifest\":[\"mft\"],\"application/rpki-roa\":[\"roa\"],\"application/rsd+xml\":[\"rsd\"],\"application/rss+xml\":[\"rss\"],\"application/rtf\":[\"rtf\"],\"application/sbml+xml\":[\"sbml\"],\"application/scvp-cv-request\":[\"scq\"],\"application/scvp-cv-response\":[\"scs\"],\"application/scvp-vp-request\":[\"spq\"],\"application/scvp-vp-response\":[\"spp\"],\"application/sdp\":[\"sdp\"],\"application/senml+xml\":[\"senmlx\"],\"application/sensml+xml\":[\"sensmlx\"],\"application/set-payment-initiation\":[\"setpay\"],\"application/set-registration-initiation\":[\"setreg\"],\"application/shf+xml\":[\"shf\"],\"application/sieve\":[\"siv\",\"sieve\"],\"application/smil+xml\":[\"smi\",\"smil\"],\"application/sparql-query\":[\"rq\"],\"application/sparql-results+xml\":[\"srx\"],\"application/srgs\":[\"gram\"],\"application/srgs+xml\":[\"grxml\"],\"application/sru+xml\":[\"sru\"],\"application/ssdl+xml\":[\"ssdl\"],\"application/ssml+xml\":[\"ssml\"],\"application/swid+xml\":[\"swidtag\"],\"application/tei+xml\":[\"tei\",\"teicorpus\"],\"application/thraud+xml\":[\"tfi\"],\"application/timestamped-data\":[\"tsd\"],\"application/toml\":[\"toml\"],\"application/trig\":[\"trig\"],\"application/ttml+xml\":[\"ttml\"],\"application/ubjson\":[\"ubj\"],\"application/urc-ressheet+xml\":[\"rsheet\"],\"application/urc-targetdesc+xml\":[\"td\"],\"application/voicexml+xml\":[\"vxml\"],\"application/wasm\":[\"wasm\"],\"application/widget\":[\"wgt\"],\"application/winhlp\":[\"hlp\"],\"application/wsdl+xml\":[\"wsdl\"],\"application/wspolicy+xml\":[\"wspolicy\"],\"application/xaml+xml\":[\"xaml\"],\"application/xcap-att+xml\":[\"xav\"],\"application/xcap-caps+xml\":[\"xca\"],\"application/xcap-diff+xml\":[\"xdf\"],\"application/xcap-el+xml\":[\"xel\"],\"application/xcap-ns+xml\":[\"xns\"],\"application/xenc+xml\":[\"xenc\"],\"application/xhtml+xml\":[\"xhtml\",\"xht\"],\"application/xliff+xml\":[\"xlf\"],\"application/xml\":[\"xml\",\"xsl\",\"xsd\",\"rng\"],\"application/xml-dtd\":[\"dtd\"],\"application/xop+xml\":[\"xop\"],\"application/xproc+xml\":[\"xpl\"],\"application/xslt+xml\":[\"*xsl\",\"xslt\"],\"application/xspf+xml\":[\"xspf\"],\"application/xv+xml\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"],\"application/yang\":[\"yang\"],\"application/yin+xml\":[\"yin\"],\"application/zip\":[\"zip\"],\"audio/3gpp\":[\"*3gpp\"],\"audio/adpcm\":[\"adp\"],\"audio/amr\":[\"amr\"],\"audio/basic\":[\"au\",\"snd\"],\"audio/midi\":[\"mid\",\"midi\",\"kar\",\"rmi\"],\"audio/mobile-xmf\":[\"mxmf\"],\"audio/mp3\":[\"*mp3\"],\"audio/mp4\":[\"m4a\",\"mp4a\"],\"audio/mpeg\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"],\"audio/ogg\":[\"oga\",\"ogg\",\"spx\",\"opus\"],\"audio/s3m\":[\"s3m\"],\"audio/silk\":[\"sil\"],\"audio/wav\":[\"wav\"],\"audio/wave\":[\"*wav\"],\"audio/webm\":[\"weba\"],\"audio/xm\":[\"xm\"],\"font/collection\":[\"ttc\"],\"font/otf\":[\"otf\"],\"font/ttf\":[\"ttf\"],\"font/woff\":[\"woff\"],\"font/woff2\":[\"woff2\"],\"image/aces\":[\"exr\"],\"image/apng\":[\"apng\"],\"image/avif\":[\"avif\"],\"image/bmp\":[\"bmp\"],\"image/cgm\":[\"cgm\"],\"image/dicom-rle\":[\"drle\"],\"image/emf\":[\"emf\"],\"image/fits\":[\"fits\"],\"image/g3fax\":[\"g3\"],\"image/gif\":[\"gif\"],\"image/heic\":[\"heic\"],\"image/heic-sequence\":[\"heics\"],\"image/heif\":[\"heif\"],\"image/heif-sequence\":[\"heifs\"],\"image/hej2k\":[\"hej2\"],\"image/hsj2\":[\"hsj2\"],\"image/ief\":[\"ief\"],\"image/jls\":[\"jls\"],\"image/jp2\":[\"jp2\",\"jpg2\"],\"image/jpeg\":[\"jpeg\",\"jpg\",\"jpe\"],\"image/jph\":[\"jph\"],\"image/jphc\":[\"jhc\"],\"image/jpm\":[\"jpm\"],\"image/jpx\":[\"jpx\",\"jpf\"],\"image/jxr\":[\"jxr\"],\"image/jxra\":[\"jxra\"],\"image/jxrs\":[\"jxrs\"],\"image/jxs\":[\"jxs\"],\"image/jxsc\":[\"jxsc\"],\"image/jxsi\":[\"jxsi\"],\"image/jxss\":[\"jxss\"],\"image/ktx\":[\"ktx\"],\"image/ktx2\":[\"ktx2\"],\"image/png\":[\"png\"],\"image/sgi\":[\"sgi\"],\"image/svg+xml\":[\"svg\",\"svgz\"],\"image/t38\":[\"t38\"],\"image/tiff\":[\"tif\",\"tiff\"],\"image/tiff-fx\":[\"tfx\"],\"image/webp\":[\"webp\"],\"image/wmf\":[\"wmf\"],\"message/disposition-notification\":[\"disposition-notification\"],\"message/global\":[\"u8msg\"],\"message/global-delivery-status\":[\"u8dsn\"],\"message/global-disposition-notification\":[\"u8mdn\"],\"message/global-headers\":[\"u8hdr\"],\"message/rfc822\":[\"eml\",\"mime\"],\"model/3mf\":[\"3mf\"],\"model/gltf+json\":[\"gltf\"],\"model/gltf-binary\":[\"glb\"],\"model/iges\":[\"igs\",\"iges\"],\"model/mesh\":[\"msh\",\"mesh\",\"silo\"],\"model/mtl\":[\"mtl\"],\"model/obj\":[\"obj\"],\"model/step+xml\":[\"stpx\"],\"model/step+zip\":[\"stpz\"],\"model/step-xml+zip\":[\"stpxz\"],\"model/stl\":[\"stl\"],\"model/vrml\":[\"wrl\",\"vrml\"],\"model/x3d+binary\":[\"*x3db\",\"x3dbz\"],\"model/x3d+fastinfoset\":[\"x3db\"],\"model/x3d+vrml\":[\"*x3dv\",\"x3dvz\"],\"model/x3d+xml\":[\"x3d\",\"x3dz\"],\"model/x3d-vrml\":[\"x3dv\"],\"text/cache-manifest\":[\"appcache\",\"manifest\"],\"text/calendar\":[\"ics\",\"ifb\"],\"text/coffeescript\":[\"coffee\",\"litcoffee\"],\"text/css\":[\"css\"],\"text/csv\":[\"csv\"],\"text/html\":[\"html\",\"htm\",\"shtml\"],\"text/jade\":[\"jade\"],\"text/jsx\":[\"jsx\"],\"text/less\":[\"less\"],\"text/markdown\":[\"markdown\",\"md\"],\"text/mathml\":[\"mml\"],\"text/mdx\":[\"mdx\"],\"text/n3\":[\"n3\"],\"text/plain\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"],\"text/richtext\":[\"rtx\"],\"text/rtf\":[\"*rtf\"],\"text/sgml\":[\"sgml\",\"sgm\"],\"text/shex\":[\"shex\"],\"text/slim\":[\"slim\",\"slm\"],\"text/spdx\":[\"spdx\"],\"text/stylus\":[\"stylus\",\"styl\"],\"text/tab-separated-values\":[\"tsv\"],\"text/troff\":[\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"],\"text/turtle\":[\"ttl\"],\"text/uri-list\":[\"uri\",\"uris\",\"urls\"],\"text/vcard\":[\"vcard\"],\"text/vtt\":[\"vtt\"],\"text/xml\":[\"*xml\"],\"text/yaml\":[\"yaml\",\"yml\"],\"video/3gpp\":[\"3gp\",\"3gpp\"],\"video/3gpp2\":[\"3g2\"],\"video/h261\":[\"h261\"],\"video/h263\":[\"h263\"],\"video/h264\":[\"h264\"],\"video/iso.segment\":[\"m4s\"],\"video/jpeg\":[\"jpgv\"],\"video/jpm\":[\"*jpm\",\"jpgm\"],\"video/mj2\":[\"mj2\",\"mjp2\"],\"video/mp2t\":[\"ts\"],\"video/mp4\":[\"mp4\",\"mp4v\",\"mpg4\"],\"video/mpeg\":[\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"],\"video/ogg\":[\"ogv\"],\"video/quicktime\":[\"qt\",\"mov\"],\"video/webm\":[\"webm\"]};","module.exports = {\"application/prs.cww\":[\"cww\"],\"application/vnd.1000minds.decision-model+xml\":[\"1km\"],\"application/vnd.3gpp.pic-bw-large\":[\"plb\"],\"application/vnd.3gpp.pic-bw-small\":[\"psb\"],\"application/vnd.3gpp.pic-bw-var\":[\"pvb\"],\"application/vnd.3gpp2.tcap\":[\"tcap\"],\"application/vnd.3m.post-it-notes\":[\"pwn\"],\"application/vnd.accpac.simply.aso\":[\"aso\"],\"application/vnd.accpac.simply.imp\":[\"imp\"],\"application/vnd.acucobol\":[\"acu\"],\"application/vnd.acucorp\":[\"atc\",\"acutc\"],\"application/vnd.adobe.air-application-installer-package+zip\":[\"air\"],\"application/vnd.adobe.formscentral.fcdt\":[\"fcdt\"],\"application/vnd.adobe.fxp\":[\"fxp\",\"fxpl\"],\"application/vnd.adobe.xdp+xml\":[\"xdp\"],\"application/vnd.adobe.xfdf\":[\"xfdf\"],\"application/vnd.ahead.space\":[\"ahead\"],\"application/vnd.airzip.filesecure.azf\":[\"azf\"],\"application/vnd.airzip.filesecure.azs\":[\"azs\"],\"application/vnd.amazon.ebook\":[\"azw\"],\"application/vnd.americandynamics.acc\":[\"acc\"],\"application/vnd.amiga.ami\":[\"ami\"],\"application/vnd.android.package-archive\":[\"apk\"],\"application/vnd.anser-web-certificate-issue-initiation\":[\"cii\"],\"application/vnd.anser-web-funds-transfer-initiation\":[\"fti\"],\"application/vnd.antix.game-component\":[\"atx\"],\"application/vnd.apple.installer+xml\":[\"mpkg\"],\"application/vnd.apple.keynote\":[\"key\"],\"application/vnd.apple.mpegurl\":[\"m3u8\"],\"application/vnd.apple.numbers\":[\"numbers\"],\"application/vnd.apple.pages\":[\"pages\"],\"application/vnd.apple.pkpass\":[\"pkpass\"],\"application/vnd.aristanetworks.swi\":[\"swi\"],\"application/vnd.astraea-software.iota\":[\"iota\"],\"application/vnd.audiograph\":[\"aep\"],\"application/vnd.balsamiq.bmml+xml\":[\"bmml\"],\"application/vnd.blueice.multipass\":[\"mpm\"],\"application/vnd.bmi\":[\"bmi\"],\"application/vnd.businessobjects\":[\"rep\"],\"application/vnd.chemdraw+xml\":[\"cdxml\"],\"application/vnd.chipnuts.karaoke-mmd\":[\"mmd\"],\"application/vnd.cinderella\":[\"cdy\"],\"application/vnd.citationstyles.style+xml\":[\"csl\"],\"application/vnd.claymore\":[\"cla\"],\"application/vnd.cloanto.rp9\":[\"rp9\"],\"application/vnd.clonk.c4group\":[\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"],\"application/vnd.cluetrust.cartomobile-config\":[\"c11amc\"],\"application/vnd.cluetrust.cartomobile-config-pkg\":[\"c11amz\"],\"application/vnd.commonspace\":[\"csp\"],\"application/vnd.contact.cmsg\":[\"cdbcmsg\"],\"application/vnd.cosmocaller\":[\"cmc\"],\"application/vnd.crick.clicker\":[\"clkx\"],\"application/vnd.crick.clicker.keyboard\":[\"clkk\"],\"application/vnd.crick.clicker.palette\":[\"clkp\"],\"application/vnd.crick.clicker.template\":[\"clkt\"],\"application/vnd.crick.clicker.wordbank\":[\"clkw\"],\"application/vnd.criticaltools.wbs+xml\":[\"wbs\"],\"application/vnd.ctc-posml\":[\"pml\"],\"application/vnd.cups-ppd\":[\"ppd\"],\"application/vnd.curl.car\":[\"car\"],\"application/vnd.curl.pcurl\":[\"pcurl\"],\"application/vnd.dart\":[\"dart\"],\"application/vnd.data-vision.rdz\":[\"rdz\"],\"application/vnd.dbf\":[\"dbf\"],\"application/vnd.dece.data\":[\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"],\"application/vnd.dece.ttml+xml\":[\"uvt\",\"uvvt\"],\"application/vnd.dece.unspecified\":[\"uvx\",\"uvvx\"],\"application/vnd.dece.zip\":[\"uvz\",\"uvvz\"],\"application/vnd.denovo.fcselayout-link\":[\"fe_launch\"],\"application/vnd.dna\":[\"dna\"],\"application/vnd.dolby.mlp\":[\"mlp\"],\"application/vnd.dpgraph\":[\"dpg\"],\"application/vnd.dreamfactory\":[\"dfac\"],\"application/vnd.ds-keypoint\":[\"kpxx\"],\"application/vnd.dvb.ait\":[\"ait\"],\"application/vnd.dvb.service\":[\"svc\"],\"application/vnd.dynageo\":[\"geo\"],\"application/vnd.ecowin.chart\":[\"mag\"],\"application/vnd.enliven\":[\"nml\"],\"application/vnd.epson.esf\":[\"esf\"],\"application/vnd.epson.msf\":[\"msf\"],\"application/vnd.epson.quickanime\":[\"qam\"],\"application/vnd.epson.salt\":[\"slt\"],\"application/vnd.epson.ssf\":[\"ssf\"],\"application/vnd.eszigno3+xml\":[\"es3\",\"et3\"],\"application/vnd.ezpix-album\":[\"ez2\"],\"application/vnd.ezpix-package\":[\"ez3\"],\"application/vnd.fdf\":[\"fdf\"],\"application/vnd.fdsn.mseed\":[\"mseed\"],\"application/vnd.fdsn.seed\":[\"seed\",\"dataless\"],\"application/vnd.flographit\":[\"gph\"],\"application/vnd.fluxtime.clip\":[\"ftc\"],\"application/vnd.framemaker\":[\"fm\",\"frame\",\"maker\",\"book\"],\"application/vnd.frogans.fnc\":[\"fnc\"],\"application/vnd.frogans.ltf\":[\"ltf\"],\"application/vnd.fsc.weblaunch\":[\"fsc\"],\"application/vnd.fujitsu.oasys\":[\"oas\"],\"application/vnd.fujitsu.oasys2\":[\"oa2\"],\"application/vnd.fujitsu.oasys3\":[\"oa3\"],\"application/vnd.fujitsu.oasysgp\":[\"fg5\"],\"application/vnd.fujitsu.oasysprs\":[\"bh2\"],\"application/vnd.fujixerox.ddd\":[\"ddd\"],\"application/vnd.fujixerox.docuworks\":[\"xdw\"],\"application/vnd.fujixerox.docuworks.binder\":[\"xbd\"],\"application/vnd.fuzzysheet\":[\"fzs\"],\"application/vnd.genomatix.tuxedo\":[\"txd\"],\"application/vnd.geogebra.file\":[\"ggb\"],\"application/vnd.geogebra.tool\":[\"ggt\"],\"application/vnd.geometry-explorer\":[\"gex\",\"gre\"],\"application/vnd.geonext\":[\"gxt\"],\"application/vnd.geoplan\":[\"g2w\"],\"application/vnd.geospace\":[\"g3w\"],\"application/vnd.gmx\":[\"gmx\"],\"application/vnd.google-apps.document\":[\"gdoc\"],\"application/vnd.google-apps.presentation\":[\"gslides\"],\"application/vnd.google-apps.spreadsheet\":[\"gsheet\"],\"application/vnd.google-earth.kml+xml\":[\"kml\"],\"application/vnd.google-earth.kmz\":[\"kmz\"],\"application/vnd.grafeq\":[\"gqf\",\"gqs\"],\"application/vnd.groove-account\":[\"gac\"],\"application/vnd.groove-help\":[\"ghf\"],\"application/vnd.groove-identity-message\":[\"gim\"],\"application/vnd.groove-injector\":[\"grv\"],\"application/vnd.groove-tool-message\":[\"gtm\"],\"application/vnd.groove-tool-template\":[\"tpl\"],\"application/vnd.groove-vcard\":[\"vcg\"],\"application/vnd.hal+xml\":[\"hal\"],\"application/vnd.handheld-entertainment+xml\":[\"zmm\"],\"application/vnd.hbci\":[\"hbci\"],\"application/vnd.hhe.lesson-player\":[\"les\"],\"application/vnd.hp-hpgl\":[\"hpgl\"],\"application/vnd.hp-hpid\":[\"hpid\"],\"application/vnd.hp-hps\":[\"hps\"],\"application/vnd.hp-jlyt\":[\"jlt\"],\"application/vnd.hp-pcl\":[\"pcl\"],\"application/vnd.hp-pclxl\":[\"pclxl\"],\"application/vnd.hydrostatix.sof-data\":[\"sfd-hdstx\"],\"application/vnd.ibm.minipay\":[\"mpy\"],\"application/vnd.ibm.modcap\":[\"afp\",\"listafp\",\"list3820\"],\"application/vnd.ibm.rights-management\":[\"irm\"],\"application/vnd.ibm.secure-container\":[\"sc\"],\"application/vnd.iccprofile\":[\"icc\",\"icm\"],\"application/vnd.igloader\":[\"igl\"],\"application/vnd.immervision-ivp\":[\"ivp\"],\"application/vnd.immervision-ivu\":[\"ivu\"],\"application/vnd.insors.igm\":[\"igm\"],\"application/vnd.intercon.formnet\":[\"xpw\",\"xpx\"],\"application/vnd.intergeo\":[\"i2g\"],\"application/vnd.intu.qbo\":[\"qbo\"],\"application/vnd.intu.qfx\":[\"qfx\"],\"application/vnd.ipunplugged.rcprofile\":[\"rcprofile\"],\"application/vnd.irepository.package+xml\":[\"irp\"],\"application/vnd.is-xpr\":[\"xpr\"],\"application/vnd.isac.fcs\":[\"fcs\"],\"application/vnd.jam\":[\"jam\"],\"application/vnd.jcp.javame.midlet-rms\":[\"rms\"],\"application/vnd.jisp\":[\"jisp\"],\"application/vnd.joost.joda-archive\":[\"joda\"],\"application/vnd.kahootz\":[\"ktz\",\"ktr\"],\"application/vnd.kde.karbon\":[\"karbon\"],\"application/vnd.kde.kchart\":[\"chrt\"],\"application/vnd.kde.kformula\":[\"kfo\"],\"application/vnd.kde.kivio\":[\"flw\"],\"application/vnd.kde.kontour\":[\"kon\"],\"application/vnd.kde.kpresenter\":[\"kpr\",\"kpt\"],\"application/vnd.kde.kspread\":[\"ksp\"],\"application/vnd.kde.kword\":[\"kwd\",\"kwt\"],\"application/vnd.kenameaapp\":[\"htke\"],\"application/vnd.kidspiration\":[\"kia\"],\"application/vnd.kinar\":[\"kne\",\"knp\"],\"application/vnd.koan\":[\"skp\",\"skd\",\"skt\",\"skm\"],\"application/vnd.kodak-descriptor\":[\"sse\"],\"application/vnd.las.las+xml\":[\"lasxml\"],\"application/vnd.llamagraphics.life-balance.desktop\":[\"lbd\"],\"application/vnd.llamagraphics.life-balance.exchange+xml\":[\"lbe\"],\"application/vnd.lotus-1-2-3\":[\"123\"],\"application/vnd.lotus-approach\":[\"apr\"],\"application/vnd.lotus-freelance\":[\"pre\"],\"application/vnd.lotus-notes\":[\"nsf\"],\"application/vnd.lotus-organizer\":[\"org\"],\"application/vnd.lotus-screencam\":[\"scm\"],\"application/vnd.lotus-wordpro\":[\"lwp\"],\"application/vnd.macports.portpkg\":[\"portpkg\"],\"application/vnd.mapbox-vector-tile\":[\"mvt\"],\"application/vnd.mcd\":[\"mcd\"],\"application/vnd.medcalcdata\":[\"mc1\"],\"application/vnd.mediastation.cdkey\":[\"cdkey\"],\"application/vnd.mfer\":[\"mwf\"],\"application/vnd.mfmp\":[\"mfm\"],\"application/vnd.micrografx.flo\":[\"flo\"],\"application/vnd.micrografx.igx\":[\"igx\"],\"application/vnd.mif\":[\"mif\"],\"application/vnd.mobius.daf\":[\"daf\"],\"application/vnd.mobius.dis\":[\"dis\"],\"application/vnd.mobius.mbk\":[\"mbk\"],\"application/vnd.mobius.mqy\":[\"mqy\"],\"application/vnd.mobius.msl\":[\"msl\"],\"application/vnd.mobius.plc\":[\"plc\"],\"application/vnd.mobius.txf\":[\"txf\"],\"application/vnd.mophun.application\":[\"mpn\"],\"application/vnd.mophun.certificate\":[\"mpc\"],\"application/vnd.mozilla.xul+xml\":[\"xul\"],\"application/vnd.ms-artgalry\":[\"cil\"],\"application/vnd.ms-cab-compressed\":[\"cab\"],\"application/vnd.ms-excel\":[\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"],\"application/vnd.ms-excel.addin.macroenabled.12\":[\"xlam\"],\"application/vnd.ms-excel.sheet.binary.macroenabled.12\":[\"xlsb\"],\"application/vnd.ms-excel.sheet.macroenabled.12\":[\"xlsm\"],\"application/vnd.ms-excel.template.macroenabled.12\":[\"xltm\"],\"application/vnd.ms-fontobject\":[\"eot\"],\"application/vnd.ms-htmlhelp\":[\"chm\"],\"application/vnd.ms-ims\":[\"ims\"],\"application/vnd.ms-lrm\":[\"lrm\"],\"application/vnd.ms-officetheme\":[\"thmx\"],\"application/vnd.ms-outlook\":[\"msg\"],\"application/vnd.ms-pki.seccat\":[\"cat\"],\"application/vnd.ms-pki.stl\":[\"*stl\"],\"application/vnd.ms-powerpoint\":[\"ppt\",\"pps\",\"pot\"],\"application/vnd.ms-powerpoint.addin.macroenabled.12\":[\"ppam\"],\"application/vnd.ms-powerpoint.presentation.macroenabled.12\":[\"pptm\"],\"application/vnd.ms-powerpoint.slide.macroenabled.12\":[\"sldm\"],\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\":[\"ppsm\"],\"application/vnd.ms-powerpoint.template.macroenabled.12\":[\"potm\"],\"application/vnd.ms-project\":[\"mpp\",\"mpt\"],\"application/vnd.ms-word.document.macroenabled.12\":[\"docm\"],\"application/vnd.ms-word.template.macroenabled.12\":[\"dotm\"],\"application/vnd.ms-works\":[\"wps\",\"wks\",\"wcm\",\"wdb\"],\"application/vnd.ms-wpl\":[\"wpl\"],\"application/vnd.ms-xpsdocument\":[\"xps\"],\"application/vnd.mseq\":[\"mseq\"],\"application/vnd.musician\":[\"mus\"],\"application/vnd.muvee.style\":[\"msty\"],\"application/vnd.mynfc\":[\"taglet\"],\"application/vnd.neurolanguage.nlu\":[\"nlu\"],\"application/vnd.nitf\":[\"ntf\",\"nitf\"],\"application/vnd.noblenet-directory\":[\"nnd\"],\"application/vnd.noblenet-sealer\":[\"nns\"],\"application/vnd.noblenet-web\":[\"nnw\"],\"application/vnd.nokia.n-gage.ac+xml\":[\"*ac\"],\"application/vnd.nokia.n-gage.data\":[\"ngdat\"],\"application/vnd.nokia.n-gage.symbian.install\":[\"n-gage\"],\"application/vnd.nokia.radio-preset\":[\"rpst\"],\"application/vnd.nokia.radio-presets\":[\"rpss\"],\"application/vnd.novadigm.edm\":[\"edm\"],\"application/vnd.novadigm.edx\":[\"edx\"],\"application/vnd.novadigm.ext\":[\"ext\"],\"application/vnd.oasis.opendocument.chart\":[\"odc\"],\"application/vnd.oasis.opendocument.chart-template\":[\"otc\"],\"application/vnd.oasis.opendocument.database\":[\"odb\"],\"application/vnd.oasis.opendocument.formula\":[\"odf\"],\"application/vnd.oasis.opendocument.formula-template\":[\"odft\"],\"application/vnd.oasis.opendocument.graphics\":[\"odg\"],\"application/vnd.oasis.opendocument.graphics-template\":[\"otg\"],\"application/vnd.oasis.opendocument.image\":[\"odi\"],\"application/vnd.oasis.opendocument.image-template\":[\"oti\"],\"application/vnd.oasis.opendocument.presentation\":[\"odp\"],\"application/vnd.oasis.opendocument.presentation-template\":[\"otp\"],\"application/vnd.oasis.opendocument.spreadsheet\":[\"ods\"],\"application/vnd.oasis.opendocument.spreadsheet-template\":[\"ots\"],\"application/vnd.oasis.opendocument.text\":[\"odt\"],\"application/vnd.oasis.opendocument.text-master\":[\"odm\"],\"application/vnd.oasis.opendocument.text-template\":[\"ott\"],\"application/vnd.oasis.opendocument.text-web\":[\"oth\"],\"application/vnd.olpc-sugar\":[\"xo\"],\"application/vnd.oma.dd2+xml\":[\"dd2\"],\"application/vnd.openblox.game+xml\":[\"obgx\"],\"application/vnd.openofficeorg.extension\":[\"oxt\"],\"application/vnd.openstreetmap.data+xml\":[\"osm\"],\"application/vnd.openxmlformats-officedocument.presentationml.presentation\":[\"pptx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slide\":[\"sldx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\":[\"ppsx\"],\"application/vnd.openxmlformats-officedocument.presentationml.template\":[\"potx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":[\"xlsx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\":[\"xltx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":[\"docx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\":[\"dotx\"],\"application/vnd.osgeo.mapguide.package\":[\"mgp\"],\"application/vnd.osgi.dp\":[\"dp\"],\"application/vnd.osgi.subsystem\":[\"esa\"],\"application/vnd.palm\":[\"pdb\",\"pqa\",\"oprc\"],\"application/vnd.pawaafile\":[\"paw\"],\"application/vnd.pg.format\":[\"str\"],\"application/vnd.pg.osasli\":[\"ei6\"],\"application/vnd.picsel\":[\"efif\"],\"application/vnd.pmi.widget\":[\"wg\"],\"application/vnd.pocketlearn\":[\"plf\"],\"application/vnd.powerbuilder6\":[\"pbd\"],\"application/vnd.previewsystems.box\":[\"box\"],\"application/vnd.proteus.magazine\":[\"mgz\"],\"application/vnd.publishare-delta-tree\":[\"qps\"],\"application/vnd.pvi.ptid1\":[\"ptid\"],\"application/vnd.quark.quarkxpress\":[\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"],\"application/vnd.rar\":[\"rar\"],\"application/vnd.realvnc.bed\":[\"bed\"],\"application/vnd.recordare.musicxml\":[\"mxl\"],\"application/vnd.recordare.musicxml+xml\":[\"musicxml\"],\"application/vnd.rig.cryptonote\":[\"cryptonote\"],\"application/vnd.rim.cod\":[\"cod\"],\"application/vnd.rn-realmedia\":[\"rm\"],\"application/vnd.rn-realmedia-vbr\":[\"rmvb\"],\"application/vnd.route66.link66+xml\":[\"link66\"],\"application/vnd.sailingtracker.track\":[\"st\"],\"application/vnd.seemail\":[\"see\"],\"application/vnd.sema\":[\"sema\"],\"application/vnd.semd\":[\"semd\"],\"application/vnd.semf\":[\"semf\"],\"application/vnd.shana.informed.formdata\":[\"ifm\"],\"application/vnd.shana.informed.formtemplate\":[\"itp\"],\"application/vnd.shana.informed.interchange\":[\"iif\"],\"application/vnd.shana.informed.package\":[\"ipk\"],\"application/vnd.simtech-mindmapper\":[\"twd\",\"twds\"],\"application/vnd.smaf\":[\"mmf\"],\"application/vnd.smart.teacher\":[\"teacher\"],\"application/vnd.software602.filler.form+xml\":[\"fo\"],\"application/vnd.solent.sdkm+xml\":[\"sdkm\",\"sdkd\"],\"application/vnd.spotfire.dxp\":[\"dxp\"],\"application/vnd.spotfire.sfs\":[\"sfs\"],\"application/vnd.stardivision.calc\":[\"sdc\"],\"application/vnd.stardivision.draw\":[\"sda\"],\"application/vnd.stardivision.impress\":[\"sdd\"],\"application/vnd.stardivision.math\":[\"smf\"],\"application/vnd.stardivision.writer\":[\"sdw\",\"vor\"],\"application/vnd.stardivision.writer-global\":[\"sgl\"],\"application/vnd.stepmania.package\":[\"smzip\"],\"application/vnd.stepmania.stepchart\":[\"sm\"],\"application/vnd.sun.wadl+xml\":[\"wadl\"],\"application/vnd.sun.xml.calc\":[\"sxc\"],\"application/vnd.sun.xml.calc.template\":[\"stc\"],\"application/vnd.sun.xml.draw\":[\"sxd\"],\"application/vnd.sun.xml.draw.template\":[\"std\"],\"application/vnd.sun.xml.impress\":[\"sxi\"],\"application/vnd.sun.xml.impress.template\":[\"sti\"],\"application/vnd.sun.xml.math\":[\"sxm\"],\"application/vnd.sun.xml.writer\":[\"sxw\"],\"application/vnd.sun.xml.writer.global\":[\"sxg\"],\"application/vnd.sun.xml.writer.template\":[\"stw\"],\"application/vnd.sus-calendar\":[\"sus\",\"susp\"],\"application/vnd.svd\":[\"svd\"],\"application/vnd.symbian.install\":[\"sis\",\"sisx\"],\"application/vnd.syncml+xml\":[\"xsm\"],\"application/vnd.syncml.dm+wbxml\":[\"bdm\"],\"application/vnd.syncml.dm+xml\":[\"xdm\"],\"application/vnd.syncml.dmddf+xml\":[\"ddf\"],\"application/vnd.tao.intent-module-archive\":[\"tao\"],\"application/vnd.tcpdump.pcap\":[\"pcap\",\"cap\",\"dmp\"],\"application/vnd.tmobile-livetv\":[\"tmo\"],\"application/vnd.trid.tpt\":[\"tpt\"],\"application/vnd.triscape.mxs\":[\"mxs\"],\"application/vnd.trueapp\":[\"tra\"],\"application/vnd.ufdl\":[\"ufd\",\"ufdl\"],\"application/vnd.uiq.theme\":[\"utz\"],\"application/vnd.umajin\":[\"umj\"],\"application/vnd.unity\":[\"unityweb\"],\"application/vnd.uoml+xml\":[\"uoml\"],\"application/vnd.vcx\":[\"vcx\"],\"application/vnd.visio\":[\"vsd\",\"vst\",\"vss\",\"vsw\"],\"application/vnd.visionary\":[\"vis\"],\"application/vnd.vsf\":[\"vsf\"],\"application/vnd.wap.wbxml\":[\"wbxml\"],\"application/vnd.wap.wmlc\":[\"wmlc\"],\"application/vnd.wap.wmlscriptc\":[\"wmlsc\"],\"application/vnd.webturbo\":[\"wtb\"],\"application/vnd.wolfram.player\":[\"nbp\"],\"application/vnd.wordperfect\":[\"wpd\"],\"application/vnd.wqd\":[\"wqd\"],\"application/vnd.wt.stf\":[\"stf\"],\"application/vnd.xara\":[\"xar\"],\"application/vnd.xfdl\":[\"xfdl\"],\"application/vnd.yamaha.hv-dic\":[\"hvd\"],\"application/vnd.yamaha.hv-script\":[\"hvs\"],\"application/vnd.yamaha.hv-voice\":[\"hvp\"],\"application/vnd.yamaha.openscoreformat\":[\"osf\"],\"application/vnd.yamaha.openscoreformat.osfpvg+xml\":[\"osfpvg\"],\"application/vnd.yamaha.smaf-audio\":[\"saf\"],\"application/vnd.yamaha.smaf-phrase\":[\"spf\"],\"application/vnd.yellowriver-custom-menu\":[\"cmp\"],\"application/vnd.zul\":[\"zir\",\"zirz\"],\"application/vnd.zzazz.deck+xml\":[\"zaz\"],\"application/x-7z-compressed\":[\"7z\"],\"application/x-abiword\":[\"abw\"],\"application/x-ace-compressed\":[\"ace\"],\"application/x-apple-diskimage\":[\"*dmg\"],\"application/x-arj\":[\"arj\"],\"application/x-authorware-bin\":[\"aab\",\"x32\",\"u32\",\"vox\"],\"application/x-authorware-map\":[\"aam\"],\"application/x-authorware-seg\":[\"aas\"],\"application/x-bcpio\":[\"bcpio\"],\"application/x-bdoc\":[\"*bdoc\"],\"application/x-bittorrent\":[\"torrent\"],\"application/x-blorb\":[\"blb\",\"blorb\"],\"application/x-bzip\":[\"bz\"],\"application/x-bzip2\":[\"bz2\",\"boz\"],\"application/x-cbr\":[\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"],\"application/x-cdlink\":[\"vcd\"],\"application/x-cfs-compressed\":[\"cfs\"],\"application/x-chat\":[\"chat\"],\"application/x-chess-pgn\":[\"pgn\"],\"application/x-chrome-extension\":[\"crx\"],\"application/x-cocoa\":[\"cco\"],\"application/x-conference\":[\"nsc\"],\"application/x-cpio\":[\"cpio\"],\"application/x-csh\":[\"csh\"],\"application/x-debian-package\":[\"*deb\",\"udeb\"],\"application/x-dgc-compressed\":[\"dgc\"],\"application/x-director\":[\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"],\"application/x-doom\":[\"wad\"],\"application/x-dtbncx+xml\":[\"ncx\"],\"application/x-dtbook+xml\":[\"dtb\"],\"application/x-dtbresource+xml\":[\"res\"],\"application/x-dvi\":[\"dvi\"],\"application/x-envoy\":[\"evy\"],\"application/x-eva\":[\"eva\"],\"application/x-font-bdf\":[\"bdf\"],\"application/x-font-ghostscript\":[\"gsf\"],\"application/x-font-linux-psf\":[\"psf\"],\"application/x-font-pcf\":[\"pcf\"],\"application/x-font-snf\":[\"snf\"],\"application/x-font-type1\":[\"pfa\",\"pfb\",\"pfm\",\"afm\"],\"application/x-freearc\":[\"arc\"],\"application/x-futuresplash\":[\"spl\"],\"application/x-gca-compressed\":[\"gca\"],\"application/x-glulx\":[\"ulx\"],\"application/x-gnumeric\":[\"gnumeric\"],\"application/x-gramps-xml\":[\"gramps\"],\"application/x-gtar\":[\"gtar\"],\"application/x-hdf\":[\"hdf\"],\"application/x-httpd-php\":[\"php\"],\"application/x-install-instructions\":[\"install\"],\"application/x-iso9660-image\":[\"*iso\"],\"application/x-iwork-keynote-sffkey\":[\"*key\"],\"application/x-iwork-numbers-sffnumbers\":[\"*numbers\"],\"application/x-iwork-pages-sffpages\":[\"*pages\"],\"application/x-java-archive-diff\":[\"jardiff\"],\"application/x-java-jnlp-file\":[\"jnlp\"],\"application/x-keepass2\":[\"kdbx\"],\"application/x-latex\":[\"latex\"],\"application/x-lua-bytecode\":[\"luac\"],\"application/x-lzh-compressed\":[\"lzh\",\"lha\"],\"application/x-makeself\":[\"run\"],\"application/x-mie\":[\"mie\"],\"application/x-mobipocket-ebook\":[\"prc\",\"mobi\"],\"application/x-ms-application\":[\"application\"],\"application/x-ms-shortcut\":[\"lnk\"],\"application/x-ms-wmd\":[\"wmd\"],\"application/x-ms-wmz\":[\"wmz\"],\"application/x-ms-xbap\":[\"xbap\"],\"application/x-msaccess\":[\"mdb\"],\"application/x-msbinder\":[\"obd\"],\"application/x-mscardfile\":[\"crd\"],\"application/x-msclip\":[\"clp\"],\"application/x-msdos-program\":[\"*exe\"],\"application/x-msdownload\":[\"*exe\",\"*dll\",\"com\",\"bat\",\"*msi\"],\"application/x-msmediaview\":[\"mvb\",\"m13\",\"m14\"],\"application/x-msmetafile\":[\"*wmf\",\"*wmz\",\"*emf\",\"emz\"],\"application/x-msmoney\":[\"mny\"],\"application/x-mspublisher\":[\"pub\"],\"application/x-msschedule\":[\"scd\"],\"application/x-msterminal\":[\"trm\"],\"application/x-mswrite\":[\"wri\"],\"application/x-netcdf\":[\"nc\",\"cdf\"],\"application/x-ns-proxy-autoconfig\":[\"pac\"],\"application/x-nzb\":[\"nzb\"],\"application/x-perl\":[\"pl\",\"pm\"],\"application/x-pilot\":[\"*prc\",\"*pdb\"],\"application/x-pkcs12\":[\"p12\",\"pfx\"],\"application/x-pkcs7-certificates\":[\"p7b\",\"spc\"],\"application/x-pkcs7-certreqresp\":[\"p7r\"],\"application/x-rar-compressed\":[\"*rar\"],\"application/x-redhat-package-manager\":[\"rpm\"],\"application/x-research-info-systems\":[\"ris\"],\"application/x-sea\":[\"sea\"],\"application/x-sh\":[\"sh\"],\"application/x-shar\":[\"shar\"],\"application/x-shockwave-flash\":[\"swf\"],\"application/x-silverlight-app\":[\"xap\"],\"application/x-sql\":[\"sql\"],\"application/x-stuffit\":[\"sit\"],\"application/x-stuffitx\":[\"sitx\"],\"application/x-subrip\":[\"srt\"],\"application/x-sv4cpio\":[\"sv4cpio\"],\"application/x-sv4crc\":[\"sv4crc\"],\"application/x-t3vm-image\":[\"t3\"],\"application/x-tads\":[\"gam\"],\"application/x-tar\":[\"tar\"],\"application/x-tcl\":[\"tcl\",\"tk\"],\"application/x-tex\":[\"tex\"],\"application/x-tex-tfm\":[\"tfm\"],\"application/x-texinfo\":[\"texinfo\",\"texi\"],\"application/x-tgif\":[\"*obj\"],\"application/x-ustar\":[\"ustar\"],\"application/x-virtualbox-hdd\":[\"hdd\"],\"application/x-virtualbox-ova\":[\"ova\"],\"application/x-virtualbox-ovf\":[\"ovf\"],\"application/x-virtualbox-vbox\":[\"vbox\"],\"application/x-virtualbox-vbox-extpack\":[\"vbox-extpack\"],\"application/x-virtualbox-vdi\":[\"vdi\"],\"application/x-virtualbox-vhd\":[\"vhd\"],\"application/x-virtualbox-vmdk\":[\"vmdk\"],\"application/x-wais-source\":[\"src\"],\"application/x-web-app-manifest+json\":[\"webapp\"],\"application/x-x509-ca-cert\":[\"der\",\"crt\",\"pem\"],\"application/x-xfig\":[\"fig\"],\"application/x-xliff+xml\":[\"*xlf\"],\"application/x-xpinstall\":[\"xpi\"],\"application/x-xz\":[\"xz\"],\"application/x-zmachine\":[\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"],\"audio/vnd.dece.audio\":[\"uva\",\"uvva\"],\"audio/vnd.digital-winds\":[\"eol\"],\"audio/vnd.dra\":[\"dra\"],\"audio/vnd.dts\":[\"dts\"],\"audio/vnd.dts.hd\":[\"dtshd\"],\"audio/vnd.lucent.voice\":[\"lvp\"],\"audio/vnd.ms-playready.media.pya\":[\"pya\"],\"audio/vnd.nuera.ecelp4800\":[\"ecelp4800\"],\"audio/vnd.nuera.ecelp7470\":[\"ecelp7470\"],\"audio/vnd.nuera.ecelp9600\":[\"ecelp9600\"],\"audio/vnd.rip\":[\"rip\"],\"audio/x-aac\":[\"aac\"],\"audio/x-aiff\":[\"aif\",\"aiff\",\"aifc\"],\"audio/x-caf\":[\"caf\"],\"audio/x-flac\":[\"flac\"],\"audio/x-m4a\":[\"*m4a\"],\"audio/x-matroska\":[\"mka\"],\"audio/x-mpegurl\":[\"m3u\"],\"audio/x-ms-wax\":[\"wax\"],\"audio/x-ms-wma\":[\"wma\"],\"audio/x-pn-realaudio\":[\"ram\",\"ra\"],\"audio/x-pn-realaudio-plugin\":[\"rmp\"],\"audio/x-realaudio\":[\"*ra\"],\"audio/x-wav\":[\"*wav\"],\"chemical/x-cdx\":[\"cdx\"],\"chemical/x-cif\":[\"cif\"],\"chemical/x-cmdf\":[\"cmdf\"],\"chemical/x-cml\":[\"cml\"],\"chemical/x-csml\":[\"csml\"],\"chemical/x-xyz\":[\"xyz\"],\"image/prs.btif\":[\"btif\"],\"image/prs.pti\":[\"pti\"],\"image/vnd.adobe.photoshop\":[\"psd\"],\"image/vnd.airzip.accelerator.azv\":[\"azv\"],\"image/vnd.dece.graphic\":[\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"],\"image/vnd.djvu\":[\"djvu\",\"djv\"],\"image/vnd.dvb.subtitle\":[\"*sub\"],\"image/vnd.dwg\":[\"dwg\"],\"image/vnd.dxf\":[\"dxf\"],\"image/vnd.fastbidsheet\":[\"fbs\"],\"image/vnd.fpx\":[\"fpx\"],\"image/vnd.fst\":[\"fst\"],\"image/vnd.fujixerox.edmics-mmr\":[\"mmr\"],\"image/vnd.fujixerox.edmics-rlc\":[\"rlc\"],\"image/vnd.microsoft.icon\":[\"ico\"],\"image/vnd.ms-dds\":[\"dds\"],\"image/vnd.ms-modi\":[\"mdi\"],\"image/vnd.ms-photo\":[\"wdp\"],\"image/vnd.net-fpx\":[\"npx\"],\"image/vnd.pco.b16\":[\"b16\"],\"image/vnd.tencent.tap\":[\"tap\"],\"image/vnd.valve.source.texture\":[\"vtf\"],\"image/vnd.wap.wbmp\":[\"wbmp\"],\"image/vnd.xiff\":[\"xif\"],\"image/vnd.zbrush.pcx\":[\"pcx\"],\"image/x-3ds\":[\"3ds\"],\"image/x-cmu-raster\":[\"ras\"],\"image/x-cmx\":[\"cmx\"],\"image/x-freehand\":[\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"],\"image/x-icon\":[\"*ico\"],\"image/x-jng\":[\"jng\"],\"image/x-mrsid-image\":[\"sid\"],\"image/x-ms-bmp\":[\"*bmp\"],\"image/x-pcx\":[\"*pcx\"],\"image/x-pict\":[\"pic\",\"pct\"],\"image/x-portable-anymap\":[\"pnm\"],\"image/x-portable-bitmap\":[\"pbm\"],\"image/x-portable-graymap\":[\"pgm\"],\"image/x-portable-pixmap\":[\"ppm\"],\"image/x-rgb\":[\"rgb\"],\"image/x-tga\":[\"tga\"],\"image/x-xbitmap\":[\"xbm\"],\"image/x-xpixmap\":[\"xpm\"],\"image/x-xwindowdump\":[\"xwd\"],\"message/vnd.wfa.wsc\":[\"wsc\"],\"model/vnd.collada+xml\":[\"dae\"],\"model/vnd.dwf\":[\"dwf\"],\"model/vnd.gdl\":[\"gdl\"],\"model/vnd.gtw\":[\"gtw\"],\"model/vnd.mts\":[\"mts\"],\"model/vnd.opengex\":[\"ogex\"],\"model/vnd.parasolid.transmit.binary\":[\"x_b\"],\"model/vnd.parasolid.transmit.text\":[\"x_t\"],\"model/vnd.sap.vds\":[\"vds\"],\"model/vnd.usdz+zip\":[\"usdz\"],\"model/vnd.valve.source.compiled-map\":[\"bsp\"],\"model/vnd.vtu\":[\"vtu\"],\"text/prs.lines.tag\":[\"dsc\"],\"text/vnd.curl\":[\"curl\"],\"text/vnd.curl.dcurl\":[\"dcurl\"],\"text/vnd.curl.mcurl\":[\"mcurl\"],\"text/vnd.curl.scurl\":[\"scurl\"],\"text/vnd.dvb.subtitle\":[\"sub\"],\"text/vnd.fly\":[\"fly\"],\"text/vnd.fmi.flexstor\":[\"flx\"],\"text/vnd.graphviz\":[\"gv\"],\"text/vnd.in3d.3dml\":[\"3dml\"],\"text/vnd.in3d.spot\":[\"spot\"],\"text/vnd.sun.j2me.app-descriptor\":[\"jad\"],\"text/vnd.wap.wml\":[\"wml\"],\"text/vnd.wap.wmlscript\":[\"wmls\"],\"text/x-asm\":[\"s\",\"asm\"],\"text/x-c\":[\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"],\"text/x-component\":[\"htc\"],\"text/x-fortran\":[\"f\",\"for\",\"f77\",\"f90\"],\"text/x-handlebars-template\":[\"hbs\"],\"text/x-java-source\":[\"java\"],\"text/x-lua\":[\"lua\"],\"text/x-markdown\":[\"mkd\"],\"text/x-nfo\":[\"nfo\"],\"text/x-opml\":[\"opml\"],\"text/x-org\":[\"*org\"],\"text/x-pascal\":[\"p\",\"pas\"],\"text/x-processing\":[\"pde\"],\"text/x-sass\":[\"sass\"],\"text/x-scss\":[\"scss\"],\"text/x-setext\":[\"etx\"],\"text/x-sfv\":[\"sfv\"],\"text/x-suse-ymp\":[\"ymp\"],\"text/x-uuencode\":[\"uu\"],\"text/x-vcalendar\":[\"vcs\"],\"text/x-vcard\":[\"vcf\"],\"video/vnd.dece.hd\":[\"uvh\",\"uvvh\"],\"video/vnd.dece.mobile\":[\"uvm\",\"uvvm\"],\"video/vnd.dece.pd\":[\"uvp\",\"uvvp\"],\"video/vnd.dece.sd\":[\"uvs\",\"uvvs\"],\"video/vnd.dece.video\":[\"uvv\",\"uvvv\"],\"video/vnd.dvb.file\":[\"dvb\"],\"video/vnd.fvt\":[\"fvt\"],\"video/vnd.mpegurl\":[\"mxu\",\"m4u\"],\"video/vnd.ms-playready.media.pyv\":[\"pyv\"],\"video/vnd.uvvu.mp4\":[\"uvu\",\"uvvu\"],\"video/vnd.vivo\":[\"viv\"],\"video/x-f4v\":[\"f4v\"],\"video/x-fli\":[\"fli\"],\"video/x-flv\":[\"flv\"],\"video/x-m4v\":[\"m4v\"],\"video/x-matroska\":[\"mkv\",\"mk3d\",\"mks\"],\"video/x-mng\":[\"mng\"],\"video/x-ms-asf\":[\"asf\",\"asx\"],\"video/x-ms-vob\":[\"vob\"],\"video/x-ms-wm\":[\"wm\"],\"video/x-ms-wmv\":[\"wmv\"],\"video/x-ms-wmx\":[\"wmx\"],\"video/x-ms-wvx\":[\"wvx\"],\"video/x-msvideo\":[\"avi\"],\"video/x-sgi-movie\":[\"movie\"],\"video/x-smv\":[\"smv\"],\"x-conference/x-cooltalk\":[\"ice\"]};","'use strict';\n\nlet Mime = require('./Mime');\nmodule.exports = new Mime(require('./types/standard'), require('./types/other'));\n","module.exports = function (xs, fn) {\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        var x = fn(xs[i], i);\n        if (isArray(x)) res.push.apply(res, x);\n        else res.push(x);\n    }\n    return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n    return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n  if (a instanceof RegExp) a = maybeMatch(a, str);\n  if (b instanceof RegExp) b = maybeMatch(b, str);\n\n  var r = range(a, b, str);\n\n  return r && {\n    start: r[0],\n    end: r[1],\n    pre: str.slice(0, r[0]),\n    body: str.slice(r[0] + a.length, r[1]),\n    post: str.slice(r[1] + b.length)\n  };\n}\n\nfunction maybeMatch(reg, str) {\n  var m = str.match(reg);\n  return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n  var begs, beg, left, right, result;\n  var ai = str.indexOf(a);\n  var bi = str.indexOf(b, ai + 1);\n  var i = ai;\n\n  if (ai >= 0 && bi > 0) {\n    if(a===b) {\n      return [ai, bi];\n    }\n    begs = [];\n    left = str.length;\n\n    while (i >= 0 && !result) {\n      if (i == ai) {\n        begs.push(i);\n        ai = str.indexOf(a, i + 1);\n      } else if (begs.length == 1) {\n        result = [ begs.pop(), bi ];\n      } else {\n        beg = begs.pop();\n        if (beg < left) {\n          left = beg;\n          right = bi;\n        }\n\n        bi = str.indexOf(b, i + 1);\n      }\n\n      i = ai < bi && ai >= 0 ? ai : bi;\n    }\n\n    if (begs.length) {\n      result = [ left, right ];\n    }\n  }\n\n  return result;\n}\n","var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n  return parseInt(str, 10) == str\n    ? parseInt(str, 10)\n    : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n  return str.split('\\\\\\\\').join(escSlash)\n            .split('\\\\{').join(escOpen)\n            .split('\\\\}').join(escClose)\n            .split('\\\\,').join(escComma)\n            .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n  return str.split(escSlash).join('\\\\')\n            .split(escOpen).join('{')\n            .split(escClose).join('}')\n            .split(escComma).join(',')\n            .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n  if (!str)\n    return [''];\n\n  var parts = [];\n  var m = balanced('{', '}', str);\n\n  if (!m)\n    return str.split(',');\n\n  var pre = m.pre;\n  var body = m.body;\n  var post = m.post;\n  var p = pre.split(',');\n\n  p[p.length-1] += '{' + body + '}';\n  var postParts = parseCommaParts(post);\n  if (post.length) {\n    p[p.length-1] += postParts.shift();\n    p.push.apply(p, postParts);\n  }\n\n  parts.push.apply(parts, p);\n\n  return parts;\n}\n\nfunction expandTop(str) {\n  if (!str)\n    return [];\n\n  // I don't know why Bash 4.3 does this, but it does.\n  // Anything starting with {} will have the first two bytes preserved\n  // but *only* at the top level, so {},a}b will not expand to anything,\n  // but a{},b}c will be expanded to [a}c,abc].\n  // One could argue that this is a bug in Bash, but since the goal of\n  // this module is to match Bash's rules, we escape a leading {}\n  if (str.substr(0, 2) === '{}') {\n    str = '\\\\{\\\\}' + str.substr(2);\n  }\n\n  return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n  return e;\n}\n\nfunction embrace(str) {\n  return '{' + str + '}';\n}\nfunction isPadded(el) {\n  return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n  return i <= y;\n}\nfunction gte(i, y) {\n  return i >= y;\n}\n\nfunction expand(str, isTop) {\n  var expansions = [];\n\n  var m = balanced('{', '}', str);\n  if (!m || /\\$$/.test(m.pre)) return [str];\n\n  var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n  var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n  var isSequence = isNumericSequence || isAlphaSequence;\n  var isOptions = m.body.indexOf(',') >= 0;\n  if (!isSequence && !isOptions) {\n    // {a},b}\n    if (m.post.match(/,.*\\}/)) {\n      str = m.pre + '{' + m.body + escClose + m.post;\n      return expand(str);\n    }\n    return [str];\n  }\n\n  var n;\n  if (isSequence) {\n    n = m.body.split(/\\.\\./);\n  } else {\n    n = parseCommaParts(m.body);\n    if (n.length === 1) {\n      // x{{a,b}}y ==> x{a}y x{b}y\n      n = expand(n[0], false).map(embrace);\n      if (n.length === 1) {\n        var post = m.post.length\n          ? expand(m.post, false)\n          : [''];\n        return post.map(function(p) {\n          return m.pre + n[0] + p;\n        });\n      }\n    }\n  }\n\n  // at this point, n is the parts, and we know it's not a comma set\n  // with a single entry.\n\n  // no need to expand pre, since it is guaranteed to be free of brace-sets\n  var pre = m.pre;\n  var post = m.post.length\n    ? expand(m.post, false)\n    : [''];\n\n  var N;\n\n  if (isSequence) {\n    var x = numeric(n[0]);\n    var y = numeric(n[1]);\n    var width = Math.max(n[0].length, n[1].length)\n    var incr = n.length == 3\n      ? Math.abs(numeric(n[2]))\n      : 1;\n    var test = lte;\n    var reverse = y < x;\n    if (reverse) {\n      incr *= -1;\n      test = gte;\n    }\n    var pad = n.some(isPadded);\n\n    N = [];\n\n    for (var i = x; test(i, y); i += incr) {\n      var c;\n      if (isAlphaSequence) {\n        c = String.fromCharCode(i);\n        if (c === '\\\\')\n          c = '';\n      } else {\n        c = String(i);\n        if (pad) {\n          var need = width - c.length;\n          if (need > 0) {\n            var z = new Array(need + 1).join('0');\n            if (i < 0)\n              c = '-' + z + c.slice(1);\n            else\n              c = z + c;\n          }\n        }\n      }\n      N.push(c);\n    }\n  } else {\n    N = concatMap(n, function(el) { return expand(el, false) });\n  }\n\n  for (var j = 0; j < N.length; j++) {\n    for (var k = 0; k < post.length; k++) {\n      var expansion = pre + N[j] + post[k];\n      if (!isTop || isSequence || expansion)\n        expansions.push(expansion);\n    }\n  }\n\n  return expansions;\n}\n\n","module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = (function () { try { return require('path') } catch (e) {}}()) || {\n  sep: '/'\n}\nminimatch.sep = path.sep\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n  '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n  '?': { open: '(?:', close: ')?' },\n  '+': { open: '(?:', close: ')+' },\n  '*': { open: '(?:', close: ')*' },\n  '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed.  Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n  return s.split('').reduce(function (set, c) {\n    set[c] = true\n    return set\n  }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n  options = options || {}\n  return function (p, i, list) {\n    return minimatch(p, pattern, options)\n  }\n}\n\nfunction ext (a, b) {\n  b = b || {}\n  var t = {}\n  Object.keys(a).forEach(function (k) {\n    t[k] = a[k]\n  })\n  Object.keys(b).forEach(function (k) {\n    t[k] = b[k]\n  })\n  return t\n}\n\nminimatch.defaults = function (def) {\n  if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n    return minimatch\n  }\n\n  var orig = minimatch\n\n  var m = function minimatch (p, pattern, options) {\n    return orig(p, pattern, ext(def, options))\n  }\n\n  m.Minimatch = function Minimatch (pattern, options) {\n    return new orig.Minimatch(pattern, ext(def, options))\n  }\n  m.Minimatch.defaults = function defaults (options) {\n    return orig.defaults(ext(def, options)).Minimatch\n  }\n\n  m.filter = function filter (pattern, options) {\n    return orig.filter(pattern, ext(def, options))\n  }\n\n  m.defaults = function defaults (options) {\n    return orig.defaults(ext(def, options))\n  }\n\n  m.makeRe = function makeRe (pattern, options) {\n    return orig.makeRe(pattern, ext(def, options))\n  }\n\n  m.braceExpand = function braceExpand (pattern, options) {\n    return orig.braceExpand(pattern, ext(def, options))\n  }\n\n  m.match = function (list, pattern, options) {\n    return orig.match(list, pattern, ext(def, options))\n  }\n\n  return m\n}\n\nMinimatch.defaults = function (def) {\n  return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n  assertValidPattern(pattern)\n\n  if (!options) options = {}\n\n  // shortcut: comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    return false\n  }\n\n  return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n  if (!(this instanceof Minimatch)) {\n    return new Minimatch(pattern, options)\n  }\n\n  assertValidPattern(pattern)\n\n  if (!options) options = {}\n\n  pattern = pattern.trim()\n\n  // windows support: need to use /, not \\\n  if (!options.allowWindowsEscape && path.sep !== '/') {\n    pattern = pattern.split(path.sep).join('/')\n  }\n\n  this.options = options\n  this.set = []\n  this.pattern = pattern\n  this.regexp = null\n  this.negate = false\n  this.comment = false\n  this.empty = false\n  this.partial = !!options.partial\n\n  // make the set of regexps etc.\n  this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n  var pattern = this.pattern\n  var options = this.options\n\n  // empty patterns and comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    this.comment = true\n    return\n  }\n  if (!pattern) {\n    this.empty = true\n    return\n  }\n\n  // step 1: figure out negation, etc.\n  this.parseNegate()\n\n  // step 2: expand braces\n  var set = this.globSet = this.braceExpand()\n\n  if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) }\n\n  this.debug(this.pattern, set)\n\n  // step 3: now we have a set, so turn each one into a series of path-portion\n  // matching patterns.\n  // These will be regexps, except in the case of \"**\", which is\n  // set to the GLOBSTAR object for globstar behavior,\n  // and will not contain any / characters\n  set = this.globParts = set.map(function (s) {\n    return s.split(slashSplit)\n  })\n\n  this.debug(this.pattern, set)\n\n  // glob --> regexps\n  set = set.map(function (s, si, set) {\n    return s.map(this.parse, this)\n  }, this)\n\n  this.debug(this.pattern, set)\n\n  // filter out everything that didn't compile properly.\n  set = set.filter(function (s) {\n    return s.indexOf(false) === -1\n  })\n\n  this.debug(this.pattern, set)\n\n  this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n  var pattern = this.pattern\n  var negate = false\n  var options = this.options\n  var negateOffset = 0\n\n  if (options.nonegate) return\n\n  for (var i = 0, l = pattern.length\n    ; i < l && pattern.charAt(i) === '!'\n    ; i++) {\n    negate = !negate\n    negateOffset++\n  }\n\n  if (negateOffset) this.pattern = pattern.substr(negateOffset)\n  this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n  return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n  if (!options) {\n    if (this instanceof Minimatch) {\n      options = this.options\n    } else {\n      options = {}\n    }\n  }\n\n  pattern = typeof pattern === 'undefined'\n    ? this.pattern : pattern\n\n  assertValidPattern(pattern)\n\n  // Thanks to Yeting Li <https://github.com/yetingli> for\n  // improving this regexp to avoid a ReDOS vulnerability.\n  if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n    // shortcut. no need to expand.\n    return [pattern]\n  }\n\n  return expand(pattern)\n}\n\nvar MAX_PATTERN_LENGTH = 1024 * 64\nvar assertValidPattern = function (pattern) {\n  if (typeof pattern !== 'string') {\n    throw new TypeError('invalid pattern')\n  }\n\n  if (pattern.length > MAX_PATTERN_LENGTH) {\n    throw new TypeError('pattern is too long')\n  }\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion.  Otherwise, any series\n// of * is equivalent to a single *.  Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n  assertValidPattern(pattern)\n\n  var options = this.options\n\n  // shortcuts\n  if (pattern === '**') {\n    if (!options.noglobstar)\n      return GLOBSTAR\n    else\n      pattern = '*'\n  }\n  if (pattern === '') return ''\n\n  var re = ''\n  var hasMagic = !!options.nocase\n  var escaping = false\n  // ? => one single character\n  var patternListStack = []\n  var negativeLists = []\n  var stateChar\n  var inClass = false\n  var reClassStart = -1\n  var classStart = -1\n  // . and .. never match anything that doesn't start with .,\n  // even when options.dot is set.\n  var patternStart = pattern.charAt(0) === '.' ? '' // anything\n  // not (start or / followed by . or .. followed by / or end)\n  : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n  : '(?!\\\\.)'\n  var self = this\n\n  function clearStateChar () {\n    if (stateChar) {\n      // we had some state-tracking character\n      // that wasn't consumed by this pass.\n      switch (stateChar) {\n        case '*':\n          re += star\n          hasMagic = true\n        break\n        case '?':\n          re += qmark\n          hasMagic = true\n        break\n        default:\n          re += '\\\\' + stateChar\n        break\n      }\n      self.debug('clearStateChar %j %j', stateChar, re)\n      stateChar = false\n    }\n  }\n\n  for (var i = 0, len = pattern.length, c\n    ; (i < len) && (c = pattern.charAt(i))\n    ; i++) {\n    this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n    // skip over any that are escaped.\n    if (escaping && reSpecials[c]) {\n      re += '\\\\' + c\n      escaping = false\n      continue\n    }\n\n    switch (c) {\n      /* istanbul ignore next */\n      case '/': {\n        // completely not allowed, even escaped.\n        // Should already be path-split by now.\n        return false\n      }\n\n      case '\\\\':\n        clearStateChar()\n        escaping = true\n      continue\n\n      // the various stateChar values\n      // for the \"extglob\" stuff.\n      case '?':\n      case '*':\n      case '+':\n      case '@':\n      case '!':\n        this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n        // all of those are literals inside a class, except that\n        // the glob [!a] means [^a] in regexp\n        if (inClass) {\n          this.debug('  in class')\n          if (c === '!' && i === classStart + 1) c = '^'\n          re += c\n          continue\n        }\n\n        // if we already have a stateChar, then it means\n        // that there was something like ** or +? in there.\n        // Handle the stateChar, then proceed with this one.\n        self.debug('call clearStateChar %j', stateChar)\n        clearStateChar()\n        stateChar = c\n        // if extglob is disabled, then +(asdf|foo) isn't a thing.\n        // just clear the statechar *now*, rather than even diving into\n        // the patternList stuff.\n        if (options.noext) clearStateChar()\n      continue\n\n      case '(':\n        if (inClass) {\n          re += '('\n          continue\n        }\n\n        if (!stateChar) {\n          re += '\\\\('\n          continue\n        }\n\n        patternListStack.push({\n          type: stateChar,\n          start: i - 1,\n          reStart: re.length,\n          open: plTypes[stateChar].open,\n          close: plTypes[stateChar].close\n        })\n        // negation is (?:(?!js)[^/]*)\n        re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n        this.debug('plType %j %j', stateChar, re)\n        stateChar = false\n      continue\n\n      case ')':\n        if (inClass || !patternListStack.length) {\n          re += '\\\\)'\n          continue\n        }\n\n        clearStateChar()\n        hasMagic = true\n        var pl = patternListStack.pop()\n        // negation is (?:(?!js)[^/]*)\n        // The others are (?:<pattern>)<type>\n        re += pl.close\n        if (pl.type === '!') {\n          negativeLists.push(pl)\n        }\n        pl.reEnd = re.length\n      continue\n\n      case '|':\n        if (inClass || !patternListStack.length || escaping) {\n          re += '\\\\|'\n          escaping = false\n          continue\n        }\n\n        clearStateChar()\n        re += '|'\n      continue\n\n      // these are mostly the same in regexp and glob\n      case '[':\n        // swallow any state-tracking char before the [\n        clearStateChar()\n\n        if (inClass) {\n          re += '\\\\' + c\n          continue\n        }\n\n        inClass = true\n        classStart = i\n        reClassStart = re.length\n        re += c\n      continue\n\n      case ']':\n        //  a right bracket shall lose its special\n        //  meaning and represent itself in\n        //  a bracket expression if it occurs\n        //  first in the list.  -- POSIX.2 2.8.3.2\n        if (i === classStart + 1 || !inClass) {\n          re += '\\\\' + c\n          escaping = false\n          continue\n        }\n\n        // handle the case where we left a class open.\n        // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n        // split where the last [ was, make sure we don't have\n        // an invalid re. if so, re-walk the contents of the\n        // would-be class to re-translate any characters that\n        // were passed through as-is\n        // TODO: It would probably be faster to determine this\n        // without a try/catch and a new RegExp, but it's tricky\n        // to do safely.  For now, this is safe and works.\n        var cs = pattern.substring(classStart + 1, i)\n        try {\n          RegExp('[' + cs + ']')\n        } catch (er) {\n          // not a valid class!\n          var sp = this.parse(cs, SUBPARSE)\n          re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n          hasMagic = hasMagic || sp[1]\n          inClass = false\n          continue\n        }\n\n        // finish up the class.\n        hasMagic = true\n        inClass = false\n        re += c\n      continue\n\n      default:\n        // swallow any state char that wasn't consumed\n        clearStateChar()\n\n        if (escaping) {\n          // no need\n          escaping = false\n        } else if (reSpecials[c]\n          && !(c === '^' && inClass)) {\n          re += '\\\\'\n        }\n\n        re += c\n\n    } // switch\n  } // for\n\n  // handle the case where we left a class open.\n  // \"[abc\" is valid, equivalent to \"\\[abc\"\n  if (inClass) {\n    // split where the last [ was, and escape it\n    // this is a huge pita.  We now have to re-walk\n    // the contents of the would-be class to re-translate\n    // any characters that were passed through as-is\n    cs = pattern.substr(classStart + 1)\n    sp = this.parse(cs, SUBPARSE)\n    re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n    hasMagic = hasMagic || sp[1]\n  }\n\n  // handle the case where we had a +( thing at the *end*\n  // of the pattern.\n  // each pattern list stack adds 3 chars, and we need to go through\n  // and escape any | chars that were passed through as-is for the regexp.\n  // Go through and escape them, taking care not to double-escape any\n  // | chars that were already escaped.\n  for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n    var tail = re.slice(pl.reStart + pl.open.length)\n    this.debug('setting tail', re, pl)\n    // maybe some even number of \\, then maybe 1 \\, followed by a |\n    tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n      if (!$2) {\n        // the | isn't already escaped, so escape it.\n        $2 = '\\\\'\n      }\n\n      // need to escape all those slashes *again*, without escaping the\n      // one that we need for escaping the | character.  As it works out,\n      // escaping an even number of slashes can be done by simply repeating\n      // it exactly after itself.  That's why this trick works.\n      //\n      // I am sorry that you have to see this.\n      return $1 + $1 + $2 + '|'\n    })\n\n    this.debug('tail=%j\\n   %s', tail, tail, pl, re)\n    var t = pl.type === '*' ? star\n      : pl.type === '?' ? qmark\n      : '\\\\' + pl.type\n\n    hasMagic = true\n    re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n  }\n\n  // handle trailing things that only matter at the very end.\n  clearStateChar()\n  if (escaping) {\n    // trailing \\\\\n    re += '\\\\\\\\'\n  }\n\n  // only need to apply the nodot start if the re starts with\n  // something that could conceivably capture a dot\n  var addPatternStart = false\n  switch (re.charAt(0)) {\n    case '[': case '.': case '(': addPatternStart = true\n  }\n\n  // Hack to work around lack of negative lookbehind in JS\n  // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n  // like 'a.xyz.yz' doesn't match.  So, the first negative\n  // lookahead, has to look ALL the way ahead, to the end of\n  // the pattern.\n  for (var n = negativeLists.length - 1; n > -1; n--) {\n    var nl = negativeLists[n]\n\n    var nlBefore = re.slice(0, nl.reStart)\n    var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n    var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n    var nlAfter = re.slice(nl.reEnd)\n\n    nlLast += nlAfter\n\n    // Handle nested stuff like *(*.js|!(*.json)), where open parens\n    // mean that we should *not* include the ) in the bit that is considered\n    // \"after\" the negated section.\n    var openParensBefore = nlBefore.split('(').length - 1\n    var cleanAfter = nlAfter\n    for (i = 0; i < openParensBefore; i++) {\n      cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n    }\n    nlAfter = cleanAfter\n\n    var dollar = ''\n    if (nlAfter === '' && isSub !== SUBPARSE) {\n      dollar = '$'\n    }\n    var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n    re = newRe\n  }\n\n  // if the re is not \"\" at this point, then we need to make sure\n  // it doesn't match against an empty path part.\n  // Otherwise a/* will match a/, which it should not.\n  if (re !== '' && hasMagic) {\n    re = '(?=.)' + re\n  }\n\n  if (addPatternStart) {\n    re = patternStart + re\n  }\n\n  // parsing just a piece of a larger pattern.\n  if (isSub === SUBPARSE) {\n    return [re, hasMagic]\n  }\n\n  // skip the regexp for non-magical patterns\n  // unescape anything in it, though, so that it'll be\n  // an exact match against a file etc.\n  if (!hasMagic) {\n    return globUnescape(pattern)\n  }\n\n  var flags = options.nocase ? 'i' : ''\n  try {\n    var regExp = new RegExp('^' + re + '$', flags)\n  } catch (er) /* istanbul ignore next - should be impossible */ {\n    // If it was an invalid regular expression, then it can't match\n    // anything.  This trick looks for a character after the end of\n    // the string, which is of course impossible, except in multi-line\n    // mode, but it's not a /m regex.\n    return new RegExp('$.')\n  }\n\n  regExp._glob = pattern\n  regExp._src = re\n\n  return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n  return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n  if (this.regexp || this.regexp === false) return this.regexp\n\n  // at this point, this.set is a 2d array of partial\n  // pattern strings, or \"**\".\n  //\n  // It's better to use .match().  This function shouldn't\n  // be used, really, but it's pretty convenient sometimes,\n  // when you just want to work with a regex.\n  var set = this.set\n\n  if (!set.length) {\n    this.regexp = false\n    return this.regexp\n  }\n  var options = this.options\n\n  var twoStar = options.noglobstar ? star\n    : options.dot ? twoStarDot\n    : twoStarNoDot\n  var flags = options.nocase ? 'i' : ''\n\n  var re = set.map(function (pattern) {\n    return pattern.map(function (p) {\n      return (p === GLOBSTAR) ? twoStar\n      : (typeof p === 'string') ? regExpEscape(p)\n      : p._src\n    }).join('\\\\\\/')\n  }).join('|')\n\n  // must match entire pattern\n  // ending in a * or ** will make it less strict.\n  re = '^(?:' + re + ')$'\n\n  // can match anything, as long as it's not this.\n  if (this.negate) re = '^(?!' + re + ').*$'\n\n  try {\n    this.regexp = new RegExp(re, flags)\n  } catch (ex) /* istanbul ignore next - should be impossible */ {\n    this.regexp = false\n  }\n  return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n  options = options || {}\n  var mm = new Minimatch(pattern, options)\n  list = list.filter(function (f) {\n    return mm.match(f)\n  })\n  if (mm.options.nonull && !list.length) {\n    list.push(pattern)\n  }\n  return list\n}\n\nMinimatch.prototype.match = function match (f, partial) {\n  if (typeof partial === 'undefined') partial = this.partial\n  this.debug('match', f, this.pattern)\n  // short-circuit in the case of busted things.\n  // comments, etc.\n  if (this.comment) return false\n  if (this.empty) return f === ''\n\n  if (f === '/' && partial) return true\n\n  var options = this.options\n\n  // windows: need to use /, not \\\n  if (path.sep !== '/') {\n    f = f.split(path.sep).join('/')\n  }\n\n  // treat the test path as a set of pathparts.\n  f = f.split(slashSplit)\n  this.debug(this.pattern, 'split', f)\n\n  // just ONE of the pattern sets in this.set needs to match\n  // in order for it to be valid.  If negating, then just one\n  // match means that we have failed.\n  // Either way, return on the first hit.\n\n  var set = this.set\n  this.debug(this.pattern, 'set', set)\n\n  // Find the basename of the path by looking for the last non-empty segment\n  var filename\n  var i\n  for (i = f.length - 1; i >= 0; i--) {\n    filename = f[i]\n    if (filename) break\n  }\n\n  for (i = 0; i < set.length; i++) {\n    var pattern = set[i]\n    var file = f\n    if (options.matchBase && pattern.length === 1) {\n      file = [filename]\n    }\n    var hit = this.matchOne(file, pattern, partial)\n    if (hit) {\n      if (options.flipNegate) return true\n      return !this.negate\n    }\n  }\n\n  // didn't get any hits.  this is success if it's a negative\n  // pattern, failure otherwise.\n  if (options.flipNegate) return false\n  return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n  var options = this.options\n\n  this.debug('matchOne',\n    { 'this': this, file: file, pattern: pattern })\n\n  this.debug('matchOne', file.length, pattern.length)\n\n  for (var fi = 0,\n      pi = 0,\n      fl = file.length,\n      pl = pattern.length\n      ; (fi < fl) && (pi < pl)\n      ; fi++, pi++) {\n    this.debug('matchOne loop')\n    var p = pattern[pi]\n    var f = file[fi]\n\n    this.debug(pattern, p, f)\n\n    // should be impossible.\n    // some invalid regexp stuff in the set.\n    /* istanbul ignore if */\n    if (p === false) return false\n\n    if (p === GLOBSTAR) {\n      this.debug('GLOBSTAR', [pattern, p, f])\n\n      // \"**\"\n      // a/**/b/**/c would match the following:\n      // a/b/x/y/z/c\n      // a/x/y/z/b/c\n      // a/b/x/b/x/c\n      // a/b/c\n      // To do this, take the rest of the pattern after\n      // the **, and see if it would match the file remainder.\n      // If so, return success.\n      // If not, the ** \"swallows\" a segment, and try again.\n      // This is recursively awful.\n      //\n      // a/**/b/**/c matching a/b/x/y/z/c\n      // - a matches a\n      // - doublestar\n      //   - matchOne(b/x/y/z/c, b/**/c)\n      //     - b matches b\n      //     - doublestar\n      //       - matchOne(x/y/z/c, c) -> no\n      //       - matchOne(y/z/c, c) -> no\n      //       - matchOne(z/c, c) -> no\n      //       - matchOne(c, c) yes, hit\n      var fr = fi\n      var pr = pi + 1\n      if (pr === pl) {\n        this.debug('** at the end')\n        // a ** at the end will just swallow the rest.\n        // We have found a match.\n        // however, it will not swallow /.x, unless\n        // options.dot is set.\n        // . and .. are *never* matched by **, for explosively\n        // exponential reasons.\n        for (; fi < fl; fi++) {\n          if (file[fi] === '.' || file[fi] === '..' ||\n            (!options.dot && file[fi].charAt(0) === '.')) return false\n        }\n        return true\n      }\n\n      // ok, let's see if we can swallow whatever we can.\n      while (fr < fl) {\n        var swallowee = file[fr]\n\n        this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n        // XXX remove this slice.  Just pass the start index.\n        if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n          this.debug('globstar found match!', fr, fl, swallowee)\n          // found a match.\n          return true\n        } else {\n          // can't swallow \".\" or \"..\" ever.\n          // can only swallow \".foo\" when explicitly asked.\n          if (swallowee === '.' || swallowee === '..' ||\n            (!options.dot && swallowee.charAt(0) === '.')) {\n            this.debug('dot detected!', file, fr, pattern, pr)\n            break\n          }\n\n          // ** swallows a segment, and continue.\n          this.debug('globstar swallow a segment, and continue')\n          fr++\n        }\n      }\n\n      // no match was found.\n      // However, in partial mode, we can't say this is necessarily over.\n      // If there's more *pattern* left, then\n      /* istanbul ignore if */\n      if (partial) {\n        // ran out of file\n        this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n        if (fr === fl) return true\n      }\n      return false\n    }\n\n    // something other than **\n    // non-magic patterns just have to match exactly\n    // patterns with magic have been turned into regexps.\n    var hit\n    if (typeof p === 'string') {\n      hit = f === p\n      this.debug('string match', p, f, hit)\n    } else {\n      hit = f.match(p)\n      this.debug('pattern match', p, f, hit)\n    }\n\n    if (!hit) return false\n  }\n\n  // Note: ending in / means that we'll get a final \"\"\n  // at the end of the pattern.  This can only match a\n  // corresponding \"\" at the end of the file.\n  // If the file ends in /, then it can only match a\n  // a pattern that ends in /, unless the pattern just\n  // doesn't have any more for it. But, a/b/ should *not*\n  // match \"a/b/*\", even though \"\" matches against the\n  // [^/]*? pattern, except in partial mode, where it might\n  // simply not be reached yet.\n  // However, a/b/ should still satisfy a/*\n\n  // now either we fell off the end of the pattern, or we're done.\n  if (fi === fl && pi === pl) {\n    // ran out of pattern and filename at the same time.\n    // an exact hit!\n    return true\n  } else if (fi === fl) {\n    // ran out of file, but still had pattern left.\n    // this is ok if we're doing the match as part of\n    // a glob fs traversal.\n    return partial\n  } else /* istanbul ignore else */ if (pi === pl) {\n    // ran out of pattern, still have file left.\n    // this is only acceptable if we're on the very last\n    // empty segment of a file with a trailing slash.\n    // a/* should match a/b/\n    return (fi === fl - 1) && (file[fi] === '')\n  }\n\n  // should be unreachable.\n  /* istanbul ignore next */\n  throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n  return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n  return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n","'use strict';\nconst fs = require('fs');\n\nlet isDocker;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch (_) {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch (_) {\n\t\treturn false;\n\t}\n}\n\nmodule.exports = () => {\n\tif (isDocker === undefined) {\n\t\tisDocker = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDocker;\n};\n","'use strict';\nconst os = require('os');\nconst fs = require('fs');\nconst isDocker = require('is-docker');\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isDocker()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\treturn fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft') ?\n\t\t\t!isDocker() : false;\n\t} catch (_) {\n\t\treturn false;\n\t}\n};\n\nif (process.env.__IS_WSL_TEST__) {\n\tmodule.exports = isWsl;\n} else {\n\tmodule.exports = isWsl();\n}\n","'use strict';\nmodule.exports = (object, propertyName, fn) => {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = fn();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n};\n","const path = require('path');\nconst childProcess = require('child_process');\nconst {promises: fs, constants: fsConstants} = require('fs');\nconst isWsl = require('is-wsl');\nconst isDocker = require('is-docker');\nconst defineLazyProperty = require('define-lazy-prop');\n\n// Path to included `xdg-open`.\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\n/**\nGet the mount point for fixed drives in WSL.\n\n@inner\n@returns {string} The mount point.\n*/\nconst getWslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst configMountPoint = /(?<!#.*)root\\s*=\\s*(?<mountPoint>.*)/g.exec(configContent);\n\n\t\tif (!configMountPoint) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = configMountPoint.groups.mountPoint.trim();\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nconst pTryEach = async (array, mapper) => {\n\tlet latestError;\n\n\tfor (const item of array) {\n\t\ttry {\n\t\t\treturn await mapper(item); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\tlatestError = error;\n\t\t}\n\t}\n\n\tthrow latestError;\n};\n\nconst baseOpen = async options => {\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options\n\t};\n\n\tif (Array.isArray(options.app)) {\n\t\treturn pTryEach(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app || {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn pTryEach(app, appName => baseOpen({\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments\n\t\t\t}\n\t\t}));\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || (isWsl && !isDocker())) {\n\t\tconst mountPoint = await getWslDrivesMountPoint();\n\n\t\tcommand = isWsl ?\n\t\t\t`${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe` :\n\t\t\t`${process.env.SYSTEMROOT}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell`;\n\n\t\tcliArguments.push(\n\t\t\t'-NoProfile',\n\t\t\t'-NonInteractive',\n\t\t\t'–ExecutionPolicy',\n\t\t\t'Bypass',\n\t\t\t'-EncodedCommand'\n\t\t);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\tconst encodedArguments = ['Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\t// Double quote with double quotes to ensure the inner quotes are passed through.\n\t\t\t// Inner quotes are delimited for PowerShell interpretation with backticks.\n\t\t\tencodedArguments.push(`\"\\`\"${app}\\`\"\"`, '-ArgumentList');\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.unshift(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(`\"${options.target}\"`);\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(arg => `\"\\`\"${arg}\\`\"\"`);\n\t\t\tencodedArguments.push(appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = Buffer.from(encodedArguments.join(' '), 'utf16le').toString('base64');\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron ||\n\t\t\t\tplatform === 'android' || isBundled || !exeLocalXdgOpen;\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\n\t}\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (options.allowNonzeroExitCode && exitCode > 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\treturn subprocess;\n};\n\nconst open = (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\ttarget\n\t});\n};\n\nconst openApp = (name, options) => {\n\tif (typeof name !== 'string') {\n\t\tthrow new TypeError('Expected a `name`');\n\t}\n\n\tconst {arguments: appArguments = []} = options || {};\n\tif (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {\n\t\tthrow new TypeError('Expected `appArguments` as Array type');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\tapp: {\n\t\t\tname,\n\t\t\targuments: appArguments\n\t\t}\n\t});\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nconst apps = {};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\tlinux: ['google-chrome', 'google-chrome-stable', 'chromium']\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe']\n\t}\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: 'C:\\\\Program Files\\\\Mozilla Firefox\\\\firefox.exe',\n\tlinux: 'firefox'\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe'\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: ['microsoft-edge', 'microsoft-edge-dev']\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe'\n}));\n\nopen.apps = apps;\nopen.openApp = openApp;\n\nmodule.exports = open;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","'use strict';\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\nvar Z_FIXED               = 4;\n//var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY              = 0;\nvar Z_TEXT                = 1;\n//var Z_ASCII             = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES    = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH    = 3;\nvar MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES       = 30;\n/* number of distance codes */\n\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK   = 256;\n/* end of block literal code */\n\nvar REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits =   /* extra bits for each length code */\n  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits =   /* extra bits for each distance code */\n  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits =  /* extra bits for each bit length code */\n  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n  var res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nfunction gen_bitlen(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree            = desc.dyn_tree;\n  var max_code        = desc.max_code;\n  var stree           = desc.stat_desc.static_tree;\n  var has_stree       = desc.stat_desc.has_stree;\n  var extra           = desc.stat_desc.extra_bits;\n  var base            = desc.stat_desc.extra_base;\n  var max_length      = desc.stat_desc.max_length;\n  var h;              /* heap index */\n  var n, m;           /* iterate over the tree elements */\n  var bits;           /* bit length */\n  var xbits;          /* extra bits */\n  var f;              /* frequency */\n  var overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  var code = 0;              /* running code value */\n  var bits;                  /* bit index */\n  var n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    var len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n  var n;        /* iterates over tree elements */\n  var bits;     /* bit counter */\n  var length;   /* length value */\n  var code;     /* code value */\n  var dist;     /* distance index */\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n  var n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n  var _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;           /* distance of matched string */\n  var lc;             /* match length or unmatched char (if dist == 0) */\n  var lx = 0;         /* running index in l_buf */\n  var code;           /* the code to send */\n  var extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree     = desc.dyn_tree;\n  var stree    = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems    = desc.stat_desc.elems;\n  var n, m;          /* iterate over heap elements */\n  var max_code = -1; /* largest code with non zero frequency */\n  var node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n  var max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  var max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init  = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block  = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils   = require('../utils/common');\nvar trees   = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32   = require('./crc32');\nvar msg     = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH      = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\nvar Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\n//var Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\n//var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\n//var Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED            = 1;\nvar Z_HUFFMAN_ONLY        = 2;\nvar Z_RLE                 = 3;\nvar Z_FIXED               = 4;\nvar Z_DEFAULT_STRATEGY    = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES       = 30;\n/* number of distance codes */\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE     = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n  var s = strm.state;\n\n  //_tr_flush_bits(s);\n  var len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n//  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;      /* max hash chain length */\n  var scan = s.strstart; /* current string */\n  var match;                       /* matched string */\n  var len;                           /* length of current match */\n  var best_len = s.prev_length;              /* best match length so far */\n  var nice_match = s.nice_match;             /* stop if match long enough */\n  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1  = _win[scan + best_len - 1];\n  var scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    var curr = s.strstart + s.lookahead;\n//    var init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n  var hash_head;        /* head of the hash chain */\n  var bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n  var hash_head;          /* head of hash chain */\n  var bflush;              /* set if current block must be flushed */\n\n  var max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n  var bflush;            /* set if current block must be flushed */\n  var prev;              /* byte at distance one to match */\n  var scan, strend;      /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n  var bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  trees._tr_init(s);\n  return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  var s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      var level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30;       /* got a data error -- remain here until reset */\nvar TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n  var _in;                    /* local strm.input */\n  var last;                   /* have enough input while in < last */\n  var _out;                   /* local strm.output */\n  var beg;                    /* inflate()'s initial strm.output */\n  var end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  var dmax;                   /* maximum distance from zlib header */\n//#endif\n  var wsize;                  /* window size or zero if not using window */\n  var whave;                  /* valid bytes in the window */\n  var wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  var s_window;               /* allocated sliding window, if wsize != 0 */\n  var hold;                   /* local strm.hold */\n  var bits;                   /* local strm.bits */\n  var lcode;                  /* local strm.lencode */\n  var dcode;                  /* local strm.distcode */\n  var lmask;                  /* mask for first level of length codes */\n  var dmask;                  /* mask for first level of distance codes */\n  var here;                   /* retrieved table entry */\n  var op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  var len;                    /* match length, unused bytes */\n  var dist;                   /* match distance */\n  var from;                   /* where to copy match from */\n  var from_source;\n\n\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n  var bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  var len = 0;               /* a code's length in bits */\n  var sym = 0;               /* index of code symbols */\n  var min = 0, max = 0;          /* minimum and maximum code lengths */\n  var root = 0;              /* number of index bits for root table */\n  var curr = 0;              /* number of index bits for current table */\n  var drop = 0;              /* code bits to drop for sub-table */\n  var left = 0;                   /* number of prefix codes available */\n  var used = 0;              /* code entries in table used */\n  var huff = 0;              /* Huffman code */\n  var incr;              /* for incrementing code, index */\n  var fill;              /* index for replicating entries */\n  var low;               /* low bits for current root entry */\n  var mask;              /* mask for low root bits */\n  var next;             /* next available space in table */\n  var base = null;     /* base value table to use */\n  var base_index = 0;\n//  var shoextra;    /* extra bits table to use */\n  var end;                    /* use base and extra for symbol > end */\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  var extra = null;\n  var extra_index = 0;\n\n  var here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils         = require('../utils/common');\nvar adler32       = require('./adler32');\nvar crc32         = require('./crc32');\nvar inflate_fast  = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\nvar Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\nvar Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar    HEAD = 1;       /* i: waiting for magic header */\nvar    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nvar    TIME = 3;       /* i: waiting for modification time (gzip) */\nvar    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nvar    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nvar    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nvar    NAME = 7;       /* i: waiting for end of file name (gzip) */\nvar    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nvar    HCRC = 9;       /* i: waiting for header crc (gzip) */\nvar    DICTID = 10;    /* i: waiting for dictionary check value */\nvar    DICT = 11;      /* waiting for inflateSetDictionary() call */\nvar        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nvar        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nvar        STORED = 14;    /* i: waiting for stored size (length and complement) */\nvar        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nvar        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nvar        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nvar        LENLENS = 18;   /* i: waiting for code length code lengths */\nvar        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nvar            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nvar            LEN = 21;       /* i: waiting for length/lit/eob code */\nvar            LENEXT = 22;    /* i: waiting for length extra bits */\nvar            DIST = 23;      /* i: waiting for distance code */\nvar            DISTEXT = 24;   /* i: waiting for distance extra bits */\nvar            MATCH = 25;     /* o: waiting for output space to copy string */\nvar            LIT = 26;       /* o: waiting for output space to write literal */\nvar    CHECK = 27;     /* i: waiting for 32-bit check value */\nvar    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nvar    DONE = 29;      /* finished check, done -- remain here until reset */\nvar    BAD = 30;       /* got a data error -- remain here until reset */\nvar    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nvar    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n  this.work = new utils.Buf16(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new utils.Buf8(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output;          // input/output buffers\n  var next;                   /* next input INDEX */\n  var put;                    /* next output INDEX */\n  var have, left;             /* available input and output */\n  var hold;                   /* bit buffer */\n  var bits;                   /* bits in bit buffer */\n  var _in, _out;              /* save starting available input and output */\n  var copy;                   /* number of stored or match bytes to copy */\n  var from;                   /* where to copy match bytes from */\n  var from_source;\n  var here = 0;               /* current decoding table entry */\n  var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n  var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  var len;                    /* length to copy for repeats, bits to drop */\n  var ret;                    /* return code */\n  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */\n  var opts;\n\n  var n; // temporary var for NEED_BITS\n\n  var order = /* permutation of code lengths */\n    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n        state.dmax = 1 << len;\n        //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Array(state.head.extra_len);\n              }\n              utils.arraySet(\n                state.head.extra,\n                input,\n                next,\n                // extra field is limited to 65536 bytes\n                // - no need for additional size check\n                copy,\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          utils.arraySet(output, input, next, copy, put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       stored end\\n\"));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inflate_fast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  var state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var state;\n  var dictid;\n  var ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n/* eslint camelcase: \"off\" */\n\nvar assert = require('assert');\n\nvar Zstream = require('pako/lib/zlib/zstream');\nvar zlib_deflate = require('pako/lib/zlib/deflate.js');\nvar zlib_inflate = require('pako/lib/zlib/inflate.js');\nvar constants = require('pako/lib/zlib/constants');\n\nfor (var key in constants) {\n  exports[key] = constants[key];\n}\n\n// zlib modes\nexports.NONE = 0;\nexports.DEFLATE = 1;\nexports.INFLATE = 2;\nexports.GZIP = 3;\nexports.GUNZIP = 4;\nexports.DEFLATERAW = 5;\nexports.INFLATERAW = 6;\nexports.UNZIP = 7;\n\nvar GZIP_HEADER_ID1 = 0x1f;\nvar GZIP_HEADER_ID2 = 0x8b;\n\n/**\n * Emulate Node's zlib C++ layer for use by the JS layer in index.js\n */\nfunction Zlib(mode) {\n  if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) {\n    throw new TypeError('Bad argument');\n  }\n\n  this.dictionary = null;\n  this.err = 0;\n  this.flush = 0;\n  this.init_done = false;\n  this.level = 0;\n  this.memLevel = 0;\n  this.mode = mode;\n  this.strategy = 0;\n  this.windowBits = 0;\n  this.write_in_progress = false;\n  this.pending_close = false;\n  this.gzip_id_bytes_read = 0;\n}\n\nZlib.prototype.close = function () {\n  if (this.write_in_progress) {\n    this.pending_close = true;\n    return;\n  }\n\n  this.pending_close = false;\n\n  assert(this.init_done, 'close before init');\n  assert(this.mode <= exports.UNZIP);\n\n  if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {\n    zlib_deflate.deflateEnd(this.strm);\n  } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) {\n    zlib_inflate.inflateEnd(this.strm);\n  }\n\n  this.mode = exports.NONE;\n\n  this.dictionary = null;\n};\n\nZlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) {\n  return this._write(true, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) {\n  return this._write(false, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) {\n  assert.equal(arguments.length, 8);\n\n  assert(this.init_done, 'write before init');\n  assert(this.mode !== exports.NONE, 'already finalized');\n  assert.equal(false, this.write_in_progress, 'write already in progress');\n  assert.equal(false, this.pending_close, 'close is pending');\n\n  this.write_in_progress = true;\n\n  assert.equal(false, flush === undefined, 'must provide flush value');\n\n  this.write_in_progress = true;\n\n  if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) {\n    throw new Error('Invalid flush value');\n  }\n\n  if (input == null) {\n    input = Buffer.alloc(0);\n    in_len = 0;\n    in_off = 0;\n  }\n\n  this.strm.avail_in = in_len;\n  this.strm.input = input;\n  this.strm.next_in = in_off;\n  this.strm.avail_out = out_len;\n  this.strm.output = out;\n  this.strm.next_out = out_off;\n  this.flush = flush;\n\n  if (!async) {\n    // sync version\n    this._process();\n\n    if (this._checkError()) {\n      return this._afterSync();\n    }\n    return;\n  }\n\n  // async version\n  var self = this;\n  process.nextTick(function () {\n    self._process();\n    self._after();\n  });\n\n  return this;\n};\n\nZlib.prototype._afterSync = function () {\n  var avail_out = this.strm.avail_out;\n  var avail_in = this.strm.avail_in;\n\n  this.write_in_progress = false;\n\n  return [avail_in, avail_out];\n};\n\nZlib.prototype._process = function () {\n  var next_expected_header_byte = null;\n\n  // If the avail_out is left at 0, then it means that it ran out\n  // of room.  If there was avail_out left over, then it means\n  // that all of the input was consumed.\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.GZIP:\n    case exports.DEFLATERAW:\n      this.err = zlib_deflate.deflate(this.strm, this.flush);\n      break;\n    case exports.UNZIP:\n      if (this.strm.avail_in > 0) {\n        next_expected_header_byte = this.strm.next_in;\n      }\n\n      switch (this.gzip_id_bytes_read) {\n        case 0:\n          if (next_expected_header_byte === null) {\n            break;\n          }\n\n          if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) {\n            this.gzip_id_bytes_read = 1;\n            next_expected_header_byte++;\n\n            if (this.strm.avail_in === 1) {\n              // The only available byte was already read.\n              break;\n            }\n          } else {\n            this.mode = exports.INFLATE;\n            break;\n          }\n\n        // fallthrough\n        case 1:\n          if (next_expected_header_byte === null) {\n            break;\n          }\n\n          if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) {\n            this.gzip_id_bytes_read = 2;\n            this.mode = exports.GUNZIP;\n          } else {\n            // There is no actual difference between INFLATE and INFLATERAW\n            // (after initialization).\n            this.mode = exports.INFLATE;\n          }\n\n          break;\n        default:\n          throw new Error('invalid number of gzip magic number bytes read');\n      }\n\n    // fallthrough\n    case exports.INFLATE:\n    case exports.GUNZIP:\n    case exports.INFLATERAW:\n      this.err = zlib_inflate.inflate(this.strm, this.flush\n\n      // If data was encoded with dictionary\n      );if (this.err === exports.Z_NEED_DICT && this.dictionary) {\n        // Load it\n        this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary);\n        if (this.err === exports.Z_OK) {\n          // And try to decode again\n          this.err = zlib_inflate.inflate(this.strm, this.flush);\n        } else if (this.err === exports.Z_DATA_ERROR) {\n          // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR.\n          // Make it possible for After() to tell a bad dictionary from bad\n          // input.\n          this.err = exports.Z_NEED_DICT;\n        }\n      }\n      while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) {\n        // Bytes remain in input buffer. Perhaps this is another compressed\n        // member in the same archive, or just trailing garbage.\n        // Trailing zero bytes are okay, though, since they are frequently\n        // used for padding.\n\n        this.reset();\n        this.err = zlib_inflate.inflate(this.strm, this.flush);\n      }\n      break;\n    default:\n      throw new Error('Unknown mode ' + this.mode);\n  }\n};\n\nZlib.prototype._checkError = function () {\n  // Acceptable error states depend on the type of zlib stream.\n  switch (this.err) {\n    case exports.Z_OK:\n    case exports.Z_BUF_ERROR:\n      if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) {\n        this._error('unexpected end of file');\n        return false;\n      }\n      break;\n    case exports.Z_STREAM_END:\n      // normal statuses, not fatal\n      break;\n    case exports.Z_NEED_DICT:\n      if (this.dictionary == null) {\n        this._error('Missing dictionary');\n      } else {\n        this._error('Bad dictionary');\n      }\n      return false;\n    default:\n      // something else.\n      this._error('Zlib error');\n      return false;\n  }\n\n  return true;\n};\n\nZlib.prototype._after = function () {\n  if (!this._checkError()) {\n    return;\n  }\n\n  var avail_out = this.strm.avail_out;\n  var avail_in = this.strm.avail_in;\n\n  this.write_in_progress = false;\n\n  // call the write() cb\n  this.callback(avail_in, avail_out);\n\n  if (this.pending_close) {\n    this.close();\n  }\n};\n\nZlib.prototype._error = function (message) {\n  if (this.strm.msg) {\n    message = this.strm.msg;\n  }\n  this.onerror(message, this.err\n\n  // no hope of rescue.\n  );this.write_in_progress = false;\n  if (this.pending_close) {\n    this.close();\n  }\n};\n\nZlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) {\n  assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])');\n\n  assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits');\n  assert(level >= -1 && level <= 9, 'invalid compression level');\n\n  assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel');\n\n  assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy');\n\n  this._init(level, windowBits, memLevel, strategy, dictionary);\n  this._setDictionary();\n};\n\nZlib.prototype.params = function () {\n  throw new Error('deflateParams Not supported');\n};\n\nZlib.prototype.reset = function () {\n  this._reset();\n  this._setDictionary();\n};\n\nZlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) {\n  this.level = level;\n  this.windowBits = windowBits;\n  this.memLevel = memLevel;\n  this.strategy = strategy;\n\n  this.flush = exports.Z_NO_FLUSH;\n\n  this.err = exports.Z_OK;\n\n  if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) {\n    this.windowBits += 16;\n  }\n\n  if (this.mode === exports.UNZIP) {\n    this.windowBits += 32;\n  }\n\n  if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) {\n    this.windowBits = -1 * this.windowBits;\n  }\n\n  this.strm = new Zstream();\n\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.GZIP:\n    case exports.DEFLATERAW:\n      this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy);\n      break;\n    case exports.INFLATE:\n    case exports.GUNZIP:\n    case exports.INFLATERAW:\n    case exports.UNZIP:\n      this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits);\n      break;\n    default:\n      throw new Error('Unknown mode ' + this.mode);\n  }\n\n  if (this.err !== exports.Z_OK) {\n    this._error('Init error');\n  }\n\n  this.dictionary = dictionary;\n\n  this.write_in_progress = false;\n  this.init_done = true;\n};\n\nZlib.prototype._setDictionary = function () {\n  if (this.dictionary == null) {\n    return;\n  }\n\n  this.err = exports.Z_OK;\n\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.DEFLATERAW:\n      this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary);\n      break;\n    default:\n      break;\n  }\n\n  if (this.err !== exports.Z_OK) {\n    this._error('Failed to set dictionary');\n  }\n};\n\nZlib.prototype._reset = function () {\n  this.err = exports.Z_OK;\n\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.DEFLATERAW:\n    case exports.GZIP:\n      this.err = zlib_deflate.deflateReset(this.strm);\n      break;\n    case exports.INFLATE:\n    case exports.INFLATERAW:\n    case exports.GUNZIP:\n      this.err = zlib_inflate.inflateReset(this.strm);\n      break;\n    default:\n      break;\n  }\n\n  if (this.err !== exports.Z_OK) {\n    this._error('Failed to reset stream');\n  }\n};\n\nexports.Zlib = Zlib;","'use strict';\n\nvar Buffer = require('buffer').Buffer;\nvar Transform = require('stream').Transform;\nvar binding = require('./binding');\nvar util = require('util');\nvar assert = require('assert').ok;\nvar kMaxLength = require('buffer').kMaxLength;\nvar kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes';\n\n// zlib doesn't provide these, so kludge them in following the same\n// const naming scheme zlib uses.\nbinding.Z_MIN_WINDOWBITS = 8;\nbinding.Z_MAX_WINDOWBITS = 15;\nbinding.Z_DEFAULT_WINDOWBITS = 15;\n\n// fewer than 64 bytes per chunk is stupid.\n// technically it could work with as few as 8, but even 64 bytes\n// is absurdly low.  Usually a MB or more is best.\nbinding.Z_MIN_CHUNK = 64;\nbinding.Z_MAX_CHUNK = Infinity;\nbinding.Z_DEFAULT_CHUNK = 16 * 1024;\n\nbinding.Z_MIN_MEMLEVEL = 1;\nbinding.Z_MAX_MEMLEVEL = 9;\nbinding.Z_DEFAULT_MEMLEVEL = 8;\n\nbinding.Z_MIN_LEVEL = -1;\nbinding.Z_MAX_LEVEL = 9;\nbinding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;\n\n// expose all the zlib constants\nvar bkeys = Object.keys(binding);\nfor (var bk = 0; bk < bkeys.length; bk++) {\n  var bkey = bkeys[bk];\n  if (bkey.match(/^Z/)) {\n    Object.defineProperty(exports, bkey, {\n      enumerable: true, value: binding[bkey], writable: false\n    });\n  }\n}\n\n// translation table for return codes.\nvar codes = {\n  Z_OK: binding.Z_OK,\n  Z_STREAM_END: binding.Z_STREAM_END,\n  Z_NEED_DICT: binding.Z_NEED_DICT,\n  Z_ERRNO: binding.Z_ERRNO,\n  Z_STREAM_ERROR: binding.Z_STREAM_ERROR,\n  Z_DATA_ERROR: binding.Z_DATA_ERROR,\n  Z_MEM_ERROR: binding.Z_MEM_ERROR,\n  Z_BUF_ERROR: binding.Z_BUF_ERROR,\n  Z_VERSION_ERROR: binding.Z_VERSION_ERROR\n};\n\nvar ckeys = Object.keys(codes);\nfor (var ck = 0; ck < ckeys.length; ck++) {\n  var ckey = ckeys[ck];\n  codes[codes[ckey]] = ckey;\n}\n\nObject.defineProperty(exports, 'codes', {\n  enumerable: true, value: Object.freeze(codes), writable: false\n});\n\nexports.Deflate = Deflate;\nexports.Inflate = Inflate;\nexports.Gzip = Gzip;\nexports.Gunzip = Gunzip;\nexports.DeflateRaw = DeflateRaw;\nexports.InflateRaw = InflateRaw;\nexports.Unzip = Unzip;\n\nexports.createDeflate = function (o) {\n  return new Deflate(o);\n};\n\nexports.createInflate = function (o) {\n  return new Inflate(o);\n};\n\nexports.createDeflateRaw = function (o) {\n  return new DeflateRaw(o);\n};\n\nexports.createInflateRaw = function (o) {\n  return new InflateRaw(o);\n};\n\nexports.createGzip = function (o) {\n  return new Gzip(o);\n};\n\nexports.createGunzip = function (o) {\n  return new Gunzip(o);\n};\n\nexports.createUnzip = function (o) {\n  return new Unzip(o);\n};\n\n// Convenience methods.\n// compress/decompress a string or buffer in one step.\nexports.deflate = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Deflate(opts), buffer, callback);\n};\n\nexports.deflateSync = function (buffer, opts) {\n  return zlibBufferSync(new Deflate(opts), buffer);\n};\n\nexports.gzip = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Gzip(opts), buffer, callback);\n};\n\nexports.gzipSync = function (buffer, opts) {\n  return zlibBufferSync(new Gzip(opts), buffer);\n};\n\nexports.deflateRaw = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new DeflateRaw(opts), buffer, callback);\n};\n\nexports.deflateRawSync = function (buffer, opts) {\n  return zlibBufferSync(new DeflateRaw(opts), buffer);\n};\n\nexports.unzip = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Unzip(opts), buffer, callback);\n};\n\nexports.unzipSync = function (buffer, opts) {\n  return zlibBufferSync(new Unzip(opts), buffer);\n};\n\nexports.inflate = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Inflate(opts), buffer, callback);\n};\n\nexports.inflateSync = function (buffer, opts) {\n  return zlibBufferSync(new Inflate(opts), buffer);\n};\n\nexports.gunzip = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Gunzip(opts), buffer, callback);\n};\n\nexports.gunzipSync = function (buffer, opts) {\n  return zlibBufferSync(new Gunzip(opts), buffer);\n};\n\nexports.inflateRaw = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new InflateRaw(opts), buffer, callback);\n};\n\nexports.inflateRawSync = function (buffer, opts) {\n  return zlibBufferSync(new InflateRaw(opts), buffer);\n};\n\nfunction zlibBuffer(engine, buffer, callback) {\n  var buffers = [];\n  var nread = 0;\n\n  engine.on('error', onError);\n  engine.on('end', onEnd);\n\n  engine.end(buffer);\n  flow();\n\n  function flow() {\n    var chunk;\n    while (null !== (chunk = engine.read())) {\n      buffers.push(chunk);\n      nread += chunk.length;\n    }\n    engine.once('readable', flow);\n  }\n\n  function onError(err) {\n    engine.removeListener('end', onEnd);\n    engine.removeListener('readable', flow);\n    callback(err);\n  }\n\n  function onEnd() {\n    var buf;\n    var err = null;\n\n    if (nread >= kMaxLength) {\n      err = new RangeError(kRangeErrorMessage);\n    } else {\n      buf = Buffer.concat(buffers, nread);\n    }\n\n    buffers = [];\n    engine.close();\n    callback(err, buf);\n  }\n}\n\nfunction zlibBufferSync(engine, buffer) {\n  if (typeof buffer === 'string') buffer = Buffer.from(buffer);\n\n  if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer');\n\n  var flushFlag = engine._finishFlushFlag;\n\n  return engine._processChunk(buffer, flushFlag);\n}\n\n// generic zlib\n// minimal 2-byte header\nfunction Deflate(opts) {\n  if (!(this instanceof Deflate)) return new Deflate(opts);\n  Zlib.call(this, opts, binding.DEFLATE);\n}\n\nfunction Inflate(opts) {\n  if (!(this instanceof Inflate)) return new Inflate(opts);\n  Zlib.call(this, opts, binding.INFLATE);\n}\n\n// gzip - bigger header, same deflate compression\nfunction Gzip(opts) {\n  if (!(this instanceof Gzip)) return new Gzip(opts);\n  Zlib.call(this, opts, binding.GZIP);\n}\n\nfunction Gunzip(opts) {\n  if (!(this instanceof Gunzip)) return new Gunzip(opts);\n  Zlib.call(this, opts, binding.GUNZIP);\n}\n\n// raw - no header\nfunction DeflateRaw(opts) {\n  if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);\n  Zlib.call(this, opts, binding.DEFLATERAW);\n}\n\nfunction InflateRaw(opts) {\n  if (!(this instanceof InflateRaw)) return new InflateRaw(opts);\n  Zlib.call(this, opts, binding.INFLATERAW);\n}\n\n// auto-detect header.\nfunction Unzip(opts) {\n  if (!(this instanceof Unzip)) return new Unzip(opts);\n  Zlib.call(this, opts, binding.UNZIP);\n}\n\nfunction isValidFlushFlag(flag) {\n  return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK;\n}\n\n// the Zlib class they all inherit from\n// This thing manages the queue of requests, and returns\n// true or false if there is anything in the queue when\n// you call the .write() method.\n\nfunction Zlib(opts, mode) {\n  var _this = this;\n\n  this._opts = opts = opts || {};\n  this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;\n\n  Transform.call(this, opts);\n\n  if (opts.flush && !isValidFlushFlag(opts.flush)) {\n    throw new Error('Invalid flush flag: ' + opts.flush);\n  }\n  if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) {\n    throw new Error('Invalid flush flag: ' + opts.finishFlush);\n  }\n\n  this._flushFlag = opts.flush || binding.Z_NO_FLUSH;\n  this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH;\n\n  if (opts.chunkSize) {\n    if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) {\n      throw new Error('Invalid chunk size: ' + opts.chunkSize);\n    }\n  }\n\n  if (opts.windowBits) {\n    if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) {\n      throw new Error('Invalid windowBits: ' + opts.windowBits);\n    }\n  }\n\n  if (opts.level) {\n    if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) {\n      throw new Error('Invalid compression level: ' + opts.level);\n    }\n  }\n\n  if (opts.memLevel) {\n    if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) {\n      throw new Error('Invalid memLevel: ' + opts.memLevel);\n    }\n  }\n\n  if (opts.strategy) {\n    if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) {\n      throw new Error('Invalid strategy: ' + opts.strategy);\n    }\n  }\n\n  if (opts.dictionary) {\n    if (!Buffer.isBuffer(opts.dictionary)) {\n      throw new Error('Invalid dictionary: it should be a Buffer instance');\n    }\n  }\n\n  this._handle = new binding.Zlib(mode);\n\n  var self = this;\n  this._hadError = false;\n  this._handle.onerror = function (message, errno) {\n    // there is no way to cleanly recover.\n    // continuing only obscures problems.\n    _close(self);\n    self._hadError = true;\n\n    var error = new Error(message);\n    error.errno = errno;\n    error.code = exports.codes[errno];\n    self.emit('error', error);\n  };\n\n  var level = exports.Z_DEFAULT_COMPRESSION;\n  if (typeof opts.level === 'number') level = opts.level;\n\n  var strategy = exports.Z_DEFAULT_STRATEGY;\n  if (typeof opts.strategy === 'number') strategy = opts.strategy;\n\n  this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary);\n\n  this._buffer = Buffer.allocUnsafe(this._chunkSize);\n  this._offset = 0;\n  this._level = level;\n  this._strategy = strategy;\n\n  this.once('end', this.close);\n\n  Object.defineProperty(this, '_closed', {\n    get: function () {\n      return !_this._handle;\n    },\n    configurable: true,\n    enumerable: true\n  });\n}\n\nutil.inherits(Zlib, Transform);\n\nZlib.prototype.params = function (level, strategy, callback) {\n  if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) {\n    throw new RangeError('Invalid compression level: ' + level);\n  }\n  if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) {\n    throw new TypeError('Invalid strategy: ' + strategy);\n  }\n\n  if (this._level !== level || this._strategy !== strategy) {\n    var self = this;\n    this.flush(binding.Z_SYNC_FLUSH, function () {\n      assert(self._handle, 'zlib binding closed');\n      self._handle.params(level, strategy);\n      if (!self._hadError) {\n        self._level = level;\n        self._strategy = strategy;\n        if (callback) callback();\n      }\n    });\n  } else {\n    process.nextTick(callback);\n  }\n};\n\nZlib.prototype.reset = function () {\n  assert(this._handle, 'zlib binding closed');\n  return this._handle.reset();\n};\n\n// This is the _flush function called by the transform class,\n// internally, when the last chunk has been written.\nZlib.prototype._flush = function (callback) {\n  this._transform(Buffer.alloc(0), '', callback);\n};\n\nZlib.prototype.flush = function (kind, callback) {\n  var _this2 = this;\n\n  var ws = this._writableState;\n\n  if (typeof kind === 'function' || kind === undefined && !callback) {\n    callback = kind;\n    kind = binding.Z_FULL_FLUSH;\n  }\n\n  if (ws.ended) {\n    if (callback) process.nextTick(callback);\n  } else if (ws.ending) {\n    if (callback) this.once('end', callback);\n  } else if (ws.needDrain) {\n    if (callback) {\n      this.once('drain', function () {\n        return _this2.flush(kind, callback);\n      });\n    }\n  } else {\n    this._flushFlag = kind;\n    this.write(Buffer.alloc(0), '', callback);\n  }\n};\n\nZlib.prototype.close = function (callback) {\n  _close(this, callback);\n  process.nextTick(emitCloseNT, this);\n};\n\nfunction _close(engine, callback) {\n  if (callback) process.nextTick(callback);\n\n  // Caller may invoke .close after a zlib error (which will null _handle).\n  if (!engine._handle) return;\n\n  engine._handle.close();\n  engine._handle = null;\n}\n\nfunction emitCloseNT(self) {\n  self.emit('close');\n}\n\nZlib.prototype._transform = function (chunk, encoding, cb) {\n  var flushFlag;\n  var ws = this._writableState;\n  var ending = ws.ending || ws.ended;\n  var last = ending && (!chunk || ws.length === chunk.length);\n\n  if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input'));\n\n  if (!this._handle) return cb(new Error('zlib binding closed'));\n\n  // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag\n  // (or whatever flag was provided using opts.finishFlush).\n  // If it's explicitly flushing at some other time, then we use\n  // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression\n  // goodness.\n  if (last) flushFlag = this._finishFlushFlag;else {\n    flushFlag = this._flushFlag;\n    // once we've flushed the last of the queue, stop flushing and\n    // go back to the normal behavior.\n    if (chunk.length >= ws.length) {\n      this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;\n    }\n  }\n\n  this._processChunk(chunk, flushFlag, cb);\n};\n\nZlib.prototype._processChunk = function (chunk, flushFlag, cb) {\n  var availInBefore = chunk && chunk.length;\n  var availOutBefore = this._chunkSize - this._offset;\n  var inOff = 0;\n\n  var self = this;\n\n  var async = typeof cb === 'function';\n\n  if (!async) {\n    var buffers = [];\n    var nread = 0;\n\n    var error;\n    this.on('error', function (er) {\n      error = er;\n    });\n\n    assert(this._handle, 'zlib binding closed');\n    do {\n      var res = this._handle.writeSync(flushFlag, chunk, // in\n      inOff, // in_off\n      availInBefore, // in_len\n      this._buffer, // out\n      this._offset, //out_off\n      availOutBefore); // out_len\n    } while (!this._hadError && callback(res[0], res[1]));\n\n    if (this._hadError) {\n      throw error;\n    }\n\n    if (nread >= kMaxLength) {\n      _close(this);\n      throw new RangeError(kRangeErrorMessage);\n    }\n\n    var buf = Buffer.concat(buffers, nread);\n    _close(this);\n\n    return buf;\n  }\n\n  assert(this._handle, 'zlib binding closed');\n  var req = this._handle.write(flushFlag, chunk, // in\n  inOff, // in_off\n  availInBefore, // in_len\n  this._buffer, // out\n  this._offset, //out_off\n  availOutBefore); // out_len\n\n  req.buffer = chunk;\n  req.callback = callback;\n\n  function callback(availInAfter, availOutAfter) {\n    // When the callback is used in an async write, the callback's\n    // context is the `req` object that was created. The req object\n    // is === this._handle, and that's why it's important to null\n    // out the values after they are done being used. `this._handle`\n    // can stay in memory longer than the callback and buffer are needed.\n    if (this) {\n      this.buffer = null;\n      this.callback = null;\n    }\n\n    if (self._hadError) return;\n\n    var have = availOutBefore - availOutAfter;\n    assert(have >= 0, 'have should not go down');\n\n    if (have > 0) {\n      var out = self._buffer.slice(self._offset, self._offset + have);\n      self._offset += have;\n      // serve some output to the consumer.\n      if (async) {\n        self.push(out);\n      } else {\n        buffers.push(out);\n        nread += out.length;\n      }\n    }\n\n    // exhausted the output buffer, or used all the input create a new one.\n    if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n      availOutBefore = self._chunkSize;\n      self._offset = 0;\n      self._buffer = Buffer.allocUnsafe(self._chunkSize);\n    }\n\n    if (availOutAfter === 0) {\n      // Not actually done.  Need to reprocess.\n      // Also, update the availInBefore to the availInAfter value,\n      // so that if we have to hit it a third (fourth, etc.) time,\n      // it'll have the correct byte counts.\n      inOff += availInBefore - availInAfter;\n      availInBefore = availInAfter;\n\n      if (!async) return true;\n\n      var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize);\n      newReq.callback = callback; // this same function\n      newReq.buffer = chunk;\n      return;\n    }\n\n    if (!async) return false;\n\n    // finished with the chunk.\n    cb();\n  }\n};\n\nutil.inherits(Deflate, Zlib);\nutil.inherits(Inflate, Zlib);\nutil.inherits(Gzip, Zlib);\nutil.inherits(Gunzip, Zlib);\nutil.inherits(DeflateRaw, Zlib);\nutil.inherits(InflateRaw, Zlib);\nutil.inherits(Unzip, Zlib);","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\n\nlet ChunkStream = (module.exports = function () {\n  Stream.call(this);\n\n  this._buffers = [];\n  this._buffered = 0;\n\n  this._reads = [];\n  this._paused = false;\n\n  this._encoding = \"utf8\";\n  this.writable = true;\n});\nutil.inherits(ChunkStream, Stream);\n\nChunkStream.prototype.read = function (length, callback) {\n  this._reads.push({\n    length: Math.abs(length), // if length < 0 then at most this length\n    allowLess: length < 0,\n    func: callback,\n  });\n\n  process.nextTick(\n    function () {\n      this._process();\n\n      // its paused and there is not enought data then ask for more\n      if (this._paused && this._reads && this._reads.length > 0) {\n        this._paused = false;\n\n        this.emit(\"drain\");\n      }\n    }.bind(this)\n  );\n};\n\nChunkStream.prototype.write = function (data, encoding) {\n  if (!this.writable) {\n    this.emit(\"error\", new Error(\"Stream not writable\"));\n    return false;\n  }\n\n  let dataBuffer;\n  if (Buffer.isBuffer(data)) {\n    dataBuffer = data;\n  } else {\n    dataBuffer = Buffer.from(data, encoding || this._encoding);\n  }\n\n  this._buffers.push(dataBuffer);\n  this._buffered += dataBuffer.length;\n\n  this._process();\n\n  // ok if there are no more read requests\n  if (this._reads && this._reads.length === 0) {\n    this._paused = true;\n  }\n\n  return this.writable && !this._paused;\n};\n\nChunkStream.prototype.end = function (data, encoding) {\n  if (data) {\n    this.write(data, encoding);\n  }\n\n  this.writable = false;\n\n  // already destroyed\n  if (!this._buffers) {\n    return;\n  }\n\n  // enqueue or handle end\n  if (this._buffers.length === 0) {\n    this._end();\n  } else {\n    this._buffers.push(null);\n    this._process();\n  }\n};\n\nChunkStream.prototype.destroySoon = ChunkStream.prototype.end;\n\nChunkStream.prototype._end = function () {\n  if (this._reads.length > 0) {\n    this.emit(\"error\", new Error(\"Unexpected end of input\"));\n  }\n\n  this.destroy();\n};\n\nChunkStream.prototype.destroy = function () {\n  if (!this._buffers) {\n    return;\n  }\n\n  this.writable = false;\n  this._reads = null;\n  this._buffers = null;\n\n  this.emit(\"close\");\n};\n\nChunkStream.prototype._processReadAllowingLess = function (read) {\n  // ok there is any data so that we can satisfy this request\n  this._reads.shift(); // == read\n\n  // first we need to peek into first buffer\n  let smallerBuf = this._buffers[0];\n\n  // ok there is more data than we need\n  if (smallerBuf.length > read.length) {\n    this._buffered -= read.length;\n    this._buffers[0] = smallerBuf.slice(read.length);\n\n    read.func.call(this, smallerBuf.slice(0, read.length));\n  } else {\n    // ok this is less than maximum length so use it all\n    this._buffered -= smallerBuf.length;\n    this._buffers.shift(); // == smallerBuf\n\n    read.func.call(this, smallerBuf);\n  }\n};\n\nChunkStream.prototype._processRead = function (read) {\n  this._reads.shift(); // == read\n\n  let pos = 0;\n  let count = 0;\n  let data = Buffer.alloc(read.length);\n\n  // create buffer for all data\n  while (pos < read.length) {\n    let buf = this._buffers[count++];\n    let len = Math.min(buf.length, read.length - pos);\n\n    buf.copy(data, pos, 0, len);\n    pos += len;\n\n    // last buffer wasn't used all so just slice it and leave\n    if (len !== buf.length) {\n      this._buffers[--count] = buf.slice(len);\n    }\n  }\n\n  // remove all used buffers\n  if (count > 0) {\n    this._buffers.splice(0, count);\n  }\n\n  this._buffered -= read.length;\n\n  read.func.call(this, data);\n};\n\nChunkStream.prototype._process = function () {\n  try {\n    // as long as there is any data and read requests\n    while (this._buffered > 0 && this._reads && this._reads.length > 0) {\n      let read = this._reads[0];\n\n      // read any data (but no more than length)\n      if (read.allowLess) {\n        this._processReadAllowingLess(read);\n      } else if (this._buffered >= read.length) {\n        // ok we can meet some expectations\n\n        this._processRead(read);\n      } else {\n        // not enought data to satisfy first request in queue\n        // so we need to wait for more\n        break;\n      }\n    }\n\n    if (this._buffers && !this.writable) {\n      this._end();\n    }\n  } catch (ex) {\n    this.emit(\"error\", ex);\n  }\n};\n","\"use strict\";\n\n// Adam 7\n//   0 1 2 3 4 5 6 7\n// 0 x 6 4 6 x 6 4 6\n// 1 7 7 7 7 7 7 7 7\n// 2 5 6 5 6 5 6 5 6\n// 3 7 7 7 7 7 7 7 7\n// 4 3 6 4 6 3 6 4 6\n// 5 7 7 7 7 7 7 7 7\n// 6 5 6 5 6 5 6 5 6\n// 7 7 7 7 7 7 7 7 7\n\nlet imagePasses = [\n  {\n    // pass 1 - 1px\n    x: [0],\n    y: [0],\n  },\n  {\n    // pass 2 - 1px\n    x: [4],\n    y: [0],\n  },\n  {\n    // pass 3 - 2px\n    x: [0, 4],\n    y: [4],\n  },\n  {\n    // pass 4 - 4px\n    x: [2, 6],\n    y: [0, 4],\n  },\n  {\n    // pass 5 - 8px\n    x: [0, 2, 4, 6],\n    y: [2, 6],\n  },\n  {\n    // pass 6 - 16px\n    x: [1, 3, 5, 7],\n    y: [0, 2, 4, 6],\n  },\n  {\n    // pass 7 - 32px\n    x: [0, 1, 2, 3, 4, 5, 6, 7],\n    y: [1, 3, 5, 7],\n  },\n];\n\nexports.getImagePasses = function (width, height) {\n  let images = [];\n  let xLeftOver = width % 8;\n  let yLeftOver = height % 8;\n  let xRepeats = (width - xLeftOver) / 8;\n  let yRepeats = (height - yLeftOver) / 8;\n  for (let i = 0; i < imagePasses.length; i++) {\n    let pass = imagePasses[i];\n    let passWidth = xRepeats * pass.x.length;\n    let passHeight = yRepeats * pass.y.length;\n    for (let j = 0; j < pass.x.length; j++) {\n      if (pass.x[j] < xLeftOver) {\n        passWidth++;\n      } else {\n        break;\n      }\n    }\n    for (let j = 0; j < pass.y.length; j++) {\n      if (pass.y[j] < yLeftOver) {\n        passHeight++;\n      } else {\n        break;\n      }\n    }\n    if (passWidth > 0 && passHeight > 0) {\n      images.push({ width: passWidth, height: passHeight, index: i });\n    }\n  }\n  return images;\n};\n\nexports.getInterlaceIterator = function (width) {\n  return function (x, y, pass) {\n    let outerXLeftOver = x % imagePasses[pass].x.length;\n    let outerX =\n      ((x - outerXLeftOver) / imagePasses[pass].x.length) * 8 +\n      imagePasses[pass].x[outerXLeftOver];\n    let outerYLeftOver = y % imagePasses[pass].y.length;\n    let outerY =\n      ((y - outerYLeftOver) / imagePasses[pass].y.length) * 8 +\n      imagePasses[pass].y[outerYLeftOver];\n    return outerX * 4 + outerY * width * 4;\n  };\n};\n","\"use strict\";\n\nmodule.exports = function paethPredictor(left, above, upLeft) {\n  let paeth = left + above - upLeft;\n  let pLeft = Math.abs(paeth - left);\n  let pAbove = Math.abs(paeth - above);\n  let pUpLeft = Math.abs(paeth - upLeft);\n\n  if (pLeft <= pAbove && pLeft <= pUpLeft) {\n    return left;\n  }\n  if (pAbove <= pUpLeft) {\n    return above;\n  }\n  return upLeft;\n};\n","\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction getByteWidth(width, bpp, depth) {\n  let byteWidth = width * bpp;\n  if (depth !== 8) {\n    byteWidth = Math.ceil(byteWidth / (8 / depth));\n  }\n  return byteWidth;\n}\n\nlet Filter = (module.exports = function (bitmapInfo, dependencies) {\n  let width = bitmapInfo.width;\n  let height = bitmapInfo.height;\n  let interlace = bitmapInfo.interlace;\n  let bpp = bitmapInfo.bpp;\n  let depth = bitmapInfo.depth;\n\n  this.read = dependencies.read;\n  this.write = dependencies.write;\n  this.complete = dependencies.complete;\n\n  this._imageIndex = 0;\n  this._images = [];\n  if (interlace) {\n    let passes = interlaceUtils.getImagePasses(width, height);\n    for (let i = 0; i < passes.length; i++) {\n      this._images.push({\n        byteWidth: getByteWidth(passes[i].width, bpp, depth),\n        height: passes[i].height,\n        lineIndex: 0,\n      });\n    }\n  } else {\n    this._images.push({\n      byteWidth: getByteWidth(width, bpp, depth),\n      height: height,\n      lineIndex: 0,\n    });\n  }\n\n  // when filtering the line we look at the pixel to the left\n  // the spec also says it is done on a byte level regardless of the number of pixels\n  // so if the depth is byte compatible (8 or 16) we subtract the bpp in order to compare back\n  // a pixel rather than just a different byte part. However if we are sub byte, we ignore.\n  if (depth === 8) {\n    this._xComparison = bpp;\n  } else if (depth === 16) {\n    this._xComparison = bpp * 2;\n  } else {\n    this._xComparison = 1;\n  }\n});\n\nFilter.prototype.start = function () {\n  this.read(\n    this._images[this._imageIndex].byteWidth + 1,\n    this._reverseFilterLine.bind(this)\n  );\n};\n\nFilter.prototype._unFilterType1 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f1Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    unfilteredLine[x] = rawByte + f1Left;\n  }\n};\n\nFilter.prototype._unFilterType2 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f2Up = lastLine ? lastLine[x] : 0;\n    unfilteredLine[x] = rawByte + f2Up;\n  }\n};\n\nFilter.prototype._unFilterType3 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f3Up = lastLine ? lastLine[x] : 0;\n    let f3Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    let f3Add = Math.floor((f3Left + f3Up) / 2);\n    unfilteredLine[x] = rawByte + f3Add;\n  }\n};\n\nFilter.prototype._unFilterType4 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f4Up = lastLine ? lastLine[x] : 0;\n    let f4Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    let f4UpLeft = x > xBiggerThan && lastLine ? lastLine[x - xComparison] : 0;\n    let f4Add = paethPredictor(f4Left, f4Up, f4UpLeft);\n    unfilteredLine[x] = rawByte + f4Add;\n  }\n};\n\nFilter.prototype._reverseFilterLine = function (rawData) {\n  let filter = rawData[0];\n  let unfilteredLine;\n  let currentImage = this._images[this._imageIndex];\n  let byteWidth = currentImage.byteWidth;\n\n  if (filter === 0) {\n    unfilteredLine = rawData.slice(1, byteWidth + 1);\n  } else {\n    unfilteredLine = Buffer.alloc(byteWidth);\n\n    switch (filter) {\n      case 1:\n        this._unFilterType1(rawData, unfilteredLine, byteWidth);\n        break;\n      case 2:\n        this._unFilterType2(rawData, unfilteredLine, byteWidth);\n        break;\n      case 3:\n        this._unFilterType3(rawData, unfilteredLine, byteWidth);\n        break;\n      case 4:\n        this._unFilterType4(rawData, unfilteredLine, byteWidth);\n        break;\n      default:\n        throw new Error(\"Unrecognised filter type - \" + filter);\n    }\n  }\n\n  this.write(unfilteredLine);\n\n  currentImage.lineIndex++;\n  if (currentImage.lineIndex >= currentImage.height) {\n    this._lastLine = null;\n    this._imageIndex++;\n    currentImage = this._images[this._imageIndex];\n  } else {\n    this._lastLine = unfilteredLine;\n  }\n\n  if (currentImage) {\n    // read, using the byte width that may be from the new current image\n    this.read(currentImage.byteWidth + 1, this._reverseFilterLine.bind(this));\n  } else {\n    this._lastLine = null;\n    this.complete();\n  }\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet ChunkStream = require(\"./chunkstream\");\nlet Filter = require(\"./filter-parse\");\n\nlet FilterAsync = (module.exports = function (bitmapInfo) {\n  ChunkStream.call(this);\n\n  let buffers = [];\n  let that = this;\n  this._filter = new Filter(bitmapInfo, {\n    read: this.read.bind(this),\n    write: function (buffer) {\n      buffers.push(buffer);\n    },\n    complete: function () {\n      that.emit(\"complete\", Buffer.concat(buffers));\n    },\n  });\n\n  this._filter.start();\n});\nutil.inherits(FilterAsync, ChunkStream);\n","\"use strict\";\n\nmodule.exports = {\n  PNG_SIGNATURE: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a],\n\n  TYPE_IHDR: 0x49484452,\n  TYPE_IEND: 0x49454e44,\n  TYPE_IDAT: 0x49444154,\n  TYPE_PLTE: 0x504c5445,\n  TYPE_tRNS: 0x74524e53, // eslint-disable-line camelcase\n  TYPE_gAMA: 0x67414d41, // eslint-disable-line camelcase\n\n  // color-type bits\n  COLORTYPE_GRAYSCALE: 0,\n  COLORTYPE_PALETTE: 1,\n  COLORTYPE_COLOR: 2,\n  COLORTYPE_ALPHA: 4, // e.g. grayscale and alpha\n\n  // color-type combinations\n  COLORTYPE_PALETTE_COLOR: 3,\n  COLORTYPE_COLOR_ALPHA: 6,\n\n  COLORTYPE_TO_BPP_MAP: {\n    0: 1,\n    2: 3,\n    3: 1,\n    4: 2,\n    6: 4,\n  },\n\n  GAMMA_DIVISION: 100000,\n};\n","\"use strict\";\n\nlet crcTable = [];\n\n(function () {\n  for (let i = 0; i < 256; i++) {\n    let currentCrc = i;\n    for (let j = 0; j < 8; j++) {\n      if (currentCrc & 1) {\n        currentCrc = 0xedb88320 ^ (currentCrc >>> 1);\n      } else {\n        currentCrc = currentCrc >>> 1;\n      }\n    }\n    crcTable[i] = currentCrc;\n  }\n})();\n\nlet CrcCalculator = (module.exports = function () {\n  this._crc = -1;\n});\n\nCrcCalculator.prototype.write = function (data) {\n  for (let i = 0; i < data.length; i++) {\n    this._crc = crcTable[(this._crc ^ data[i]) & 0xff] ^ (this._crc >>> 8);\n  }\n  return true;\n};\n\nCrcCalculator.prototype.crc32 = function () {\n  return this._crc ^ -1;\n};\n\nCrcCalculator.crc32 = function (buf) {\n  let crc = -1;\n  for (let i = 0; i < buf.length; i++) {\n    crc = crcTable[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);\n  }\n  return crc ^ -1;\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcCalculator = require(\"./crc\");\n\nlet Parser = (module.exports = function (options, dependencies) {\n  this._options = options;\n  options.checkCRC = options.checkCRC !== false;\n\n  this._hasIHDR = false;\n  this._hasIEND = false;\n  this._emittedHeadersFinished = false;\n\n  // input flags/metadata\n  this._palette = [];\n  this._colorType = 0;\n\n  this._chunks = {};\n  this._chunks[constants.TYPE_IHDR] = this._handleIHDR.bind(this);\n  this._chunks[constants.TYPE_IEND] = this._handleIEND.bind(this);\n  this._chunks[constants.TYPE_IDAT] = this._handleIDAT.bind(this);\n  this._chunks[constants.TYPE_PLTE] = this._handlePLTE.bind(this);\n  this._chunks[constants.TYPE_tRNS] = this._handleTRNS.bind(this);\n  this._chunks[constants.TYPE_gAMA] = this._handleGAMA.bind(this);\n\n  this.read = dependencies.read;\n  this.error = dependencies.error;\n  this.metadata = dependencies.metadata;\n  this.gamma = dependencies.gamma;\n  this.transColor = dependencies.transColor;\n  this.palette = dependencies.palette;\n  this.parsed = dependencies.parsed;\n  this.inflateData = dependencies.inflateData;\n  this.finished = dependencies.finished;\n  this.simpleTransparency = dependencies.simpleTransparency;\n  this.headersFinished = dependencies.headersFinished || function () {};\n});\n\nParser.prototype.start = function () {\n  this.read(constants.PNG_SIGNATURE.length, this._parseSignature.bind(this));\n};\n\nParser.prototype._parseSignature = function (data) {\n  let signature = constants.PNG_SIGNATURE;\n\n  for (let i = 0; i < signature.length; i++) {\n    if (data[i] !== signature[i]) {\n      this.error(new Error(\"Invalid file signature\"));\n      return;\n    }\n  }\n  this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._parseChunkBegin = function (data) {\n  // chunk content length\n  let length = data.readUInt32BE(0);\n\n  // chunk type\n  let type = data.readUInt32BE(4);\n  let name = \"\";\n  for (let i = 4; i < 8; i++) {\n    name += String.fromCharCode(data[i]);\n  }\n\n  //console.log('chunk ', name, length);\n\n  // chunk flags\n  let ancillary = Boolean(data[4] & 0x20); // or critical\n  //    priv = Boolean(data[5] & 0x20), // or public\n  //    safeToCopy = Boolean(data[7] & 0x20); // or unsafe\n\n  if (!this._hasIHDR && type !== constants.TYPE_IHDR) {\n    this.error(new Error(\"Expected IHDR on beggining\"));\n    return;\n  }\n\n  this._crc = new CrcCalculator();\n  this._crc.write(Buffer.from(name));\n\n  if (this._chunks[type]) {\n    return this._chunks[type](length);\n  }\n\n  if (!ancillary) {\n    this.error(new Error(\"Unsupported critical chunk type \" + name));\n    return;\n  }\n\n  this.read(length + 4, this._skipChunk.bind(this));\n};\n\nParser.prototype._skipChunk = function (/*data*/) {\n  this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._handleChunkEnd = function () {\n  this.read(4, this._parseChunkEnd.bind(this));\n};\n\nParser.prototype._parseChunkEnd = function (data) {\n  let fileCrc = data.readInt32BE(0);\n  let calcCrc = this._crc.crc32();\n\n  // check CRC\n  if (this._options.checkCRC && calcCrc !== fileCrc) {\n    this.error(new Error(\"Crc error - \" + fileCrc + \" - \" + calcCrc));\n    return;\n  }\n\n  if (!this._hasIEND) {\n    this.read(8, this._parseChunkBegin.bind(this));\n  }\n};\n\nParser.prototype._handleIHDR = function (length) {\n  this.read(length, this._parseIHDR.bind(this));\n};\nParser.prototype._parseIHDR = function (data) {\n  this._crc.write(data);\n\n  let width = data.readUInt32BE(0);\n  let height = data.readUInt32BE(4);\n  let depth = data[8];\n  let colorType = data[9]; // bits: 1 palette, 2 color, 4 alpha\n  let compr = data[10];\n  let filter = data[11];\n  let interlace = data[12];\n\n  // console.log('    width', width, 'height', height,\n  //     'depth', depth, 'colorType', colorType,\n  //     'compr', compr, 'filter', filter, 'interlace', interlace\n  // );\n\n  if (\n    depth !== 8 &&\n    depth !== 4 &&\n    depth !== 2 &&\n    depth !== 1 &&\n    depth !== 16\n  ) {\n    this.error(new Error(\"Unsupported bit depth \" + depth));\n    return;\n  }\n  if (!(colorType in constants.COLORTYPE_TO_BPP_MAP)) {\n    this.error(new Error(\"Unsupported color type\"));\n    return;\n  }\n  if (compr !== 0) {\n    this.error(new Error(\"Unsupported compression method\"));\n    return;\n  }\n  if (filter !== 0) {\n    this.error(new Error(\"Unsupported filter method\"));\n    return;\n  }\n  if (interlace !== 0 && interlace !== 1) {\n    this.error(new Error(\"Unsupported interlace method\"));\n    return;\n  }\n\n  this._colorType = colorType;\n\n  let bpp = constants.COLORTYPE_TO_BPP_MAP[this._colorType];\n\n  this._hasIHDR = true;\n\n  this.metadata({\n    width: width,\n    height: height,\n    depth: depth,\n    interlace: Boolean(interlace),\n    palette: Boolean(colorType & constants.COLORTYPE_PALETTE),\n    color: Boolean(colorType & constants.COLORTYPE_COLOR),\n    alpha: Boolean(colorType & constants.COLORTYPE_ALPHA),\n    bpp: bpp,\n    colorType: colorType,\n  });\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handlePLTE = function (length) {\n  this.read(length, this._parsePLTE.bind(this));\n};\nParser.prototype._parsePLTE = function (data) {\n  this._crc.write(data);\n\n  let entries = Math.floor(data.length / 3);\n  // console.log('Palette:', entries);\n\n  for (let i = 0; i < entries; i++) {\n    this._palette.push([data[i * 3], data[i * 3 + 1], data[i * 3 + 2], 0xff]);\n  }\n\n  this.palette(this._palette);\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleTRNS = function (length) {\n  this.simpleTransparency();\n  this.read(length, this._parseTRNS.bind(this));\n};\nParser.prototype._parseTRNS = function (data) {\n  this._crc.write(data);\n\n  // palette\n  if (this._colorType === constants.COLORTYPE_PALETTE_COLOR) {\n    if (this._palette.length === 0) {\n      this.error(new Error(\"Transparency chunk must be after palette\"));\n      return;\n    }\n    if (data.length > this._palette.length) {\n      this.error(new Error(\"More transparent colors than palette size\"));\n      return;\n    }\n    for (let i = 0; i < data.length; i++) {\n      this._palette[i][3] = data[i];\n    }\n    this.palette(this._palette);\n  }\n\n  // for colorType 0 (grayscale) and 2 (rgb)\n  // there might be one gray/color defined as transparent\n  if (this._colorType === constants.COLORTYPE_GRAYSCALE) {\n    // grey, 2 bytes\n    this.transColor([data.readUInt16BE(0)]);\n  }\n  if (this._colorType === constants.COLORTYPE_COLOR) {\n    this.transColor([\n      data.readUInt16BE(0),\n      data.readUInt16BE(2),\n      data.readUInt16BE(4),\n    ]);\n  }\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleGAMA = function (length) {\n  this.read(length, this._parseGAMA.bind(this));\n};\nParser.prototype._parseGAMA = function (data) {\n  this._crc.write(data);\n  this.gamma(data.readUInt32BE(0) / constants.GAMMA_DIVISION);\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleIDAT = function (length) {\n  if (!this._emittedHeadersFinished) {\n    this._emittedHeadersFinished = true;\n    this.headersFinished();\n  }\n  this.read(-length, this._parseIDAT.bind(this, length));\n};\nParser.prototype._parseIDAT = function (length, data) {\n  this._crc.write(data);\n\n  if (\n    this._colorType === constants.COLORTYPE_PALETTE_COLOR &&\n    this._palette.length === 0\n  ) {\n    throw new Error(\"Expected palette not found\");\n  }\n\n  this.inflateData(data);\n  let leftOverLength = length - data.length;\n\n  if (leftOverLength > 0) {\n    this._handleIDAT(leftOverLength);\n  } else {\n    this._handleChunkEnd();\n  }\n};\n\nParser.prototype._handleIEND = function (length) {\n  this.read(length, this._parseIEND.bind(this));\n};\nParser.prototype._parseIEND = function (data) {\n  this._crc.write(data);\n\n  this._hasIEND = true;\n  this._handleChunkEnd();\n\n  if (this.finished) {\n    this.finished();\n  }\n};\n","\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\n\nlet pixelBppMapper = [\n  // 0 - dummy entry\n  function () {},\n\n  // 1 - L\n  // 0: 0, 1: 0, 2: 0, 3: 0xff\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos === data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    let pixel = data[rawPos];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = 0xff;\n  },\n\n  // 2 - LA\n  // 0: 0, 1: 0, 2: 0, 3: 1\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 1 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    let pixel = data[rawPos];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = data[rawPos + 1];\n  },\n\n  // 3 - RGB\n  // 0: 0, 1: 1, 2: 2, 3: 0xff\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 2 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    pxData[pxPos] = data[rawPos];\n    pxData[pxPos + 1] = data[rawPos + 1];\n    pxData[pxPos + 2] = data[rawPos + 2];\n    pxData[pxPos + 3] = 0xff;\n  },\n\n  // 4 - RGBA\n  // 0: 0, 1: 1, 2: 2, 3: 3\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 3 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    pxData[pxPos] = data[rawPos];\n    pxData[pxPos + 1] = data[rawPos + 1];\n    pxData[pxPos + 2] = data[rawPos + 2];\n    pxData[pxPos + 3] = data[rawPos + 3];\n  },\n];\n\nlet pixelBppCustomMapper = [\n  // 0 - dummy entry\n  function () {},\n\n  // 1 - L\n  // 0: 0, 1: 0, 2: 0, 3: 0xff\n  function (pxData, pixelData, pxPos, maxBit) {\n    let pixel = pixelData[0];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = maxBit;\n  },\n\n  // 2 - LA\n  // 0: 0, 1: 0, 2: 0, 3: 1\n  function (pxData, pixelData, pxPos) {\n    let pixel = pixelData[0];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = pixelData[1];\n  },\n\n  // 3 - RGB\n  // 0: 0, 1: 1, 2: 2, 3: 0xff\n  function (pxData, pixelData, pxPos, maxBit) {\n    pxData[pxPos] = pixelData[0];\n    pxData[pxPos + 1] = pixelData[1];\n    pxData[pxPos + 2] = pixelData[2];\n    pxData[pxPos + 3] = maxBit;\n  },\n\n  // 4 - RGBA\n  // 0: 0, 1: 1, 2: 2, 3: 3\n  function (pxData, pixelData, pxPos) {\n    pxData[pxPos] = pixelData[0];\n    pxData[pxPos + 1] = pixelData[1];\n    pxData[pxPos + 2] = pixelData[2];\n    pxData[pxPos + 3] = pixelData[3];\n  },\n];\n\nfunction bitRetriever(data, depth) {\n  let leftOver = [];\n  let i = 0;\n\n  function split() {\n    if (i === data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n    let byte = data[i];\n    i++;\n    let byte8, byte7, byte6, byte5, byte4, byte3, byte2, byte1;\n    switch (depth) {\n      default:\n        throw new Error(\"unrecognised depth\");\n      case 16:\n        byte2 = data[i];\n        i++;\n        leftOver.push((byte << 8) + byte2);\n        break;\n      case 4:\n        byte2 = byte & 0x0f;\n        byte1 = byte >> 4;\n        leftOver.push(byte1, byte2);\n        break;\n      case 2:\n        byte4 = byte & 3;\n        byte3 = (byte >> 2) & 3;\n        byte2 = (byte >> 4) & 3;\n        byte1 = (byte >> 6) & 3;\n        leftOver.push(byte1, byte2, byte3, byte4);\n        break;\n      case 1:\n        byte8 = byte & 1;\n        byte7 = (byte >> 1) & 1;\n        byte6 = (byte >> 2) & 1;\n        byte5 = (byte >> 3) & 1;\n        byte4 = (byte >> 4) & 1;\n        byte3 = (byte >> 5) & 1;\n        byte2 = (byte >> 6) & 1;\n        byte1 = (byte >> 7) & 1;\n        leftOver.push(byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8);\n        break;\n    }\n  }\n\n  return {\n    get: function (count) {\n      while (leftOver.length < count) {\n        split();\n      }\n      let returner = leftOver.slice(0, count);\n      leftOver = leftOver.slice(count);\n      return returner;\n    },\n    resetAfterLine: function () {\n      leftOver.length = 0;\n    },\n    end: function () {\n      if (i !== data.length) {\n        throw new Error(\"extra data found\");\n      }\n    },\n  };\n}\n\nfunction mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) {\n  // eslint-disable-line max-params\n  let imageWidth = image.width;\n  let imageHeight = image.height;\n  let imagePass = image.index;\n  for (let y = 0; y < imageHeight; y++) {\n    for (let x = 0; x < imageWidth; x++) {\n      let pxPos = getPxPos(x, y, imagePass);\n      pixelBppMapper[bpp](pxData, data, pxPos, rawPos);\n      rawPos += bpp; //eslint-disable-line no-param-reassign\n    }\n  }\n  return rawPos;\n}\n\nfunction mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) {\n  // eslint-disable-line max-params\n  let imageWidth = image.width;\n  let imageHeight = image.height;\n  let imagePass = image.index;\n  for (let y = 0; y < imageHeight; y++) {\n    for (let x = 0; x < imageWidth; x++) {\n      let pixelData = bits.get(bpp);\n      let pxPos = getPxPos(x, y, imagePass);\n      pixelBppCustomMapper[bpp](pxData, pixelData, pxPos, maxBit);\n    }\n    bits.resetAfterLine();\n  }\n}\n\nexports.dataToBitMap = function (data, bitmapInfo) {\n  let width = bitmapInfo.width;\n  let height = bitmapInfo.height;\n  let depth = bitmapInfo.depth;\n  let bpp = bitmapInfo.bpp;\n  let interlace = bitmapInfo.interlace;\n  let bits;\n\n  if (depth !== 8) {\n    bits = bitRetriever(data, depth);\n  }\n  let pxData;\n  if (depth <= 8) {\n    pxData = Buffer.alloc(width * height * 4);\n  } else {\n    pxData = new Uint16Array(width * height * 4);\n  }\n  let maxBit = Math.pow(2, depth) - 1;\n  let rawPos = 0;\n  let images;\n  let getPxPos;\n\n  if (interlace) {\n    images = interlaceUtils.getImagePasses(width, height);\n    getPxPos = interlaceUtils.getInterlaceIterator(width, height);\n  } else {\n    let nonInterlacedPxPos = 0;\n    getPxPos = function () {\n      let returner = nonInterlacedPxPos;\n      nonInterlacedPxPos += 4;\n      return returner;\n    };\n    images = [{ width: width, height: height }];\n  }\n\n  for (let imageIndex = 0; imageIndex < images.length; imageIndex++) {\n    if (depth === 8) {\n      rawPos = mapImage8Bit(\n        images[imageIndex],\n        pxData,\n        getPxPos,\n        bpp,\n        data,\n        rawPos\n      );\n    } else {\n      mapImageCustomBit(\n        images[imageIndex],\n        pxData,\n        getPxPos,\n        bpp,\n        bits,\n        maxBit\n      );\n    }\n  }\n  if (depth === 8) {\n    if (rawPos !== data.length) {\n      throw new Error(\"extra data found\");\n    }\n  } else {\n    bits.end();\n  }\n\n  return pxData;\n};\n","\"use strict\";\n\nfunction dePalette(indata, outdata, width, height, palette) {\n  let pxPos = 0;\n  // use values from palette\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let color = palette[indata[pxPos]];\n\n      if (!color) {\n        throw new Error(\"index \" + indata[pxPos] + \" not in palette\");\n      }\n\n      for (let i = 0; i < 4; i++) {\n        outdata[pxPos + i] = color[i];\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nfunction replaceTransparentColor(indata, outdata, width, height, transColor) {\n  let pxPos = 0;\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let makeTrans = false;\n\n      if (transColor.length === 1) {\n        if (transColor[0] === indata[pxPos]) {\n          makeTrans = true;\n        }\n      } else if (\n        transColor[0] === indata[pxPos] &&\n        transColor[1] === indata[pxPos + 1] &&\n        transColor[2] === indata[pxPos + 2]\n      ) {\n        makeTrans = true;\n      }\n      if (makeTrans) {\n        for (let i = 0; i < 4; i++) {\n          outdata[pxPos + i] = 0;\n        }\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nfunction scaleDepth(indata, outdata, width, height, depth) {\n  let maxOutSample = 255;\n  let maxInSample = Math.pow(2, depth) - 1;\n  let pxPos = 0;\n\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      for (let i = 0; i < 4; i++) {\n        outdata[pxPos + i] = Math.floor(\n          (indata[pxPos + i] * maxOutSample) / maxInSample + 0.5\n        );\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nmodule.exports = function (indata, imageData, skipRescale = false) {\n  let depth = imageData.depth;\n  let width = imageData.width;\n  let height = imageData.height;\n  let colorType = imageData.colorType;\n  let transColor = imageData.transColor;\n  let palette = imageData.palette;\n\n  let outdata = indata; // only different for 16 bits\n\n  if (colorType === 3) {\n    // paletted\n    dePalette(indata, outdata, width, height, palette);\n  } else {\n    if (transColor) {\n      replaceTransparentColor(indata, outdata, width, height, transColor);\n    }\n    // if it needs scaling\n    if (depth !== 8 && !skipRescale) {\n      // if we need to change the buffer size\n      if (depth === 16) {\n        outdata = Buffer.alloc(width * height * 4);\n      }\n      scaleDepth(indata, outdata, width, height, depth);\n    }\n  }\n  return outdata;\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet zlib = require(\"zlib\");\nlet ChunkStream = require(\"./chunkstream\");\nlet FilterAsync = require(\"./filter-parse-async\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nlet ParserAsync = (module.exports = function (options) {\n  ChunkStream.call(this);\n\n  this._parser = new Parser(options, {\n    read: this.read.bind(this),\n    error: this._handleError.bind(this),\n    metadata: this._handleMetaData.bind(this),\n    gamma: this.emit.bind(this, \"gamma\"),\n    palette: this._handlePalette.bind(this),\n    transColor: this._handleTransColor.bind(this),\n    finished: this._finished.bind(this),\n    inflateData: this._inflateData.bind(this),\n    simpleTransparency: this._simpleTransparency.bind(this),\n    headersFinished: this._headersFinished.bind(this),\n  });\n  this._options = options;\n  this.writable = true;\n\n  this._parser.start();\n});\nutil.inherits(ParserAsync, ChunkStream);\n\nParserAsync.prototype._handleError = function (err) {\n  this.emit(\"error\", err);\n\n  this.writable = false;\n\n  this.destroy();\n\n  if (this._inflate && this._inflate.destroy) {\n    this._inflate.destroy();\n  }\n\n  if (this._filter) {\n    this._filter.destroy();\n    // For backward compatibility with Node 7 and below.\n    // Suppress errors due to _inflate calling write() even after\n    // it's destroy()'ed.\n    this._filter.on(\"error\", function () {});\n  }\n\n  this.errord = true;\n};\n\nParserAsync.prototype._inflateData = function (data) {\n  if (!this._inflate) {\n    if (this._bitmapInfo.interlace) {\n      this._inflate = zlib.createInflate();\n\n      this._inflate.on(\"error\", this.emit.bind(this, \"error\"));\n      this._filter.on(\"complete\", this._complete.bind(this));\n\n      this._inflate.pipe(this._filter);\n    } else {\n      let rowSize =\n        ((this._bitmapInfo.width *\n          this._bitmapInfo.bpp *\n          this._bitmapInfo.depth +\n          7) >>\n          3) +\n        1;\n      let imageSize = rowSize * this._bitmapInfo.height;\n      let chunkSize = Math.max(imageSize, zlib.Z_MIN_CHUNK);\n\n      this._inflate = zlib.createInflate({ chunkSize: chunkSize });\n      let leftToInflate = imageSize;\n\n      let emitError = this.emit.bind(this, \"error\");\n      this._inflate.on(\"error\", function (err) {\n        if (!leftToInflate) {\n          return;\n        }\n\n        emitError(err);\n      });\n      this._filter.on(\"complete\", this._complete.bind(this));\n\n      let filterWrite = this._filter.write.bind(this._filter);\n      this._inflate.on(\"data\", function (chunk) {\n        if (!leftToInflate) {\n          return;\n        }\n\n        if (chunk.length > leftToInflate) {\n          chunk = chunk.slice(0, leftToInflate);\n        }\n\n        leftToInflate -= chunk.length;\n\n        filterWrite(chunk);\n      });\n\n      this._inflate.on(\"end\", this._filter.end.bind(this._filter));\n    }\n  }\n  this._inflate.write(data);\n};\n\nParserAsync.prototype._handleMetaData = function (metaData) {\n  this._metaData = metaData;\n  this._bitmapInfo = Object.create(metaData);\n\n  this._filter = new FilterAsync(this._bitmapInfo);\n};\n\nParserAsync.prototype._handleTransColor = function (transColor) {\n  this._bitmapInfo.transColor = transColor;\n};\n\nParserAsync.prototype._handlePalette = function (palette) {\n  this._bitmapInfo.palette = palette;\n};\n\nParserAsync.prototype._simpleTransparency = function () {\n  this._metaData.alpha = true;\n};\n\nParserAsync.prototype._headersFinished = function () {\n  // Up until this point, we don't know if we have a tRNS chunk (alpha)\n  // so we can't emit metadata any earlier\n  this.emit(\"metadata\", this._metaData);\n};\n\nParserAsync.prototype._finished = function () {\n  if (this.errord) {\n    return;\n  }\n\n  if (!this._inflate) {\n    this.emit(\"error\", \"No Inflate block\");\n  } else {\n    // no more data to inflate\n    this._inflate.end();\n  }\n};\n\nParserAsync.prototype._complete = function (filteredData) {\n  if (this.errord) {\n    return;\n  }\n\n  let normalisedBitmapData;\n\n  try {\n    let bitmapData = bitmapper.dataToBitMap(filteredData, this._bitmapInfo);\n\n    normalisedBitmapData = formatNormaliser(\n      bitmapData,\n      this._bitmapInfo,\n      this._options.skipRescale\n    );\n    bitmapData = null;\n  } catch (ex) {\n    this._handleError(ex);\n    return;\n  }\n\n  this.emit(\"parsed\", normalisedBitmapData);\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\n\nmodule.exports = function (dataIn, width, height, options) {\n  let outHasAlpha =\n    [constants.COLORTYPE_COLOR_ALPHA, constants.COLORTYPE_ALPHA].indexOf(\n      options.colorType\n    ) !== -1;\n  if (options.colorType === options.inputColorType) {\n    let bigEndian = (function () {\n      let buffer = new ArrayBuffer(2);\n      new DataView(buffer).setInt16(0, 256, true /* littleEndian */);\n      // Int16Array uses the platform's endianness.\n      return new Int16Array(buffer)[0] !== 256;\n    })();\n    // If no need to convert to grayscale and alpha is present/absent in both, take a fast route\n    if (options.bitDepth === 8 || (options.bitDepth === 16 && bigEndian)) {\n      return dataIn;\n    }\n  }\n\n  // map to a UInt16 array if data is 16bit, fix endianness below\n  let data = options.bitDepth !== 16 ? dataIn : new Uint16Array(dataIn.buffer);\n\n  let maxValue = 255;\n  let inBpp = constants.COLORTYPE_TO_BPP_MAP[options.inputColorType];\n  if (inBpp === 4 && !options.inputHasAlpha) {\n    inBpp = 3;\n  }\n  let outBpp = constants.COLORTYPE_TO_BPP_MAP[options.colorType];\n  if (options.bitDepth === 16) {\n    maxValue = 65535;\n    outBpp *= 2;\n  }\n  let outData = Buffer.alloc(width * height * outBpp);\n\n  let inIndex = 0;\n  let outIndex = 0;\n\n  let bgColor = options.bgColor || {};\n  if (bgColor.red === undefined) {\n    bgColor.red = maxValue;\n  }\n  if (bgColor.green === undefined) {\n    bgColor.green = maxValue;\n  }\n  if (bgColor.blue === undefined) {\n    bgColor.blue = maxValue;\n  }\n\n  function getRGBA() {\n    let red;\n    let green;\n    let blue;\n    let alpha = maxValue;\n    switch (options.inputColorType) {\n      case constants.COLORTYPE_COLOR_ALPHA:\n        alpha = data[inIndex + 3];\n        red = data[inIndex];\n        green = data[inIndex + 1];\n        blue = data[inIndex + 2];\n        break;\n      case constants.COLORTYPE_COLOR:\n        red = data[inIndex];\n        green = data[inIndex + 1];\n        blue = data[inIndex + 2];\n        break;\n      case constants.COLORTYPE_ALPHA:\n        alpha = data[inIndex + 1];\n        red = data[inIndex];\n        green = red;\n        blue = red;\n        break;\n      case constants.COLORTYPE_GRAYSCALE:\n        red = data[inIndex];\n        green = red;\n        blue = red;\n        break;\n      default:\n        throw new Error(\n          \"input color type:\" +\n            options.inputColorType +\n            \" is not supported at present\"\n        );\n    }\n\n    if (options.inputHasAlpha) {\n      if (!outHasAlpha) {\n        alpha /= maxValue;\n        red = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.red + alpha * red), 0),\n          maxValue\n        );\n        green = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.green + alpha * green), 0),\n          maxValue\n        );\n        blue = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.blue + alpha * blue), 0),\n          maxValue\n        );\n      }\n    }\n    return { red: red, green: green, blue: blue, alpha: alpha };\n  }\n\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let rgba = getRGBA(data, inIndex);\n\n      switch (options.colorType) {\n        case constants.COLORTYPE_COLOR_ALPHA:\n        case constants.COLORTYPE_COLOR:\n          if (options.bitDepth === 8) {\n            outData[outIndex] = rgba.red;\n            outData[outIndex + 1] = rgba.green;\n            outData[outIndex + 2] = rgba.blue;\n            if (outHasAlpha) {\n              outData[outIndex + 3] = rgba.alpha;\n            }\n          } else {\n            outData.writeUInt16BE(rgba.red, outIndex);\n            outData.writeUInt16BE(rgba.green, outIndex + 2);\n            outData.writeUInt16BE(rgba.blue, outIndex + 4);\n            if (outHasAlpha) {\n              outData.writeUInt16BE(rgba.alpha, outIndex + 6);\n            }\n          }\n          break;\n        case constants.COLORTYPE_ALPHA:\n        case constants.COLORTYPE_GRAYSCALE: {\n          // Convert to grayscale and alpha\n          let grayscale = (rgba.red + rgba.green + rgba.blue) / 3;\n          if (options.bitDepth === 8) {\n            outData[outIndex] = grayscale;\n            if (outHasAlpha) {\n              outData[outIndex + 1] = rgba.alpha;\n            }\n          } else {\n            outData.writeUInt16BE(grayscale, outIndex);\n            if (outHasAlpha) {\n              outData.writeUInt16BE(rgba.alpha, outIndex + 2);\n            }\n          }\n          break;\n        }\n        default:\n          throw new Error(\"unrecognised color Type \" + options.colorType);\n      }\n\n      inIndex += inBpp;\n      outIndex += outBpp;\n    }\n  }\n\n  return outData;\n};\n","\"use strict\";\n\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction filterNone(pxData, pxPos, byteWidth, rawData, rawPos) {\n  for (let x = 0; x < byteWidth; x++) {\n    rawData[rawPos + x] = pxData[pxPos + x];\n  }\n}\n\nfunction filterSumNone(pxData, pxPos, byteWidth) {\n  let sum = 0;\n  let length = pxPos + byteWidth;\n\n  for (let i = pxPos; i < length; i++) {\n    sum += Math.abs(pxData[i]);\n  }\n  return sum;\n}\n\nfunction filterSub(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let val = pxData[pxPos + x] - left;\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumSub(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let val = pxData[pxPos + x] - left;\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterUp(pxData, pxPos, byteWidth, rawData, rawPos) {\n  for (let x = 0; x < byteWidth; x++) {\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - up;\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumUp(pxData, pxPos, byteWidth) {\n  let sum = 0;\n  let length = pxPos + byteWidth;\n  for (let x = pxPos; x < length; x++) {\n    let up = pxPos > 0 ? pxData[x - byteWidth] : 0;\n    let val = pxData[x] - up;\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterAvg(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumAvg(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterPaeth(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let upleft =\n      pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n    let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumPaeth(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let upleft =\n      pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n    let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nlet filters = {\n  0: filterNone,\n  1: filterSub,\n  2: filterUp,\n  3: filterAvg,\n  4: filterPaeth,\n};\n\nlet filterSums = {\n  0: filterSumNone,\n  1: filterSumSub,\n  2: filterSumUp,\n  3: filterSumAvg,\n  4: filterSumPaeth,\n};\n\nmodule.exports = function (pxData, width, height, options, bpp) {\n  let filterTypes;\n  if (!(\"filterType\" in options) || options.filterType === -1) {\n    filterTypes = [0, 1, 2, 3, 4];\n  } else if (typeof options.filterType === \"number\") {\n    filterTypes = [options.filterType];\n  } else {\n    throw new Error(\"unrecognised filter types\");\n  }\n\n  if (options.bitDepth === 16) {\n    bpp *= 2;\n  }\n  let byteWidth = width * bpp;\n  let rawPos = 0;\n  let pxPos = 0;\n  let rawData = Buffer.alloc((byteWidth + 1) * height);\n\n  let sel = filterTypes[0];\n\n  for (let y = 0; y < height; y++) {\n    if (filterTypes.length > 1) {\n      // find best filter for this line (with lowest sum of values)\n      let min = Infinity;\n\n      for (let i = 0; i < filterTypes.length; i++) {\n        let sum = filterSums[filterTypes[i]](pxData, pxPos, byteWidth, bpp);\n        if (sum < min) {\n          sel = filterTypes[i];\n          min = sum;\n        }\n      }\n    }\n\n    rawData[rawPos] = sel;\n    rawPos++;\n    filters[sel](pxData, pxPos, byteWidth, rawData, rawPos, bpp);\n    rawPos += byteWidth;\n    pxPos += byteWidth;\n  }\n  return rawData;\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcStream = require(\"./crc\");\nlet bitPacker = require(\"./bitpacker\");\nlet filter = require(\"./filter-pack\");\nlet zlib = require(\"zlib\");\n\nlet Packer = (module.exports = function (options) {\n  this._options = options;\n\n  options.deflateChunkSize = options.deflateChunkSize || 32 * 1024;\n  options.deflateLevel =\n    options.deflateLevel != null ? options.deflateLevel : 9;\n  options.deflateStrategy =\n    options.deflateStrategy != null ? options.deflateStrategy : 3;\n  options.inputHasAlpha =\n    options.inputHasAlpha != null ? options.inputHasAlpha : true;\n  options.deflateFactory = options.deflateFactory || zlib.createDeflate;\n  options.bitDepth = options.bitDepth || 8;\n  // This is outputColorType\n  options.colorType =\n    typeof options.colorType === \"number\"\n      ? options.colorType\n      : constants.COLORTYPE_COLOR_ALPHA;\n  options.inputColorType =\n    typeof options.inputColorType === \"number\"\n      ? options.inputColorType\n      : constants.COLORTYPE_COLOR_ALPHA;\n\n  if (\n    [\n      constants.COLORTYPE_GRAYSCALE,\n      constants.COLORTYPE_COLOR,\n      constants.COLORTYPE_COLOR_ALPHA,\n      constants.COLORTYPE_ALPHA,\n    ].indexOf(options.colorType) === -1\n  ) {\n    throw new Error(\n      \"option color type:\" + options.colorType + \" is not supported at present\"\n    );\n  }\n  if (\n    [\n      constants.COLORTYPE_GRAYSCALE,\n      constants.COLORTYPE_COLOR,\n      constants.COLORTYPE_COLOR_ALPHA,\n      constants.COLORTYPE_ALPHA,\n    ].indexOf(options.inputColorType) === -1\n  ) {\n    throw new Error(\n      \"option input color type:\" +\n        options.inputColorType +\n        \" is not supported at present\"\n    );\n  }\n  if (options.bitDepth !== 8 && options.bitDepth !== 16) {\n    throw new Error(\n      \"option bit depth:\" + options.bitDepth + \" is not supported at present\"\n    );\n  }\n});\n\nPacker.prototype.getDeflateOptions = function () {\n  return {\n    chunkSize: this._options.deflateChunkSize,\n    level: this._options.deflateLevel,\n    strategy: this._options.deflateStrategy,\n  };\n};\n\nPacker.prototype.createDeflate = function () {\n  return this._options.deflateFactory(this.getDeflateOptions());\n};\n\nPacker.prototype.filterData = function (data, width, height) {\n  // convert to correct format for filtering (e.g. right bpp and bit depth)\n  let packedData = bitPacker(data, width, height, this._options);\n\n  // filter pixel data\n  let bpp = constants.COLORTYPE_TO_BPP_MAP[this._options.colorType];\n  let filteredData = filter(packedData, width, height, this._options, bpp);\n  return filteredData;\n};\n\nPacker.prototype._packChunk = function (type, data) {\n  let len = data ? data.length : 0;\n  let buf = Buffer.alloc(len + 12);\n\n  buf.writeUInt32BE(len, 0);\n  buf.writeUInt32BE(type, 4);\n\n  if (data) {\n    data.copy(buf, 8);\n  }\n\n  buf.writeInt32BE(\n    CrcStream.crc32(buf.slice(4, buf.length - 4)),\n    buf.length - 4\n  );\n  return buf;\n};\n\nPacker.prototype.packGAMA = function (gamma) {\n  let buf = Buffer.alloc(4);\n  buf.writeUInt32BE(Math.floor(gamma * constants.GAMMA_DIVISION), 0);\n  return this._packChunk(constants.TYPE_gAMA, buf);\n};\n\nPacker.prototype.packIHDR = function (width, height) {\n  let buf = Buffer.alloc(13);\n  buf.writeUInt32BE(width, 0);\n  buf.writeUInt32BE(height, 4);\n  buf[8] = this._options.bitDepth; // Bit depth\n  buf[9] = this._options.colorType; // colorType\n  buf[10] = 0; // compression\n  buf[11] = 0; // filter\n  buf[12] = 0; // interlace\n\n  return this._packChunk(constants.TYPE_IHDR, buf);\n};\n\nPacker.prototype.packIDAT = function (data) {\n  return this._packChunk(constants.TYPE_IDAT, data);\n};\n\nPacker.prototype.packIEND = function () {\n  return this._packChunk(constants.TYPE_IEND, null);\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nlet PackerAsync = (module.exports = function (opt) {\n  Stream.call(this);\n\n  let options = opt || {};\n\n  this._packer = new Packer(options);\n  this._deflate = this._packer.createDeflate();\n\n  this.readable = true;\n});\nutil.inherits(PackerAsync, Stream);\n\nPackerAsync.prototype.pack = function (data, width, height, gamma) {\n  // Signature\n  this.emit(\"data\", Buffer.from(constants.PNG_SIGNATURE));\n  this.emit(\"data\", this._packer.packIHDR(width, height));\n\n  if (gamma) {\n    this.emit(\"data\", this._packer.packGAMA(gamma));\n  }\n\n  let filteredData = this._packer.filterData(data, width, height);\n\n  // compress it\n  this._deflate.on(\"error\", this.emit.bind(this, \"error\"));\n\n  this._deflate.on(\n    \"data\",\n    function (compressedData) {\n      this.emit(\"data\", this._packer.packIDAT(compressedData));\n    }.bind(this)\n  );\n\n  this._deflate.on(\n    \"end\",\n    function () {\n      this.emit(\"data\", this._packer.packIEND());\n      this.emit(\"end\");\n    }.bind(this)\n  );\n\n  this._deflate.end(filteredData);\n};\n","\"use strict\";\n\nlet assert = require(\"assert\").ok;\nlet zlib = require(\"zlib\");\nlet util = require(\"util\");\n\nlet kMaxLength = require(\"buffer\").kMaxLength;\n\nfunction Inflate(opts) {\n  if (!(this instanceof Inflate)) {\n    return new Inflate(opts);\n  }\n\n  if (opts && opts.chunkSize < zlib.Z_MIN_CHUNK) {\n    opts.chunkSize = zlib.Z_MIN_CHUNK;\n  }\n\n  zlib.Inflate.call(this, opts);\n\n  // Node 8 --> 9 compatibility check\n  this._offset = this._offset === undefined ? this._outOffset : this._offset;\n  this._buffer = this._buffer || this._outBuffer;\n\n  if (opts && opts.maxLength != null) {\n    this._maxLength = opts.maxLength;\n  }\n}\n\nfunction createInflate(opts) {\n  return new Inflate(opts);\n}\n\nfunction _close(engine, callback) {\n  if (callback) {\n    process.nextTick(callback);\n  }\n\n  // Caller may invoke .close after a zlib error (which will null _handle).\n  if (!engine._handle) {\n    return;\n  }\n\n  engine._handle.close();\n  engine._handle = null;\n}\n\nInflate.prototype._processChunk = function (chunk, flushFlag, asyncCb) {\n  if (typeof asyncCb === \"function\") {\n    return zlib.Inflate._processChunk.call(this, chunk, flushFlag, asyncCb);\n  }\n\n  let self = this;\n\n  let availInBefore = chunk && chunk.length;\n  let availOutBefore = this._chunkSize - this._offset;\n  let leftToInflate = this._maxLength;\n  let inOff = 0;\n\n  let buffers = [];\n  let nread = 0;\n\n  let error;\n  this.on(\"error\", function (err) {\n    error = err;\n  });\n\n  function handleChunk(availInAfter, availOutAfter) {\n    if (self._hadError) {\n      return;\n    }\n\n    let have = availOutBefore - availOutAfter;\n    assert(have >= 0, \"have should not go down\");\n\n    if (have > 0) {\n      let out = self._buffer.slice(self._offset, self._offset + have);\n      self._offset += have;\n\n      if (out.length > leftToInflate) {\n        out = out.slice(0, leftToInflate);\n      }\n\n      buffers.push(out);\n      nread += out.length;\n      leftToInflate -= out.length;\n\n      if (leftToInflate === 0) {\n        return false;\n      }\n    }\n\n    if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n      availOutBefore = self._chunkSize;\n      self._offset = 0;\n      self._buffer = Buffer.allocUnsafe(self._chunkSize);\n    }\n\n    if (availOutAfter === 0) {\n      inOff += availInBefore - availInAfter;\n      availInBefore = availInAfter;\n\n      return true;\n    }\n\n    return false;\n  }\n\n  assert(this._handle, \"zlib binding closed\");\n  let res;\n  do {\n    res = this._handle.writeSync(\n      flushFlag,\n      chunk, // in\n      inOff, // in_off\n      availInBefore, // in_len\n      this._buffer, // out\n      this._offset, //out_off\n      availOutBefore\n    ); // out_len\n    // Node 8 --> 9 compatibility check\n    res = res || this._writeState;\n  } while (!this._hadError && handleChunk(res[0], res[1]));\n\n  if (this._hadError) {\n    throw error;\n  }\n\n  if (nread >= kMaxLength) {\n    _close(this);\n    throw new RangeError(\n      \"Cannot create final Buffer. It would be larger than 0x\" +\n        kMaxLength.toString(16) +\n        \" bytes\"\n    );\n  }\n\n  let buf = Buffer.concat(buffers, nread);\n  _close(this);\n\n  return buf;\n};\n\nutil.inherits(Inflate, zlib.Inflate);\n\nfunction zlibBufferSync(engine, buffer) {\n  if (typeof buffer === \"string\") {\n    buffer = Buffer.from(buffer);\n  }\n  if (!(buffer instanceof Buffer)) {\n    throw new TypeError(\"Not a string or buffer\");\n  }\n\n  let flushFlag = engine._finishFlushFlag;\n  if (flushFlag == null) {\n    flushFlag = zlib.Z_FINISH;\n  }\n\n  return engine._processChunk(buffer, flushFlag);\n}\n\nfunction inflateSync(buffer, opts) {\n  return zlibBufferSync(new Inflate(opts), buffer);\n}\n\nmodule.exports = exports = inflateSync;\nexports.Inflate = Inflate;\nexports.createInflate = createInflate;\nexports.inflateSync = inflateSync;\n","\"use strict\";\n\nlet SyncReader = (module.exports = function (buffer) {\n  this._buffer = buffer;\n  this._reads = [];\n});\n\nSyncReader.prototype.read = function (length, callback) {\n  this._reads.push({\n    length: Math.abs(length), // if length < 0 then at most this length\n    allowLess: length < 0,\n    func: callback,\n  });\n};\n\nSyncReader.prototype.process = function () {\n  // as long as there is any data and read requests\n  while (this._reads.length > 0 && this._buffer.length) {\n    let read = this._reads[0];\n\n    if (\n      this._buffer.length &&\n      (this._buffer.length >= read.length || read.allowLess)\n    ) {\n      // ok there is any data so that we can satisfy this request\n      this._reads.shift(); // == read\n\n      let buf = this._buffer;\n\n      this._buffer = buf.slice(read.length);\n\n      read.func.call(this, buf.slice(0, read.length));\n    } else {\n      break;\n    }\n  }\n\n  if (this._reads.length > 0) {\n    throw new Error(\"There are some read requests waitng on finished stream\");\n  }\n\n  if (this._buffer.length > 0) {\n    throw new Error(\"unrecognised content at end of stream\");\n  }\n};\n","\"use strict\";\n\nlet SyncReader = require(\"./sync-reader\");\nlet Filter = require(\"./filter-parse\");\n\nexports.process = function (inBuffer, bitmapInfo) {\n  let outBuffers = [];\n  let reader = new SyncReader(inBuffer);\n  let filter = new Filter(bitmapInfo, {\n    read: reader.read.bind(reader),\n    write: function (bufferPart) {\n      outBuffers.push(bufferPart);\n    },\n    complete: function () {},\n  });\n\n  filter.start();\n  reader.process();\n\n  return Buffer.concat(outBuffers);\n};\n","\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nlet inflateSync = require(\"./sync-inflate\");\nif (!zlib.deflateSync) {\n  hasSyncZlib = false;\n}\nlet SyncReader = require(\"./sync-reader\");\nlet FilterSync = require(\"./filter-parse-sync\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nmodule.exports = function (buffer, options) {\n  if (!hasSyncZlib) {\n    throw new Error(\n      \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n    );\n  }\n\n  let err;\n  function handleError(_err_) {\n    err = _err_;\n  }\n\n  let metaData;\n  function handleMetaData(_metaData_) {\n    metaData = _metaData_;\n  }\n\n  function handleTransColor(transColor) {\n    metaData.transColor = transColor;\n  }\n\n  function handlePalette(palette) {\n    metaData.palette = palette;\n  }\n\n  function handleSimpleTransparency() {\n    metaData.alpha = true;\n  }\n\n  let gamma;\n  function handleGamma(_gamma_) {\n    gamma = _gamma_;\n  }\n\n  let inflateDataList = [];\n  function handleInflateData(inflatedData) {\n    inflateDataList.push(inflatedData);\n  }\n\n  let reader = new SyncReader(buffer);\n\n  let parser = new Parser(options, {\n    read: reader.read.bind(reader),\n    error: handleError,\n    metadata: handleMetaData,\n    gamma: handleGamma,\n    palette: handlePalette,\n    transColor: handleTransColor,\n    inflateData: handleInflateData,\n    simpleTransparency: handleSimpleTransparency,\n  });\n\n  parser.start();\n  reader.process();\n\n  if (err) {\n    throw err;\n  }\n\n  //join together the inflate datas\n  let inflateData = Buffer.concat(inflateDataList);\n  inflateDataList.length = 0;\n\n  let inflatedData;\n  if (metaData.interlace) {\n    inflatedData = zlib.inflateSync(inflateData);\n  } else {\n    let rowSize =\n      ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;\n    let imageSize = rowSize * metaData.height;\n    inflatedData = inflateSync(inflateData, {\n      chunkSize: imageSize,\n      maxLength: imageSize,\n    });\n  }\n  inflateData = null;\n\n  if (!inflatedData || !inflatedData.length) {\n    throw new Error(\"bad png - invalid inflate data response\");\n  }\n\n  let unfilteredData = FilterSync.process(inflatedData, metaData);\n  inflateData = null;\n\n  let bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);\n  unfilteredData = null;\n\n  let normalisedBitmapData = formatNormaliser(\n    bitmapData,\n    metaData,\n    options.skipRescale\n  );\n\n  metaData.data = normalisedBitmapData;\n  metaData.gamma = gamma || 0;\n\n  return metaData;\n};\n","\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nif (!zlib.deflateSync) {\n  hasSyncZlib = false;\n}\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nmodule.exports = function (metaData, opt) {\n  if (!hasSyncZlib) {\n    throw new Error(\n      \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n    );\n  }\n\n  let options = opt || {};\n\n  let packer = new Packer(options);\n\n  let chunks = [];\n\n  // Signature\n  chunks.push(Buffer.from(constants.PNG_SIGNATURE));\n\n  // Header\n  chunks.push(packer.packIHDR(metaData.width, metaData.height));\n\n  if (metaData.gamma) {\n    chunks.push(packer.packGAMA(metaData.gamma));\n  }\n\n  let filteredData = packer.filterData(\n    metaData.data,\n    metaData.width,\n    metaData.height\n  );\n\n  // compress it\n  let compressedData = zlib.deflateSync(\n    filteredData,\n    packer.getDeflateOptions()\n  );\n  filteredData = null;\n\n  if (!compressedData || !compressedData.length) {\n    throw new Error(\"bad png - invalid compressed data response\");\n  }\n  chunks.push(packer.packIDAT(compressedData));\n\n  // End\n  chunks.push(packer.packIEND());\n\n  return Buffer.concat(chunks);\n};\n","\"use strict\";\n\nlet parse = require(\"./parser-sync\");\nlet pack = require(\"./packer-sync\");\n\nexports.read = function (buffer, options) {\n  return parse(buffer, options || {});\n};\n\nexports.write = function (png, options) {\n  return pack(png, options);\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet Parser = require(\"./parser-async\");\nlet Packer = require(\"./packer-async\");\nlet PNGSync = require(\"./png-sync\");\n\nlet PNG = (exports.PNG = function (options) {\n  Stream.call(this);\n\n  options = options || {}; // eslint-disable-line no-param-reassign\n\n  // coerce pixel dimensions to integers (also coerces undefined -> 0):\n  this.width = options.width | 0;\n  this.height = options.height | 0;\n\n  this.data =\n    this.width > 0 && this.height > 0\n      ? Buffer.alloc(4 * this.width * this.height)\n      : null;\n\n  if (options.fill && this.data) {\n    this.data.fill(0);\n  }\n\n  this.gamma = 0;\n  this.readable = this.writable = true;\n\n  this._parser = new Parser(options);\n\n  this._parser.on(\"error\", this.emit.bind(this, \"error\"));\n  this._parser.on(\"close\", this._handleClose.bind(this));\n  this._parser.on(\"metadata\", this._metadata.bind(this));\n  this._parser.on(\"gamma\", this._gamma.bind(this));\n  this._parser.on(\n    \"parsed\",\n    function (data) {\n      this.data = data;\n      this.emit(\"parsed\", data);\n    }.bind(this)\n  );\n\n  this._packer = new Packer(options);\n  this._packer.on(\"data\", this.emit.bind(this, \"data\"));\n  this._packer.on(\"end\", this.emit.bind(this, \"end\"));\n  this._parser.on(\"close\", this._handleClose.bind(this));\n  this._packer.on(\"error\", this.emit.bind(this, \"error\"));\n});\nutil.inherits(PNG, Stream);\n\nPNG.sync = PNGSync;\n\nPNG.prototype.pack = function () {\n  if (!this.data || !this.data.length) {\n    this.emit(\"error\", \"No data provided\");\n    return this;\n  }\n\n  process.nextTick(\n    function () {\n      this._packer.pack(this.data, this.width, this.height, this.gamma);\n    }.bind(this)\n  );\n\n  return this;\n};\n\nPNG.prototype.parse = function (data, callback) {\n  if (callback) {\n    let onParsed, onError;\n\n    onParsed = function (parsedData) {\n      this.removeListener(\"error\", onError);\n\n      this.data = parsedData;\n      callback(null, this);\n    }.bind(this);\n\n    onError = function (err) {\n      this.removeListener(\"parsed\", onParsed);\n\n      callback(err, null);\n    }.bind(this);\n\n    this.once(\"parsed\", onParsed);\n    this.once(\"error\", onError);\n  }\n\n  this.end(data);\n  return this;\n};\n\nPNG.prototype.write = function (data) {\n  this._parser.write(data);\n  return true;\n};\n\nPNG.prototype.end = function (data) {\n  this._parser.end(data);\n};\n\nPNG.prototype._metadata = function (metadata) {\n  this.width = metadata.width;\n  this.height = metadata.height;\n\n  this.emit(\"metadata\", metadata);\n};\n\nPNG.prototype._gamma = function (gamma) {\n  this.gamma = gamma;\n};\n\nPNG.prototype._handleClose = function () {\n  if (!this._parser.writable && !this._packer.readable) {\n    this.emit(\"close\");\n  }\n};\n\nPNG.bitblt = function (src, dst, srcX, srcY, width, height, deltaX, deltaY) {\n  // eslint-disable-line max-params\n  // coerce pixel dimensions to integers (also coerces undefined -> 0):\n  /* eslint-disable no-param-reassign */\n  srcX |= 0;\n  srcY |= 0;\n  width |= 0;\n  height |= 0;\n  deltaX |= 0;\n  deltaY |= 0;\n  /* eslint-enable no-param-reassign */\n\n  if (\n    srcX > src.width ||\n    srcY > src.height ||\n    srcX + width > src.width ||\n    srcY + height > src.height\n  ) {\n    throw new Error(\"bitblt reading outside image\");\n  }\n\n  if (\n    deltaX > dst.width ||\n    deltaY > dst.height ||\n    deltaX + width > dst.width ||\n    deltaY + height > dst.height\n  ) {\n    throw new Error(\"bitblt writing outside image\");\n  }\n\n  for (let y = 0; y < height; y++) {\n    src.data.copy(\n      dst.data,\n      ((deltaY + y) * dst.width + deltaX) << 2,\n      ((srcY + y) * src.width + srcX) << 2,\n      ((srcY + y) * src.width + srcX + width) << 2\n    );\n  }\n};\n\nPNG.prototype.bitblt = function (\n  dst,\n  srcX,\n  srcY,\n  width,\n  height,\n  deltaX,\n  deltaY\n) {\n  // eslint-disable-line max-params\n\n  PNG.bitblt(this, dst, srcX, srcY, width, height, deltaX, deltaY);\n  return this;\n};\n\nPNG.adjustGamma = function (src) {\n  if (src.gamma) {\n    for (let y = 0; y < src.height; y++) {\n      for (let x = 0; x < src.width; x++) {\n        let idx = (src.width * y + x) << 2;\n\n        for (let i = 0; i < 3; i++) {\n          let sample = src.data[idx + i] / 255;\n          sample = Math.pow(sample, 1 / 2.2 / src.gamma);\n          src.data[idx + i] = Math.round(sample * 255);\n        }\n      }\n    }\n    src.gamma = 0;\n  }\n};\n\nPNG.prototype.adjustGamma = function () {\n  PNG.adjustGamma(this);\n};\n","// @ts-check\n\n/**\n * CommanderError class\n * @class\n */\nclass CommanderError extends Error {\n  /**\n   * Constructs the CommanderError class\n   * @param {number} exitCode suggested exit code which could be used with process.exit\n   * @param {string} code an id string representing the error\n   * @param {string} message human-readable description of the error\n   * @constructor\n   */\n  constructor(exitCode, code, message) {\n    super(message);\n    // properly capture stack trace in Node.js\n    Error.captureStackTrace(this, this.constructor);\n    this.name = this.constructor.name;\n    this.code = code;\n    this.exitCode = exitCode;\n    this.nestedError = undefined;\n  }\n}\n\n/**\n * InvalidArgumentError class\n * @class\n */\nclass InvalidArgumentError extends CommanderError {\n  /**\n   * Constructs the InvalidArgumentError class\n   * @param {string} [message] explanation of why argument is invalid\n   * @constructor\n   */\n  constructor(message) {\n    super(1, 'commander.invalidArgument', message);\n    // properly capture stack trace in Node.js\n    Error.captureStackTrace(this, this.constructor);\n    this.name = this.constructor.name;\n  }\n}\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\n","const { InvalidArgumentError } = require('./error.js');\n\n// @ts-check\n\nclass Argument {\n  /**\n   * Initialize a new command argument with the given name and description.\n   * The default is that the argument is required, and you can explicitly\n   * indicate this with <> around the name. Put [] around the name for an optional argument.\n   *\n   * @param {string} name\n   * @param {string} [description]\n   */\n\n  constructor(name, description) {\n    this.description = description || '';\n    this.variadic = false;\n    this.parseArg = undefined;\n    this.defaultValue = undefined;\n    this.defaultValueDescription = undefined;\n    this.argChoices = undefined;\n\n    switch (name[0]) {\n      case '<': // e.g. <required>\n        this.required = true;\n        this._name = name.slice(1, -1);\n        break;\n      case '[': // e.g. [optional]\n        this.required = false;\n        this._name = name.slice(1, -1);\n        break;\n      default:\n        this.required = true;\n        this._name = name;\n        break;\n    }\n\n    if (this._name.length > 3 && this._name.slice(-3) === '...') {\n      this.variadic = true;\n      this._name = this._name.slice(0, -3);\n    }\n  }\n\n  /**\n   * Return argument name.\n   *\n   * @return {string}\n   */\n\n  name() {\n    return this._name;\n  };\n\n  /**\n   * @api private\n   */\n\n  _concatValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    return previous.concat(value);\n  }\n\n  /**\n   * Set the default value, and optionally supply the description to be displayed in the help.\n   *\n   * @param {any} value\n   * @param {string} [description]\n   * @return {Argument}\n   */\n\n  default(value, description) {\n    this.defaultValue = value;\n    this.defaultValueDescription = description;\n    return this;\n  };\n\n  /**\n   * Set the custom handler for processing CLI command arguments into argument values.\n   *\n   * @param {Function} [fn]\n   * @return {Argument}\n   */\n\n  argParser(fn) {\n    this.parseArg = fn;\n    return this;\n  };\n\n  /**\n   * Only allow option value to be one of choices.\n   *\n   * @param {string[]} values\n   * @return {Argument}\n   */\n\n  choices(values) {\n    this.argChoices = values;\n    this.parseArg = (arg, previous) => {\n      if (!values.includes(arg)) {\n        throw new InvalidArgumentError(`Allowed choices are ${values.join(', ')}.`);\n      }\n      if (this.variadic) {\n        return this._concatValue(arg, previous);\n      }\n      return arg;\n    };\n    return this;\n  };\n\n  /**\n   * Make option-argument required.\n   */\n  argRequired() {\n    this.required = true;\n    return this;\n  }\n\n  /**\n   * Make option-argument optional.\n   */\n  argOptional() {\n    this.required = false;\n    return this;\n  }\n}\n\n/**\n * Takes an argument and returns its human readable equivalent for help usage.\n *\n * @param {Argument} arg\n * @return {string}\n * @api private\n */\n\nfunction humanReadableArgName(arg) {\n  const nameOutput = arg.name() + (arg.variadic === true ? '...' : '');\n\n  return arg.required\n    ? '<' + nameOutput + '>'\n    : '[' + nameOutput + ']';\n}\n\nexports.Argument = Argument;\nexports.humanReadableArgName = humanReadableArgName;\n","const { humanReadableArgName } = require('./argument.js');\n\n/**\n * TypeScript import types for JSDoc, used by Visual Studio Code IntelliSense and `npm run typescript-checkJS`\n * https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#import-types\n * @typedef { import(\"./argument.js\").Argument } Argument\n * @typedef { import(\"./command.js\").Command } Command\n * @typedef { import(\"./option.js\").Option } Option\n */\n\n// @ts-check\n\n// Although this is a class, methods are static in style to allow override using subclass or just functions.\nclass Help {\n  constructor() {\n    this.helpWidth = undefined;\n    this.sortSubcommands = false;\n    this.sortOptions = false;\n  }\n\n  /**\n   * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n   *\n   * @param {Command} cmd\n   * @returns {Command[]}\n   */\n\n  visibleCommands(cmd) {\n    const visibleCommands = cmd.commands.filter(cmd => !cmd._hidden);\n    if (cmd._hasImplicitHelpCommand()) {\n      // Create a command matching the implicit help command.\n      const [, helpName, helpArgs] = cmd._helpCommandnameAndArgs.match(/([^ ]+) *(.*)/);\n      const helpCommand = cmd.createCommand(helpName)\n        .helpOption(false);\n      helpCommand.description(cmd._helpCommandDescription);\n      if (helpArgs) helpCommand.arguments(helpArgs);\n      visibleCommands.push(helpCommand);\n    }\n    if (this.sortSubcommands) {\n      visibleCommands.sort((a, b) => {\n        // @ts-ignore: overloaded return type\n        return a.name().localeCompare(b.name());\n      });\n    }\n    return visibleCommands;\n  }\n\n  /**\n   * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n   *\n   * @param {Command} cmd\n   * @returns {Option[]}\n   */\n\n  visibleOptions(cmd) {\n    const visibleOptions = cmd.options.filter((option) => !option.hidden);\n    // Implicit help\n    const showShortHelpFlag = cmd._hasHelpOption && cmd._helpShortFlag && !cmd._findOption(cmd._helpShortFlag);\n    const showLongHelpFlag = cmd._hasHelpOption && !cmd._findOption(cmd._helpLongFlag);\n    if (showShortHelpFlag || showLongHelpFlag) {\n      let helpOption;\n      if (!showShortHelpFlag) {\n        helpOption = cmd.createOption(cmd._helpLongFlag, cmd._helpDescription);\n      } else if (!showLongHelpFlag) {\n        helpOption = cmd.createOption(cmd._helpShortFlag, cmd._helpDescription);\n      } else {\n        helpOption = cmd.createOption(cmd._helpFlags, cmd._helpDescription);\n      }\n      visibleOptions.push(helpOption);\n    }\n    if (this.sortOptions) {\n      const getSortKey = (option) => {\n        // WYSIWYG for order displayed in help with short before long, no special handling for negated.\n        return option.short ? option.short.replace(/^-/, '') : option.long.replace(/^--/, '');\n      };\n      visibleOptions.sort((a, b) => {\n        return getSortKey(a).localeCompare(getSortKey(b));\n      });\n    }\n    return visibleOptions;\n  }\n\n  /**\n   * Get an array of the arguments if any have a description.\n   *\n   * @param {Command} cmd\n   * @returns {Argument[]}\n   */\n\n  visibleArguments(cmd) {\n    // Side effect! Apply the legacy descriptions before the arguments are displayed.\n    if (cmd._argsDescription) {\n      cmd._args.forEach(argument => {\n        argument.description = argument.description || cmd._argsDescription[argument.name()] || '';\n      });\n    }\n\n    // If there are any arguments with a description then return all the arguments.\n    if (cmd._args.find(argument => argument.description)) {\n      return cmd._args;\n    };\n    return [];\n  }\n\n  /**\n   * Get the command term to show in the list of subcommands.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  subcommandTerm(cmd) {\n    // Legacy. Ignores custom usage string, and nested commands.\n    const args = cmd._args.map(arg => humanReadableArgName(arg)).join(' ');\n    return cmd._name +\n      (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +\n      (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option\n      (args ? ' ' + args : '');\n  }\n\n  /**\n   * Get the option term to show in the list of options.\n   *\n   * @param {Option} option\n   * @returns {string}\n   */\n\n  optionTerm(option) {\n    return option.flags;\n  }\n\n  /**\n   * Get the argument term to show in the list of arguments.\n   *\n   * @param {Argument} argument\n   * @returns {string}\n   */\n\n  argumentTerm(argument) {\n    return argument.name();\n  }\n\n  /**\n   * Get the longest command term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestSubcommandTermLength(cmd, helper) {\n    return helper.visibleCommands(cmd).reduce((max, command) => {\n      return Math.max(max, helper.subcommandTerm(command).length);\n    }, 0);\n  };\n\n  /**\n   * Get the longest option term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestOptionTermLength(cmd, helper) {\n    return helper.visibleOptions(cmd).reduce((max, option) => {\n      return Math.max(max, helper.optionTerm(option).length);\n    }, 0);\n  };\n\n  /**\n   * Get the longest argument term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestArgumentTermLength(cmd, helper) {\n    return helper.visibleArguments(cmd).reduce((max, argument) => {\n      return Math.max(max, helper.argumentTerm(argument).length);\n    }, 0);\n  };\n\n  /**\n   * Get the command usage to be displayed at the top of the built-in help.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  commandUsage(cmd) {\n    // Usage\n    let cmdName = cmd._name;\n    if (cmd._aliases[0]) {\n      cmdName = cmdName + '|' + cmd._aliases[0];\n    }\n    let parentCmdNames = '';\n    for (let parentCmd = cmd.parent; parentCmd; parentCmd = parentCmd.parent) {\n      parentCmdNames = parentCmd.name() + ' ' + parentCmdNames;\n    }\n    return parentCmdNames + cmdName + ' ' + cmd.usage();\n  }\n\n  /**\n   * Get the description for the command.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  commandDescription(cmd) {\n    // @ts-ignore: overloaded return type\n    return cmd.description();\n  }\n\n  /**\n   * Get the command description to show in the list of subcommands.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  subcommandDescription(cmd) {\n    // @ts-ignore: overloaded return type\n    return cmd.description();\n  }\n\n  /**\n   * Get the option description to show in the list of options.\n   *\n   * @param {Option} option\n   * @return {string}\n   */\n\n  optionDescription(option) {\n    const extraInfo = [];\n    // Some of these do not make sense for negated boolean and suppress for backwards compatibility.\n\n    if (option.argChoices && !option.negate) {\n      extraInfo.push(\n        // use stringify to match the display of the default value\n        `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`);\n    }\n    if (option.defaultValue !== undefined && !option.negate) {\n      extraInfo.push(`default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`);\n    }\n    if (option.envVar !== undefined) {\n      extraInfo.push(`env: ${option.envVar}`);\n    }\n    if (extraInfo.length > 0) {\n      return `${option.description} (${extraInfo.join(', ')})`;\n    }\n\n    return option.description;\n  };\n\n  /**\n   * Get the argument description to show in the list of arguments.\n   *\n   * @param {Argument} argument\n   * @return {string}\n   */\n\n  argumentDescription(argument) {\n    const extraInfo = [];\n    if (argument.argChoices) {\n      extraInfo.push(\n        // use stringify to match the display of the default value\n        `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`);\n    }\n    if (argument.defaultValue !== undefined) {\n      extraInfo.push(`default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`);\n    }\n    if (extraInfo.length > 0) {\n      const extraDescripton = `(${extraInfo.join(', ')})`;\n      if (argument.description) {\n        return `${argument.description} ${extraDescripton}`;\n      }\n      return extraDescripton;\n    }\n    return argument.description;\n  }\n\n  /**\n   * Generate the built-in help text.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {string}\n   */\n\n  formatHelp(cmd, helper) {\n    const termWidth = helper.padWidth(cmd, helper);\n    const helpWidth = helper.helpWidth || 80;\n    const itemIndentWidth = 2;\n    const itemSeparatorWidth = 2; // between term and description\n    function formatItem(term, description) {\n      if (description) {\n        const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`;\n        return helper.wrap(fullText, helpWidth - itemIndentWidth, termWidth + itemSeparatorWidth);\n      }\n      return term;\n    };\n    function formatList(textArray) {\n      return textArray.join('\\n').replace(/^/gm, ' '.repeat(itemIndentWidth));\n    }\n\n    // Usage\n    let output = [`Usage: ${helper.commandUsage(cmd)}`, ''];\n\n    // Description\n    const commandDescription = helper.commandDescription(cmd);\n    if (commandDescription.length > 0) {\n      output = output.concat([commandDescription, '']);\n    }\n\n    // Arguments\n    const argumentList = helper.visibleArguments(cmd).map((argument) => {\n      return formatItem(helper.argumentTerm(argument), helper.argumentDescription(argument));\n    });\n    if (argumentList.length > 0) {\n      output = output.concat(['Arguments:', formatList(argumentList), '']);\n    }\n\n    // Options\n    const optionList = helper.visibleOptions(cmd).map((option) => {\n      return formatItem(helper.optionTerm(option), helper.optionDescription(option));\n    });\n    if (optionList.length > 0) {\n      output = output.concat(['Options:', formatList(optionList), '']);\n    }\n\n    // Commands\n    const commandList = helper.visibleCommands(cmd).map((cmd) => {\n      return formatItem(helper.subcommandTerm(cmd), helper.subcommandDescription(cmd));\n    });\n    if (commandList.length > 0) {\n      output = output.concat(['Commands:', formatList(commandList), '']);\n    }\n\n    return output.join('\\n');\n  }\n\n  /**\n   * Calculate the pad width from the maximum term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  padWidth(cmd, helper) {\n    return Math.max(\n      helper.longestOptionTermLength(cmd, helper),\n      helper.longestSubcommandTermLength(cmd, helper),\n      helper.longestArgumentTermLength(cmd, helper)\n    );\n  };\n\n  /**\n   * Wrap the given string to width characters per line, with lines after the first indented.\n   * Do not wrap if insufficient room for wrapping (minColumnWidth), or string is manually formatted.\n   *\n   * @param {string} str\n   * @param {number} width\n   * @param {number} indent\n   * @param {number} [minColumnWidth=40]\n   * @return {string}\n   *\n   */\n\n  wrap(str, width, indent, minColumnWidth = 40) {\n    // Detect manually wrapped and indented strings by searching for line breaks\n    // followed by multiple spaces/tabs.\n    if (str.match(/[\\n]\\s+/)) return str;\n    // Do not wrap if not enough room for a wrapped column of text (as could end up with a word per line).\n    const columnWidth = width - indent;\n    if (columnWidth < minColumnWidth) return str;\n\n    const leadingStr = str.substr(0, indent);\n    const columnText = str.substr(indent);\n\n    const indentString = ' '.repeat(indent);\n    const regex = new RegExp('.{1,' + (columnWidth - 1) + '}([\\\\s\\u200B]|$)|[^\\\\s\\u200B]+?([\\\\s\\u200B]|$)', 'g');\n    const lines = columnText.match(regex) || [];\n    return leadingStr + lines.map((line, i) => {\n      if (line.slice(-1) === '\\n') {\n        line = line.slice(0, line.length - 1);\n      }\n      return ((i > 0) ? indentString : '') + line.trimRight();\n    }).join('\\n');\n  }\n}\n\nexports.Help = Help;\n","const { InvalidArgumentError } = require('./error.js');\n\n// @ts-check\n\nclass Option {\n  /**\n   * Initialize a new `Option` with the given `flags` and `description`.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   */\n\n  constructor(flags, description) {\n    this.flags = flags;\n    this.description = description || '';\n\n    this.required = flags.includes('<'); // A value must be supplied when the option is specified.\n    this.optional = flags.includes('['); // A value is optional when the option is specified.\n    // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument\n    this.variadic = /\\w\\.\\.\\.[>\\]]$/.test(flags); // The option can take multiple values.\n    this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.\n    const optionFlags = splitOptionFlags(flags);\n    this.short = optionFlags.shortFlag;\n    this.long = optionFlags.longFlag;\n    this.negate = false;\n    if (this.long) {\n      this.negate = this.long.startsWith('--no-');\n    }\n    this.defaultValue = undefined;\n    this.defaultValueDescription = undefined;\n    this.envVar = undefined;\n    this.parseArg = undefined;\n    this.hidden = false;\n    this.argChoices = undefined;\n  }\n\n  /**\n   * Set the default value, and optionally supply the description to be displayed in the help.\n   *\n   * @param {any} value\n   * @param {string} [description]\n   * @return {Option}\n   */\n\n  default(value, description) {\n    this.defaultValue = value;\n    this.defaultValueDescription = description;\n    return this;\n  };\n\n  /**\n   * Set environment variable to check for option value.\n   * Priority order of option values is default < env < cli\n   *\n   * @param {string} name\n   * @return {Option}\n   */\n\n  env(name) {\n    this.envVar = name;\n    return this;\n  };\n\n  /**\n   * Set the custom handler for processing CLI option arguments into option values.\n   *\n   * @param {Function} [fn]\n   * @return {Option}\n   */\n\n  argParser(fn) {\n    this.parseArg = fn;\n    return this;\n  };\n\n  /**\n   * Whether the option is mandatory and must have a value after parsing.\n   *\n   * @param {boolean} [mandatory=true]\n   * @return {Option}\n   */\n\n  makeOptionMandatory(mandatory = true) {\n    this.mandatory = !!mandatory;\n    return this;\n  };\n\n  /**\n   * Hide option in help.\n   *\n   * @param {boolean} [hide=true]\n   * @return {Option}\n   */\n\n  hideHelp(hide = true) {\n    this.hidden = !!hide;\n    return this;\n  };\n\n  /**\n   * @api private\n   */\n\n  _concatValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    return previous.concat(value);\n  }\n\n  /**\n   * Only allow option value to be one of choices.\n   *\n   * @param {string[]} values\n   * @return {Option}\n   */\n\n  choices(values) {\n    this.argChoices = values;\n    this.parseArg = (arg, previous) => {\n      if (!values.includes(arg)) {\n        throw new InvalidArgumentError(`Allowed choices are ${values.join(', ')}.`);\n      }\n      if (this.variadic) {\n        return this._concatValue(arg, previous);\n      }\n      return arg;\n    };\n    return this;\n  };\n\n  /**\n   * Return option name.\n   *\n   * @return {string}\n   */\n\n  name() {\n    if (this.long) {\n      return this.long.replace(/^--/, '');\n    }\n    return this.short.replace(/^-/, '');\n  };\n\n  /**\n   * Return option name, in a camelcase format that can be used\n   * as a object attribute key.\n   *\n   * @return {string}\n   * @api private\n   */\n\n  attributeName() {\n    return camelcase(this.name().replace(/^no-/, ''));\n  };\n\n  /**\n   * Check if `arg` matches the short or long flag.\n   *\n   * @param {string} arg\n   * @return {boolean}\n   * @api private\n   */\n\n  is(arg) {\n    return this.short === arg || this.long === arg;\n  };\n}\n\n/**\n * Convert string from kebab-case to camelCase.\n *\n * @param {string} str\n * @return {string}\n * @api private\n */\n\nfunction camelcase(str) {\n  return str.split('-').reduce((str, word) => {\n    return str + word[0].toUpperCase() + word.slice(1);\n  });\n}\n\n/**\n * Split the short and long flag out of something like '-m,--mixed <value>'\n *\n * @api private\n */\n\nfunction splitOptionFlags(flags) {\n  let shortFlag;\n  let longFlag;\n  // Use original very loose parsing to maintain backwards compatibility for now,\n  // which allowed for example unintended `-sw, --short-word` [sic].\n  const flagParts = flags.split(/[ |,]+/);\n  if (flagParts.length > 1 && !/^[[<]/.test(flagParts[1])) shortFlag = flagParts.shift();\n  longFlag = flagParts.shift();\n  // Add support for lone short flag without significantly changing parsing!\n  if (!shortFlag && /^-[^-]$/.test(longFlag)) {\n    shortFlag = longFlag;\n    longFlag = undefined;\n  }\n  return { shortFlag, longFlag };\n}\n\nexports.Option = Option;\nexports.splitOptionFlags = splitOptionFlags;\n","const maxDistance = 3;\n\nfunction editDistance(a, b) {\n  // https://en.wikipedia.org/wiki/Damerau–Levenshtein_distance\n  // Calculating optimal string alignment distance, no substring is edited more than once.\n  // (Simple implementation.)\n\n  // Quick early exit, return worst case.\n  if (Math.abs(a.length - b.length) > maxDistance) return Math.max(a.length, b.length);\n\n  // distance between prefix substrings of a and b\n  const d = [];\n\n  // pure deletions turn a into empty string\n  for (let i = 0; i <= a.length; i++) {\n    d[i] = [i];\n  }\n  // pure insertions turn empty string into b\n  for (let j = 0; j <= b.length; j++) {\n    d[0][j] = j;\n  }\n\n  // fill matrix\n  for (let j = 1; j <= b.length; j++) {\n    for (let i = 1; i <= a.length; i++) {\n      let cost = 1;\n      if (a[i - 1] === b[j - 1]) {\n        cost = 0;\n      } else {\n        cost = 1;\n      }\n      d[i][j] = Math.min(\n        d[i - 1][j] + 1, // deletion\n        d[i][j - 1] + 1, // insertion\n        d[i - 1][j - 1] + cost // substitution\n      );\n      // transposition\n      if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n        d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);\n      }\n    }\n  }\n\n  return d[a.length][b.length];\n}\n\n/**\n * Find close matches, restricted to same number of edits.\n *\n * @param {string} word\n * @param {string[]} candidates\n * @returns {string}\n */\n\nfunction suggestSimilar(word, candidates) {\n  if (!candidates || candidates.length === 0) return '';\n  // remove possible duplicates\n  candidates = Array.from(new Set(candidates));\n\n  const searchingOptions = word.startsWith('--');\n  if (searchingOptions) {\n    word = word.slice(2);\n    candidates = candidates.map(candidate => candidate.slice(2));\n  }\n\n  let similar = [];\n  let bestDistance = maxDistance;\n  const minSimilarity = 0.4;\n  candidates.forEach((candidate) => {\n    if (candidate.length <= 1) return; // no one character guesses\n\n    const distance = editDistance(word, candidate);\n    const length = Math.max(word.length, candidate.length);\n    const similarity = (length - distance) / length;\n    if (similarity > minSimilarity) {\n      if (distance < bestDistance) {\n        // better edit distance, throw away previous worse matches\n        bestDistance = distance;\n        similar = [candidate];\n      } else if (distance === bestDistance) {\n        similar.push(candidate);\n      }\n    }\n  });\n\n  similar.sort((a, b) => a.localeCompare(b));\n  if (searchingOptions) {\n    similar = similar.map(candidate => `--${candidate}`);\n  }\n\n  if (similar.length > 1) {\n    return `\\n(Did you mean one of ${similar.join(', ')}?)`;\n  }\n  if (similar.length === 1) {\n    return `\\n(Did you mean ${similar[0]}?)`;\n  }\n  return '';\n}\n\nexports.suggestSimilar = suggestSimilar;\n","const EventEmitter = require('events').EventEmitter;\nconst childProcess = require('child_process');\nconst path = require('path');\nconst fs = require('fs');\n\nconst { Argument, humanReadableArgName } = require('./argument.js');\nconst { CommanderError } = require('./error.js');\nconst { Help } = require('./help.js');\nconst { Option, splitOptionFlags } = require('./option.js');\nconst { suggestSimilar } = require('./suggestSimilar');\n\n// @ts-check\n\nclass Command extends EventEmitter {\n  /**\n   * Initialize a new `Command`.\n   *\n   * @param {string} [name]\n   */\n\n  constructor(name) {\n    super();\n    /** @type {Command[]} */\n    this.commands = [];\n    /** @type {Option[]} */\n    this.options = [];\n    this.parent = null;\n    this._allowUnknownOption = false;\n    this._allowExcessArguments = true;\n    /** @type {Argument[]} */\n    this._args = [];\n    /** @type {string[]} */\n    this.args = []; // cli args with options removed\n    this.rawArgs = [];\n    this.processedArgs = []; // like .args but after custom processing and collecting variadic\n    this._scriptPath = null;\n    this._name = name || '';\n    this._optionValues = {};\n    this._optionValueSources = {}; // default < config < env < cli\n    this._storeOptionsAsProperties = false;\n    this._actionHandler = null;\n    this._executableHandler = false;\n    this._executableFile = null; // custom name for executable\n    this._defaultCommandName = null;\n    this._exitCallback = null;\n    this._aliases = [];\n    this._combineFlagAndOptionalValue = true;\n    this._description = '';\n    this._argsDescription = undefined; // legacy\n    this._enablePositionalOptions = false;\n    this._passThroughOptions = false;\n    this._lifeCycleHooks = {}; // a hash of arrays\n    /** @type {boolean | string} */\n    this._showHelpAfterError = false;\n    this._showSuggestionAfterError = false;\n\n    // see .configureOutput() for docs\n    this._outputConfiguration = {\n      writeOut: (str) => process.stdout.write(str),\n      writeErr: (str) => process.stderr.write(str),\n      getOutHelpWidth: () => process.stdout.isTTY ? process.stdout.columns : undefined,\n      getErrHelpWidth: () => process.stderr.isTTY ? process.stderr.columns : undefined,\n      outputError: (str, write) => write(str)\n    };\n\n    this._hidden = false;\n    this._hasHelpOption = true;\n    this._helpFlags = '-h, --help';\n    this._helpDescription = 'display help for command';\n    this._helpShortFlag = '-h';\n    this._helpLongFlag = '--help';\n    this._addImplicitHelpCommand = undefined; // Deliberately undefined, not decided whether true or false\n    this._helpCommandName = 'help';\n    this._helpCommandnameAndArgs = 'help [command]';\n    this._helpCommandDescription = 'display help for command';\n    this._helpConfiguration = {};\n  }\n\n  /**\n   * Copy settings that are useful to have in common across root command and subcommands.\n   *\n   * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.)\n   *\n   * @param {Command} sourceCommand\n   * @return {Command} returns `this` for executable command\n   */\n  copyInheritedSettings(sourceCommand) {\n    this._outputConfiguration = sourceCommand._outputConfiguration;\n    this._hasHelpOption = sourceCommand._hasHelpOption;\n    this._helpFlags = sourceCommand._helpFlags;\n    this._helpDescription = sourceCommand._helpDescription;\n    this._helpShortFlag = sourceCommand._helpShortFlag;\n    this._helpLongFlag = sourceCommand._helpLongFlag;\n    this._helpCommandName = sourceCommand._helpCommandName;\n    this._helpCommandnameAndArgs = sourceCommand._helpCommandnameAndArgs;\n    this._helpCommandDescription = sourceCommand._helpCommandDescription;\n    this._helpConfiguration = sourceCommand._helpConfiguration;\n    this._exitCallback = sourceCommand._exitCallback;\n    this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties;\n    this._combineFlagAndOptionalValue = sourceCommand._combineFlagAndOptionalValue;\n    this._allowExcessArguments = sourceCommand._allowExcessArguments;\n    this._enablePositionalOptions = sourceCommand._enablePositionalOptions;\n    this._showHelpAfterError = sourceCommand._showHelpAfterError;\n    this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError;\n\n    return this;\n  }\n\n  /**\n   * Define a command.\n   *\n   * There are two styles of command: pay attention to where to put the description.\n   *\n   * @example\n   * // Command implemented using action handler (description is supplied separately to `.command`)\n   * program\n   *   .command('clone <source> [destination]')\n   *   .description('clone a repository into a newly created directory')\n   *   .action((source, destination) => {\n   *     console.log('clone command called');\n   *   });\n   *\n   * // Command implemented using separate executable file (description is second parameter to `.command`)\n   * program\n   *   .command('start <service>', 'start named service')\n   *   .command('stop [service]', 'stop named service, or all if no name supplied');\n   *\n   * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`\n   * @param {Object|string} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)\n   * @param {Object} [execOpts] - configuration options (for executable)\n   * @return {Command} returns new command for action handler, or `this` for executable command\n   */\n\n  command(nameAndArgs, actionOptsOrExecDesc, execOpts) {\n    let desc = actionOptsOrExecDesc;\n    let opts = execOpts;\n    if (typeof desc === 'object' && desc !== null) {\n      opts = desc;\n      desc = null;\n    }\n    opts = opts || {};\n    const [, name, args] = nameAndArgs.match(/([^ ]+) *(.*)/);\n\n    const cmd = this.createCommand(name);\n    if (desc) {\n      cmd.description(desc);\n      cmd._executableHandler = true;\n    }\n    if (opts.isDefault) this._defaultCommandName = cmd._name;\n    cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden\n    cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor\n    if (args) cmd.arguments(args);\n    this.commands.push(cmd);\n    cmd.parent = this;\n    cmd.copyInheritedSettings(this);\n\n    if (desc) return this;\n    return cmd;\n  };\n\n  /**\n   * Factory routine to create a new unattached command.\n   *\n   * See .command() for creating an attached subcommand, which uses this routine to\n   * create the command. You can override createCommand to customise subcommands.\n   *\n   * @param {string} [name]\n   * @return {Command} new command\n   */\n\n  createCommand(name) {\n    return new Command(name);\n  };\n\n  /**\n   * You can customise the help with a subclass of Help by overriding createHelp,\n   * or by overriding Help properties using configureHelp().\n   *\n   * @return {Help}\n   */\n\n  createHelp() {\n    return Object.assign(new Help(), this.configureHelp());\n  };\n\n  /**\n   * You can customise the help by overriding Help properties using configureHelp(),\n   * or with a subclass of Help by overriding createHelp().\n   *\n   * @param {Object} [configuration] - configuration options\n   * @return {Command|Object} `this` command for chaining, or stored configuration\n   */\n\n  configureHelp(configuration) {\n    if (configuration === undefined) return this._helpConfiguration;\n\n    this._helpConfiguration = configuration;\n    return this;\n  }\n\n  /**\n   * The default output goes to stdout and stderr. You can customise this for special\n   * applications. You can also customise the display of errors by overriding outputError.\n   *\n   * The configuration properties are all functions:\n   *\n   *     // functions to change where being written, stdout and stderr\n   *     writeOut(str)\n   *     writeErr(str)\n   *     // matching functions to specify width for wrapping help\n   *     getOutHelpWidth()\n   *     getErrHelpWidth()\n   *     // functions based on what is being written out\n   *     outputError(str, write) // used for displaying errors, and not used for displaying help\n   *\n   * @param {Object} [configuration] - configuration options\n   * @return {Command|Object} `this` command for chaining, or stored configuration\n   */\n\n  configureOutput(configuration) {\n    if (configuration === undefined) return this._outputConfiguration;\n\n    Object.assign(this._outputConfiguration, configuration);\n    return this;\n  }\n\n  /**\n   * Display the help or a custom message after an error occurs.\n   *\n   * @param {boolean|string} [displayHelp]\n   * @return {Command} `this` command for chaining\n   */\n  showHelpAfterError(displayHelp = true) {\n    if (typeof displayHelp !== 'string') displayHelp = !!displayHelp;\n    this._showHelpAfterError = displayHelp;\n    return this;\n  }\n\n  /**\n   * Display suggestion of similar commands for unknown commands, or options for unknown options.\n   *\n   * @param {boolean} [displaySuggestion]\n   * @return {Command} `this` command for chaining\n   */\n  showSuggestionAfterError(displaySuggestion = true) {\n    this._showSuggestionAfterError = !!displaySuggestion;\n    return this;\n  }\n\n  /**\n   * Add a prepared subcommand.\n   *\n   * See .command() for creating an attached subcommand which inherits settings from its parent.\n   *\n   * @param {Command} cmd - new subcommand\n   * @param {Object} [opts] - configuration options\n   * @return {Command} `this` command for chaining\n   */\n\n  addCommand(cmd, opts) {\n    if (!cmd._name) throw new Error('Command passed to .addCommand() must have a name');\n\n    // To keep things simple, block automatic name generation for deeply nested executables.\n    // Fail fast and detect when adding rather than later when parsing.\n    function checkExplicitNames(commandArray) {\n      commandArray.forEach((cmd) => {\n        if (cmd._executableHandler && !cmd._executableFile) {\n          throw new Error(`Must specify executableFile for deeply nested executable: ${cmd.name()}`);\n        }\n        checkExplicitNames(cmd.commands);\n      });\n    }\n    checkExplicitNames(cmd.commands);\n\n    opts = opts || {};\n    if (opts.isDefault) this._defaultCommandName = cmd._name;\n    if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation\n\n    this.commands.push(cmd);\n    cmd.parent = this;\n    return this;\n  };\n\n  /**\n   * Factory routine to create a new unattached argument.\n   *\n   * See .argument() for creating an attached argument, which uses this routine to\n   * create the argument. You can override createArgument to return a custom argument.\n   *\n   * @param {string} name\n   * @param {string} [description]\n   * @return {Argument} new argument\n   */\n\n  createArgument(name, description) {\n    return new Argument(name, description);\n  };\n\n  /**\n   * Define argument syntax for command.\n   *\n   * The default is that the argument is required, and you can explicitly\n   * indicate this with <> around the name. Put [] around the name for an optional argument.\n   *\n   * @example\n   * program.argument('<input-file>');\n   * program.argument('[output-file]');\n   *\n   * @param {string} name\n   * @param {string} [description]\n   * @param {Function|*} [fn] - custom argument processing function\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n  argument(name, description, fn, defaultValue) {\n    const argument = this.createArgument(name, description);\n    if (typeof fn === 'function') {\n      argument.default(defaultValue).argParser(fn);\n    } else {\n      argument.default(fn);\n    }\n    this.addArgument(argument);\n    return this;\n  }\n\n  /**\n   * Define argument syntax for command, adding multiple at once (without descriptions).\n   *\n   * See also .argument().\n   *\n   * @example\n   * program.arguments('<cmd> [env]');\n   *\n   * @param {string} names\n   * @return {Command} `this` command for chaining\n   */\n\n  arguments(names) {\n    names.split(/ +/).forEach((detail) => {\n      this.argument(detail);\n    });\n    return this;\n  };\n\n  /**\n   * Define argument syntax for command, adding a prepared argument.\n   *\n   * @param {Argument} argument\n   * @return {Command} `this` command for chaining\n   */\n  addArgument(argument) {\n    const previousArgument = this._args.slice(-1)[0];\n    if (previousArgument && previousArgument.variadic) {\n      throw new Error(`only the last argument can be variadic '${previousArgument.name()}'`);\n    }\n    if (argument.required && argument.defaultValue !== undefined && argument.parseArg === undefined) {\n      throw new Error(`a default value for a required argument is never used: '${argument.name()}'`);\n    }\n    this._args.push(argument);\n    return this;\n  }\n\n  /**\n   * Override default decision whether to add implicit help command.\n   *\n   *    addHelpCommand() // force on\n   *    addHelpCommand(false); // force off\n   *    addHelpCommand('help [cmd]', 'display help for [cmd]'); // force on with custom details\n   *\n   * @return {Command} `this` command for chaining\n   */\n\n  addHelpCommand(enableOrNameAndArgs, description) {\n    if (enableOrNameAndArgs === false) {\n      this._addImplicitHelpCommand = false;\n    } else {\n      this._addImplicitHelpCommand = true;\n      if (typeof enableOrNameAndArgs === 'string') {\n        this._helpCommandName = enableOrNameAndArgs.split(' ')[0];\n        this._helpCommandnameAndArgs = enableOrNameAndArgs;\n      }\n      this._helpCommandDescription = description || this._helpCommandDescription;\n    }\n    return this;\n  };\n\n  /**\n   * @return {boolean}\n   * @api private\n   */\n\n  _hasImplicitHelpCommand() {\n    if (this._addImplicitHelpCommand === undefined) {\n      return this.commands.length && !this._actionHandler && !this._findCommand('help');\n    }\n    return this._addImplicitHelpCommand;\n  };\n\n  /**\n   * Add hook for life cycle event.\n   *\n   * @param {string} event\n   * @param {Function} listener\n   * @return {Command} `this` command for chaining\n   */\n\n  hook(event, listener) {\n    const allowedValues = ['preAction', 'postAction'];\n    if (!allowedValues.includes(event)) {\n      throw new Error(`Unexpected value for event passed to hook : '${event}'.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n    }\n    if (this._lifeCycleHooks[event]) {\n      this._lifeCycleHooks[event].push(listener);\n    } else {\n      this._lifeCycleHooks[event] = [listener];\n    }\n    return this;\n  }\n\n  /**\n   * Register callback to use as replacement for calling process.exit.\n   *\n   * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing\n   * @return {Command} `this` command for chaining\n   */\n\n  exitOverride(fn) {\n    if (fn) {\n      this._exitCallback = fn;\n    } else {\n      this._exitCallback = (err) => {\n        if (err.code !== 'commander.executeSubCommandAsync') {\n          throw err;\n        } else {\n          // Async callback from spawn events, not useful to throw.\n        }\n      };\n    }\n    return this;\n  };\n\n  /**\n   * Call process.exit, and _exitCallback if defined.\n   *\n   * @param {number} exitCode exit code for using with process.exit\n   * @param {string} code an id string representing the error\n   * @param {string} message human-readable description of the error\n   * @return never\n   * @api private\n   */\n\n  _exit(exitCode, code, message) {\n    if (this._exitCallback) {\n      this._exitCallback(new CommanderError(exitCode, code, message));\n      // Expecting this line is not reached.\n    }\n    process.exit(exitCode);\n  };\n\n  /**\n   * Register callback `fn` for the command.\n   *\n   * @example\n   * program\n   *   .command('serve')\n   *   .description('start service')\n   *   .action(function() {\n   *      // do work here\n   *   });\n   *\n   * @param {Function} fn\n   * @return {Command} `this` command for chaining\n   */\n\n  action(fn) {\n    const listener = (args) => {\n      // The .action callback takes an extra parameter which is the command or options.\n      const expectedArgsCount = this._args.length;\n      const actionArgs = args.slice(0, expectedArgsCount);\n      if (this._storeOptionsAsProperties) {\n        actionArgs[expectedArgsCount] = this; // backwards compatible \"options\"\n      } else {\n        actionArgs[expectedArgsCount] = this.opts();\n      }\n      actionArgs.push(this);\n\n      return fn.apply(this, actionArgs);\n    };\n    this._actionHandler = listener;\n    return this;\n  };\n\n  /**\n   * Factory routine to create a new unattached option.\n   *\n   * See .option() for creating an attached option, which uses this routine to\n   * create the option. You can override createOption to return a custom option.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @return {Option} new option\n   */\n\n  createOption(flags, description) {\n    return new Option(flags, description);\n  };\n\n  /**\n   * Add an option.\n   *\n   * @param {Option} option\n   * @return {Command} `this` command for chaining\n   */\n  addOption(option) {\n    const oname = option.name();\n    const name = option.attributeName();\n\n    let defaultValue = option.defaultValue;\n\n    // preassign default value for --no-*, [optional], <required>, or plain flag if boolean value\n    if (option.negate || option.optional || option.required || typeof defaultValue === 'boolean') {\n      // when --no-foo we make sure default is true, unless a --foo option is already defined\n      if (option.negate) {\n        const positiveLongFlag = option.long.replace(/^--no-/, '--');\n        defaultValue = this._findOption(positiveLongFlag) ? this.getOptionValue(name) : true;\n      }\n      // preassign only if we have a default\n      if (defaultValue !== undefined) {\n        this.setOptionValueWithSource(name, defaultValue, 'default');\n      }\n    }\n\n    // register the option\n    this.options.push(option);\n\n    // handler for cli and env supplied values\n    const handleOptionValue = (val, invalidValueMessage, valueSource) => {\n      // Note: using closure to access lots of lexical scoped variables.\n      const oldValue = this.getOptionValue(name);\n\n      // custom processing\n      if (val !== null && option.parseArg) {\n        try {\n          val = option.parseArg(val, oldValue === undefined ? defaultValue : oldValue);\n        } catch (err) {\n          if (err.code === 'commander.invalidArgument') {\n            const message = `${invalidValueMessage} ${err.message}`;\n            this._displayError(err.exitCode, err.code, message);\n          }\n          throw err;\n        }\n      } else if (val !== null && option.variadic) {\n        val = option._concatValue(val, oldValue);\n      }\n\n      // unassigned or boolean value\n      if (typeof oldValue === 'boolean' || typeof oldValue === 'undefined') {\n        // if no value, negate false, and we have a default, then use it!\n        if (val == null) {\n          this.setOptionValueWithSource(name, option.negate ? false : defaultValue || true, valueSource);\n        } else {\n          this.setOptionValueWithSource(name, val, valueSource);\n        }\n      } else if (val !== null) {\n        // reassign\n        this.setOptionValueWithSource(name, option.negate ? false : val, valueSource);\n      }\n    };\n\n    this.on('option:' + oname, (val) => {\n      const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;\n      handleOptionValue(val, invalidValueMessage, 'cli');\n    });\n\n    if (option.envVar) {\n      this.on('optionEnv:' + oname, (val) => {\n        const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;\n        handleOptionValue(val, invalidValueMessage, 'env');\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Internal implementation shared by .option() and .requiredOption()\n   *\n   * @api private\n   */\n  _optionEx(config, flags, description, fn, defaultValue) {\n    const option = this.createOption(flags, description);\n    option.makeOptionMandatory(!!config.mandatory);\n    if (typeof fn === 'function') {\n      option.default(defaultValue).argParser(fn);\n    } else if (fn instanceof RegExp) {\n      // deprecated\n      const regex = fn;\n      fn = (val, def) => {\n        const m = regex.exec(val);\n        return m ? m[0] : def;\n      };\n      option.default(defaultValue).argParser(fn);\n    } else {\n      option.default(fn);\n    }\n\n    return this.addOption(option);\n  }\n\n  /**\n   * Define option with `flags`, `description` and optional\n   * coercion `fn`.\n   *\n   * The `flags` string contains the short and/or long flags,\n   * separated by comma, a pipe or space. The following are all valid\n   * all will output this way when `--help` is used.\n   *\n   *     \"-p, --pepper\"\n   *     \"-p|--pepper\"\n   *     \"-p --pepper\"\n   *\n   * @example\n   * // simple boolean defaulting to undefined\n   * program.option('-p, --pepper', 'add pepper');\n   *\n   * program.pepper\n   * // => undefined\n   *\n   * --pepper\n   * program.pepper\n   * // => true\n   *\n   * // simple boolean defaulting to true (unless non-negated option is also defined)\n   * program.option('-C, --no-cheese', 'remove cheese');\n   *\n   * program.cheese\n   * // => true\n   *\n   * --no-cheese\n   * program.cheese\n   * // => false\n   *\n   * // required argument\n   * program.option('-C, --chdir <path>', 'change the working directory');\n   *\n   * --chdir /tmp\n   * program.chdir\n   * // => \"/tmp\"\n   *\n   * // optional argument\n   * program.option('-c, --cheese [type]', 'add cheese [marble]');\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @param {Function|*} [fn] - custom option processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n\n  option(flags, description, fn, defaultValue) {\n    return this._optionEx({}, flags, description, fn, defaultValue);\n  };\n\n  /**\n  * Add a required option which must have a value after parsing. This usually means\n  * the option must be specified on the command line. (Otherwise the same as .option().)\n  *\n  * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.\n  *\n  * @param {string} flags\n  * @param {string} [description]\n  * @param {Function|*} [fn] - custom option processing function or default value\n  * @param {*} [defaultValue]\n  * @return {Command} `this` command for chaining\n  */\n\n  requiredOption(flags, description, fn, defaultValue) {\n    return this._optionEx({ mandatory: true }, flags, description, fn, defaultValue);\n  };\n\n  /**\n   * Alter parsing of short flags with optional values.\n   *\n   * @example\n   * // for `.option('-f,--flag [value]'):\n   * program.combineFlagAndOptionalValue(true);  // `-f80` is treated like `--flag=80`, this is the default behaviour\n   * program.combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`\n   *\n   * @param {Boolean} [combine=true] - if `true` or omitted, an optional value can be specified directly after the flag.\n   */\n  combineFlagAndOptionalValue(combine = true) {\n    this._combineFlagAndOptionalValue = !!combine;\n    return this;\n  };\n\n  /**\n   * Allow unknown options on the command line.\n   *\n   * @param {Boolean} [allowUnknown=true] - if `true` or omitted, no error will be thrown\n   * for unknown options.\n   */\n  allowUnknownOption(allowUnknown = true) {\n    this._allowUnknownOption = !!allowUnknown;\n    return this;\n  };\n\n  /**\n   * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.\n   *\n   * @param {Boolean} [allowExcess=true] - if `true` or omitted, no error will be thrown\n   * for excess arguments.\n   */\n  allowExcessArguments(allowExcess = true) {\n    this._allowExcessArguments = !!allowExcess;\n    return this;\n  };\n\n  /**\n   * Enable positional options. Positional means global options are specified before subcommands which lets\n   * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.\n   * The default behaviour is non-positional and global options may appear anywhere on the command line.\n   *\n   * @param {Boolean} [positional=true]\n   */\n  enablePositionalOptions(positional = true) {\n    this._enablePositionalOptions = !!positional;\n    return this;\n  };\n\n  /**\n   * Pass through options that come after command-arguments rather than treat them as command-options,\n   * so actual command-options come before command-arguments. Turning this on for a subcommand requires\n   * positional options to have been enabled on the program (parent commands).\n   * The default behaviour is non-positional and options may appear before or after command-arguments.\n   *\n   * @param {Boolean} [passThrough=true]\n   * for unknown options.\n   */\n  passThroughOptions(passThrough = true) {\n    this._passThroughOptions = !!passThrough;\n    if (!!this.parent && passThrough && !this.parent._enablePositionalOptions) {\n      throw new Error('passThroughOptions can not be used without turning on enablePositionalOptions for parent command(s)');\n    }\n    return this;\n  };\n\n  /**\n    * Whether to store option values as properties on command object,\n    * or store separately (specify false). In both cases the option values can be accessed using .opts().\n    *\n    * @param {boolean} [storeAsProperties=true]\n    * @return {Command} `this` command for chaining\n    */\n\n  storeOptionsAsProperties(storeAsProperties = true) {\n    this._storeOptionsAsProperties = !!storeAsProperties;\n    if (this.options.length) {\n      throw new Error('call .storeOptionsAsProperties() before adding options');\n    }\n    return this;\n  };\n\n  /**\n   * Retrieve option value.\n   *\n   * @param {string} key\n   * @return {Object} value\n   */\n\n  getOptionValue(key) {\n    if (this._storeOptionsAsProperties) {\n      return this[key];\n    }\n    return this._optionValues[key];\n  };\n\n  /**\n   * Store option value.\n   *\n   * @param {string} key\n   * @param {Object} value\n   * @return {Command} `this` command for chaining\n   */\n\n  setOptionValue(key, value) {\n    if (this._storeOptionsAsProperties) {\n      this[key] = value;\n    } else {\n      this._optionValues[key] = value;\n    }\n    return this;\n  };\n\n  /**\n   * Store option value and where the value came from.\n    *\n    * @param {string} key\n    * @param {Object} value\n    * @param {string} source - expected values are default/config/env/cli\n    * @return {Command} `this` command for chaining\n    */\n\n  setOptionValueWithSource(key, value, source) {\n    this.setOptionValue(key, value);\n    this._optionValueSources[key] = source;\n    return this;\n  }\n\n  /**\n    * Get source of option value.\n    * Expected values are default | config | env | cli\n    *\n    * @param {string} key\n    * @return {string}\n    */\n\n  getOptionValueSource(key) {\n    return this._optionValueSources[key];\n  };\n\n  /**\n   * Get user arguments implied or explicit arguments.\n   * Side-effects: set _scriptPath if args included application, and use that to set implicit command name.\n   *\n   * @api private\n   */\n\n  _prepareUserArgs(argv, parseOptions) {\n    if (argv !== undefined && !Array.isArray(argv)) {\n      throw new Error('first parameter to parse must be array or undefined');\n    }\n    parseOptions = parseOptions || {};\n\n    // Default to using process.argv\n    if (argv === undefined) {\n      argv = process.argv;\n      // @ts-ignore: unknown property\n      if (process.versions && process.versions.electron) {\n        parseOptions.from = 'electron';\n      }\n    }\n    this.rawArgs = argv.slice();\n\n    // make it a little easier for callers by supporting various argv conventions\n    let userArgs;\n    switch (parseOptions.from) {\n      case undefined:\n      case 'node':\n        this._scriptPath = argv[1];\n        userArgs = argv.slice(2);\n        break;\n      case 'electron':\n        // @ts-ignore: unknown property\n        if (process.defaultApp) {\n          this._scriptPath = argv[1];\n          userArgs = argv.slice(2);\n        } else {\n          userArgs = argv.slice(1);\n        }\n        break;\n      case 'user':\n        userArgs = argv.slice(0);\n        break;\n      default:\n        throw new Error(`unexpected parse option { from: '${parseOptions.from}' }`);\n    }\n    if (!this._scriptPath && require.main) {\n      this._scriptPath = require.main.filename;\n    }\n\n    // Guess name, used in usage in help.\n    this._name = this._name || (this._scriptPath && path.basename(this._scriptPath, path.extname(this._scriptPath)));\n\n    return userArgs;\n  }\n\n  /**\n   * Parse `argv`, setting options and invoking commands when defined.\n   *\n   * The default expectation is that the arguments are from node and have the application as argv[0]\n   * and the script being run in argv[1], with user parameters after that.\n   *\n   * @example\n   * program.parse(process.argv);\n   * program.parse(); // implicitly use process.argv and auto-detect node vs electron conventions\n   * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n   *\n   * @param {string[]} [argv] - optional, defaults to process.argv\n   * @param {Object} [parseOptions] - optionally specify style of options with from: node/user/electron\n   * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'\n   * @return {Command} `this` command for chaining\n   */\n\n  parse(argv, parseOptions) {\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    this._parseCommand([], userArgs);\n\n    return this;\n  };\n\n  /**\n   * Parse `argv`, setting options and invoking commands when defined.\n   *\n   * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise.\n   *\n   * The default expectation is that the arguments are from node and have the application as argv[0]\n   * and the script being run in argv[1], with user parameters after that.\n   *\n   * @example\n   * await program.parseAsync(process.argv);\n   * await program.parseAsync(); // implicitly use process.argv and auto-detect node vs electron conventions\n   * await program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n   *\n   * @param {string[]} [argv]\n   * @param {Object} [parseOptions]\n   * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'\n   * @return {Promise}\n   */\n\n  async parseAsync(argv, parseOptions) {\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    await this._parseCommand([], userArgs);\n\n    return this;\n  };\n\n  /**\n   * Execute a sub-command executable.\n   *\n   * @api private\n   */\n\n  _executeSubCommand(subcommand, args) {\n    args = args.slice();\n    let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows.\n    const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];\n\n    // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.\n    this._checkForMissingMandatoryOptions();\n\n    // Want the entry script as the reference for command name and directory for searching for other files.\n    let scriptPath = this._scriptPath;\n    // Fallback in case not set, due to how Command created or called.\n    if (!scriptPath && require.main) {\n      scriptPath = require.main.filename;\n    }\n\n    let baseDir;\n    try {\n      const resolvedLink = fs.realpathSync(scriptPath);\n      baseDir = path.dirname(resolvedLink);\n    } catch (e) {\n      baseDir = '.'; // dummy, probably not going to find executable!\n    }\n\n    // name of the subcommand, like `pm-install`\n    let bin = path.basename(scriptPath, path.extname(scriptPath)) + '-' + subcommand._name;\n    if (subcommand._executableFile) {\n      bin = subcommand._executableFile;\n    }\n\n    const localBin = path.join(baseDir, bin);\n    if (fs.existsSync(localBin)) {\n      // prefer local `./<bin>` to bin in the $PATH\n      bin = localBin;\n    } else {\n      // Look for source files.\n      sourceExt.forEach((ext) => {\n        if (fs.existsSync(`${localBin}${ext}`)) {\n          bin = `${localBin}${ext}`;\n        }\n      });\n    }\n    launchWithNode = sourceExt.includes(path.extname(bin));\n\n    let proc;\n    if (process.platform !== 'win32') {\n      if (launchWithNode) {\n        args.unshift(bin);\n        // add executable arguments to spawn\n        args = incrementNodeInspectorPort(process.execArgv).concat(args);\n\n        proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });\n      } else {\n        proc = childProcess.spawn(bin, args, { stdio: 'inherit' });\n      }\n    } else {\n      args.unshift(bin);\n      // add executable arguments to spawn\n      args = incrementNodeInspectorPort(process.execArgv).concat(args);\n      proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });\n    }\n\n    const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n    signals.forEach((signal) => {\n      // @ts-ignore\n      process.on(signal, () => {\n        if (proc.killed === false && proc.exitCode === null) {\n          proc.kill(signal);\n        }\n      });\n    });\n\n    // By default terminate process when spawned process terminates.\n    // Suppressing the exit if exitCallback defined is a bit messy and of limited use, but does allow process to stay running!\n    const exitCallback = this._exitCallback;\n    if (!exitCallback) {\n      proc.on('close', process.exit.bind(process));\n    } else {\n      proc.on('close', () => {\n        exitCallback(new CommanderError(process.exitCode || 0, 'commander.executeSubCommandAsync', '(close)'));\n      });\n    }\n    proc.on('error', (err) => {\n      // @ts-ignore\n      if (err.code === 'ENOENT') {\n        const executableMissing = `'${bin}' does not exist\n - if '${subcommand._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name`;\n        throw new Error(executableMissing);\n      // @ts-ignore\n      } else if (err.code === 'EACCES') {\n        throw new Error(`'${bin}' not executable`);\n      }\n      if (!exitCallback) {\n        process.exit(1);\n      } else {\n        const wrappedError = new CommanderError(1, 'commander.executeSubCommandAsync', '(error)');\n        wrappedError.nestedError = err;\n        exitCallback(wrappedError);\n      }\n    });\n\n    // Store the reference to the child process\n    this.runningCommand = proc;\n  };\n\n  /**\n   * @api private\n   */\n\n  _dispatchSubcommand(commandName, operands, unknown) {\n    const subCommand = this._findCommand(commandName);\n    if (!subCommand) this.help({ error: true });\n\n    if (subCommand._executableHandler) {\n      this._executeSubCommand(subCommand, operands.concat(unknown));\n    } else {\n      return subCommand._parseCommand(operands, unknown);\n    }\n  };\n\n  /**\n   * Check this.args against expected this._args.\n   *\n   * @api private\n   */\n\n  _checkNumberOfArguments() {\n    // too few\n    this._args.forEach((arg, i) => {\n      if (arg.required && this.args[i] == null) {\n        this.missingArgument(arg.name());\n      }\n    });\n    // too many\n    if (this._args.length > 0 && this._args[this._args.length - 1].variadic) {\n      return;\n    }\n    if (this.args.length > this._args.length) {\n      this._excessArguments(this.args);\n    }\n  };\n\n  /**\n   * Process this.args using this._args and save as this.processedArgs!\n   *\n   * @api private\n   */\n\n  _processArguments() {\n    const myParseArg = (argument, value, previous) => {\n      // Extra processing for nice error message on parsing failure.\n      let parsedValue = value;\n      if (value !== null && argument.parseArg) {\n        try {\n          parsedValue = argument.parseArg(value, previous);\n        } catch (err) {\n          if (err.code === 'commander.invalidArgument') {\n            const message = `error: command-argument value '${value}' is invalid for argument '${argument.name()}'. ${err.message}`;\n            this._displayError(err.exitCode, err.code, message);\n          }\n          throw err;\n        }\n      }\n      return parsedValue;\n    };\n\n    this._checkNumberOfArguments();\n\n    const processedArgs = [];\n    this._args.forEach((declaredArg, index) => {\n      let value = declaredArg.defaultValue;\n      if (declaredArg.variadic) {\n        // Collect together remaining arguments for passing together as an array.\n        if (index < this.args.length) {\n          value = this.args.slice(index);\n          if (declaredArg.parseArg) {\n            value = value.reduce((processed, v) => {\n              return myParseArg(declaredArg, v, processed);\n            }, declaredArg.defaultValue);\n          }\n        } else if (value === undefined) {\n          value = [];\n        }\n      } else if (index < this.args.length) {\n        value = this.args[index];\n        if (declaredArg.parseArg) {\n          value = myParseArg(declaredArg, value, declaredArg.defaultValue);\n        }\n      }\n      processedArgs[index] = value;\n    });\n    this.processedArgs = processedArgs;\n  }\n\n  /**\n   * Once we have a promise we chain, but call synchronously until then.\n   *\n   * @param {Promise|undefined} promise\n   * @param {Function} fn\n   * @return {Promise|undefined}\n   * @api private\n   */\n\n  _chainOrCall(promise, fn) {\n    // thenable\n    if (promise && promise.then && typeof promise.then === 'function') {\n      // already have a promise, chain callback\n      return promise.then(() => fn());\n    }\n    // callback might return a promise\n    return fn();\n  }\n\n  /**\n   *\n   * @param {Promise|undefined} promise\n   * @param {string} event\n   * @return {Promise|undefined}\n   * @api private\n   */\n\n  _chainOrCallHooks(promise, event) {\n    let result = promise;\n    const hooks = [];\n    getCommandAndParents(this)\n      .reverse()\n      .filter(cmd => cmd._lifeCycleHooks[event] !== undefined)\n      .forEach(hookedCommand => {\n        hookedCommand._lifeCycleHooks[event].forEach((callback) => {\n          hooks.push({ hookedCommand, callback });\n        });\n      });\n    if (event === 'postAction') {\n      hooks.reverse();\n    }\n\n    hooks.forEach((hookDetail) => {\n      result = this._chainOrCall(result, () => {\n        return hookDetail.callback(hookDetail.hookedCommand, this);\n      });\n    });\n    return result;\n  }\n\n  /**\n   * Process arguments in context of this command.\n   * Returns action result, in case it is a promise.\n   *\n   * @api private\n   */\n\n  _parseCommand(operands, unknown) {\n    const parsed = this.parseOptions(unknown);\n    this._parseOptionsEnv(); // after cli, so parseArg not called on both cli and env\n    operands = operands.concat(parsed.operands);\n    unknown = parsed.unknown;\n    this.args = operands.concat(unknown);\n\n    if (operands && this._findCommand(operands[0])) {\n      return this._dispatchSubcommand(operands[0], operands.slice(1), unknown);\n    }\n    if (this._hasImplicitHelpCommand() && operands[0] === this._helpCommandName) {\n      if (operands.length === 1) {\n        this.help();\n      }\n      return this._dispatchSubcommand(operands[1], [], [this._helpLongFlag]);\n    }\n    if (this._defaultCommandName) {\n      outputHelpIfRequested(this, unknown); // Run the help for default command from parent rather than passing to default command\n      return this._dispatchSubcommand(this._defaultCommandName, operands, unknown);\n    }\n    if (this.commands.length && this.args.length === 0 && !this._actionHandler && !this._defaultCommandName) {\n      // probably missing subcommand and no handler, user needs help (and exit)\n      this.help({ error: true });\n    }\n\n    outputHelpIfRequested(this, parsed.unknown);\n    this._checkForMissingMandatoryOptions();\n\n    // We do not always call this check to avoid masking a \"better\" error, like unknown command.\n    const checkForUnknownOptions = () => {\n      if (parsed.unknown.length > 0) {\n        this.unknownOption(parsed.unknown[0]);\n      }\n    };\n\n    const commandEvent = `command:${this.name()}`;\n    if (this._actionHandler) {\n      checkForUnknownOptions();\n      this._processArguments();\n\n      let actionResult;\n      actionResult = this._chainOrCallHooks(actionResult, 'preAction');\n      actionResult = this._chainOrCall(actionResult, () => this._actionHandler(this.processedArgs));\n      if (this.parent) this.parent.emit(commandEvent, operands, unknown); // legacy\n      actionResult = this._chainOrCallHooks(actionResult, 'postAction');\n      return actionResult;\n    }\n    if (this.parent && this.parent.listenerCount(commandEvent)) {\n      checkForUnknownOptions();\n      this._processArguments();\n      this.parent.emit(commandEvent, operands, unknown); // legacy\n    } else if (operands.length) {\n      if (this._findCommand('*')) { // legacy default command\n        return this._dispatchSubcommand('*', operands, unknown);\n      }\n      if (this.listenerCount('command:*')) {\n        // skip option check, emit event for possible misspelling suggestion\n        this.emit('command:*', operands, unknown);\n      } else if (this.commands.length) {\n        this.unknownCommand();\n      } else {\n        checkForUnknownOptions();\n        this._processArguments();\n      }\n    } else if (this.commands.length) {\n      checkForUnknownOptions();\n      // This command has subcommands and nothing hooked up at this level, so display help (and exit).\n      this.help({ error: true });\n    } else {\n      checkForUnknownOptions();\n      this._processArguments();\n      // fall through for caller to handle after calling .parse()\n    }\n  };\n\n  /**\n   * Find matching command.\n   *\n   * @api private\n   */\n  _findCommand(name) {\n    if (!name) return undefined;\n    return this.commands.find(cmd => cmd._name === name || cmd._aliases.includes(name));\n  };\n\n  /**\n   * Return an option matching `arg` if any.\n   *\n   * @param {string} arg\n   * @return {Option}\n   * @api private\n   */\n\n  _findOption(arg) {\n    return this.options.find(option => option.is(arg));\n  };\n\n  /**\n   * Display an error message if a mandatory option does not have a value.\n   * Lazy calling after checking for help flags from leaf subcommand.\n   *\n   * @api private\n   */\n\n  _checkForMissingMandatoryOptions() {\n    // Walk up hierarchy so can call in subcommand after checking for displaying help.\n    for (let cmd = this; cmd; cmd = cmd.parent) {\n      cmd.options.forEach((anOption) => {\n        if (anOption.mandatory && (cmd.getOptionValue(anOption.attributeName()) === undefined)) {\n          cmd.missingMandatoryOptionValue(anOption);\n        }\n      });\n    }\n  };\n\n  /**\n   * Parse options from `argv` removing known options,\n   * and return argv split into operands and unknown arguments.\n   *\n   * Examples:\n   *\n   *     argv => operands, unknown\n   *     --known kkk op => [op], []\n   *     op --known kkk => [op], []\n   *     sub --unknown uuu op => [sub], [--unknown uuu op]\n   *     sub -- --unknown uuu op => [sub --unknown uuu op], []\n   *\n   * @param {String[]} argv\n   * @return {{operands: String[], unknown: String[]}}\n   */\n\n  parseOptions(argv) {\n    const operands = []; // operands, not options or values\n    const unknown = []; // first unknown option and remaining unknown args\n    let dest = operands;\n    const args = argv.slice();\n\n    function maybeOption(arg) {\n      return arg.length > 1 && arg[0] === '-';\n    }\n\n    // parse options\n    let activeVariadicOption = null;\n    while (args.length) {\n      const arg = args.shift();\n\n      // literal\n      if (arg === '--') {\n        if (dest === unknown) dest.push(arg);\n        dest.push(...args);\n        break;\n      }\n\n      if (activeVariadicOption && !maybeOption(arg)) {\n        this.emit(`option:${activeVariadicOption.name()}`, arg);\n        continue;\n      }\n      activeVariadicOption = null;\n\n      if (maybeOption(arg)) {\n        const option = this._findOption(arg);\n        // recognised option, call listener to assign value with possible custom processing\n        if (option) {\n          if (option.required) {\n            const value = args.shift();\n            if (value === undefined) this.optionMissingArgument(option);\n            this.emit(`option:${option.name()}`, value);\n          } else if (option.optional) {\n            let value = null;\n            // historical behaviour is optional value is following arg unless an option\n            if (args.length > 0 && !maybeOption(args[0])) {\n              value = args.shift();\n            }\n            this.emit(`option:${option.name()}`, value);\n          } else { // boolean flag\n            this.emit(`option:${option.name()}`);\n          }\n          activeVariadicOption = option.variadic ? option : null;\n          continue;\n        }\n      }\n\n      // Look for combo options following single dash, eat first one if known.\n      if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {\n        const option = this._findOption(`-${arg[1]}`);\n        if (option) {\n          if (option.required || (option.optional && this._combineFlagAndOptionalValue)) {\n            // option with value following in same argument\n            this.emit(`option:${option.name()}`, arg.slice(2));\n          } else {\n            // boolean option, emit and put back remainder of arg for further processing\n            this.emit(`option:${option.name()}`);\n            args.unshift(`-${arg.slice(2)}`);\n          }\n          continue;\n        }\n      }\n\n      // Look for known long flag with value, like --foo=bar\n      if (/^--[^=]+=/.test(arg)) {\n        const index = arg.indexOf('=');\n        const option = this._findOption(arg.slice(0, index));\n        if (option && (option.required || option.optional)) {\n          this.emit(`option:${option.name()}`, arg.slice(index + 1));\n          continue;\n        }\n      }\n\n      // Not a recognised option by this command.\n      // Might be a command-argument, or subcommand option, or unknown option, or help command or option.\n\n      // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.\n      if (maybeOption(arg)) {\n        dest = unknown;\n      }\n\n      // If using positionalOptions, stop processing our options at subcommand.\n      if ((this._enablePositionalOptions || this._passThroughOptions) && operands.length === 0 && unknown.length === 0) {\n        if (this._findCommand(arg)) {\n          operands.push(arg);\n          if (args.length > 0) unknown.push(...args);\n          break;\n        } else if (arg === this._helpCommandName && this._hasImplicitHelpCommand()) {\n          operands.push(arg);\n          if (args.length > 0) operands.push(...args);\n          break;\n        } else if (this._defaultCommandName) {\n          unknown.push(arg);\n          if (args.length > 0) unknown.push(...args);\n          break;\n        }\n      }\n\n      // If using passThroughOptions, stop processing options at first command-argument.\n      if (this._passThroughOptions) {\n        dest.push(arg);\n        if (args.length > 0) dest.push(...args);\n        break;\n      }\n\n      // add arg\n      dest.push(arg);\n    }\n\n    return { operands, unknown };\n  };\n\n  /**\n   * Return an object containing options as key-value pairs\n   *\n   * @return {Object}\n   */\n  opts() {\n    if (this._storeOptionsAsProperties) {\n      // Preserve original behaviour so backwards compatible when still using properties\n      const result = {};\n      const len = this.options.length;\n\n      for (let i = 0; i < len; i++) {\n        const key = this.options[i].attributeName();\n        result[key] = key === this._versionOptionName ? this._version : this[key];\n      }\n      return result;\n    }\n\n    return this._optionValues;\n  };\n\n  /**\n   * Internal bottleneck for handling of parsing errors.\n   *\n   * @api private\n   */\n  _displayError(exitCode, code, message) {\n    this._outputConfiguration.outputError(`${message}\\n`, this._outputConfiguration.writeErr);\n    if (typeof this._showHelpAfterError === 'string') {\n      this._outputConfiguration.writeErr(`${this._showHelpAfterError}\\n`);\n    } else if (this._showHelpAfterError) {\n      this._outputConfiguration.writeErr('\\n');\n      this.outputHelp({ error: true });\n    }\n    this._exit(exitCode, code, message);\n  }\n\n  /**\n   * Apply any option related environment variables, if option does\n   * not have a value from cli or client code.\n   *\n   * @api private\n   */\n  _parseOptionsEnv() {\n    this.options.forEach((option) => {\n      if (option.envVar && option.envVar in process.env) {\n        const optionKey = option.attributeName();\n        // Priority check. Do not overwrite cli or options from unknown source (client-code).\n        if (this.getOptionValue(optionKey) === undefined || ['default', 'config', 'env'].includes(this.getOptionValueSource(optionKey))) {\n          if (option.required || option.optional) { // option can take a value\n            // keep very simple, optional always takes value\n            this.emit(`optionEnv:${option.name()}`, process.env[option.envVar]);\n          } else { // boolean\n            // keep very simple, only care that envVar defined and not the value\n            this.emit(`optionEnv:${option.name()}`);\n          }\n        }\n      }\n    });\n  }\n\n  /**\n   * Argument `name` is missing.\n   *\n   * @param {string} name\n   * @api private\n   */\n\n  missingArgument(name) {\n    const message = `error: missing required argument '${name}'`;\n    this._displayError(1, 'commander.missingArgument', message);\n  };\n\n  /**\n   * `Option` is missing an argument.\n   *\n   * @param {Option} option\n   * @api private\n   */\n\n  optionMissingArgument(option) {\n    const message = `error: option '${option.flags}' argument missing`;\n    this._displayError(1, 'commander.optionMissingArgument', message);\n  };\n\n  /**\n   * `Option` does not have a value, and is a mandatory option.\n   *\n   * @param {Option} option\n   * @api private\n   */\n\n  missingMandatoryOptionValue(option) {\n    const message = `error: required option '${option.flags}' not specified`;\n    this._displayError(1, 'commander.missingMandatoryOptionValue', message);\n  };\n\n  /**\n   * Unknown option `flag`.\n   *\n   * @param {string} flag\n   * @api private\n   */\n\n  unknownOption(flag) {\n    if (this._allowUnknownOption) return;\n    let suggestion = '';\n\n    if (flag.startsWith('--') && this._showSuggestionAfterError) {\n      // Looping to pick up the global options too\n      let candidateFlags = [];\n      let command = this;\n      do {\n        const moreFlags = command.createHelp().visibleOptions(command)\n          .filter(option => option.long)\n          .map(option => option.long);\n        candidateFlags = candidateFlags.concat(moreFlags);\n        command = command.parent;\n      } while (command && !command._enablePositionalOptions);\n      suggestion = suggestSimilar(flag, candidateFlags);\n    }\n\n    const message = `error: unknown option '${flag}'${suggestion}`;\n    this._displayError(1, 'commander.unknownOption', message);\n  };\n\n  /**\n   * Excess arguments, more than expected.\n   *\n   * @param {string[]} receivedArgs\n   * @api private\n   */\n\n  _excessArguments(receivedArgs) {\n    if (this._allowExcessArguments) return;\n\n    const expected = this._args.length;\n    const s = (expected === 1) ? '' : 's';\n    const forSubcommand = this.parent ? ` for '${this.name()}'` : '';\n    const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${receivedArgs.length}.`;\n    this._displayError(1, 'commander.excessArguments', message);\n  };\n\n  /**\n   * Unknown command.\n   *\n   * @api private\n   */\n\n  unknownCommand() {\n    const unknownName = this.args[0];\n    let suggestion = '';\n\n    if (this._showSuggestionAfterError) {\n      const candidateNames = [];\n      this.createHelp().visibleCommands(this).forEach((command) => {\n        candidateNames.push(command.name());\n        // just visible alias\n        if (command.alias()) candidateNames.push(command.alias());\n      });\n      suggestion = suggestSimilar(unknownName, candidateNames);\n    }\n\n    const message = `error: unknown command '${unknownName}'${suggestion}`;\n    this._displayError(1, 'commander.unknownCommand', message);\n  };\n\n  /**\n   * Set the program version to `str`.\n   *\n   * This method auto-registers the \"-V, --version\" flag\n   * which will print the version number when passed.\n   *\n   * You can optionally supply the  flags and description to override the defaults.\n   *\n   * @param {string} str\n   * @param {string} [flags]\n   * @param {string} [description]\n   * @return {this | string} `this` command for chaining, or version string if no arguments\n   */\n\n  version(str, flags, description) {\n    if (str === undefined) return this._version;\n    this._version = str;\n    flags = flags || '-V, --version';\n    description = description || 'output the version number';\n    const versionOption = this.createOption(flags, description);\n    this._versionOptionName = versionOption.attributeName();\n    this.options.push(versionOption);\n    this.on('option:' + versionOption.name(), () => {\n      this._outputConfiguration.writeOut(`${str}\\n`);\n      this._exit(0, 'commander.version', str);\n    });\n    return this;\n  };\n\n  /**\n   * Set the description to `str`.\n   *\n   * @param {string} [str]\n   * @param {Object} [argsDescription]\n   * @return {string|Command}\n   */\n  description(str, argsDescription) {\n    if (str === undefined && argsDescription === undefined) return this._description;\n    this._description = str;\n    if (argsDescription) {\n      this._argsDescription = argsDescription;\n    }\n    return this;\n  };\n\n  /**\n   * Set an alias for the command.\n   *\n   * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.\n   *\n   * @param {string} [alias]\n   * @return {string|Command}\n   */\n\n  alias(alias) {\n    if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility\n\n    /** @type {Command} */\n    let command = this;\n    if (this.commands.length !== 0 && this.commands[this.commands.length - 1]._executableHandler) {\n      // assume adding alias for last added executable subcommand, rather than this\n      command = this.commands[this.commands.length - 1];\n    }\n\n    if (alias === command._name) throw new Error('Command alias can\\'t be the same as its name');\n\n    command._aliases.push(alias);\n    return this;\n  };\n\n  /**\n   * Set aliases for the command.\n   *\n   * Only the first alias is shown in the auto-generated help.\n   *\n   * @param {string[]} [aliases]\n   * @return {string[]|Command}\n   */\n\n  aliases(aliases) {\n    // Getter for the array of aliases is the main reason for having aliases() in addition to alias().\n    if (aliases === undefined) return this._aliases;\n\n    aliases.forEach((alias) => this.alias(alias));\n    return this;\n  };\n\n  /**\n   * Set / get the command usage `str`.\n   *\n   * @param {string} [str]\n   * @return {String|Command}\n   */\n\n  usage(str) {\n    if (str === undefined) {\n      if (this._usage) return this._usage;\n\n      const args = this._args.map((arg) => {\n        return humanReadableArgName(arg);\n      });\n      return [].concat(\n        (this.options.length || this._hasHelpOption ? '[options]' : []),\n        (this.commands.length ? '[command]' : []),\n        (this._args.length ? args : [])\n      ).join(' ');\n    }\n\n    this._usage = str;\n    return this;\n  };\n\n  /**\n   * Get or set the name of the command\n   *\n   * @param {string} [str]\n   * @return {string|Command}\n   */\n\n  name(str) {\n    if (str === undefined) return this._name;\n    this._name = str;\n    return this;\n  };\n\n  /**\n   * Return program help documentation.\n   *\n   * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout\n   * @return {string}\n   */\n\n  helpInformation(contextOptions) {\n    const helper = this.createHelp();\n    if (helper.helpWidth === undefined) {\n      helper.helpWidth = (contextOptions && contextOptions.error) ? this._outputConfiguration.getErrHelpWidth() : this._outputConfiguration.getOutHelpWidth();\n    }\n    return helper.formatHelp(this, helper);\n  };\n\n  /**\n   * @api private\n   */\n\n  _getHelpContext(contextOptions) {\n    contextOptions = contextOptions || {};\n    const context = { error: !!contextOptions.error };\n    let write;\n    if (context.error) {\n      write = (arg) => this._outputConfiguration.writeErr(arg);\n    } else {\n      write = (arg) => this._outputConfiguration.writeOut(arg);\n    }\n    context.write = contextOptions.write || write;\n    context.command = this;\n    return context;\n  }\n\n  /**\n   * Output help information for this command.\n   *\n   * Outputs built-in help, and custom text added using `.addHelpText()`.\n   *\n   * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n   */\n\n  outputHelp(contextOptions) {\n    let deprecatedCallback;\n    if (typeof contextOptions === 'function') {\n      deprecatedCallback = contextOptions;\n      contextOptions = undefined;\n    }\n    const context = this._getHelpContext(contextOptions);\n\n    getCommandAndParents(this).reverse().forEach(command => command.emit('beforeAllHelp', context));\n    this.emit('beforeHelp', context);\n\n    let helpInformation = this.helpInformation(context);\n    if (deprecatedCallback) {\n      helpInformation = deprecatedCallback(helpInformation);\n      if (typeof helpInformation !== 'string' && !Buffer.isBuffer(helpInformation)) {\n        throw new Error('outputHelp callback must return a string or a Buffer');\n      }\n    }\n    context.write(helpInformation);\n\n    this.emit(this._helpLongFlag); // deprecated\n    this.emit('afterHelp', context);\n    getCommandAndParents(this).forEach(command => command.emit('afterAllHelp', context));\n  };\n\n  /**\n   * You can pass in flags and a description to override the help\n   * flags and help description for your command. Pass in false to\n   * disable the built-in help option.\n   *\n   * @param {string | boolean} [flags]\n   * @param {string} [description]\n   * @return {Command} `this` command for chaining\n   */\n\n  helpOption(flags, description) {\n    if (typeof flags === 'boolean') {\n      this._hasHelpOption = flags;\n      return this;\n    }\n    this._helpFlags = flags || this._helpFlags;\n    this._helpDescription = description || this._helpDescription;\n\n    const helpFlags = splitOptionFlags(this._helpFlags);\n    this._helpShortFlag = helpFlags.shortFlag;\n    this._helpLongFlag = helpFlags.longFlag;\n\n    return this;\n  };\n\n  /**\n   * Output help information and exit.\n   *\n   * Outputs built-in help, and custom text added using `.addHelpText()`.\n   *\n   * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n   */\n\n  help(contextOptions) {\n    this.outputHelp(contextOptions);\n    let exitCode = process.exitCode || 0;\n    if (exitCode === 0 && contextOptions && typeof contextOptions !== 'function' && contextOptions.error) {\n      exitCode = 1;\n    }\n    // message: do not have all displayed text available so only passing placeholder.\n    this._exit(exitCode, 'commander.help', '(outputHelp)');\n  };\n\n  /**\n   * Add additional text to be displayed with the built-in help.\n   *\n   * Position is 'before' or 'after' to affect just this command,\n   * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.\n   *\n   * @param {string} position - before or after built-in help\n   * @param {string | Function} text - string to add, or a function returning a string\n   * @return {Command} `this` command for chaining\n   */\n  addHelpText(position, text) {\n    const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];\n    if (!allowedValues.includes(position)) {\n      throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n    }\n    const helpEvent = `${position}Help`;\n    this.on(helpEvent, (context) => {\n      let helpStr;\n      if (typeof text === 'function') {\n        helpStr = text({ error: context.error, command: context.command });\n      } else {\n        helpStr = text;\n      }\n      // Ignore falsy value when nothing to output.\n      if (helpStr) {\n        context.write(`${helpStr}\\n`);\n      }\n    });\n    return this;\n  }\n};\n\n/**\n * Output help information if help flags specified\n *\n * @param {Command} cmd - command to output help for\n * @param {Array} args - array of options to search for help flags\n * @api private\n */\n\nfunction outputHelpIfRequested(cmd, args) {\n  const helpOption = cmd._hasHelpOption && args.find(arg => arg === cmd._helpLongFlag || arg === cmd._helpShortFlag);\n  if (helpOption) {\n    cmd.outputHelp();\n    // (Do not have all displayed text available so only passing placeholder.)\n    cmd._exit(0, 'commander.helpDisplayed', '(outputHelp)');\n  }\n}\n\n/**\n * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).\n *\n * @param {string[]} args - array of arguments from node.execArgv\n * @returns {string[]}\n * @api private\n */\n\nfunction incrementNodeInspectorPort(args) {\n  // Testing for these options:\n  //  --inspect[=[host:]port]\n  //  --inspect-brk[=[host:]port]\n  //  --inspect-port=[host:]port\n  return args.map((arg) => {\n    if (!arg.startsWith('--inspect')) {\n      return arg;\n    }\n    let debugOption;\n    let debugHost = '127.0.0.1';\n    let debugPort = '9229';\n    let match;\n    if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {\n      // e.g. --inspect\n      debugOption = match[1];\n    } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null) {\n      debugOption = match[1];\n      if (/^\\d+$/.test(match[3])) {\n        // e.g. --inspect=1234\n        debugPort = match[3];\n      } else {\n        // e.g. --inspect=localhost\n        debugHost = match[3];\n      }\n    } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null) {\n      // e.g. --inspect=localhost:1234\n      debugOption = match[1];\n      debugHost = match[3];\n      debugPort = match[4];\n    }\n\n    if (debugOption && debugPort !== '0') {\n      return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;\n    }\n    return arg;\n  });\n}\n\n/**\n * @param {Command} startCommand\n * @returns {Command[]}\n * @api private\n */\n\nfunction getCommandAndParents(startCommand) {\n  const result = [];\n  for (let command = startCommand; command; command = command.parent) {\n    result.push(command);\n  }\n  return result;\n}\n\nexports.Command = Command;\n","const { Argument } = require('./lib/argument.js');\nconst { Command } = require('./lib/command.js');\nconst { CommanderError, InvalidArgumentError } = require('./lib/error.js');\nconst { Help } = require('./lib/help.js');\nconst { Option } = require('./lib/option.js');\n\n// @ts-check\n\n/**\n * Expose the root command.\n */\n\nexports = module.exports = new Command();\nexports.program = exports; // More explicit access to global command.\n// Implicit export of createArgument, createCommand, and createOption.\n\n/**\n * Expose classes\n */\n\nexports.Argument = Argument;\nexports.Command = Command;\nexports.CommanderError = CommanderError;\nexports.Help = Help;\nexports.InvalidArgumentError = InvalidArgumentError;\nexports.InvalidOptionArgumentError = InvalidArgumentError; // Deprecated\nexports.Option = Option;\n","/*!\n * node-progress\n * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n * MIT Licensed\n */\n\n/**\n * Expose `ProgressBar`.\n */\n\nexports = module.exports = ProgressBar;\n\n/**\n * Initialize a `ProgressBar` with the given `fmt` string and `options` or\n * `total`.\n *\n * Options:\n *\n *   - `curr` current completed index\n *   - `total` total number of ticks to complete\n *   - `width` the displayed width of the progress bar defaulting to total\n *   - `stream` the output stream defaulting to stderr\n *   - `head` head character defaulting to complete character\n *   - `complete` completion character defaulting to \"=\"\n *   - `incomplete` incomplete character defaulting to \"-\"\n *   - `renderThrottle` minimum time between updates in milliseconds defaulting to 16\n *   - `callback` optional function to call when the progress bar completes\n *   - `clear` will clear the progress bar upon termination\n *\n * Tokens:\n *\n *   - `:bar` the progress bar itself\n *   - `:current` current tick number\n *   - `:total` total ticks\n *   - `:elapsed` time elapsed in seconds\n *   - `:percent` completion percentage\n *   - `:eta` eta in seconds\n *   - `:rate` rate of ticks per second\n *\n * @param {string} fmt\n * @param {object|number} options or total\n * @api public\n */\n\nfunction ProgressBar(fmt, options) {\n  this.stream = options.stream || process.stderr;\n\n  if (typeof(options) == 'number') {\n    var total = options;\n    options = {};\n    options.total = total;\n  } else {\n    options = options || {};\n    if ('string' != typeof fmt) throw new Error('format required');\n    if ('number' != typeof options.total) throw new Error('total required');\n  }\n\n  this.fmt = fmt;\n  this.curr = options.curr || 0;\n  this.total = options.total;\n  this.width = options.width || this.total;\n  this.clear = options.clear\n  this.chars = {\n    complete   : options.complete || '=',\n    incomplete : options.incomplete || '-',\n    head       : options.head || (options.complete || '=')\n  };\n  this.renderThrottle = options.renderThrottle !== 0 ? (options.renderThrottle || 16) : 0;\n  this.lastRender = -Infinity;\n  this.callback = options.callback || function () {};\n  this.tokens = {};\n  this.lastDraw = '';\n}\n\n/**\n * \"tick\" the progress bar with optional `len` and optional `tokens`.\n *\n * @param {number|object} len or tokens\n * @param {object} tokens\n * @api public\n */\n\nProgressBar.prototype.tick = function(len, tokens){\n  if (len !== 0)\n    len = len || 1;\n\n  // swap tokens\n  if ('object' == typeof len) tokens = len, len = 1;\n  if (tokens) this.tokens = tokens;\n\n  // start time for eta\n  if (0 == this.curr) this.start = new Date;\n\n  this.curr += len\n\n  // try to render\n  this.render();\n\n  // progress complete\n  if (this.curr >= this.total) {\n    this.render(undefined, true);\n    this.complete = true;\n    this.terminate();\n    this.callback(this);\n    return;\n  }\n};\n\n/**\n * Method to render the progress bar with optional `tokens` to place in the\n * progress bar's `fmt` field.\n *\n * @param {object} tokens\n * @api public\n */\n\nProgressBar.prototype.render = function (tokens, force) {\n  force = force !== undefined ? force : false;\n  if (tokens) this.tokens = tokens;\n\n  if (!this.stream.isTTY) return;\n\n  var now = Date.now();\n  var delta = now - this.lastRender;\n  if (!force && (delta < this.renderThrottle)) {\n    return;\n  } else {\n    this.lastRender = now;\n  }\n\n  var ratio = this.curr / this.total;\n  ratio = Math.min(Math.max(ratio, 0), 1);\n\n  var percent = Math.floor(ratio * 100);\n  var incomplete, complete, completeLength;\n  var elapsed = new Date - this.start;\n  var eta = (percent == 100) ? 0 : elapsed * (this.total / this.curr - 1);\n  var rate = this.curr / (elapsed / 1000);\n\n  /* populate the bar template with percentages and timestamps */\n  var str = this.fmt\n    .replace(':current', this.curr)\n    .replace(':total', this.total)\n    .replace(':elapsed', isNaN(elapsed) ? '0.0' : (elapsed / 1000).toFixed(1))\n    .replace(':eta', (isNaN(eta) || !isFinite(eta)) ? '0.0' : (eta / 1000)\n      .toFixed(1))\n    .replace(':percent', percent.toFixed(0) + '%')\n    .replace(':rate', Math.round(rate));\n\n  /* compute the available space (non-zero) for the bar */\n  var availableSpace = Math.max(0, this.stream.columns - str.replace(':bar', '').length);\n  if(availableSpace && process.platform === 'win32'){\n    availableSpace = availableSpace - 1;\n  }\n\n  var width = Math.min(this.width, availableSpace);\n\n  /* TODO: the following assumes the user has one ':bar' token */\n  completeLength = Math.round(width * ratio);\n  complete = Array(Math.max(0, completeLength + 1)).join(this.chars.complete);\n  incomplete = Array(Math.max(0, width - completeLength + 1)).join(this.chars.incomplete);\n\n  /* add head to the complete string */\n  if(completeLength > 0)\n    complete = complete.slice(0, -1) + this.chars.head;\n\n  /* fill in the actual progress bar */\n  str = str.replace(':bar', complete + incomplete);\n\n  /* replace the extra tokens */\n  if (this.tokens) for (var key in this.tokens) str = str.replace(':' + key, this.tokens[key]);\n\n  if (this.lastDraw !== str) {\n    this.stream.cursorTo(0);\n    this.stream.write(str);\n    this.stream.clearLine(1);\n    this.lastDraw = str;\n  }\n};\n\n/**\n * \"update\" the progress bar to represent an exact percentage.\n * The ratio (between 0 and 1) specified will be multiplied by `total` and\n * floored, representing the closest available \"tick.\" For example, if a\n * progress bar has a length of 3 and `update(0.5)` is called, the progress\n * will be set to 1.\n *\n * A ratio of 0.5 will attempt to set the progress to halfway.\n *\n * @param {number} ratio The ratio (between 0 and 1 inclusive) to set the\n *   overall completion to.\n * @api public\n */\n\nProgressBar.prototype.update = function (ratio, tokens) {\n  var goal = Math.floor(ratio * this.total);\n  var delta = goal - this.curr;\n\n  this.tick(delta, tokens);\n};\n\n/**\n * \"interrupt\" the progress bar and write a message above it.\n * @param {string} message The message to write.\n * @api public\n */\n\nProgressBar.prototype.interrupt = function (message) {\n  // clear the current line\n  this.stream.clearLine();\n  // move the cursor to the start of the line\n  this.stream.cursorTo(0);\n  // write the message text\n  this.stream.write(message);\n  // terminate the line after writing the message\n  this.stream.write('\\n');\n  // re-display the progress bar with its lastDraw\n  this.stream.write(this.lastDraw);\n};\n\n/**\n * Terminates a progress bar.\n *\n * @api public\n */\n\nProgressBar.prototype.terminate = function () {\n  if (this.clear) {\n    if (this.stream.clearLine) {\n      this.stream.clearLine();\n      this.stream.cursorTo(0);\n    }\n  } else {\n    this.stream.write('\\n');\n  }\n};\n","module.exports = require('./lib/node-progress');\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nfunction noop() {}\n\nexport const promises = {\n  lookup: noop()\n};\n\nexport default promises;\n",null,null,null,null,"import { Address4 } from './ipv4';\nimport { Address6 } from './ipv6';\n\nexport interface ReverseFormOptions {\n  omitSuffix?: boolean;\n}\n\nexport function isInSubnet(this: Address4 | Address6, address: Address4 | Address6) {\n  if (this.subnetMask < address.subnetMask) {\n    return false;\n  }\n\n  if (this.mask(address.subnetMask) === address.mask()) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function isCorrect(defaultBits: number) {\n  return function (this: Address4 | Address6) {\n    if (this.addressMinusSuffix !== this.correctForm()) {\n      return false;\n    }\n\n    if (this.subnetMask === defaultBits && !this.parsedSubnet) {\n      return true;\n    }\n\n    return this.parsedSubnet === String(this.subnetMask);\n  };\n}\n","export const BITS = 32;\nexport const GROUPS = 4;\n\nexport const RE_ADDRESS = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/g;\n\nexport const RE_SUBNET_STRING = /\\/\\d{1,2}$/;\n","export class AddressError extends Error {\n  parseMessage?: string;\n\n  constructor(message: string, parseMessage?: string) {\n    super(message);\n\n    this.name = 'AddressError';\n\n    if (parseMessage !== null) {\n      this.parseMessage = parseMessage;\n    }\n  }\n}\n","(function(){\n\n    // Copyright (c) 2005  Tom Wu\n    // All Rights Reserved.\n    // See \"LICENSE\" for details.\n\n    // Basic JavaScript BN library - subset useful for RSA encryption.\n\n    // Bits per digit\n    var dbits;\n\n    // JavaScript engine analysis\n    var canary = 0xdeadbeefcafe;\n    var j_lm = ((canary&0xffffff)==0xefcafe);\n\n    // (public) Constructor\n    function BigInteger(a,b,c) {\n      if(a != null)\n        if(\"number\" == typeof a) this.fromNumber(a,b,c);\n        else if(b == null && \"string\" != typeof a) this.fromString(a,256);\n        else this.fromString(a,b);\n    }\n\n    // return new, unset BigInteger\n    function nbi() { return new BigInteger(null); }\n\n    // am: Compute w_j += (x*this_i), propagate carries,\n    // c is initial carry, returns final carry.\n    // c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n    // We need to select the fastest one that works in this environment.\n\n    // am1: use a single mult and divide to get the high bits,\n    // max digit bits should be 26 because\n    // max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n    function am1(i,x,w,j,c,n) {\n      while(--n >= 0) {\n        var v = x*this[i++]+w[j]+c;\n        c = Math.floor(v/0x4000000);\n        w[j++] = v&0x3ffffff;\n      }\n      return c;\n    }\n    // am2 avoids a big mult-and-extract completely.\n    // Max digit bits should be <= 30 because we do bitwise ops\n    // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n    function am2(i,x,w,j,c,n) {\n      var xl = x&0x7fff, xh = x>>15;\n      while(--n >= 0) {\n        var l = this[i]&0x7fff;\n        var h = this[i++]>>15;\n        var m = xh*l+h*xl;\n        l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);\n        c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);\n        w[j++] = l&0x3fffffff;\n      }\n      return c;\n    }\n    // Alternately, set max digit bits to 28 since some\n    // browsers slow down when dealing with 32-bit numbers.\n    function am3(i,x,w,j,c,n) {\n      var xl = x&0x3fff, xh = x>>14;\n      while(--n >= 0) {\n        var l = this[i]&0x3fff;\n        var h = this[i++]>>14;\n        var m = xh*l+h*xl;\n        l = xl*l+((m&0x3fff)<<14)+w[j]+c;\n        c = (l>>28)+(m>>14)+xh*h;\n        w[j++] = l&0xfffffff;\n      }\n      return c;\n    }\n    var inBrowser = typeof navigator !== \"undefined\";\n    if(inBrowser && j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n      BigInteger.prototype.am = am2;\n      dbits = 30;\n    }\n    else if(inBrowser && j_lm && (navigator.appName != \"Netscape\")) {\n      BigInteger.prototype.am = am1;\n      dbits = 26;\n    }\n    else { // Mozilla/Netscape seems to prefer am3\n      BigInteger.prototype.am = am3;\n      dbits = 28;\n    }\n\n    BigInteger.prototype.DB = dbits;\n    BigInteger.prototype.DM = ((1<<dbits)-1);\n    BigInteger.prototype.DV = (1<<dbits);\n\n    var BI_FP = 52;\n    BigInteger.prototype.FV = Math.pow(2,BI_FP);\n    BigInteger.prototype.F1 = BI_FP-dbits;\n    BigInteger.prototype.F2 = 2*dbits-BI_FP;\n\n    // Digit conversions\n    var BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n    var BI_RC = new Array();\n    var rr,vv;\n    rr = \"0\".charCodeAt(0);\n    for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;\n    rr = \"a\".charCodeAt(0);\n    for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\n    rr = \"A\".charCodeAt(0);\n    for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\n\n    function int2char(n) { return BI_RM.charAt(n); }\n    function intAt(s,i) {\n      var c = BI_RC[s.charCodeAt(i)];\n      return (c==null)?-1:c;\n    }\n\n    // (protected) copy this to r\n    function bnpCopyTo(r) {\n      for(var i = this.t-1; i >= 0; --i) r[i] = this[i];\n      r.t = this.t;\n      r.s = this.s;\n    }\n\n    // (protected) set from integer value x, -DV <= x < DV\n    function bnpFromInt(x) {\n      this.t = 1;\n      this.s = (x<0)?-1:0;\n      if(x > 0) this[0] = x;\n      else if(x < -1) this[0] = x+this.DV;\n      else this.t = 0;\n    }\n\n    // return bigint initialized to value\n    function nbv(i) { var r = nbi(); r.fromInt(i); return r; }\n\n    // (protected) set from string and radix\n    function bnpFromString(s,b) {\n      var k;\n      if(b == 16) k = 4;\n      else if(b == 8) k = 3;\n      else if(b == 256) k = 8; // byte array\n      else if(b == 2) k = 1;\n      else if(b == 32) k = 5;\n      else if(b == 4) k = 2;\n      else { this.fromRadix(s,b); return; }\n      this.t = 0;\n      this.s = 0;\n      var i = s.length, mi = false, sh = 0;\n      while(--i >= 0) {\n        var x = (k==8)?s[i]&0xff:intAt(s,i);\n        if(x < 0) {\n          if(s.charAt(i) == \"-\") mi = true;\n          continue;\n        }\n        mi = false;\n        if(sh == 0)\n          this[this.t++] = x;\n        else if(sh+k > this.DB) {\n          this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<<sh;\n          this[this.t++] = (x>>(this.DB-sh));\n        }\n        else\n          this[this.t-1] |= x<<sh;\n        sh += k;\n        if(sh >= this.DB) sh -= this.DB;\n      }\n      if(k == 8 && (s[0]&0x80) != 0) {\n        this.s = -1;\n        if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)<<sh;\n      }\n      this.clamp();\n      if(mi) BigInteger.ZERO.subTo(this,this);\n    }\n\n    // (protected) clamp off excess high words\n    function bnpClamp() {\n      var c = this.s&this.DM;\n      while(this.t > 0 && this[this.t-1] == c) --this.t;\n    }\n\n    // (public) return string representation in given radix\n    function bnToString(b) {\n      if(this.s < 0) return \"-\"+this.negate().toString(b);\n      var k;\n      if(b == 16) k = 4;\n      else if(b == 8) k = 3;\n      else if(b == 2) k = 1;\n      else if(b == 32) k = 5;\n      else if(b == 4) k = 2;\n      else return this.toRadix(b);\n      var km = (1<<k)-1, d, m = false, r = \"\", i = this.t;\n      var p = this.DB-(i*this.DB)%k;\n      if(i-- > 0) {\n        if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); }\n        while(i >= 0) {\n          if(p < k) {\n            d = (this[i]&((1<<p)-1))<<(k-p);\n            d |= this[--i]>>(p+=this.DB-k);\n          }\n          else {\n            d = (this[i]>>(p-=k))&km;\n            if(p <= 0) { p += this.DB; --i; }\n          }\n          if(d > 0) m = true;\n          if(m) r += int2char(d);\n        }\n      }\n      return m?r:\"0\";\n    }\n\n    // (public) -this\n    function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }\n\n    // (public) |this|\n    function bnAbs() { return (this.s<0)?this.negate():this; }\n\n    // (public) return + if this > a, - if this < a, 0 if equal\n    function bnCompareTo(a) {\n      var r = this.s-a.s;\n      if(r != 0) return r;\n      var i = this.t;\n      r = i-a.t;\n      if(r != 0) return (this.s<0)?-r:r;\n      while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;\n      return 0;\n    }\n\n    // returns bit length of the integer x\n    function nbits(x) {\n      var r = 1, t;\n      if((t=x>>>16) != 0) { x = t; r += 16; }\n      if((t=x>>8) != 0) { x = t; r += 8; }\n      if((t=x>>4) != 0) { x = t; r += 4; }\n      if((t=x>>2) != 0) { x = t; r += 2; }\n      if((t=x>>1) != 0) { x = t; r += 1; }\n      return r;\n    }\n\n    // (public) return the number of bits in \"this\"\n    function bnBitLength() {\n      if(this.t <= 0) return 0;\n      return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));\n    }\n\n    // (protected) r = this << n*DB\n    function bnpDLShiftTo(n,r) {\n      var i;\n      for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];\n      for(i = n-1; i >= 0; --i) r[i] = 0;\n      r.t = this.t+n;\n      r.s = this.s;\n    }\n\n    // (protected) r = this >> n*DB\n    function bnpDRShiftTo(n,r) {\n      for(var i = n; i < this.t; ++i) r[i-n] = this[i];\n      r.t = Math.max(this.t-n,0);\n      r.s = this.s;\n    }\n\n    // (protected) r = this << n\n    function bnpLShiftTo(n,r) {\n      var bs = n%this.DB;\n      var cbs = this.DB-bs;\n      var bm = (1<<cbs)-1;\n      var ds = Math.floor(n/this.DB), c = (this.s<<bs)&this.DM, i;\n      for(i = this.t-1; i >= 0; --i) {\n        r[i+ds+1] = (this[i]>>cbs)|c;\n        c = (this[i]&bm)<<bs;\n      }\n      for(i = ds-1; i >= 0; --i) r[i] = 0;\n      r[ds] = c;\n      r.t = this.t+ds+1;\n      r.s = this.s;\n      r.clamp();\n    }\n\n    // (protected) r = this >> n\n    function bnpRShiftTo(n,r) {\n      r.s = this.s;\n      var ds = Math.floor(n/this.DB);\n      if(ds >= this.t) { r.t = 0; return; }\n      var bs = n%this.DB;\n      var cbs = this.DB-bs;\n      var bm = (1<<bs)-1;\n      r[0] = this[ds]>>bs;\n      for(var i = ds+1; i < this.t; ++i) {\n        r[i-ds-1] |= (this[i]&bm)<<cbs;\n        r[i-ds] = this[i]>>bs;\n      }\n      if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<<cbs;\n      r.t = this.t-ds;\n      r.clamp();\n    }\n\n    // (protected) r = this - a\n    function bnpSubTo(a,r) {\n      var i = 0, c = 0, m = Math.min(a.t,this.t);\n      while(i < m) {\n        c += this[i]-a[i];\n        r[i++] = c&this.DM;\n        c >>= this.DB;\n      }\n      if(a.t < this.t) {\n        c -= a.s;\n        while(i < this.t) {\n          c += this[i];\n          r[i++] = c&this.DM;\n          c >>= this.DB;\n        }\n        c += this.s;\n      }\n      else {\n        c += this.s;\n        while(i < a.t) {\n          c -= a[i];\n          r[i++] = c&this.DM;\n          c >>= this.DB;\n        }\n        c -= a.s;\n      }\n      r.s = (c<0)?-1:0;\n      if(c < -1) r[i++] = this.DV+c;\n      else if(c > 0) r[i++] = c;\n      r.t = i;\n      r.clamp();\n    }\n\n    // (protected) r = this * a, r != this,a (HAC 14.12)\n    // \"this\" should be the larger one if appropriate.\n    function bnpMultiplyTo(a,r) {\n      var x = this.abs(), y = a.abs();\n      var i = x.t;\n      r.t = i+y.t;\n      while(--i >= 0) r[i] = 0;\n      for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t);\n      r.s = 0;\n      r.clamp();\n      if(this.s != a.s) BigInteger.ZERO.subTo(r,r);\n    }\n\n    // (protected) r = this^2, r != this (HAC 14.16)\n    function bnpSquareTo(r) {\n      var x = this.abs();\n      var i = r.t = 2*x.t;\n      while(--i >= 0) r[i] = 0;\n      for(i = 0; i < x.t-1; ++i) {\n        var c = x.am(i,x[i],r,2*i,0,1);\n        if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {\n          r[i+x.t] -= x.DV;\n          r[i+x.t+1] = 1;\n        }\n      }\n      if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1);\n      r.s = 0;\n      r.clamp();\n    }\n\n    // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n    // r != q, this != m.  q or r may be null.\n    function bnpDivRemTo(m,q,r) {\n      var pm = m.abs();\n      if(pm.t <= 0) return;\n      var pt = this.abs();\n      if(pt.t < pm.t) {\n        if(q != null) q.fromInt(0);\n        if(r != null) this.copyTo(r);\n        return;\n      }\n      if(r == null) r = nbi();\n      var y = nbi(), ts = this.s, ms = m.s;\n      var nsh = this.DB-nbits(pm[pm.t-1]);   // normalize modulus\n      if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }\n      else { pm.copyTo(y); pt.copyTo(r); }\n      var ys = y.t;\n      var y0 = y[ys-1];\n      if(y0 == 0) return;\n      var yt = y0*(1<<this.F1)+((ys>1)?y[ys-2]>>this.F2:0);\n      var d1 = this.FV/yt, d2 = (1<<this.F1)/yt, e = 1<<this.F2;\n      var i = r.t, j = i-ys, t = (q==null)?nbi():q;\n      y.dlShiftTo(j,t);\n      if(r.compareTo(t) >= 0) {\n        r[r.t++] = 1;\n        r.subTo(t,r);\n      }\n      BigInteger.ONE.dlShiftTo(ys,t);\n      t.subTo(y,y);  // \"negative\" y so we can replace sub with am later\n      while(y.t < ys) y[y.t++] = 0;\n      while(--j >= 0) {\n        // Estimate quotient digit\n        var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);\n        if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) {   // Try it out\n          y.dlShiftTo(j,t);\n          r.subTo(t,r);\n          while(r[i] < --qd) r.subTo(t,r);\n        }\n      }\n      if(q != null) {\n        r.drShiftTo(ys,q);\n        if(ts != ms) BigInteger.ZERO.subTo(q,q);\n      }\n      r.t = ys;\n      r.clamp();\n      if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder\n      if(ts < 0) BigInteger.ZERO.subTo(r,r);\n    }\n\n    // (public) this mod a\n    function bnMod(a) {\n      var r = nbi();\n      this.abs().divRemTo(a,null,r);\n      if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);\n      return r;\n    }\n\n    // Modular reduction using \"classic\" algorithm\n    function Classic(m) { this.m = m; }\n    function cConvert(x) {\n      if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\n      else return x;\n    }\n    function cRevert(x) { return x; }\n    function cReduce(x) { x.divRemTo(this.m,null,x); }\n    function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n    function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n    Classic.prototype.convert = cConvert;\n    Classic.prototype.revert = cRevert;\n    Classic.prototype.reduce = cReduce;\n    Classic.prototype.mulTo = cMulTo;\n    Classic.prototype.sqrTo = cSqrTo;\n\n    // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n    // justification:\n    //         xy == 1 (mod m)\n    //         xy =  1+km\n    //   xy(2-xy) = (1+km)(1-km)\n    // x[y(2-xy)] = 1-k^2m^2\n    // x[y(2-xy)] == 1 (mod m^2)\n    // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n    // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n    // JS multiply \"overflows\" differently from C/C++, so care is needed here.\n    function bnpInvDigit() {\n      if(this.t < 1) return 0;\n      var x = this[0];\n      if((x&1) == 0) return 0;\n      var y = x&3;       // y == 1/x mod 2^2\n      y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4\n      y = (y*(2-(x&0xff)*y))&0xff;   // y == 1/x mod 2^8\n      y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff;    // y == 1/x mod 2^16\n      // last step - calculate inverse mod DV directly;\n      // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n      y = (y*(2-x*y%this.DV))%this.DV;       // y == 1/x mod 2^dbits\n      // we really want the negative inverse, and -DV < y < DV\n      return (y>0)?this.DV-y:-y;\n    }\n\n    // Montgomery reduction\n    function Montgomery(m) {\n      this.m = m;\n      this.mp = m.invDigit();\n      this.mpl = this.mp&0x7fff;\n      this.mph = this.mp>>15;\n      this.um = (1<<(m.DB-15))-1;\n      this.mt2 = 2*m.t;\n    }\n\n    // xR mod m\n    function montConvert(x) {\n      var r = nbi();\n      x.abs().dlShiftTo(this.m.t,r);\n      r.divRemTo(this.m,null,r);\n      if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);\n      return r;\n    }\n\n    // x/R mod m\n    function montRevert(x) {\n      var r = nbi();\n      x.copyTo(r);\n      this.reduce(r);\n      return r;\n    }\n\n    // x = x/R mod m (HAC 14.32)\n    function montReduce(x) {\n      while(x.t <= this.mt2) // pad x so am has enough room later\n        x[x.t++] = 0;\n      for(var i = 0; i < this.m.t; ++i) {\n        // faster way of calculating u0 = x[i]*mp mod DV\n        var j = x[i]&0x7fff;\n        var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;\n        // use am to combine the multiply-shift-add into one call\n        j = i+this.m.t;\n        x[j] += this.m.am(0,u0,x,i,0,this.m.t);\n        // propagate carry\n        while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; }\n      }\n      x.clamp();\n      x.drShiftTo(this.m.t,x);\n      if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n    }\n\n    // r = \"x^2/R mod m\"; x != r\n    function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n    // r = \"xy/R mod m\"; x,y != r\n    function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\n    Montgomery.prototype.convert = montConvert;\n    Montgomery.prototype.revert = montRevert;\n    Montgomery.prototype.reduce = montReduce;\n    Montgomery.prototype.mulTo = montMulTo;\n    Montgomery.prototype.sqrTo = montSqrTo;\n\n    // (protected) true iff this is even\n    function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }\n\n    // (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\n    function bnpExp(e,z) {\n      if(e > 0xffffffff || e < 1) return BigInteger.ONE;\n      var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;\n      g.copyTo(r);\n      while(--i >= 0) {\n        z.sqrTo(r,r2);\n        if((e&(1<<i)) > 0) z.mulTo(r2,g,r);\n        else { var t = r; r = r2; r2 = t; }\n      }\n      return z.revert(r);\n    }\n\n    // (public) this^e % m, 0 <= e < 2^32\n    function bnModPowInt(e,m) {\n      var z;\n      if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);\n      return this.exp(e,z);\n    }\n\n    // protected\n    BigInteger.prototype.copyTo = bnpCopyTo;\n    BigInteger.prototype.fromInt = bnpFromInt;\n    BigInteger.prototype.fromString = bnpFromString;\n    BigInteger.prototype.clamp = bnpClamp;\n    BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n    BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n    BigInteger.prototype.lShiftTo = bnpLShiftTo;\n    BigInteger.prototype.rShiftTo = bnpRShiftTo;\n    BigInteger.prototype.subTo = bnpSubTo;\n    BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n    BigInteger.prototype.squareTo = bnpSquareTo;\n    BigInteger.prototype.divRemTo = bnpDivRemTo;\n    BigInteger.prototype.invDigit = bnpInvDigit;\n    BigInteger.prototype.isEven = bnpIsEven;\n    BigInteger.prototype.exp = bnpExp;\n\n    // public\n    BigInteger.prototype.toString = bnToString;\n    BigInteger.prototype.negate = bnNegate;\n    BigInteger.prototype.abs = bnAbs;\n    BigInteger.prototype.compareTo = bnCompareTo;\n    BigInteger.prototype.bitLength = bnBitLength;\n    BigInteger.prototype.mod = bnMod;\n    BigInteger.prototype.modPowInt = bnModPowInt;\n\n    // \"constants\"\n    BigInteger.ZERO = nbv(0);\n    BigInteger.ONE = nbv(1);\n\n    // Copyright (c) 2005-2009  Tom Wu\n    // All Rights Reserved.\n    // See \"LICENSE\" for details.\n\n    // Extended JavaScript BN functions, required for RSA private ops.\n\n    // Version 1.1: new BigInteger(\"0\", 10) returns \"proper\" zero\n    // Version 1.2: square() API, isProbablePrime fix\n\n    // (public)\n    function bnClone() { var r = nbi(); this.copyTo(r); return r; }\n\n    // (public) return value as integer\n    function bnIntValue() {\n      if(this.s < 0) {\n        if(this.t == 1) return this[0]-this.DV;\n        else if(this.t == 0) return -1;\n      }\n      else if(this.t == 1) return this[0];\n      else if(this.t == 0) return 0;\n      // assumes 16 < DB < 32\n      return ((this[1]&((1<<(32-this.DB))-1))<<this.DB)|this[0];\n    }\n\n    // (public) return value as byte\n    function bnByteValue() { return (this.t==0)?this.s:(this[0]<<24)>>24; }\n\n    // (public) return value as short (assumes DB>=16)\n    function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; }\n\n    // (protected) return x s.t. r^x < DV\n    function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }\n\n    // (public) 0 if this == 0, 1 if this > 0\n    function bnSigNum() {\n      if(this.s < 0) return -1;\n      else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;\n      else return 1;\n    }\n\n    // (protected) convert to radix string\n    function bnpToRadix(b) {\n      if(b == null) b = 10;\n      if(this.signum() == 0 || b < 2 || b > 36) return \"0\";\n      var cs = this.chunkSize(b);\n      var a = Math.pow(b,cs);\n      var d = nbv(a), y = nbi(), z = nbi(), r = \"\";\n      this.divRemTo(d,y,z);\n      while(y.signum() > 0) {\n        r = (a+z.intValue()).toString(b).substr(1) + r;\n        y.divRemTo(d,y,z);\n      }\n      return z.intValue().toString(b) + r;\n    }\n\n    // (protected) convert from radix string\n    function bnpFromRadix(s,b) {\n      this.fromInt(0);\n      if(b == null) b = 10;\n      var cs = this.chunkSize(b);\n      var d = Math.pow(b,cs), mi = false, j = 0, w = 0;\n      for(var i = 0; i < s.length; ++i) {\n        var x = intAt(s,i);\n        if(x < 0) {\n          if(s.charAt(i) == \"-\" && this.signum() == 0) mi = true;\n          continue;\n        }\n        w = b*w+x;\n        if(++j >= cs) {\n          this.dMultiply(d);\n          this.dAddOffset(w,0);\n          j = 0;\n          w = 0;\n        }\n      }\n      if(j > 0) {\n        this.dMultiply(Math.pow(b,j));\n        this.dAddOffset(w,0);\n      }\n      if(mi) BigInteger.ZERO.subTo(this,this);\n    }\n\n    // (protected) alternate constructor\n    function bnpFromNumber(a,b,c) {\n      if(\"number\" == typeof b) {\n        // new BigInteger(int,int,RNG)\n        if(a < 2) this.fromInt(1);\n        else {\n          this.fromNumber(a,c);\n          if(!this.testBit(a-1))    // force MSB set\n            this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);\n          if(this.isEven()) this.dAddOffset(1,0); // force odd\n          while(!this.isProbablePrime(b)) {\n            this.dAddOffset(2,0);\n            if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);\n          }\n        }\n      }\n      else {\n        // new BigInteger(int,RNG)\n        var x = new Array(), t = a&7;\n        x.length = (a>>3)+1;\n        b.nextBytes(x);\n        if(t > 0) x[0] &= ((1<<t)-1); else x[0] = 0;\n        this.fromString(x,256);\n      }\n    }\n\n    // (public) convert to bigendian byte array\n    function bnToByteArray() {\n      var i = this.t, r = new Array();\n      r[0] = this.s;\n      var p = this.DB-(i*this.DB)%8, d, k = 0;\n      if(i-- > 0) {\n        if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p)\n          r[k++] = d|(this.s<<(this.DB-p));\n        while(i >= 0) {\n          if(p < 8) {\n            d = (this[i]&((1<<p)-1))<<(8-p);\n            d |= this[--i]>>(p+=this.DB-8);\n          }\n          else {\n            d = (this[i]>>(p-=8))&0xff;\n            if(p <= 0) { p += this.DB; --i; }\n          }\n          if((d&0x80) != 0) d |= -256;\n          if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;\n          if(k > 0 || d != this.s) r[k++] = d;\n        }\n      }\n      return r;\n    }\n\n    function bnEquals(a) { return(this.compareTo(a)==0); }\n    function bnMin(a) { return(this.compareTo(a)<0)?this:a; }\n    function bnMax(a) { return(this.compareTo(a)>0)?this:a; }\n\n    // (protected) r = this op a (bitwise)\n    function bnpBitwiseTo(a,op,r) {\n      var i, f, m = Math.min(a.t,this.t);\n      for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]);\n      if(a.t < this.t) {\n        f = a.s&this.DM;\n        for(i = m; i < this.t; ++i) r[i] = op(this[i],f);\n        r.t = this.t;\n      }\n      else {\n        f = this.s&this.DM;\n        for(i = m; i < a.t; ++i) r[i] = op(f,a[i]);\n        r.t = a.t;\n      }\n      r.s = op(this.s,a.s);\n      r.clamp();\n    }\n\n    // (public) this & a\n    function op_and(x,y) { return x&y; }\n    function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }\n\n    // (public) this | a\n    function op_or(x,y) { return x|y; }\n    function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }\n\n    // (public) this ^ a\n    function op_xor(x,y) { return x^y; }\n    function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }\n\n    // (public) this & ~a\n    function op_andnot(x,y) { return x&~y; }\n    function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }\n\n    // (public) ~this\n    function bnNot() {\n      var r = nbi();\n      for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i];\n      r.t = this.t;\n      r.s = ~this.s;\n      return r;\n    }\n\n    // (public) this << n\n    function bnShiftLeft(n) {\n      var r = nbi();\n      if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);\n      return r;\n    }\n\n    // (public) this >> n\n    function bnShiftRight(n) {\n      var r = nbi();\n      if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);\n      return r;\n    }\n\n    // return index of lowest 1-bit in x, x < 2^31\n    function lbit(x) {\n      if(x == 0) return -1;\n      var r = 0;\n      if((x&0xffff) == 0) { x >>= 16; r += 16; }\n      if((x&0xff) == 0) { x >>= 8; r += 8; }\n      if((x&0xf) == 0) { x >>= 4; r += 4; }\n      if((x&3) == 0) { x >>= 2; r += 2; }\n      if((x&1) == 0) ++r;\n      return r;\n    }\n\n    // (public) returns index of lowest 1-bit (or -1 if none)\n    function bnGetLowestSetBit() {\n      for(var i = 0; i < this.t; ++i)\n        if(this[i] != 0) return i*this.DB+lbit(this[i]);\n      if(this.s < 0) return this.t*this.DB;\n      return -1;\n    }\n\n    // return number of 1 bits in x\n    function cbit(x) {\n      var r = 0;\n      while(x != 0) { x &= x-1; ++r; }\n      return r;\n    }\n\n    // (public) return number of set bits\n    function bnBitCount() {\n      var r = 0, x = this.s&this.DM;\n      for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x);\n      return r;\n    }\n\n    // (public) true iff nth bit is set\n    function bnTestBit(n) {\n      var j = Math.floor(n/this.DB);\n      if(j >= this.t) return(this.s!=0);\n      return((this[j]&(1<<(n%this.DB)))!=0);\n    }\n\n    // (protected) this op (1<<n)\n    function bnpChangeBit(n,op) {\n      var r = BigInteger.ONE.shiftLeft(n);\n      this.bitwiseTo(r,op,r);\n      return r;\n    }\n\n    // (public) this | (1<<n)\n    function bnSetBit(n) { return this.changeBit(n,op_or); }\n\n    // (public) this & ~(1<<n)\n    function bnClearBit(n) { return this.changeBit(n,op_andnot); }\n\n    // (public) this ^ (1<<n)\n    function bnFlipBit(n) { return this.changeBit(n,op_xor); }\n\n    // (protected) r = this + a\n    function bnpAddTo(a,r) {\n      var i = 0, c = 0, m = Math.min(a.t,this.t);\n      while(i < m) {\n        c += this[i]+a[i];\n        r[i++] = c&this.DM;\n        c >>= this.DB;\n      }\n      if(a.t < this.t) {\n        c += a.s;\n        while(i < this.t) {\n          c += this[i];\n          r[i++] = c&this.DM;\n          c >>= this.DB;\n        }\n        c += this.s;\n      }\n      else {\n        c += this.s;\n        while(i < a.t) {\n          c += a[i];\n          r[i++] = c&this.DM;\n          c >>= this.DB;\n        }\n        c += a.s;\n      }\n      r.s = (c<0)?-1:0;\n      if(c > 0) r[i++] = c;\n      else if(c < -1) r[i++] = this.DV+c;\n      r.t = i;\n      r.clamp();\n    }\n\n    // (public) this + a\n    function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }\n\n    // (public) this - a\n    function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }\n\n    // (public) this * a\n    function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }\n\n    // (public) this^2\n    function bnSquare() { var r = nbi(); this.squareTo(r); return r; }\n\n    // (public) this / a\n    function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }\n\n    // (public) this % a\n    function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }\n\n    // (public) [this/a,this%a]\n    function bnDivideAndRemainder(a) {\n      var q = nbi(), r = nbi();\n      this.divRemTo(a,q,r);\n      return new Array(q,r);\n    }\n\n    // (protected) this *= n, this >= 0, 1 < n < DV\n    function bnpDMultiply(n) {\n      this[this.t] = this.am(0,n-1,this,0,0,this.t);\n      ++this.t;\n      this.clamp();\n    }\n\n    // (protected) this += n << w words, this >= 0\n    function bnpDAddOffset(n,w) {\n      if(n == 0) return;\n      while(this.t <= w) this[this.t++] = 0;\n      this[w] += n;\n      while(this[w] >= this.DV) {\n        this[w] -= this.DV;\n        if(++w >= this.t) this[this.t++] = 0;\n        ++this[w];\n      }\n    }\n\n    // A \"null\" reducer\n    function NullExp() {}\n    function nNop(x) { return x; }\n    function nMulTo(x,y,r) { x.multiplyTo(y,r); }\n    function nSqrTo(x,r) { x.squareTo(r); }\n\n    NullExp.prototype.convert = nNop;\n    NullExp.prototype.revert = nNop;\n    NullExp.prototype.mulTo = nMulTo;\n    NullExp.prototype.sqrTo = nSqrTo;\n\n    // (public) this^e\n    function bnPow(e) { return this.exp(e,new NullExp()); }\n\n    // (protected) r = lower n words of \"this * a\", a.t <= n\n    // \"this\" should be the larger one if appropriate.\n    function bnpMultiplyLowerTo(a,n,r) {\n      var i = Math.min(this.t+a.t,n);\n      r.s = 0; // assumes a,this >= 0\n      r.t = i;\n      while(i > 0) r[--i] = 0;\n      var j;\n      for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t);\n      for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i);\n      r.clamp();\n    }\n\n    // (protected) r = \"this * a\" without lower n words, n > 0\n    // \"this\" should be the larger one if appropriate.\n    function bnpMultiplyUpperTo(a,n,r) {\n      --n;\n      var i = r.t = this.t+a.t-n;\n      r.s = 0; // assumes a,this >= 0\n      while(--i >= 0) r[i] = 0;\n      for(i = Math.max(n-this.t,0); i < a.t; ++i)\n        r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n);\n      r.clamp();\n      r.drShiftTo(1,r);\n    }\n\n    // Barrett modular reduction\n    function Barrett(m) {\n      // setup Barrett\n      this.r2 = nbi();\n      this.q3 = nbi();\n      BigInteger.ONE.dlShiftTo(2*m.t,this.r2);\n      this.mu = this.r2.divide(m);\n      this.m = m;\n    }\n\n    function barrettConvert(x) {\n      if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);\n      else if(x.compareTo(this.m) < 0) return x;\n      else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }\n    }\n\n    function barrettRevert(x) { return x; }\n\n    // x = x mod m (HAC 14.42)\n    function barrettReduce(x) {\n      x.drShiftTo(this.m.t-1,this.r2);\n      if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }\n      this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);\n      this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);\n      while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);\n      x.subTo(this.r2,x);\n      while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n    }\n\n    // r = x^2 mod m; x != r\n    function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n    // r = x*y mod m; x,y != r\n    function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\n    Barrett.prototype.convert = barrettConvert;\n    Barrett.prototype.revert = barrettRevert;\n    Barrett.prototype.reduce = barrettReduce;\n    Barrett.prototype.mulTo = barrettMulTo;\n    Barrett.prototype.sqrTo = barrettSqrTo;\n\n    // (public) this^e % m (HAC 14.85)\n    function bnModPow(e,m) {\n      var i = e.bitLength(), k, r = nbv(1), z;\n      if(i <= 0) return r;\n      else if(i < 18) k = 1;\n      else if(i < 48) k = 3;\n      else if(i < 144) k = 4;\n      else if(i < 768) k = 5;\n      else k = 6;\n      if(i < 8)\n        z = new Classic(m);\n      else if(m.isEven())\n        z = new Barrett(m);\n      else\n        z = new Montgomery(m);\n\n      // precomputation\n      var g = new Array(), n = 3, k1 = k-1, km = (1<<k)-1;\n      g[1] = z.convert(this);\n      if(k > 1) {\n        var g2 = nbi();\n        z.sqrTo(g[1],g2);\n        while(n <= km) {\n          g[n] = nbi();\n          z.mulTo(g2,g[n-2],g[n]);\n          n += 2;\n        }\n      }\n\n      var j = e.t-1, w, is1 = true, r2 = nbi(), t;\n      i = nbits(e[j])-1;\n      while(j >= 0) {\n        if(i >= k1) w = (e[j]>>(i-k1))&km;\n        else {\n          w = (e[j]&((1<<(i+1))-1))<<(k1-i);\n          if(j > 0) w |= e[j-1]>>(this.DB+i-k1);\n        }\n\n        n = k;\n        while((w&1) == 0) { w >>= 1; --n; }\n        if((i -= n) < 0) { i += this.DB; --j; }\n        if(is1) {    // ret == 1, don't bother squaring or multiplying it\n          g[w].copyTo(r);\n          is1 = false;\n        }\n        else {\n          while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }\n          if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }\n          z.mulTo(r2,g[w],r);\n        }\n\n        while(j >= 0 && (e[j]&(1<<i)) == 0) {\n          z.sqrTo(r,r2); t = r; r = r2; r2 = t;\n          if(--i < 0) { i = this.DB-1; --j; }\n        }\n      }\n      return z.revert(r);\n    }\n\n    // (public) gcd(this,a) (HAC 14.54)\n    function bnGCD(a) {\n      var x = (this.s<0)?this.negate():this.clone();\n      var y = (a.s<0)?a.negate():a.clone();\n      if(x.compareTo(y) < 0) { var t = x; x = y; y = t; }\n      var i = x.getLowestSetBit(), g = y.getLowestSetBit();\n      if(g < 0) return x;\n      if(i < g) g = i;\n      if(g > 0) {\n        x.rShiftTo(g,x);\n        y.rShiftTo(g,y);\n      }\n      while(x.signum() > 0) {\n        if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);\n        if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);\n        if(x.compareTo(y) >= 0) {\n          x.subTo(y,x);\n          x.rShiftTo(1,x);\n        }\n        else {\n          y.subTo(x,y);\n          y.rShiftTo(1,y);\n        }\n      }\n      if(g > 0) y.lShiftTo(g,y);\n      return y;\n    }\n\n    // (protected) this % n, n < 2^26\n    function bnpModInt(n) {\n      if(n <= 0) return 0;\n      var d = this.DV%n, r = (this.s<0)?n-1:0;\n      if(this.t > 0)\n        if(d == 0) r = this[0]%n;\n        else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n;\n      return r;\n    }\n\n    // (public) 1/this % m (HAC 14.61)\n    function bnModInverse(m) {\n      var ac = m.isEven();\n      if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;\n      var u = m.clone(), v = this.clone();\n      var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);\n      while(u.signum() != 0) {\n        while(u.isEven()) {\n          u.rShiftTo(1,u);\n          if(ac) {\n            if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }\n            a.rShiftTo(1,a);\n          }\n          else if(!b.isEven()) b.subTo(m,b);\n          b.rShiftTo(1,b);\n        }\n        while(v.isEven()) {\n          v.rShiftTo(1,v);\n          if(ac) {\n            if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }\n            c.rShiftTo(1,c);\n          }\n          else if(!d.isEven()) d.subTo(m,d);\n          d.rShiftTo(1,d);\n        }\n        if(u.compareTo(v) >= 0) {\n          u.subTo(v,u);\n          if(ac) a.subTo(c,a);\n          b.subTo(d,b);\n        }\n        else {\n          v.subTo(u,v);\n          if(ac) c.subTo(a,c);\n          d.subTo(b,d);\n        }\n      }\n      if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\n      if(d.compareTo(m) >= 0) return d.subtract(m);\n      if(d.signum() < 0) d.addTo(m,d); else return d;\n      if(d.signum() < 0) return d.add(m); else return d;\n    }\n\n    var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];\n    var lplim = (1<<26)/lowprimes[lowprimes.length-1];\n\n    // (public) test primality with certainty >= 1-.5^t\n    function bnIsProbablePrime(t) {\n      var i, x = this.abs();\n      if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) {\n        for(i = 0; i < lowprimes.length; ++i)\n          if(x[0] == lowprimes[i]) return true;\n        return false;\n      }\n      if(x.isEven()) return false;\n      i = 1;\n      while(i < lowprimes.length) {\n        var m = lowprimes[i], j = i+1;\n        while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];\n        m = x.modInt(m);\n        while(i < j) if(m%lowprimes[i++] == 0) return false;\n      }\n      return x.millerRabin(t);\n    }\n\n    // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n    function bnpMillerRabin(t) {\n      var n1 = this.subtract(BigInteger.ONE);\n      var k = n1.getLowestSetBit();\n      if(k <= 0) return false;\n      var r = n1.shiftRight(k);\n      t = (t+1)>>1;\n      if(t > lowprimes.length) t = lowprimes.length;\n      var a = nbi();\n      for(var i = 0; i < t; ++i) {\n        //Pick bases at random, instead of starting at 2\n        a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]);\n        var y = a.modPow(r,this);\n        if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n          var j = 1;\n          while(j++ < k && y.compareTo(n1) != 0) {\n            y = y.modPowInt(2,this);\n            if(y.compareTo(BigInteger.ONE) == 0) return false;\n          }\n          if(y.compareTo(n1) != 0) return false;\n        }\n      }\n      return true;\n    }\n\n    // protected\n    BigInteger.prototype.chunkSize = bnpChunkSize;\n    BigInteger.prototype.toRadix = bnpToRadix;\n    BigInteger.prototype.fromRadix = bnpFromRadix;\n    BigInteger.prototype.fromNumber = bnpFromNumber;\n    BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n    BigInteger.prototype.changeBit = bnpChangeBit;\n    BigInteger.prototype.addTo = bnpAddTo;\n    BigInteger.prototype.dMultiply = bnpDMultiply;\n    BigInteger.prototype.dAddOffset = bnpDAddOffset;\n    BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n    BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n    BigInteger.prototype.modInt = bnpModInt;\n    BigInteger.prototype.millerRabin = bnpMillerRabin;\n\n    // public\n    BigInteger.prototype.clone = bnClone;\n    BigInteger.prototype.intValue = bnIntValue;\n    BigInteger.prototype.byteValue = bnByteValue;\n    BigInteger.prototype.shortValue = bnShortValue;\n    BigInteger.prototype.signum = bnSigNum;\n    BigInteger.prototype.toByteArray = bnToByteArray;\n    BigInteger.prototype.equals = bnEquals;\n    BigInteger.prototype.min = bnMin;\n    BigInteger.prototype.max = bnMax;\n    BigInteger.prototype.and = bnAnd;\n    BigInteger.prototype.or = bnOr;\n    BigInteger.prototype.xor = bnXor;\n    BigInteger.prototype.andNot = bnAndNot;\n    BigInteger.prototype.not = bnNot;\n    BigInteger.prototype.shiftLeft = bnShiftLeft;\n    BigInteger.prototype.shiftRight = bnShiftRight;\n    BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n    BigInteger.prototype.bitCount = bnBitCount;\n    BigInteger.prototype.testBit = bnTestBit;\n    BigInteger.prototype.setBit = bnSetBit;\n    BigInteger.prototype.clearBit = bnClearBit;\n    BigInteger.prototype.flipBit = bnFlipBit;\n    BigInteger.prototype.add = bnAdd;\n    BigInteger.prototype.subtract = bnSubtract;\n    BigInteger.prototype.multiply = bnMultiply;\n    BigInteger.prototype.divide = bnDivide;\n    BigInteger.prototype.remainder = bnRemainder;\n    BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\n    BigInteger.prototype.modPow = bnModPow;\n    BigInteger.prototype.modInverse = bnModInverse;\n    BigInteger.prototype.pow = bnPow;\n    BigInteger.prototype.gcd = bnGCD;\n    BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n\n    // JSBN-specific extension\n    BigInteger.prototype.square = bnSquare;\n\n    // Expose the Barrett function\n    BigInteger.prototype.Barrett = Barrett\n\n    // BigInteger interfaces not implemented in jsbn:\n\n    // BigInteger(int signum, byte[] magnitude)\n    // double doubleValue()\n    // float floatValue()\n    // int hashCode()\n    // long longValue()\n    // static BigInteger valueOf(long val)\n\n    // Random number generator - requires a PRNG backend, e.g. prng4.js\n\n    // For best results, put code like\n    // <body onClick='rng_seed_time();' onKeyPress='rng_seed_time();'>\n    // in your main HTML document.\n\n    var rng_state;\n    var rng_pool;\n    var rng_pptr;\n\n    // Mix in a 32-bit integer into the pool\n    function rng_seed_int(x) {\n      rng_pool[rng_pptr++] ^= x & 255;\n      rng_pool[rng_pptr++] ^= (x >> 8) & 255;\n      rng_pool[rng_pptr++] ^= (x >> 16) & 255;\n      rng_pool[rng_pptr++] ^= (x >> 24) & 255;\n      if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;\n    }\n\n    // Mix in the current time (w/milliseconds) into the pool\n    function rng_seed_time() {\n      rng_seed_int(new Date().getTime());\n    }\n\n    // Initialize the pool with junk if needed.\n    if(rng_pool == null) {\n      rng_pool = new Array();\n      rng_pptr = 0;\n      var t;\n      if(typeof window !== \"undefined\" && window.crypto) {\n        if (window.crypto.getRandomValues) {\n          // Use webcrypto if available\n          var ua = new Uint8Array(32);\n          window.crypto.getRandomValues(ua);\n          for(t = 0; t < 32; ++t)\n            rng_pool[rng_pptr++] = ua[t];\n        }\n        else if(navigator.appName == \"Netscape\" && navigator.appVersion < \"5\") {\n          // Extract entropy (256 bits) from NS4 RNG if available\n          var z = window.crypto.random(32);\n          for(t = 0; t < z.length; ++t)\n            rng_pool[rng_pptr++] = z.charCodeAt(t) & 255;\n        }\n      }\n      while(rng_pptr < rng_psize) {  // extract some randomness from Math.random()\n        t = Math.floor(65536 * Math.random());\n        rng_pool[rng_pptr++] = t >>> 8;\n        rng_pool[rng_pptr++] = t & 255;\n      }\n      rng_pptr = 0;\n      rng_seed_time();\n      //rng_seed_int(window.screenX);\n      //rng_seed_int(window.screenY);\n    }\n\n    function rng_get_byte() {\n      if(rng_state == null) {\n        rng_seed_time();\n        rng_state = prng_newstate();\n        rng_state.init(rng_pool);\n        for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)\n          rng_pool[rng_pptr] = 0;\n        rng_pptr = 0;\n        //rng_pool = null;\n      }\n      // TODO: allow reseeding after first request\n      return rng_state.next();\n    }\n\n    function rng_get_bytes(ba) {\n      var i;\n      for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();\n    }\n\n    function SecureRandom() {}\n\n    SecureRandom.prototype.nextBytes = rng_get_bytes;\n\n    // prng4.js - uses Arcfour as a PRNG\n\n    function Arcfour() {\n      this.i = 0;\n      this.j = 0;\n      this.S = new Array();\n    }\n\n    // Initialize arcfour context from key, an array of ints, each from [0..255]\n    function ARC4init(key) {\n      var i, j, t;\n      for(i = 0; i < 256; ++i)\n        this.S[i] = i;\n      j = 0;\n      for(i = 0; i < 256; ++i) {\n        j = (j + this.S[i] + key[i % key.length]) & 255;\n        t = this.S[i];\n        this.S[i] = this.S[j];\n        this.S[j] = t;\n      }\n      this.i = 0;\n      this.j = 0;\n    }\n\n    function ARC4next() {\n      var t;\n      this.i = (this.i + 1) & 255;\n      this.j = (this.j + this.S[this.i]) & 255;\n      t = this.S[this.i];\n      this.S[this.i] = this.S[this.j];\n      this.S[this.j] = t;\n      return this.S[(t + this.S[this.i]) & 255];\n    }\n\n    Arcfour.prototype.init = ARC4init;\n    Arcfour.prototype.next = ARC4next;\n\n    // Plug in your RNG constructor here\n    function prng_newstate() {\n      return new Arcfour();\n    }\n\n    // Pool size must be a multiple of 4 and greater than 32.\n    // An array of bytes the size of the pool will be passed to init()\n    var rng_psize = 256;\n\n    if (typeof exports !== 'undefined') {\n        exports = module.exports = {\n            default: BigInteger,\n            BigInteger: BigInteger,\n            SecureRandom: SecureRandom,\n        };\n    } else {\n        this.jsbn = {\n          BigInteger: BigInteger,\n          SecureRandom: SecureRandom\n        };\n    }\n\n}).call(this);\n","/* global window, exports, define */\n\n!function() {\n    'use strict'\n\n    var re = {\n        not_string: /[^s]/,\n        not_bool: /[^t]/,\n        not_type: /[^T]/,\n        not_primitive: /[^v]/,\n        number: /[diefg]/,\n        numeric_arg: /[bcdiefguxX]/,\n        json: /[j]/,\n        not_json: /[^j]/,\n        text: /^[^\\x25]+/,\n        modulo: /^\\x25{2}/,\n        placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n        key: /^([a-z_][a-z_\\d]*)/i,\n        key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n        index_access: /^\\[(\\d+)\\]/,\n        sign: /^[+-]/\n    }\n\n    function sprintf(key) {\n        // `arguments` is not an array, but should be fine for this call\n        return sprintf_format(sprintf_parse(key), arguments)\n    }\n\n    function vsprintf(fmt, argv) {\n        return sprintf.apply(null, [fmt].concat(argv || []))\n    }\n\n    function sprintf_format(parse_tree, argv) {\n        var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign\n        for (i = 0; i < tree_length; i++) {\n            if (typeof parse_tree[i] === 'string') {\n                output += parse_tree[i]\n            }\n            else if (typeof parse_tree[i] === 'object') {\n                ph = parse_tree[i] // convenience purposes only\n                if (ph.keys) { // keyword argument\n                    arg = argv[cursor]\n                    for (k = 0; k < ph.keys.length; k++) {\n                        if (arg == undefined) {\n                            throw new Error(sprintf('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"', ph.keys[k], ph.keys[k-1]))\n                        }\n                        arg = arg[ph.keys[k]]\n                    }\n                }\n                else if (ph.param_no) { // positional argument (explicit)\n                    arg = argv[ph.param_no]\n                }\n                else { // positional argument (implicit)\n                    arg = argv[cursor++]\n                }\n\n                if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {\n                    arg = arg()\n                }\n\n                if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {\n                    throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))\n                }\n\n                if (re.number.test(ph.type)) {\n                    is_positive = arg >= 0\n                }\n\n                switch (ph.type) {\n                    case 'b':\n                        arg = parseInt(arg, 10).toString(2)\n                        break\n                    case 'c':\n                        arg = String.fromCharCode(parseInt(arg, 10))\n                        break\n                    case 'd':\n                    case 'i':\n                        arg = parseInt(arg, 10)\n                        break\n                    case 'j':\n                        arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)\n                        break\n                    case 'e':\n                        arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()\n                        break\n                    case 'f':\n                        arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)\n                        break\n                    case 'g':\n                        arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)\n                        break\n                    case 'o':\n                        arg = (parseInt(arg, 10) >>> 0).toString(8)\n                        break\n                    case 's':\n                        arg = String(arg)\n                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n                        break\n                    case 't':\n                        arg = String(!!arg)\n                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n                        break\n                    case 'T':\n                        arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()\n                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n                        break\n                    case 'u':\n                        arg = parseInt(arg, 10) >>> 0\n                        break\n                    case 'v':\n                        arg = arg.valueOf()\n                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n                        break\n                    case 'x':\n                        arg = (parseInt(arg, 10) >>> 0).toString(16)\n                        break\n                    case 'X':\n                        arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()\n                        break\n                }\n                if (re.json.test(ph.type)) {\n                    output += arg\n                }\n                else {\n                    if (re.number.test(ph.type) && (!is_positive || ph.sign)) {\n                        sign = is_positive ? '+' : '-'\n                        arg = arg.toString().replace(re.sign, '')\n                    }\n                    else {\n                        sign = ''\n                    }\n                    pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '\n                    pad_length = ph.width - (sign + arg).length\n                    pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''\n                    output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n                }\n            }\n        }\n        return output\n    }\n\n    var sprintf_cache = Object.create(null)\n\n    function sprintf_parse(fmt) {\n        if (sprintf_cache[fmt]) {\n            return sprintf_cache[fmt]\n        }\n\n        var _fmt = fmt, match, parse_tree = [], arg_names = 0\n        while (_fmt) {\n            if ((match = re.text.exec(_fmt)) !== null) {\n                parse_tree.push(match[0])\n            }\n            else if ((match = re.modulo.exec(_fmt)) !== null) {\n                parse_tree.push('%')\n            }\n            else if ((match = re.placeholder.exec(_fmt)) !== null) {\n                if (match[2]) {\n                    arg_names |= 1\n                    var field_list = [], replacement_field = match[2], field_match = []\n                    if ((field_match = re.key.exec(replacement_field)) !== null) {\n                        field_list.push(field_match[1])\n                        while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n                            if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n                                field_list.push(field_match[1])\n                            }\n                            else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n                                field_list.push(field_match[1])\n                            }\n                            else {\n                                throw new SyntaxError('[sprintf] failed to parse named argument key')\n                            }\n                        }\n                    }\n                    else {\n                        throw new SyntaxError('[sprintf] failed to parse named argument key')\n                    }\n                    match[2] = field_list\n                }\n                else {\n                    arg_names |= 2\n                }\n                if (arg_names === 3) {\n                    throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')\n                }\n\n                parse_tree.push(\n                    {\n                        placeholder: match[0],\n                        param_no:    match[1],\n                        keys:        match[2],\n                        sign:        match[3],\n                        pad_char:    match[4],\n                        align:       match[5],\n                        width:       match[6],\n                        precision:   match[7],\n                        type:        match[8]\n                    }\n                )\n            }\n            else {\n                throw new SyntaxError('[sprintf] unexpected placeholder')\n            }\n            _fmt = _fmt.substring(match[0].length)\n        }\n        return sprintf_cache[fmt] = parse_tree\n    }\n\n    /**\n     * export to either browser or node.js\n     */\n    /* eslint-disable quote-props */\n    if (typeof exports !== 'undefined') {\n        exports['sprintf'] = sprintf\n        exports['vsprintf'] = vsprintf\n    }\n    if (typeof window !== 'undefined') {\n        window['sprintf'] = sprintf\n        window['vsprintf'] = vsprintf\n\n        if (typeof define === 'function' && define['amd']) {\n            define(function() {\n                return {\n                    'sprintf': sprintf,\n                    'vsprintf': vsprintf\n                }\n            })\n        }\n    }\n    /* eslint-enable quote-props */\n}(); // eslint-disable-line\n","/* eslint-disable no-param-reassign */\n\nimport * as common from './common';\nimport * as constants from './v4/constants';\nimport { AddressError } from './address-error';\nimport { BigInteger } from 'jsbn';\nimport { sprintf } from 'sprintf-js';\n\n/**\n * Represents an IPv4 address\n * @class Address4\n * @param {string} address - An IPv4 address string\n */\nexport class Address4 {\n  address: string;\n  addressMinusSuffix?: string;\n  groups: number = constants.GROUPS;\n  parsedAddress: string[] = [];\n  parsedSubnet: string = '';\n  subnet: string = '/32';\n  subnetMask: number = 32;\n  v4: boolean = true;\n\n  constructor(address: string) {\n    this.address = address;\n\n    const subnet = constants.RE_SUBNET_STRING.exec(address);\n\n    if (subnet) {\n      this.parsedSubnet = subnet[0].replace('/', '');\n      this.subnetMask = parseInt(this.parsedSubnet, 10);\n      this.subnet = `/${this.subnetMask}`;\n\n      if (this.subnetMask < 0 || this.subnetMask > constants.BITS) {\n        throw new AddressError('Invalid subnet mask.');\n      }\n\n      address = address.replace(constants.RE_SUBNET_STRING, '');\n    }\n\n    this.addressMinusSuffix = address;\n\n    this.parsedAddress = this.parse(address);\n  }\n\n  static isValid(address: string): boolean {\n    try {\n      // eslint-disable-next-line no-new\n      new Address4(address);\n\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  /*\n   * Parses a v4 address\n   */\n  parse(address: string) {\n    const groups = address.split('.');\n\n    if (!address.match(constants.RE_ADDRESS)) {\n      throw new AddressError('Invalid IPv4 address.');\n    }\n\n    return groups;\n  }\n\n  /**\n   * Returns the correct form of an address\n   * @memberof Address4\n   * @instance\n   * @returns {String}\n   */\n  correctForm(): string {\n    return this.parsedAddress.map((part) => parseInt(part, 10)).join('.');\n  }\n\n  /**\n   * Returns true if the address is correct, false otherwise\n   * @memberof Address4\n   * @instance\n   * @returns {Boolean}\n   */\n  isCorrect = common.isCorrect(constants.BITS);\n\n  /**\n   * Converts a hex string to an IPv4 address object\n   * @memberof Address4\n   * @static\n   * @param {string} hex - a hex string to convert\n   * @returns {Address4}\n   */\n  static fromHex(hex: string): Address4 {\n    const padded = hex.replace(/:/g, '').padStart(8, '0');\n    const groups = [];\n    let i;\n\n    for (i = 0; i < 8; i += 2) {\n      const h = padded.slice(i, i + 2);\n\n      groups.push(parseInt(h, 16));\n    }\n\n    return new Address4(groups.join('.'));\n  }\n\n  /**\n   * Converts an integer into a IPv4 address object\n   * @memberof Address4\n   * @static\n   * @param {integer} integer - a number to convert\n   * @returns {Address4}\n   */\n  static fromInteger(integer: number): Address4 {\n    return Address4.fromHex(integer.toString(16));\n  }\n\n  /**\n   * Return an address from in-addr.arpa form\n   * @memberof Address4\n   * @static\n   * @param {string} arpaFormAddress - an 'in-addr.arpa' form ipv4 address\n   * @returns {Adress4}\n   * @example\n   * var address = Address4.fromArpa(42.2.0.192.in-addr.arpa.)\n   * address.correctForm(); // '192.0.2.42'\n   */\n  static fromArpa(arpaFormAddress: string): Address4 {\n    // remove ending \".in-addr.arpa.\" or just \".\"\n    const leader = arpaFormAddress.replace(/(\\.in-addr\\.arpa)?\\.$/, '');\n\n    const address = leader.split('.').reverse().join('.');\n\n    return new Address4(address);\n  }\n\n  /**\n   * Converts an IPv4 address object to a hex string\n   * @memberof Address4\n   * @instance\n   * @returns {String}\n   */\n  toHex(): string {\n    return this.parsedAddress.map((part) => sprintf('%02x', parseInt(part, 10))).join(':');\n  }\n\n  /**\n   * Converts an IPv4 address object to an array of bytes\n   * @memberof Address4\n   * @instance\n   * @returns {Array}\n   */\n  toArray(): number[] {\n    return this.parsedAddress.map((part) => parseInt(part, 10));\n  }\n\n  /**\n   * Converts an IPv4 address object to an IPv6 address group\n   * @memberof Address4\n   * @instance\n   * @returns {String}\n   */\n  toGroup6(): string {\n    const output = [];\n    let i;\n\n    for (i = 0; i < constants.GROUPS; i += 2) {\n      const hex = sprintf(\n        '%02x%02x',\n        parseInt(this.parsedAddress[i], 10),\n        parseInt(this.parsedAddress[i + 1], 10)\n      );\n\n      output.push(sprintf('%x', parseInt(hex, 16)));\n    }\n\n    return output.join(':');\n  }\n\n  /**\n   * Returns the address as a BigInteger\n   * @memberof Address4\n   * @instance\n   * @returns {BigInteger}\n   */\n  bigInteger(): BigInteger {\n    return new BigInteger(\n      this.parsedAddress.map((n) => sprintf('%02x', parseInt(n, 10))).join(''),\n      16\n    );\n  }\n\n  /**\n   * Helper function getting start address.\n   * @memberof Address4\n   * @instance\n   * @returns {BigInteger}\n   */\n  _startAddress(): BigInteger {\n    return new BigInteger(this.mask() + '0'.repeat(constants.BITS - this.subnetMask), 2);\n  }\n\n  /**\n   * The first address in the range given by this address' subnet.\n   * Often referred to as the Network Address.\n   * @memberof Address4\n   * @instance\n   * @returns {Address4}\n   */\n  startAddress(): Address4 {\n    return Address4.fromBigInteger(this._startAddress());\n  }\n\n  /**\n   * The first host address in the range given by this address's subnet ie\n   * the first address after the Network Address\n   * @memberof Address4\n   * @instance\n   * @returns {Address4}\n   */\n  startAddressExclusive(): Address4 {\n    const adjust = new BigInteger('1');\n    return Address4.fromBigInteger(this._startAddress().add(adjust));\n  }\n\n  /**\n   * Helper function getting end address.\n   * @memberof Address4\n   * @instance\n   * @returns {BigInteger}\n   */\n  _endAddress(): BigInteger {\n    return new BigInteger(this.mask() + '1'.repeat(constants.BITS - this.subnetMask), 2);\n  }\n\n  /**\n   * The last address in the range given by this address' subnet\n   * Often referred to as the Broadcast\n   * @memberof Address4\n   * @instance\n   * @returns {Address4}\n   */\n  endAddress(): Address4 {\n    return Address4.fromBigInteger(this._endAddress());\n  }\n\n  /**\n   * The last host address in the range given by this address's subnet ie\n   * the last address prior to the Broadcast Address\n   * @memberof Address4\n   * @instance\n   * @returns {Address4}\n   */\n  endAddressExclusive(): Address4 {\n    const adjust = new BigInteger('1');\n    return Address4.fromBigInteger(this._endAddress().subtract(adjust));\n  }\n\n  /**\n   * Converts a BigInteger to a v4 address object\n   * @memberof Address4\n   * @static\n   * @param {BigInteger} bigInteger - a BigInteger to convert\n   * @returns {Address4}\n   */\n  static fromBigInteger(bigInteger: BigInteger): Address4 {\n    return Address4.fromInteger(parseInt(bigInteger.toString(), 10));\n  }\n\n  /**\n   * Returns the first n bits of the address, defaulting to the\n   * subnet mask\n   * @memberof Address4\n   * @instance\n   * @returns {String}\n   */\n  mask(mask?: number): string {\n    if (mask === undefined) {\n      mask = this.subnetMask;\n    }\n\n    return this.getBitsBase2(0, mask);\n  }\n\n  /**\n   * Returns the bits in the given range as a base-2 string\n   * @memberof Address4\n   * @instance\n   * @returns {string}\n   */\n  getBitsBase2(start: number, end: number): string {\n    return this.binaryZeroPad().slice(start, end);\n  }\n\n  /**\n   * Return the reversed ip6.arpa form of the address\n   * @memberof Address4\n   * @param {Object} options\n   * @param {boolean} options.omitSuffix - omit the \"in-addr.arpa\" suffix\n   * @instance\n   * @returns {String}\n   */\n  reverseForm(options?: common.ReverseFormOptions): string {\n    if (!options) {\n      options = {};\n    }\n\n    const reversed = this.correctForm().split('.').reverse().join('.');\n\n    if (options.omitSuffix) {\n      return reversed;\n    }\n\n    return sprintf('%s.in-addr.arpa.', reversed);\n  }\n\n  /**\n   * Returns true if the given address is in the subnet of the current address\n   * @memberof Address4\n   * @instance\n   * @returns {boolean}\n   */\n  isInSubnet = common.isInSubnet;\n\n  /**\n   * Returns true if the given address is a multicast address\n   * @memberof Address4\n   * @instance\n   * @returns {boolean}\n   */\n  isMulticast(): boolean {\n    return this.isInSubnet(new Address4('224.0.0.0/4'));\n  }\n\n  /**\n   * Returns a zero-padded base-2 string representation of the address\n   * @memberof Address4\n   * @instance\n   * @returns {string}\n   */\n  binaryZeroPad(): string {\n    return this.bigInteger().toString(2).padStart(constants.BITS, '0');\n  }\n\n  /**\n   * Groups an IPv4 address for inclusion at the end of an IPv6 address\n   * @returns {String}\n   */\n  groupForV6(): string {\n    const segments = this.parsedAddress;\n\n    return this.address.replace(\n      constants.RE_ADDRESS,\n      sprintf(\n        '<span class=\"hover-group group-v4 group-6\">%s</span>.<span class=\"hover-group group-v4 group-7\">%s</span>',\n        segments.slice(0, 2).join('.'),\n        segments.slice(2, 4).join('.')\n      )\n    );\n  }\n}\n","export const BITS = 128;\nexport const GROUPS = 8;\n\n/**\n * Represents IPv6 address scopes\n * @memberof Address6\n * @static\n */\nexport const SCOPES: { [key: number]: string | undefined } = {\n  0: 'Reserved',\n  1: 'Interface local',\n  2: 'Link local',\n  4: 'Admin local',\n  5: 'Site local',\n  8: 'Organization local',\n  14: 'Global',\n  15: 'Reserved',\n} as const;\n\n/**\n * Represents IPv6 address types\n * @memberof Address6\n * @static\n */\nexport const TYPES: { [key: string]: string | undefined } = {\n  'ff01::1/128': 'Multicast (All nodes on this interface)',\n  'ff01::2/128': 'Multicast (All routers on this interface)',\n  'ff02::1/128': 'Multicast (All nodes on this link)',\n  'ff02::2/128': 'Multicast (All routers on this link)',\n  'ff05::2/128': 'Multicast (All routers in this site)',\n  'ff02::5/128': 'Multicast (OSPFv3 AllSPF routers)',\n  'ff02::6/128': 'Multicast (OSPFv3 AllDR routers)',\n  'ff02::9/128': 'Multicast (RIP routers)',\n  'ff02::a/128': 'Multicast (EIGRP routers)',\n  'ff02::d/128': 'Multicast (PIM routers)',\n  'ff02::16/128': 'Multicast (MLDv2 reports)',\n  'ff01::fb/128': 'Multicast (mDNSv6)',\n  'ff02::fb/128': 'Multicast (mDNSv6)',\n  'ff05::fb/128': 'Multicast (mDNSv6)',\n  'ff02::1:2/128': 'Multicast (All DHCP servers and relay agents on this link)',\n  'ff05::1:2/128': 'Multicast (All DHCP servers and relay agents in this site)',\n  'ff02::1:3/128': 'Multicast (All DHCP servers on this link)',\n  'ff05::1:3/128': 'Multicast (All DHCP servers in this site)',\n  '::/128': 'Unspecified',\n  '::1/128': 'Loopback',\n  'ff00::/8': 'Multicast',\n  'fe80::/10': 'Link-local unicast',\n} as const;\n\n/**\n * A regular expression that matches bad characters in an IPv6 address\n * @memberof Address6\n * @static\n */\nexport const RE_BAD_CHARACTERS = /([^0-9a-f:/%])/gi;\n\n/**\n * A regular expression that matches an incorrect IPv6 address\n * @memberof Address6\n * @static\n */\nexport const RE_BAD_ADDRESS = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]|\\/$)/gi;\n\n/**\n * A regular expression that matches an IPv6 subnet\n * @memberof Address6\n * @static\n */\nexport const RE_SUBNET_STRING = /\\/\\d{1,3}(?=%|$)/;\n\n/**\n * A regular expression that matches an IPv6 zone\n * @memberof Address6\n * @static\n */\nexport const RE_ZONE_STRING = /%.*$/;\n\nexport const RE_URL = new RegExp(/^\\[{0,1}([0-9a-f:]+)\\]{0,1}/);\nexport const RE_URL_WITH_PORT = new RegExp(/\\[([0-9a-f:]+)\\]:([0-9]{1,5})/);\n","import { sprintf } from 'sprintf-js';\n\n/**\n * @returns {String} the string with all zeroes contained in a <span>\n */\nexport function spanAllZeroes(s: string): string {\n  return s.replace(/(0+)/g, '<span class=\"zero\">$1</span>');\n}\n\n/**\n * @returns {String} the string with each character contained in a <span>\n */\nexport function spanAll(s: string, offset: number = 0): string {\n  const letters = s.split('');\n\n  return letters\n    .map(\n      (n, i) =>\n        sprintf(\n          '<span class=\"digit value-%s position-%d\">%s</span>',\n          n,\n          i + offset,\n          spanAllZeroes(n)\n        ) // XXX Use #base-2 .value-0 instead?\n    )\n    .join('');\n}\n\nfunction spanLeadingZeroesSimple(group: string): string {\n  return group.replace(/^(0+)/, '<span class=\"zero\">$1</span>');\n}\n\n/**\n * @returns {String} the string with leading zeroes contained in a <span>\n */\nexport function spanLeadingZeroes(address: string): string {\n  const groups = address.split(':');\n\n  return groups.map((g) => spanLeadingZeroesSimple(g)).join(':');\n}\n\n/**\n * Groups an address\n * @returns {String} a grouped address\n */\nexport function simpleGroup(addressString: string, offset: number = 0): string[] {\n  const groups = addressString.split(':');\n\n  return groups.map((g, i) => {\n    if (/group-v4/.test(g)) {\n      return g;\n    }\n\n    return sprintf(\n      '<span class=\"hover-group group-%d\">%s</span>',\n      i + offset,\n      spanLeadingZeroesSimple(g)\n    );\n  });\n}\n","import * as v6 from './constants';\nimport { sprintf } from 'sprintf-js';\n\nexport function groupPossibilities(possibilities: string[]): string {\n  return sprintf('(%s)', possibilities.join('|'));\n}\n\nexport function padGroup(group: string): string {\n  if (group.length < 4) {\n    return sprintf('0{0,%d}%s', 4 - group.length, group);\n  }\n\n  return group;\n}\n\nexport const ADDRESS_BOUNDARY = '[^A-Fa-f0-9:]';\n\nexport function simpleRegularExpression(groups: string[]) {\n  const zeroIndexes: number[] = [];\n\n  groups.forEach((group, i) => {\n    const groupInteger = parseInt(group, 16);\n\n    if (groupInteger === 0) {\n      zeroIndexes.push(i);\n    }\n  });\n\n  // You can technically elide a single 0, this creates the regular expressions\n  // to match that eventuality\n  const possibilities = zeroIndexes.map((zeroIndex) =>\n    groups\n      .map((group, i) => {\n        if (i === zeroIndex) {\n          const elision = i === 0 || i === v6.GROUPS - 1 ? ':' : '';\n\n          return groupPossibilities([padGroup(group), elision]);\n        }\n\n        return padGroup(group);\n      })\n      .join(':')\n  );\n\n  // The simplest case\n  possibilities.push(groups.map(padGroup).join(':'));\n\n  return groupPossibilities(possibilities);\n}\n\nexport function possibleElisions(\n  elidedGroups: number,\n  moreLeft?: boolean,\n  moreRight?: boolean\n): string {\n  const left = moreLeft ? '' : ':';\n  const right = moreRight ? '' : ':';\n\n  const possibilities = [];\n\n  // 1. elision of everything (::)\n  if (!moreLeft && !moreRight) {\n    possibilities.push('::');\n  }\n\n  // 2. complete elision of the middle\n  if (moreLeft && moreRight) {\n    possibilities.push('');\n  }\n\n  if ((moreRight && !moreLeft) || (!moreRight && moreLeft)) {\n    // 3. complete elision of one side\n    possibilities.push(':');\n  }\n\n  // 4. elision from the left side\n  possibilities.push(sprintf('%s(:0{1,4}){1,%d}', left, elidedGroups - 1));\n\n  // 5. elision from the right side\n  possibilities.push(sprintf('(0{1,4}:){1,%d}%s', elidedGroups - 1, right));\n\n  // 6. no elision\n  possibilities.push(sprintf('(0{1,4}:){%d}0{1,4}', elidedGroups - 1));\n\n  // 7. elision (including sloppy elision) from the middle\n  for (let groups = 1; groups < elidedGroups - 1; groups++) {\n    for (let position = 1; position < elidedGroups - groups; position++) {\n      possibilities.push(\n        sprintf(\n          '(0{1,4}:){%d}:(0{1,4}:){%d}0{1,4}',\n          position,\n          elidedGroups - position - groups - 1\n        )\n      );\n    }\n  }\n\n  return groupPossibilities(possibilities);\n}\n","/* eslint-disable prefer-destructuring */\n/* eslint-disable no-param-reassign */\n\nimport * as common from './common';\nimport * as constants4 from './v4/constants';\nimport * as constants6 from './v6/constants';\nimport * as helpers from './v6/helpers';\nimport { Address4 } from './ipv4';\nimport {\n  ADDRESS_BOUNDARY,\n  possibleElisions,\n  simpleRegularExpression,\n} from './v6/regular-expressions';\nimport { AddressError } from './address-error';\nimport { BigInteger } from 'jsbn';\nimport { sprintf } from 'sprintf-js';\n\nfunction assert(condition: any): asserts condition {\n  if (!condition) {\n    throw new Error('Assertion failed.');\n  }\n}\n\nfunction addCommas(number: string): string {\n  const r = /(\\d+)(\\d{3})/;\n\n  while (r.test(number)) {\n    number = number.replace(r, '$1,$2');\n  }\n\n  return number;\n}\n\nfunction spanLeadingZeroes4(n: string): string {\n  n = n.replace(/^(0{1,})([1-9]+)$/, '<span class=\"parse-error\">$1</span>$2');\n  n = n.replace(/^(0{1,})(0)$/, '<span class=\"parse-error\">$1</span>$2');\n\n  return n;\n}\n\n/*\n * A helper function to compact an array\n */\nfunction compact(address: string[], slice: number[]) {\n  const s1 = [];\n  const s2 = [];\n  let i;\n\n  for (i = 0; i < address.length; i++) {\n    if (i < slice[0]) {\n      s1.push(address[i]);\n    } else if (i > slice[1]) {\n      s2.push(address[i]);\n    }\n  }\n\n  return s1.concat(['compact']).concat(s2);\n}\n\nfunction paddedHex(octet: string): string {\n  return sprintf('%04x', parseInt(octet, 16));\n}\n\nfunction unsignByte(b: number) {\n  // eslint-disable-next-line no-bitwise\n  return b & 0xff;\n}\n\n\ninterface SixToFourProperties {\n  prefix: string;\n  gateway: string;\n}\n\ninterface TeredoProperties {\n  prefix: string;\n  server4: string;\n  client4: string;\n  flags: string;\n  coneNat: boolean;\n  microsoft: {\n    reserved: boolean;\n    universalLocal: boolean;\n    groupIndividual: boolean;\n    nonce: string;\n  };\n  udpPort: string;\n}\n\n/**\n * Represents an IPv6 address\n * @class Address6\n * @param {string} address - An IPv6 address string\n * @param {number} [groups=8] - How many octets to parse\n * @example\n * var address = new Address6('2001::/32');\n */\nexport class Address6 {\n  address4?: Address4;\n  address: string;\n  addressMinusSuffix: string = '';\n  elidedGroups?: number;\n  elisionBegin?: number;\n  elisionEnd?: number;\n  groups: number;\n  parsedAddress4?: string;\n  parsedAddress: string[];\n  parsedSubnet: string = '';\n  subnet: string = '/128';\n  subnetMask: number = 128;\n  v4: boolean = false;\n  zone: string = '';\n\n  constructor(address: string, optionalGroups?: number) {\n    if (optionalGroups === undefined) {\n      this.groups = constants6.GROUPS;\n    } else {\n      this.groups = optionalGroups;\n    }\n\n    this.address = address;\n\n    const subnet = constants6.RE_SUBNET_STRING.exec(address);\n\n    if (subnet) {\n      this.parsedSubnet = subnet[0].replace('/', '');\n      this.subnetMask = parseInt(this.parsedSubnet, 10);\n      this.subnet = `/${this.subnetMask}`;\n\n      if (\n        Number.isNaN(this.subnetMask) ||\n        this.subnetMask < 0 ||\n        this.subnetMask > constants6.BITS\n      ) {\n        throw new AddressError('Invalid subnet mask.');\n      }\n\n      address = address.replace(constants6.RE_SUBNET_STRING, '');\n    } else if (/\\//.test(address)) {\n      throw new AddressError('Invalid subnet mask.');\n    }\n\n    const zone = constants6.RE_ZONE_STRING.exec(address);\n\n    if (zone) {\n      this.zone = zone[0];\n\n      address = address.replace(constants6.RE_ZONE_STRING, '');\n    }\n\n    this.addressMinusSuffix = address;\n\n    this.parsedAddress = this.parse(this.addressMinusSuffix);\n  }\n\n  static isValid(address: string): boolean {\n    try {\n      // eslint-disable-next-line no-new\n      new Address6(address);\n\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  /**\n   * Convert a BigInteger to a v6 address object\n   * @memberof Address6\n   * @static\n   * @param {BigInteger} bigInteger - a BigInteger to convert\n   * @returns {Address6}\n   * @example\n   * var bigInteger = new BigInteger('1000000000000');\n   * var address = Address6.fromBigInteger(bigInteger);\n   * address.correctForm(); // '::e8:d4a5:1000'\n   */\n  static fromBigInteger(bigInteger: BigInteger): Address6 {\n    const hex = bigInteger.toString(16).padStart(32, '0');\n    const groups = [];\n    let i;\n\n    for (i = 0; i < constants6.GROUPS; i++) {\n      groups.push(hex.slice(i * 4, (i + 1) * 4));\n    }\n\n    return new Address6(groups.join(':'));\n  }\n\n  /**\n   * Convert a URL (with optional port number) to an address object\n   * @memberof Address6\n   * @static\n   * @param {string} url - a URL with optional port number\n   * @example\n   * var addressAndPort = Address6.fromURL('http://[ffff::]:8080/foo/');\n   * addressAndPort.address.correctForm(); // 'ffff::'\n   * addressAndPort.port; // 8080\n   */\n  static fromURL(url: string) {\n    let host: string;\n    let port: string | number | null = null;\n    let result: string[] | null;\n\n    // If we have brackets parse them and find a port\n    if (url.indexOf('[') !== -1 && url.indexOf(']:') !== -1) {\n      result = constants6.RE_URL_WITH_PORT.exec(url);\n\n      if (result === null) {\n        return {\n          error: 'failed to parse address with port',\n          address: null,\n          port: null,\n        };\n      }\n\n      host = result[1];\n      port = result[2];\n      // If there's a URL extract the address\n    } else if (url.indexOf('/') !== -1) {\n      // Remove the protocol prefix\n      url = url.replace(/^[a-z0-9]+:\\/\\//, '');\n\n      // Parse the address\n      result = constants6.RE_URL.exec(url);\n\n      if (result === null) {\n        return {\n          error: 'failed to parse address from URL',\n          address: null,\n          port: null,\n        };\n      }\n\n      host = result[1];\n      // Otherwise just assign the URL to the host and let the library parse it\n    } else {\n      host = url;\n    }\n\n    // If there's a port convert it to an integer\n    if (port) {\n      port = parseInt(port, 10);\n\n      // squelch out of range ports\n      if (port < 0 || port > 65536) {\n        port = null;\n      }\n    } else {\n      // Standardize `undefined` to `null`\n      port = null;\n    }\n\n    return {\n      address: new Address6(host),\n      port,\n    };\n  }\n\n  /**\n   * Create an IPv6-mapped address given an IPv4 address\n   * @memberof Address6\n   * @static\n   * @param {string} address - An IPv4 address string\n   * @returns {Address6}\n   * @example\n   * var address = Address6.fromAddress4('192.168.0.1');\n   * address.correctForm(); // '::ffff:c0a8:1'\n   * address.to4in6(); // '::ffff:192.168.0.1'\n   */\n  static fromAddress4(address: string): Address6 {\n    const address4 = new Address4(address);\n\n    const mask6 = constants6.BITS - (constants4.BITS - address4.subnetMask);\n\n    return new Address6(`::ffff:${address4.correctForm()}/${mask6}`);\n  }\n\n  /**\n   * Return an address from ip6.arpa form\n   * @memberof Address6\n   * @static\n   * @param {string} arpaFormAddress - an 'ip6.arpa' form address\n   * @returns {Adress6}\n   * @example\n   * var address = Address6.fromArpa(e.f.f.f.3.c.2.6.f.f.f.e.6.6.8.e.1.0.6.7.9.4.e.c.0.0.0.0.1.0.0.2.ip6.arpa.)\n   * address.correctForm(); // '2001:0:ce49:7601:e866:efff:62c3:fffe'\n   */\n  static fromArpa(arpaFormAddress: string): Address6 {\n    // remove ending \".ip6.arpa.\" or just \".\"\n    let address = arpaFormAddress.replace(/(\\.ip6\\.arpa)?\\.$/, '');\n    const semicolonAmount = 7;\n\n    // correct ip6.arpa form with ending removed will be 63 characters\n    if (address.length !== 63) {\n      throw new AddressError(\"Invalid 'ip6.arpa' form.\");\n    }\n\n    const parts = address.split('.').reverse();\n\n    for (let i = semicolonAmount; i > 0; i--) {\n      const insertIndex = i * 4;\n      parts.splice(insertIndex, 0, ':');\n    }\n\n    address = parts.join('');\n\n    return new Address6(address);\n  }\n\n  /**\n   * Return the Microsoft UNC transcription of the address\n   * @memberof Address6\n   * @instance\n   * @returns {String} the Microsoft UNC transcription of the address\n   */\n  microsoftTranscription(): string {\n    return sprintf('%s.ipv6-literal.net', this.correctForm().replace(/:/g, '-'));\n  }\n\n  /**\n   * Return the first n bits of the address, defaulting to the subnet mask\n   * @memberof Address6\n   * @instance\n   * @param {number} [mask=subnet] - the number of bits to mask\n   * @returns {String} the first n bits of the address as a string\n   */\n  mask(mask: number = this.subnetMask): string {\n    return this.getBitsBase2(0, mask);\n  }\n\n  /**\n   * Return the number of possible subnets of a given size in the address\n   * @memberof Address6\n   * @instance\n   * @param {number} [size=128] - the subnet size\n   * @returns {String}\n   */\n  // TODO: probably useful to have a numeric version of this too\n  possibleSubnets(subnetSize: number = 128): string {\n    const availableBits = constants6.BITS - this.subnetMask;\n    const subnetBits = Math.abs(subnetSize - constants6.BITS);\n    const subnetPowers = availableBits - subnetBits;\n\n    if (subnetPowers < 0) {\n      return '0';\n    }\n\n    return addCommas(new BigInteger('2', 10).pow(subnetPowers).toString(10));\n  }\n\n  /**\n   * Helper function getting start address.\n   * @memberof Address6\n   * @instance\n   * @returns {BigInteger}\n   */\n  _startAddress(): BigInteger {\n    return new BigInteger(this.mask() + '0'.repeat(constants6.BITS - this.subnetMask), 2);\n  }\n\n  /**\n   * The first address in the range given by this address' subnet\n   * Often referred to as the Network Address.\n   * @memberof Address6\n   * @instance\n   * @returns {Address6}\n   */\n  startAddress(): Address6 {\n    return Address6.fromBigInteger(this._startAddress());\n  }\n\n  /**\n   * The first host address in the range given by this address's subnet ie\n   * the first address after the Network Address\n   * @memberof Address6\n   * @instance\n   * @returns {Address6}\n   */\n  startAddressExclusive(): Address6 {\n    const adjust = new BigInteger('1');\n    return Address6.fromBigInteger(this._startAddress().add(adjust));\n  }\n\n  /**\n   * Helper function getting end address.\n   * @memberof Address6\n   * @instance\n   * @returns {BigInteger}\n   */\n  _endAddress(): BigInteger {\n    return new BigInteger(this.mask() + '1'.repeat(constants6.BITS - this.subnetMask), 2);\n  }\n\n  /**\n   * The last address in the range given by this address' subnet\n   * Often referred to as the Broadcast\n   * @memberof Address6\n   * @instance\n   * @returns {Address6}\n   */\n  endAddress(): Address6 {\n    return Address6.fromBigInteger(this._endAddress());\n  }\n\n  /**\n   * The last host address in the range given by this address's subnet ie\n   * the last address prior to the Broadcast Address\n   * @memberof Address6\n   * @instance\n   * @returns {Address6}\n   */\n  endAddressExclusive(): Address6 {\n    const adjust = new BigInteger('1');\n    return Address6.fromBigInteger(this._endAddress().subtract(adjust));\n  }\n\n  /**\n   * Return the scope of the address\n   * @memberof Address6\n   * @instance\n   * @returns {String}\n   */\n  getScope(): string {\n    let scope = constants6.SCOPES[this.getBits(12, 16).intValue()];\n\n    if (this.getType() === 'Global unicast' && scope !== 'Link local') {\n      scope = 'Global';\n    }\n\n    return scope || 'Unknown';\n  }\n\n  /**\n   * Return the type of the address\n   * @memberof Address6\n   * @instance\n   * @returns {String}\n   */\n  getType(): string {\n    for (const subnet of Object.keys(constants6.TYPES)) {\n      if (this.isInSubnet(new Address6(subnet))) {\n        return constants6.TYPES[subnet] as string;\n      }\n    }\n\n    return 'Global unicast';\n  }\n\n  /**\n   * Return the bits in the given range as a BigInteger\n   * @memberof Address6\n   * @instance\n   * @returns {BigInteger}\n   */\n  getBits(start: number, end: number): BigInteger {\n    return new BigInteger(this.getBitsBase2(start, end), 2);\n  }\n\n  /**\n   * Return the bits in the given range as a base-2 string\n   * @memberof Address6\n   * @instance\n   * @returns {String}\n   */\n  getBitsBase2(start: number, end: number): string {\n    return this.binaryZeroPad().slice(start, end);\n  }\n\n  /**\n   * Return the bits in the given range as a base-16 string\n   * @memberof Address6\n   * @instance\n   * @returns {String}\n   */\n  getBitsBase16(start: number, end: number): string {\n    const length = end - start;\n\n    if (length % 4 !== 0) {\n      throw new Error('Length of bits to retrieve must be divisible by four');\n    }\n\n    return this.getBits(start, end)\n      .toString(16)\n      .padStart(length / 4, '0');\n  }\n\n  /**\n   * Return the bits that are set past the subnet mask length\n   * @memberof Address6\n   * @instance\n   * @returns {String}\n   */\n  getBitsPastSubnet(): string {\n    return this.getBitsBase2(this.subnetMask, constants6.BITS);\n  }\n\n  /**\n   * Return the reversed ip6.arpa form of the address\n   * @memberof Address6\n   * @param {Object} options\n   * @param {boolean} options.omitSuffix - omit the \"ip6.arpa\" suffix\n   * @instance\n   * @returns {String}\n   */\n  reverseForm(options?: common.ReverseFormOptions): string {\n    if (!options) {\n      options = {};\n    }\n\n    const characters = Math.floor(this.subnetMask / 4);\n\n    const reversed = this.canonicalForm()\n      .replace(/:/g, '')\n      .split('')\n      .slice(0, characters)\n      .reverse()\n      .join('.');\n\n    if (characters > 0) {\n      if (options.omitSuffix) {\n        return reversed;\n      }\n\n      return sprintf('%s.ip6.arpa.', reversed);\n    }\n\n    if (options.omitSuffix) {\n      return '';\n    }\n\n    return 'ip6.arpa.';\n  }\n\n  /**\n   * Return the correct form of the address\n   * @memberof Address6\n   * @instance\n   * @returns {String}\n   */\n  correctForm(): string {\n    let i;\n    let groups = [];\n\n    let zeroCounter = 0;\n    const zeroes = [];\n\n    for (i = 0; i < this.parsedAddress.length; i++) {\n      const value = parseInt(this.parsedAddress[i], 16);\n\n      if (value === 0) {\n        zeroCounter++;\n      }\n\n      if (value !== 0 && zeroCounter > 0) {\n        if (zeroCounter > 1) {\n          zeroes.push([i - zeroCounter, i - 1]);\n        }\n\n        zeroCounter = 0;\n      }\n    }\n\n    // Do we end with a string of zeroes?\n    if (zeroCounter > 1) {\n      zeroes.push([this.parsedAddress.length - zeroCounter, this.parsedAddress.length - 1]);\n    }\n\n    const zeroLengths = zeroes.map((n) => n[1] - n[0] + 1);\n\n    if (zeroes.length > 0) {\n      const index = zeroLengths.indexOf(Math.max(...zeroLengths) as number);\n\n      groups = compact(this.parsedAddress, zeroes[index]);\n    } else {\n      groups = this.parsedAddress;\n    }\n\n    for (i = 0; i < groups.length; i++) {\n      if (groups[i] !== 'compact') {\n        groups[i] = parseInt(groups[i], 16).toString(16);\n      }\n    }\n\n    let correct = groups.join(':');\n\n    correct = correct.replace(/^compact$/, '::');\n    correct = correct.replace(/^compact|compact$/, ':');\n    correct = correct.replace(/compact/, '');\n\n    return correct;\n  }\n\n  /**\n   * Return a zero-padded base-2 string representation of the address\n   * @memberof Address6\n   * @instance\n   * @returns {String}\n   * @example\n   * var address = new Address6('2001:4860:4001:803::1011');\n   * address.binaryZeroPad();\n   * // '0010000000000001010010000110000001000000000000010000100000000011\n   * //  0000000000000000000000000000000000000000000000000001000000010001'\n   */\n  binaryZeroPad(): string {\n    return this.bigInteger().toString(2).padStart(constants6.BITS, '0');\n  }\n\n  // TODO: Improve the semantics of this helper function\n  parse4in6(address: string): string {\n    const groups = address.split(':');\n    const lastGroup = groups.slice(-1)[0];\n\n    const address4 = lastGroup.match(constants4.RE_ADDRESS);\n\n    if (address4) {\n      this.parsedAddress4 = address4[0];\n      this.address4 = new Address4(this.parsedAddress4);\n\n      for (let i = 0; i < this.address4.groups; i++) {\n        if (/^0[0-9]+/.test(this.address4.parsedAddress[i])) {\n          throw new AddressError(\n            \"IPv4 addresses can't have leading zeroes.\",\n            address.replace(\n              constants4.RE_ADDRESS,\n              this.address4.parsedAddress.map(spanLeadingZeroes4).join('.')\n            )\n          );\n        }\n      }\n\n      this.v4 = true;\n\n      groups[groups.length - 1] = this.address4.toGroup6();\n\n      address = groups.join(':');\n    }\n\n    return address;\n  }\n\n  // TODO: Make private?\n  parse(address: string): string[] {\n    address = this.parse4in6(address);\n\n    const badCharacters = address.match(constants6.RE_BAD_CHARACTERS);\n\n    if (badCharacters) {\n      throw new AddressError(\n        sprintf(\n          'Bad character%s detected in address: %s',\n          badCharacters.length > 1 ? 's' : '',\n          badCharacters.join('')\n        ),\n        address.replace(constants6.RE_BAD_CHARACTERS, '<span class=\"parse-error\">$1</span>')\n      );\n    }\n\n    const badAddress = address.match(constants6.RE_BAD_ADDRESS);\n\n    if (badAddress) {\n      throw new AddressError(\n        sprintf('Address failed regex: %s', badAddress.join('')),\n        address.replace(constants6.RE_BAD_ADDRESS, '<span class=\"parse-error\">$1</span>')\n      );\n    }\n\n    let groups: string[] = [];\n\n    const halves = address.split('::');\n\n    if (halves.length === 2) {\n      let first = halves[0].split(':');\n      let last = halves[1].split(':');\n\n      if (first.length === 1 && first[0] === '') {\n        first = [];\n      }\n\n      if (last.length === 1 && last[0] === '') {\n        last = [];\n      }\n\n      const remaining = this.groups - (first.length + last.length);\n\n      if (!remaining) {\n        throw new AddressError('Error parsing groups');\n      }\n\n      this.elidedGroups = remaining;\n\n      this.elisionBegin = first.length;\n      this.elisionEnd = first.length + this.elidedGroups;\n\n      groups = groups.concat(first);\n\n      for (let i = 0; i < remaining; i++) {\n        groups.push('0');\n      }\n\n      groups = groups.concat(last);\n    } else if (halves.length === 1) {\n      groups = address.split(':');\n\n      this.elidedGroups = 0;\n    } else {\n      throw new AddressError('Too many :: groups found');\n    }\n\n    groups = groups.map((group: string) => sprintf('%x', parseInt(group, 16)));\n\n    if (groups.length !== this.groups) {\n      throw new AddressError('Incorrect number of groups found');\n    }\n\n    return groups;\n  }\n\n  /**\n   * Return the canonical form of the address\n   * @memberof Address6\n   * @instance\n   * @returns {String}\n   */\n  canonicalForm(): string {\n    return this.parsedAddress.map(paddedHex).join(':');\n  }\n\n  /**\n   * Return the decimal form of the address\n   * @memberof Address6\n   * @instance\n   * @returns {String}\n   */\n  decimal(): string {\n    return this.parsedAddress.map((n) => sprintf('%05d', parseInt(n, 16))).join(':');\n  }\n\n  /**\n   * Return the address as a BigInteger\n   * @memberof Address6\n   * @instance\n   * @returns {BigInteger}\n   */\n  bigInteger(): BigInteger {\n    return new BigInteger(this.parsedAddress.map(paddedHex).join(''), 16);\n  }\n\n  /**\n   * Return the last two groups of this address as an IPv4 address string\n   * @memberof Address6\n   * @instance\n   * @returns {Address4}\n   * @example\n   * var address = new Address6('2001:4860:4001::1825:bf11');\n   * address.to4().correctForm(); // '24.37.191.17'\n   */\n  to4(): Address4 {\n    const binary = this.binaryZeroPad().split('');\n\n    return Address4.fromHex(new BigInteger(binary.slice(96, 128).join(''), 2).toString(16));\n  }\n\n  /**\n   * Return the v4-in-v6 form of the address\n   * @memberof Address6\n   * @instance\n   * @returns {String}\n   */\n  to4in6(): string {\n    const address4 = this.to4();\n    const address6 = new Address6(this.parsedAddress.slice(0, 6).join(':'), 6);\n\n    const correct = address6.correctForm();\n\n    let infix = '';\n\n    if (!/:$/.test(correct)) {\n      infix = ':';\n    }\n\n    return correct + infix + address4.address;\n  }\n\n  /**\n   * Return an object containing the Teredo properties of the address\n   * @memberof Address6\n   * @instance\n   * @returns {Object}\n   */\n  inspectTeredo(): TeredoProperties {\n    /*\n    - Bits 0 to 31 are set to the Teredo prefix (normally 2001:0000::/32).\n    - Bits 32 to 63 embed the primary IPv4 address of the Teredo server that\n      is used.\n    - Bits 64 to 79 can be used to define some flags. Currently only the\n      higher order bit is used; it is set to 1 if the Teredo client is\n      located behind a cone NAT, 0 otherwise. For Microsoft's Windows Vista\n      and Windows Server 2008 implementations, more bits are used. In those\n      implementations, the format for these 16 bits is \"CRAAAAUG AAAAAAAA\",\n      where \"C\" remains the \"Cone\" flag. The \"R\" bit is reserved for future\n      use. The \"U\" bit is for the Universal/Local flag (set to 0). The \"G\" bit\n      is Individual/Group flag (set to 0). The A bits are set to a 12-bit\n      randomly generated number chosen by the Teredo client to introduce\n      additional protection for the Teredo node against IPv6-based scanning\n      attacks.\n    - Bits 80 to 95 contains the obfuscated UDP port number. This is the\n      port number that is mapped by the NAT to the Teredo client with all\n      bits inverted.\n    - Bits 96 to 127 contains the obfuscated IPv4 address. This is the\n      public IPv4 address of the NAT with all bits inverted.\n    */\n    const prefix = this.getBitsBase16(0, 32);\n\n    const udpPort = this.getBits(80, 96).xor(new BigInteger('ffff', 16)).toString();\n\n    const server4 = Address4.fromHex(this.getBitsBase16(32, 64));\n    const client4 = Address4.fromHex(\n      this.getBits(96, 128).xor(new BigInteger('ffffffff', 16)).toString(16)\n    );\n\n    const flags = this.getBits(64, 80);\n    const flagsBase2 = this.getBitsBase2(64, 80);\n\n    const coneNat = flags.testBit(15);\n    const reserved = flags.testBit(14);\n    const groupIndividual = flags.testBit(8);\n    const universalLocal = flags.testBit(9);\n    const nonce = new BigInteger(flagsBase2.slice(2, 6) + flagsBase2.slice(8, 16), 2).toString(10);\n\n    return {\n      prefix: sprintf('%s:%s', prefix.slice(0, 4), prefix.slice(4, 8)),\n      server4: server4.address,\n      client4: client4.address,\n      flags: flagsBase2,\n      coneNat,\n      microsoft: {\n        reserved,\n        universalLocal,\n        groupIndividual,\n        nonce,\n      },\n      udpPort,\n    };\n  }\n\n  /**\n   * Return an object containing the 6to4 properties of the address\n   * @memberof Address6\n   * @instance\n   * @returns {Object}\n   */\n  inspect6to4(): SixToFourProperties {\n    /*\n    - Bits 0 to 15 are set to the 6to4 prefix (2002::/16).\n    - Bits 16 to 48 embed the IPv4 address of the 6to4 gateway that is used.\n    */\n\n    const prefix = this.getBitsBase16(0, 16);\n\n    const gateway = Address4.fromHex(this.getBitsBase16(16, 48));\n\n    return {\n      prefix: sprintf('%s', prefix.slice(0, 4)),\n      gateway: gateway.address,\n    };\n  }\n\n  /**\n   * Return a v6 6to4 address from a v6 v4inv6 address\n   * @memberof Address6\n   * @instance\n   * @returns {Address6}\n   */\n  to6to4(): Address6 | null {\n    if (!this.is4()) {\n      return null;\n    }\n\n    const addr6to4 = [\n      '2002',\n      this.getBitsBase16(96, 112),\n      this.getBitsBase16(112, 128),\n      '',\n      '/16',\n    ].join(':');\n\n    return new Address6(addr6to4);\n  }\n\n  /**\n   * Return a byte array\n   * @memberof Address6\n   * @instance\n   * @returns {Array}\n   */\n  toByteArray(): number[] {\n    const byteArray = this.bigInteger().toByteArray();\n\n    // work around issue where `toByteArray` returns a leading 0 element\n    if (byteArray.length === 17 && byteArray[0] === 0) {\n      return byteArray.slice(1);\n    }\n\n    return byteArray;\n  }\n\n  /**\n   * Return an unsigned byte array\n   * @memberof Address6\n   * @instance\n   * @returns {Array}\n   */\n  toUnsignedByteArray(): number[] {\n    return this.toByteArray().map(unsignByte);\n  }\n\n  /**\n   * Convert a byte array to an Address6 object\n   * @memberof Address6\n   * @static\n   * @returns {Address6}\n   */\n  static fromByteArray(bytes: Array<any>): Address6 {\n    return this.fromUnsignedByteArray(bytes.map(unsignByte));\n  }\n\n  /**\n   * Convert an unsigned byte array to an Address6 object\n   * @memberof Address6\n   * @static\n   * @returns {Address6}\n   */\n  static fromUnsignedByteArray(bytes: Array<any>): Address6 {\n    const BYTE_MAX = new BigInteger('256', 10);\n    let result = new BigInteger('0', 10);\n    let multiplier = new BigInteger('1', 10);\n\n    for (let i = bytes.length - 1; i >= 0; i--) {\n      result = result.add(multiplier.multiply(new BigInteger(bytes[i].toString(10), 10)));\n\n      multiplier = multiplier.multiply(BYTE_MAX);\n    }\n\n    return Address6.fromBigInteger(result);\n  }\n\n  // #region Attributes\n  /**\n   * Returns true if the given address is in the subnet of the current address\n   * @memberof Address6\n   * @instance\n   * @returns {boolean}\n   */\n  isInSubnet = common.isInSubnet;\n\n  /**\n   * Returns true if the address is correct, false otherwise\n   * @memberof Address6\n   * @instance\n   * @returns {boolean}\n   */\n  isCorrect = common.isCorrect(constants6.BITS);\n\n  /**\n   * Returns true if the address is in the canonical form, false otherwise\n   * @memberof Address6\n   * @instance\n   * @returns {boolean}\n   */\n  isCanonical(): boolean {\n    return this.addressMinusSuffix === this.canonicalForm();\n  }\n\n  /**\n   * Returns true if the address is a link local address, false otherwise\n   * @memberof Address6\n   * @instance\n   * @returns {boolean}\n   */\n  isLinkLocal(): boolean {\n    // Zeroes are required, i.e. we can't check isInSubnet with 'fe80::/10'\n    if (\n      this.getBitsBase2(0, 64) ===\n      '1111111010000000000000000000000000000000000000000000000000000000'\n    ) {\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Returns true if the address is a multicast address, false otherwise\n   * @memberof Address6\n   * @instance\n   * @returns {boolean}\n   */\n  isMulticast(): boolean {\n    return this.getType() === 'Multicast';\n  }\n\n  /**\n   * Returns true if the address is a v4-in-v6 address, false otherwise\n   * @memberof Address6\n   * @instance\n   * @returns {boolean}\n   */\n  is4(): boolean {\n    return this.v4;\n  }\n\n  /**\n   * Returns true if the address is a Teredo address, false otherwise\n   * @memberof Address6\n   * @instance\n   * @returns {boolean}\n   */\n  isTeredo(): boolean {\n    return this.isInSubnet(new Address6('2001::/32'));\n  }\n\n  /**\n   * Returns true if the address is a 6to4 address, false otherwise\n   * @memberof Address6\n   * @instance\n   * @returns {boolean}\n   */\n  is6to4(): boolean {\n    return this.isInSubnet(new Address6('2002::/16'));\n  }\n\n  /**\n   * Returns true if the address is a loopback address, false otherwise\n   * @memberof Address6\n   * @instance\n   * @returns {boolean}\n   */\n  isLoopback(): boolean {\n    return this.getType() === 'Loopback';\n  }\n  // #endregion\n\n  // #region HTML\n  /**\n   * @returns {String} the address in link form with a default port of 80\n   */\n  href(optionalPort?: number | string): string {\n    if (optionalPort === undefined) {\n      optionalPort = '';\n    } else {\n      optionalPort = sprintf(':%s', optionalPort);\n    }\n\n    return sprintf('http://[%s]%s/', this.correctForm(), optionalPort);\n  }\n\n  /**\n   * @returns {String} a link suitable for conveying the address via a URL hash\n   */\n  link(options?: { className?: string; prefix?: string; v4?: boolean }): string {\n    if (!options) {\n      options = {};\n    }\n\n    if (options.className === undefined) {\n      options.className = '';\n    }\n\n    if (options.prefix === undefined) {\n      options.prefix = '/#address=';\n    }\n\n    if (options.v4 === undefined) {\n      options.v4 = false;\n    }\n\n    let formFunction = this.correctForm;\n\n    if (options.v4) {\n      formFunction = this.to4in6;\n    }\n\n    if (options.className) {\n      return sprintf(\n        '<a href=\"%1$s%2$s\" class=\"%3$s\">%2$s</a>',\n        options.prefix,\n        formFunction.call(this),\n        options.className\n      );\n    }\n\n    return sprintf('<a href=\"%1$s%2$s\">%2$s</a>', options.prefix, formFunction.call(this));\n  }\n\n  /**\n   * Groups an address\n   * @returns {String}\n   */\n  group(): string {\n    if (this.elidedGroups === 0) {\n      // The simple case\n      return helpers.simpleGroup(this.address).join(':');\n    }\n\n    assert(typeof this.elidedGroups === 'number');\n    assert(typeof this.elisionBegin === 'number');\n\n    // The elided case\n    const output = [];\n\n    const [left, right] = this.address.split('::');\n\n    if (left.length) {\n      output.push(...helpers.simpleGroup(left));\n    } else {\n      output.push('');\n    }\n\n    const classes = ['hover-group'];\n\n    for (let i = this.elisionBegin; i < this.elisionBegin + this.elidedGroups; i++) {\n      classes.push(sprintf('group-%d', i));\n    }\n\n    output.push(sprintf('<span class=\"%s\"></span>', classes.join(' ')));\n\n    if (right.length) {\n      output.push(...helpers.simpleGroup(right, this.elisionEnd));\n    } else {\n      output.push('');\n    }\n\n    if (this.is4()) {\n      assert(this.address4 instanceof Address4);\n\n      output.pop();\n      output.push(this.address4.groupForV6());\n    }\n\n    return output.join(':');\n  }\n  // #endregion\n\n  // #region Regular expressions\n  /**\n   * Generate a regular expression string that can be used to find or validate\n   * all variations of this address\n   * @memberof Address6\n   * @instance\n   * @param {boolean} substringSearch\n   * @returns {string}\n   */\n  regularExpressionString(this: Address6, substringSearch: boolean = false): string {\n    let output: string[] = [];\n\n    // TODO: revisit why this is necessary\n    const address6 = new Address6(this.correctForm());\n\n    if (address6.elidedGroups === 0) {\n      // The simple case\n      output.push(simpleRegularExpression(address6.parsedAddress));\n    } else if (address6.elidedGroups === constants6.GROUPS) {\n      // A completely elided address\n      output.push(possibleElisions(constants6.GROUPS));\n    } else {\n      // A partially elided address\n      const halves = address6.address.split('::');\n\n      if (halves[0].length) {\n        output.push(simpleRegularExpression(halves[0].split(':')));\n      }\n\n      assert(typeof address6.elidedGroups === 'number');\n\n      output.push(\n        possibleElisions(address6.elidedGroups, halves[0].length !== 0, halves[1].length !== 0)\n      );\n\n      if (halves[1].length) {\n        output.push(simpleRegularExpression(halves[1].split(':')));\n      }\n\n      output = [output.join(':')];\n    }\n\n    if (!substringSearch) {\n      output = [\n        '(?=^|',\n        ADDRESS_BOUNDARY,\n        '|[^\\\\w\\\\:])(',\n        ...output,\n        ')(?=[^\\\\w\\\\:]|',\n        ADDRESS_BOUNDARY,\n        '|$)',\n      ];\n    }\n\n    return output.join('');\n  }\n\n  /**\n   * Generate a regular expression that can be used to find or validate all\n   * variations of this address.\n   * @memberof Address6\n   * @instance\n   * @param {boolean} substringSearch\n   * @returns {RegExp}\n   */\n  regularExpression(this: Address6, substringSearch: boolean = false): RegExp {\n    return new RegExp(this.regularExpressionString(substringSearch), 'i');\n  }\n  // #endregion\n}\n","import { Address4 } from './ipv4';\nimport { Address6 } from './ipv6';\nimport { AddressError } from './address-error';\n\nexport { Address4 };\nexport { Address6 };\nexport { AddressError };\n\nimport * as helpers from './v6/helpers';\n\nexport const v6 = { helpers };\n",null,null,null,null,null,null,"const ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case MAP:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nfunction isNode(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case ALIAS:\n            case MAP:\n            case SCALAR:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexport { ALIAS, DOC, MAP, NODE_TYPE, PAIR, SCALAR, SEQ, hasAnchor, isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq };\n","import { isDocument, isNode, isPair, isCollection, isMap, isSeq, isScalar, isAlias } from './nodes/identity.js';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (isDocument(node)) {\n        const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n    const ctrl = callVisitor(key, node, visitor, path);\n    if (isNode(ctrl) || isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visit_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = visit_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = visit_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = visit_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `Promise`: Must resolve to one of the following values\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (isDocument(node)) {\n        const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n    const ctrl = await callVisitor(key, node, visitor, path);\n    if (isNode(ctrl) || isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visitAsync_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = await visitAsync_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = await visitAsync_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = await visitAsync_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\nfunction initVisitor(visitor) {\n    if (typeof visitor === 'object' &&\n        (visitor.Collection || visitor.Node || visitor.Value)) {\n        return Object.assign({\n            Alias: visitor.Node,\n            Map: visitor.Node,\n            Scalar: visitor.Node,\n            Seq: visitor.Node\n        }, visitor.Value && {\n            Map: visitor.Value,\n            Scalar: visitor.Value,\n            Seq: visitor.Value\n        }, visitor.Collection && {\n            Map: visitor.Collection,\n            Seq: visitor.Collection\n        }, visitor);\n    }\n    return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n    if (typeof visitor === 'function')\n        return visitor(key, node, path);\n    if (isMap(node))\n        return visitor.Map?.(key, node, path);\n    if (isSeq(node))\n        return visitor.Seq?.(key, node, path);\n    if (isPair(node))\n        return visitor.Pair?.(key, node, path);\n    if (isScalar(node))\n        return visitor.Scalar?.(key, node, path);\n    if (isAlias(node))\n        return visitor.Alias?.(key, node, path);\n    return undefined;\n}\nfunction replaceNode(key, path, node) {\n    const parent = path[path.length - 1];\n    if (isCollection(parent)) {\n        parent.items[key] = node;\n    }\n    else if (isPair(parent)) {\n        if (key === 'key')\n            parent.key = node;\n        else\n            parent.value = node;\n    }\n    else if (isDocument(parent)) {\n        parent.contents = node;\n    }\n    else {\n        const pt = isAlias(parent) ? 'alias' : 'scalar';\n        throw new Error(`Cannot replace node with ${pt} parent`);\n    }\n}\n\nexport { visit, visitAsync };\n","import { isNode } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\nconst escapeChars = {\n    '!': '%21',\n    ',': '%2C',\n    '[': '%5B',\n    ']': '%5D',\n    '{': '%7B',\n    '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n    constructor(yaml, tags) {\n        /**\n         * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n         * included in the document's stringified representation.\n         */\n        this.docStart = null;\n        /** The doc-end marker `...`.  */\n        this.docEnd = false;\n        this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n        this.tags = Object.assign({}, Directives.defaultTags, tags);\n    }\n    clone() {\n        const copy = new Directives(this.yaml, this.tags);\n        copy.docStart = this.docStart;\n        return copy;\n    }\n    /**\n     * During parsing, get a Directives instance for the current document and\n     * update the stream state according to the current version's spec.\n     */\n    atDocument() {\n        const res = new Directives(this.yaml, this.tags);\n        switch (this.yaml.version) {\n            case '1.1':\n                this.atNextDocument = true;\n                break;\n            case '1.2':\n                this.atNextDocument = false;\n                this.yaml = {\n                    explicit: Directives.defaultYaml.explicit,\n                    version: '1.2'\n                };\n                this.tags = Object.assign({}, Directives.defaultTags);\n                break;\n        }\n        return res;\n    }\n    /**\n     * @param onError - May be called even if the action was successful\n     * @returns `true` on success\n     */\n    add(line, onError) {\n        if (this.atNextDocument) {\n            this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n            this.tags = Object.assign({}, Directives.defaultTags);\n            this.atNextDocument = false;\n        }\n        const parts = line.trim().split(/[ \\t]+/);\n        const name = parts.shift();\n        switch (name) {\n            case '%TAG': {\n                if (parts.length !== 2) {\n                    onError(0, '%TAG directive should contain exactly two parts');\n                    if (parts.length < 2)\n                        return false;\n                }\n                const [handle, prefix] = parts;\n                this.tags[handle] = prefix;\n                return true;\n            }\n            case '%YAML': {\n                this.yaml.explicit = true;\n                if (parts.length !== 1) {\n                    onError(0, '%YAML directive should contain exactly one part');\n                    return false;\n                }\n                const [version] = parts;\n                if (version === '1.1' || version === '1.2') {\n                    this.yaml.version = version;\n                    return true;\n                }\n                else {\n                    const isValid = /^\\d+\\.\\d+$/.test(version);\n                    onError(6, `Unsupported YAML version ${version}`, isValid);\n                    return false;\n                }\n            }\n            default:\n                onError(0, `Unknown directive ${name}`, true);\n                return false;\n        }\n    }\n    /**\n     * Resolves a tag, matching handles to those defined in %TAG directives.\n     *\n     * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n     *   `'!local'` tag, or `null` if unresolvable.\n     */\n    tagName(source, onError) {\n        if (source === '!')\n            return '!'; // non-specific tag\n        if (source[0] !== '!') {\n            onError(`Not a valid tag: ${source}`);\n            return null;\n        }\n        if (source[1] === '<') {\n            const verbatim = source.slice(2, -1);\n            if (verbatim === '!' || verbatim === '!!') {\n                onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n                return null;\n            }\n            if (source[source.length - 1] !== '>')\n                onError('Verbatim tags must end with a >');\n            return verbatim;\n        }\n        const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n        if (!suffix)\n            onError(`The ${source} tag has no suffix`);\n        const prefix = this.tags[handle];\n        if (prefix) {\n            try {\n                return prefix + decodeURIComponent(suffix);\n            }\n            catch (error) {\n                onError(String(error));\n                return null;\n            }\n        }\n        if (handle === '!')\n            return source; // local tag\n        onError(`Could not resolve tag: ${source}`);\n        return null;\n    }\n    /**\n     * Given a fully resolved tag, returns its printable string form,\n     * taking into account current tag prefixes and defaults.\n     */\n    tagString(tag) {\n        for (const [handle, prefix] of Object.entries(this.tags)) {\n            if (tag.startsWith(prefix))\n                return handle + escapeTagName(tag.substring(prefix.length));\n        }\n        return tag[0] === '!' ? tag : `!<${tag}>`;\n    }\n    toString(doc) {\n        const lines = this.yaml.explicit\n            ? [`%YAML ${this.yaml.version || '1.2'}`]\n            : [];\n        const tagEntries = Object.entries(this.tags);\n        let tagNames;\n        if (doc && tagEntries.length > 0 && isNode(doc.contents)) {\n            const tags = {};\n            visit(doc.contents, (_key, node) => {\n                if (isNode(node) && node.tag)\n                    tags[node.tag] = true;\n            });\n            tagNames = Object.keys(tags);\n        }\n        else\n            tagNames = [];\n        for (const [handle, prefix] of tagEntries) {\n            if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n                continue;\n            if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n                lines.push(`%TAG ${handle} ${prefix}`);\n        }\n        return lines.join('\\n');\n    }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexport { Directives };\n","import { isScalar, isCollection } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n    if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n        const sa = JSON.stringify(anchor);\n        const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n        throw new Error(msg);\n    }\n    return true;\n}\nfunction anchorNames(root) {\n    const anchors = new Set();\n    visit(root, {\n        Value(_key, node) {\n            if (node.anchor)\n                anchors.add(node.anchor);\n        }\n    });\n    return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n    for (let i = 1; true; ++i) {\n        const name = `${prefix}${i}`;\n        if (!exclude.has(name))\n            return name;\n    }\n}\nfunction createNodeAnchors(doc, prefix) {\n    const aliasObjects = [];\n    const sourceObjects = new Map();\n    let prevAnchors = null;\n    return {\n        onAnchor: (source) => {\n            aliasObjects.push(source);\n            if (!prevAnchors)\n                prevAnchors = anchorNames(doc);\n            const anchor = findNewAnchor(prefix, prevAnchors);\n            prevAnchors.add(anchor);\n            return anchor;\n        },\n        /**\n         * With circular references, the source node is only resolved after all\n         * of its child nodes are. This is why anchors are set only after all of\n         * the nodes have been created.\n         */\n        setAnchors: () => {\n            for (const source of aliasObjects) {\n                const ref = sourceObjects.get(source);\n                if (typeof ref === 'object' &&\n                    ref.anchor &&\n                    (isScalar(ref.node) || isCollection(ref.node))) {\n                    ref.node.anchor = ref.anchor;\n                }\n                else {\n                    const error = new Error('Failed to resolve repeated object (this should not happen)');\n                    error.source = source;\n                    throw error;\n                }\n            }\n        },\n        sourceObjects\n    };\n}\n\nexport { anchorIsValid, anchorNames, createNodeAnchors, findNewAnchor };\n","/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n    if (val && typeof val === 'object') {\n        if (Array.isArray(val)) {\n            for (let i = 0, len = val.length; i < len; ++i) {\n                const v0 = val[i];\n                const v1 = applyReviver(reviver, val, String(i), v0);\n                // eslint-disable-next-line @typescript-eslint/no-array-delete\n                if (v1 === undefined)\n                    delete val[i];\n                else if (v1 !== v0)\n                    val[i] = v1;\n            }\n        }\n        else if (val instanceof Map) {\n            for (const k of Array.from(val.keys())) {\n                const v0 = val.get(k);\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    val.delete(k);\n                else if (v1 !== v0)\n                    val.set(k, v1);\n            }\n        }\n        else if (val instanceof Set) {\n            for (const v0 of Array.from(val)) {\n                const v1 = applyReviver(reviver, val, v0, v0);\n                if (v1 === undefined)\n                    val.delete(v0);\n                else if (v1 !== v0) {\n                    val.delete(v0);\n                    val.add(v1);\n                }\n            }\n        }\n        else {\n            for (const [k, v0] of Object.entries(val)) {\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    delete val[k];\n                else if (v1 !== v0)\n                    val[k] = v1;\n            }\n        }\n    }\n    return reviver.call(obj, key, val);\n}\n\nexport { applyReviver };\n","import { hasAnchor } from './identity.js';\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n *   as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n *   `{ keep: true }` is not set, output should be suitable for JSON\n *   stringification.\n */\nfunction toJS(value, arg, ctx) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    if (Array.isArray(value))\n        return value.map((v, i) => toJS(v, String(i), ctx));\n    if (value && typeof value.toJSON === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        if (!ctx || !hasAnchor(value))\n            return value.toJSON(arg, ctx);\n        const data = { aliasCount: 0, count: 1, res: undefined };\n        ctx.anchors.set(value, data);\n        ctx.onCreate = res => {\n            data.res = res;\n            delete ctx.onCreate;\n        };\n        const res = value.toJSON(arg, ctx);\n        if (ctx.onCreate)\n            ctx.onCreate(res);\n        return res;\n    }\n    if (typeof value === 'bigint' && !ctx?.keep)\n        return Number(value);\n    return value;\n}\n\nexport { toJS };\n","import { applyReviver } from '../doc/applyReviver.js';\nimport { NODE_TYPE, isDocument } from './identity.js';\nimport { toJS } from './toJS.js';\n\nclass NodeBase {\n    constructor(type) {\n        Object.defineProperty(this, NODE_TYPE, { value: type });\n    }\n    /** Create a copy of this node.  */\n    clone() {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /** A plain JavaScript representation of this node. */\n    toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n        if (!isDocument(doc))\n            throw new TypeError('A document argument is required');\n        const ctx = {\n            anchors: new Map(),\n            doc,\n            keep: true,\n            mapAsMap: mapAsMap === true,\n            mapKeyWarned: false,\n            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n        };\n        const res = toJS(this, '', ctx);\n        if (typeof onAnchor === 'function')\n            for (const { count, res } of ctx.anchors.values())\n                onAnchor(res, count);\n        return typeof reviver === 'function'\n            ? applyReviver(reviver, { '': res }, '', res)\n            : res;\n    }\n}\n\nexport { NodeBase };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { visit } from '../visit.js';\nimport { ALIAS, isAlias, isCollection, isPair } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nclass Alias extends NodeBase {\n    constructor(source) {\n        super(ALIAS);\n        this.source = source;\n        Object.defineProperty(this, 'tag', {\n            set() {\n                throw new Error('Alias nodes cannot have tags');\n            }\n        });\n    }\n    /**\n     * Resolve the value of this alias within `doc`, finding the last\n     * instance of the `source` anchor before this node.\n     */\n    resolve(doc) {\n        let found = undefined;\n        visit(doc, {\n            Node: (_key, node) => {\n                if (node === this)\n                    return visit.BREAK;\n                if (node.anchor === this.source)\n                    found = node;\n            }\n        });\n        return found;\n    }\n    toJSON(_arg, ctx) {\n        if (!ctx)\n            return { source: this.source };\n        const { anchors, doc, maxAliasCount } = ctx;\n        const source = this.resolve(doc);\n        if (!source) {\n            const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n            throw new ReferenceError(msg);\n        }\n        let data = anchors.get(source);\n        if (!data) {\n            // Resolve anchors for Node.prototype.toJS()\n            toJS(source, null, ctx);\n            data = anchors.get(source);\n        }\n        /* istanbul ignore if */\n        if (!data || data.res === undefined) {\n            const msg = 'This should not happen: Alias anchor was not resolved?';\n            throw new ReferenceError(msg);\n        }\n        if (maxAliasCount >= 0) {\n            data.count += 1;\n            if (data.aliasCount === 0)\n                data.aliasCount = getAliasCount(doc, source, anchors);\n            if (data.count * data.aliasCount > maxAliasCount) {\n                const msg = 'Excessive alias count indicates a resource exhaustion attack';\n                throw new ReferenceError(msg);\n            }\n        }\n        return data.res;\n    }\n    toString(ctx, _onComment, _onChompKeep) {\n        const src = `*${this.source}`;\n        if (ctx) {\n            anchorIsValid(this.source);\n            if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n                const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n                throw new Error(msg);\n            }\n            if (ctx.implicitKey)\n                return `${src} `;\n        }\n        return src;\n    }\n}\nfunction getAliasCount(doc, node, anchors) {\n    if (isAlias(node)) {\n        const source = node.resolve(doc);\n        const anchor = anchors && source && anchors.get(source);\n        return anchor ? anchor.count * anchor.aliasCount : 0;\n    }\n    else if (isCollection(node)) {\n        let count = 0;\n        for (const item of node.items) {\n            const c = getAliasCount(doc, item, anchors);\n            if (c > count)\n                count = c;\n        }\n        return count;\n    }\n    else if (isPair(node)) {\n        const kc = getAliasCount(doc, node.key, anchors);\n        const vc = getAliasCount(doc, node.value, anchors);\n        return Math.max(kc, vc);\n    }\n    return 1;\n}\n\nexport { Alias };\n","import { SCALAR } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends NodeBase {\n    constructor(value) {\n        super(SCALAR);\n        this.value = value;\n    }\n    toJSON(arg, ctx) {\n        return ctx?.keep ? this.value : toJS(this.value, arg, ctx);\n    }\n    toString() {\n        return String(this.value);\n    }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexport { Scalar, isScalarValue };\n","import { Alias } from '../nodes/Alias.js';\nimport { isNode, isPair, MAP, SEQ, isDocument } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n    if (tagName) {\n        const match = tags.filter(t => t.tag === tagName);\n        const tagObj = match.find(t => !t.format) ?? match[0];\n        if (!tagObj)\n            throw new Error(`Tag ${tagName} not found`);\n        return tagObj;\n    }\n    return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n    if (isDocument(value))\n        value = value.contents;\n    if (isNode(value))\n        return value;\n    if (isPair(value)) {\n        const map = ctx.schema[MAP].createNode?.(ctx.schema, null, ctx);\n        map.items.push(value);\n        return map;\n    }\n    if (value instanceof String ||\n        value instanceof Number ||\n        value instanceof Boolean ||\n        (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n    ) {\n        // https://tc39.es/ecma262/#sec-serializejsonproperty\n        value = value.valueOf();\n    }\n    const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n    // Detect duplicate references to the same object & use Alias nodes for all\n    // after first. The `ref` wrapper allows for circular references to resolve.\n    let ref = undefined;\n    if (aliasDuplicateObjects && value && typeof value === 'object') {\n        ref = sourceObjects.get(value);\n        if (ref) {\n            if (!ref.anchor)\n                ref.anchor = onAnchor(value);\n            return new Alias(ref.anchor);\n        }\n        else {\n            ref = { anchor: null, node: null };\n            sourceObjects.set(value, ref);\n        }\n    }\n    if (tagName?.startsWith('!!'))\n        tagName = defaultTagPrefix + tagName.slice(2);\n    let tagObj = findTagObject(value, tagName, schema.tags);\n    if (!tagObj) {\n        if (value && typeof value.toJSON === 'function') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n            value = value.toJSON();\n        }\n        if (!value || typeof value !== 'object') {\n            const node = new Scalar(value);\n            if (ref)\n                ref.node = node;\n            return node;\n        }\n        tagObj =\n            value instanceof Map\n                ? schema[MAP]\n                : Symbol.iterator in Object(value)\n                    ? schema[SEQ]\n                    : schema[MAP];\n    }\n    if (onTagObj) {\n        onTagObj(tagObj);\n        delete ctx.onTagObj;\n    }\n    const node = tagObj?.createNode\n        ? tagObj.createNode(ctx.schema, value, ctx)\n        : typeof tagObj?.nodeClass?.from === 'function'\n            ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n            : new Scalar(value);\n    if (tagName)\n        node.tag = tagName;\n    else if (!tagObj.default)\n        node.tag = tagObj.tag;\n    if (ref)\n        ref.node = node;\n    return node;\n}\n\nexport { createNode };\n","import { createNode } from '../doc/createNode.js';\nimport { isNode, isPair, isCollection, isScalar } from './identity.js';\nimport { NodeBase } from './Node.js';\n\nfunction collectionFromPath(schema, path, value) {\n    let v = value;\n    for (let i = path.length - 1; i >= 0; --i) {\n        const k = path[i];\n        if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n            const a = [];\n            a[k] = v;\n            v = a;\n        }\n        else {\n            v = new Map([[k, v]]);\n        }\n    }\n    return createNode(v, undefined, {\n        aliasDuplicateObjects: false,\n        keepUndefined: false,\n        onAnchor: () => {\n            throw new Error('This should not happen, please report a bug.');\n        },\n        schema,\n        sourceObjects: new Map()\n    });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n    (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends NodeBase {\n    constructor(type, schema) {\n        super(type);\n        Object.defineProperty(this, 'schema', {\n            value: schema,\n            configurable: true,\n            enumerable: false,\n            writable: true\n        });\n    }\n    /**\n     * Create a copy of this collection.\n     *\n     * @param schema - If defined, overwrites the original's schema\n     */\n    clone(schema) {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (schema)\n            copy.schema = schema;\n        copy.items = copy.items.map(it => isNode(it) || isPair(it) ? it.clone(schema) : it);\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /**\n     * Adds a value to the collection. For `!!map` and `!!omap` the value must\n     * be a Pair instance or a `{ key, value }` object, which may not have a key\n     * that already exists in the map.\n     */\n    addIn(path, value) {\n        if (isEmptyPath(path))\n            this.add(value);\n        else {\n            const [key, ...rest] = path;\n            const node = this.get(key, true);\n            if (isCollection(node))\n                node.addIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n    /**\n     * Removes a value from the collection.\n     * @returns `true` if the item was found and removed.\n     */\n    deleteIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.delete(key);\n        const node = this.get(key, true);\n        if (isCollection(node))\n            return node.deleteIn(rest);\n        else\n            throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n    }\n    /**\n     * Returns item at `key`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    getIn(path, keepScalar) {\n        const [key, ...rest] = path;\n        const node = this.get(key, true);\n        if (rest.length === 0)\n            return !keepScalar && isScalar(node) ? node.value : node;\n        else\n            return isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n    }\n    hasAllNullValues(allowScalar) {\n        return this.items.every(node => {\n            if (!isPair(node))\n                return false;\n            const n = node.value;\n            return (n == null ||\n                (allowScalar &&\n                    isScalar(n) &&\n                    n.value == null &&\n                    !n.commentBefore &&\n                    !n.comment &&\n                    !n.tag));\n        });\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     */\n    hasIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.has(key);\n        const node = this.get(key, true);\n        return isCollection(node) ? node.hasIn(rest) : false;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    setIn(path, value) {\n        const [key, ...rest] = path;\n        if (rest.length === 0) {\n            this.set(key, value);\n        }\n        else {\n            const node = this.get(key, true);\n            if (isCollection(node))\n                node.setIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n}\n\nexport { Collection, collectionFromPath, isEmptyPath };\n","/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n    if (/^\\n+$/.test(comment))\n        return comment.substring(1);\n    return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n    ? indentComment(comment, indent)\n    : comment.includes('\\n')\n        ? '\\n' + indentComment(comment, indent)\n        : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexport { indentComment, lineComment, stringifyComment };\n","const FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n    if (!lineWidth || lineWidth < 0)\n        return text;\n    if (lineWidth < minContentWidth)\n        minContentWidth = 0;\n    const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n    if (text.length <= endStep)\n        return text;\n    const folds = [];\n    const escapedFolds = {};\n    let end = lineWidth - indent.length;\n    if (typeof indentAtStart === 'number') {\n        if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n            folds.push(0);\n        else\n            end = lineWidth - indentAtStart;\n    }\n    let split = undefined;\n    let prev = undefined;\n    let overflow = false;\n    let i = -1;\n    let escStart = -1;\n    let escEnd = -1;\n    if (mode === FOLD_BLOCK) {\n        i = consumeMoreIndentedLines(text, i, indent.length);\n        if (i !== -1)\n            end = i + endStep;\n    }\n    for (let ch; (ch = text[(i += 1)]);) {\n        if (mode === FOLD_QUOTED && ch === '\\\\') {\n            escStart = i;\n            switch (text[i + 1]) {\n                case 'x':\n                    i += 3;\n                    break;\n                case 'u':\n                    i += 5;\n                    break;\n                case 'U':\n                    i += 9;\n                    break;\n                default:\n                    i += 1;\n            }\n            escEnd = i;\n        }\n        if (ch === '\\n') {\n            if (mode === FOLD_BLOCK)\n                i = consumeMoreIndentedLines(text, i, indent.length);\n            end = i + indent.length + endStep;\n            split = undefined;\n        }\n        else {\n            if (ch === ' ' &&\n                prev &&\n                prev !== ' ' &&\n                prev !== '\\n' &&\n                prev !== '\\t') {\n                // space surrounded by non-space can be replaced with newline + indent\n                const next = text[i + 1];\n                if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n                    split = i;\n            }\n            if (i >= end) {\n                if (split) {\n                    folds.push(split);\n                    end = split + endStep;\n                    split = undefined;\n                }\n                else if (mode === FOLD_QUOTED) {\n                    // white-space collected at end may stretch past lineWidth\n                    while (prev === ' ' || prev === '\\t') {\n                        prev = ch;\n                        ch = text[(i += 1)];\n                        overflow = true;\n                    }\n                    // Account for newline escape, but don't break preceding escape\n                    const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n                    // Bail out if lineWidth & minContentWidth are shorter than an escape string\n                    if (escapedFolds[j])\n                        return text;\n                    folds.push(j);\n                    escapedFolds[j] = true;\n                    end = j + endStep;\n                    split = undefined;\n                }\n                else {\n                    overflow = true;\n                }\n            }\n        }\n        prev = ch;\n    }\n    if (overflow && onOverflow)\n        onOverflow();\n    if (folds.length === 0)\n        return text;\n    if (onFold)\n        onFold();\n    let res = text.slice(0, folds[0]);\n    for (let i = 0; i < folds.length; ++i) {\n        const fold = folds[i];\n        const end = folds[i + 1] || text.length;\n        if (fold === 0)\n            res = `\\n${indent}${text.slice(0, end)}`;\n        else {\n            if (mode === FOLD_QUOTED && escapedFolds[fold])\n                res += `${text[fold]}\\\\`;\n            res += `\\n${indent}${text.slice(fold + 1, end)}`;\n        }\n    }\n    return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n    let end = i;\n    let start = i + 1;\n    let ch = text[start];\n    while (ch === ' ' || ch === '\\t') {\n        if (i < start + indent) {\n            ch = text[++i];\n        }\n        else {\n            do {\n                ch = text[++i];\n            } while (ch && ch !== '\\n');\n            end = i;\n            start = i + 1;\n            ch = text[start];\n        }\n    }\n    return end;\n}\n\nexport { FOLD_BLOCK, FOLD_FLOW, FOLD_QUOTED, foldFlowLines };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { foldFlowLines, FOLD_QUOTED, FOLD_FLOW, FOLD_BLOCK } from './foldFlowLines.js';\n\nconst getFoldOptions = (ctx, isBlock) => ({\n    indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n    lineWidth: ctx.options.lineWidth,\n    minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n    if (!lineWidth || lineWidth < 0)\n        return false;\n    const limit = lineWidth - indentLength;\n    const strLen = str.length;\n    if (strLen <= limit)\n        return false;\n    for (let i = 0, start = 0; i < strLen; ++i) {\n        if (str[i] === '\\n') {\n            if (i - start > limit)\n                return true;\n            start = i + 1;\n            if (strLen - start <= limit)\n                return false;\n        }\n    }\n    return true;\n}\nfunction doubleQuotedString(value, ctx) {\n    const json = JSON.stringify(value);\n    if (ctx.options.doubleQuotedAsJSON)\n        return json;\n    const { implicitKey } = ctx;\n    const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    let str = '';\n    let start = 0;\n    for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n        if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n            // space before newline needs to be escaped to not be folded\n            str += json.slice(start, i) + '\\\\ ';\n            i += 1;\n            start = i;\n            ch = '\\\\';\n        }\n        if (ch === '\\\\')\n            switch (json[i + 1]) {\n                case 'u':\n                    {\n                        str += json.slice(start, i);\n                        const code = json.substr(i + 2, 4);\n                        switch (code) {\n                            case '0000':\n                                str += '\\\\0';\n                                break;\n                            case '0007':\n                                str += '\\\\a';\n                                break;\n                            case '000b':\n                                str += '\\\\v';\n                                break;\n                            case '001b':\n                                str += '\\\\e';\n                                break;\n                            case '0085':\n                                str += '\\\\N';\n                                break;\n                            case '00a0':\n                                str += '\\\\_';\n                                break;\n                            case '2028':\n                                str += '\\\\L';\n                                break;\n                            case '2029':\n                                str += '\\\\P';\n                                break;\n                            default:\n                                if (code.substr(0, 2) === '00')\n                                    str += '\\\\x' + code.substr(2);\n                                else\n                                    str += json.substr(i, 6);\n                        }\n                        i += 5;\n                        start = i + 1;\n                    }\n                    break;\n                case 'n':\n                    if (implicitKey ||\n                        json[i + 2] === '\"' ||\n                        json.length < minMultiLineLength) {\n                        i += 1;\n                    }\n                    else {\n                        // folding will eat first newline\n                        str += json.slice(start, i) + '\\n\\n';\n                        while (json[i + 2] === '\\\\' &&\n                            json[i + 3] === 'n' &&\n                            json[i + 4] !== '\"') {\n                            str += '\\n';\n                            i += 2;\n                        }\n                        str += indent;\n                        // space after newline needs to be escaped to not be folded\n                        if (json[i + 2] === ' ')\n                            str += '\\\\';\n                        i += 1;\n                        start = i + 1;\n                    }\n                    break;\n                default:\n                    i += 1;\n            }\n    }\n    str = start ? str + json.slice(start) : json;\n    return implicitKey\n        ? str\n        : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n    if (ctx.options.singleQuote === false ||\n        (ctx.implicitKey && value.includes('\\n')) ||\n        /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n    )\n        return doubleQuotedString(value, ctx);\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n    return ctx.implicitKey\n        ? res\n        : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n    const { singleQuote } = ctx.options;\n    let qs;\n    if (singleQuote === false)\n        qs = doubleQuotedString;\n    else {\n        const hasDouble = value.includes('\"');\n        const hasSingle = value.includes(\"'\");\n        if (hasDouble && !hasSingle)\n            qs = singleQuotedString;\n        else if (hasSingle && !hasDouble)\n            qs = doubleQuotedString;\n        else\n            qs = singleQuote ? singleQuotedString : doubleQuotedString;\n    }\n    return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n    blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n    blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n    const { blockQuote, commentString, lineWidth } = ctx.options;\n    // 1. Block can't end in whitespace unless the last line is non-empty.\n    // 2. Strings consisting of only whitespace are best rendered explicitly.\n    if (!blockQuote || /\\n[\\t ]+$/.test(value) || /^\\s*$/.test(value)) {\n        return quotedString(value, ctx);\n    }\n    const indent = ctx.indent ||\n        (ctx.forceBlockIndent || containsDocumentMarker(value) ? '  ' : '');\n    const literal = blockQuote === 'literal'\n        ? true\n        : blockQuote === 'folded' || type === Scalar.BLOCK_FOLDED\n            ? false\n            : type === Scalar.BLOCK_LITERAL\n                ? true\n                : !lineLengthOverLimit(value, lineWidth, indent.length);\n    if (!value)\n        return literal ? '|\\n' : '>\\n';\n    // determine chomping from whitespace at value end\n    let chomp;\n    let endStart;\n    for (endStart = value.length; endStart > 0; --endStart) {\n        const ch = value[endStart - 1];\n        if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n            break;\n    }\n    let end = value.substring(endStart);\n    const endNlPos = end.indexOf('\\n');\n    if (endNlPos === -1) {\n        chomp = '-'; // strip\n    }\n    else if (value === end || endNlPos !== end.length - 1) {\n        chomp = '+'; // keep\n        if (onChompKeep)\n            onChompKeep();\n    }\n    else {\n        chomp = ''; // clip\n    }\n    if (end) {\n        value = value.slice(0, -end.length);\n        if (end[end.length - 1] === '\\n')\n            end = end.slice(0, -1);\n        end = end.replace(blockEndNewlines, `$&${indent}`);\n    }\n    // determine indent indicator from whitespace at value start\n    let startWithSpace = false;\n    let startEnd;\n    let startNlPos = -1;\n    for (startEnd = 0; startEnd < value.length; ++startEnd) {\n        const ch = value[startEnd];\n        if (ch === ' ')\n            startWithSpace = true;\n        else if (ch === '\\n')\n            startNlPos = startEnd;\n        else\n            break;\n    }\n    let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n    if (start) {\n        value = value.substring(start.length);\n        start = start.replace(/\\n+/g, `$&${indent}`);\n    }\n    const indentSize = indent ? '2' : '1'; // root is at -1\n    let header = (literal ? '|' : '>') + (startWithSpace ? indentSize : '') + chomp;\n    if (comment) {\n        header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n        if (onComment)\n            onComment();\n    }\n    if (literal) {\n        value = value.replace(/\\n+/g, `$&${indent}`);\n        return `${header}\\n${indent}${start}${value}${end}`;\n    }\n    value = value\n        .replace(/\\n+/g, '\\n$&')\n        .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n        //                ^ more-ind. ^ empty     ^ capture next empty lines only at end of indent\n        .replace(/\\n+/g, `$&${indent}`);\n    const body = foldFlowLines(`${start}${value}${end}`, indent, FOLD_BLOCK, getFoldOptions(ctx, true));\n    return `${header}\\n${indent}${body}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n    const { type, value } = item;\n    const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n    if ((implicitKey && value.includes('\\n')) ||\n        (inFlow && /[[\\]{},]/.test(value))) {\n        return quotedString(value, ctx);\n    }\n    if (!value ||\n        /^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n        // not allowed:\n        // - empty string, '-' or '?'\n        // - start with an indicator character (except [?:-]) or /[?-] /\n        // - '\\n ', ': ' or ' \\n' anywhere\n        // - '#' not preceded by a non-space char\n        // - end with ' ' or ':'\n        return implicitKey || inFlow || !value.includes('\\n')\n            ? quotedString(value, ctx)\n            : blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (!implicitKey &&\n        !inFlow &&\n        type !== Scalar.PLAIN &&\n        value.includes('\\n')) {\n        // Where allowed & type not set explicitly, prefer block style for multiline strings\n        return blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (containsDocumentMarker(value)) {\n        if (indent === '') {\n            ctx.forceBlockIndent = true;\n            return blockString(item, ctx, onComment, onChompKeep);\n        }\n        else if (implicitKey && indent === indentStep) {\n            return quotedString(value, ctx);\n        }\n    }\n    const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n    // Verify that output will be parsed as a string, as e.g. plain numbers and\n    // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n    // and others in v1.1.\n    if (actualString) {\n        const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n        const { compat, tags } = ctx.doc.schema;\n        if (tags.some(test) || compat?.some(test))\n            return quotedString(value, ctx);\n    }\n    return implicitKey\n        ? str\n        : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n    const { implicitKey, inFlow } = ctx;\n    const ss = typeof item.value === 'string'\n        ? item\n        : Object.assign({}, item, { value: String(item.value) });\n    let { type } = item;\n    if (type !== Scalar.QUOTE_DOUBLE) {\n        // force double quotes on control characters & unpaired surrogates\n        if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n            type = Scalar.QUOTE_DOUBLE;\n    }\n    const _stringify = (_type) => {\n        switch (_type) {\n            case Scalar.BLOCK_FOLDED:\n            case Scalar.BLOCK_LITERAL:\n                return implicitKey || inFlow\n                    ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n                    : blockString(ss, ctx, onComment, onChompKeep);\n            case Scalar.QUOTE_DOUBLE:\n                return doubleQuotedString(ss.value, ctx);\n            case Scalar.QUOTE_SINGLE:\n                return singleQuotedString(ss.value, ctx);\n            case Scalar.PLAIN:\n                return plainString(ss, ctx, onComment, onChompKeep);\n            default:\n                return null;\n        }\n    };\n    let res = _stringify(type);\n    if (res === null) {\n        const { defaultKeyType, defaultStringType } = ctx.options;\n        const t = (implicitKey && defaultKeyType) || defaultStringType;\n        res = _stringify(t);\n        if (res === null)\n            throw new Error(`Unsupported default string type ${t}`);\n    }\n    return res;\n}\n\nexport { stringifyString };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { isPair, isAlias, isNode, isScalar, isCollection } from '../nodes/identity.js';\nimport { stringifyComment } from './stringifyComment.js';\nimport { stringifyString } from './stringifyString.js';\n\nfunction createStringifyContext(doc, options) {\n    const opt = Object.assign({\n        blockQuote: true,\n        commentString: stringifyComment,\n        defaultKeyType: null,\n        defaultStringType: 'PLAIN',\n        directives: null,\n        doubleQuotedAsJSON: false,\n        doubleQuotedMinMultiLineLength: 40,\n        falseStr: 'false',\n        flowCollectionPadding: true,\n        indentSeq: true,\n        lineWidth: 80,\n        minContentWidth: 20,\n        nullStr: 'null',\n        simpleKeys: false,\n        singleQuote: null,\n        trueStr: 'true',\n        verifyAliasOrder: true\n    }, doc.schema.toStringOptions, options);\n    let inFlow;\n    switch (opt.collectionStyle) {\n        case 'block':\n            inFlow = false;\n            break;\n        case 'flow':\n            inFlow = true;\n            break;\n        default:\n            inFlow = null;\n    }\n    return {\n        anchors: new Set(),\n        doc,\n        flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n        indent: '',\n        indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : '  ',\n        inFlow,\n        options: opt\n    };\n}\nfunction getTagObject(tags, item) {\n    if (item.tag) {\n        const match = tags.filter(t => t.tag === item.tag);\n        if (match.length > 0)\n            return match.find(t => t.format === item.format) ?? match[0];\n    }\n    let tagObj = undefined;\n    let obj;\n    if (isScalar(item)) {\n        obj = item.value;\n        let match = tags.filter(t => t.identify?.(obj));\n        if (match.length > 1) {\n            const testMatch = match.filter(t => t.test);\n            if (testMatch.length > 0)\n                match = testMatch;\n        }\n        tagObj =\n            match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n    }\n    else {\n        obj = item;\n        tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n    }\n    if (!tagObj) {\n        const name = obj?.constructor?.name ?? typeof obj;\n        throw new Error(`Tag not resolved for ${name} value`);\n    }\n    return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors, doc }) {\n    if (!doc.directives)\n        return '';\n    const props = [];\n    const anchor = (isScalar(node) || isCollection(node)) && node.anchor;\n    if (anchor && anchorIsValid(anchor)) {\n        anchors.add(anchor);\n        props.push(`&${anchor}`);\n    }\n    const tag = node.tag ? node.tag : tagObj.default ? null : tagObj.tag;\n    if (tag)\n        props.push(doc.directives.tagString(tag));\n    return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n    if (isPair(item))\n        return item.toString(ctx, onComment, onChompKeep);\n    if (isAlias(item)) {\n        if (ctx.doc.directives)\n            return item.toString(ctx);\n        if (ctx.resolvedAliases?.has(item)) {\n            throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n        }\n        else {\n            if (ctx.resolvedAliases)\n                ctx.resolvedAliases.add(item);\n            else\n                ctx.resolvedAliases = new Set([item]);\n            item = item.resolve(ctx.doc);\n        }\n    }\n    let tagObj = undefined;\n    const node = isNode(item)\n        ? item\n        : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n    if (!tagObj)\n        tagObj = getTagObject(ctx.doc.schema.tags, node);\n    const props = stringifyProps(node, tagObj, ctx);\n    if (props.length > 0)\n        ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n    const str = typeof tagObj.stringify === 'function'\n        ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n        : isScalar(node)\n            ? stringifyString(node, ctx, onComment, onChompKeep)\n            : node.toString(ctx, onComment, onChompKeep);\n    if (!props)\n        return str;\n    return isScalar(node) || str[0] === '{' || str[0] === '['\n        ? `${props} ${str}`\n        : `${props}\\n${ctx.indent}${str}`;\n}\n\nexport { createStringifyContext, stringify };\n","import { isCollection, isNode, isScalar, isSeq } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n    const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n    let keyComment = (isNode(key) && key.comment) || null;\n    if (simpleKeys) {\n        if (keyComment) {\n            throw new Error('With simple keys, key nodes cannot have comments');\n        }\n        if (isCollection(key) || (!isNode(key) && typeof key === 'object')) {\n            const msg = 'With simple keys, collection cannot be used as a key value';\n            throw new Error(msg);\n        }\n    }\n    let explicitKey = !simpleKeys &&\n        (!key ||\n            (keyComment && value == null && !ctx.inFlow) ||\n            isCollection(key) ||\n            (isScalar(key)\n                ? key.type === Scalar.BLOCK_FOLDED || key.type === Scalar.BLOCK_LITERAL\n                : typeof key === 'object'));\n    ctx = Object.assign({}, ctx, {\n        allNullValues: false,\n        implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n        indent: indent + indentStep\n    });\n    let keyCommentDone = false;\n    let chompKeep = false;\n    let str = stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n    if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n        if (simpleKeys)\n            throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n        explicitKey = true;\n    }\n    if (ctx.inFlow) {\n        if (allNullValues || value == null) {\n            if (keyCommentDone && onComment)\n                onComment();\n            return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n        }\n    }\n    else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n        str = `? ${str}`;\n        if (keyComment && !keyCommentDone) {\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n        }\n        else if (chompKeep && onChompKeep)\n            onChompKeep();\n        return str;\n    }\n    if (keyCommentDone)\n        keyComment = null;\n    if (explicitKey) {\n        if (keyComment)\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n        str = `? ${str}\\n${indent}:`;\n    }\n    else {\n        str = `${str}:`;\n        if (keyComment)\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n    }\n    let vsb, vcb, valueComment;\n    if (isNode(value)) {\n        vsb = !!value.spaceBefore;\n        vcb = value.commentBefore;\n        valueComment = value.comment;\n    }\n    else {\n        vsb = false;\n        vcb = null;\n        valueComment = null;\n        if (value && typeof value === 'object')\n            value = doc.createNode(value);\n    }\n    ctx.implicitKey = false;\n    if (!explicitKey && !keyComment && isScalar(value))\n        ctx.indentAtStart = str.length + 1;\n    chompKeep = false;\n    if (!indentSeq &&\n        indentStep.length >= 2 &&\n        !ctx.inFlow &&\n        !explicitKey &&\n        isSeq(value) &&\n        !value.flow &&\n        !value.tag &&\n        !value.anchor) {\n        // If indentSeq === false, consider '- ' as part of indentation where possible\n        ctx.indent = ctx.indent.substring(2);\n    }\n    let valueCommentDone = false;\n    const valueStr = stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n    let ws = ' ';\n    if (keyComment || vsb || vcb) {\n        ws = vsb ? '\\n' : '';\n        if (vcb) {\n            const cs = commentString(vcb);\n            ws += `\\n${indentComment(cs, ctx.indent)}`;\n        }\n        if (valueStr === '' && !ctx.inFlow) {\n            if (ws === '\\n')\n                ws = '\\n\\n';\n        }\n        else {\n            ws += `\\n${ctx.indent}`;\n        }\n    }\n    else if (!explicitKey && isCollection(value)) {\n        const vs0 = valueStr[0];\n        const nl0 = valueStr.indexOf('\\n');\n        const hasNewline = nl0 !== -1;\n        const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n        if (hasNewline || !flow) {\n            let hasPropsLine = false;\n            if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n                let sp0 = valueStr.indexOf(' ');\n                if (vs0 === '&' &&\n                    sp0 !== -1 &&\n                    sp0 < nl0 &&\n                    valueStr[sp0 + 1] === '!') {\n                    sp0 = valueStr.indexOf(' ', sp0 + 1);\n                }\n                if (sp0 === -1 || nl0 < sp0)\n                    hasPropsLine = true;\n            }\n            if (!hasPropsLine)\n                ws = `\\n${ctx.indent}`;\n        }\n    }\n    else if (valueStr === '' || valueStr[0] === '\\n') {\n        ws = '';\n    }\n    str += ws + valueStr;\n    if (ctx.inFlow) {\n        if (valueCommentDone && onComment)\n            onComment();\n    }\n    else if (valueComment && !valueCommentDone) {\n        str += lineComment(str, ctx.indent, commentString(valueComment));\n    }\n    else if (chompKeep && onChompKeep) {\n        onChompKeep();\n    }\n    return str;\n}\n\nexport { stringifyPair };\n","function debug(logLevel, ...messages) {\n    if (logLevel === 'debug')\n        console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n    if (logLevel === 'debug' || logLevel === 'warn') {\n        if (typeof process !== 'undefined' && process.emitWarning)\n            process.emitWarning(warning);\n        else\n            console.warn(warning);\n    }\n}\n\nexport { debug, warn };\n","import { isScalar, isAlias, isSeq, isMap } from '../../nodes/identity.js';\nimport { Scalar } from '../../nodes/Scalar.js';\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n    identify: value => value === MERGE_KEY ||\n        (typeof value === 'symbol' && value.description === MERGE_KEY),\n    default: 'key',\n    tag: 'tag:yaml.org,2002:merge',\n    test: /^<<$/,\n    resolve: () => Object.assign(new Scalar(Symbol(MERGE_KEY)), {\n        addToJSMap: addMergeToJSMap\n    }),\n    stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n    (isScalar(key) &&\n        (!key.type || key.type === Scalar.PLAIN) &&\n        merge.identify(key.value))) &&\n    ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n    value = ctx && isAlias(value) ? value.resolve(ctx.doc) : value;\n    if (isSeq(value))\n        for (const it of value.items)\n            mergeValue(ctx, map, it);\n    else if (Array.isArray(value))\n        for (const it of value)\n            mergeValue(ctx, map, it);\n    else\n        mergeValue(ctx, map, value);\n}\nfunction mergeValue(ctx, map, value) {\n    const source = ctx && isAlias(value) ? value.resolve(ctx.doc) : value;\n    if (!isMap(source))\n        throw new Error('Merge sources must be maps or map aliases');\n    const srcMap = source.toJSON(null, ctx, Map);\n    for (const [key, value] of srcMap) {\n        if (map instanceof Map) {\n            if (!map.has(key))\n                map.set(key, value);\n        }\n        else if (map instanceof Set) {\n            map.add(key);\n        }\n        else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n            Object.defineProperty(map, key, {\n                value,\n                writable: true,\n                enumerable: true,\n                configurable: true\n            });\n        }\n    }\n    return map;\n}\n\nexport { addMergeToJSMap, isMergeKey, merge };\n","import { warn } from '../log.js';\nimport { isMergeKey, addMergeToJSMap } from '../schema/yaml-1.1/merge.js';\nimport { createStringifyContext } from '../stringify/stringify.js';\nimport { isNode } from './identity.js';\nimport { toJS } from './toJS.js';\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n    if (isNode(key) && key.addToJSMap)\n        key.addToJSMap(ctx, map, value);\n    // TODO: Should drop this special case for bare << handling\n    else if (isMergeKey(ctx, key))\n        addMergeToJSMap(ctx, map, value);\n    else {\n        const jsKey = toJS(key, '', ctx);\n        if (map instanceof Map) {\n            map.set(jsKey, toJS(value, jsKey, ctx));\n        }\n        else if (map instanceof Set) {\n            map.add(jsKey);\n        }\n        else {\n            const stringKey = stringifyKey(key, jsKey, ctx);\n            const jsValue = toJS(value, stringKey, ctx);\n            if (stringKey in map)\n                Object.defineProperty(map, stringKey, {\n                    value: jsValue,\n                    writable: true,\n                    enumerable: true,\n                    configurable: true\n                });\n            else\n                map[stringKey] = jsValue;\n        }\n    }\n    return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n    if (jsKey === null)\n        return '';\n    if (typeof jsKey !== 'object')\n        return String(jsKey);\n    if (isNode(key) && ctx?.doc) {\n        const strCtx = createStringifyContext(ctx.doc, {});\n        strCtx.anchors = new Set();\n        for (const node of ctx.anchors.keys())\n            strCtx.anchors.add(node.anchor);\n        strCtx.inFlow = true;\n        strCtx.inStringifyKey = true;\n        const strKey = key.toString(strCtx);\n        if (!ctx.mapKeyWarned) {\n            let jsonStr = JSON.stringify(strKey);\n            if (jsonStr.length > 40)\n                jsonStr = jsonStr.substring(0, 36) + '...\"';\n            warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n            ctx.mapKeyWarned = true;\n        }\n        return strKey;\n    }\n    return JSON.stringify(jsKey);\n}\n\nexport { addPairToJSMap };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyPair } from '../stringify/stringifyPair.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { NODE_TYPE, PAIR, isNode } from './identity.js';\n\nfunction createPair(key, value, ctx) {\n    const k = createNode(key, undefined, ctx);\n    const v = createNode(value, undefined, ctx);\n    return new Pair(k, v);\n}\nclass Pair {\n    constructor(key, value = null) {\n        Object.defineProperty(this, NODE_TYPE, { value: PAIR });\n        this.key = key;\n        this.value = value;\n    }\n    clone(schema) {\n        let { key, value } = this;\n        if (isNode(key))\n            key = key.clone(schema);\n        if (isNode(value))\n            value = value.clone(schema);\n        return new Pair(key, value);\n    }\n    toJSON(_, ctx) {\n        const pair = ctx?.mapAsMap ? new Map() : {};\n        return addPairToJSMap(ctx, pair, this);\n    }\n    toString(ctx, onComment, onChompKeep) {\n        return ctx?.doc\n            ? stringifyPair(this, ctx, onComment, onChompKeep)\n            : JSON.stringify(this);\n    }\n}\n\nexport { Pair, createPair };\n","import { isNode, isPair } from '../nodes/identity.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyCollection(collection, ctx, options) {\n    const flow = ctx.inFlow ?? collection.flow;\n    const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n    return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n    const { indent, options: { commentString } } = ctx;\n    const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n    let chompKeep = false; // flag for the preceding node's status\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (isNode(item)) {\n            if (!chompKeep && item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (isPair(item)) {\n            const ik = isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (!chompKeep && ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n            }\n        }\n        chompKeep = false;\n        let str = stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n        if (comment)\n            str += lineComment(str, itemIndent, commentString(comment));\n        if (chompKeep && comment)\n            chompKeep = false;\n        lines.push(blockItemPrefix + str);\n    }\n    let str;\n    if (lines.length === 0) {\n        str = flowChars.start + flowChars.end;\n    }\n    else {\n        str = lines[0];\n        for (let i = 1; i < lines.length; ++i) {\n            const line = lines[i];\n            str += line ? `\\n${indent}${line}` : '\\n';\n        }\n    }\n    if (comment) {\n        str += '\\n' + indentComment(commentString(comment), indent);\n        if (onComment)\n            onComment();\n    }\n    else if (chompKeep && onChompKeep)\n        onChompKeep();\n    return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n    const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n    itemIndent += indentStep;\n    const itemCtx = Object.assign({}, ctx, {\n        indent: itemIndent,\n        inFlow: true,\n        type: null\n    });\n    let reqNewline = false;\n    let linesAtValue = 0;\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (isNode(item)) {\n            if (item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, false);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (isPair(item)) {\n            const ik = isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, false);\n                if (ik.comment)\n                    reqNewline = true;\n            }\n            const iv = isNode(item.value) ? item.value : null;\n            if (iv) {\n                if (iv.comment)\n                    comment = iv.comment;\n                if (iv.commentBefore)\n                    reqNewline = true;\n            }\n            else if (item.value == null && ik?.comment) {\n                comment = ik.comment;\n            }\n        }\n        if (comment)\n            reqNewline = true;\n        let str = stringify(item, itemCtx, () => (comment = null));\n        if (i < items.length - 1)\n            str += ',';\n        if (comment)\n            str += lineComment(str, itemIndent, commentString(comment));\n        if (!reqNewline && (lines.length > linesAtValue || str.includes('\\n')))\n            reqNewline = true;\n        lines.push(str);\n        linesAtValue = lines.length;\n    }\n    const { start, end } = flowChars;\n    if (lines.length === 0) {\n        return start + end;\n    }\n    else {\n        if (!reqNewline) {\n            const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n            reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n        }\n        if (reqNewline) {\n            let str = start;\n            for (const line of lines)\n                str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n            return `${str}\\n${indent}${end}`;\n        }\n        else {\n            return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n        }\n    }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n    if (comment && chompKeep)\n        comment = comment.replace(/^\\n+/, '');\n    if (comment) {\n        const ic = indentComment(commentString(comment), indent);\n        lines.push(ic.trimStart()); // Avoid double indent on first line\n    }\n}\n\nexport { stringifyCollection };\n","import { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { Collection } from './Collection.js';\nimport { isPair, isScalar, MAP } from './identity.js';\nimport { Pair, createPair } from './Pair.js';\nimport { isScalarValue } from './Scalar.js';\n\nfunction findPair(items, key) {\n    const k = isScalar(key) ? key.value : key;\n    for (const it of items) {\n        if (isPair(it)) {\n            if (it.key === key || it.key === k)\n                return it;\n            if (isScalar(it.key) && it.key.value === k)\n                return it;\n        }\n    }\n    return undefined;\n}\nclass YAMLMap extends Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:map';\n    }\n    constructor(schema) {\n        super(MAP, schema);\n        this.items = [];\n    }\n    /**\n     * A generic collection parsing method that can be extended\n     * to other node classes that inherit from YAMLMap\n     */\n    static from(schema, obj, ctx) {\n        const { keepUndefined, replacer } = ctx;\n        const map = new this(schema);\n        const add = (key, value) => {\n            if (typeof replacer === 'function')\n                value = replacer.call(obj, key, value);\n            else if (Array.isArray(replacer) && !replacer.includes(key))\n                return;\n            if (value !== undefined || keepUndefined)\n                map.items.push(createPair(key, value, ctx));\n        };\n        if (obj instanceof Map) {\n            for (const [key, value] of obj)\n                add(key, value);\n        }\n        else if (obj && typeof obj === 'object') {\n            for (const key of Object.keys(obj))\n                add(key, obj[key]);\n        }\n        if (typeof schema.sortMapEntries === 'function') {\n            map.items.sort(schema.sortMapEntries);\n        }\n        return map;\n    }\n    /**\n     * Adds a value to the collection.\n     *\n     * @param overwrite - If not set `true`, using a key that is already in the\n     *   collection will throw. Otherwise, overwrites the previous value.\n     */\n    add(pair, overwrite) {\n        let _pair;\n        if (isPair(pair))\n            _pair = pair;\n        else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n            // In TypeScript, this never happens.\n            _pair = new Pair(pair, pair?.value);\n        }\n        else\n            _pair = new Pair(pair.key, pair.value);\n        const prev = findPair(this.items, _pair.key);\n        const sortEntries = this.schema?.sortMapEntries;\n        if (prev) {\n            if (!overwrite)\n                throw new Error(`Key ${_pair.key} already set`);\n            // For scalars, keep the old node & its comments and anchors\n            if (isScalar(prev.value) && isScalarValue(_pair.value))\n                prev.value.value = _pair.value;\n            else\n                prev.value = _pair.value;\n        }\n        else if (sortEntries) {\n            const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n            if (i === -1)\n                this.items.push(_pair);\n            else\n                this.items.splice(i, 0, _pair);\n        }\n        else {\n            this.items.push(_pair);\n        }\n    }\n    delete(key) {\n        const it = findPair(this.items, key);\n        if (!it)\n            return false;\n        const del = this.items.splice(this.items.indexOf(it), 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const it = findPair(this.items, key);\n        const node = it?.value;\n        return (!keepScalar && isScalar(node) ? node.value : node) ?? undefined;\n    }\n    has(key) {\n        return !!findPair(this.items, key);\n    }\n    set(key, value) {\n        this.add(new Pair(key, value), true);\n    }\n    /**\n     * @param ctx - Conversion context, originally set in Document#toJS()\n     * @param {Class} Type - If set, forces the returned collection type\n     * @returns Instance of Type, Map, or Object\n     */\n    toJSON(_, ctx, Type) {\n        const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n        if (ctx?.onCreate)\n            ctx.onCreate(map);\n        for (const item of this.items)\n            addPairToJSMap(ctx, map, item);\n        return map;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        for (const item of this.items) {\n            if (!isPair(item))\n                throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n        }\n        if (!ctx.allNullValues && this.hasAllNullValues(false))\n            ctx = Object.assign({}, ctx, { allNullValues: true });\n        return stringifyCollection(this, ctx, {\n            blockItemPrefix: '',\n            flowChars: { start: '{', end: '}' },\n            itemIndent: ctx.indent || '',\n            onChompKeep,\n            onComment\n        });\n    }\n}\n\nexport { YAMLMap, findPair };\n","import { isMap } from '../../nodes/identity.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\n\nconst map = {\n    collection: 'map',\n    default: true,\n    nodeClass: YAMLMap,\n    tag: 'tag:yaml.org,2002:map',\n    resolve(map, onError) {\n        if (!isMap(map))\n            onError('Expected a mapping for this tag');\n        return map;\n    },\n    createNode: (schema, obj, ctx) => YAMLMap.from(schema, obj, ctx)\n};\n\nexport { map };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { Collection } from './Collection.js';\nimport { SEQ, isScalar } from './identity.js';\nimport { isScalarValue } from './Scalar.js';\nimport { toJS } from './toJS.js';\n\nclass YAMLSeq extends Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:seq';\n    }\n    constructor(schema) {\n        super(SEQ, schema);\n        this.items = [];\n    }\n    add(value) {\n        this.items.push(value);\n    }\n    /**\n     * Removes a value from the collection.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     *\n     * @returns `true` if the item was found and removed.\n     */\n    delete(key) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return false;\n        const del = this.items.splice(idx, 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return undefined;\n        const it = this.items[idx];\n        return !keepScalar && isScalar(it) ? it.value : it;\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     */\n    has(key) {\n        const idx = asItemIndex(key);\n        return typeof idx === 'number' && idx < this.items.length;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     *\n     * If `key` does not contain a representation of an integer, this will throw.\n     * It may be wrapped in a `Scalar`.\n     */\n    set(key, value) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            throw new Error(`Expected a valid index, not ${key}.`);\n        const prev = this.items[idx];\n        if (isScalar(prev) && isScalarValue(value))\n            prev.value = value;\n        else\n            this.items[idx] = value;\n    }\n    toJSON(_, ctx) {\n        const seq = [];\n        if (ctx?.onCreate)\n            ctx.onCreate(seq);\n        let i = 0;\n        for (const item of this.items)\n            seq.push(toJS(item, String(i++), ctx));\n        return seq;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        return stringifyCollection(this, ctx, {\n            blockItemPrefix: '- ',\n            flowChars: { start: '[', end: ']' },\n            itemIndent: (ctx.indent || '') + '  ',\n            onChompKeep,\n            onComment\n        });\n    }\n    static from(schema, obj, ctx) {\n        const { replacer } = ctx;\n        const seq = new this(schema);\n        if (obj && Symbol.iterator in Object(obj)) {\n            let i = 0;\n            for (let it of obj) {\n                if (typeof replacer === 'function') {\n                    const key = obj instanceof Set ? it : String(i++);\n                    it = replacer.call(obj, key, it);\n                }\n                seq.items.push(createNode(it, undefined, ctx));\n            }\n        }\n        return seq;\n    }\n}\nfunction asItemIndex(key) {\n    let idx = isScalar(key) ? key.value : key;\n    if (idx && typeof idx === 'string')\n        idx = Number(idx);\n    return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n        ? idx\n        : null;\n}\n\nexport { YAMLSeq };\n","import { isSeq } from '../../nodes/identity.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nconst seq = {\n    collection: 'seq',\n    default: true,\n    nodeClass: YAMLSeq,\n    tag: 'tag:yaml.org,2002:seq',\n    resolve(seq, onError) {\n        if (!isSeq(seq))\n            onError('Expected a sequence for this tag');\n        return seq;\n    },\n    createNode: (schema, obj, ctx) => YAMLSeq.from(schema, obj, ctx)\n};\n\nexport { seq };\n","import { stringifyString } from '../../stringify/stringifyString.js';\n\nconst string = {\n    identify: value => typeof value === 'string',\n    default: true,\n    tag: 'tag:yaml.org,2002:str',\n    resolve: str => str,\n    stringify(item, ctx, onComment, onChompKeep) {\n        ctx = Object.assign({ actualString: true }, ctx);\n        return stringifyString(item, ctx, onComment, onChompKeep);\n    }\n};\n\nexport { string };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst nullTag = {\n    identify: value => value == null,\n    createNode: () => new Scalar(null),\n    default: true,\n    tag: 'tag:yaml.org,2002:null',\n    test: /^(?:~|[Nn]ull|NULL)?$/,\n    resolve: () => new Scalar(null),\n    stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n        ? source\n        : ctx.options.nullStr\n};\n\nexport { nullTag };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst boolTag = {\n    identify: value => typeof value === 'boolean',\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n    resolve: str => new Scalar(str[0] === 't' || str[0] === 'T'),\n    stringify({ source, value }, ctx) {\n        if (source && boolTag.test.test(source)) {\n            const sv = source[0] === 't' || source[0] === 'T';\n            if (value === sv)\n                return source;\n        }\n        return value ? ctx.options.trueStr : ctx.options.falseStr;\n    }\n};\n\nexport { boolTag };\n","function stringifyNumber({ format, minFractionDigits, tag, value }) {\n    if (typeof value === 'bigint')\n        return String(value);\n    const num = typeof value === 'number' ? value : Number(value);\n    if (!isFinite(num))\n        return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n    let n = JSON.stringify(value);\n    if (!format &&\n        minFractionDigits &&\n        (!tag || tag === 'tag:yaml.org,2002:float') &&\n        /^\\d/.test(n)) {\n        let i = n.indexOf('.');\n        if (i < 0) {\n            i = n.length;\n            n += '.';\n        }\n        let d = minFractionDigits - (n.length - i - 1);\n        while (d-- > 0)\n            n += '0';\n    }\n    return n;\n}\n\nexport { stringifyNumber };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n    resolve: str => str.slice(-3).toLowerCase() === 'nan'\n        ? NaN\n        : str[0] === '-'\n            ? Number.NEGATIVE_INFINITY\n            : Number.POSITIVE_INFINITY,\n    stringify: stringifyNumber\n};\nconst floatExp = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'EXP',\n    test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n    resolve: str => parseFloat(str),\n    stringify(node) {\n        const num = Number(node.value);\n        return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n    }\n};\nconst float = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n    resolve(str) {\n        const node = new Scalar(parseFloat(str));\n        const dot = str.indexOf('.');\n        if (dot !== -1 && str[str.length - 1] === '0')\n            node.minFractionDigits = str.length - dot - 1;\n        return node;\n    },\n    stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n    const { value } = node;\n    if (intIdentify(value) && value >= 0)\n        return prefix + value.toString(radix);\n    return stringifyNumber(node);\n}\nconst intOct = {\n    identify: value => intIdentify(value) && value >= 0,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'OCT',\n    test: /^0o[0-7]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n    stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    test: /^[-+]?[0-9]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n    stringify: stringifyNumber\n};\nconst intHex = {\n    identify: value => intIdentify(value) && value >= 0,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'HEX',\n    test: /^0x[0-9a-fA-F]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n    stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intHex, intOct };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { boolTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intOct, int, intHex } from './int.js';\n\nconst schema = [\n    map,\n    seq,\n    string,\n    nullTag,\n    boolTag,\n    intOct,\n    int,\n    intHex,\n    floatNaN,\n    floatExp,\n    float\n];\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { map } from '../common/map.js';\nimport { seq } from '../common/seq.js';\n\nfunction intIdentify(value) {\n    return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n    {\n        identify: value => typeof value === 'string',\n        default: true,\n        tag: 'tag:yaml.org,2002:str',\n        resolve: str => str,\n        stringify: stringifyJSON\n    },\n    {\n        identify: value => value == null,\n        createNode: () => new Scalar(null),\n        default: true,\n        tag: 'tag:yaml.org,2002:null',\n        test: /^null$/,\n        resolve: () => null,\n        stringify: stringifyJSON\n    },\n    {\n        identify: value => typeof value === 'boolean',\n        default: true,\n        tag: 'tag:yaml.org,2002:bool',\n        test: /^true|false$/,\n        resolve: str => str === 'true',\n        stringify: stringifyJSON\n    },\n    {\n        identify: intIdentify,\n        default: true,\n        tag: 'tag:yaml.org,2002:int',\n        test: /^-?(?:0|[1-9][0-9]*)$/,\n        resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n        stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n    },\n    {\n        identify: value => typeof value === 'number',\n        default: true,\n        tag: 'tag:yaml.org,2002:float',\n        test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n        resolve: str => parseFloat(str),\n        stringify: stringifyJSON\n    }\n];\nconst jsonError = {\n    default: true,\n    tag: '',\n    test: /^/,\n    resolve(str, onError) {\n        onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n        return str;\n    }\n};\nconst schema = [map, seq].concat(jsonScalars, jsonError);\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyString } from '../../stringify/stringifyString.js';\n\nconst binary = {\n    identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n    default: false,\n    tag: 'tag:yaml.org,2002:binary',\n    /**\n     * Returns a Buffer in node and an Uint8Array in browsers\n     *\n     * To use the resulting buffer as an image, you'll want to do something like:\n     *\n     *   const blob = new Blob([buffer], { type: 'image/jpeg' })\n     *   document.querySelector('#photo').src = URL.createObjectURL(blob)\n     */\n    resolve(src, onError) {\n        if (typeof Buffer === 'function') {\n            return Buffer.from(src, 'base64');\n        }\n        else if (typeof atob === 'function') {\n            // On IE 11, atob() can't handle newlines\n            const str = atob(src.replace(/[\\n\\r]/g, ''));\n            const buffer = new Uint8Array(str.length);\n            for (let i = 0; i < str.length; ++i)\n                buffer[i] = str.charCodeAt(i);\n            return buffer;\n        }\n        else {\n            onError('This environment does not support reading binary tags; either Buffer or atob is required');\n            return src;\n        }\n    },\n    stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n        const buf = value; // checked earlier by binary.identify()\n        let str;\n        if (typeof Buffer === 'function') {\n            str =\n                buf instanceof Buffer\n                    ? buf.toString('base64')\n                    : Buffer.from(buf.buffer).toString('base64');\n        }\n        else if (typeof btoa === 'function') {\n            let s = '';\n            for (let i = 0; i < buf.length; ++i)\n                s += String.fromCharCode(buf[i]);\n            str = btoa(s);\n        }\n        else {\n            throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n        }\n        if (!type)\n            type = Scalar.BLOCK_LITERAL;\n        if (type !== Scalar.QUOTE_DOUBLE) {\n            const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n            const n = Math.ceil(str.length / lineWidth);\n            const lines = new Array(n);\n            for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n                lines[i] = str.substr(o, lineWidth);\n            }\n            str = lines.join(type === Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n        }\n        return stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n    }\n};\n\nexport { binary };\n","import { isSeq, isPair, isMap } from '../../nodes/identity.js';\nimport { Pair, createPair } from '../../nodes/Pair.js';\nimport { Scalar } from '../../nodes/Scalar.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nfunction resolvePairs(seq, onError) {\n    if (isSeq(seq)) {\n        for (let i = 0; i < seq.items.length; ++i) {\n            let item = seq.items[i];\n            if (isPair(item))\n                continue;\n            else if (isMap(item)) {\n                if (item.items.length > 1)\n                    onError('Each pair must have its own sequence indicator');\n                const pair = item.items[0] || new Pair(new Scalar(null));\n                if (item.commentBefore)\n                    pair.key.commentBefore = pair.key.commentBefore\n                        ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n                        : item.commentBefore;\n                if (item.comment) {\n                    const cn = pair.value ?? pair.key;\n                    cn.comment = cn.comment\n                        ? `${item.comment}\\n${cn.comment}`\n                        : item.comment;\n                }\n                item = pair;\n            }\n            seq.items[i] = isPair(item) ? item : new Pair(item);\n        }\n    }\n    else\n        onError('Expected a sequence for this tag');\n    return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n    const { replacer } = ctx;\n    const pairs = new YAMLSeq(schema);\n    pairs.tag = 'tag:yaml.org,2002:pairs';\n    let i = 0;\n    if (iterable && Symbol.iterator in Object(iterable))\n        for (let it of iterable) {\n            if (typeof replacer === 'function')\n                it = replacer.call(iterable, String(i++), it);\n            let key, value;\n            if (Array.isArray(it)) {\n                if (it.length === 2) {\n                    key = it[0];\n                    value = it[1];\n                }\n                else\n                    throw new TypeError(`Expected [key, value] tuple: ${it}`);\n            }\n            else if (it && it instanceof Object) {\n                const keys = Object.keys(it);\n                if (keys.length === 1) {\n                    key = keys[0];\n                    value = it[key];\n                }\n                else {\n                    throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n                }\n            }\n            else {\n                key = it;\n            }\n            pairs.items.push(createPair(key, value, ctx));\n        }\n    return pairs;\n}\nconst pairs = {\n    collection: 'seq',\n    default: false,\n    tag: 'tag:yaml.org,2002:pairs',\n    resolve: resolvePairs,\n    createNode: createPairs\n};\n\nexport { createPairs, pairs, resolvePairs };\n","import { isScalar, isPair } from '../../nodes/identity.js';\nimport { toJS } from '../../nodes/toJS.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\nimport { resolvePairs, createPairs } from './pairs.js';\n\nclass YAMLOMap extends YAMLSeq {\n    constructor() {\n        super();\n        this.add = YAMLMap.prototype.add.bind(this);\n        this.delete = YAMLMap.prototype.delete.bind(this);\n        this.get = YAMLMap.prototype.get.bind(this);\n        this.has = YAMLMap.prototype.has.bind(this);\n        this.set = YAMLMap.prototype.set.bind(this);\n        this.tag = YAMLOMap.tag;\n    }\n    /**\n     * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n     * but TypeScript won't allow widening the signature of a child method.\n     */\n    toJSON(_, ctx) {\n        if (!ctx)\n            return super.toJSON(_);\n        const map = new Map();\n        if (ctx?.onCreate)\n            ctx.onCreate(map);\n        for (const pair of this.items) {\n            let key, value;\n            if (isPair(pair)) {\n                key = toJS(pair.key, '', ctx);\n                value = toJS(pair.value, key, ctx);\n            }\n            else {\n                key = toJS(pair, '', ctx);\n            }\n            if (map.has(key))\n                throw new Error('Ordered maps must not include duplicate keys');\n            map.set(key, value);\n        }\n        return map;\n    }\n    static from(schema, iterable, ctx) {\n        const pairs = createPairs(schema, iterable, ctx);\n        const omap = new this();\n        omap.items = pairs.items;\n        return omap;\n    }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n    collection: 'seq',\n    identify: value => value instanceof Map,\n    nodeClass: YAMLOMap,\n    default: false,\n    tag: 'tag:yaml.org,2002:omap',\n    resolve(seq, onError) {\n        const pairs = resolvePairs(seq, onError);\n        const seenKeys = [];\n        for (const { key } of pairs.items) {\n            if (isScalar(key)) {\n                if (seenKeys.includes(key.value)) {\n                    onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n                }\n                else {\n                    seenKeys.push(key.value);\n                }\n            }\n        }\n        return Object.assign(new YAMLOMap(), pairs);\n    },\n    createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexport { YAMLOMap, omap };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nfunction boolStringify({ value, source }, ctx) {\n    const boolObj = value ? trueTag : falseTag;\n    if (source && boolObj.test.test(source))\n        return source;\n    return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n    identify: value => value === true,\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n    resolve: () => new Scalar(true),\n    stringify: boolStringify\n};\nconst falseTag = {\n    identify: value => value === false,\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n    resolve: () => new Scalar(false),\n    stringify: boolStringify\n};\n\nexport { falseTag, trueTag };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n    resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n        ? NaN\n        : str[0] === '-'\n            ? Number.NEGATIVE_INFINITY\n            : Number.POSITIVE_INFINITY,\n    stringify: stringifyNumber\n};\nconst floatExp = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'EXP',\n    test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n    resolve: (str) => parseFloat(str.replace(/_/g, '')),\n    stringify(node) {\n        const num = Number(node.value);\n        return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n    }\n};\nconst float = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n    resolve(str) {\n        const node = new Scalar(parseFloat(str.replace(/_/g, '')));\n        const dot = str.indexOf('.');\n        if (dot !== -1) {\n            const f = str.substring(dot + 1).replace(/_/g, '');\n            if (f[f.length - 1] === '0')\n                node.minFractionDigits = f.length;\n        }\n        return node;\n    },\n    stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n    const sign = str[0];\n    if (sign === '-' || sign === '+')\n        offset += 1;\n    str = str.substring(offset).replace(/_/g, '');\n    if (intAsBigInt) {\n        switch (radix) {\n            case 2:\n                str = `0b${str}`;\n                break;\n            case 8:\n                str = `0o${str}`;\n                break;\n            case 16:\n                str = `0x${str}`;\n                break;\n        }\n        const n = BigInt(str);\n        return sign === '-' ? BigInt(-1) * n : n;\n    }\n    const n = parseInt(str, radix);\n    return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n    const { value } = node;\n    if (intIdentify(value)) {\n        const str = value.toString(radix);\n        return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n    }\n    return stringifyNumber(node);\n}\nconst intBin = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'BIN',\n    test: /^[-+]?0b[0-1_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n    stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'OCT',\n    test: /^[-+]?0[0-7_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n    stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    test: /^[-+]?[0-9][0-9_]*$/,\n    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n    stringify: stringifyNumber\n};\nconst intHex = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'HEX',\n    test: /^[-+]?0x[0-9a-fA-F_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n    stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intBin, intHex, intOct };\n","import { isMap, isPair, isScalar } from '../../nodes/identity.js';\nimport { Pair, createPair } from '../../nodes/Pair.js';\nimport { YAMLMap, findPair } from '../../nodes/YAMLMap.js';\n\nclass YAMLSet extends YAMLMap {\n    constructor(schema) {\n        super(schema);\n        this.tag = YAMLSet.tag;\n    }\n    add(key) {\n        let pair;\n        if (isPair(key))\n            pair = key;\n        else if (key &&\n            typeof key === 'object' &&\n            'key' in key &&\n            'value' in key &&\n            key.value === null)\n            pair = new Pair(key.key, null);\n        else\n            pair = new Pair(key, null);\n        const prev = findPair(this.items, pair.key);\n        if (!prev)\n            this.items.push(pair);\n    }\n    /**\n     * If `keepPair` is `true`, returns the Pair matching `key`.\n     * Otherwise, returns the value of that Pair's key.\n     */\n    get(key, keepPair) {\n        const pair = findPair(this.items, key);\n        return !keepPair && isPair(pair)\n            ? isScalar(pair.key)\n                ? pair.key.value\n                : pair.key\n            : pair;\n    }\n    set(key, value) {\n        if (typeof value !== 'boolean')\n            throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n        const prev = findPair(this.items, key);\n        if (prev && !value) {\n            this.items.splice(this.items.indexOf(prev), 1);\n        }\n        else if (!prev && value) {\n            this.items.push(new Pair(key));\n        }\n    }\n    toJSON(_, ctx) {\n        return super.toJSON(_, ctx, Set);\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        if (this.hasAllNullValues(true))\n            return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n        else\n            throw new Error('Set items must all have null values');\n    }\n    static from(schema, iterable, ctx) {\n        const { replacer } = ctx;\n        const set = new this(schema);\n        if (iterable && Symbol.iterator in Object(iterable))\n            for (let value of iterable) {\n                if (typeof replacer === 'function')\n                    value = replacer.call(iterable, value, value);\n                set.items.push(createPair(value, null, ctx));\n            }\n        return set;\n    }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n    collection: 'map',\n    identify: value => value instanceof Set,\n    nodeClass: YAMLSet,\n    default: false,\n    tag: 'tag:yaml.org,2002:set',\n    createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n    resolve(map, onError) {\n        if (isMap(map)) {\n            if (map.hasAllNullValues(true))\n                return Object.assign(new YAMLSet(), map);\n            else\n                onError('Set items must all have null values');\n        }\n        else\n            onError('Expected a mapping for this tag');\n        return map;\n    }\n};\n\nexport { YAMLSet, set };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n    const sign = str[0];\n    const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n    const num = (n) => asBigInt ? BigInt(n) : Number(n);\n    const res = parts\n        .replace(/_/g, '')\n        .split(':')\n        .reduce((res, p) => res * num(60) + num(p), num(0));\n    return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n    let { value } = node;\n    let num = (n) => n;\n    if (typeof value === 'bigint')\n        num = n => BigInt(n);\n    else if (isNaN(value) || !isFinite(value))\n        return stringifyNumber(node);\n    let sign = '';\n    if (value < 0) {\n        sign = '-';\n        value *= num(-1);\n    }\n    const _60 = num(60);\n    const parts = [value % _60]; // seconds, including ms\n    if (value < 60) {\n        parts.unshift(0); // at least one : is required\n    }\n    else {\n        value = (value - parts[0]) / _60;\n        parts.unshift(value % _60); // minutes\n        if (value >= 60) {\n            value = (value - parts[0]) / _60;\n            parts.unshift(value); // hours\n        }\n    }\n    return (sign +\n        parts\n            .map(n => String(n).padStart(2, '0'))\n            .join(':')\n            .replace(/000000\\d*$/, '') // % 60 may introduce error\n    );\n}\nconst intTime = {\n    identify: value => typeof value === 'bigint' || Number.isInteger(value),\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'TIME',\n    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n    resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n    stringify: stringifySexagesimal\n};\nconst floatTime = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'TIME',\n    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n    resolve: str => parseSexagesimal(str, false),\n    stringify: stringifySexagesimal\n};\nconst timestamp = {\n    identify: value => value instanceof Date,\n    default: true,\n    tag: 'tag:yaml.org,2002:timestamp',\n    // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n    // may be omitted altogether, resulting in a date format. In such a case, the time part is\n    // assumed to be 00:00:00Z (start of day, UTC).\n    test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n        '(?:' + // time is optional\n        '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n        '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n        '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n        ')?$'),\n    resolve(str) {\n        const match = str.match(timestamp.test);\n        if (!match)\n            throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n        const [, year, month, day, hour, minute, second] = match.map(Number);\n        const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n        let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n        const tz = match[8];\n        if (tz && tz !== 'Z') {\n            let d = parseSexagesimal(tz, false);\n            if (Math.abs(d) < 30)\n                d *= 60;\n            date -= 60000 * d;\n        }\n        return new Date(date);\n    },\n    stringify: ({ value }) => value.toISOString().replace(/((T00:00)?:00)?\\.000Z$/, '')\n};\n\nexport { floatTime, intTime, timestamp };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { binary } from './binary.js';\nimport { trueTag, falseTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intBin, intOct, int, intHex } from './int.js';\nimport { merge } from './merge.js';\nimport { omap } from './omap.js';\nimport { pairs } from './pairs.js';\nimport { set } from './set.js';\nimport { intTime, floatTime, timestamp } from './timestamp.js';\n\nconst schema = [\n    map,\n    seq,\n    string,\n    nullTag,\n    trueTag,\n    falseTag,\n    intBin,\n    intOct,\n    int,\n    intHex,\n    floatNaN,\n    floatExp,\n    float,\n    binary,\n    merge,\n    omap,\n    pairs,\n    set,\n    intTime,\n    floatTime,\n    timestamp\n];\n\nexport { schema };\n","import { map } from './common/map.js';\nimport { nullTag } from './common/null.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { boolTag } from './core/bool.js';\nimport { float, floatExp, floatNaN } from './core/float.js';\nimport { int, intHex, intOct } from './core/int.js';\nimport { schema } from './core/schema.js';\nimport { schema as schema$1 } from './json/schema.js';\nimport { binary } from './yaml-1.1/binary.js';\nimport { merge } from './yaml-1.1/merge.js';\nimport { omap } from './yaml-1.1/omap.js';\nimport { pairs } from './yaml-1.1/pairs.js';\nimport { schema as schema$2 } from './yaml-1.1/schema.js';\nimport { set } from './yaml-1.1/set.js';\nimport { timestamp, floatTime, intTime } from './yaml-1.1/timestamp.js';\n\nconst schemas = new Map([\n    ['core', schema],\n    ['failsafe', [map, seq, string]],\n    ['json', schema$1],\n    ['yaml11', schema$2],\n    ['yaml-1.1', schema$2]\n]);\nconst tagsByName = {\n    binary,\n    bool: boolTag,\n    float,\n    floatExp,\n    floatNaN,\n    floatTime,\n    int,\n    intHex,\n    intOct,\n    intTime,\n    map,\n    merge,\n    null: nullTag,\n    omap,\n    pairs,\n    seq,\n    set,\n    timestamp\n};\nconst coreKnownTags = {\n    'tag:yaml.org,2002:binary': binary,\n    'tag:yaml.org,2002:merge': merge,\n    'tag:yaml.org,2002:omap': omap,\n    'tag:yaml.org,2002:pairs': pairs,\n    'tag:yaml.org,2002:set': set,\n    'tag:yaml.org,2002:timestamp': timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n    const schemaTags = schemas.get(schemaName);\n    if (schemaTags && !customTags) {\n        return addMergeTag && !schemaTags.includes(merge)\n            ? schemaTags.concat(merge)\n            : schemaTags.slice();\n    }\n    let tags = schemaTags;\n    if (!tags) {\n        if (Array.isArray(customTags))\n            tags = [];\n        else {\n            const keys = Array.from(schemas.keys())\n                .filter(key => key !== 'yaml11')\n                .map(key => JSON.stringify(key))\n                .join(', ');\n            throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n        }\n    }\n    if (Array.isArray(customTags)) {\n        for (const tag of customTags)\n            tags = tags.concat(tag);\n    }\n    else if (typeof customTags === 'function') {\n        tags = customTags(tags.slice());\n    }\n    if (addMergeTag)\n        tags = tags.concat(merge);\n    return tags.reduce((tags, tag) => {\n        const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n        if (!tagObj) {\n            const tagName = JSON.stringify(tag);\n            const keys = Object.keys(tagsByName)\n                .map(key => JSON.stringify(key))\n                .join(', ');\n            throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n        }\n        if (!tags.includes(tagObj))\n            tags.push(tagObj);\n        return tags;\n    }, []);\n}\n\nexport { coreKnownTags, getTags };\n","import { MAP, SCALAR, SEQ } from '../nodes/identity.js';\nimport { map } from './common/map.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { getTags, coreKnownTags } from './tags.js';\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n    constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n        this.compat = Array.isArray(compat)\n            ? getTags(compat, 'compat')\n            : compat\n                ? getTags(null, compat)\n                : null;\n        this.name = (typeof schema === 'string' && schema) || 'core';\n        this.knownTags = resolveKnownTags ? coreKnownTags : {};\n        this.tags = getTags(customTags, this.name, merge);\n        this.toStringOptions = toStringDefaults ?? null;\n        Object.defineProperty(this, MAP, { value: map });\n        Object.defineProperty(this, SCALAR, { value: string });\n        Object.defineProperty(this, SEQ, { value: seq });\n        // Used by createMap()\n        this.sortMapEntries =\n            typeof sortMapEntries === 'function'\n                ? sortMapEntries\n                : sortMapEntries === true\n                    ? sortMapEntriesByKey\n                    : null;\n    }\n    clone() {\n        const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n        copy.tags = this.tags.slice();\n        return copy;\n    }\n}\n\nexport { Schema };\n","import { isNode } from '../nodes/identity.js';\nimport { createStringifyContext, stringify } from './stringify.js';\nimport { indentComment, lineComment } from './stringifyComment.js';\n\nfunction stringifyDocument(doc, options) {\n    const lines = [];\n    let hasDirectives = options.directives === true;\n    if (options.directives !== false && doc.directives) {\n        const dir = doc.directives.toString(doc);\n        if (dir) {\n            lines.push(dir);\n            hasDirectives = true;\n        }\n        else if (doc.directives.docStart)\n            hasDirectives = true;\n    }\n    if (hasDirectives)\n        lines.push('---');\n    const ctx = createStringifyContext(doc, options);\n    const { commentString } = ctx.options;\n    if (doc.commentBefore) {\n        if (lines.length !== 1)\n            lines.unshift('');\n        const cs = commentString(doc.commentBefore);\n        lines.unshift(indentComment(cs, ''));\n    }\n    let chompKeep = false;\n    let contentComment = null;\n    if (doc.contents) {\n        if (isNode(doc.contents)) {\n            if (doc.contents.spaceBefore && hasDirectives)\n                lines.push('');\n            if (doc.contents.commentBefore) {\n                const cs = commentString(doc.contents.commentBefore);\n                lines.push(indentComment(cs, ''));\n            }\n            // top-level block scalars need to be indented if followed by a comment\n            ctx.forceBlockIndent = !!doc.comment;\n            contentComment = doc.contents.comment;\n        }\n        const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n        let body = stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n        if (contentComment)\n            body += lineComment(body, '', commentString(contentComment));\n        if ((body[0] === '|' || body[0] === '>') &&\n            lines[lines.length - 1] === '---') {\n            // Top-level block scalars with a preceding doc marker ought to use the\n            // same line for their header.\n            lines[lines.length - 1] = `--- ${body}`;\n        }\n        else\n            lines.push(body);\n    }\n    else {\n        lines.push(stringify(doc.contents, ctx));\n    }\n    if (doc.directives?.docEnd) {\n        if (doc.comment) {\n            const cs = commentString(doc.comment);\n            if (cs.includes('\\n')) {\n                lines.push('...');\n                lines.push(indentComment(cs, ''));\n            }\n            else {\n                lines.push(`... ${cs}`);\n            }\n        }\n        else {\n            lines.push('...');\n        }\n    }\n    else {\n        let dc = doc.comment;\n        if (dc && chompKeep)\n            dc = dc.replace(/^\\n+/, '');\n        if (dc) {\n            if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n                lines.push('');\n            lines.push(indentComment(commentString(dc), ''));\n        }\n    }\n    return lines.join('\\n') + '\\n';\n}\n\nexport { stringifyDocument };\n","import { Alias } from '../nodes/Alias.js';\nimport { isEmptyPath, collectionFromPath } from '../nodes/Collection.js';\nimport { NODE_TYPE, DOC, isNode, isCollection, isScalar } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { toJS } from '../nodes/toJS.js';\nimport { Schema } from '../schema/Schema.js';\nimport { stringifyDocument } from '../stringify/stringifyDocument.js';\nimport { anchorNames, findNewAnchor, createNodeAnchors } from './anchors.js';\nimport { applyReviver } from './applyReviver.js';\nimport { createNode } from './createNode.js';\nimport { Directives } from './directives.js';\n\nclass Document {\n    constructor(value, replacer, options) {\n        /** A comment before this Document */\n        this.commentBefore = null;\n        /** A comment immediately after this Document */\n        this.comment = null;\n        /** Errors encountered during parsing. */\n        this.errors = [];\n        /** Warnings encountered during parsing. */\n        this.warnings = [];\n        Object.defineProperty(this, NODE_TYPE, { value: DOC });\n        let _replacer = null;\n        if (typeof replacer === 'function' || Array.isArray(replacer)) {\n            _replacer = replacer;\n        }\n        else if (options === undefined && replacer) {\n            options = replacer;\n            replacer = undefined;\n        }\n        const opt = Object.assign({\n            intAsBigInt: false,\n            keepSourceTokens: false,\n            logLevel: 'warn',\n            prettyErrors: true,\n            strict: true,\n            stringKeys: false,\n            uniqueKeys: true,\n            version: '1.2'\n        }, options);\n        this.options = opt;\n        let { version } = opt;\n        if (options?._directives) {\n            this.directives = options._directives.atDocument();\n            if (this.directives.yaml.explicit)\n                version = this.directives.yaml.version;\n        }\n        else\n            this.directives = new Directives({ version });\n        this.setSchema(version, options);\n        // @ts-expect-error We can't really know that this matches Contents.\n        this.contents =\n            value === undefined ? null : this.createNode(value, _replacer, options);\n    }\n    /**\n     * Create a deep copy of this Document and its contents.\n     *\n     * Custom Node values that inherit from `Object` still refer to their original instances.\n     */\n    clone() {\n        const copy = Object.create(Document.prototype, {\n            [NODE_TYPE]: { value: DOC }\n        });\n        copy.commentBefore = this.commentBefore;\n        copy.comment = this.comment;\n        copy.errors = this.errors.slice();\n        copy.warnings = this.warnings.slice();\n        copy.options = Object.assign({}, this.options);\n        if (this.directives)\n            copy.directives = this.directives.clone();\n        copy.schema = this.schema.clone();\n        // @ts-expect-error We can't really know that this matches Contents.\n        copy.contents = isNode(this.contents)\n            ? this.contents.clone(copy.schema)\n            : this.contents;\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /** Adds a value to the document. */\n    add(value) {\n        if (assertCollection(this.contents))\n            this.contents.add(value);\n    }\n    /** Adds a value to the document. */\n    addIn(path, value) {\n        if (assertCollection(this.contents))\n            this.contents.addIn(path, value);\n    }\n    /**\n     * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n     *\n     * If `node` already has an anchor, `name` is ignored.\n     * Otherwise, the `node.anchor` value will be set to `name`,\n     * or if an anchor with that name is already present in the document,\n     * `name` will be used as a prefix for a new unique anchor.\n     * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n     */\n    createAlias(node, name) {\n        if (!node.anchor) {\n            const prev = anchorNames(this);\n            node.anchor =\n                // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n                !name || prev.has(name) ? findNewAnchor(name || 'a', prev) : name;\n        }\n        return new Alias(node.anchor);\n    }\n    createNode(value, replacer, options) {\n        let _replacer = undefined;\n        if (typeof replacer === 'function') {\n            value = replacer.call({ '': value }, '', value);\n            _replacer = replacer;\n        }\n        else if (Array.isArray(replacer)) {\n            const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n            const asStr = replacer.filter(keyToStr).map(String);\n            if (asStr.length > 0)\n                replacer = replacer.concat(asStr);\n            _replacer = replacer;\n        }\n        else if (options === undefined && replacer) {\n            options = replacer;\n            replacer = undefined;\n        }\n        const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n        const { onAnchor, setAnchors, sourceObjects } = createNodeAnchors(this, \n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        anchorPrefix || 'a');\n        const ctx = {\n            aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n            keepUndefined: keepUndefined ?? false,\n            onAnchor,\n            onTagObj,\n            replacer: _replacer,\n            schema: this.schema,\n            sourceObjects\n        };\n        const node = createNode(value, tag, ctx);\n        if (flow && isCollection(node))\n            node.flow = true;\n        setAnchors();\n        return node;\n    }\n    /**\n     * Convert a key and a value into a `Pair` using the current schema,\n     * recursively wrapping all values as `Scalar` or `Collection` nodes.\n     */\n    createPair(key, value, options = {}) {\n        const k = this.createNode(key, null, options);\n        const v = this.createNode(value, null, options);\n        return new Pair(k, v);\n    }\n    /**\n     * Removes a value from the document.\n     * @returns `true` if the item was found and removed.\n     */\n    delete(key) {\n        return assertCollection(this.contents) ? this.contents.delete(key) : false;\n    }\n    /**\n     * Removes a value from the document.\n     * @returns `true` if the item was found and removed.\n     */\n    deleteIn(path) {\n        if (isEmptyPath(path)) {\n            if (this.contents == null)\n                return false;\n            // @ts-expect-error Presumed impossible if Strict extends false\n            this.contents = null;\n            return true;\n        }\n        return assertCollection(this.contents)\n            ? this.contents.deleteIn(path)\n            : false;\n    }\n    /**\n     * Returns item at `key`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    get(key, keepScalar) {\n        return isCollection(this.contents)\n            ? this.contents.get(key, keepScalar)\n            : undefined;\n    }\n    /**\n     * Returns item at `path`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    getIn(path, keepScalar) {\n        if (isEmptyPath(path))\n            return !keepScalar && isScalar(this.contents)\n                ? this.contents.value\n                : this.contents;\n        return isCollection(this.contents)\n            ? this.contents.getIn(path, keepScalar)\n            : undefined;\n    }\n    /**\n     * Checks if the document includes a value with the key `key`.\n     */\n    has(key) {\n        return isCollection(this.contents) ? this.contents.has(key) : false;\n    }\n    /**\n     * Checks if the document includes a value at `path`.\n     */\n    hasIn(path) {\n        if (isEmptyPath(path))\n            return this.contents !== undefined;\n        return isCollection(this.contents) ? this.contents.hasIn(path) : false;\n    }\n    /**\n     * Sets a value in this document. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    set(key, value) {\n        if (this.contents == null) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = collectionFromPath(this.schema, [key], value);\n        }\n        else if (assertCollection(this.contents)) {\n            this.contents.set(key, value);\n        }\n    }\n    /**\n     * Sets a value in this document. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    setIn(path, value) {\n        if (isEmptyPath(path)) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = value;\n        }\n        else if (this.contents == null) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = collectionFromPath(this.schema, Array.from(path), value);\n        }\n        else if (assertCollection(this.contents)) {\n            this.contents.setIn(path, value);\n        }\n    }\n    /**\n     * Change the YAML version and schema used by the document.\n     * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n     * It also requires the `schema` option to be given as a `Schema` instance value.\n     *\n     * Overrides all previously set schema options.\n     */\n    setSchema(version, options = {}) {\n        if (typeof version === 'number')\n            version = String(version);\n        let opt;\n        switch (version) {\n            case '1.1':\n                if (this.directives)\n                    this.directives.yaml.version = '1.1';\n                else\n                    this.directives = new Directives({ version: '1.1' });\n                opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n                break;\n            case '1.2':\n            case 'next':\n                if (this.directives)\n                    this.directives.yaml.version = version;\n                else\n                    this.directives = new Directives({ version });\n                opt = { resolveKnownTags: true, schema: 'core' };\n                break;\n            case null:\n                if (this.directives)\n                    delete this.directives;\n                opt = null;\n                break;\n            default: {\n                const sv = JSON.stringify(version);\n                throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n            }\n        }\n        // Not using `instanceof Schema` to allow for duck typing\n        if (options.schema instanceof Object)\n            this.schema = options.schema;\n        else if (opt)\n            this.schema = new Schema(Object.assign(opt, options));\n        else\n            throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n    }\n    // json & jsonArg are only used from toJSON()\n    toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n        const ctx = {\n            anchors: new Map(),\n            doc: this,\n            keep: !json,\n            mapAsMap: mapAsMap === true,\n            mapKeyWarned: false,\n            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n        };\n        const res = toJS(this.contents, jsonArg ?? '', ctx);\n        if (typeof onAnchor === 'function')\n            for (const { count, res } of ctx.anchors.values())\n                onAnchor(res, count);\n        return typeof reviver === 'function'\n            ? applyReviver(reviver, { '': res }, '', res)\n            : res;\n    }\n    /**\n     * A JSON representation of the document `contents`.\n     *\n     * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n     *   property name.\n     */\n    toJSON(jsonArg, onAnchor) {\n        return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n    }\n    /** A YAML representation of the document. */\n    toString(options = {}) {\n        if (this.errors.length > 0)\n            throw new Error('Document with errors cannot be stringified');\n        if ('indent' in options &&\n            (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n            const s = JSON.stringify(options.indent);\n            throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n        }\n        return stringifyDocument(this, options);\n    }\n}\nfunction assertCollection(contents) {\n    if (isCollection(contents))\n        return true;\n    throw new Error('Expected a YAML collection as document contents');\n}\n\nexport { Document };\n","class YAMLError extends Error {\n    constructor(name, pos, code, message) {\n        super();\n        this.name = name;\n        this.code = code;\n        this.message = message;\n        this.pos = pos;\n    }\n}\nclass YAMLParseError extends YAMLError {\n    constructor(pos, code, message) {\n        super('YAMLParseError', pos, code, message);\n    }\n}\nclass YAMLWarning extends YAMLError {\n    constructor(pos, code, message) {\n        super('YAMLWarning', pos, code, message);\n    }\n}\nconst prettifyError = (src, lc) => (error) => {\n    if (error.pos[0] === -1)\n        return;\n    error.linePos = error.pos.map(pos => lc.linePos(pos));\n    const { line, col } = error.linePos[0];\n    error.message += ` at line ${line}, column ${col}`;\n    let ci = col - 1;\n    let lineStr = src\n        .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n        .replace(/[\\n\\r]+$/, '');\n    // Trim to max 80 chars, keeping col position near the middle\n    if (ci >= 60 && lineStr.length > 80) {\n        const trimStart = Math.min(ci - 39, lineStr.length - 79);\n        lineStr = '…' + lineStr.substring(trimStart);\n        ci -= trimStart - 1;\n    }\n    if (lineStr.length > 80)\n        lineStr = lineStr.substring(0, 79) + '…';\n    // Include previous line in context if pointing at line start\n    if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n        // Regexp won't match if start is trimmed\n        let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n        if (prev.length > 80)\n            prev = prev.substring(0, 79) + '…\\n';\n        lineStr = prev + lineStr;\n    }\n    if (/[^ ]/.test(lineStr)) {\n        let count = 1;\n        const end = error.linePos[1];\n        if (end && end.line === line && end.col > col) {\n            count = Math.max(1, Math.min(end.col - col, 80 - ci));\n        }\n        const pointer = ' '.repeat(ci) + '^'.repeat(count);\n        error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n    }\n};\n\nexport { YAMLError, YAMLParseError, YAMLWarning, prettifyError };\n","function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n    let spaceBefore = false;\n    let atNewline = startOnNewline;\n    let hasSpace = startOnNewline;\n    let comment = '';\n    let commentSep = '';\n    let hasNewline = false;\n    let reqSpace = false;\n    let tab = null;\n    let anchor = null;\n    let tag = null;\n    let newlineAfterProp = null;\n    let comma = null;\n    let found = null;\n    let start = null;\n    for (const token of tokens) {\n        if (reqSpace) {\n            if (token.type !== 'space' &&\n                token.type !== 'newline' &&\n                token.type !== 'comma')\n                onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n            reqSpace = false;\n        }\n        if (tab) {\n            if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n                onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n            }\n            tab = null;\n        }\n        switch (token.type) {\n            case 'space':\n                // At the doc level, tabs at line start may be parsed\n                // as leading white space rather than indentation.\n                // In a flow collection, only the parser handles indent.\n                if (!flow &&\n                    (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n                    token.source.includes('\\t')) {\n                    tab = token;\n                }\n                hasSpace = true;\n                break;\n            case 'comment': {\n                if (!hasSpace)\n                    onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n                const cb = token.source.substring(1) || ' ';\n                if (!comment)\n                    comment = cb;\n                else\n                    comment += commentSep + cb;\n                commentSep = '';\n                atNewline = false;\n                break;\n            }\n            case 'newline':\n                if (atNewline) {\n                    if (comment)\n                        comment += token.source;\n                    else\n                        spaceBefore = true;\n                }\n                else\n                    commentSep += token.source;\n                atNewline = true;\n                hasNewline = true;\n                if (anchor || tag)\n                    newlineAfterProp = token;\n                hasSpace = true;\n                break;\n            case 'anchor':\n                if (anchor)\n                    onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n                if (token.source.endsWith(':'))\n                    onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n                anchor = token;\n                if (start === null)\n                    start = token.offset;\n                atNewline = false;\n                hasSpace = false;\n                reqSpace = true;\n                break;\n            case 'tag': {\n                if (tag)\n                    onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n                tag = token;\n                if (start === null)\n                    start = token.offset;\n                atNewline = false;\n                hasSpace = false;\n                reqSpace = true;\n                break;\n            }\n            case indicator:\n                // Could here handle preceding comments differently\n                if (anchor || tag)\n                    onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n                if (found)\n                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n                found = token;\n                atNewline =\n                    indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n                hasSpace = false;\n                break;\n            case 'comma':\n                if (flow) {\n                    if (comma)\n                        onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n                    comma = token;\n                    atNewline = false;\n                    hasSpace = false;\n                    break;\n                }\n            // else fallthrough\n            default:\n                onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n                atNewline = false;\n                hasSpace = false;\n        }\n    }\n    const last = tokens[tokens.length - 1];\n    const end = last ? last.offset + last.source.length : offset;\n    if (reqSpace &&\n        next &&\n        next.type !== 'space' &&\n        next.type !== 'newline' &&\n        next.type !== 'comma' &&\n        (next.type !== 'scalar' || next.source !== '')) {\n        onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n    }\n    if (tab &&\n        ((atNewline && tab.indent <= parentIndent) ||\n            next?.type === 'block-map' ||\n            next?.type === 'block-seq'))\n        onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n    return {\n        comma,\n        found,\n        spaceBefore,\n        comment,\n        hasNewline,\n        anchor,\n        tag,\n        newlineAfterProp,\n        end,\n        start: start ?? end\n    };\n}\n\nexport { resolveProps };\n","function containsNewline(key) {\n    if (!key)\n        return null;\n    switch (key.type) {\n        case 'alias':\n        case 'scalar':\n        case 'double-quoted-scalar':\n        case 'single-quoted-scalar':\n            if (key.source.includes('\\n'))\n                return true;\n            if (key.end)\n                for (const st of key.end)\n                    if (st.type === 'newline')\n                        return true;\n            return false;\n        case 'flow-collection':\n            for (const it of key.items) {\n                for (const st of it.start)\n                    if (st.type === 'newline')\n                        return true;\n                if (it.sep)\n                    for (const st of it.sep)\n                        if (st.type === 'newline')\n                            return true;\n                if (containsNewline(it.key) || containsNewline(it.value))\n                    return true;\n            }\n            return false;\n        default:\n            return true;\n    }\n}\n\nexport { containsNewline };\n","import { containsNewline } from './util-contains-newline.js';\n\nfunction flowIndentCheck(indent, fc, onError) {\n    if (fc?.type === 'flow-collection') {\n        const end = fc.end[0];\n        if (end.indent === indent &&\n            (end.source === ']' || end.source === '}') &&\n            containsNewline(fc)) {\n            const msg = 'Flow end indicator should be more indented than parent';\n            onError(end, 'BAD_INDENT', msg, true);\n        }\n    }\n}\n\nexport { flowIndentCheck };\n","import { isScalar } from '../nodes/identity.js';\n\nfunction mapIncludes(ctx, items, search) {\n    const { uniqueKeys } = ctx.options;\n    if (uniqueKeys === false)\n        return false;\n    const isEqual = typeof uniqueKeys === 'function'\n        ? uniqueKeys\n        : (a, b) => a === b || (isScalar(a) && isScalar(b) && a.value === b.value);\n    return items.some(pair => isEqual(pair.key, search));\n}\n\nexport { mapIncludes };\n","import { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n    const NodeClass = tag?.nodeClass ?? YAMLMap;\n    const map = new NodeClass(ctx.schema);\n    if (ctx.atRoot)\n        ctx.atRoot = false;\n    let offset = bm.offset;\n    let commentEnd = null;\n    for (const collItem of bm.items) {\n        const { start, key, sep, value } = collItem;\n        // key properties\n        const keyProps = resolveProps(start, {\n            indicator: 'explicit-key-ind',\n            next: key ?? sep?.[0],\n            offset,\n            onError,\n            parentIndent: bm.indent,\n            startOnNewline: true\n        });\n        const implicitKey = !keyProps.found;\n        if (implicitKey) {\n            if (key) {\n                if (key.type === 'block-seq')\n                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n                else if ('indent' in key && key.indent !== bm.indent)\n                    onError(offset, 'BAD_INDENT', startColMsg);\n            }\n            if (!keyProps.anchor && !keyProps.tag && !sep) {\n                commentEnd = keyProps.end;\n                if (keyProps.comment) {\n                    if (map.comment)\n                        map.comment += '\\n' + keyProps.comment;\n                    else\n                        map.comment = keyProps.comment;\n                }\n                continue;\n            }\n            if (keyProps.newlineAfterProp || containsNewline(key)) {\n                onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n            }\n        }\n        else if (keyProps.found?.indent !== bm.indent) {\n            onError(offset, 'BAD_INDENT', startColMsg);\n        }\n        // key value\n        ctx.atKey = true;\n        const keyStart = keyProps.end;\n        const keyNode = key\n            ? composeNode(ctx, key, keyProps, onError)\n            : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n        if (ctx.schema.compat)\n            flowIndentCheck(bm.indent, key, onError);\n        ctx.atKey = false;\n        if (mapIncludes(ctx, map.items, keyNode))\n            onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n        // value properties\n        const valueProps = resolveProps(sep ?? [], {\n            indicator: 'map-value-ind',\n            next: value,\n            offset: keyNode.range[2],\n            onError,\n            parentIndent: bm.indent,\n            startOnNewline: !key || key.type === 'block-scalar'\n        });\n        offset = valueProps.end;\n        if (valueProps.found) {\n            if (implicitKey) {\n                if (value?.type === 'block-map' && !valueProps.hasNewline)\n                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n                if (ctx.options.strict &&\n                    keyProps.start < valueProps.found.offset - 1024)\n                    onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n            }\n            // value value\n            const valueNode = value\n                ? composeNode(ctx, value, valueProps, onError)\n                : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n            if (ctx.schema.compat)\n                flowIndentCheck(bm.indent, value, onError);\n            offset = valueNode.range[2];\n            const pair = new Pair(keyNode, valueNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            map.items.push(pair);\n        }\n        else {\n            // key with no value\n            if (implicitKey)\n                onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n            if (valueProps.comment) {\n                if (keyNode.comment)\n                    keyNode.comment += '\\n' + valueProps.comment;\n                else\n                    keyNode.comment = valueProps.comment;\n            }\n            const pair = new Pair(keyNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            map.items.push(pair);\n        }\n    }\n    if (commentEnd && commentEnd < offset)\n        onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n    map.range = [bm.offset, offset, commentEnd ?? offset];\n    return map;\n}\n\nexport { resolveBlockMap };\n","import { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveProps } from './resolve-props.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n    const NodeClass = tag?.nodeClass ?? YAMLSeq;\n    const seq = new NodeClass(ctx.schema);\n    if (ctx.atRoot)\n        ctx.atRoot = false;\n    if (ctx.atKey)\n        ctx.atKey = false;\n    let offset = bs.offset;\n    let commentEnd = null;\n    for (const { start, value } of bs.items) {\n        const props = resolveProps(start, {\n            indicator: 'seq-item-ind',\n            next: value,\n            offset,\n            onError,\n            parentIndent: bs.indent,\n            startOnNewline: true\n        });\n        if (!props.found) {\n            if (props.anchor || props.tag || value) {\n                if (value && value.type === 'block-seq')\n                    onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n                else\n                    onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n            }\n            else {\n                commentEnd = props.end;\n                if (props.comment)\n                    seq.comment = props.comment;\n                continue;\n            }\n        }\n        const node = value\n            ? composeNode(ctx, value, props, onError)\n            : composeEmptyNode(ctx, props.end, start, null, props, onError);\n        if (ctx.schema.compat)\n            flowIndentCheck(bs.indent, value, onError);\n        offset = node.range[2];\n        seq.items.push(node);\n    }\n    seq.range = [bs.offset, offset, commentEnd ?? offset];\n    return seq;\n}\n\nexport { resolveBlockSeq };\n","function resolveEnd(end, offset, reqSpace, onError) {\n    let comment = '';\n    if (end) {\n        let hasSpace = false;\n        let sep = '';\n        for (const token of end) {\n            const { source, type } = token;\n            switch (type) {\n                case 'space':\n                    hasSpace = true;\n                    break;\n                case 'comment': {\n                    if (reqSpace && !hasSpace)\n                        onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n                    const cb = source.substring(1) || ' ';\n                    if (!comment)\n                        comment = cb;\n                    else\n                        comment += sep + cb;\n                    sep = '';\n                    break;\n                }\n                case 'newline':\n                    if (comment)\n                        sep += source;\n                    hasSpace = true;\n                    break;\n                default:\n                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n            }\n            offset += source.length;\n        }\n    }\n    return { comment, offset };\n}\n\nexport { resolveEnd };\n","import { isPair } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n    const isMap = fc.start.source === '{';\n    const fcName = isMap ? 'flow map' : 'flow sequence';\n    const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap : YAMLSeq));\n    const coll = new NodeClass(ctx.schema);\n    coll.flow = true;\n    const atRoot = ctx.atRoot;\n    if (atRoot)\n        ctx.atRoot = false;\n    if (ctx.atKey)\n        ctx.atKey = false;\n    let offset = fc.offset + fc.start.source.length;\n    for (let i = 0; i < fc.items.length; ++i) {\n        const collItem = fc.items[i];\n        const { start, key, sep, value } = collItem;\n        const props = resolveProps(start, {\n            flow: fcName,\n            indicator: 'explicit-key-ind',\n            next: key ?? sep?.[0],\n            offset,\n            onError,\n            parentIndent: fc.indent,\n            startOnNewline: false\n        });\n        if (!props.found) {\n            if (!props.anchor && !props.tag && !sep && !value) {\n                if (i === 0 && props.comma)\n                    onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n                else if (i < fc.items.length - 1)\n                    onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n                if (props.comment) {\n                    if (coll.comment)\n                        coll.comment += '\\n' + props.comment;\n                    else\n                        coll.comment = props.comment;\n                }\n                offset = props.end;\n                continue;\n            }\n            if (!isMap && ctx.options.strict && containsNewline(key))\n                onError(key, // checked by containsNewline()\n                'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n        }\n        if (i === 0) {\n            if (props.comma)\n                onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n        }\n        else {\n            if (!props.comma)\n                onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n            if (props.comment) {\n                let prevItemComment = '';\n                loop: for (const st of start) {\n                    switch (st.type) {\n                        case 'comma':\n                        case 'space':\n                            break;\n                        case 'comment':\n                            prevItemComment = st.source.substring(1);\n                            break loop;\n                        default:\n                            break loop;\n                    }\n                }\n                if (prevItemComment) {\n                    let prev = coll.items[coll.items.length - 1];\n                    if (isPair(prev))\n                        prev = prev.value ?? prev.key;\n                    if (prev.comment)\n                        prev.comment += '\\n' + prevItemComment;\n                    else\n                        prev.comment = prevItemComment;\n                    props.comment = props.comment.substring(prevItemComment.length + 1);\n                }\n            }\n        }\n        if (!isMap && !sep && !props.found) {\n            // item is a value in a seq\n            // → key & sep are empty, start does not include ? or :\n            const valueNode = value\n                ? composeNode(ctx, value, props, onError)\n                : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n            coll.items.push(valueNode);\n            offset = valueNode.range[2];\n            if (isBlock(value))\n                onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n        }\n        else {\n            // item is a key+value pair\n            // key value\n            ctx.atKey = true;\n            const keyStart = props.end;\n            const keyNode = key\n                ? composeNode(ctx, key, props, onError)\n                : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n            if (isBlock(key))\n                onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n            ctx.atKey = false;\n            // value properties\n            const valueProps = resolveProps(sep ?? [], {\n                flow: fcName,\n                indicator: 'map-value-ind',\n                next: value,\n                offset: keyNode.range[2],\n                onError,\n                parentIndent: fc.indent,\n                startOnNewline: false\n            });\n            if (valueProps.found) {\n                if (!isMap && !props.found && ctx.options.strict) {\n                    if (sep)\n                        for (const st of sep) {\n                            if (st === valueProps.found)\n                                break;\n                            if (st.type === 'newline') {\n                                onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n                                break;\n                            }\n                        }\n                    if (props.start < valueProps.found.offset - 1024)\n                        onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n                }\n            }\n            else if (value) {\n                if ('source' in value && value.source && value.source[0] === ':')\n                    onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n                else\n                    onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n            }\n            // value value\n            const valueNode = value\n                ? composeNode(ctx, value, valueProps, onError)\n                : valueProps.found\n                    ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n                    : null;\n            if (valueNode) {\n                if (isBlock(value))\n                    onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n            }\n            else if (valueProps.comment) {\n                if (keyNode.comment)\n                    keyNode.comment += '\\n' + valueProps.comment;\n                else\n                    keyNode.comment = valueProps.comment;\n            }\n            const pair = new Pair(keyNode, valueNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            if (isMap) {\n                const map = coll;\n                if (mapIncludes(ctx, map.items, keyNode))\n                    onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n                map.items.push(pair);\n            }\n            else {\n                const map = new YAMLMap(ctx.schema);\n                map.flow = true;\n                map.items.push(pair);\n                const endRange = (valueNode ?? keyNode).range;\n                map.range = [keyNode.range[0], endRange[1], endRange[2]];\n                coll.items.push(map);\n            }\n            offset = valueNode ? valueNode.range[2] : valueProps.end;\n        }\n    }\n    const expectedEnd = isMap ? '}' : ']';\n    const [ce, ...ee] = fc.end;\n    let cePos = offset;\n    if (ce && ce.source === expectedEnd)\n        cePos = ce.offset + ce.source.length;\n    else {\n        const name = fcName[0].toUpperCase() + fcName.substring(1);\n        const msg = atRoot\n            ? `${name} must end with a ${expectedEnd}`\n            : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n        onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n        if (ce && ce.source.length !== 1)\n            ee.unshift(ce);\n    }\n    if (ee.length > 0) {\n        const end = resolveEnd(ee, cePos, ctx.options.strict, onError);\n        if (end.comment) {\n            if (coll.comment)\n                coll.comment += '\\n' + end.comment;\n            else\n                coll.comment = end.comment;\n        }\n        coll.range = [fc.offset, cePos, end.offset];\n    }\n    else {\n        coll.range = [fc.offset, cePos, cePos];\n    }\n    return coll;\n}\n\nexport { resolveFlowCollection };\n","import { isNode } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveBlockMap } from './resolve-block-map.js';\nimport { resolveBlockSeq } from './resolve-block-seq.js';\nimport { resolveFlowCollection } from './resolve-flow-collection.js';\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n    const coll = token.type === 'block-map'\n        ? resolveBlockMap(CN, ctx, token, onError, tag)\n        : token.type === 'block-seq'\n            ? resolveBlockSeq(CN, ctx, token, onError, tag)\n            : resolveFlowCollection(CN, ctx, token, onError, tag);\n    const Coll = coll.constructor;\n    // If we got a tagName matching the class, or the tag name is '!',\n    // then use the tagName from the node class used to create it.\n    if (tagName === '!' || tagName === Coll.tagName) {\n        coll.tag = Coll.tagName;\n        return coll;\n    }\n    if (tagName)\n        coll.tag = tagName;\n    return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n    const tagToken = props.tag;\n    const tagName = !tagToken\n        ? null\n        : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n    if (token.type === 'block-seq') {\n        const { anchor, newlineAfterProp: nl } = props;\n        const lastProp = anchor && tagToken\n            ? anchor.offset > tagToken.offset\n                ? anchor\n                : tagToken\n            : (anchor ?? tagToken);\n        if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n            const message = 'Missing newline after block sequence props';\n            onError(lastProp, 'MISSING_CHAR', message);\n        }\n    }\n    const expType = token.type === 'block-map'\n        ? 'map'\n        : token.type === 'block-seq'\n            ? 'seq'\n            : token.start.source === '{'\n                ? 'map'\n                : 'seq';\n    // shortcut: check if it's a generic YAMLMap or YAMLSeq\n    // before jumping into the custom tag logic.\n    if (!tagToken ||\n        !tagName ||\n        tagName === '!' ||\n        (tagName === YAMLMap.tagName && expType === 'map') ||\n        (tagName === YAMLSeq.tagName && expType === 'seq')) {\n        return resolveCollection(CN, ctx, token, onError, tagName);\n    }\n    let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n    if (!tag) {\n        const kt = ctx.schema.knownTags[tagName];\n        if (kt && kt.collection === expType) {\n            ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n            tag = kt;\n        }\n        else {\n            if (kt?.collection) {\n                onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection}`, true);\n            }\n            else {\n                onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n            }\n            return resolveCollection(CN, ctx, token, onError, tagName);\n        }\n    }\n    const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n    const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n    const node = isNode(res)\n        ? res\n        : new Scalar(res);\n    node.range = coll.range;\n    node.tag = tagName;\n    if (tag?.format)\n        node.format = tag.format;\n    return node;\n}\n\nexport { composeCollection };\n","import { Scalar } from '../nodes/Scalar.js';\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n    const start = scalar.offset;\n    const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n    if (!header)\n        return { value: '', type: null, comment: '', range: [start, start, start] };\n    const type = header.mode === '>' ? Scalar.BLOCK_FOLDED : Scalar.BLOCK_LITERAL;\n    const lines = scalar.source ? splitLines(scalar.source) : [];\n    // determine the end of content & start of chomping\n    let chompStart = lines.length;\n    for (let i = lines.length - 1; i >= 0; --i) {\n        const content = lines[i][1];\n        if (content === '' || content === '\\r')\n            chompStart = i;\n        else\n            break;\n    }\n    // shortcut for empty contents\n    if (chompStart === 0) {\n        const value = header.chomp === '+' && lines.length > 0\n            ? '\\n'.repeat(Math.max(1, lines.length - 1))\n            : '';\n        let end = start + header.length;\n        if (scalar.source)\n            end += scalar.source.length;\n        return { value, type, comment: header.comment, range: [start, end, end] };\n    }\n    // find the indentation level to trim from start\n    let trimIndent = scalar.indent + header.indent;\n    let offset = scalar.offset + header.length;\n    let contentStart = 0;\n    for (let i = 0; i < chompStart; ++i) {\n        const [indent, content] = lines[i];\n        if (content === '' || content === '\\r') {\n            if (header.indent === 0 && indent.length > trimIndent)\n                trimIndent = indent.length;\n        }\n        else {\n            if (indent.length < trimIndent) {\n                const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n                onError(offset + indent.length, 'MISSING_CHAR', message);\n            }\n            if (header.indent === 0)\n                trimIndent = indent.length;\n            contentStart = i;\n            if (trimIndent === 0 && !ctx.atRoot) {\n                const message = 'Block scalar values in collections must be indented';\n                onError(offset, 'BAD_INDENT', message);\n            }\n            break;\n        }\n        offset += indent.length + content.length + 1;\n    }\n    // include trailing more-indented empty lines in content\n    for (let i = lines.length - 1; i >= chompStart; --i) {\n        if (lines[i][0].length > trimIndent)\n            chompStart = i + 1;\n    }\n    let value = '';\n    let sep = '';\n    let prevMoreIndented = false;\n    // leading whitespace is kept intact\n    for (let i = 0; i < contentStart; ++i)\n        value += lines[i][0].slice(trimIndent) + '\\n';\n    for (let i = contentStart; i < chompStart; ++i) {\n        let [indent, content] = lines[i];\n        offset += indent.length + content.length + 1;\n        const crlf = content[content.length - 1] === '\\r';\n        if (crlf)\n            content = content.slice(0, -1);\n        /* istanbul ignore if already caught in lexer */\n        if (content && indent.length < trimIndent) {\n            const src = header.indent\n                ? 'explicit indentation indicator'\n                : 'first line';\n            const message = `Block scalar lines must not be less indented than their ${src}`;\n            onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n            indent = '';\n        }\n        if (type === Scalar.BLOCK_LITERAL) {\n            value += sep + indent.slice(trimIndent) + content;\n            sep = '\\n';\n        }\n        else if (indent.length > trimIndent || content[0] === '\\t') {\n            // more-indented content within a folded block\n            if (sep === ' ')\n                sep = '\\n';\n            else if (!prevMoreIndented && sep === '\\n')\n                sep = '\\n\\n';\n            value += sep + indent.slice(trimIndent) + content;\n            sep = '\\n';\n            prevMoreIndented = true;\n        }\n        else if (content === '') {\n            // empty line\n            if (sep === '\\n')\n                value += '\\n';\n            else\n                sep = '\\n';\n        }\n        else {\n            value += sep + content;\n            sep = ' ';\n            prevMoreIndented = false;\n        }\n    }\n    switch (header.chomp) {\n        case '-':\n            break;\n        case '+':\n            for (let i = chompStart; i < lines.length; ++i)\n                value += '\\n' + lines[i][0].slice(trimIndent);\n            if (value[value.length - 1] !== '\\n')\n                value += '\\n';\n            break;\n        default:\n            value += '\\n';\n    }\n    const end = start + header.length + scalar.source.length;\n    return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n    /* istanbul ignore if should not happen */\n    if (props[0].type !== 'block-scalar-header') {\n        onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n        return null;\n    }\n    const { source } = props[0];\n    const mode = source[0];\n    let indent = 0;\n    let chomp = '';\n    let error = -1;\n    for (let i = 1; i < source.length; ++i) {\n        const ch = source[i];\n        if (!chomp && (ch === '-' || ch === '+'))\n            chomp = ch;\n        else {\n            const n = Number(ch);\n            if (!indent && n)\n                indent = n;\n            else if (error === -1)\n                error = offset + i;\n        }\n    }\n    if (error !== -1)\n        onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n    let hasSpace = false;\n    let comment = '';\n    let length = source.length;\n    for (let i = 1; i < props.length; ++i) {\n        const token = props[i];\n        switch (token.type) {\n            case 'space':\n                hasSpace = true;\n            // fallthrough\n            case 'newline':\n                length += token.source.length;\n                break;\n            case 'comment':\n                if (strict && !hasSpace) {\n                    const message = 'Comments must be separated from other tokens by white space characters';\n                    onError(token, 'MISSING_CHAR', message);\n                }\n                length += token.source.length;\n                comment = token.source.substring(1);\n                break;\n            case 'error':\n                onError(token, 'UNEXPECTED_TOKEN', token.message);\n                length += token.source.length;\n                break;\n            /* istanbul ignore next should not happen */\n            default: {\n                const message = `Unexpected token in block scalar header: ${token.type}`;\n                onError(token, 'UNEXPECTED_TOKEN', message);\n                const ts = token.source;\n                if (ts && typeof ts === 'string')\n                    length += ts.length;\n            }\n        }\n    }\n    return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n    const split = source.split(/\\n( *)/);\n    const first = split[0];\n    const m = first.match(/^( *)/);\n    const line0 = m?.[1]\n        ? [m[1], first.slice(m[1].length)]\n        : ['', first];\n    const lines = [line0];\n    for (let i = 1; i < split.length; i += 2)\n        lines.push([split[i], split[i + 1]]);\n    return lines;\n}\n\nexport { resolveBlockScalar };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n    const { offset, type, source, end } = scalar;\n    let _type;\n    let value;\n    const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n    switch (type) {\n        case 'scalar':\n            _type = Scalar.PLAIN;\n            value = plainValue(source, _onError);\n            break;\n        case 'single-quoted-scalar':\n            _type = Scalar.QUOTE_SINGLE;\n            value = singleQuotedValue(source, _onError);\n            break;\n        case 'double-quoted-scalar':\n            _type = Scalar.QUOTE_DOUBLE;\n            value = doubleQuotedValue(source, _onError);\n            break;\n        /* istanbul ignore next should not happen */\n        default:\n            onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n            return {\n                value: '',\n                type: null,\n                comment: '',\n                range: [offset, offset + source.length, offset + source.length]\n            };\n    }\n    const valueEnd = offset + source.length;\n    const re = resolveEnd(end, valueEnd, strict, onError);\n    return {\n        value,\n        type: _type,\n        comment: re.comment,\n        range: [offset, valueEnd, re.offset]\n    };\n}\nfunction plainValue(source, onError) {\n    let badChar = '';\n    switch (source[0]) {\n        /* istanbul ignore next should not happen */\n        case '\\t':\n            badChar = 'a tab character';\n            break;\n        case ',':\n            badChar = 'flow indicator character ,';\n            break;\n        case '%':\n            badChar = 'directive indicator character %';\n            break;\n        case '|':\n        case '>': {\n            badChar = `block scalar indicator ${source[0]}`;\n            break;\n        }\n        case '@':\n        case '`': {\n            badChar = `reserved character ${source[0]}`;\n            break;\n        }\n    }\n    if (badChar)\n        onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n    return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n    if (source[source.length - 1] !== \"'\" || source.length === 1)\n        onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n    return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n    /**\n     * The negative lookbehind here and in the `re` RegExp is to\n     * prevent causing a polynomial search time in certain cases.\n     *\n     * The try-catch is for Safari, which doesn't support this yet:\n     * https://caniuse.com/js-regexp-lookbehind\n     */\n    let first, line;\n    try {\n        first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n        line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n    }\n    catch {\n        first = /(.*?)[ \\t]*\\r?\\n/sy;\n        line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n    }\n    let match = first.exec(source);\n    if (!match)\n        return source;\n    let res = match[1];\n    let sep = ' ';\n    let pos = first.lastIndex;\n    line.lastIndex = pos;\n    while ((match = line.exec(source))) {\n        if (match[1] === '') {\n            if (sep === '\\n')\n                res += sep;\n            else\n                sep = '\\n';\n        }\n        else {\n            res += sep + match[1];\n            sep = ' ';\n        }\n        pos = line.lastIndex;\n    }\n    const last = /[ \\t]*(.*)/sy;\n    last.lastIndex = pos;\n    match = last.exec(source);\n    return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n    let res = '';\n    for (let i = 1; i < source.length - 1; ++i) {\n        const ch = source[i];\n        if (ch === '\\r' && source[i + 1] === '\\n')\n            continue;\n        if (ch === '\\n') {\n            const { fold, offset } = foldNewline(source, i);\n            res += fold;\n            i = offset;\n        }\n        else if (ch === '\\\\') {\n            let next = source[++i];\n            const cc = escapeCodes[next];\n            if (cc)\n                res += cc;\n            else if (next === '\\n') {\n                // skip escaped newlines, but still trim the following line\n                next = source[i + 1];\n                while (next === ' ' || next === '\\t')\n                    next = source[++i + 1];\n            }\n            else if (next === '\\r' && source[i + 1] === '\\n') {\n                // skip escaped CRLF newlines, but still trim the following line\n                next = source[++i + 1];\n                while (next === ' ' || next === '\\t')\n                    next = source[++i + 1];\n            }\n            else if (next === 'x' || next === 'u' || next === 'U') {\n                const length = { x: 2, u: 4, U: 8 }[next];\n                res += parseCharCode(source, i + 1, length, onError);\n                i += length;\n            }\n            else {\n                const raw = source.substr(i - 1, 2);\n                onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n                res += raw;\n            }\n        }\n        else if (ch === ' ' || ch === '\\t') {\n            // trim trailing whitespace\n            const wsStart = i;\n            let next = source[i + 1];\n            while (next === ' ' || next === '\\t')\n                next = source[++i + 1];\n            if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n                res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n        }\n        else {\n            res += ch;\n        }\n    }\n    if (source[source.length - 1] !== '\"' || source.length === 1)\n        onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n    return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n    let fold = '';\n    let ch = source[offset + 1];\n    while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n        if (ch === '\\r' && source[offset + 2] !== '\\n')\n            break;\n        if (ch === '\\n')\n            fold += '\\n';\n        offset += 1;\n        ch = source[offset + 1];\n    }\n    if (!fold)\n        fold = ' ';\n    return { fold, offset };\n}\nconst escapeCodes = {\n    '0': '\\0', // null character\n    a: '\\x07', // bell character\n    b: '\\b', // backspace\n    e: '\\x1b', // escape character\n    f: '\\f', // form feed\n    n: '\\n', // line feed\n    r: '\\r', // carriage return\n    t: '\\t', // horizontal tab\n    v: '\\v', // vertical tab\n    N: '\\u0085', // Unicode next line\n    _: '\\u00a0', // Unicode non-breaking space\n    L: '\\u2028', // Unicode line separator\n    P: '\\u2029', // Unicode paragraph separator\n    ' ': ' ',\n    '\"': '\"',\n    '/': '/',\n    '\\\\': '\\\\',\n    '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n    const cc = source.substr(offset, length);\n    const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n    const code = ok ? parseInt(cc, 16) : NaN;\n    if (isNaN(code)) {\n        const raw = source.substr(offset - 2, length + 2);\n        onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n        return raw;\n    }\n    return String.fromCodePoint(code);\n}\n\nexport { resolveFlowScalar };\n","import { isScalar, SCALAR } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { resolveBlockScalar } from './resolve-block-scalar.js';\nimport { resolveFlowScalar } from './resolve-flow-scalar.js';\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n    const { value, type, comment, range } = token.type === 'block-scalar'\n        ? resolveBlockScalar(ctx, token, onError)\n        : resolveFlowScalar(token, ctx.options.strict, onError);\n    const tagName = tagToken\n        ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n        : null;\n    let tag;\n    if (ctx.options.stringKeys && ctx.atKey) {\n        tag = ctx.schema[SCALAR];\n    }\n    else if (tagName)\n        tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n    else if (token.type === 'scalar')\n        tag = findScalarTagByTest(ctx, value, token, onError);\n    else\n        tag = ctx.schema[SCALAR];\n    let scalar;\n    try {\n        const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n        scalar = isScalar(res) ? res : new Scalar(res);\n    }\n    catch (error) {\n        const msg = error instanceof Error ? error.message : String(error);\n        onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n        scalar = new Scalar(value);\n    }\n    scalar.range = range;\n    scalar.source = value;\n    if (type)\n        scalar.type = type;\n    if (tagName)\n        scalar.tag = tagName;\n    if (tag.format)\n        scalar.format = tag.format;\n    if (comment)\n        scalar.comment = comment;\n    return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n    if (tagName === '!')\n        return schema[SCALAR]; // non-specific tag\n    const matchWithTest = [];\n    for (const tag of schema.tags) {\n        if (!tag.collection && tag.tag === tagName) {\n            if (tag.default && tag.test)\n                matchWithTest.push(tag);\n            else\n                return tag;\n        }\n    }\n    for (const tag of matchWithTest)\n        if (tag.test?.test(value))\n            return tag;\n    const kt = schema.knownTags[tagName];\n    if (kt && !kt.collection) {\n        // Ensure that the known tag is available for stringifying,\n        // but does not get used by default.\n        schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n        return kt;\n    }\n    onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n    return schema[SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n    const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n        tag.test?.test(value)) || schema[SCALAR];\n    if (schema.compat) {\n        const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n            schema[SCALAR];\n        if (tag.tag !== compat.tag) {\n            const ts = directives.tagString(tag.tag);\n            const cs = directives.tagString(compat.tag);\n            const msg = `Value may be parsed as either ${ts} or ${cs}`;\n            onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n        }\n    }\n    return tag;\n}\n\nexport { composeScalar };\n","function emptyScalarPosition(offset, before, pos) {\n    if (before) {\n        if (pos === null)\n            pos = before.length;\n        for (let i = pos - 1; i >= 0; --i) {\n            let st = before[i];\n            switch (st.type) {\n                case 'space':\n                case 'comment':\n                case 'newline':\n                    offset -= st.source.length;\n                    continue;\n            }\n            // Technically, an empty scalar is immediately after the last non-empty\n            // node, but it's more useful to place it after any whitespace.\n            st = before[++i];\n            while (st?.type === 'space') {\n                offset += st.source.length;\n                st = before[++i];\n            }\n            break;\n        }\n    }\n    return offset;\n}\n\nexport { emptyScalarPosition };\n","import { Alias } from '../nodes/Alias.js';\nimport { isScalar } from '../nodes/identity.js';\nimport { composeCollection } from './compose-collection.js';\nimport { composeScalar } from './compose-scalar.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { emptyScalarPosition } from './util-empty-scalar-position.js';\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n    const atKey = ctx.atKey;\n    const { spaceBefore, comment, anchor, tag } = props;\n    let node;\n    let isSrcToken = true;\n    switch (token.type) {\n        case 'alias':\n            node = composeAlias(ctx, token, onError);\n            if (anchor || tag)\n                onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n            break;\n        case 'scalar':\n        case 'single-quoted-scalar':\n        case 'double-quoted-scalar':\n        case 'block-scalar':\n            node = composeScalar(ctx, token, tag, onError);\n            if (anchor)\n                node.anchor = anchor.source.substring(1);\n            break;\n        case 'block-map':\n        case 'block-seq':\n        case 'flow-collection':\n            node = composeCollection(CN, ctx, token, props, onError);\n            if (anchor)\n                node.anchor = anchor.source.substring(1);\n            break;\n        default: {\n            const message = token.type === 'error'\n                ? token.message\n                : `Unsupported token (type: ${token.type})`;\n            onError(token, 'UNEXPECTED_TOKEN', message);\n            node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);\n            isSrcToken = false;\n        }\n    }\n    if (anchor && node.anchor === '')\n        onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n    if (atKey &&\n        ctx.options.stringKeys &&\n        (!isScalar(node) ||\n            typeof node.value !== 'string' ||\n            (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n        const msg = 'With stringKeys, all keys must be strings';\n        onError(tag ?? token, 'NON_STRING_KEY', msg);\n    }\n    if (spaceBefore)\n        node.spaceBefore = true;\n    if (comment) {\n        if (token.type === 'scalar' && token.source === '')\n            node.comment = comment;\n        else\n            node.commentBefore = comment;\n    }\n    // @ts-expect-error Type checking misses meaning of isSrcToken\n    if (ctx.options.keepSourceTokens && isSrcToken)\n        node.srcToken = token;\n    return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n    const token = {\n        type: 'scalar',\n        offset: emptyScalarPosition(offset, before, pos),\n        indent: -1,\n        source: ''\n    };\n    const node = composeScalar(ctx, token, tag, onError);\n    if (anchor) {\n        node.anchor = anchor.source.substring(1);\n        if (node.anchor === '')\n            onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n    }\n    if (spaceBefore)\n        node.spaceBefore = true;\n    if (comment) {\n        node.comment = comment;\n        node.range[2] = end;\n    }\n    return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n    const alias = new Alias(source.substring(1));\n    if (alias.source === '')\n        onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n    if (alias.source.endsWith(':'))\n        onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n    const valueEnd = offset + source.length;\n    const re = resolveEnd(end, valueEnd, options.strict, onError);\n    alias.range = [offset, valueEnd, re.offset];\n    if (re.comment)\n        alias.comment = re.comment;\n    return alias;\n}\n\nexport { composeEmptyNode, composeNode };\n","import { Document } from '../doc/Document.js';\nimport { composeNode, composeEmptyNode } from './compose-node.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n    const opts = Object.assign({ _directives: directives }, options);\n    const doc = new Document(undefined, opts);\n    const ctx = {\n        atKey: false,\n        atRoot: true,\n        directives: doc.directives,\n        options: doc.options,\n        schema: doc.schema\n    };\n    const props = resolveProps(start, {\n        indicator: 'doc-start',\n        next: value ?? end?.[0],\n        offset,\n        onError,\n        parentIndent: 0,\n        startOnNewline: true\n    });\n    if (props.found) {\n        doc.directives.docStart = true;\n        if (value &&\n            (value.type === 'block-map' || value.type === 'block-seq') &&\n            !props.hasNewline)\n            onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n    }\n    // @ts-expect-error If Contents is set, let's trust the user\n    doc.contents = value\n        ? composeNode(ctx, value, props, onError)\n        : composeEmptyNode(ctx, props.end, start, null, props, onError);\n    const contentEnd = doc.contents.range[2];\n    const re = resolveEnd(end, contentEnd, false, onError);\n    if (re.comment)\n        doc.comment = re.comment;\n    doc.range = [offset, contentEnd, re.offset];\n    return doc;\n}\n\nexport { composeDoc };\n","import { Directives } from '../doc/directives.js';\nimport { Document } from '../doc/Document.js';\nimport { YAMLWarning, YAMLParseError } from '../errors.js';\nimport { isCollection, isPair } from '../nodes/identity.js';\nimport { composeDoc } from './compose-doc.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction getErrorPos(src) {\n    if (typeof src === 'number')\n        return [src, src + 1];\n    if (Array.isArray(src))\n        return src.length === 2 ? src : [src[0], src[1]];\n    const { offset, source } = src;\n    return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n    let comment = '';\n    let atComment = false;\n    let afterEmptyLine = false;\n    for (let i = 0; i < prelude.length; ++i) {\n        const source = prelude[i];\n        switch (source[0]) {\n            case '#':\n                comment +=\n                    (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n                        (source.substring(1) || ' ');\n                atComment = true;\n                afterEmptyLine = false;\n                break;\n            case '%':\n                if (prelude[i + 1]?.[0] !== '#')\n                    i += 1;\n                atComment = false;\n                break;\n            default:\n                // This may be wrong after doc-end, but in that case it doesn't matter\n                if (!atComment)\n                    afterEmptyLine = true;\n                atComment = false;\n        }\n    }\n    return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n    constructor(options = {}) {\n        this.doc = null;\n        this.atDirectives = false;\n        this.prelude = [];\n        this.errors = [];\n        this.warnings = [];\n        this.onError = (source, code, message, warning) => {\n            const pos = getErrorPos(source);\n            if (warning)\n                this.warnings.push(new YAMLWarning(pos, code, message));\n            else\n                this.errors.push(new YAMLParseError(pos, code, message));\n        };\n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        this.directives = new Directives({ version: options.version || '1.2' });\n        this.options = options;\n    }\n    decorate(doc, afterDoc) {\n        const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n        //console.log({ dc: doc.comment, prelude, comment })\n        if (comment) {\n            const dc = doc.contents;\n            if (afterDoc) {\n                doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n            }\n            else if (afterEmptyLine || doc.directives.docStart || !dc) {\n                doc.commentBefore = comment;\n            }\n            else if (isCollection(dc) && !dc.flow && dc.items.length > 0) {\n                let it = dc.items[0];\n                if (isPair(it))\n                    it = it.key;\n                const cb = it.commentBefore;\n                it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n            }\n            else {\n                const cb = dc.commentBefore;\n                dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n            }\n        }\n        if (afterDoc) {\n            Array.prototype.push.apply(doc.errors, this.errors);\n            Array.prototype.push.apply(doc.warnings, this.warnings);\n        }\n        else {\n            doc.errors = this.errors;\n            doc.warnings = this.warnings;\n        }\n        this.prelude = [];\n        this.errors = [];\n        this.warnings = [];\n    }\n    /**\n     * Current stream status information.\n     *\n     * Mostly useful at the end of input for an empty stream.\n     */\n    streamInfo() {\n        return {\n            comment: parsePrelude(this.prelude).comment,\n            directives: this.directives,\n            errors: this.errors,\n            warnings: this.warnings\n        };\n    }\n    /**\n     * Compose tokens into documents.\n     *\n     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n     */\n    *compose(tokens, forceDoc = false, endOffset = -1) {\n        for (const token of tokens)\n            yield* this.next(token);\n        yield* this.end(forceDoc, endOffset);\n    }\n    /** Advance the composer by one CST token. */\n    *next(token) {\n        switch (token.type) {\n            case 'directive':\n                this.directives.add(token.source, (offset, message, warning) => {\n                    const pos = getErrorPos(token);\n                    pos[0] += offset;\n                    this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n                });\n                this.prelude.push(token.source);\n                this.atDirectives = true;\n                break;\n            case 'document': {\n                const doc = composeDoc(this.options, this.directives, token, this.onError);\n                if (this.atDirectives && !doc.directives.docStart)\n                    this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n                this.decorate(doc, false);\n                if (this.doc)\n                    yield this.doc;\n                this.doc = doc;\n                this.atDirectives = false;\n                break;\n            }\n            case 'byte-order-mark':\n            case 'space':\n                break;\n            case 'comment':\n            case 'newline':\n                this.prelude.push(token.source);\n                break;\n            case 'error': {\n                const msg = token.source\n                    ? `${token.message}: ${JSON.stringify(token.source)}`\n                    : token.message;\n                const error = new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n                if (this.atDirectives || !this.doc)\n                    this.errors.push(error);\n                else\n                    this.doc.errors.push(error);\n                break;\n            }\n            case 'doc-end': {\n                if (!this.doc) {\n                    const msg = 'Unexpected doc-end without preceding document';\n                    this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n                    break;\n                }\n                this.doc.directives.docEnd = true;\n                const end = resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n                this.decorate(this.doc, true);\n                if (end.comment) {\n                    const dc = this.doc.comment;\n                    this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n                }\n                this.doc.range[2] = end.offset;\n                break;\n            }\n            default:\n                this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n        }\n    }\n    /**\n     * Call at end of input to yield any remaining document.\n     *\n     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n     */\n    *end(forceDoc = false, endOffset = -1) {\n        if (this.doc) {\n            this.decorate(this.doc, true);\n            yield this.doc;\n            this.doc = null;\n        }\n        else if (forceDoc) {\n            const opts = Object.assign({ _directives: this.directives }, this.options);\n            const doc = new Document(undefined, opts);\n            if (this.atDirectives)\n                this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n            doc.range = [0, endOffset, endOffset];\n            this.decorate(doc, false);\n            yield doc;\n        }\n    }\n}\n\nexport { Composer };\n","import { resolveBlockScalar } from '../compose/resolve-block-scalar.js';\nimport { resolveFlowScalar } from '../compose/resolve-flow-scalar.js';\nimport { YAMLParseError } from '../errors.js';\nimport { stringifyString } from '../stringify/stringifyString.js';\n\nfunction resolveAsScalar(token, strict = true, onError) {\n    if (token) {\n        const _onError = (pos, code, message) => {\n            const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;\n            if (onError)\n                onError(offset, code, message);\n            else\n                throw new YAMLParseError([offset, offset + 1], code, message);\n        };\n        switch (token.type) {\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return resolveFlowScalar(token, strict, _onError);\n            case 'block-scalar':\n                return resolveBlockScalar({ options: { strict } }, token, _onError);\n        }\n    }\n    return null;\n}\n/**\n * Create a new scalar token with `value`\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.indent The indent level of the token.\n * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.\n * @param context.offset The offset position of the token.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction createScalarToken(value, context) {\n    const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;\n    const source = stringifyString({ type, value }, {\n        implicitKey,\n        indent: indent > 0 ? ' '.repeat(indent) : '',\n        inFlow,\n        options: { blockQuote: true, lineWidth: -1 }\n    });\n    const end = context.end ?? [\n        { type: 'newline', offset: -1, indent, source: '\\n' }\n    ];\n    switch (source[0]) {\n        case '|':\n        case '>': {\n            const he = source.indexOf('\\n');\n            const head = source.substring(0, he);\n            const body = source.substring(he + 1) + '\\n';\n            const props = [\n                { type: 'block-scalar-header', offset, indent, source: head }\n            ];\n            if (!addEndtoBlockProps(props, end))\n                props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n            return { type: 'block-scalar', offset, indent, props, source: body };\n        }\n        case '\"':\n            return { type: 'double-quoted-scalar', offset, indent, source, end };\n        case \"'\":\n            return { type: 'single-quoted-scalar', offset, indent, source, end };\n        default:\n            return { type: 'scalar', offset, indent, source, end };\n    }\n}\n/**\n * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.\n *\n * Best efforts are made to retain any comments previously associated with the `token`,\n * though all contents within a collection's `items` will be overwritten.\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.afterKey In most cases, values after a key should have an additional level of indentation.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction setScalarValue(token, value, context = {}) {\n    let { afterKey = false, implicitKey = false, inFlow = false, type } = context;\n    let indent = 'indent' in token ? token.indent : null;\n    if (afterKey && typeof indent === 'number')\n        indent += 2;\n    if (!type)\n        switch (token.type) {\n            case 'single-quoted-scalar':\n                type = 'QUOTE_SINGLE';\n                break;\n            case 'double-quoted-scalar':\n                type = 'QUOTE_DOUBLE';\n                break;\n            case 'block-scalar': {\n                const header = token.props[0];\n                if (header.type !== 'block-scalar-header')\n                    throw new Error('Invalid block scalar header');\n                type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';\n                break;\n            }\n            default:\n                type = 'PLAIN';\n        }\n    const source = stringifyString({ type, value }, {\n        implicitKey: implicitKey || indent === null,\n        indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',\n        inFlow,\n        options: { blockQuote: true, lineWidth: -1 }\n    });\n    switch (source[0]) {\n        case '|':\n        case '>':\n            setBlockScalarValue(token, source);\n            break;\n        case '\"':\n            setFlowScalarValue(token, source, 'double-quoted-scalar');\n            break;\n        case \"'\":\n            setFlowScalarValue(token, source, 'single-quoted-scalar');\n            break;\n        default:\n            setFlowScalarValue(token, source, 'scalar');\n    }\n}\nfunction setBlockScalarValue(token, source) {\n    const he = source.indexOf('\\n');\n    const head = source.substring(0, he);\n    const body = source.substring(he + 1) + '\\n';\n    if (token.type === 'block-scalar') {\n        const header = token.props[0];\n        if (header.type !== 'block-scalar-header')\n            throw new Error('Invalid block scalar header');\n        header.source = head;\n        token.source = body;\n    }\n    else {\n        const { offset } = token;\n        const indent = 'indent' in token ? token.indent : -1;\n        const props = [\n            { type: 'block-scalar-header', offset, indent, source: head }\n        ];\n        if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))\n            props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n        for (const key of Object.keys(token))\n            if (key !== 'type' && key !== 'offset')\n                delete token[key];\n        Object.assign(token, { type: 'block-scalar', indent, props, source: body });\n    }\n}\n/** @returns `true` if last token is a newline */\nfunction addEndtoBlockProps(props, end) {\n    if (end)\n        for (const st of end)\n            switch (st.type) {\n                case 'space':\n                case 'comment':\n                    props.push(st);\n                    break;\n                case 'newline':\n                    props.push(st);\n                    return true;\n            }\n    return false;\n}\nfunction setFlowScalarValue(token, source, type) {\n    switch (token.type) {\n        case 'scalar':\n        case 'double-quoted-scalar':\n        case 'single-quoted-scalar':\n            token.type = type;\n            token.source = source;\n            break;\n        case 'block-scalar': {\n            const end = token.props.slice(1);\n            let oa = source.length;\n            if (token.props[0].type === 'block-scalar-header')\n                oa -= token.props[0].source.length;\n            for (const tok of end)\n                tok.offset += oa;\n            delete token.props;\n            Object.assign(token, { type, source, end });\n            break;\n        }\n        case 'block-map':\n        case 'block-seq': {\n            const offset = token.offset + source.length;\n            const nl = { type: 'newline', offset, indent: token.indent, source: '\\n' };\n            delete token.items;\n            Object.assign(token, { type, source, end: [nl] });\n            break;\n        }\n        default: {\n            const indent = 'indent' in token ? token.indent : -1;\n            const end = 'end' in token && Array.isArray(token.end)\n                ? token.end.filter(st => st.type === 'space' ||\n                    st.type === 'comment' ||\n                    st.type === 'newline')\n                : [];\n            for (const key of Object.keys(token))\n                if (key !== 'type' && key !== 'offset')\n                    delete token[key];\n            Object.assign(token, { type, indent, source, end });\n        }\n    }\n}\n\nexport { createScalarToken, resolveAsScalar, setScalarValue };\n","/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n    switch (token.type) {\n        case 'block-scalar': {\n            let res = '';\n            for (const tok of token.props)\n                res += stringifyToken(tok);\n            return res + token.source;\n        }\n        case 'block-map':\n        case 'block-seq': {\n            let res = '';\n            for (const item of token.items)\n                res += stringifyItem(item);\n            return res;\n        }\n        case 'flow-collection': {\n            let res = token.start.source;\n            for (const item of token.items)\n                res += stringifyItem(item);\n            for (const st of token.end)\n                res += st.source;\n            return res;\n        }\n        case 'document': {\n            let res = stringifyItem(token);\n            if (token.end)\n                for (const st of token.end)\n                    res += st.source;\n            return res;\n        }\n        default: {\n            let res = token.source;\n            if ('end' in token && token.end)\n                for (const st of token.end)\n                    res += st.source;\n            return res;\n        }\n    }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n    let res = '';\n    for (const st of start)\n        res += st.source;\n    if (key)\n        res += stringifyToken(key);\n    if (sep)\n        for (const st of sep)\n            res += st.source;\n    if (value)\n        res += stringifyToken(value);\n    return res;\n}\n\nexport { stringify };\n","const BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n *   - `item`: The current item, which included the following members:\n *     - `start: SourceToken[]` – Source tokens before the key or value,\n *       possibly including its anchor or tag.\n *     - `key?: Token | null` – Set for pair values. May then be `null`, if\n *       the key before the `:` separator is empty.\n *     - `sep?: SourceToken[]` – Source tokens between the key and the value,\n *       which should include the `:` map value indicator if `value` is set.\n *     - `value?: Token` – The value of a sequence item, or of a map pair.\n *   - `path`: The steps from the root to the current node, as an array of\n *     `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this token, continue with\n *      next sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current item, then continue with the next one\n *   - `number`: Set the index of the next step. This is useful especially if\n *     the index of the current token has changed.\n *   - `function`: Define the next visitor for this item. After the original\n *     visitor is called on item entry, next visitors are called after handling\n *     a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n    if ('type' in cst && cst.type === 'document')\n        cst = { start: cst.start, value: cst.value };\n    _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n    let item = cst;\n    for (const [field, index] of path) {\n        const tok = item?.[field];\n        if (tok && 'items' in tok) {\n            item = tok.items[index];\n        }\n        else\n            return undefined;\n    }\n    return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n    const parent = visit.itemAtPath(cst, path.slice(0, -1));\n    const field = path[path.length - 1][0];\n    const coll = parent?.[field];\n    if (coll && 'items' in coll)\n        return coll;\n    throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n    let ctrl = visitor(item, path);\n    if (typeof ctrl === 'symbol')\n        return ctrl;\n    for (const field of ['key', 'value']) {\n        const token = item[field];\n        if (token && 'items' in token) {\n            for (let i = 0; i < token.items.length; ++i) {\n                const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    token.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n            if (typeof ctrl === 'function' && field === 'key')\n                ctrl = ctrl(item, path);\n        }\n    }\n    return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexport { visit };\n","export { createScalarToken, resolveAsScalar, setScalarValue } from './cst-scalar.js';\nexport { stringify } from './cst-stringify.js';\nexport { visit } from './cst-visit.js';\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n    (token.type === 'scalar' ||\n        token.type === 'single-quoted-scalar' ||\n        token.type === 'double-quoted-scalar' ||\n        token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n    switch (token) {\n        case BOM:\n            return '<BOM>';\n        case DOCUMENT:\n            return '<DOC>';\n        case FLOW_END:\n            return '<FLOW_END>';\n        case SCALAR:\n            return '<SCALAR>';\n        default:\n            return JSON.stringify(token);\n    }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n    switch (source) {\n        case BOM:\n            return 'byte-order-mark';\n        case DOCUMENT:\n            return 'doc-mode';\n        case FLOW_END:\n            return 'flow-error-end';\n        case SCALAR:\n            return 'scalar';\n        case '---':\n            return 'doc-start';\n        case '...':\n            return 'doc-end';\n        case '':\n        case '\\n':\n        case '\\r\\n':\n            return 'newline';\n        case '-':\n            return 'seq-item-ind';\n        case '?':\n            return 'explicit-key-ind';\n        case ':':\n            return 'map-value-ind';\n        case '{':\n            return 'flow-map-start';\n        case '}':\n            return 'flow-map-end';\n        case '[':\n            return 'flow-seq-start';\n        case ']':\n            return 'flow-seq-end';\n        case ',':\n            return 'comma';\n    }\n    switch (source[0]) {\n        case ' ':\n        case '\\t':\n            return 'space';\n        case '#':\n            return 'comment';\n        case '%':\n            return 'directive-line';\n        case '*':\n            return 'alias';\n        case '&':\n            return 'anchor';\n        case '!':\n            return 'tag';\n        case \"'\":\n            return 'single-quoted-scalar';\n        case '\"':\n            return 'double-quoted-scalar';\n        case '|':\n        case '>':\n            return 'block-scalar-header';\n    }\n    return null;\n}\n\nexport { BOM, DOCUMENT, FLOW_END, SCALAR, isCollection, isScalar, prettyToken, tokenType };\n","import { BOM, DOCUMENT, FLOW_END, SCALAR } from './cst.js';\n\n/*\nSTART -> stream\n\nstream\n  directive -> line-end -> stream\n  indent + line-end -> stream\n  [else] -> line-start\n\nline-end\n  comment -> line-end\n  newline -> .\n  input-end -> END\n\nline-start\n  doc-start -> doc\n  doc-end -> stream\n  [else] -> indent -> block-start\n\nblock-start\n  seq-item-start -> block-start\n  explicit-key-start -> block-start\n  map-value-start -> block-start\n  [else] -> doc\n\ndoc\n  line-end -> line-start\n  spaces -> doc\n  anchor -> doc\n  tag -> doc\n  flow-start -> flow -> doc\n  flow-end -> error -> doc\n  seq-item-start -> error -> doc\n  explicit-key-start -> error -> doc\n  map-value-start -> doc\n  alias -> doc\n  quote-start -> quoted-scalar -> doc\n  block-scalar-header -> line-end -> block-scalar(min) -> line-start\n  [else] -> plain-scalar(false, min) -> doc\n\nflow\n  line-end -> flow\n  spaces -> flow\n  anchor -> flow\n  tag -> flow\n  flow-start -> flow -> flow\n  flow-end -> .\n  seq-item-start -> error -> flow\n  explicit-key-start -> flow\n  map-value-start -> flow\n  alias -> flow\n  quote-start -> quoted-scalar -> flow\n  comma -> flow\n  [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n  quote-end -> .\n  [else] -> quoted-scalar\n\nblock-scalar(min)\n  newline + peek(indent < min) -> .\n  [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n  scalar-end(is-flow) -> .\n  peek(newline + (indent < min)) -> .\n  [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n    switch (ch) {\n        case undefined:\n        case ' ':\n        case '\\n':\n        case '\\r':\n        case '\\t':\n            return true;\n        default:\n            return false;\n    }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n    constructor() {\n        /**\n         * Flag indicating whether the end of the current buffer marks the end of\n         * all input\n         */\n        this.atEnd = false;\n        /**\n         * Explicit indent set in block scalar header, as an offset from the current\n         * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n         * explicitly set.\n         */\n        this.blockScalarIndent = -1;\n        /**\n         * Block scalars that include a + (keep) chomping indicator in their header\n         * include trailing empty lines, which are otherwise excluded from the\n         * scalar's contents.\n         */\n        this.blockScalarKeep = false;\n        /** Current input */\n        this.buffer = '';\n        /**\n         * Flag noting whether the map value indicator : can immediately follow this\n         * node within a flow context.\n         */\n        this.flowKey = false;\n        /** Count of surrounding flow collection levels. */\n        this.flowLevel = 0;\n        /**\n         * Minimum level of indentation required for next lines to be parsed as a\n         * part of the current scalar value.\n         */\n        this.indentNext = 0;\n        /** Indentation level of the current line. */\n        this.indentValue = 0;\n        /** Position of the next \\n character. */\n        this.lineEndPos = null;\n        /** Stores the state of the lexer if reaching the end of incpomplete input */\n        this.next = null;\n        /** A pointer to `buffer`; the current position of the lexer. */\n        this.pos = 0;\n    }\n    /**\n     * Generate YAML tokens from the `source` string. If `incomplete`,\n     * a part of the last line may be left as a buffer for the next call.\n     *\n     * @returns A generator of lexical tokens\n     */\n    *lex(source, incomplete = false) {\n        if (source) {\n            if (typeof source !== 'string')\n                throw TypeError('source is not a string');\n            this.buffer = this.buffer ? this.buffer + source : source;\n            this.lineEndPos = null;\n        }\n        this.atEnd = !incomplete;\n        let next = this.next ?? 'stream';\n        while (next && (incomplete || this.hasChars(1)))\n            next = yield* this.parseNext(next);\n    }\n    atLineEnd() {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (ch === ' ' || ch === '\\t')\n            ch = this.buffer[++i];\n        if (!ch || ch === '#' || ch === '\\n')\n            return true;\n        if (ch === '\\r')\n            return this.buffer[i + 1] === '\\n';\n        return false;\n    }\n    charAt(n) {\n        return this.buffer[this.pos + n];\n    }\n    continueScalar(offset) {\n        let ch = this.buffer[offset];\n        if (this.indentNext > 0) {\n            let indent = 0;\n            while (ch === ' ')\n                ch = this.buffer[++indent + offset];\n            if (ch === '\\r') {\n                const next = this.buffer[indent + offset + 1];\n                if (next === '\\n' || (!next && !this.atEnd))\n                    return offset + indent + 1;\n            }\n            return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n                ? offset + indent\n                : -1;\n        }\n        if (ch === '-' || ch === '.') {\n            const dt = this.buffer.substr(offset, 3);\n            if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n                return -1;\n        }\n        return offset;\n    }\n    getLine() {\n        let end = this.lineEndPos;\n        if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n            end = this.buffer.indexOf('\\n', this.pos);\n            this.lineEndPos = end;\n        }\n        if (end === -1)\n            return this.atEnd ? this.buffer.substring(this.pos) : null;\n        if (this.buffer[end - 1] === '\\r')\n            end -= 1;\n        return this.buffer.substring(this.pos, end);\n    }\n    hasChars(n) {\n        return this.pos + n <= this.buffer.length;\n    }\n    setNext(state) {\n        this.buffer = this.buffer.substring(this.pos);\n        this.pos = 0;\n        this.lineEndPos = null;\n        this.next = state;\n        return null;\n    }\n    peek(n) {\n        return this.buffer.substr(this.pos, n);\n    }\n    *parseNext(next) {\n        switch (next) {\n            case 'stream':\n                return yield* this.parseStream();\n            case 'line-start':\n                return yield* this.parseLineStart();\n            case 'block-start':\n                return yield* this.parseBlockStart();\n            case 'doc':\n                return yield* this.parseDocument();\n            case 'flow':\n                return yield* this.parseFlowCollection();\n            case 'quoted-scalar':\n                return yield* this.parseQuotedScalar();\n            case 'block-scalar':\n                return yield* this.parseBlockScalar();\n            case 'plain-scalar':\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseStream() {\n        let line = this.getLine();\n        if (line === null)\n            return this.setNext('stream');\n        if (line[0] === BOM) {\n            yield* this.pushCount(1);\n            line = line.substring(1);\n        }\n        if (line[0] === '%') {\n            let dirEnd = line.length;\n            let cs = line.indexOf('#');\n            while (cs !== -1) {\n                const ch = line[cs - 1];\n                if (ch === ' ' || ch === '\\t') {\n                    dirEnd = cs - 1;\n                    break;\n                }\n                else {\n                    cs = line.indexOf('#', cs + 1);\n                }\n            }\n            while (true) {\n                const ch = line[dirEnd - 1];\n                if (ch === ' ' || ch === '\\t')\n                    dirEnd -= 1;\n                else\n                    break;\n            }\n            const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n            yield* this.pushCount(line.length - n); // possible comment\n            this.pushNewline();\n            return 'stream';\n        }\n        if (this.atLineEnd()) {\n            const sp = yield* this.pushSpaces(true);\n            yield* this.pushCount(line.length - sp);\n            yield* this.pushNewline();\n            return 'stream';\n        }\n        yield DOCUMENT;\n        return yield* this.parseLineStart();\n    }\n    *parseLineStart() {\n        const ch = this.charAt(0);\n        if (!ch && !this.atEnd)\n            return this.setNext('line-start');\n        if (ch === '-' || ch === '.') {\n            if (!this.atEnd && !this.hasChars(4))\n                return this.setNext('line-start');\n            const s = this.peek(3);\n            if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n                yield* this.pushCount(3);\n                this.indentValue = 0;\n                this.indentNext = 0;\n                return s === '---' ? 'doc' : 'stream';\n            }\n        }\n        this.indentValue = yield* this.pushSpaces(false);\n        if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n            this.indentNext = this.indentValue;\n        return yield* this.parseBlockStart();\n    }\n    *parseBlockStart() {\n        const [ch0, ch1] = this.peek(2);\n        if (!ch1 && !this.atEnd)\n            return this.setNext('block-start');\n        if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n            const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n            this.indentNext = this.indentValue + 1;\n            this.indentValue += n;\n            return yield* this.parseBlockStart();\n        }\n        return 'doc';\n    }\n    *parseDocument() {\n        yield* this.pushSpaces(true);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('doc');\n        let n = yield* this.pushIndicators();\n        switch (line[n]) {\n            case '#':\n                yield* this.pushCount(line.length - n);\n            // fallthrough\n            case undefined:\n                yield* this.pushNewline();\n                return yield* this.parseLineStart();\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel = 1;\n                return 'flow';\n            case '}':\n            case ']':\n                // this is an error\n                yield* this.pushCount(1);\n                return 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'doc';\n            case '\"':\n            case \"'\":\n                return yield* this.parseQuotedScalar();\n            case '|':\n            case '>':\n                n += yield* this.parseBlockScalarHeader();\n                n += yield* this.pushSpaces(true);\n                yield* this.pushCount(line.length - n);\n                yield* this.pushNewline();\n                return yield* this.parseBlockScalar();\n            default:\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseFlowCollection() {\n        let nl, sp;\n        let indent = -1;\n        do {\n            nl = yield* this.pushNewline();\n            if (nl > 0) {\n                sp = yield* this.pushSpaces(false);\n                this.indentValue = indent = sp;\n            }\n            else {\n                sp = 0;\n            }\n            sp += yield* this.pushSpaces(true);\n        } while (nl + sp > 0);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('flow');\n        if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n            (indent === 0 &&\n                (line.startsWith('---') || line.startsWith('...')) &&\n                isEmpty(line[3]))) {\n            // Allowing for the terminal ] or } at the same (rather than greater)\n            // indent level as the initial [ or { is technically invalid, but\n            // failing here would be surprising to users.\n            const atFlowEndMarker = indent === this.indentNext - 1 &&\n                this.flowLevel === 1 &&\n                (line[0] === ']' || line[0] === '}');\n            if (!atFlowEndMarker) {\n                // this is an error\n                this.flowLevel = 0;\n                yield FLOW_END;\n                return yield* this.parseLineStart();\n            }\n        }\n        let n = 0;\n        while (line[n] === ',') {\n            n += yield* this.pushCount(1);\n            n += yield* this.pushSpaces(true);\n            this.flowKey = false;\n        }\n        n += yield* this.pushIndicators();\n        switch (line[n]) {\n            case undefined:\n                return 'flow';\n            case '#':\n                yield* this.pushCount(line.length - n);\n                return 'flow';\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel += 1;\n                return 'flow';\n            case '}':\n            case ']':\n                yield* this.pushCount(1);\n                this.flowKey = true;\n                this.flowLevel -= 1;\n                return this.flowLevel ? 'flow' : 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'flow';\n            case '\"':\n            case \"'\":\n                this.flowKey = true;\n                return yield* this.parseQuotedScalar();\n            case ':': {\n                const next = this.charAt(1);\n                if (this.flowKey || isEmpty(next) || next === ',') {\n                    this.flowKey = false;\n                    yield* this.pushCount(1);\n                    yield* this.pushSpaces(true);\n                    return 'flow';\n                }\n            }\n            // fallthrough\n            default:\n                this.flowKey = false;\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseQuotedScalar() {\n        const quote = this.charAt(0);\n        let end = this.buffer.indexOf(quote, this.pos + 1);\n        if (quote === \"'\") {\n            while (end !== -1 && this.buffer[end + 1] === \"'\")\n                end = this.buffer.indexOf(\"'\", end + 2);\n        }\n        else {\n            // double-quote\n            while (end !== -1) {\n                let n = 0;\n                while (this.buffer[end - 1 - n] === '\\\\')\n                    n += 1;\n                if (n % 2 === 0)\n                    break;\n                end = this.buffer.indexOf('\"', end + 1);\n            }\n        }\n        // Only looking for newlines within the quotes\n        const qb = this.buffer.substring(0, end);\n        let nl = qb.indexOf('\\n', this.pos);\n        if (nl !== -1) {\n            while (nl !== -1) {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = qb.indexOf('\\n', cs);\n            }\n            if (nl !== -1) {\n                // this is an error caused by an unexpected unindent\n                end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n            }\n        }\n        if (end === -1) {\n            if (!this.atEnd)\n                return this.setNext('quoted-scalar');\n            end = this.buffer.length;\n        }\n        yield* this.pushToIndex(end + 1, false);\n        return this.flowLevel ? 'flow' : 'doc';\n    }\n    *parseBlockScalarHeader() {\n        this.blockScalarIndent = -1;\n        this.blockScalarKeep = false;\n        let i = this.pos;\n        while (true) {\n            const ch = this.buffer[++i];\n            if (ch === '+')\n                this.blockScalarKeep = true;\n            else if (ch > '0' && ch <= '9')\n                this.blockScalarIndent = Number(ch) - 1;\n            else if (ch !== '-')\n                break;\n        }\n        return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n    }\n    *parseBlockScalar() {\n        let nl = this.pos - 1; // may be -1 if this.pos === 0\n        let indent = 0;\n        let ch;\n        loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n            switch (ch) {\n                case ' ':\n                    indent += 1;\n                    break;\n                case '\\n':\n                    nl = i;\n                    indent = 0;\n                    break;\n                case '\\r': {\n                    const next = this.buffer[i + 1];\n                    if (!next && !this.atEnd)\n                        return this.setNext('block-scalar');\n                    if (next === '\\n')\n                        break;\n                } // fallthrough\n                default:\n                    break loop;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('block-scalar');\n        if (indent >= this.indentNext) {\n            if (this.blockScalarIndent === -1)\n                this.indentNext = indent;\n            else {\n                this.indentNext =\n                    this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n            }\n            do {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = this.buffer.indexOf('\\n', cs);\n            } while (nl !== -1);\n            if (nl === -1) {\n                if (!this.atEnd)\n                    return this.setNext('block-scalar');\n                nl = this.buffer.length;\n            }\n        }\n        // Trailing insufficiently indented tabs are invalid.\n        // To catch that during parsing, we include them in the block scalar value.\n        let i = nl + 1;\n        ch = this.buffer[i];\n        while (ch === ' ')\n            ch = this.buffer[++i];\n        if (ch === '\\t') {\n            while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n                ch = this.buffer[++i];\n            nl = i - 1;\n        }\n        else if (!this.blockScalarKeep) {\n            do {\n                let i = nl - 1;\n                let ch = this.buffer[i];\n                if (ch === '\\r')\n                    ch = this.buffer[--i];\n                const lastChar = i; // Drop the line if last char not more indented\n                while (ch === ' ')\n                    ch = this.buffer[--i];\n                if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n                    nl = i;\n                else\n                    break;\n            } while (true);\n        }\n        yield SCALAR;\n        yield* this.pushToIndex(nl + 1, true);\n        return yield* this.parseLineStart();\n    }\n    *parsePlainScalar() {\n        const inFlow = this.flowLevel > 0;\n        let end = this.pos - 1;\n        let i = this.pos - 1;\n        let ch;\n        while ((ch = this.buffer[++i])) {\n            if (ch === ':') {\n                const next = this.buffer[i + 1];\n                if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                end = i;\n            }\n            else if (isEmpty(ch)) {\n                let next = this.buffer[i + 1];\n                if (ch === '\\r') {\n                    if (next === '\\n') {\n                        i += 1;\n                        ch = '\\n';\n                        next = this.buffer[i + 1];\n                    }\n                    else\n                        end = i;\n                }\n                if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                if (ch === '\\n') {\n                    const cs = this.continueScalar(i + 1);\n                    if (cs === -1)\n                        break;\n                    i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n                }\n            }\n            else {\n                if (inFlow && flowIndicatorChars.has(ch))\n                    break;\n                end = i;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('plain-scalar');\n        yield SCALAR;\n        yield* this.pushToIndex(end + 1, true);\n        return inFlow ? 'flow' : 'doc';\n    }\n    *pushCount(n) {\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos += n;\n            return n;\n        }\n        return 0;\n    }\n    *pushToIndex(i, allowEmpty) {\n        const s = this.buffer.slice(this.pos, i);\n        if (s) {\n            yield s;\n            this.pos += s.length;\n            return s.length;\n        }\n        else if (allowEmpty)\n            yield '';\n        return 0;\n    }\n    *pushIndicators() {\n        switch (this.charAt(0)) {\n            case '!':\n                return ((yield* this.pushTag()) +\n                    (yield* this.pushSpaces(true)) +\n                    (yield* this.pushIndicators()));\n            case '&':\n                return ((yield* this.pushUntil(isNotAnchorChar)) +\n                    (yield* this.pushSpaces(true)) +\n                    (yield* this.pushIndicators()));\n            case '-': // this is an error\n            case '?': // this is an error outside flow collections\n            case ':': {\n                const inFlow = this.flowLevel > 0;\n                const ch1 = this.charAt(1);\n                if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n                    if (!inFlow)\n                        this.indentNext = this.indentValue + 1;\n                    else if (this.flowKey)\n                        this.flowKey = false;\n                    return ((yield* this.pushCount(1)) +\n                        (yield* this.pushSpaces(true)) +\n                        (yield* this.pushIndicators()));\n                }\n            }\n        }\n        return 0;\n    }\n    *pushTag() {\n        if (this.charAt(1) === '<') {\n            let i = this.pos + 2;\n            let ch = this.buffer[i];\n            while (!isEmpty(ch) && ch !== '>')\n                ch = this.buffer[++i];\n            return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n        }\n        else {\n            let i = this.pos + 1;\n            let ch = this.buffer[i];\n            while (ch) {\n                if (tagChars.has(ch))\n                    ch = this.buffer[++i];\n                else if (ch === '%' &&\n                    hexDigits.has(this.buffer[i + 1]) &&\n                    hexDigits.has(this.buffer[i + 2])) {\n                    ch = this.buffer[(i += 3)];\n                }\n                else\n                    break;\n            }\n            return yield* this.pushToIndex(i, false);\n        }\n    }\n    *pushNewline() {\n        const ch = this.buffer[this.pos];\n        if (ch === '\\n')\n            return yield* this.pushCount(1);\n        else if (ch === '\\r' && this.charAt(1) === '\\n')\n            return yield* this.pushCount(2);\n        else\n            return 0;\n    }\n    *pushSpaces(allowTabs) {\n        let i = this.pos - 1;\n        let ch;\n        do {\n            ch = this.buffer[++i];\n        } while (ch === ' ' || (allowTabs && ch === '\\t'));\n        const n = i - this.pos;\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos = i;\n        }\n        return n;\n    }\n    *pushUntil(test) {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (!test(ch))\n            ch = this.buffer[++i];\n        return yield* this.pushToIndex(i, false);\n    }\n}\n\nexport { Lexer };\n","/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n    constructor() {\n        this.lineStarts = [];\n        /**\n         * Should be called in ascending order. Otherwise, call\n         * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n         */\n        this.addNewLine = (offset) => this.lineStarts.push(offset);\n        /**\n         * Performs a binary search and returns the 1-indexed { line, col }\n         * position of `offset`. If `line === 0`, `addNewLine` has never been\n         * called or `offset` is before the first known newline.\n         */\n        this.linePos = (offset) => {\n            let low = 0;\n            let high = this.lineStarts.length;\n            while (low < high) {\n                const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n                if (this.lineStarts[mid] < offset)\n                    low = mid + 1;\n                else\n                    high = mid;\n            }\n            if (this.lineStarts[low] === offset)\n                return { line: low + 1, col: 1 };\n            if (low === 0)\n                return { line: 0, col: offset };\n            const start = this.lineStarts[low - 1];\n            return { line: low, col: offset - start + 1 };\n        };\n    }\n}\n\nexport { LineCounter };\n","import { tokenType } from './cst.js';\nimport { Lexer } from './lexer.js';\n\nfunction includesToken(list, type) {\n    for (let i = 0; i < list.length; ++i)\n        if (list[i].type === type)\n            return true;\n    return false;\n}\nfunction findNonEmptyIndex(list) {\n    for (let i = 0; i < list.length; ++i) {\n        switch (list[i].type) {\n            case 'space':\n            case 'comment':\n            case 'newline':\n                break;\n            default:\n                return i;\n        }\n    }\n    return -1;\n}\nfunction isFlowToken(token) {\n    switch (token?.type) {\n        case 'alias':\n        case 'scalar':\n        case 'single-quoted-scalar':\n        case 'double-quoted-scalar':\n        case 'flow-collection':\n            return true;\n        default:\n            return false;\n    }\n}\nfunction getPrevProps(parent) {\n    switch (parent.type) {\n        case 'document':\n            return parent.start;\n        case 'block-map': {\n            const it = parent.items[parent.items.length - 1];\n            return it.sep ?? it.start;\n        }\n        case 'block-seq':\n            return parent.items[parent.items.length - 1].start;\n        /* istanbul ignore next should not happen */\n        default:\n            return [];\n    }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n    if (prev.length === 0)\n        return [];\n    let i = prev.length;\n    loop: while (--i >= 0) {\n        switch (prev[i].type) {\n            case 'doc-start':\n            case 'explicit-key-ind':\n            case 'map-value-ind':\n            case 'seq-item-ind':\n            case 'newline':\n                break loop;\n        }\n    }\n    while (prev[++i]?.type === 'space') {\n        /* loop */\n    }\n    return prev.splice(i, prev.length);\n}\nfunction fixFlowSeqItems(fc) {\n    if (fc.start.type === 'flow-seq-start') {\n        for (const it of fc.items) {\n            if (it.sep &&\n                !it.value &&\n                !includesToken(it.start, 'explicit-key-ind') &&\n                !includesToken(it.sep, 'map-value-ind')) {\n                if (it.key)\n                    it.value = it.key;\n                delete it.key;\n                if (isFlowToken(it.value)) {\n                    if (it.value.end)\n                        Array.prototype.push.apply(it.value.end, it.sep);\n                    else\n                        it.value.end = it.sep;\n                }\n                else\n                    Array.prototype.push.apply(it.start, it.sep);\n                delete it.sep;\n            }\n        }\n    }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n *   // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n *   const parser = new Parser()\n *   for (const lexeme of lexer.lex(source))\n *     yield* parser.next(lexeme)\n *   yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n *   // token: Token\n * }\n * ```\n */\nclass Parser {\n    /**\n     * @param onNewLine - If defined, called separately with the start position of\n     *   each new line (in `parse()`, including the start of input).\n     */\n    constructor(onNewLine) {\n        /** If true, space and sequence indicators count as indentation */\n        this.atNewLine = true;\n        /** If true, next token is a scalar value */\n        this.atScalar = false;\n        /** Current indentation level */\n        this.indent = 0;\n        /** Current offset since the start of parsing */\n        this.offset = 0;\n        /** On the same line with a block map key */\n        this.onKeyLine = false;\n        /** Top indicates the node that's currently being built */\n        this.stack = [];\n        /** The source of the current token, set in parse() */\n        this.source = '';\n        /** The type of the current token, set in parse() */\n        this.type = '';\n        // Must be defined after `next()`\n        this.lexer = new Lexer();\n        this.onNewLine = onNewLine;\n    }\n    /**\n     * Parse `source` as a YAML stream.\n     * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n     *\n     * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n     *\n     * @returns A generator of tokens representing each directive, document, and other structure.\n     */\n    *parse(source, incomplete = false) {\n        if (this.onNewLine && this.offset === 0)\n            this.onNewLine(0);\n        for (const lexeme of this.lexer.lex(source, incomplete))\n            yield* this.next(lexeme);\n        if (!incomplete)\n            yield* this.end();\n    }\n    /**\n     * Advance the parser by the `source` of one lexical token.\n     */\n    *next(source) {\n        this.source = source;\n        if (this.atScalar) {\n            this.atScalar = false;\n            yield* this.step();\n            this.offset += source.length;\n            return;\n        }\n        const type = tokenType(source);\n        if (!type) {\n            const message = `Not a YAML token: ${source}`;\n            yield* this.pop({ type: 'error', offset: this.offset, message, source });\n            this.offset += source.length;\n        }\n        else if (type === 'scalar') {\n            this.atNewLine = false;\n            this.atScalar = true;\n            this.type = 'scalar';\n        }\n        else {\n            this.type = type;\n            yield* this.step();\n            switch (type) {\n                case 'newline':\n                    this.atNewLine = true;\n                    this.indent = 0;\n                    if (this.onNewLine)\n                        this.onNewLine(this.offset + source.length);\n                    break;\n                case 'space':\n                    if (this.atNewLine && source[0] === ' ')\n                        this.indent += source.length;\n                    break;\n                case 'explicit-key-ind':\n                case 'map-value-ind':\n                case 'seq-item-ind':\n                    if (this.atNewLine)\n                        this.indent += source.length;\n                    break;\n                case 'doc-mode':\n                case 'flow-error-end':\n                    return;\n                default:\n                    this.atNewLine = false;\n            }\n            this.offset += source.length;\n        }\n    }\n    /** Call at end of input to push out any remaining constructions */\n    *end() {\n        while (this.stack.length > 0)\n            yield* this.pop();\n    }\n    get sourceToken() {\n        const st = {\n            type: this.type,\n            offset: this.offset,\n            indent: this.indent,\n            source: this.source\n        };\n        return st;\n    }\n    *step() {\n        const top = this.peek(1);\n        if (this.type === 'doc-end' && (!top || top.type !== 'doc-end')) {\n            while (this.stack.length > 0)\n                yield* this.pop();\n            this.stack.push({\n                type: 'doc-end',\n                offset: this.offset,\n                source: this.source\n            });\n            return;\n        }\n        if (!top)\n            return yield* this.stream();\n        switch (top.type) {\n            case 'document':\n                return yield* this.document(top);\n            case 'alias':\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return yield* this.scalar(top);\n            case 'block-scalar':\n                return yield* this.blockScalar(top);\n            case 'block-map':\n                return yield* this.blockMap(top);\n            case 'block-seq':\n                return yield* this.blockSequence(top);\n            case 'flow-collection':\n                return yield* this.flowCollection(top);\n            case 'doc-end':\n                return yield* this.documentEnd(top);\n        }\n        /* istanbul ignore next should not happen */\n        yield* this.pop();\n    }\n    peek(n) {\n        return this.stack[this.stack.length - n];\n    }\n    *pop(error) {\n        const token = error ?? this.stack.pop();\n        /* istanbul ignore if should not happen */\n        if (!token) {\n            const message = 'Tried to pop an empty stack';\n            yield { type: 'error', offset: this.offset, source: '', message };\n        }\n        else if (this.stack.length === 0) {\n            yield token;\n        }\n        else {\n            const top = this.peek(1);\n            if (token.type === 'block-scalar') {\n                // Block scalars use their parent rather than header indent\n                token.indent = 'indent' in top ? top.indent : 0;\n            }\n            else if (token.type === 'flow-collection' && top.type === 'document') {\n                // Ignore all indent for top-level flow collections\n                token.indent = 0;\n            }\n            if (token.type === 'flow-collection')\n                fixFlowSeqItems(token);\n            switch (top.type) {\n                case 'document':\n                    top.value = token;\n                    break;\n                case 'block-scalar':\n                    top.props.push(token); // error\n                    break;\n                case 'block-map': {\n                    const it = top.items[top.items.length - 1];\n                    if (it.value) {\n                        top.items.push({ start: [], key: token, sep: [] });\n                        this.onKeyLine = true;\n                        return;\n                    }\n                    else if (it.sep) {\n                        it.value = token;\n                    }\n                    else {\n                        Object.assign(it, { key: token, sep: [] });\n                        this.onKeyLine = !it.explicitKey;\n                        return;\n                    }\n                    break;\n                }\n                case 'block-seq': {\n                    const it = top.items[top.items.length - 1];\n                    if (it.value)\n                        top.items.push({ start: [], value: token });\n                    else\n                        it.value = token;\n                    break;\n                }\n                case 'flow-collection': {\n                    const it = top.items[top.items.length - 1];\n                    if (!it || it.value)\n                        top.items.push({ start: [], key: token, sep: [] });\n                    else if (it.sep)\n                        it.value = token;\n                    else\n                        Object.assign(it, { key: token, sep: [] });\n                    return;\n                }\n                /* istanbul ignore next should not happen */\n                default:\n                    yield* this.pop();\n                    yield* this.pop(token);\n            }\n            if ((top.type === 'document' ||\n                top.type === 'block-map' ||\n                top.type === 'block-seq') &&\n                (token.type === 'block-map' || token.type === 'block-seq')) {\n                const last = token.items[token.items.length - 1];\n                if (last &&\n                    !last.sep &&\n                    !last.value &&\n                    last.start.length > 0 &&\n                    findNonEmptyIndex(last.start) === -1 &&\n                    (token.indent === 0 ||\n                        last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n                    if (top.type === 'document')\n                        top.end = last.start;\n                    else\n                        top.items.push({ start: last.start });\n                    token.items.splice(-1, 1);\n                }\n            }\n        }\n    }\n    *stream() {\n        switch (this.type) {\n            case 'directive-line':\n                yield { type: 'directive', offset: this.offset, source: this.source };\n                return;\n            case 'byte-order-mark':\n            case 'space':\n            case 'comment':\n            case 'newline':\n                yield this.sourceToken;\n                return;\n            case 'doc-mode':\n            case 'doc-start': {\n                const doc = {\n                    type: 'document',\n                    offset: this.offset,\n                    start: []\n                };\n                if (this.type === 'doc-start')\n                    doc.start.push(this.sourceToken);\n                this.stack.push(doc);\n                return;\n            }\n        }\n        yield {\n            type: 'error',\n            offset: this.offset,\n            message: `Unexpected ${this.type} token in YAML stream`,\n            source: this.source\n        };\n    }\n    *document(doc) {\n        if (doc.value)\n            return yield* this.lineEnd(doc);\n        switch (this.type) {\n            case 'doc-start': {\n                if (findNonEmptyIndex(doc.start) !== -1) {\n                    yield* this.pop();\n                    yield* this.step();\n                }\n                else\n                    doc.start.push(this.sourceToken);\n                return;\n            }\n            case 'anchor':\n            case 'tag':\n            case 'space':\n            case 'comment':\n            case 'newline':\n                doc.start.push(this.sourceToken);\n                return;\n        }\n        const bv = this.startBlockValue(doc);\n        if (bv)\n            this.stack.push(bv);\n        else {\n            yield {\n                type: 'error',\n                offset: this.offset,\n                message: `Unexpected ${this.type} token in YAML document`,\n                source: this.source\n            };\n        }\n    }\n    *scalar(scalar) {\n        if (this.type === 'map-value-ind') {\n            const prev = getPrevProps(this.peek(2));\n            const start = getFirstKeyStartProps(prev);\n            let sep;\n            if (scalar.end) {\n                sep = scalar.end;\n                sep.push(this.sourceToken);\n                delete scalar.end;\n            }\n            else\n                sep = [this.sourceToken];\n            const map = {\n                type: 'block-map',\n                offset: scalar.offset,\n                indent: scalar.indent,\n                items: [{ start, key: scalar, sep }]\n            };\n            this.onKeyLine = true;\n            this.stack[this.stack.length - 1] = map;\n        }\n        else\n            yield* this.lineEnd(scalar);\n    }\n    *blockScalar(scalar) {\n        switch (this.type) {\n            case 'space':\n            case 'comment':\n            case 'newline':\n                scalar.props.push(this.sourceToken);\n                return;\n            case 'scalar':\n                scalar.source = this.source;\n                // block-scalar source includes trailing newline\n                this.atNewLine = true;\n                this.indent = 0;\n                if (this.onNewLine) {\n                    let nl = this.source.indexOf('\\n') + 1;\n                    while (nl !== 0) {\n                        this.onNewLine(this.offset + nl);\n                        nl = this.source.indexOf('\\n', nl) + 1;\n                    }\n                }\n                yield* this.pop();\n                break;\n            /* istanbul ignore next should not happen */\n            default:\n                yield* this.pop();\n                yield* this.step();\n        }\n    }\n    *blockMap(map) {\n        const it = map.items[map.items.length - 1];\n        // it.sep is true-ish if pair already has key or : separator\n        switch (this.type) {\n            case 'newline':\n                this.onKeyLine = false;\n                if (it.value) {\n                    const end = 'end' in it.value ? it.value.end : undefined;\n                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n                    if (last?.type === 'comment')\n                        end?.push(this.sourceToken);\n                    else\n                        map.items.push({ start: [this.sourceToken] });\n                }\n                else if (it.sep) {\n                    it.sep.push(this.sourceToken);\n                }\n                else {\n                    it.start.push(this.sourceToken);\n                }\n                return;\n            case 'space':\n            case 'comment':\n                if (it.value) {\n                    map.items.push({ start: [this.sourceToken] });\n                }\n                else if (it.sep) {\n                    it.sep.push(this.sourceToken);\n                }\n                else {\n                    if (this.atIndentedComment(it.start, map.indent)) {\n                        const prev = map.items[map.items.length - 2];\n                        const end = prev?.value?.end;\n                        if (Array.isArray(end)) {\n                            Array.prototype.push.apply(end, it.start);\n                            end.push(this.sourceToken);\n                            map.items.pop();\n                            return;\n                        }\n                    }\n                    it.start.push(this.sourceToken);\n                }\n                return;\n        }\n        if (this.indent >= map.indent) {\n            const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n            const atNextItem = atMapIndent &&\n                (it.sep || it.explicitKey) &&\n                this.type !== 'seq-item-ind';\n            // For empty nodes, assign newline-separated not indented empty tokens to following node\n            let start = [];\n            if (atNextItem && it.sep && !it.value) {\n                const nl = [];\n                for (let i = 0; i < it.sep.length; ++i) {\n                    const st = it.sep[i];\n                    switch (st.type) {\n                        case 'newline':\n                            nl.push(i);\n                            break;\n                        case 'space':\n                            break;\n                        case 'comment':\n                            if (st.indent > map.indent)\n                                nl.length = 0;\n                            break;\n                        default:\n                            nl.length = 0;\n                    }\n                }\n                if (nl.length >= 2)\n                    start = it.sep.splice(nl[1]);\n            }\n            switch (this.type) {\n                case 'anchor':\n                case 'tag':\n                    if (atNextItem || it.value) {\n                        start.push(this.sourceToken);\n                        map.items.push({ start });\n                        this.onKeyLine = true;\n                    }\n                    else if (it.sep) {\n                        it.sep.push(this.sourceToken);\n                    }\n                    else {\n                        it.start.push(this.sourceToken);\n                    }\n                    return;\n                case 'explicit-key-ind':\n                    if (!it.sep && !it.explicitKey) {\n                        it.start.push(this.sourceToken);\n                        it.explicitKey = true;\n                    }\n                    else if (atNextItem || it.value) {\n                        start.push(this.sourceToken);\n                        map.items.push({ start, explicitKey: true });\n                    }\n                    else {\n                        this.stack.push({\n                            type: 'block-map',\n                            offset: this.offset,\n                            indent: this.indent,\n                            items: [{ start: [this.sourceToken], explicitKey: true }]\n                        });\n                    }\n                    this.onKeyLine = true;\n                    return;\n                case 'map-value-ind':\n                    if (it.explicitKey) {\n                        if (!it.sep) {\n                            if (includesToken(it.start, 'newline')) {\n                                Object.assign(it, { key: null, sep: [this.sourceToken] });\n                            }\n                            else {\n                                const start = getFirstKeyStartProps(it.start);\n                                this.stack.push({\n                                    type: 'block-map',\n                                    offset: this.offset,\n                                    indent: this.indent,\n                                    items: [{ start, key: null, sep: [this.sourceToken] }]\n                                });\n                            }\n                        }\n                        else if (it.value) {\n                            map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n                        }\n                        else if (includesToken(it.sep, 'map-value-ind')) {\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start, key: null, sep: [this.sourceToken] }]\n                            });\n                        }\n                        else if (isFlowToken(it.key) &&\n                            !includesToken(it.sep, 'newline')) {\n                            const start = getFirstKeyStartProps(it.start);\n                            const key = it.key;\n                            const sep = it.sep;\n                            sep.push(this.sourceToken);\n                            // @ts-expect-error type guard is wrong here\n                            delete it.key;\n                            // @ts-expect-error type guard is wrong here\n                            delete it.sep;\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start, key, sep }]\n                            });\n                        }\n                        else if (start.length > 0) {\n                            // Not actually at next item\n                            it.sep = it.sep.concat(start, this.sourceToken);\n                        }\n                        else {\n                            it.sep.push(this.sourceToken);\n                        }\n                    }\n                    else {\n                        if (!it.sep) {\n                            Object.assign(it, { key: null, sep: [this.sourceToken] });\n                        }\n                        else if (it.value || atNextItem) {\n                            map.items.push({ start, key: null, sep: [this.sourceToken] });\n                        }\n                        else if (includesToken(it.sep, 'map-value-ind')) {\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start: [], key: null, sep: [this.sourceToken] }]\n                            });\n                        }\n                        else {\n                            it.sep.push(this.sourceToken);\n                        }\n                    }\n                    this.onKeyLine = true;\n                    return;\n                case 'alias':\n                case 'scalar':\n                case 'single-quoted-scalar':\n                case 'double-quoted-scalar': {\n                    const fs = this.flowScalar(this.type);\n                    if (atNextItem || it.value) {\n                        map.items.push({ start, key: fs, sep: [] });\n                        this.onKeyLine = true;\n                    }\n                    else if (it.sep) {\n                        this.stack.push(fs);\n                    }\n                    else {\n                        Object.assign(it, { key: fs, sep: [] });\n                        this.onKeyLine = true;\n                    }\n                    return;\n                }\n                default: {\n                    const bv = this.startBlockValue(map);\n                    if (bv) {\n                        if (atMapIndent && bv.type !== 'block-seq') {\n                            map.items.push({ start });\n                        }\n                        this.stack.push(bv);\n                        return;\n                    }\n                }\n            }\n        }\n        yield* this.pop();\n        yield* this.step();\n    }\n    *blockSequence(seq) {\n        const it = seq.items[seq.items.length - 1];\n        switch (this.type) {\n            case 'newline':\n                if (it.value) {\n                    const end = 'end' in it.value ? it.value.end : undefined;\n                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n                    if (last?.type === 'comment')\n                        end?.push(this.sourceToken);\n                    else\n                        seq.items.push({ start: [this.sourceToken] });\n                }\n                else\n                    it.start.push(this.sourceToken);\n                return;\n            case 'space':\n            case 'comment':\n                if (it.value)\n                    seq.items.push({ start: [this.sourceToken] });\n                else {\n                    if (this.atIndentedComment(it.start, seq.indent)) {\n                        const prev = seq.items[seq.items.length - 2];\n                        const end = prev?.value?.end;\n                        if (Array.isArray(end)) {\n                            Array.prototype.push.apply(end, it.start);\n                            end.push(this.sourceToken);\n                            seq.items.pop();\n                            return;\n                        }\n                    }\n                    it.start.push(this.sourceToken);\n                }\n                return;\n            case 'anchor':\n            case 'tag':\n                if (it.value || this.indent <= seq.indent)\n                    break;\n                it.start.push(this.sourceToken);\n                return;\n            case 'seq-item-ind':\n                if (this.indent !== seq.indent)\n                    break;\n                if (it.value || includesToken(it.start, 'seq-item-ind'))\n                    seq.items.push({ start: [this.sourceToken] });\n                else\n                    it.start.push(this.sourceToken);\n                return;\n        }\n        if (this.indent > seq.indent) {\n            const bv = this.startBlockValue(seq);\n            if (bv) {\n                this.stack.push(bv);\n                return;\n            }\n        }\n        yield* this.pop();\n        yield* this.step();\n    }\n    *flowCollection(fc) {\n        const it = fc.items[fc.items.length - 1];\n        if (this.type === 'flow-error-end') {\n            let top;\n            do {\n                yield* this.pop();\n                top = this.peek(1);\n            } while (top && top.type === 'flow-collection');\n        }\n        else if (fc.end.length === 0) {\n            switch (this.type) {\n                case 'comma':\n                case 'explicit-key-ind':\n                    if (!it || it.sep)\n                        fc.items.push({ start: [this.sourceToken] });\n                    else\n                        it.start.push(this.sourceToken);\n                    return;\n                case 'map-value-ind':\n                    if (!it || it.value)\n                        fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n                    else if (it.sep)\n                        it.sep.push(this.sourceToken);\n                    else\n                        Object.assign(it, { key: null, sep: [this.sourceToken] });\n                    return;\n                case 'space':\n                case 'comment':\n                case 'newline':\n                case 'anchor':\n                case 'tag':\n                    if (!it || it.value)\n                        fc.items.push({ start: [this.sourceToken] });\n                    else if (it.sep)\n                        it.sep.push(this.sourceToken);\n                    else\n                        it.start.push(this.sourceToken);\n                    return;\n                case 'alias':\n                case 'scalar':\n                case 'single-quoted-scalar':\n                case 'double-quoted-scalar': {\n                    const fs = this.flowScalar(this.type);\n                    if (!it || it.value)\n                        fc.items.push({ start: [], key: fs, sep: [] });\n                    else if (it.sep)\n                        this.stack.push(fs);\n                    else\n                        Object.assign(it, { key: fs, sep: [] });\n                    return;\n                }\n                case 'flow-map-end':\n                case 'flow-seq-end':\n                    fc.end.push(this.sourceToken);\n                    return;\n            }\n            const bv = this.startBlockValue(fc);\n            /* istanbul ignore else should not happen */\n            if (bv)\n                this.stack.push(bv);\n            else {\n                yield* this.pop();\n                yield* this.step();\n            }\n        }\n        else {\n            const parent = this.peek(2);\n            if (parent.type === 'block-map' &&\n                ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n                    (this.type === 'newline' &&\n                        !parent.items[parent.items.length - 1].sep))) {\n                yield* this.pop();\n                yield* this.step();\n            }\n            else if (this.type === 'map-value-ind' &&\n                parent.type !== 'flow-collection') {\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                fixFlowSeqItems(fc);\n                const sep = fc.end.splice(1, fc.end.length);\n                sep.push(this.sourceToken);\n                const map = {\n                    type: 'block-map',\n                    offset: fc.offset,\n                    indent: fc.indent,\n                    items: [{ start, key: fc, sep }]\n                };\n                this.onKeyLine = true;\n                this.stack[this.stack.length - 1] = map;\n            }\n            else {\n                yield* this.lineEnd(fc);\n            }\n        }\n    }\n    flowScalar(type) {\n        if (this.onNewLine) {\n            let nl = this.source.indexOf('\\n') + 1;\n            while (nl !== 0) {\n                this.onNewLine(this.offset + nl);\n                nl = this.source.indexOf('\\n', nl) + 1;\n            }\n        }\n        return {\n            type,\n            offset: this.offset,\n            indent: this.indent,\n            source: this.source\n        };\n    }\n    startBlockValue(parent) {\n        switch (this.type) {\n            case 'alias':\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return this.flowScalar(this.type);\n            case 'block-scalar-header':\n                return {\n                    type: 'block-scalar',\n                    offset: this.offset,\n                    indent: this.indent,\n                    props: [this.sourceToken],\n                    source: ''\n                };\n            case 'flow-map-start':\n            case 'flow-seq-start':\n                return {\n                    type: 'flow-collection',\n                    offset: this.offset,\n                    indent: this.indent,\n                    start: this.sourceToken,\n                    items: [],\n                    end: []\n                };\n            case 'seq-item-ind':\n                return {\n                    type: 'block-seq',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start: [this.sourceToken] }]\n                };\n            case 'explicit-key-ind': {\n                this.onKeyLine = true;\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                start.push(this.sourceToken);\n                return {\n                    type: 'block-map',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start, explicitKey: true }]\n                };\n            }\n            case 'map-value-ind': {\n                this.onKeyLine = true;\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                return {\n                    type: 'block-map',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start, key: null, sep: [this.sourceToken] }]\n                };\n            }\n        }\n        return null;\n    }\n    atIndentedComment(start, indent) {\n        if (this.type !== 'comment')\n            return false;\n        if (this.indent <= indent)\n            return false;\n        return start.every(st => st.type === 'newline' || st.type === 'space');\n    }\n    *documentEnd(docEnd) {\n        if (this.type !== 'doc-mode') {\n            if (docEnd.end)\n                docEnd.end.push(this.sourceToken);\n            else\n                docEnd.end = [this.sourceToken];\n            if (this.type === 'newline')\n                yield* this.pop();\n        }\n    }\n    *lineEnd(token) {\n        switch (this.type) {\n            case 'comma':\n            case 'doc-start':\n            case 'doc-end':\n            case 'flow-seq-end':\n            case 'flow-map-end':\n            case 'map-value-ind':\n                yield* this.pop();\n                yield* this.step();\n                break;\n            case 'newline':\n                this.onKeyLine = false;\n            // fallthrough\n            case 'space':\n            case 'comment':\n            default:\n                // all other values are errors\n                if (token.end)\n                    token.end.push(this.sourceToken);\n                else\n                    token.end = [this.sourceToken];\n                if (this.type === 'newline')\n                    yield* this.pop();\n        }\n    }\n}\n\nexport { Parser };\n","import { Composer } from './compose/composer.js';\nimport { Document } from './doc/Document.js';\nimport { prettifyError, YAMLParseError } from './errors.js';\nimport { warn } from './log.js';\nimport { isDocument } from './nodes/identity.js';\nimport { LineCounter } from './parse/line-counter.js';\nimport { Parser } from './parse/parser.js';\n\nfunction parseOptions(options) {\n    const prettyErrors = options.prettyErrors !== false;\n    const lineCounter = options.lineCounter || (prettyErrors && new LineCounter()) || null;\n    return { lineCounter, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n *   EmptyStream and contain additional stream information. In\n *   TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser = new Parser(lineCounter?.addNewLine);\n    const composer = new Composer(options);\n    const docs = Array.from(composer.compose(parser.parse(source)));\n    if (prettyErrors && lineCounter)\n        for (const doc of docs) {\n            doc.errors.forEach(prettifyError(source, lineCounter));\n            doc.warnings.forEach(prettifyError(source, lineCounter));\n        }\n    if (docs.length > 0)\n        return docs;\n    return Object.assign([], { empty: true }, composer.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser = new Parser(lineCounter?.addNewLine);\n    const composer = new Composer(options);\n    // `doc` is always set by compose.end(true) at the very latest\n    let doc = null;\n    for (const _doc of composer.compose(parser.parse(source), true, source.length)) {\n        if (!doc)\n            doc = _doc;\n        else if (doc.options.logLevel !== 'silent') {\n            doc.errors.push(new YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n            break;\n        }\n    }\n    if (prettyErrors && lineCounter) {\n        doc.errors.forEach(prettifyError(source, lineCounter));\n        doc.warnings.forEach(prettifyError(source, lineCounter));\n    }\n    return doc;\n}\nfunction parse(src, reviver, options) {\n    let _reviver = undefined;\n    if (typeof reviver === 'function') {\n        _reviver = reviver;\n    }\n    else if (options === undefined && reviver && typeof reviver === 'object') {\n        options = reviver;\n    }\n    const doc = parseDocument(src, options);\n    if (!doc)\n        return null;\n    doc.warnings.forEach(warning => warn(doc.options.logLevel, warning));\n    if (doc.errors.length > 0) {\n        if (doc.options.logLevel !== 'silent')\n            throw doc.errors[0];\n        else\n            doc.errors = [];\n    }\n    return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n    let _replacer = null;\n    if (typeof replacer === 'function' || Array.isArray(replacer)) {\n        _replacer = replacer;\n    }\n    else if (options === undefined && replacer) {\n        options = replacer;\n    }\n    if (typeof options === 'string')\n        options = options.length;\n    if (typeof options === 'number') {\n        const indent = Math.round(options);\n        options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n    }\n    if (value === undefined) {\n        const { keepUndefined } = options ?? replacer ?? {};\n        if (!keepUndefined)\n            return undefined;\n    }\n    if (isDocument(value) && !_replacer)\n        return value.toString(options);\n    return new Document(value, _replacer, options).toString(options);\n}\n\nexport { parse, parseAllDocuments, parseDocument, stringify };\n","'use strict';\n\nmodule.exports = function () {\n  throw new Error(\n    'ws does not work in the browser. Browser clients must use the native ' +\n      'WebSocket object'\n  );\n};\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable import/order */\n\nimport colorsLibrary from 'colors/safe';\nexport const colors = colorsLibrary;\n\nimport debugLibrary from 'debug';\nexport const debug = debugLibrary;\n\nimport * as diffLibrary from 'diff';\nexport const diff = diffLibrary;\n\nimport dotenvLibrary from 'dotenv';\nexport const dotenv = dotenvLibrary;\n\nexport { getProxyForUrl } from 'proxy-from-env';\n\nexport { HttpsProxyAgent } from 'https-proxy-agent';\n\nimport jpegLibrary from 'jpeg-js';\nexport const jpegjs = jpegLibrary;\n\nconst lockfileLibrary = require('./third_party/lockfile');\nexport const lockfile = lockfileLibrary;\n\nimport mimeLibrary from 'mime';\nexport const mime = mimeLibrary;\n\nimport minimatchLibrary from 'minimatch';\nexport const minimatch = minimatchLibrary;\n\nimport openLibrary from 'open';\nexport const open = openLibrary;\n\nexport { PNG } from 'pngjs';\n\nexport { program } from 'commander';\n\nimport progressLibrary from 'progress';\nexport const progress = progressLibrary;\n\nexport { SocksProxyAgent } from 'socks-proxy-agent';\n\nimport yamlLibrary from 'yaml';\nexport const yaml = yamlLibrary;\n\n// @ts-ignore\nimport wsLibrary, { WebSocketServer, Receiver, Sender } from 'ws';\nexport const ws = wsLibrary;\nexport const wsServer = WebSocketServer;\nexport const wsReceiver = Receiver;\nexport const wsSender = Sender;\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const colors: typeof import('../bundles/utils/node_modules/colors/safe') = require('./utilsBundleImpl').colors;\nexport const debug: typeof import('../bundles/utils/node_modules/@types/debug') = require('./utilsBundleImpl').debug;\nexport const diff: typeof import('../bundles/utils/node_modules/@types/diff') = require('./utilsBundleImpl').diff;\nexport const dotenv: typeof import('../bundles/utils/node_modules/dotenv') = require('./utilsBundleImpl').dotenv;\nexport const getProxyForUrl: typeof import('../bundles/utils/node_modules/@types/proxy-from-env').getProxyForUrl = require('./utilsBundleImpl').getProxyForUrl;\nexport const HttpsProxyAgent: typeof import('../bundles/utils/node_modules/https-proxy-agent').HttpsProxyAgent = require('./utilsBundleImpl').HttpsProxyAgent;\nexport const jpegjs: typeof import('../bundles/utils/node_modules/jpeg-js') = require('./utilsBundleImpl').jpegjs;\nexport const lockfile: typeof import('../bundles/utils/node_modules/@types/proper-lockfile') = require('./utilsBundleImpl').lockfile;\nexport const mime: typeof import('../bundles/utils/node_modules/@types/mime') = require('./utilsBundleImpl').mime;\nexport const minimatch: typeof import('../bundles/utils/node_modules/@types/minimatch') = require('./utilsBundleImpl').minimatch;\nexport const open: typeof import('../bundles/utils/node_modules/open') = require('./utilsBundleImpl').open;\nexport const PNG: typeof import('../bundles/utils/node_modules/@types/pngjs').PNG = require('./utilsBundleImpl').PNG;\nexport const program: typeof import('../bundles/utils/node_modules/commander').program = require('./utilsBundleImpl').program;\nexport const progress: typeof import('../bundles/utils/node_modules/@types/progress') = require('./utilsBundleImpl').progress;\nexport const SocksProxyAgent: typeof import('../bundles/utils/node_modules/socks-proxy-agent').SocksProxyAgent = require('./utilsBundleImpl').SocksProxyAgent;\nexport const yaml: typeof import('../bundles/utils/node_modules/yaml') = require('./utilsBundleImpl').yaml;\nexport type { Range as YAMLRange, Scalar as YAMLScalar, YAMLError, YAMLMap, YAMLSeq } from '../bundles/utils/node_modules/yaml';\nexport const ws: typeof import('../bundles/utils/node_modules/@types/ws') = require('./utilsBundleImpl').ws;\nexport const wsServer: typeof import('../bundles/utils/node_modules/@types/ws').WebSocketServer = require('./utilsBundleImpl').wsServer;\nexport const wsReceiver = require('./utilsBundleImpl').wsReceiver;\nexport const wsSender = require('./utilsBundleImpl').wsSender;\nexport type { Command } from '../bundles/utils/node_modules/commander';\nexport type { EventEmitter as WebSocketEventEmitter, RawData as WebSocketRawData, WebSocket, WebSocketServer } from '../bundles/utils/node_modules/@types/ws';\n\nexport function ms(ms: number): string {\n  if (!isFinite(ms))\n    return '-';\n\n  if (ms === 0)\n    return '0ms';\n\n  if (ms < 1000)\n    return ms.toFixed(0) + 'ms';\n\n  const seconds = ms / 1000;\n  if (seconds < 60)\n    return seconds.toFixed(1) + 's';\n\n  const minutes = seconds / 60;\n  if (minutes < 60)\n    return minutes.toFixed(1) + 'm';\n\n  const hours = minutes / 60;\n  if (hours < 24)\n    return hours.toFixed(1) + 'h';\n\n  const days = hours / 24;\n  return days.toFixed(1) + 'd';\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\n\nimport { debug } from '../../utilsBundle';\n\nconst debugLoggerColorMap = {\n  'api': 45, // cyan\n  'protocol': 34, // green\n  'install': 34, // green\n  'download': 34, // green\n  'browser': 0, // reset\n  'socks': 92, // purple\n  'client-certificates': 92, // purple\n  'error': 160, // red,\n  'channel': 33, // blue\n  'server': 45, // cyan\n  'server:channel': 34, // green\n  'server:metadata': 33, // blue,\n  'recorder': 45, // cyan\n};\nexport type LogName = keyof typeof debugLoggerColorMap;\n\nclass DebugLogger {\n  private _debuggers = new Map<string, debug.IDebugger>();\n\n  constructor() {\n    if (process.env.DEBUG_FILE) {\n      const ansiRegex = new RegExp([\n        '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:[a-zA-Z\\\\d]*(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n        '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n      ].join('|'), 'g');\n      const stream = fs.createWriteStream(process.env.DEBUG_FILE);\n      (debug as any).log = (data: string) => {\n        stream.write(data.replace(ansiRegex, ''));\n        stream.write('\\n');\n      };\n    }\n  }\n\n  log(name: LogName, message: string | Error | object) {\n    let cachedDebugger = this._debuggers.get(name);\n    if (!cachedDebugger) {\n      cachedDebugger = debug(`pw:${name}`);\n      this._debuggers.set(name, cachedDebugger);\n      (cachedDebugger as any).color = debugLoggerColorMap[name] || 0;\n    }\n    cachedDebugger(message);\n  }\n\n  isEnabled(name: LogName) {\n    return debug.enabled(`pw:${name}`);\n  }\n}\n\nexport const debugLogger = new DebugLogger();\n\nconst kLogCount = 150;\nexport class RecentLogsCollector {\n  private _logs: string[] = [];\n\n  log(message: string) {\n    this._logs.push(message);\n    if (this._logs.length === kLogCount * 2)\n      this._logs.splice(0, kLogCount);\n  }\n\n  recentLogs(): string[] {\n    if (this._logs.length > kLogCount)\n      return this._logs.slice(-kLogCount);\n    return this._logs;\n  }\n}\n","/**\n * The MIT License (MIT)\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Copyright (c) 2016-2023 Isaac Z. Schlueter i@izs.me, James Talmage james@talmage.io (github.com/jamestalmage), and\n * Contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the\n * Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nexport type RawStack = string[];\n\nexport type StackFrame = {\n  file: string,\n  line: number,\n  column: number,\n  function?: string,\n};\n\nexport function captureRawStack(): RawStack {\n  const stackTraceLimit = Error.stackTraceLimit;\n  Error.stackTraceLimit = 50;\n  const error = new Error();\n  const stack = error.stack || '';\n  Error.stackTraceLimit = stackTraceLimit;\n  return stack.split('\\n');\n}\n\nexport function parseStackFrame(text: string, pathSeparator: string, showInternalStackFrames: boolean): StackFrame | null {\n  const match = text && text.match(re);\n  if (!match)\n    return null;\n\n  let fname = match[2];\n  let file = match[7];\n  if (!file)\n    return null;\n  if (!showInternalStackFrames && (file.startsWith('internal') || file.startsWith('node:')))\n    return null;\n\n  const line = match[8];\n  const column = match[9];\n  const closeParen = match[11] === ')';\n\n  const frame: StackFrame = {\n    file: '',\n    line: 0,\n    column: 0,\n  };\n\n  if (line)\n    frame.line = Number(line);\n\n  if (column)\n    frame.column = Number(column);\n\n  if (closeParen && file) {\n    // make sure parens are balanced\n    // if we have a file like \"asdf) [as foo] (xyz.js\", then odds are\n    // that the fname should be += \" (asdf) [as foo]\" and the file\n    // should be just \"xyz.js\"\n    // walk backwards from the end to find the last unbalanced (\n    let closes = 0;\n    for (let i = file.length - 1; i > 0; i--) {\n      if (file.charAt(i) === ')') {\n        closes++;\n      } else if (file.charAt(i) === '(' && file.charAt(i - 1) === ' ') {\n        closes--;\n        if (closes === -1 && file.charAt(i - 1) === ' ') {\n          const before = file.slice(0, i - 1);\n          const after = file.slice(i + 1);\n          file = after;\n          fname += ` (${before}`;\n          break;\n        }\n      }\n    }\n  }\n\n  if (fname) {\n    const methodMatch = fname.match(methodRe);\n    if (methodMatch)\n      fname = methodMatch[1];\n  }\n\n  if (file) {\n    if (file.startsWith('file://'))\n      file = fileURLToPath(file, pathSeparator);\n    frame.file = file;\n  }\n\n  if (fname)\n    frame.function = fname;\n\n  return frame;\n}\n\nexport function rewriteErrorMessage<E extends Error>(e: E, newMessage: string): E {\n  const lines: string[] = (e.stack?.split('\\n') || []).filter(l => l.startsWith('    at '));\n  e.message = newMessage;\n  const errorTitle = `${e.name}: ${e.message}`;\n  if (lines.length)\n    e.stack = `${errorTitle}\\n${lines.join('\\n')}`;\n  return e;\n}\n\nexport function stringifyStackFrames(frames: StackFrame[]): string[] {\n  const stackLines: string[] = [];\n  for (const frame of frames) {\n    if (frame.function)\n      stackLines.push(`    at ${frame.function} (${frame.file}:${frame.line}:${frame.column})`);\n    else\n      stackLines.push(`    at ${frame.file}:${frame.line}:${frame.column}`);\n  }\n  return stackLines;\n}\n\nexport function splitErrorMessage(message: string): { name: string, message: string } {\n  const separationIdx = message.indexOf(':');\n  return {\n    name: separationIdx !== -1 ? message.slice(0, separationIdx) : '',\n    message: separationIdx !== -1 && separationIdx + 2 <= message.length ? message.substring(separationIdx + 2) : message,\n  };\n}\n\nexport function parseErrorStack(stack: string, pathSeparator: string, showInternalStackFrames: boolean = false): {\n  message: string;\n  stackLines: string[];\n  location?: StackFrame;\n} {\n  const lines = stack.split('\\n');\n  let firstStackLine = lines.findIndex(line => line.startsWith('    at '));\n  if (firstStackLine === -1)\n    firstStackLine = lines.length;\n  const message = lines.slice(0, firstStackLine).join('\\n');\n  const stackLines = lines.slice(firstStackLine);\n  let location: StackFrame | undefined;\n  for (const line of stackLines) {\n    const frame = parseStackFrame(line, pathSeparator, showInternalStackFrames);\n    if (!frame || !frame.file)\n      continue;\n    if (belongsToNodeModules(frame.file, pathSeparator))\n      continue;\n    location = { file: frame.file, column: frame.column || 0, line: frame.line || 0 };\n    break;\n  }\n  return { message, stackLines, location };\n}\n\nfunction belongsToNodeModules(file: string, pathSeparator: string) {\n  return file.includes(`${pathSeparator}node_modules${pathSeparator}`);\n}\n\nconst re = new RegExp('^' +\n  // Sometimes we strip out the '    at' because it's noisy\n  '(?:\\\\s*at )?' +\n  // $1 = ctor if 'new'\n  '(?:(new) )?' +\n  // $2 = function name (can be literally anything)\n  // May contain method at the end as [as xyz]\n  '(?:(.*?) \\\\()?' +\n  // (eval at <anonymous> (file.js:1:1),\n  // $3 = eval origin\n  // $4:$5:$6 are eval file/line/col, but not normally reported\n  '(?:eval at ([^ ]+) \\\\((.+?):(\\\\d+):(\\\\d+)\\\\), )?' +\n  // file:line:col\n  // $7:$8:$9\n  // $10 = 'native' if native\n  '(?:(.+?):(\\\\d+):(\\\\d+)|(native))' +\n  // maybe close the paren, then end\n  // if $11 is ), then we only allow balanced parens in the filename\n  // any imbalance is placed on the fname.  This is a heuristic, and\n  // bound to be incorrect in some edge cases.  The bet is that\n  // having weird characters in method names is more common than\n  // having weird characters in filenames, which seems reasonable.\n  '(\\\\)?)$'\n);\n\nconst methodRe = /^(.*?) \\[as (.*?)\\]$/;\n\nfunction fileURLToPath(fileUrl: string, pathSeparator: string): string {\n  if (!fileUrl.startsWith('file://'))\n    return fileUrl;\n\n  let path = decodeURIComponent(fileUrl.slice(7));\n  if (path.startsWith('/') && /^[a-zA-Z]:/.test(path.slice(1)))\n    path = path.slice(1);\n\n  return path.replace(/\\//g, pathSeparator);\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { captureRawStack } from './stackTrace';\n\nexport class ManualPromise<T = void> extends Promise<T> {\n  private _resolve!: (t: T) => void;\n  private _reject!: (e: Error) => void;\n  private _isDone: boolean;\n\n  constructor() {\n    let resolve: (t: T) => void;\n    let reject: (e: Error) => void;\n    super((f, r) => {\n      resolve = f;\n      reject = r;\n    });\n    this._isDone = false;\n    this._resolve = resolve!;\n    this._reject = reject!;\n  }\n\n  isDone() {\n    return this._isDone;\n  }\n\n  resolve(t: T) {\n    this._isDone = true;\n    this._resolve(t);\n  }\n\n  reject(e: Error) {\n    this._isDone = true;\n    this._reject(e);\n  }\n\n  static override get [Symbol.species]() {\n    return Promise;\n  }\n\n  override get [Symbol.toStringTag]() {\n    return 'ManualPromise';\n  }\n}\n\nexport class LongStandingScope {\n  private _terminateError: Error | undefined;\n  private _closeError: Error | undefined;\n  private _terminatePromises = new Map<ManualPromise<Error>, string[]>();\n  private _isClosed = false;\n\n  reject(error: Error) {\n    this._isClosed = true;\n    this._terminateError = error;\n    for (const p of this._terminatePromises.keys())\n      p.resolve(error);\n  }\n\n  close(error: Error) {\n    this._isClosed = true;\n    this._closeError = error;\n    for (const [p, frames] of this._terminatePromises)\n      p.resolve(cloneError(error, frames));\n  }\n\n  isClosed() {\n    return this._isClosed;\n  }\n\n  static async raceMultiple<T>(scopes: LongStandingScope[], promise: Promise<T>): Promise<T> {\n    return Promise.race(scopes.map(s => s.race(promise)));\n  }\n\n  async race<T>(promise: Promise<T> | Promise<T>[]): Promise<T> {\n    return this._race(Array.isArray(promise) ? promise : [promise], false) as Promise<T>;\n  }\n\n  async safeRace<T>(promise: Promise<T>, defaultValue?: T): Promise<T> {\n    return this._race([promise], true, defaultValue);\n  }\n\n  private async _race(promises: Promise<any>[], safe: boolean, defaultValue?: any): Promise<any> {\n    const terminatePromise = new ManualPromise<Error>();\n    const frames = captureRawStack();\n    if (this._terminateError)\n      terminatePromise.resolve(this._terminateError);\n    if (this._closeError)\n      terminatePromise.resolve(cloneError(this._closeError, frames));\n    this._terminatePromises.set(terminatePromise, frames);\n    try {\n      return await Promise.race([\n        terminatePromise.then(e => safe ? defaultValue : Promise.reject(e)),\n        ...promises\n      ]);\n    } finally {\n      this._terminatePromises.delete(terminatePromise);\n    }\n  }\n}\n\nfunction cloneError(error: Error, frames: string[]) {\n  const clone = new Error();\n  clone.name = error.name;\n  clone.message = error.message;\n  clone.stack = [error.name + ':' + error.message, ...frames].join('\\n');\n  return clone;\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\n\nlet didFailToReadOSRelease = false;\nlet osRelease: {\n  id: string,\n  version: string,\n} | undefined;\n\nexport function getLinuxDistributionInfoSync(): { id: string, version: string } | undefined {\n  if (process.platform !== 'linux')\n    return undefined;\n  if (!osRelease && !didFailToReadOSRelease) {\n    try {\n      // List of /etc/os-release values for different distributions could be\n      // found here: https://gist.github.com/aslushnikov/8ceddb8288e4cf9db3039c02e0f4fb75\n      const osReleaseText = fs.readFileSync('/etc/os-release', 'utf8');\n      const fields = parseOSReleaseText(osReleaseText);\n      osRelease = {\n        id: fields.get('id') ?? '',\n        version: fields.get('version_id') ?? '',\n      };\n    } catch (e) {\n      didFailToReadOSRelease = true;\n    }\n  }\n  return osRelease;\n}\n\nfunction parseOSReleaseText(osReleaseText: string): Map<string, string> {\n  const fields = new Map();\n  for (const line of osReleaseText.split('\\n')) {\n    const tokens = line.split('=');\n    const name = tokens.shift();\n    let value = tokens.join('=').trim();\n    if (value.startsWith('\"') && value.endsWith('\"'))\n      value = value.substring(1, value.length - 1);\n    if (!name)\n      continue;\n    fields.set(name.toLowerCase(), value);\n  }\n  return fields;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { execSync } from 'child_process';\nimport os from 'os';\n\nimport { getLinuxDistributionInfoSync } from '../utils/linuxUtils';\n\nlet cachedUserAgent: string | undefined;\n\nexport function getUserAgent(): string {\n  if (cachedUserAgent)\n    return cachedUserAgent;\n  try {\n    cachedUserAgent = determineUserAgent();\n  } catch (e) {\n    cachedUserAgent = 'Playwright/unknown';\n  }\n  return cachedUserAgent;\n}\n\nfunction determineUserAgent(): string {\n  let osIdentifier = 'unknown';\n  let osVersion = 'unknown';\n  if (process.platform === 'win32') {\n    const version = os.release().split('.');\n    osIdentifier = 'windows';\n    osVersion = `${version[0]}.${version[1]}`;\n  } else if (process.platform === 'darwin') {\n    const version = execSync('sw_vers -productVersion', { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim().split('.');\n    osIdentifier = 'macOS';\n    osVersion = `${version[0]}.${version[1]}`;\n  } else if (process.platform === 'linux') {\n    const distroInfo = getLinuxDistributionInfoSync();\n    if (distroInfo) {\n      osIdentifier = distroInfo.id || 'linux';\n      osVersion = distroInfo.version || 'unknown';\n    } else {\n      // Linux distribution without /etc/os-release.\n      // Default to linux/unknown.\n      osIdentifier = 'linux';\n    }\n  }\n  const additionalTokens = [];\n  if (process.env.CI)\n    additionalTokens.push('CI/1');\n  const serializedTokens = additionalTokens.length ? ' ' + additionalTokens.join(' ') : '';\n\n  const { embedderName, embedderVersion } = getEmbedderName();\n  return `Playwright/${getPlaywrightVersion()} (${os.arch()}; ${osIdentifier} ${osVersion}) ${embedderName}/${embedderVersion}${serializedTokens}`;\n}\n\nexport function getEmbedderName(): { embedderName: string, embedderVersion: string } {\n  let embedderName = 'unknown';\n  let embedderVersion = 'unknown';\n  if (!process.env.PW_LANG_NAME) {\n    embedderName = 'node';\n    embedderVersion = process.version.substring(1).split('.').slice(0, 2).join('.');\n  } else if (['node', 'python', 'java', 'csharp'].includes(process.env.PW_LANG_NAME)) {\n    embedderName = process.env.PW_LANG_NAME;\n    embedderVersion = process.env.PW_LANG_NAME_VERSION ?? 'unknown';\n  }\n  return { embedderName, embedderVersion };\n}\n\nexport function getPlaywrightVersion(majorMinorOnly = false): string {\n  const version = process.env.PW_VERSION_OVERRIDE || require('./../../../package.json').version;\n  return majorMinorOnly ? version.split('.').slice(0, 2).join('.') : version;\n}\n","// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n  if (fn && cb) return wrappy(fn)(cb)\n\n  if (typeof fn !== 'function')\n    throw new TypeError('need wrapper function')\n\n  Object.keys(fn).forEach(function (k) {\n    wrapper[k] = fn[k]\n  })\n\n  return wrapper\n\n  function wrapper() {\n    var args = new Array(arguments.length)\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n    var ret = fn.apply(this, args)\n    var cb = args[args.length-1]\n    if (typeof ret === 'function' && ret !== cb) {\n      Object.keys(cb).forEach(function (k) {\n        ret[k] = cb[k]\n      })\n    }\n    return ret\n  }\n}\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n  Object.defineProperty(Function.prototype, 'once', {\n    value: function () {\n      return once(this)\n    },\n    configurable: true\n  })\n\n  Object.defineProperty(Function.prototype, 'onceStrict', {\n    value: function () {\n      return onceStrict(this)\n    },\n    configurable: true\n  })\n})\n\nfunction once (fn) {\n  var f = function () {\n    if (f.called) return f.value\n    f.called = true\n    return f.value = fn.apply(this, arguments)\n  }\n  f.called = false\n  return f\n}\n\nfunction onceStrict (fn) {\n  var f = function () {\n    if (f.called)\n      throw new Error(f.onceError)\n    f.called = true\n    return f.value = fn.apply(this, arguments)\n  }\n  var name = fn.name || 'Function wrapped with `once`'\n  f.onceError = name + \" shouldn't be called more than once\"\n  f.called = false\n  return f\n}\n","var once = require('once');\n\nvar noop = function() {};\n\nvar isRequest = function(stream) {\n\treturn stream.setHeader && typeof stream.abort === 'function';\n};\n\nvar isChildProcess = function(stream) {\n\treturn stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3\n};\n\nvar eos = function(stream, opts, callback) {\n\tif (typeof opts === 'function') return eos(stream, null, opts);\n\tif (!opts) opts = {};\n\n\tcallback = once(callback || noop);\n\n\tvar ws = stream._writableState;\n\tvar rs = stream._readableState;\n\tvar readable = opts.readable || (opts.readable !== false && stream.readable);\n\tvar writable = opts.writable || (opts.writable !== false && stream.writable);\n\tvar cancelled = false;\n\n\tvar onlegacyfinish = function() {\n\t\tif (!stream.writable) onfinish();\n\t};\n\n\tvar onfinish = function() {\n\t\twritable = false;\n\t\tif (!readable) callback.call(stream);\n\t};\n\n\tvar onend = function() {\n\t\treadable = false;\n\t\tif (!writable) callback.call(stream);\n\t};\n\n\tvar onexit = function(exitCode) {\n\t\tcallback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);\n\t};\n\n\tvar onerror = function(err) {\n\t\tcallback.call(stream, err);\n\t};\n\n\tvar onclose = function() {\n\t\tprocess.nextTick(onclosenexttick);\n\t};\n\n\tvar onclosenexttick = function() {\n\t\tif (cancelled) return;\n\t\tif (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));\n\t\tif (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));\n\t};\n\n\tvar onrequest = function() {\n\t\tstream.req.on('finish', onfinish);\n\t};\n\n\tif (isRequest(stream)) {\n\t\tstream.on('complete', onfinish);\n\t\tstream.on('abort', onclose);\n\t\tif (stream.req) onrequest();\n\t\telse stream.on('request', onrequest);\n\t} else if (writable && !ws) { // legacy streams\n\t\tstream.on('end', onlegacyfinish);\n\t\tstream.on('close', onlegacyfinish);\n\t}\n\n\tif (isChildProcess(stream)) stream.on('exit', onexit);\n\n\tstream.on('end', onend);\n\tstream.on('finish', onfinish);\n\tif (opts.error !== false) stream.on('error', onerror);\n\tstream.on('close', onclose);\n\n\treturn function() {\n\t\tcancelled = true;\n\t\tstream.removeListener('complete', onfinish);\n\t\tstream.removeListener('abort', onclose);\n\t\tstream.removeListener('request', onrequest);\n\t\tif (stream.req) stream.req.removeListener('finish', onfinish);\n\t\tstream.removeListener('end', onlegacyfinish);\n\t\tstream.removeListener('close', onlegacyfinish);\n\t\tstream.removeListener('finish', onfinish);\n\t\tstream.removeListener('exit', onexit);\n\t\tstream.removeListener('end', onend);\n\t\tstream.removeListener('error', onerror);\n\t\tstream.removeListener('close', onclose);\n\t};\n};\n\nmodule.exports = eos;\n","var once = require('once')\nvar eos = require('end-of-stream')\nvar fs\n\ntry {\n  fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes\n} catch (e) {}\n\nvar noop = function () {}\nvar ancient = /^v?\\.0/.test(process.version)\n\nvar isFn = function (fn) {\n  return typeof fn === 'function'\n}\n\nvar isFS = function (stream) {\n  if (!ancient) return false // newer node version do not need to care about fs is a special way\n  if (!fs) return false // browser\n  return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)\n}\n\nvar isRequest = function (stream) {\n  return stream.setHeader && isFn(stream.abort)\n}\n\nvar destroyer = function (stream, reading, writing, callback) {\n  callback = once(callback)\n\n  var closed = false\n  stream.on('close', function () {\n    closed = true\n  })\n\n  eos(stream, {readable: reading, writable: writing}, function (err) {\n    if (err) return callback(err)\n    closed = true\n    callback()\n  })\n\n  var destroyed = false\n  return function (err) {\n    if (closed) return\n    if (destroyed) return\n    destroyed = true\n\n    if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks\n    if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want\n\n    if (isFn(stream.destroy)) return stream.destroy()\n\n    callback(err || new Error('stream was destroyed'))\n  }\n}\n\nvar call = function (fn) {\n  fn()\n}\n\nvar pipe = function (from, to) {\n  return from.pipe(to)\n}\n\nvar pump = function () {\n  var streams = Array.prototype.slice.call(arguments)\n  var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop\n\n  if (Array.isArray(streams[0])) streams = streams[0]\n  if (streams.length < 2) throw new Error('pump requires two streams per minimum')\n\n  var error\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1\n    var writing = i > 0\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err\n      if (err) destroys.forEach(call)\n      if (reading) return\n      destroys.forEach(call)\n      callback(error)\n    })\n  })\n\n  return streams.reduce(pipe)\n}\n\nmodule.exports = pump\n","'use strict';\nconst {PassThrough: PassThroughStream} = require('stream');\n\nmodule.exports = options => {\n\toptions = {...options};\n\n\tconst {array} = options;\n\tlet {encoding} = options;\n\tconst isBuffer = encoding === 'buffer';\n\tlet objectMode = false;\n\n\tif (array) {\n\t\tobjectMode = !(encoding || isBuffer);\n\t} else {\n\t\tencoding = encoding || 'utf8';\n\t}\n\n\tif (isBuffer) {\n\t\tencoding = null;\n\t}\n\n\tconst stream = new PassThroughStream({objectMode});\n\n\tif (encoding) {\n\t\tstream.setEncoding(encoding);\n\t}\n\n\tlet length = 0;\n\tconst chunks = [];\n\n\tstream.on('data', chunk => {\n\t\tchunks.push(chunk);\n\n\t\tif (objectMode) {\n\t\t\tlength = chunks.length;\n\t\t} else {\n\t\t\tlength += chunk.length;\n\t\t}\n\t});\n\n\tstream.getBufferedValue = () => {\n\t\tif (array) {\n\t\t\treturn chunks;\n\t\t}\n\n\t\treturn isBuffer ? Buffer.concat(chunks, length) : chunks.join('');\n\t};\n\n\tstream.getBufferedLength = () => length;\n\n\treturn stream;\n};\n","'use strict';\nconst {constants: BufferConstants} = require('buffer');\nconst pump = require('pump');\nconst bufferStream = require('./buffer-stream');\n\nclass MaxBufferError extends Error {\n\tconstructor() {\n\t\tsuper('maxBuffer exceeded');\n\t\tthis.name = 'MaxBufferError';\n\t}\n}\n\nasync function getStream(inputStream, options) {\n\tif (!inputStream) {\n\t\treturn Promise.reject(new Error('Expected a stream'));\n\t}\n\n\toptions = {\n\t\tmaxBuffer: Infinity,\n\t\t...options\n\t};\n\n\tconst {maxBuffer} = options;\n\n\tlet stream;\n\tawait new Promise((resolve, reject) => {\n\t\tconst rejectPromise = error => {\n\t\t\t// Don't retrieve an oversized buffer.\n\t\t\tif (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {\n\t\t\t\terror.bufferedData = stream.getBufferedValue();\n\t\t\t}\n\n\t\t\treject(error);\n\t\t};\n\n\t\tstream = pump(inputStream, bufferStream(options), error => {\n\t\t\tif (error) {\n\t\t\t\trejectPromise(error);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolve();\n\t\t});\n\n\t\tstream.on('data', () => {\n\t\t\tif (stream.getBufferedLength() > maxBuffer) {\n\t\t\t\trejectPromise(new MaxBufferError());\n\t\t\t}\n\t\t});\n\t});\n\n\treturn stream.getBufferedValue();\n}\n\nmodule.exports = getStream;\n// TODO: Remove this for the next major release\nmodule.exports.default = getStream;\nmodule.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});\nmodule.exports.array = (stream, options) => getStream(stream, {...options, array: true});\nmodule.exports.MaxBufferError = MaxBufferError;\n","module.exports = Pend;\n\nfunction Pend() {\n  this.pending = 0;\n  this.max = Infinity;\n  this.listeners = [];\n  this.waiting = [];\n  this.error = null;\n}\n\nPend.prototype.go = function(fn) {\n  if (this.pending < this.max) {\n    pendGo(this, fn);\n  } else {\n    this.waiting.push(fn);\n  }\n};\n\nPend.prototype.wait = function(cb) {\n  if (this.pending === 0) {\n    cb(this.error);\n  } else {\n    this.listeners.push(cb);\n  }\n};\n\nPend.prototype.hold = function() {\n  return pendHold(this);\n};\n\nfunction pendHold(self) {\n  self.pending += 1;\n  var called = false;\n  return onCb;\n  function onCb(err) {\n    if (called) throw new Error(\"callback called twice\");\n    called = true;\n    self.error = self.error || err;\n    self.pending -= 1;\n    if (self.waiting.length > 0 && self.pending < self.max) {\n      pendGo(self, self.waiting.shift());\n    } else if (self.pending === 0) {\n      var listeners = self.listeners;\n      self.listeners = [];\n      listeners.forEach(cbListener);\n    }\n  }\n  function cbListener(listener) {\n    listener(self.error);\n  }\n}\n\nfunction pendGo(self, fn) {\n  fn(pendHold(self));\n}\n","// This was adapted from https://github.com/andrewrk/node-fd-slicer by Andrew Kelley under the MIT License.\nvar fs = require('fs');\nvar util = require('util');\nvar stream = require('stream');\nvar Readable = stream.Readable;\nvar Writable = stream.Writable;\nvar PassThrough = stream.PassThrough;\nvar Pend = require('pend');\nvar EventEmitter = require('events').EventEmitter;\n\nexports.createFromBuffer = createFromBuffer;\nexports.createFromFd = createFromFd;\nexports.BufferSlicer = BufferSlicer;\nexports.FdSlicer = FdSlicer;\n\nutil.inherits(FdSlicer, EventEmitter);\nfunction FdSlicer(fd, options) {\n  options = options || {};\n  EventEmitter.call(this);\n\n  this.fd = fd;\n  this.pend = new Pend();\n  this.pend.max = 1;\n  this.refCount = 0;\n  this.autoClose = !!options.autoClose;\n}\n\nFdSlicer.prototype.read = function(buffer, offset, length, position, callback) {\n  var self = this;\n  self.pend.go(function(cb) {\n    fs.read(self.fd, buffer, offset, length, position, function(err, bytesRead, buffer) {\n      cb();\n      callback(err, bytesRead, buffer);\n    });\n  });\n};\n\nFdSlicer.prototype.write = function(buffer, offset, length, position, callback) {\n  var self = this;\n  self.pend.go(function(cb) {\n    fs.write(self.fd, buffer, offset, length, position, function(err, written, buffer) {\n      cb();\n      callback(err, written, buffer);\n    });\n  });\n};\n\nFdSlicer.prototype.createReadStream = function(options) {\n  return new ReadStream(this, options);\n};\n\nFdSlicer.prototype.createWriteStream = function(options) {\n  return new WriteStream(this, options);\n};\n\nFdSlicer.prototype.ref = function() {\n  this.refCount += 1;\n};\n\nFdSlicer.prototype.unref = function() {\n  var self = this;\n  self.refCount -= 1;\n\n  if (self.refCount > 0) return;\n  if (self.refCount < 0) throw new Error(\"invalid unref\");\n\n  if (self.autoClose) {\n    fs.close(self.fd, onCloseDone);\n  }\n\n  function onCloseDone(err) {\n    if (err) {\n      self.emit('error', err);\n    } else {\n      self.emit('close');\n    }\n  }\n};\n\nutil.inherits(ReadStream, Readable);\nfunction ReadStream(context, options) {\n  options = options || {};\n  Readable.call(this, options);\n\n  this.context = context;\n  this.context.ref();\n\n  this.start = options.start || 0;\n  this.endOffset = options.end;\n  this.pos = this.start;\n  this.destroyed = false;\n}\n\nReadStream.prototype._read = function(n) {\n  var self = this;\n  if (self.destroyed) return;\n\n  var toRead = Math.min(self._readableState.highWaterMark, n);\n  if (self.endOffset != null) {\n    toRead = Math.min(toRead, self.endOffset - self.pos);\n  }\n  if (toRead <= 0) {\n    self.destroyed = true;\n    self.push(null);\n    self.context.unref();\n    return;\n  }\n  self.context.pend.go(function(cb) {\n    if (self.destroyed) return cb();\n    var buffer = Buffer.allocUnsafe(toRead);\n    fs.read(self.context.fd, buffer, 0, toRead, self.pos, function(err, bytesRead) {\n      if (err) {\n        self.destroy(err);\n      } else if (bytesRead === 0) {\n        self.destroyed = true;\n        self.push(null);\n        self.context.unref();\n      } else {\n        self.pos += bytesRead;\n        self.push(buffer.slice(0, bytesRead));\n      }\n      cb();\n    });\n  });\n};\n\nReadStream.prototype.destroy = function(err) {\n  if (this.destroyed) return;\n  err = err || new Error(\"stream destroyed\");\n  this.destroyed = true;\n  this.emit('error', err);\n  this.context.unref();\n};\n\nutil.inherits(WriteStream, Writable);\nfunction WriteStream(context, options) {\n  options = options || {};\n  Writable.call(this, options);\n\n  this.context = context;\n  this.context.ref();\n\n  this.start = options.start || 0;\n  this.endOffset = (options.end == null) ? Infinity : +options.end;\n  this.bytesWritten = 0;\n  this.pos = this.start;\n  this.destroyed = false;\n\n  this.on('finish', this.destroy.bind(this));\n}\n\nWriteStream.prototype._write = function(buffer, encoding, callback) {\n  var self = this;\n  if (self.destroyed) return;\n\n  if (self.pos + buffer.length > self.endOffset) {\n    var err = new Error(\"maximum file length exceeded\");\n    err.code = 'ETOOBIG';\n    self.destroy();\n    callback(err);\n    return;\n  }\n  self.context.pend.go(function(cb) {\n    if (self.destroyed) return cb();\n    fs.write(self.context.fd, buffer, 0, buffer.length, self.pos, function(err, bytes) {\n      if (err) {\n        self.destroy();\n        cb();\n        callback(err);\n      } else {\n        self.bytesWritten += bytes;\n        self.pos += bytes;\n        self.emit('progress');\n        cb();\n        callback();\n      }\n    });\n  });\n};\n\nWriteStream.prototype.destroy = function() {\n  if (this.destroyed) return;\n  this.destroyed = true;\n  this.context.unref();\n};\n\nutil.inherits(BufferSlicer, EventEmitter);\nfunction BufferSlicer(buffer, options) {\n  EventEmitter.call(this);\n\n  options = options || {};\n  this.refCount = 0;\n  this.buffer = buffer;\n  this.maxChunkSize = options.maxChunkSize || Number.MAX_SAFE_INTEGER;\n}\n\nBufferSlicer.prototype.read = function(buffer, offset, length, position, callback) {\n  if (!(0 <= offset && offset <= buffer.length)) throw new RangeError(\"offset outside buffer: 0 <= \" + offset + \" <= \" + buffer.length);\n  if (position < 0) throw new RangeError(\"position is negative: \" + position);\n  if (offset + length > buffer.length) {\n    // The caller's buffer can't hold all the bytes they're trying to read.\n    // Clamp the length instead of giving an error.\n    // The callback will be informed of fewer than expected bytes written.\n    length = buffer.length - offset;\n  }\n  if (position + length > this.buffer.length) {\n    // Clamp any attempt to read past the end of the source buffer.\n    length = this.buffer.length - position;\n  }\n  if (length <= 0) {\n    // After any clamping, we're fully out of bounds or otherwise have nothing to do.\n    // This isn't an error; it's just zero bytes written.\n    setImmediate(function() {\n      callback(null, 0);\n    });\n    return;\n  }\n  this.buffer.copy(buffer, offset, position, position + length);\n  setImmediate(function() {\n    callback(null, length);\n  });\n};\n\nBufferSlicer.prototype.write = function(buffer, offset, length, position, callback) {\n  buffer.copy(this.buffer, position, offset, offset + length);\n  setImmediate(function() {\n    callback(null, length, buffer);\n  });\n};\n\nBufferSlicer.prototype.createReadStream = function(options) {\n  options = options || {};\n  var readStream = new PassThrough(options);\n  readStream.destroyed = false;\n  readStream.start = options.start || 0;\n  readStream.endOffset = options.end;\n  // by the time this function returns, we'll be done.\n  readStream.pos = readStream.endOffset || this.buffer.length;\n\n  // respect the maxChunkSize option to slice up the chunk into smaller pieces.\n  var entireSlice = this.buffer.slice(readStream.start, readStream.pos);\n  var offset = 0;\n  while (true) {\n    var nextOffset = offset + this.maxChunkSize;\n    if (nextOffset >= entireSlice.length) {\n      // last chunk\n      if (offset < entireSlice.length) {\n        readStream.write(entireSlice.slice(offset, entireSlice.length));\n      }\n      break;\n    }\n    readStream.write(entireSlice.slice(offset, nextOffset));\n    offset = nextOffset;\n  }\n\n  readStream.end();\n  readStream.destroy = function() {\n    readStream.destroyed = true;\n  };\n  return readStream;\n};\n\nBufferSlicer.prototype.createWriteStream = function(options) {\n  var bufferSlicer = this;\n  options = options || {};\n  var writeStream = new Writable(options);\n  writeStream.start = options.start || 0;\n  writeStream.endOffset = (options.end == null) ? this.buffer.length : +options.end;\n  writeStream.bytesWritten = 0;\n  writeStream.pos = writeStream.start;\n  writeStream.destroyed = false;\n  writeStream._write = function(buffer, encoding, callback) {\n    if (writeStream.destroyed) return;\n\n    var end = writeStream.pos + buffer.length;\n    if (end > writeStream.endOffset) {\n      var err = new Error(\"maximum file length exceeded\");\n      err.code = 'ETOOBIG';\n      writeStream.destroyed = true;\n      callback(err);\n      return;\n    }\n    buffer.copy(bufferSlicer.buffer, writeStream.pos, 0, buffer.length);\n\n    writeStream.bytesWritten += buffer.length;\n    writeStream.pos = end;\n    writeStream.emit('progress');\n    callback();\n  };\n  writeStream.destroy = function() {\n    writeStream.destroyed = true;\n  };\n  return writeStream;\n};\n\nBufferSlicer.prototype.ref = function() {\n  this.refCount += 1;\n};\n\nBufferSlicer.prototype.unref = function() {\n  this.refCount -= 1;\n\n  if (this.refCount < 0) {\n    throw new Error(\"invalid unref\");\n  }\n};\n\nfunction createFromBuffer(buffer, options) {\n  return new BufferSlicer(buffer, options);\n}\n\nfunction createFromFd(fd, options) {\n  return new FdSlicer(fd, options);\n}\n","var Buffer = require('buffer').Buffer;\n\nvar CRC_TABLE = [\n  0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,\n  0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,\n  0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,\n  0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,\n  0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,\n  0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,\n  0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,\n  0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,\n  0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,\n  0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,\n  0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,\n  0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,\n  0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,\n  0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,\n  0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,\n  0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,\n  0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,\n  0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,\n  0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,\n  0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,\n  0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,\n  0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,\n  0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,\n  0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,\n  0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,\n  0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,\n  0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,\n  0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,\n  0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,\n  0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,\n  0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,\n  0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,\n  0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,\n  0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,\n  0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,\n  0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,\n  0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,\n  0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,\n  0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,\n  0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,\n  0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,\n  0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,\n  0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,\n  0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,\n  0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,\n  0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,\n  0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,\n  0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,\n  0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,\n  0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,\n  0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,\n  0x2d02ef8d\n];\n\nif (typeof Int32Array !== 'undefined') {\n  CRC_TABLE = new Int32Array(CRC_TABLE);\n}\n\nfunction ensureBuffer(input) {\n  if (Buffer.isBuffer(input)) {\n    return input;\n  }\n\n  var hasNewBufferAPI =\n      typeof Buffer.alloc === \"function\" &&\n      typeof Buffer.from === \"function\";\n\n  if (typeof input === \"number\") {\n    return hasNewBufferAPI ? Buffer.alloc(input) : new Buffer(input);\n  }\n  else if (typeof input === \"string\") {\n    return hasNewBufferAPI ? Buffer.from(input) : new Buffer(input);\n  }\n  else {\n    throw new Error(\"input must be buffer, number, or string, received \" +\n                    typeof input);\n  }\n}\n\nfunction bufferizeInt(num) {\n  var tmp = ensureBuffer(4);\n  tmp.writeInt32BE(num, 0);\n  return tmp;\n}\n\nfunction _crc32(buf, previous) {\n  buf = ensureBuffer(buf);\n  if (Buffer.isBuffer(previous)) {\n    previous = previous.readUInt32BE(0);\n  }\n  var crc = ~~previous ^ -1;\n  for (var n = 0; n < buf.length; n++) {\n    crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8);\n  }\n  return (crc ^ -1);\n}\n\nfunction crc32() {\n  return bufferizeInt(_crc32.apply(null, arguments));\n}\ncrc32.signed = function () {\n  return _crc32.apply(null, arguments);\n};\ncrc32.unsigned = function () {\n  return _crc32.apply(null, arguments) >>> 0;\n};\n\nmodule.exports = crc32;\n","var fs = require(\"fs\");\nvar zlib = require(\"zlib\");\nvar fd_slicer = require(\"./fd-slicer\");\nvar crc32 = require(\"buffer-crc32\");\nvar util = require(\"util\");\nvar EventEmitter = require(\"events\").EventEmitter;\nvar Transform = require(\"stream\").Transform;\nvar PassThrough = require(\"stream\").PassThrough;\nvar Writable = require(\"stream\").Writable;\n\nexports.open = open;\nexports.fromFd = fromFd;\nexports.fromBuffer = fromBuffer;\nexports.fromRandomAccessReader = fromRandomAccessReader;\nexports.dosDateTimeToDate = dosDateTimeToDate;\nexports.getFileNameLowLevel = getFileNameLowLevel;\nexports.validateFileName = validateFileName;\nexports.parseExtraFields = parseExtraFields;\nexports.ZipFile = ZipFile;\nexports.Entry = Entry;\nexports.LocalFileHeader = LocalFileHeader;\nexports.RandomAccessReader = RandomAccessReader;\n\nfunction open(path, options, callback) {\n  if (typeof options === \"function\") {\n    callback = options;\n    options = null;\n  }\n  if (options == null) options = {};\n  if (options.autoClose == null) options.autoClose = true;\n  if (options.lazyEntries == null) options.lazyEntries = false;\n  if (options.decodeStrings == null) options.decodeStrings = true;\n  if (options.validateEntrySizes == null) options.validateEntrySizes = true;\n  if (options.strictFileNames == null) options.strictFileNames = false;\n  if (callback == null) callback = defaultCallback;\n  fs.open(path, \"r\", function(err, fd) {\n    if (err) return callback(err);\n    fromFd(fd, options, function(err, zipfile) {\n      if (err) fs.close(fd, defaultCallback);\n      callback(err, zipfile);\n    });\n  });\n}\n\nfunction fromFd(fd, options, callback) {\n  if (typeof options === \"function\") {\n    callback = options;\n    options = null;\n  }\n  if (options == null) options = {};\n  if (options.autoClose == null) options.autoClose = false;\n  if (options.lazyEntries == null) options.lazyEntries = false;\n  if (options.decodeStrings == null) options.decodeStrings = true;\n  if (options.validateEntrySizes == null) options.validateEntrySizes = true;\n  if (options.strictFileNames == null) options.strictFileNames = false;\n  if (callback == null) callback = defaultCallback;\n  fs.fstat(fd, function(err, stats) {\n    if (err) return callback(err);\n    var reader = fd_slicer.createFromFd(fd, {autoClose: true});\n    fromRandomAccessReader(reader, stats.size, options, callback);\n  });\n}\n\nfunction fromBuffer(buffer, options, callback) {\n  if (typeof options === \"function\") {\n    callback = options;\n    options = null;\n  }\n  if (options == null) options = {};\n  options.autoClose = false;\n  if (options.lazyEntries == null) options.lazyEntries = false;\n  if (options.decodeStrings == null) options.decodeStrings = true;\n  if (options.validateEntrySizes == null) options.validateEntrySizes = true;\n  if (options.strictFileNames == null) options.strictFileNames = false;\n  // limit the max chunk size. see https://github.com/thejoshwolfe/yauzl/issues/87\n  var reader = fd_slicer.createFromBuffer(buffer, {maxChunkSize: 0x10000});\n  fromRandomAccessReader(reader, buffer.length, options, callback);\n}\n\nfunction fromRandomAccessReader(reader, totalSize, options, callback) {\n  if (typeof options === \"function\") {\n    callback = options;\n    options = null;\n  }\n  if (options == null) options = {};\n  if (options.autoClose == null) options.autoClose = true;\n  if (options.lazyEntries == null) options.lazyEntries = false;\n  if (options.decodeStrings == null) options.decodeStrings = true;\n  var decodeStrings = !!options.decodeStrings;\n  if (options.validateEntrySizes == null) options.validateEntrySizes = true;\n  if (options.strictFileNames == null) options.strictFileNames = false;\n  if (callback == null) callback = defaultCallback;\n  if (typeof totalSize !== \"number\") throw new Error(\"expected totalSize parameter to be a number\");\n  if (totalSize > Number.MAX_SAFE_INTEGER) {\n    throw new Error(\"zip file too large. only file sizes up to 2^52 are supported due to JavaScript's Number type being an IEEE 754 double.\");\n  }\n\n  // the matching unref() call is in zipfile.close()\n  reader.ref();\n\n  // eocdr means End of Central Directory Record.\n  // search backwards for the eocdr signature.\n  // the last field of the eocdr is a variable-length comment.\n  // the comment size is encoded in a 2-byte field in the eocdr, which we can't find without trudging backwards through the comment to find it.\n  // as a consequence of this design decision, it's possible to have ambiguous zip file metadata if a coherent eocdr was in the comment.\n  // we search backwards for a eocdr signature, and hope that whoever made the zip file was smart enough to forbid the eocdr signature in the comment.\n  var eocdrWithoutCommentSize = 22;\n  var zip64EocdlSize = 20; // Zip64 end of central directory locator\n  var maxCommentSize = 0xffff; // 2-byte size\n  var bufferSize = Math.min(zip64EocdlSize + eocdrWithoutCommentSize + maxCommentSize, totalSize);\n  var buffer = newBuffer(bufferSize);\n  var bufferReadStart = totalSize - buffer.length;\n  readAndAssertNoEof(reader, buffer, 0, bufferSize, bufferReadStart, function(err) {\n    if (err) return callback(err);\n    for (var i = bufferSize - eocdrWithoutCommentSize; i >= 0; i -= 1) {\n      if (buffer.readUInt32LE(i) !== 0x06054b50) continue;\n      // found eocdr\n      var eocdrBuffer = buffer.subarray(i);\n\n      // 0 - End of central directory signature = 0x06054b50\n      // 4 - Number of this disk\n      var diskNumber = eocdrBuffer.readUInt16LE(4);\n      // 6 - Disk where central directory starts\n      // 8 - Number of central directory records on this disk\n      // 10 - Total number of central directory records\n      var entryCount = eocdrBuffer.readUInt16LE(10);\n      // 12 - Size of central directory (bytes)\n      // 16 - Offset of start of central directory, relative to start of archive\n      var centralDirectoryOffset = eocdrBuffer.readUInt32LE(16);\n      // 20 - Comment length\n      var commentLength = eocdrBuffer.readUInt16LE(20);\n      var expectedCommentLength = eocdrBuffer.length - eocdrWithoutCommentSize;\n      if (commentLength !== expectedCommentLength) {\n        return callback(new Error(\"Invalid comment length. Expected: \" + expectedCommentLength + \". Found: \" + commentLength + \". Are there extra bytes at the end of the file? Or is the end of central dir signature `PK☺☻` in the comment?\"));\n      }\n      // 22 - Comment\n      // the encoding is always cp437.\n      var comment = decodeStrings ? decodeBuffer(eocdrBuffer.subarray(22), false)\n                                  : eocdrBuffer.subarray(22);\n\n      // Look for a Zip64 end of central directory locator\n      if (i - zip64EocdlSize >= 0 && buffer.readUInt32LE(i - zip64EocdlSize) === 0x07064b50) {\n        // ZIP64 format\n        var zip64EocdlBuffer = buffer.subarray(i - zip64EocdlSize, i - zip64EocdlSize + zip64EocdlSize);\n        // 0 - zip64 end of central dir locator signature = 0x07064b50\n        // 4 - number of the disk with the start of the zip64 end of central directory\n        // 8 - relative offset of the zip64 end of central directory record\n        var zip64EocdrOffset = readUInt64LE(zip64EocdlBuffer, 8);\n        // 16 - total number of disks\n\n        // ZIP64 end of central directory record\n        var zip64EocdrBuffer = newBuffer(56);\n        return readAndAssertNoEof(reader, zip64EocdrBuffer, 0, zip64EocdrBuffer.length, zip64EocdrOffset, function(err) {\n          if (err) return callback(err);\n\n          // 0 - zip64 end of central dir signature                           4 bytes  (0x06064b50)\n          if (zip64EocdrBuffer.readUInt32LE(0) !== 0x06064b50) {\n            return callback(new Error(\"invalid zip64 end of central directory record signature\"));\n          }\n          // 4 - size of zip64 end of central directory record                8 bytes\n          // 12 - version made by                                             2 bytes\n          // 14 - version needed to extract                                   2 bytes\n          // 16 - number of this disk                                         4 bytes\n          diskNumber = zip64EocdrBuffer.readUInt32LE(16);\n          if (diskNumber !== 0) {\n            // Check this only after zip64 overrides. See #118.\n            return callback(new Error(\"multi-disk zip files are not supported: found disk number: \" + diskNumber));\n          }\n          // 20 - number of the disk with the start of the central directory  4 bytes\n          // 24 - total number of entries in the central directory on this disk         8 bytes\n          // 32 - total number of entries in the central directory            8 bytes\n          entryCount = readUInt64LE(zip64EocdrBuffer, 32);\n          // 40 - size of the central directory                               8 bytes\n          // 48 - offset of start of central directory with respect to the starting disk number     8 bytes\n          centralDirectoryOffset = readUInt64LE(zip64EocdrBuffer, 48);\n          // 56 - zip64 extensible data sector                                (variable size)\n          return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes, options.strictFileNames));\n        });\n      }\n\n      // Not ZIP64 format\n      if (diskNumber !== 0) {\n        return callback(new Error(\"multi-disk zip files are not supported: found disk number: \" + diskNumber));\n      }\n      return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes, options.strictFileNames));\n\n    }\n\n    // Not a zip file.\n    callback(new Error(\"End of central directory record signature not found. Either not a zip file, or file is truncated.\"));\n  });\n}\n\nutil.inherits(ZipFile, EventEmitter);\nfunction ZipFile(reader, centralDirectoryOffset, fileSize, entryCount, comment, autoClose, lazyEntries, decodeStrings, validateEntrySizes, strictFileNames) {\n  var self = this;\n  EventEmitter.call(self);\n  self.reader = reader;\n  // forward close events\n  self.reader.on(\"error\", function(err) {\n    // error closing the fd\n    emitError(self, err);\n  });\n  self.reader.once(\"close\", function() {\n    self.emit(\"close\");\n  });\n  self.readEntryCursor = centralDirectoryOffset;\n  self.fileSize = fileSize;\n  self.entryCount = entryCount;\n  self.comment = comment;\n  self.entriesRead = 0;\n  self.autoClose = !!autoClose;\n  self.lazyEntries = !!lazyEntries;\n  self.decodeStrings = !!decodeStrings;\n  self.validateEntrySizes = !!validateEntrySizes;\n  self.strictFileNames = !!strictFileNames;\n  self.isOpen = true;\n  self.emittedError = false;\n\n  if (!self.lazyEntries) self._readEntry();\n}\nZipFile.prototype.close = function() {\n  if (!this.isOpen) return;\n  this.isOpen = false;\n  this.reader.unref();\n};\n\nfunction emitErrorAndAutoClose(self, err) {\n  if (self.autoClose) self.close();\n  emitError(self, err);\n}\nfunction emitError(self, err) {\n  if (self.emittedError) return;\n  self.emittedError = true;\n  self.emit(\"error\", err);\n}\n\nZipFile.prototype.readEntry = function() {\n  if (!this.lazyEntries) throw new Error(\"readEntry() called without lazyEntries:true\");\n  this._readEntry();\n};\nZipFile.prototype._readEntry = function() {\n  var self = this;\n  if (self.entryCount === self.entriesRead) {\n    // done with metadata\n    setImmediate(function() {\n      if (self.autoClose) self.close();\n      if (self.emittedError) return;\n      self.emit(\"end\");\n    });\n    return;\n  }\n  if (self.emittedError) return;\n  var buffer = newBuffer(46);\n  readAndAssertNoEof(self.reader, buffer, 0, buffer.length, self.readEntryCursor, function(err) {\n    if (err) return emitErrorAndAutoClose(self, err);\n    if (self.emittedError) return;\n    var entry = new Entry();\n    // 0 - Central directory file header signature\n    var signature = buffer.readUInt32LE(0);\n    if (signature !== 0x02014b50) return emitErrorAndAutoClose(self, new Error(\"invalid central directory file header signature: 0x\" + signature.toString(16)));\n    // 4 - Version made by\n    entry.versionMadeBy = buffer.readUInt16LE(4);\n    // 6 - Version needed to extract (minimum)\n    entry.versionNeededToExtract = buffer.readUInt16LE(6);\n    // 8 - General purpose bit flag\n    entry.generalPurposeBitFlag = buffer.readUInt16LE(8);\n    // 10 - Compression method\n    entry.compressionMethod = buffer.readUInt16LE(10);\n    // 12 - File last modification time\n    entry.lastModFileTime = buffer.readUInt16LE(12);\n    // 14 - File last modification date\n    entry.lastModFileDate = buffer.readUInt16LE(14);\n    // 16 - CRC-32\n    entry.crc32 = buffer.readUInt32LE(16);\n    // 20 - Compressed size\n    entry.compressedSize = buffer.readUInt32LE(20);\n    // 24 - Uncompressed size\n    entry.uncompressedSize = buffer.readUInt32LE(24);\n    // 28 - File name length (n)\n    entry.fileNameLength = buffer.readUInt16LE(28);\n    // 30 - Extra field length (m)\n    entry.extraFieldLength = buffer.readUInt16LE(30);\n    // 32 - File comment length (k)\n    entry.fileCommentLength = buffer.readUInt16LE(32);\n    // 34 - Disk number where file starts\n    // 36 - Internal file attributes\n    entry.internalFileAttributes = buffer.readUInt16LE(36);\n    // 38 - External file attributes\n    entry.externalFileAttributes = buffer.readUInt32LE(38);\n    // 42 - Relative offset of local file header\n    entry.relativeOffsetOfLocalHeader = buffer.readUInt32LE(42);\n\n    if (entry.generalPurposeBitFlag & 0x40) return emitErrorAndAutoClose(self, new Error(\"strong encryption is not supported\"));\n\n    self.readEntryCursor += 46;\n\n    buffer = newBuffer(entry.fileNameLength + entry.extraFieldLength + entry.fileCommentLength);\n    readAndAssertNoEof(self.reader, buffer, 0, buffer.length, self.readEntryCursor, function(err) {\n      if (err) return emitErrorAndAutoClose(self, err);\n      if (self.emittedError) return;\n      // 46 - File name\n      entry.fileNameRaw = buffer.subarray(0, entry.fileNameLength);\n      // 46+n - Extra field\n      var fileCommentStart = entry.fileNameLength + entry.extraFieldLength;\n      entry.extraFieldRaw = buffer.subarray(entry.fileNameLength, fileCommentStart);\n      // 46+n+m - File comment\n      entry.fileCommentRaw = buffer.subarray(fileCommentStart, fileCommentStart + entry.fileCommentLength);\n\n      // Parse the extra fields, which we need for processing other fields.\n      try {\n        entry.extraFields = parseExtraFields(entry.extraFieldRaw);\n      } catch (err) {\n        return emitErrorAndAutoClose(self, err);\n      }\n\n      // Interpret strings according to bit flags, extra fields, and options.\n      if (self.decodeStrings) {\n        var isUtf8 = (entry.generalPurposeBitFlag & 0x800) !== 0;\n        entry.fileComment = decodeBuffer(entry.fileCommentRaw, isUtf8);\n        entry.fileName = getFileNameLowLevel(entry.generalPurposeBitFlag, entry.fileNameRaw, entry.extraFields, self.strictFileNames);\n        var errorMessage = validateFileName(entry.fileName);\n        if (errorMessage != null) return emitErrorAndAutoClose(self, new Error(errorMessage));\n      } else {\n        entry.fileComment = entry.fileCommentRaw;\n        entry.fileName = entry.fileNameRaw;\n      }\n      // Maintain API compatibility. See https://github.com/thejoshwolfe/yauzl/issues/47\n      entry.comment = entry.fileComment;\n\n      self.readEntryCursor += buffer.length;\n      self.entriesRead += 1;\n\n      // Check for the Zip64 Extended Information Extra Field.\n      for (var i = 0; i < entry.extraFields.length; i++) {\n        var extraField = entry.extraFields[i];\n        if (extraField.id !== 0x0001) continue;\n        // Found it.\n\n        var zip64EiefBuffer = extraField.data;\n        var index = 0;\n        // 0 - Original Size          8 bytes\n        if (entry.uncompressedSize === 0xffffffff) {\n          if (index + 8 > zip64EiefBuffer.length) {\n            return emitErrorAndAutoClose(self, new Error(\"zip64 extended information extra field does not include uncompressed size\"));\n          }\n          entry.uncompressedSize = readUInt64LE(zip64EiefBuffer, index);\n          index += 8;\n        }\n        // 8 - Compressed Size        8 bytes\n        if (entry.compressedSize === 0xffffffff) {\n          if (index + 8 > zip64EiefBuffer.length) {\n            return emitErrorAndAutoClose(self, new Error(\"zip64 extended information extra field does not include compressed size\"));\n          }\n          entry.compressedSize = readUInt64LE(zip64EiefBuffer, index);\n          index += 8;\n        }\n        // 16 - Relative Header Offset 8 bytes\n        if (entry.relativeOffsetOfLocalHeader === 0xffffffff) {\n          if (index + 8 > zip64EiefBuffer.length) {\n            return emitErrorAndAutoClose(self, new Error(\"zip64 extended information extra field does not include relative header offset\"));\n          }\n          entry.relativeOffsetOfLocalHeader = readUInt64LE(zip64EiefBuffer, index);\n          index += 8;\n        }\n        // 24 - Disk Start Number      4 bytes\n\n        break;\n      }\n\n      // validate file size\n      if (self.validateEntrySizes && entry.compressionMethod === 0) {\n        var expectedCompressedSize = entry.uncompressedSize;\n        if (entry.isEncrypted()) {\n          // traditional encryption prefixes the file data with a header\n          expectedCompressedSize += 12;\n        }\n        if (entry.compressedSize !== expectedCompressedSize) {\n          var msg = \"compressed/uncompressed size mismatch for stored file: \" + entry.compressedSize + \" != \" + entry.uncompressedSize;\n          return emitErrorAndAutoClose(self, new Error(msg));\n        }\n      }\n\n      self.emit(\"entry\", entry);\n\n      if (!self.lazyEntries) self._readEntry();\n    });\n  });\n};\n\nZipFile.prototype.openReadStream = function(entry, options, callback) {\n  var self = this;\n  // parameter validation\n  var relativeStart = 0;\n  var relativeEnd = entry.compressedSize;\n  if (callback == null) {\n    callback = options;\n    options = null;\n  }\n  if (options == null) {\n    options = {};\n  } else {\n    // validate options that the caller has no excuse to get wrong\n    if (options.decrypt != null) {\n      if (!entry.isEncrypted()) {\n        throw new Error(\"options.decrypt can only be specified for encrypted entries\");\n      }\n      if (options.decrypt !== false) throw new Error(\"invalid options.decrypt value: \" + options.decrypt);\n      if (entry.isCompressed()) {\n        if (options.decompress !== false) throw new Error(\"entry is encrypted and compressed, and options.decompress !== false\");\n      }\n    }\n    if (options.decompress != null) {\n      if (!entry.isCompressed()) {\n        throw new Error(\"options.decompress can only be specified for compressed entries\");\n      }\n      if (!(options.decompress === false || options.decompress === true)) {\n        throw new Error(\"invalid options.decompress value: \" + options.decompress);\n      }\n    }\n    if (options.start != null || options.end != null) {\n      if (entry.isCompressed() && options.decompress !== false) {\n        throw new Error(\"start/end range not allowed for compressed entry without options.decompress === false\");\n      }\n      if (entry.isEncrypted() && options.decrypt !== false) {\n        throw new Error(\"start/end range not allowed for encrypted entry without options.decrypt === false\");\n      }\n    }\n    if (options.start != null) {\n      relativeStart = options.start;\n      if (relativeStart < 0) throw new Error(\"options.start < 0\");\n      if (relativeStart > entry.compressedSize) throw new Error(\"options.start > entry.compressedSize\");\n    }\n    if (options.end != null) {\n      relativeEnd = options.end;\n      if (relativeEnd < 0) throw new Error(\"options.end < 0\");\n      if (relativeEnd > entry.compressedSize) throw new Error(\"options.end > entry.compressedSize\");\n      if (relativeEnd < relativeStart) throw new Error(\"options.end < options.start\");\n    }\n  }\n  // any further errors can either be caused by the zipfile,\n  // or were introduced in a minor version of yauzl,\n  // so should be passed to the client rather than thrown.\n  if (!self.isOpen) return callback(new Error(\"closed\"));\n  if (entry.isEncrypted()) {\n    if (options.decrypt !== false) return callback(new Error(\"entry is encrypted, and options.decrypt !== false\"));\n  }\n  var decompress;\n  if (entry.compressionMethod === 0) {\n    // 0 - The file is stored (no compression)\n    decompress = false;\n  } else if (entry.compressionMethod === 8) {\n    // 8 - The file is Deflated\n    decompress = options.decompress != null ? options.decompress : true;\n  } else {\n    return callback(new Error(\"unsupported compression method: \" + entry.compressionMethod));\n  }\n\n  self.readLocalFileHeader(entry, {minimal: true}, function(err, localFileHeader) {\n    if (err) return callback(err);\n    self.openReadStreamLowLevel(\n      localFileHeader.fileDataStart, entry.compressedSize,\n      relativeStart, relativeEnd,\n      decompress, entry.uncompressedSize,\n      callback);\n  });\n};\n\nZipFile.prototype.openReadStreamLowLevel = function(fileDataStart, compressedSize, relativeStart, relativeEnd, decompress, uncompressedSize, callback) {\n  var self = this;\n\n  var fileDataEnd = fileDataStart + compressedSize;\n  var readStream = self.reader.createReadStream({\n    start: fileDataStart + relativeStart,\n    end: fileDataStart + relativeEnd,\n  });\n  var endpointStream = readStream;\n  if (decompress) {\n    var destroyed = false;\n    var inflateFilter = zlib.createInflateRaw();\n    readStream.on(\"error\", function(err) {\n      // setImmediate here because errors can be emitted during the first call to pipe()\n      setImmediate(function() {\n        if (!destroyed) inflateFilter.emit(\"error\", err);\n      });\n    });\n    readStream.pipe(inflateFilter);\n\n    if (self.validateEntrySizes) {\n      endpointStream = new AssertByteCountStream(uncompressedSize);\n      inflateFilter.on(\"error\", function(err) {\n        // forward zlib errors to the client-visible stream\n        setImmediate(function() {\n          if (!destroyed) endpointStream.emit(\"error\", err);\n        });\n      });\n      inflateFilter.pipe(endpointStream);\n    } else {\n      // the zlib filter is the client-visible stream\n      endpointStream = inflateFilter;\n    }\n    // this is part of yauzl's API, so implement this function on the client-visible stream\n    installDestroyFn(endpointStream, function() {\n      destroyed = true;\n      if (inflateFilter !== endpointStream) inflateFilter.unpipe(endpointStream);\n      readStream.unpipe(inflateFilter);\n      // TODO: the inflateFilter may cause a memory leak. see Issue #27.\n      readStream.destroy();\n    });\n  }\n  callback(null, endpointStream);\n};\n\nZipFile.prototype.readLocalFileHeader = function(entry, options, callback) {\n  var self = this;\n  if (callback == null) {\n    callback = options;\n    options = null;\n  }\n  if (options == null) options = {};\n\n  self.reader.ref();\n  var buffer = newBuffer(30);\n  readAndAssertNoEof(self.reader, buffer, 0, buffer.length, entry.relativeOffsetOfLocalHeader, function(err) {\n    try {\n      if (err) return callback(err);\n      // 0 - Local file header signature = 0x04034b50\n      var signature = buffer.readUInt32LE(0);\n      if (signature !== 0x04034b50) {\n        return callback(new Error(\"invalid local file header signature: 0x\" + signature.toString(16)));\n      }\n\n      var fileNameLength = buffer.readUInt16LE(26);\n      var extraFieldLength = buffer.readUInt16LE(28);\n      var fileDataStart = entry.relativeOffsetOfLocalHeader + 30 + fileNameLength + extraFieldLength;\n      // We now have enough information to do this bounds check.\n      if (fileDataStart + entry.compressedSize > self.fileSize) {\n        return callback(new Error(\"file data overflows file bounds: \" +\n            fileDataStart + \" + \" + entry.compressedSize + \" > \" + self.fileSize));\n      }\n\n      if (options.minimal) {\n        return callback(null, {fileDataStart: fileDataStart});\n      }\n\n      var localFileHeader = new LocalFileHeader();\n      localFileHeader.fileDataStart = fileDataStart;\n\n      // 4 - Version needed to extract (minimum)\n      localFileHeader.versionNeededToExtract = buffer.readUInt16LE(4);\n      // 6 - General purpose bit flag\n      localFileHeader.generalPurposeBitFlag = buffer.readUInt16LE(6);\n      // 8 - Compression method\n      localFileHeader.compressionMethod = buffer.readUInt16LE(8);\n      // 10 - File last modification time\n      localFileHeader.lastModFileTime = buffer.readUInt16LE(10);\n      // 12 - File last modification date\n      localFileHeader.lastModFileDate = buffer.readUInt16LE(12);\n      // 14 - CRC-32\n      localFileHeader.crc32 = buffer.readUInt32LE(14);\n      // 18 - Compressed size\n      localFileHeader.compressedSize = buffer.readUInt32LE(18);\n      // 22 - Uncompressed size\n      localFileHeader.uncompressedSize = buffer.readUInt32LE(22);\n      // 26 - File name length (n)\n      localFileHeader.fileNameLength = fileNameLength;\n      // 28 - Extra field length (m)\n      localFileHeader.extraFieldLength = extraFieldLength;\n      // 30 - File name\n      // 30+n - Extra field\n\n      buffer = newBuffer(fileNameLength + extraFieldLength);\n      self.reader.ref();\n      readAndAssertNoEof(self.reader, buffer, 0, buffer.length, entry.relativeOffsetOfLocalHeader + 30, function(err) {\n        try {\n          if (err) return callback(err);\n          localFileHeader.fileName = buffer.subarray(0, fileNameLength);\n          localFileHeader.extraField = buffer.subarray(fileNameLength);\n          return callback(null, localFileHeader);\n        } finally {\n          self.reader.unref();\n        }\n      });\n    } finally {\n      self.reader.unref();\n    }\n  });\n};\n\nfunction Entry() {\n}\nEntry.prototype.getLastModDate = function(options) {\n  if (options == null) options = {};\n\n  if (!options.forceDosFormat) {\n    // Check extended fields.\n    for (var i = 0; i < this.extraFields.length; i++) {\n      var extraField = this.extraFields[i];\n      if (extraField.id === 0x5455) {\n        // InfoZIP \"universal timestamp\" extended field (`0x5455` aka `\"UT\"`).\n        // See the InfoZIP source code unix/unix.c:set_extra_field() and zipfile.c:ef_scan_ut_time().\n        var data = extraField.data;\n        if (data.length < 5) continue; // Too short.\n        // The flags define which of the three fields are present: mtime, atime, ctime.\n        // We only care about mtime.\n        // Also, ctime is never included in practice.\n        // And also, atime is only included in the local file header for some reason\n        // despite the flags lying about its inclusion in the central header.\n        var flags = data[0];\n        var HAS_MTIME = 1;\n        if (!(flags & HAS_MTIME)) continue; // This will realistically never happen.\n        // Although the positions of all of the fields shift around depending on the presence of other fields,\n        // mtime is always first if present, and that's the only one we care about.\n        var posixTimestamp = data.readInt32LE(1);\n        return new Date(posixTimestamp * 1000);\n      } else if (extraField.id === 0x000a) {\n        var data = extraField.data;\n        // 4 bytes reserved\n        var cursor = 4;\n        while (cursor < data.length + 4) {\n          // 2 bytes Tag\n          var tag = data.readUInt16LE(cursor);\n          cursor += 2;\n          // 2 bytes Size\n          var size = data.readUInt16LE(cursor);\n          cursor += 2;\n          if (tag !== 1) {\n            // Wrong tag. This will realistically never happen.\n            cursor += size;\n            continue;\n          }\n          // Tag1 is actually the only defined Tag.\n          if (size < 8 || cursor + size > data.length) break; // Invalid. Ignore.\n          // 8 bytes Mtime\n          var hundredNanoSecondsSince1601 = 4294967296 * data.readInt32LE(cursor + 4) + data.readUInt32LE(cursor)\n          // Convert from NTFS to POSIX milliseconds.\n          // The big number below is the milliseconds between year 1601 and year 1970\n          // (i.e. the negative POSIX timestamp of 1601-01-01 00:00:00Z)\n          var millisecondsSince1970 = hundredNanoSecondsSince1601 / 10000 - 11644473600000;\n          // Note on numeric precision: JavaScript Number objects lose precision above Number.MAX_SAFE_INTEGER,\n          // and NTFS timestamps are typically much bigger than that limit.\n          // (MAX_SAFE_INTEGER would represent 1629-07-17T23:58:45.475Z.)\n          // However, we're losing precision in the conversion from 100nanosecond units to millisecond units anyway,\n          // and the time at which we also lose 1-millisecond precision is just past the JavaScript Date limit (by design).\n          // Up through the year 2057, this conversion only drops 4 bits of precision,\n          // which is well under the 13-14 bits ratio between the milliseconds and 100nanoseconds.\n          return new Date(millisecondsSince1970);\n        }\n      }\n    }\n  }\n\n  // Fallback to non-extended encoding.\n  return dosDateTimeToDate(this.lastModFileDate, this.lastModFileTime, options.timezone);\n};\nEntry.prototype.isEncrypted = function() {\n  return (this.generalPurposeBitFlag & 0x1) !== 0;\n};\nEntry.prototype.isCompressed = function() {\n  return this.compressionMethod === 8;\n};\n\nfunction LocalFileHeader() {\n}\n\nfunction dosDateTimeToDate(date, time, timezone) {\n  var day = date & 0x1f; // 1-31\n  var month = (date >> 5 & 0xf) - 1; // 1-12, 0-11\n  var year = (date >> 9 & 0x7f) + 1980; // 0-128, 1980-2108\n\n  var millisecond = 0;\n  var second = (time & 0x1f) * 2; // 0-29, 0-58 (even numbers)\n  var minute = time >> 5 & 0x3f; // 0-59\n  var hour = time >> 11 & 0x1f; // 0-23\n\n  if (timezone == null || timezone === \"local\") {\n    return new Date(year, month, day, hour, minute, second, millisecond);\n  } else if (timezone === \"UTC\") {\n    return new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));\n  } else {\n    throw new Error(\"unrecognized options.timezone: \" + options.timezone);\n  }\n}\n\nfunction getFileNameLowLevel(generalPurposeBitFlag, fileNameBuffer, extraFields, strictFileNames) {\n  var fileName = null;\n\n  // check for Info-ZIP Unicode Path Extra Field (0x7075)\n  // see https://github.com/thejoshwolfe/yauzl/issues/33\n  for (var i = 0; i < extraFields.length; i++) {\n    var extraField = extraFields[i];\n    if (extraField.id === 0x7075) {\n      if (extraField.data.length < 6) {\n        // too short to be meaningful\n        continue;\n      }\n      // Version       1 byte      version of this extra field, currently 1\n      if (extraField.data.readUInt8(0) !== 1) {\n        // > Changes may not be backward compatible so this extra\n        // > field should not be used if the version is not recognized.\n        continue;\n      }\n      // NameCRC32     4 bytes     File Name Field CRC32 Checksum\n      var oldNameCrc32 = extraField.data.readUInt32LE(1);\n      if (crc32.unsigned(fileNameBuffer) !== oldNameCrc32) {\n        // > If the CRC check fails, this UTF-8 Path Extra Field should be\n        // > ignored and the File Name field in the header should be used instead.\n        continue;\n      }\n      // UnicodeName   Variable    UTF-8 version of the entry File Name\n      fileName = decodeBuffer(extraField.data.subarray(5), true);\n      break;\n    }\n  }\n\n  if (fileName == null) {\n    // The typical case.\n    var isUtf8 = (generalPurposeBitFlag & 0x800) !== 0;\n    fileName = decodeBuffer(fileNameBuffer, isUtf8);\n  }\n\n  if (!strictFileNames) {\n    // Allow backslash.\n    fileName = fileName.replace(/\\\\/g, \"/\");\n  }\n  return fileName;\n}\n\nfunction validateFileName(fileName) {\n  if (fileName.indexOf(\"\\\\\") !== -1) {\n    return \"invalid characters in fileName: \" + fileName;\n  }\n  if (/^[a-zA-Z]:/.test(fileName) || /^\\//.test(fileName)) {\n    return \"absolute path: \" + fileName;\n  }\n  if (fileName.split(\"/\").indexOf(\"..\") !== -1) {\n    return \"invalid relative path: \" + fileName;\n  }\n  // all good\n  return null;\n}\n\nfunction parseExtraFields(extraFieldBuffer) {\n  var extraFields = [];\n  var i = 0;\n  while (i < extraFieldBuffer.length - 3) {\n    var headerId = extraFieldBuffer.readUInt16LE(i + 0);\n    var dataSize = extraFieldBuffer.readUInt16LE(i + 2);\n    var dataStart = i + 4;\n    var dataEnd = dataStart + dataSize;\n    if (dataEnd > extraFieldBuffer.length) throw new Error(\"extra field length exceeds extra field buffer size\");\n    var dataBuffer = extraFieldBuffer.subarray(dataStart, dataEnd);\n    extraFields.push({\n      id: headerId,\n      data: dataBuffer,\n    });\n    i = dataEnd;\n  }\n  return extraFields;\n}\n\nfunction readAndAssertNoEof(reader, buffer, offset, length, position, callback) {\n  if (length === 0) {\n    // fs.read will throw an out-of-bounds error if you try to read 0 bytes from a 0 byte file\n    return setImmediate(function() { callback(null, newBuffer(0)); });\n  }\n  reader.read(buffer, offset, length, position, function(err, bytesRead) {\n    if (err) return callback(err);\n    if (bytesRead < length) {\n      return callback(new Error(\"unexpected EOF\"));\n    }\n    callback();\n  });\n}\n\nutil.inherits(AssertByteCountStream, Transform);\nfunction AssertByteCountStream(byteCount) {\n  Transform.call(this);\n  this.actualByteCount = 0;\n  this.expectedByteCount = byteCount;\n}\nAssertByteCountStream.prototype._transform = function(chunk, encoding, cb) {\n  this.actualByteCount += chunk.length;\n  if (this.actualByteCount > this.expectedByteCount) {\n    var msg = \"too many bytes in the stream. expected \" + this.expectedByteCount + \". got at least \" + this.actualByteCount;\n    return cb(new Error(msg));\n  }\n  cb(null, chunk);\n};\nAssertByteCountStream.prototype._flush = function(cb) {\n  if (this.actualByteCount < this.expectedByteCount) {\n    var msg = \"not enough bytes in the stream. expected \" + this.expectedByteCount + \". got only \" + this.actualByteCount;\n    return cb(new Error(msg));\n  }\n  cb();\n};\n\nutil.inherits(RandomAccessReader, EventEmitter);\nfunction RandomAccessReader() {\n  EventEmitter.call(this);\n  this.refCount = 0;\n}\nRandomAccessReader.prototype.ref = function() {\n  this.refCount += 1;\n};\nRandomAccessReader.prototype.unref = function() {\n  var self = this;\n  self.refCount -= 1;\n\n  if (self.refCount > 0) return;\n  if (self.refCount < 0) throw new Error(\"invalid unref\");\n\n  self.close(onCloseDone);\n\n  function onCloseDone(err) {\n    if (err) return self.emit('error', err);\n    self.emit('close');\n  }\n};\nRandomAccessReader.prototype.createReadStream = function(options) {\n  if (options == null) options = {};\n  var start = options.start;\n  var end = options.end;\n  if (start === end) {\n    var emptyStream = new PassThrough();\n    setImmediate(function() {\n      emptyStream.end();\n    });\n    return emptyStream;\n  }\n  var stream = this._readStreamForRange(start, end);\n\n  var destroyed = false;\n  var refUnrefFilter = new RefUnrefFilter(this);\n  stream.on(\"error\", function(err) {\n    setImmediate(function() {\n      if (!destroyed) refUnrefFilter.emit(\"error\", err);\n    });\n  });\n  installDestroyFn(refUnrefFilter, function() {\n    stream.unpipe(refUnrefFilter);\n    refUnrefFilter.unref();\n    stream.destroy();\n  });\n\n  var byteCounter = new AssertByteCountStream(end - start);\n  refUnrefFilter.on(\"error\", function(err) {\n    setImmediate(function() {\n      if (!destroyed) byteCounter.emit(\"error\", err);\n    });\n  });\n  installDestroyFn(byteCounter, function() {\n    destroyed = true;\n    refUnrefFilter.unpipe(byteCounter);\n    refUnrefFilter.destroy();\n  });\n\n  return stream.pipe(refUnrefFilter).pipe(byteCounter);\n};\nRandomAccessReader.prototype._readStreamForRange = function(start, end) {\n  throw new Error(\"not implemented\");\n};\nRandomAccessReader.prototype.read = function(buffer, offset, length, position, callback) {\n  var readStream = this.createReadStream({start: position, end: position + length});\n  var writeStream = new Writable();\n  var written = 0;\n  writeStream._write = function(chunk, encoding, cb) {\n    chunk.copy(buffer, offset + written, 0, chunk.length);\n    written += chunk.length;\n    cb();\n  };\n  writeStream.on(\"finish\", callback);\n  readStream.on(\"error\", function(error) {\n    callback(error);\n  });\n  readStream.pipe(writeStream);\n};\nRandomAccessReader.prototype.close = function(callback) {\n  setImmediate(callback);\n};\n\nutil.inherits(RefUnrefFilter, PassThrough);\nfunction RefUnrefFilter(context) {\n  PassThrough.call(this);\n  this.context = context;\n  this.context.ref();\n  this.unreffedYet = false;\n}\nRefUnrefFilter.prototype._flush = function(cb) {\n  this.unref();\n  cb();\n};\nRefUnrefFilter.prototype.unref = function(cb) {\n  if (this.unreffedYet) return;\n  this.unreffedYet = true;\n  this.context.unref();\n};\n\nvar cp437 = '\\u0000☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ';\nfunction decodeBuffer(buffer, isUtf8) {\n  if (isUtf8) {\n    return buffer.toString(\"utf8\");\n  } else {\n    var result = \"\";\n    for (var i = 0; i < buffer.length; i++) {\n      result += cp437[buffer[i]];\n    }\n    return result;\n  }\n}\n\nfunction readUInt64LE(buffer, offset) {\n  // There is no native function for this, because we can't actually store 64-bit integers precisely.\n  // after 53 bits, JavaScript's Number type (IEEE 754 double) can't store individual integers anymore.\n  // but since 53 bits is a whole lot more than 32 bits, we do our best anyway.\n  // As of 2020, Node has added support for BigInt, which obviates this whole function,\n  // but yauzl hasn't been updated to depend on BigInt (yet?).\n  var lower32 = buffer.readUInt32LE(offset);\n  var upper32 = buffer.readUInt32LE(offset + 4);\n  // we can't use bitshifting here, because JavaScript bitshifting only works on 32-bit integers.\n  return upper32 * 0x100000000 + lower32;\n  // as long as we're bounds checking the result of this function against the total file size,\n  // we'll catch any overflow errors, because we already made sure the total file size was within reason.\n}\n\n// Node 10 deprecated new Buffer().\nvar newBuffer;\nif (typeof Buffer.allocUnsafe === \"function\") {\n  newBuffer = function(len) {\n    return Buffer.allocUnsafe(len);\n  };\n} else {\n  newBuffer = function(len) {\n    return new Buffer(len);\n  };\n}\n\n// Node 8 introduced a proper destroy() implementation on writable streams.\nfunction installDestroyFn(stream, fn) {\n  if (typeof stream.destroy === \"function\") {\n    // New API.\n    stream._destroy = function(err, cb) {\n      fn();\n      if (cb != null) cb(err);\n    };\n  } else {\n    // Old API.\n    stream.destroy = fn;\n  }\n}\n\nfunction defaultCallback(err) {\n  if (err) throw err;\n}\n","/**\n * Copyright (c) 2014 Max Ogden and other contributors\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n *   list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n *   this list of conditions and the following disclaimer in the documentation\n *   and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst debug = require('debug')('extract-zip')\n// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst { createWriteStream, promises: fs } = require('fs')\nconst getStream = require('get-stream')\nconst path = require('path')\nconst { promisify } = require('util')\nconst stream = require('stream')\nconst yauzl = require('yauzl')\n\nconst openZip = promisify(yauzl.open)\nconst pipeline = promisify(stream.pipeline)\n\nclass Extractor {\n  constructor (zipPath, opts) {\n    this.zipPath = zipPath\n    this.opts = opts\n  }\n\n  async extract () {\n    debug('opening', this.zipPath, 'with opts', this.opts)\n\n    this.zipfile = await openZip(this.zipPath, { lazyEntries: true })\n    this.canceled = false\n\n    return new Promise((resolve, reject) => {\n      this.zipfile.on('error', err => {\n        this.canceled = true\n        reject(err)\n      })\n      this.zipfile.readEntry()\n\n      this.zipfile.on('close', () => {\n        if (!this.canceled) {\n          debug('zip extraction complete')\n          resolve()\n        }\n      })\n\n      this.zipfile.on('entry', async entry => {\n        /* istanbul ignore if */\n        if (this.canceled) {\n          debug('skipping entry', entry.fileName, { cancelled: this.canceled })\n          return\n        }\n\n        debug('zipfile entry', entry.fileName)\n\n        if (entry.fileName.startsWith('__MACOSX/')) {\n          this.zipfile.readEntry()\n          return\n        }\n\n        const destDir = path.dirname(path.join(this.opts.dir, entry.fileName))\n\n        try {\n          await fs.mkdir(destDir, { recursive: true })\n\n          const canonicalDestDir = await fs.realpath(destDir)\n          const relativeDestDir = path.relative(this.opts.dir, canonicalDestDir)\n\n          if (relativeDestDir.split(path.sep).includes('..')) {\n            throw new Error(`Out of bound path \"${canonicalDestDir}\" found while processing file ${entry.fileName}`)\n          }\n\n          await this.extractEntry(entry)\n          debug('finished processing', entry.fileName)\n          this.zipfile.readEntry()\n        } catch (err) {\n          this.canceled = true\n          this.zipfile.close()\n          reject(err)\n        }\n      })\n    })\n  }\n\n  async extractEntry (entry) {\n    /* istanbul ignore if */\n    if (this.canceled) {\n      debug('skipping entry extraction', entry.fileName, { cancelled: this.canceled })\n      return\n    }\n\n    if (this.opts.onEntry) {\n      this.opts.onEntry(entry, this.zipfile)\n    }\n\n    const dest = path.join(this.opts.dir, entry.fileName)\n\n    // convert external file attr int into a fs stat mode int\n    const mode = (entry.externalFileAttributes >> 16) & 0xFFFF\n    // check if it's a symlink or dir (using stat mode constants)\n    const IFMT = 61440\n    const IFDIR = 16384\n    const IFLNK = 40960\n    const symlink = (mode & IFMT) === IFLNK\n    let isDir = (mode & IFMT) === IFDIR\n\n    // Failsafe, borrowed from jsZip\n    if (!isDir && entry.fileName.endsWith('/')) {\n      isDir = true\n    }\n\n    // check for windows weird way of specifying a directory\n    // https://github.com/maxogden/extract-zip/issues/13#issuecomment-154494566\n    const madeBy = entry.versionMadeBy >> 8\n    if (!isDir) isDir = (madeBy === 0 && entry.externalFileAttributes === 16)\n\n    debug('extracting entry', { filename: entry.fileName, isDir: isDir, isSymlink: symlink })\n\n    const procMode = this.getExtractedMode(mode, isDir) & 0o777\n\n    // always ensure folders are created\n    const destDir = isDir ? dest : path.dirname(dest)\n\n    const mkdirOptions = { recursive: true }\n    if (isDir) {\n      mkdirOptions.mode = procMode\n    }\n    debug('mkdir', { dir: destDir, ...mkdirOptions })\n    await fs.mkdir(destDir, mkdirOptions)\n    if (isDir) return\n\n    debug('opening read stream', dest)\n    const readStream = await promisify(this.zipfile.openReadStream.bind(this.zipfile))(entry)\n\n    if (symlink) {\n      const link = await getStream(readStream)\n      debug('creating symlink', link, dest)\n      await fs.symlink(link, dest)\n    } else {\n      await pipeline(readStream, createWriteStream(dest, { mode: procMode }))\n    }\n  }\n\n  getExtractedMode (entryMode, isDir) {\n    let mode = entryMode\n    // Set defaults, if necessary\n    if (mode === 0) {\n      if (isDir) {\n        if (this.opts.defaultDirMode) {\n          mode = parseInt(this.opts.defaultDirMode, 10)\n        }\n\n        if (!mode) {\n          mode = 0o755\n        }\n      } else {\n        if (this.opts.defaultFileMode) {\n          mode = parseInt(this.opts.defaultFileMode, 10)\n        }\n\n        if (!mode) {\n          mode = 0o644\n        }\n      }\n    }\n\n    return mode\n  }\n}\n\nmodule.exports = async function (zipPath, opts) {\n  debug('creating target directory', opts.dir)\n\n  if (!path.isAbsolute(opts.dir)) {\n    throw new Error('Target directory is expected to be absolute')\n  }\n\n  await fs.mkdir(opts.dir, { recursive: true })\n  opts.dir = await fs.realpath(opts.dir)\n  return new Extractor(zipPath, opts).extract()\n}\n","var fs = require(\"fs\");\nvar Transform = require(\"stream\").Transform;\nvar PassThrough = require(\"stream\").PassThrough;\nvar zlib = require(\"zlib\");\nvar util = require(\"util\");\nvar EventEmitter = require(\"events\").EventEmitter;\nvar crc32 = require(\"buffer-crc32\");\n\nexports.ZipFile = ZipFile;\nexports.dateToDosDateTime = dateToDosDateTime;\n\nutil.inherits(ZipFile, EventEmitter);\nfunction ZipFile() {\n  this.outputStream = new PassThrough();\n  this.entries = [];\n  this.outputStreamCursor = 0;\n  this.ended = false; // .end() sets this\n  this.allDone = false; // set when we've written the last bytes\n  this.forceZip64Eocd = false; // configurable in .end()\n}\n\nZipFile.prototype.addFile = function(realPath, metadataPath, options) {\n  var self = this;\n  metadataPath = validateMetadataPath(metadataPath, false);\n  if (options == null) options = {};\n\n  var entry = new Entry(metadataPath, false, options);\n  self.entries.push(entry);\n  fs.stat(realPath, function(err, stats) {\n    if (err) return self.emit(\"error\", err);\n    if (!stats.isFile()) return self.emit(\"error\", new Error(\"not a file: \" + realPath));\n    entry.uncompressedSize = stats.size;\n    if (options.mtime == null) entry.setLastModDate(stats.mtime);\n    if (options.mode == null) entry.setFileAttributesMode(stats.mode);\n    entry.setFileDataPumpFunction(function() {\n      var readStream = fs.createReadStream(realPath);\n      entry.state = Entry.FILE_DATA_IN_PROGRESS;\n      readStream.on(\"error\", function(err) {\n        self.emit(\"error\", err);\n      });\n      pumpFileDataReadStream(self, entry, readStream);\n    });\n    pumpEntries(self);\n  });\n};\n\nZipFile.prototype.addReadStream = function(readStream, metadataPath, options) {\n  var self = this;\n  metadataPath = validateMetadataPath(metadataPath, false);\n  if (options == null) options = {};\n  var entry = new Entry(metadataPath, false, options);\n  self.entries.push(entry);\n  entry.setFileDataPumpFunction(function() {\n    entry.state = Entry.FILE_DATA_IN_PROGRESS;\n    pumpFileDataReadStream(self, entry, readStream);\n  });\n  pumpEntries(self);\n};\n\nZipFile.prototype.addBuffer = function(buffer, metadataPath, options) {\n  var self = this;\n  metadataPath = validateMetadataPath(metadataPath, false);\n  if (buffer.length > 0x3fffffff) throw new Error(\"buffer too large: \" + buffer.length + \" > \" + 0x3fffffff);\n  if (options == null) options = {};\n  if (options.size != null) throw new Error(\"options.size not allowed\");\n  var entry = new Entry(metadataPath, false, options);\n  entry.uncompressedSize = buffer.length;\n  entry.crc32 = crc32.unsigned(buffer);\n  entry.crcAndFileSizeKnown = true;\n  self.entries.push(entry);\n  if (!entry.compress) {\n    setCompressedBuffer(buffer);\n  } else {\n    zlib.deflateRaw(buffer, function(err, compressedBuffer) {\n      setCompressedBuffer(compressedBuffer);\n    });\n  }\n  function setCompressedBuffer(compressedBuffer) {\n    entry.compressedSize = compressedBuffer.length;\n    entry.setFileDataPumpFunction(function() {\n      writeToOutputStream(self, compressedBuffer);\n      writeToOutputStream(self, entry.getDataDescriptor());\n      entry.state = Entry.FILE_DATA_DONE;\n\n      // don't call pumpEntries() recursively.\n      // (also, don't call process.nextTick recursively.)\n      setImmediate(function() {\n        pumpEntries(self);\n      });\n    });\n    pumpEntries(self);\n  }\n};\n\nZipFile.prototype.addEmptyDirectory = function(metadataPath, options) {\n  var self = this;\n  metadataPath = validateMetadataPath(metadataPath, true);\n  if (options == null) options = {};\n  if (options.size != null) throw new Error(\"options.size not allowed\");\n  if (options.compress != null) throw new Error(\"options.compress not allowed\");\n  var entry = new Entry(metadataPath, true, options);\n  self.entries.push(entry);\n  entry.setFileDataPumpFunction(function() {\n    writeToOutputStream(self, entry.getDataDescriptor());\n    entry.state = Entry.FILE_DATA_DONE;\n    pumpEntries(self);\n  });\n  pumpEntries(self);\n};\n\nvar eocdrSignatureBuffer = bufferFrom([0x50, 0x4b, 0x05, 0x06]);\n\nZipFile.prototype.end = function(options, finalSizeCallback) {\n  if (typeof options === \"function\") {\n    finalSizeCallback = options;\n    options = null;\n  }\n  if (options == null) options = {};\n  if (this.ended) return;\n  this.ended = true;\n  this.finalSizeCallback = finalSizeCallback;\n  this.forceZip64Eocd = !!options.forceZip64Format;\n  if (options.comment) {\n    if (typeof options.comment === \"string\") {\n      this.comment = encodeCp437(options.comment);\n    } else {\n      // It should be a Buffer\n      this.comment = options.comment;\n    }\n    if (this.comment.length > 0xffff) throw new Error(\"comment is too large\");\n    // gotta check for this, because the zipfile format is actually ambiguous.\n    if (bufferIncludes(this.comment, eocdrSignatureBuffer)) throw new Error(\"comment contains end of central directory record signature\");\n  } else {\n    // no comment.\n    this.comment = EMPTY_BUFFER;\n  }\n  pumpEntries(this);\n};\n\nfunction writeToOutputStream(self, buffer) {\n  self.outputStream.write(buffer);\n  self.outputStreamCursor += buffer.length;\n}\n\nfunction pumpFileDataReadStream(self, entry, readStream) {\n  var crc32Watcher = new Crc32Watcher();\n  var uncompressedSizeCounter = new ByteCounter();\n  var compressor = entry.compress ? new zlib.DeflateRaw() : new PassThrough();\n  var compressedSizeCounter = new ByteCounter();\n  readStream.pipe(crc32Watcher)\n            .pipe(uncompressedSizeCounter)\n            .pipe(compressor)\n            .pipe(compressedSizeCounter)\n            .pipe(self.outputStream, {end: false});\n  compressedSizeCounter.on(\"end\", function() {\n    entry.crc32 = crc32Watcher.crc32;\n    if (entry.uncompressedSize == null) {\n      entry.uncompressedSize = uncompressedSizeCounter.byteCount;\n    } else {\n      if (entry.uncompressedSize !== uncompressedSizeCounter.byteCount) return self.emit(\"error\", new Error(\"file data stream has unexpected number of bytes\"));\n    }\n    entry.compressedSize = compressedSizeCounter.byteCount;\n    self.outputStreamCursor += entry.compressedSize;\n    writeToOutputStream(self, entry.getDataDescriptor());\n    entry.state = Entry.FILE_DATA_DONE;\n    pumpEntries(self);\n  });\n}\n\nfunction pumpEntries(self) {\n  if (self.allDone) return;\n  // first check if finalSize is finally known\n  if (self.ended && self.finalSizeCallback != null) {\n    var finalSize = calculateFinalSize(self);\n    if (finalSize != null) {\n      // we have an answer\n      self.finalSizeCallback(finalSize);\n      self.finalSizeCallback = null;\n    }\n  }\n\n  // pump entries\n  var entry = getFirstNotDoneEntry();\n  function getFirstNotDoneEntry() {\n    for (var i = 0; i < self.entries.length; i++) {\n      var entry = self.entries[i];\n      if (entry.state < Entry.FILE_DATA_DONE) return entry;\n    }\n    return null;\n  }\n  if (entry != null) {\n    // this entry is not done yet\n    if (entry.state < Entry.READY_TO_PUMP_FILE_DATA) return; // input file not open yet\n    if (entry.state === Entry.FILE_DATA_IN_PROGRESS) return; // we'll get there\n    // start with local file header\n    entry.relativeOffsetOfLocalHeader = self.outputStreamCursor;\n    var localFileHeader = entry.getLocalFileHeader();\n    writeToOutputStream(self, localFileHeader);\n    entry.doFileDataPump();\n  } else {\n    // all cought up on writing entries\n    if (self.ended) {\n      // head for the exit\n      self.offsetOfStartOfCentralDirectory = self.outputStreamCursor;\n      self.entries.forEach(function(entry) {\n        var centralDirectoryRecord = entry.getCentralDirectoryRecord();\n        writeToOutputStream(self, centralDirectoryRecord);\n      });\n      writeToOutputStream(self, getEndOfCentralDirectoryRecord(self));\n      self.outputStream.end();\n      self.allDone = true;\n    }\n  }\n}\n\nfunction calculateFinalSize(self) {\n  var pretendOutputCursor = 0;\n  var centralDirectorySize = 0;\n  for (var i = 0; i < self.entries.length; i++) {\n    var entry = self.entries[i];\n    // compression is too hard to predict\n    if (entry.compress) return -1;\n    if (entry.state >= Entry.READY_TO_PUMP_FILE_DATA) {\n      // if addReadStream was called without providing the size, we can't predict the final size\n      if (entry.uncompressedSize == null) return -1;\n    } else {\n      // if we're still waiting for fs.stat, we might learn the size someday\n      if (entry.uncompressedSize == null) return null;\n    }\n    // we know this for sure, and this is important to know if we need ZIP64 format.\n    entry.relativeOffsetOfLocalHeader = pretendOutputCursor;\n    var useZip64Format = entry.useZip64Format();\n\n    pretendOutputCursor += LOCAL_FILE_HEADER_FIXED_SIZE + entry.utf8FileName.length;\n    pretendOutputCursor += entry.uncompressedSize;\n    if (!entry.crcAndFileSizeKnown) {\n      // use a data descriptor\n      if (useZip64Format) {\n        pretendOutputCursor += ZIP64_DATA_DESCRIPTOR_SIZE;\n      } else {\n        pretendOutputCursor += DATA_DESCRIPTOR_SIZE;\n      }\n    }\n\n    centralDirectorySize += CENTRAL_DIRECTORY_RECORD_FIXED_SIZE + entry.utf8FileName.length + entry.fileComment.length;\n    if (useZip64Format) {\n      centralDirectorySize += ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE;\n    }\n  }\n\n  var endOfCentralDirectorySize = 0;\n  if (self.forceZip64Eocd ||\n      self.entries.length >= 0xffff ||\n      centralDirectorySize >= 0xffff ||\n      pretendOutputCursor >= 0xffffffff) {\n    // use zip64 end of central directory stuff\n    endOfCentralDirectorySize += ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIZE + ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIZE;\n  }\n  endOfCentralDirectorySize += END_OF_CENTRAL_DIRECTORY_RECORD_SIZE + self.comment.length;\n  return pretendOutputCursor + centralDirectorySize + endOfCentralDirectorySize;\n}\n\nvar ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIZE = 56;\nvar ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIZE = 20;\nvar END_OF_CENTRAL_DIRECTORY_RECORD_SIZE = 22;\nfunction getEndOfCentralDirectoryRecord(self, actuallyJustTellMeHowLongItWouldBe) {\n  var needZip64Format = false;\n  var normalEntriesLength = self.entries.length;\n  if (self.forceZip64Eocd || self.entries.length >= 0xffff) {\n    normalEntriesLength = 0xffff;\n    needZip64Format = true;\n  }\n  var sizeOfCentralDirectory = self.outputStreamCursor - self.offsetOfStartOfCentralDirectory;\n  var normalSizeOfCentralDirectory = sizeOfCentralDirectory;\n  if (self.forceZip64Eocd || sizeOfCentralDirectory >= 0xffffffff) {\n    normalSizeOfCentralDirectory = 0xffffffff;\n    needZip64Format = true;\n  }\n  var normalOffsetOfStartOfCentralDirectory = self.offsetOfStartOfCentralDirectory;\n  if (self.forceZip64Eocd || self.offsetOfStartOfCentralDirectory >= 0xffffffff) {\n    normalOffsetOfStartOfCentralDirectory = 0xffffffff;\n    needZip64Format = true;\n  }\n  if (actuallyJustTellMeHowLongItWouldBe) {\n    if (needZip64Format) {\n      return (\n        ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIZE +\n        ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIZE +\n        END_OF_CENTRAL_DIRECTORY_RECORD_SIZE\n      );\n    } else {\n      return END_OF_CENTRAL_DIRECTORY_RECORD_SIZE;\n    }\n  }\n\n  var eocdrBuffer = bufferAlloc(END_OF_CENTRAL_DIRECTORY_RECORD_SIZE + self.comment.length);\n  // end of central dir signature                       4 bytes  (0x06054b50)\n  eocdrBuffer.writeUInt32LE(0x06054b50, 0);\n  // number of this disk                                2 bytes\n  eocdrBuffer.writeUInt16LE(0, 4);\n  // number of the disk with the start of the central directory  2 bytes\n  eocdrBuffer.writeUInt16LE(0, 6);\n  // total number of entries in the central directory on this disk  2 bytes\n  eocdrBuffer.writeUInt16LE(normalEntriesLength, 8);\n  // total number of entries in the central directory   2 bytes\n  eocdrBuffer.writeUInt16LE(normalEntriesLength, 10);\n  // size of the central directory                      4 bytes\n  eocdrBuffer.writeUInt32LE(normalSizeOfCentralDirectory, 12);\n  // offset of start of central directory with respect to the starting disk number  4 bytes\n  eocdrBuffer.writeUInt32LE(normalOffsetOfStartOfCentralDirectory, 16);\n  // .ZIP file comment length                           2 bytes\n  eocdrBuffer.writeUInt16LE(self.comment.length, 20);\n  // .ZIP file comment                                  (variable size)\n  self.comment.copy(eocdrBuffer, 22);\n\n  if (!needZip64Format) return eocdrBuffer;\n\n  // ZIP64 format\n  // ZIP64 End of Central Directory Record\n  var zip64EocdrBuffer = bufferAlloc(ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIZE);\n  // zip64 end of central dir signature                                             4 bytes  (0x06064b50)\n  zip64EocdrBuffer.writeUInt32LE(0x06064b50, 0);\n  // size of zip64 end of central directory record                                  8 bytes\n  writeUInt64LE(zip64EocdrBuffer, ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIZE - 12, 4);\n  // version made by                                                                2 bytes\n  zip64EocdrBuffer.writeUInt16LE(VERSION_MADE_BY, 12);\n  // version needed to extract                                                      2 bytes\n  zip64EocdrBuffer.writeUInt16LE(VERSION_NEEDED_TO_EXTRACT_ZIP64, 14);\n  // number of this disk                                                            4 bytes\n  zip64EocdrBuffer.writeUInt32LE(0, 16);\n  // number of the disk with the start of the central directory                     4 bytes\n  zip64EocdrBuffer.writeUInt32LE(0, 20);\n  // total number of entries in the central directory on this disk                  8 bytes\n  writeUInt64LE(zip64EocdrBuffer, self.entries.length, 24);\n  // total number of entries in the central directory                               8 bytes\n  writeUInt64LE(zip64EocdrBuffer, self.entries.length, 32);\n  // size of the central directory                                                  8 bytes\n  writeUInt64LE(zip64EocdrBuffer, sizeOfCentralDirectory, 40);\n  // offset of start of central directory with respect to the starting disk number  8 bytes\n  writeUInt64LE(zip64EocdrBuffer, self.offsetOfStartOfCentralDirectory, 48);\n  // zip64 extensible data sector                                                   (variable size)\n  // nothing in the zip64 extensible data sector\n\n\n  // ZIP64 End of Central Directory Locator\n  var zip64EocdlBuffer = bufferAlloc(ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIZE);\n  // zip64 end of central dir locator signature                               4 bytes  (0x07064b50)\n  zip64EocdlBuffer.writeUInt32LE(0x07064b50, 0);\n  // number of the disk with the start of the zip64 end of central directory  4 bytes\n  zip64EocdlBuffer.writeUInt32LE(0, 4);\n  // relative offset of the zip64 end of central directory record             8 bytes\n  writeUInt64LE(zip64EocdlBuffer, self.outputStreamCursor, 8);\n  // total number of disks                                                    4 bytes\n  zip64EocdlBuffer.writeUInt32LE(1, 16);\n\n\n  return Buffer.concat([\n    zip64EocdrBuffer,\n    zip64EocdlBuffer,\n    eocdrBuffer,\n  ]);\n}\n\nfunction validateMetadataPath(metadataPath, isDirectory) {\n  if (metadataPath === \"\") throw new Error(\"empty metadataPath\");\n  metadataPath = metadataPath.replace(/\\\\/g, \"/\");\n  if (/^[a-zA-Z]:/.test(metadataPath) || /^\\//.test(metadataPath)) throw new Error(\"absolute path: \" + metadataPath);\n  if (metadataPath.split(\"/\").indexOf(\"..\") !== -1) throw new Error(\"invalid relative path: \" + metadataPath);\n  var looksLikeDirectory = /\\/$/.test(metadataPath);\n  if (isDirectory) {\n    // append a trailing '/' if necessary.\n    if (!looksLikeDirectory) metadataPath += \"/\";\n  } else {\n    if (looksLikeDirectory) throw new Error(\"file path cannot end with '/': \" + metadataPath);\n  }\n  return metadataPath;\n}\n\nvar EMPTY_BUFFER = bufferAlloc(0);\n\n// this class is not part of the public API\nfunction Entry(metadataPath, isDirectory, options) {\n  this.utf8FileName = bufferFrom(metadataPath);\n  if (this.utf8FileName.length > 0xffff) throw new Error(\"utf8 file name too long. \" + utf8FileName.length + \" > \" + 0xffff);\n  this.isDirectory = isDirectory;\n  this.state = Entry.WAITING_FOR_METADATA;\n  this.setLastModDate(options.mtime != null ? options.mtime : new Date());\n  if (options.mode != null) {\n    this.setFileAttributesMode(options.mode);\n  } else {\n    this.setFileAttributesMode(isDirectory ? 0o40775 : 0o100664);\n  }\n  if (isDirectory) {\n    this.crcAndFileSizeKnown = true;\n    this.crc32 = 0;\n    this.uncompressedSize = 0;\n    this.compressedSize = 0;\n  } else {\n    // unknown so far\n    this.crcAndFileSizeKnown = false;\n    this.crc32 = null;\n    this.uncompressedSize = null;\n    this.compressedSize = null;\n    if (options.size != null) this.uncompressedSize = options.size;\n  }\n  if (isDirectory) {\n    this.compress = false;\n  } else {\n    this.compress = true; // default\n    if (options.compress != null) this.compress = !!options.compress;\n  }\n  this.forceZip64Format = !!options.forceZip64Format;\n  if (options.fileComment) {\n    if (typeof options.fileComment === \"string\") {\n      this.fileComment = bufferFrom(options.fileComment, \"utf-8\");\n    } else {\n      // It should be a Buffer\n      this.fileComment = options.fileComment;\n    }\n    if (this.fileComment.length > 0xffff) throw new Error(\"fileComment is too large\");\n  } else {\n    // no comment.\n    this.fileComment = EMPTY_BUFFER;\n  }\n}\nEntry.WAITING_FOR_METADATA = 0;\nEntry.READY_TO_PUMP_FILE_DATA = 1;\nEntry.FILE_DATA_IN_PROGRESS = 2;\nEntry.FILE_DATA_DONE = 3;\nEntry.prototype.setLastModDate = function(date) {\n  var dosDateTime = dateToDosDateTime(date);\n  this.lastModFileTime = dosDateTime.time;\n  this.lastModFileDate = dosDateTime.date;\n};\nEntry.prototype.setFileAttributesMode = function(mode) {\n  if ((mode & 0xffff) !== mode) throw new Error(\"invalid mode. expected: 0 <= \" + mode + \" <= \" + 0xffff);\n  // http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute/14727#14727\n  this.externalFileAttributes = (mode << 16) >>> 0;\n};\n// doFileDataPump() should not call pumpEntries() directly. see issue #9.\nEntry.prototype.setFileDataPumpFunction = function(doFileDataPump) {\n  this.doFileDataPump = doFileDataPump;\n  this.state = Entry.READY_TO_PUMP_FILE_DATA;\n};\nEntry.prototype.useZip64Format = function() {\n  return (\n    (this.forceZip64Format) ||\n    (this.uncompressedSize != null && this.uncompressedSize > 0xfffffffe) ||\n    (this.compressedSize != null && this.compressedSize > 0xfffffffe) ||\n    (this.relativeOffsetOfLocalHeader != null && this.relativeOffsetOfLocalHeader > 0xfffffffe)\n  );\n}\nvar LOCAL_FILE_HEADER_FIXED_SIZE = 30;\nvar VERSION_NEEDED_TO_EXTRACT_UTF8 = 20;\nvar VERSION_NEEDED_TO_EXTRACT_ZIP64 = 45;\n// 3 = unix. 63 = spec version 6.3\nvar VERSION_MADE_BY = (3 << 8) | 63;\nvar FILE_NAME_IS_UTF8 = 1 << 11;\nvar UNKNOWN_CRC32_AND_FILE_SIZES = 1 << 3;\nEntry.prototype.getLocalFileHeader = function() {\n  var crc32 = 0;\n  var compressedSize = 0;\n  var uncompressedSize = 0;\n  if (this.crcAndFileSizeKnown) {\n    crc32 = this.crc32;\n    compressedSize = this.compressedSize;\n    uncompressedSize = this.uncompressedSize;\n  }\n\n  var fixedSizeStuff = bufferAlloc(LOCAL_FILE_HEADER_FIXED_SIZE);\n  var generalPurposeBitFlag = FILE_NAME_IS_UTF8;\n  if (!this.crcAndFileSizeKnown) generalPurposeBitFlag |= UNKNOWN_CRC32_AND_FILE_SIZES;\n\n  // local file header signature     4 bytes  (0x04034b50)\n  fixedSizeStuff.writeUInt32LE(0x04034b50, 0);\n  // version needed to extract       2 bytes\n  fixedSizeStuff.writeUInt16LE(VERSION_NEEDED_TO_EXTRACT_UTF8, 4);\n  // general purpose bit flag        2 bytes\n  fixedSizeStuff.writeUInt16LE(generalPurposeBitFlag, 6);\n  // compression method              2 bytes\n  fixedSizeStuff.writeUInt16LE(this.getCompressionMethod(), 8);\n  // last mod file time              2 bytes\n  fixedSizeStuff.writeUInt16LE(this.lastModFileTime, 10);\n  // last mod file date              2 bytes\n  fixedSizeStuff.writeUInt16LE(this.lastModFileDate, 12);\n  // crc-32                          4 bytes\n  fixedSizeStuff.writeUInt32LE(crc32, 14);\n  // compressed size                 4 bytes\n  fixedSizeStuff.writeUInt32LE(compressedSize, 18);\n  // uncompressed size               4 bytes\n  fixedSizeStuff.writeUInt32LE(uncompressedSize, 22);\n  // file name length                2 bytes\n  fixedSizeStuff.writeUInt16LE(this.utf8FileName.length, 26);\n  // extra field length              2 bytes\n  fixedSizeStuff.writeUInt16LE(0, 28);\n  return Buffer.concat([\n    fixedSizeStuff,\n    // file name (variable size)\n    this.utf8FileName,\n    // extra field (variable size)\n    // no extra fields\n  ]);\n};\nvar DATA_DESCRIPTOR_SIZE = 16;\nvar ZIP64_DATA_DESCRIPTOR_SIZE = 24;\nEntry.prototype.getDataDescriptor = function() {\n  if (this.crcAndFileSizeKnown) {\n    // the Mac Archive Utility requires this not be present unless we set general purpose bit 3\n    return EMPTY_BUFFER;\n  }\n  if (!this.useZip64Format()) {\n    var buffer = bufferAlloc(DATA_DESCRIPTOR_SIZE);\n    // optional signature (required according to Archive Utility)\n    buffer.writeUInt32LE(0x08074b50, 0);\n    // crc-32                          4 bytes\n    buffer.writeUInt32LE(this.crc32, 4);\n    // compressed size                 4 bytes\n    buffer.writeUInt32LE(this.compressedSize, 8);\n    // uncompressed size               4 bytes\n    buffer.writeUInt32LE(this.uncompressedSize, 12);\n    return buffer;\n  } else {\n    // ZIP64 format\n    var buffer = bufferAlloc(ZIP64_DATA_DESCRIPTOR_SIZE);\n    // optional signature (unknown if anyone cares about this)\n    buffer.writeUInt32LE(0x08074b50, 0);\n    // crc-32                          4 bytes\n    buffer.writeUInt32LE(this.crc32, 4);\n    // compressed size                 8 bytes\n    writeUInt64LE(buffer, this.compressedSize, 8);\n    // uncompressed size               8 bytes\n    writeUInt64LE(buffer, this.uncompressedSize, 16);\n    return buffer;\n  }\n};\nvar CENTRAL_DIRECTORY_RECORD_FIXED_SIZE = 46;\nvar ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE = 28;\nEntry.prototype.getCentralDirectoryRecord = function() {\n  var fixedSizeStuff = bufferAlloc(CENTRAL_DIRECTORY_RECORD_FIXED_SIZE);\n  var generalPurposeBitFlag = FILE_NAME_IS_UTF8;\n  if (!this.crcAndFileSizeKnown) generalPurposeBitFlag |= UNKNOWN_CRC32_AND_FILE_SIZES;\n\n  var normalCompressedSize = this.compressedSize;\n  var normalUncompressedSize = this.uncompressedSize;\n  var normalRelativeOffsetOfLocalHeader = this.relativeOffsetOfLocalHeader;\n  var versionNeededToExtract;\n  var zeiefBuffer;\n  if (this.useZip64Format()) {\n    normalCompressedSize = 0xffffffff;\n    normalUncompressedSize = 0xffffffff;\n    normalRelativeOffsetOfLocalHeader = 0xffffffff;\n    versionNeededToExtract = VERSION_NEEDED_TO_EXTRACT_ZIP64;\n\n    // ZIP64 extended information extra field\n    zeiefBuffer = bufferAlloc(ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE);\n    // 0x0001                  2 bytes    Tag for this \"extra\" block type\n    zeiefBuffer.writeUInt16LE(0x0001, 0);\n    // Size                    2 bytes    Size of this \"extra\" block\n    zeiefBuffer.writeUInt16LE(ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE - 4, 2);\n    // Original Size           8 bytes    Original uncompressed file size\n    writeUInt64LE(zeiefBuffer, this.uncompressedSize, 4);\n    // Compressed Size         8 bytes    Size of compressed data\n    writeUInt64LE(zeiefBuffer, this.compressedSize, 12);\n    // Relative Header Offset  8 bytes    Offset of local header record\n    writeUInt64LE(zeiefBuffer, this.relativeOffsetOfLocalHeader, 20);\n    // Disk Start Number       4 bytes    Number of the disk on which this file starts\n    // (omit)\n  } else {\n    versionNeededToExtract = VERSION_NEEDED_TO_EXTRACT_UTF8;\n    zeiefBuffer = EMPTY_BUFFER;\n  }\n\n  // central file header signature   4 bytes  (0x02014b50)\n  fixedSizeStuff.writeUInt32LE(0x02014b50, 0);\n  // version made by                 2 bytes\n  fixedSizeStuff.writeUInt16LE(VERSION_MADE_BY, 4);\n  // version needed to extract       2 bytes\n  fixedSizeStuff.writeUInt16LE(versionNeededToExtract, 6);\n  // general purpose bit flag        2 bytes\n  fixedSizeStuff.writeUInt16LE(generalPurposeBitFlag, 8);\n  // compression method              2 bytes\n  fixedSizeStuff.writeUInt16LE(this.getCompressionMethod(), 10);\n  // last mod file time              2 bytes\n  fixedSizeStuff.writeUInt16LE(this.lastModFileTime, 12);\n  // last mod file date              2 bytes\n  fixedSizeStuff.writeUInt16LE(this.lastModFileDate, 14);\n  // crc-32                          4 bytes\n  fixedSizeStuff.writeUInt32LE(this.crc32, 16);\n  // compressed size                 4 bytes\n  fixedSizeStuff.writeUInt32LE(normalCompressedSize, 20);\n  // uncompressed size               4 bytes\n  fixedSizeStuff.writeUInt32LE(normalUncompressedSize, 24);\n  // file name length                2 bytes\n  fixedSizeStuff.writeUInt16LE(this.utf8FileName.length, 28);\n  // extra field length              2 bytes\n  fixedSizeStuff.writeUInt16LE(zeiefBuffer.length, 30);\n  // file comment length             2 bytes\n  fixedSizeStuff.writeUInt16LE(this.fileComment.length, 32);\n  // disk number start               2 bytes\n  fixedSizeStuff.writeUInt16LE(0, 34);\n  // internal file attributes        2 bytes\n  fixedSizeStuff.writeUInt16LE(0, 36);\n  // external file attributes        4 bytes\n  fixedSizeStuff.writeUInt32LE(this.externalFileAttributes, 38);\n  // relative offset of local header 4 bytes\n  fixedSizeStuff.writeUInt32LE(normalRelativeOffsetOfLocalHeader, 42);\n\n  return Buffer.concat([\n    fixedSizeStuff,\n    // file name (variable size)\n    this.utf8FileName,\n    // extra field (variable size)\n    zeiefBuffer,\n    // file comment (variable size)\n    this.fileComment,\n  ]);\n};\nEntry.prototype.getCompressionMethod = function() {\n  var NO_COMPRESSION = 0;\n  var DEFLATE_COMPRESSION = 8;\n  return this.compress ? DEFLATE_COMPRESSION : NO_COMPRESSION;\n};\n\nfunction dateToDosDateTime(jsDate) {\n  var date = 0;\n  date |= jsDate.getDate() & 0x1f; // 1-31\n  date |= ((jsDate.getMonth() + 1) & 0xf) << 5; // 0-11, 1-12\n  date |= ((jsDate.getFullYear() - 1980) & 0x7f) << 9; // 0-128, 1980-2108\n\n  var time = 0;\n  time |= Math.floor(jsDate.getSeconds() / 2); // 0-59, 0-29 (lose odd numbers)\n  time |= (jsDate.getMinutes() & 0x3f) << 5; // 0-59\n  time |= (jsDate.getHours() & 0x1f) << 11; // 0-23\n\n  return {date: date, time: time};\n}\n\nfunction writeUInt64LE(buffer, n, offset) {\n  // can't use bitshift here, because JavaScript only allows bitshifting on 32-bit integers.\n  var high = Math.floor(n / 0x100000000);\n  var low = n % 0x100000000;\n  buffer.writeUInt32LE(low, offset);\n  buffer.writeUInt32LE(high, offset + 4);\n}\n\nfunction defaultCallback(err) {\n  if (err) throw err;\n}\n\nutil.inherits(ByteCounter, Transform);\nfunction ByteCounter(options) {\n  Transform.call(this, options);\n  this.byteCount = 0;\n}\nByteCounter.prototype._transform = function(chunk, encoding, cb) {\n  this.byteCount += chunk.length;\n  cb(null, chunk);\n};\n\nutil.inherits(Crc32Watcher, Transform);\nfunction Crc32Watcher(options) {\n  Transform.call(this, options);\n  this.crc32 = 0;\n}\nCrc32Watcher.prototype._transform = function(chunk, encoding, cb) {\n  this.crc32 = crc32.unsigned(chunk, this.crc32);\n  cb(null, chunk);\n};\n\nvar cp437 = '\\u0000☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ';\nif (cp437.length !== 256) throw new Error(\"assertion failure\");\nvar reverseCp437 = null;\n\nfunction encodeCp437(string) {\n  if (/^[\\x20-\\x7e]*$/.test(string)) {\n    // CP437, ASCII, and UTF-8 overlap in this range.\n    return bufferFrom(string, \"utf-8\");\n  }\n\n  // This is the slow path.\n  if (reverseCp437 == null) {\n    // cache this once\n    reverseCp437 = {};\n    for (var i = 0; i < cp437.length; i++) {\n      reverseCp437[cp437[i]] = i;\n    }\n  }\n\n  var result = bufferAlloc(string.length);\n  for (var i = 0; i < string.length; i++) {\n    var b = reverseCp437[string[i]];\n    if (b == null) throw new Error(\"character not encodable in CP437: \" + JSON.stringify(string[i]));\n    result[i] = b;\n  }\n\n  return result;\n}\n\nfunction bufferAlloc(size) {\n  bufferAlloc = modern;\n  try {\n    return bufferAlloc(size);\n  } catch (e) {\n    bufferAlloc = legacy;\n    return bufferAlloc(size);\n  }\n  function modern(size) {\n    return Buffer.allocUnsafe(size);\n  }\n  function legacy(size) {\n    return new Buffer(size);\n  }\n}\nfunction bufferFrom(something, encoding) {\n  bufferFrom = modern;\n  try {\n    return bufferFrom(something, encoding);\n  } catch (e) {\n    bufferFrom = legacy;\n    return bufferFrom(something, encoding);\n  }\n  function modern(something, encoding) {\n    return Buffer.from(something, encoding);\n  }\n  function legacy(something, encoding) {\n    return new Buffer(something, encoding);\n  }\n}\nfunction bufferIncludes(buffer, content) {\n  bufferIncludes = modern;\n  try {\n    return bufferIncludes(buffer, content);\n  } catch (e) {\n    bufferIncludes = legacy;\n    return bufferIncludes(buffer, content);\n  }\n  function modern(buffer, content) {\n    return buffer.includes(content);\n  }\n  function legacy(buffer, content) {\n    for (var i = 0; i <= buffer.length - content.length; i++) {\n      for (var j = 0;; j++) {\n        if (j === content.length) return true;\n        if (buffer[i + j] !== content[j]) break;\n      }\n    }\n    return false;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * as yazl from 'yazl';\nexport * as yauzl from 'yauzl';\nconst extractZip = require('./third_party/extract-zip');\nexport const extract = extractZip;\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const yazl: typeof import('../bundles/zip/node_modules/@types/yazl') = require('./zipBundleImpl').yazl;\nexport type { ZipFile } from '../bundles/zip/node_modules/@types/yazl';\nexport const yauzl: typeof import('../bundles/zip/node_modules/@types/yauzl') = require('./zipBundleImpl').yauzl;\nexport type { Entry, ZipFile as UnzipFile } from '../bundles/zip/node_modules/@types/yauzl';\nexport const extract: typeof import('../bundles/zip/src/third_party/extract-zip.d.ts') = require('./zipBundleImpl').extract;\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport { ManualPromise } from '../../utils/isomorphic/manualPromise';\nimport { yazl } from '../../zipBundle';\n\nimport type { EventEmitter } from 'events';\n\nexport const existsAsync = (path: string): Promise<boolean> => new Promise(resolve => fs.stat(path, err => resolve(!err)));\n\nexport async function mkdirIfNeeded(filePath: string) {\n  // This will harmlessly throw on windows if the dirname is the root directory.\n  await fs.promises.mkdir(path.dirname(filePath), { recursive: true }).catch(() => {});\n}\n\nexport async function removeFolders(dirs: string[]): Promise<(Error| undefined)[]> {\n  return await Promise.all(dirs.map((dir: string) =>\n    fs.promises.rm(dir, { recursive: true, force: true, maxRetries: 10 }).catch(e => e)\n  ));\n}\n\nexport function canAccessFile(file: string) {\n  if (!file)\n    return false;\n\n  try {\n    fs.accessSync(file);\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nexport async function copyFileAndMakeWritable(from: string, to: string) {\n  await fs.promises.copyFile(from, to);\n  await fs.promises.chmod(to, 0o664);\n}\n\nexport function sanitizeForFilePath(s: string) {\n  return s.replace(/[\\x00-\\x2C\\x2E-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7F]+/g, '-');\n}\n\nexport function toPosixPath(aPath: string): string {\n  return aPath.split(path.sep).join(path.posix.sep);\n}\n\ntype NameValue = { name: string, value: string };\ntype SerializedFSOperation = {\n  op: 'mkdir', dir: string,\n} | {\n  op: 'writeFile', file: string, content: string | Buffer, skipIfExists?: boolean,\n} | {\n  op: 'appendFile', file: string, content: string,\n} | {\n  op: 'copyFile', from: string, to: string,\n} | {\n  op: 'zip', entries: NameValue[], zipFileName: string,\n};\n\nexport class SerializedFS {\n  private _buffers = new Map<string, string[]>(); // Should never be accessed from within appendOperation.\n  private _error: Error | undefined;\n  private _operations: SerializedFSOperation[] = [];\n  private _operationsDone: ManualPromise<void>;\n\n  constructor() {\n    this._operationsDone = new ManualPromise();\n    this._operationsDone.resolve();  // No operations scheduled yet.\n  }\n\n  mkdir(dir: string) {\n    this._appendOperation({ op: 'mkdir', dir });\n  }\n\n  writeFile(file: string, content: string | Buffer, skipIfExists?: boolean) {\n    this._buffers.delete(file); // No need to flush the buffer since we'll overwrite anyway.\n    this._appendOperation({ op: 'writeFile', file, content, skipIfExists });\n  }\n\n  appendFile(file: string, text: string, flush?: boolean) {\n    if (!this._buffers.has(file))\n      this._buffers.set(file, []);\n    this._buffers.get(file)!.push(text);\n    if (flush)\n      this._flushFile(file);\n  }\n\n  private _flushFile(file: string) {\n    const buffer = this._buffers.get(file);\n    if (buffer === undefined)\n      return;\n    const content = buffer.join('');\n    this._buffers.delete(file);\n    this._appendOperation({ op: 'appendFile', file, content });\n  }\n\n  copyFile(from: string, to: string) {\n    this._flushFile(from);\n    this._buffers.delete(to); // No need to flush the buffer since we'll overwrite anyway.\n    this._appendOperation({ op: 'copyFile', from, to });\n  }\n\n  async syncAndGetError() {\n    for (const file of this._buffers.keys())\n      this._flushFile(file);\n    await this._operationsDone;\n    return this._error;\n  }\n\n  zip(entries: NameValue[], zipFileName: string) {\n    for (const file of this._buffers.keys())\n      this._flushFile(file);\n\n    // Chain the export operation against write operations,\n    // so that files do not change during the export.\n    this._appendOperation({ op: 'zip', entries, zipFileName });\n  }\n\n  // This method serializes all writes to the trace.\n  private _appendOperation(op: SerializedFSOperation): void {\n    const last = this._operations[this._operations.length - 1];\n    if (last?.op === 'appendFile' && op.op === 'appendFile' && last.file === op.file) {\n      // Merge pending appendFile operations for performance.\n      last.content += op.content;\n      return;\n    }\n\n    this._operations.push(op);\n    if (this._operationsDone.isDone())\n      this._performOperations();\n  }\n\n  private async _performOperations() {\n    this._operationsDone = new ManualPromise();\n    while (this._operations.length) {\n      const op = this._operations.shift()!;\n      // Ignore all operations after the first error.\n      if (this._error)\n        continue;\n      try {\n        await this._performOperation(op);\n      } catch (e) {\n        this._error = e;\n      }\n    }\n    this._operationsDone.resolve();\n  }\n\n  private async _performOperation(op: SerializedFSOperation) {\n    switch (op.op) {\n      case 'mkdir': {\n        await fs.promises.mkdir(op.dir, { recursive: true });\n        return;\n      }\n      case 'writeFile': {\n        // Note: 'wx' flag only writes when the file does not exist.\n        // See https://nodejs.org/api/fs.html#file-system-flags.\n        // This way tracing never have to write the same resource twice.\n        if (op.skipIfExists)\n          await fs.promises.writeFile(op.file, op.content, { flag: 'wx' }).catch(() => {});\n        else\n          await fs.promises.writeFile(op.file, op.content);\n        return;\n      }\n      case 'copyFile': {\n        await fs.promises.copyFile(op.from, op.to);\n        return;\n      }\n      case 'appendFile': {\n        await fs.promises.appendFile(op.file, op.content);\n        return;\n      }\n      case 'zip': {\n        const zipFile = new yazl.ZipFile();\n        const result = new ManualPromise<void>();\n        (zipFile as any as EventEmitter).on('error', error => result.reject(error));\n        for (const entry of op.entries)\n          zipFile.addFile(entry.value, entry.name);\n        zipFile.end();\n        zipFile.outputStream\n            .pipe(fs.createWriteStream(op.zipFileName))\n            .on('close', () => result.resolve())\n            .on('error', error => result.reject(error));\n        await result;\n        return;\n      }\n    }\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as childProcess from 'child_process';\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { debugLogger } from '../utils/debugLogger';\nimport { ManualPromise } from '../../utils/isomorphic/manualPromise';\nimport { getUserAgent } from '../utils/userAgent';\nimport { progress as ProgressBar, colors } from '../../utilsBundle';\nimport { existsAsync } from '../utils/fileUtils';\n\nimport { browserDirectoryToMarkerFilePath } from '.';\n\nimport type { DownloadParams } from './oopDownloadBrowserMain';\n\nexport async function downloadBrowserWithProgressBar(title: string, browserDirectory: string, executablePath: string | undefined, downloadURLs: string[], downloadFileName: string, downloadSocketTimeout: number): Promise<boolean> {\n  if (await existsAsync(browserDirectoryToMarkerFilePath(browserDirectory))) {\n    // Already downloaded.\n    debugLogger.log('install', `${title} is already downloaded.`);\n    return false;\n  }\n\n  const zipPath = path.join(os.tmpdir(), downloadFileName);\n  try {\n    const retryCount = 5;\n    for (let attempt = 1; attempt <= retryCount; ++attempt) {\n      debugLogger.log('install', `downloading ${title} - attempt #${attempt}`);\n      const url = downloadURLs[(attempt - 1) % downloadURLs.length];\n      logPolitely(`Downloading ${title}` + colors.dim(` from ${url}`));\n      const { error } = await downloadBrowserWithProgressBarOutOfProcess(title, browserDirectory, url, zipPath, executablePath, downloadSocketTimeout);\n      if (!error) {\n        debugLogger.log('install', `SUCCESS installing ${title}`);\n        break;\n      }\n      if (await existsAsync(zipPath))\n        await fs.promises.unlink(zipPath);\n      if (await existsAsync(browserDirectory))\n        await fs.promises.rmdir(browserDirectory, { recursive: true });\n      const errorMessage = error?.message || '';\n      debugLogger.log('install', `attempt #${attempt} - ERROR: ${errorMessage}`);\n      if (attempt >= retryCount)\n        throw error;\n    }\n  } catch (e) {\n    debugLogger.log('install', `FAILED installation ${title} with error: ${e}`);\n    process.exitCode = 1;\n    throw e;\n  } finally {\n    if (await existsAsync(zipPath))\n      await fs.promises.unlink(zipPath);\n  }\n  logPolitely(`${title} downloaded to ${browserDirectory}`);\n  return true;\n}\n\n/**\n * Node.js has a bug where the process can exit with 0 code even though there was an uncaught exception.\n * Thats why we execute it in a separate process and check manually if the destination file exists.\n * https://github.com/microsoft/playwright/issues/17394\n */\nfunction downloadBrowserWithProgressBarOutOfProcess(title: string, browserDirectory: string, url: string, zipPath: string, executablePath: string | undefined, socketTimeout: number): Promise<{ error: Error | null }> {\n  const cp = childProcess.fork(path.join(__dirname, 'oopDownloadBrowserMain.js'));\n  const promise = new ManualPromise<{ error: Error | null }>();\n  const progress = getDownloadProgress();\n  cp.on('message', (message: any) => {\n    if (message?.method === 'log')\n      debugLogger.log('install', message.params.message);\n    if (message?.method === 'progress')\n      progress(message.params.done, message.params.total);\n  });\n  cp.on('exit', code => {\n    if (code !== 0) {\n      promise.resolve({ error: new Error(`Download failure, code=${code}`) });\n      return;\n    }\n    if (!fs.existsSync(browserDirectoryToMarkerFilePath(browserDirectory)))\n      promise.resolve({ error: new Error(`Download failure, ${browserDirectoryToMarkerFilePath(browserDirectory)} does not exist`) });\n    else\n      promise.resolve({ error: null });\n  });\n  cp.on('error', error => {\n    promise.resolve({ error });\n  });\n\n  debugLogger.log('install', `running download:`);\n  debugLogger.log('install', `-- from url: ${url}`);\n  debugLogger.log('install', `-- to location: ${zipPath}`);\n  const downloadParams: DownloadParams = {\n    title,\n    browserDirectory,\n    url,\n    zipPath,\n    executablePath,\n    socketTimeout,\n    userAgent: getUserAgent(),\n  };\n  cp.send({ method: 'download', params: downloadParams });\n  return promise;\n}\n\nexport function logPolitely(toBeLogged: string) {\n  const logLevel = process.env.npm_config_loglevel;\n  const logLevelDisplay = ['silent', 'error', 'warn'].indexOf(logLevel || '') > -1;\n\n  if (!logLevelDisplay)\n    console.log(toBeLogged);  // eslint-disable-line no-console\n}\n\ntype OnProgressCallback = (downloadedBytes: number, totalBytes: number) => void;\n\nfunction getDownloadProgress(): OnProgressCallback {\n  if (process.stdout.isTTY)\n    return getAnimatedDownloadProgress();\n  return getBasicDownloadProgress();\n}\n\nfunction getAnimatedDownloadProgress(): OnProgressCallback {\n  let progressBar: ProgressBar;\n  let lastDownloadedBytes = 0;\n\n  return (downloadedBytes: number, totalBytes: number) => {\n    if (!progressBar) {\n      progressBar = new ProgressBar(\n          `${toMegabytes(\n              totalBytes\n          )} [:bar] :percent :etas`,\n          {\n            complete: '=',\n            incomplete: ' ',\n            width: 20,\n            total: totalBytes,\n          }\n      );\n    }\n    const delta = downloadedBytes - lastDownloadedBytes;\n    lastDownloadedBytes = downloadedBytes;\n    progressBar.tick(delta);\n  };\n}\n\nfunction getBasicDownloadProgress(): OnProgressCallback {\n  const totalRows = 10;\n  const stepWidth = 8;\n  let lastRow = -1;\n  return (downloadedBytes: number, totalBytes: number) => {\n    const percentage = downloadedBytes / totalBytes;\n    const row = Math.floor(totalRows * percentage);\n    if (row > lastRow) {\n      lastRow = row;\n      const percentageString = String(percentage * 100 | 0).padStart(3);\n      // eslint-disable-next-line no-console\n      console.log(`|${'■'.repeat(row * stepWidth)}${' '.repeat((totalRows - row) * stepWidth)}| ${percentageString}% of ${toMegabytes(totalBytes)}`);\n    }\n  };\n}\n\nfunction toMegabytes(bytes: number) {\n  const mb = bytes / 1024 / 1024;\n  return `${Math.round(mb * 10) / 10} MiB`;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// - This file is used to execute 'npx playwright install-deps'\n// - The reverse mappings \"lib2package\" are generated with the following script:\n//     ./utils/linux-browser-dependencies/run.sh ubuntu:20.04\n\nexport const deps: any = {\n  'ubuntu20.04-x64': {\n    tools: [\n      'xvfb',\n      'fonts-noto-color-emoji',\n      'ttf-unifont',\n      'libfontconfig',\n      'libfreetype6',\n      'xfonts-cyrillic',\n      'xfonts-scalable',\n      'fonts-liberation',\n      'fonts-ipafont-gothic',\n      'fonts-wqy-zenhei',\n      'fonts-tlwg-loma-otf',\n      'ttf-ubuntu-font-family',\n    ],\n    chromium: [\n      'fonts-liberation',\n      'libasound2',\n      'libatk-bridge2.0-0',\n      'libatk1.0-0',\n      'libatspi2.0-0',\n      'libcairo2',\n      'libcups2',\n      'libdbus-1-3',\n      'libdrm2',\n      'libegl1',\n      'libgbm1',\n      'libglib2.0-0',\n      'libgtk-3-0',\n      'libnspr4',\n      'libnss3',\n      'libpango-1.0-0',\n      'libx11-6',\n      'libx11-xcb1',\n      'libxcb1',\n      'libxcomposite1',\n      'libxdamage1',\n      'libxext6',\n      'libxfixes3',\n      'libxrandr2',\n      'libxshmfence1',\n    ],\n    firefox: [\n      'ffmpeg',\n      'libatk1.0-0',\n      'libcairo-gobject2',\n      'libcairo2',\n      'libdbus-1-3',\n      'libdbus-glib-1-2',\n      'libfontconfig1',\n      'libfreetype6',\n      'libgdk-pixbuf2.0-0',\n      'libglib2.0-0',\n      'libgtk-3-0',\n      'libpango-1.0-0',\n      'libpangocairo-1.0-0',\n      'libpangoft2-1.0-0',\n      'libx11-6',\n      'libx11-xcb1',\n      'libxcb-shm0',\n      'libxcb1',\n      'libxcomposite1',\n      'libxcursor1',\n      'libxdamage1',\n      'libxext6',\n      'libxfixes3',\n      'libxi6',\n      'libxrender1',\n      'libxt6',\n      'libxtst6'\n    ],\n    webkit: [\n      'libenchant-2-2',\n      'libflite1',\n      'libx264-155',\n      'libatk-bridge2.0-0',\n      'libatk1.0-0',\n      'libcairo2',\n      'libegl1',\n      'libenchant1c2a',\n      'libepoxy0',\n      'libevdev2',\n      'libfontconfig1',\n      'libfreetype6',\n      'libgdk-pixbuf2.0-0',\n      'libgl1',\n      'libgles2',\n      'libglib2.0-0',\n      'libgtk-3-0',\n      'libgudev-1.0-0',\n      'libharfbuzz-icu0',\n      'libharfbuzz0b',\n      'libhyphen0',\n      'libicu66',\n      'libjpeg-turbo8',\n      'libnghttp2-14',\n      'libnotify4',\n      'libopengl0',\n      'libopenjp2-7',\n      'libopus0',\n      'libpango-1.0-0',\n      'libpng16-16',\n      'libsecret-1-0',\n      'libvpx6',\n      'libwayland-client0',\n      'libwayland-egl1',\n      'libwayland-server0',\n      'libwebp6',\n      'libwebpdemux2',\n      'libwoff1',\n      'libx11-6',\n      'libxcomposite1',\n      'libxdamage1',\n      'libxkbcommon0',\n      'libxml2',\n      'libxslt1.1',\n      'libatomic1',\n      'libevent-2.1-7',\n    ],\n    lib2package: {\n      'libflite.so.1': 'libflite1',\n      'libflite_usenglish.so.1': 'libflite1',\n      'libflite_cmu_grapheme_lang.so.1': 'libflite1',\n      'libflite_cmu_grapheme_lex.so.1': 'libflite1',\n      'libflite_cmu_indic_lang.so.1': 'libflite1',\n      'libflite_cmu_indic_lex.so.1': 'libflite1',\n      'libflite_cmulex.so.1': 'libflite1',\n      'libflite_cmu_time_awb.so.1': 'libflite1',\n      'libflite_cmu_us_awb.so.1': 'libflite1',\n      'libflite_cmu_us_kal16.so.1': 'libflite1',\n      'libflite_cmu_us_kal.so.1': 'libflite1',\n      'libflite_cmu_us_rms.so.1': 'libflite1',\n      'libflite_cmu_us_slt.so.1': 'libflite1',\n      'libx264.so': 'libx264-155',\n      'libasound.so.2': 'libasound2',\n      'libatk-1.0.so.0': 'libatk1.0-0',\n      'libatk-bridge-2.0.so.0': 'libatk-bridge2.0-0',\n      'libatspi.so.0': 'libatspi2.0-0',\n      'libcairo-gobject.so.2': 'libcairo-gobject2',\n      'libcairo.so.2': 'libcairo2',\n      'libcups.so.2': 'libcups2',\n      'libdbus-1.so.3': 'libdbus-1-3',\n      'libdbus-glib-1.so.2': 'libdbus-glib-1-2',\n      'libdrm.so.2': 'libdrm2',\n      'libEGL.so.1': 'libegl1',\n      'libenchant.so.1': 'libenchant1c2a',\n      'libevdev.so.2': 'libevdev2',\n      'libepoxy.so.0': 'libepoxy0',\n      'libfontconfig.so.1': 'libfontconfig1',\n      'libfreetype.so.6': 'libfreetype6',\n      'libgbm.so.1': 'libgbm1',\n      'libgdk_pixbuf-2.0.so.0': 'libgdk-pixbuf2.0-0',\n      'libgdk-3.so.0': 'libgtk-3-0',\n      'libgdk-x11-2.0.so.0': 'libgtk2.0-0',\n      'libgio-2.0.so.0': 'libglib2.0-0',\n      'libGL.so.1': 'libgl1',\n      'libGLESv2.so.2': 'libgles2',\n      'libglib-2.0.so.0': 'libglib2.0-0',\n      'libgmodule-2.0.so.0': 'libglib2.0-0',\n      'libgobject-2.0.so.0': 'libglib2.0-0',\n      'libgthread-2.0.so.0': 'libglib2.0-0',\n      'libgtk-3.so.0': 'libgtk-3-0',\n      'libgtk-x11-2.0.so.0': 'libgtk2.0-0',\n      'libgudev-1.0.so.0': 'libgudev-1.0-0',\n      'libharfbuzz-icu.so.0': 'libharfbuzz-icu0',\n      'libharfbuzz.so.0': 'libharfbuzz0b',\n      'libhyphen.so.0': 'libhyphen0',\n      'libicui18n.so.66': 'libicu66',\n      'libicuuc.so.66': 'libicu66',\n      'libjpeg.so.8': 'libjpeg-turbo8',\n      'libnotify.so.4': 'libnotify4',\n      'libnspr4.so': 'libnspr4',\n      'libnss3.so': 'libnss3',\n      'libnssutil3.so': 'libnss3',\n      'libOpenGL.so.0': 'libopengl0',\n      'libopenjp2.so.7': 'libopenjp2-7',\n      'libopus.so.0': 'libopus0',\n      'libpango-1.0.so.0': 'libpango-1.0-0',\n      'libpangocairo-1.0.so.0': 'libpangocairo-1.0-0',\n      'libpangoft2-1.0.so.0': 'libpangoft2-1.0-0',\n      'libpng16.so.16': 'libpng16-16',\n      'libsecret-1.so.0': 'libsecret-1-0',\n      'libsmime3.so': 'libnss3',\n      'libvpx.so.6': 'libvpx6',\n      'libwayland-client.so.0': 'libwayland-client0',\n      'libwayland-egl.so.1': 'libwayland-egl1',\n      'libwayland-server.so.0': 'libwayland-server0',\n      'libwebp.so.6': 'libwebp6',\n      'libwebpdemux.so.2': 'libwebpdemux2',\n      'libwoff2dec.so.1.0.2': 'libwoff1',\n      'libX11-xcb.so.1': 'libx11-xcb1',\n      'libX11.so.6': 'libx11-6',\n      'libxcb-dri3.so.0': 'libxcb-dri3-0',\n      'libxcb-shm.so.0': 'libxcb-shm0',\n      'libxcb.so.1': 'libxcb1',\n      'libXcomposite.so.1': 'libxcomposite1',\n      'libXcursor.so.1': 'libxcursor1',\n      'libXdamage.so.1': 'libxdamage1',\n      'libXext.so.6': 'libxext6',\n      'libXfixes.so.3': 'libxfixes3',\n      'libXi.so.6': 'libxi6',\n      'libxkbcommon.so.0': 'libxkbcommon0',\n      'libxml2.so.2': 'libxml2',\n      'libXrandr.so.2': 'libxrandr2',\n      'libXrender.so.1': 'libxrender1',\n      'libxslt.so.1': 'libxslt1.1',\n      'libXt.so.6': 'libxt6',\n      'libXtst.so.6': 'libxtst6',\n      'libxshmfence.so.1': 'libxshmfence1',\n      'libatomic.so.1': 'libatomic1',\n      'libenchant-2.so.2': 'libenchant-2-2',\n      'libevent-2.1.so.7': 'libevent-2.1-7',\n    },\n  },\n\n  'ubuntu22.04-x64': {\n    tools: [\n      'xvfb',\n      'fonts-noto-color-emoji',\n      'fonts-unifont',\n      'libfontconfig1',\n      'libfreetype6',\n      'xfonts-cyrillic',\n      'xfonts-scalable',\n      'fonts-liberation',\n      'fonts-ipafont-gothic',\n      'fonts-wqy-zenhei',\n      'fonts-tlwg-loma-otf',\n      'fonts-freefont-ttf',\n    ],\n    chromium: [\n      'libasound2',\n      'libatk-bridge2.0-0',\n      'libatk1.0-0',\n      'libatspi2.0-0',\n      'libcairo2',\n      'libcups2',\n      'libdbus-1-3',\n      'libdrm2',\n      'libgbm1',\n      'libglib2.0-0',\n      'libnspr4',\n      'libnss3',\n      'libpango-1.0-0',\n      'libwayland-client0',\n      'libx11-6',\n      'libxcb1',\n      'libxcomposite1',\n      'libxdamage1',\n      'libxext6',\n      'libxfixes3',\n      'libxkbcommon0',\n      'libxrandr2'\n    ],\n    firefox: [\n      'ffmpeg',\n      'libasound2',\n      'libatk1.0-0',\n      'libcairo-gobject2',\n      'libcairo2',\n      'libdbus-1-3',\n      'libdbus-glib-1-2',\n      'libfontconfig1',\n      'libfreetype6',\n      'libgdk-pixbuf-2.0-0',\n      'libglib2.0-0',\n      'libgtk-3-0',\n      'libpango-1.0-0',\n      'libpangocairo-1.0-0',\n      'libx11-6',\n      'libx11-xcb1',\n      'libxcb-shm0',\n      'libxcb1',\n      'libxcomposite1',\n      'libxcursor1',\n      'libxdamage1',\n      'libxext6',\n      'libxfixes3',\n      'libxi6',\n      'libxrandr2',\n      'libxrender1',\n      'libxtst6'\n    ],\n    webkit: [\n      'libsoup-3.0-0',\n      'libenchant-2-2',\n      'gstreamer1.0-libav',\n      'gstreamer1.0-plugins-bad',\n      'gstreamer1.0-plugins-base',\n      'gstreamer1.0-plugins-good',\n      'libicu70',\n      'libatk-bridge2.0-0',\n      'libatk1.0-0',\n      'libcairo2',\n      'libdbus-1-3',\n      'libdrm2',\n      'libegl1',\n      'libepoxy0',\n      'libevdev2',\n      'libffi7',\n      'libfontconfig1',\n      'libfreetype6',\n      'libgbm1',\n      'libgdk-pixbuf-2.0-0',\n      'libgles2',\n      'libglib2.0-0',\n      'libglx0',\n      'libgstreamer-gl1.0-0',\n      'libgstreamer-plugins-base1.0-0',\n      'libgstreamer1.0-0',\n      'libgtk-4-1',\n      'libgudev-1.0-0',\n      'libharfbuzz-icu0',\n      'libharfbuzz0b',\n      'libhyphen0',\n      'libjpeg-turbo8',\n      'liblcms2-2',\n      'libmanette-0.2-0',\n      'libnotify4',\n      'libopengl0',\n      'libopenjp2-7',\n      'libopus0',\n      'libpango-1.0-0',\n      'libpng16-16',\n      'libproxy1v5',\n      'libsecret-1-0',\n      'libwayland-client0',\n      'libwayland-egl1',\n      'libwayland-server0',\n      'libwebpdemux2',\n      'libwoff1',\n      'libx11-6',\n      'libxcomposite1',\n      'libxdamage1',\n      'libxkbcommon0',\n      'libxml2',\n      'libxslt1.1',\n      'libx264-163',\n      'libatomic1',\n      'libevent-2.1-7',\n      'libavif13',\n    ],\n    lib2package: {\n      'libavif.so.13': 'libavif13',\n      'libsoup-3.0.so.0': 'libsoup-3.0-0',\n      'libasound.so.2': 'libasound2',\n      'libatk-1.0.so.0': 'libatk1.0-0',\n      'libatk-bridge-2.0.so.0': 'libatk-bridge2.0-0',\n      'libatspi.so.0': 'libatspi2.0-0',\n      'libcairo-gobject.so.2': 'libcairo-gobject2',\n      'libcairo.so.2': 'libcairo2',\n      'libcups.so.2': 'libcups2',\n      'libdbus-1.so.3': 'libdbus-1-3',\n      'libdbus-glib-1.so.2': 'libdbus-glib-1-2',\n      'libdrm.so.2': 'libdrm2',\n      'libEGL.so.1': 'libegl1',\n      'libepoxy.so.0': 'libepoxy0',\n      'libevdev.so.2': 'libevdev2',\n      'libffi.so.7': 'libffi7',\n      'libfontconfig.so.1': 'libfontconfig1',\n      'libfreetype.so.6': 'libfreetype6',\n      'libgbm.so.1': 'libgbm1',\n      'libgdk_pixbuf-2.0.so.0': 'libgdk-pixbuf-2.0-0',\n      'libgdk-3.so.0': 'libgtk-3-0',\n      'libgio-2.0.so.0': 'libglib2.0-0',\n      'libGLESv2.so.2': 'libgles2',\n      'libglib-2.0.so.0': 'libglib2.0-0',\n      'libGLX.so.0': 'libglx0',\n      'libgmodule-2.0.so.0': 'libglib2.0-0',\n      'libgobject-2.0.so.0': 'libglib2.0-0',\n      'libgstallocators-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstapp-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstaudio-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstbase-1.0.so.0': 'libgstreamer1.0-0',\n      'libgstfft-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstgl-1.0.so.0': 'libgstreamer-gl1.0-0',\n      'libgstpbutils-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstreamer-1.0.so.0': 'libgstreamer1.0-0',\n      'libgsttag-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstvideo-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgtk-3.so.0': 'libgtk-3-0',\n      'libgtk-4.so.1': 'libgtk-4-1',\n      'libgudev-1.0.so.0': 'libgudev-1.0-0',\n      'libharfbuzz-icu.so.0': 'libharfbuzz-icu0',\n      'libharfbuzz.so.0': 'libharfbuzz0b',\n      'libhyphen.so.0': 'libhyphen0',\n      'libjpeg.so.8': 'libjpeg-turbo8',\n      'liblcms2.so.2': 'liblcms2-2',\n      'libmanette-0.2.so.0': 'libmanette-0.2-0',\n      'libnotify.so.4': 'libnotify4',\n      'libnspr4.so': 'libnspr4',\n      'libnss3.so': 'libnss3',\n      'libnssutil3.so': 'libnss3',\n      'libOpenGL.so.0': 'libopengl0',\n      'libopenjp2.so.7': 'libopenjp2-7',\n      'libopus.so.0': 'libopus0',\n      'libpango-1.0.so.0': 'libpango-1.0-0',\n      'libpangocairo-1.0.so.0': 'libpangocairo-1.0-0',\n      'libpng16.so.16': 'libpng16-16',\n      'libproxy.so.1': 'libproxy1v5',\n      'libsecret-1.so.0': 'libsecret-1-0',\n      'libsmime3.so': 'libnss3',\n      'libwayland-client.so.0': 'libwayland-client0',\n      'libwayland-egl.so.1': 'libwayland-egl1',\n      'libwayland-server.so.0': 'libwayland-server0',\n      'libwebpdemux.so.2': 'libwebpdemux2',\n      'libwoff2dec.so.1.0.2': 'libwoff1',\n      'libX11-xcb.so.1': 'libx11-xcb1',\n      'libX11.so.6': 'libx11-6',\n      'libxcb-shm.so.0': 'libxcb-shm0',\n      'libxcb.so.1': 'libxcb1',\n      'libXcomposite.so.1': 'libxcomposite1',\n      'libXcursor.so.1': 'libxcursor1',\n      'libXdamage.so.1': 'libxdamage1',\n      'libXext.so.6': 'libxext6',\n      'libXfixes.so.3': 'libxfixes3',\n      'libXi.so.6': 'libxi6',\n      'libxkbcommon.so.0': 'libxkbcommon0',\n      'libxml2.so.2': 'libxml2',\n      'libXrandr.so.2': 'libxrandr2',\n      'libXrender.so.1': 'libxrender1',\n      'libxslt.so.1': 'libxslt1.1',\n      'libXtst.so.6': 'libxtst6',\n      'libicui18n.so.60': 'libicu70',\n      'libicuuc.so.66': 'libicu70',\n      'libicui18n.so.66': 'libicu70',\n      'libwebp.so.6': 'libwebp6',\n      'libenchant-2.so.2': 'libenchant-2-2',\n      'libx264.so': 'libx264-163',\n      'libvpx.so.7': 'libvpx7',\n      'libatomic.so.1': 'libatomic1',\n      'libevent-2.1.so.7': 'libevent-2.1-7',\n    },\n  },\n\n  'ubuntu24.04-x64': {\n    tools: [\n      'xvfb',\n      'fonts-noto-color-emoji',\n      'fonts-unifont',\n      'libfontconfig1',\n      'libfreetype6',\n      'xfonts-cyrillic',\n      'xfonts-scalable',\n      'fonts-liberation',\n      'fonts-ipafont-gothic',\n      'fonts-wqy-zenhei',\n      'fonts-tlwg-loma-otf',\n      'fonts-freefont-ttf',\n    ],\n    chromium: [\n      'libasound2t64',\n      'libatk-bridge2.0-0t64',\n      'libatk1.0-0t64',\n      'libatspi2.0-0t64',\n      'libcairo2',\n      'libcups2t64',\n      'libdbus-1-3',\n      'libdrm2',\n      'libgbm1',\n      'libglib2.0-0t64',\n      'libnspr4',\n      'libnss3',\n      'libpango-1.0-0',\n      'libx11-6',\n      'libxcb1',\n      'libxcomposite1',\n      'libxdamage1',\n      'libxext6',\n      'libxfixes3',\n      'libxkbcommon0',\n      'libxrandr2'\n    ],\n    firefox: [\n      'libasound2t64',\n      'libatk1.0-0t64',\n      'libcairo-gobject2',\n      'libcairo2',\n      'libdbus-1-3',\n      'libfontconfig1',\n      'libfreetype6',\n      'libgdk-pixbuf-2.0-0',\n      'libglib2.0-0t64',\n      'libgtk-3-0t64',\n      'libpango-1.0-0',\n      'libpangocairo-1.0-0',\n      'libx11-6',\n      'libx11-xcb1',\n      'libxcb-shm0',\n      'libxcb1',\n      'libxcomposite1',\n      'libxcursor1',\n      'libxdamage1',\n      'libxext6',\n      'libxfixes3',\n      'libxi6',\n      'libxrandr2',\n      'libxrender1'\n    ],\n    webkit: [\n      'gstreamer1.0-libav',\n      'gstreamer1.0-plugins-bad',\n      'gstreamer1.0-plugins-base',\n      'gstreamer1.0-plugins-good',\n      'libicu74',\n      'libatomic1',\n      'libatk-bridge2.0-0t64',\n      'libatk1.0-0t64',\n      'libcairo-gobject2',\n      'libcairo2',\n      'libdbus-1-3',\n      'libdrm2',\n      'libenchant-2-2',\n      'libepoxy0',\n      'libevent-2.1-7t64',\n      'libflite1',\n      'libfontconfig1',\n      'libfreetype6',\n      'libgbm1',\n      'libgdk-pixbuf-2.0-0',\n      'libgles2',\n      'libglib2.0-0t64',\n      'libgstreamer-gl1.0-0',\n      'libgstreamer-plugins-bad1.0-0',\n      'libgstreamer-plugins-base1.0-0',\n      'libgstreamer1.0-0',\n      'libgtk-4-1',\n      'libharfbuzz-icu0',\n      'libharfbuzz0b',\n      'libhyphen0',\n      'libicu74',\n      'libjpeg-turbo8',\n      'liblcms2-2',\n      'libmanette-0.2-0',\n      'libopus0',\n      'libpango-1.0-0',\n      'libpangocairo-1.0-0',\n      'libpng16-16t64',\n      'libsecret-1-0',\n      'libvpx9',\n      'libwayland-client0',\n      'libwayland-egl1',\n      'libwayland-server0',\n      'libwebp7',\n      'libwebpdemux2',\n      'libwoff1',\n      'libx11-6',\n      'libxkbcommon0',\n      'libxml2',\n      'libxslt1.1',\n      'libx264-164',\n      'libavif16',\n    ],\n    lib2package: {\n      'libavif.so.16': 'libavif16',\n      'libasound.so.2': 'libasound2t64',\n      'libatk-1.0.so.0': 'libatk1.0-0t64',\n      'libatk-bridge-2.0.so.0': 'libatk-bridge2.0-0t64',\n      'libatomic.so.1': 'libatomic1',\n      'libatspi.so.0': 'libatspi2.0-0t64',\n      'libcairo-gobject.so.2': 'libcairo-gobject2',\n      'libcairo.so.2': 'libcairo2',\n      'libcups.so.2': 'libcups2t64',\n      'libdbus-1.so.3': 'libdbus-1-3',\n      'libdrm.so.2': 'libdrm2',\n      'libenchant-2.so.2': 'libenchant-2-2',\n      'libepoxy.so.0': 'libepoxy0',\n      'libevent-2.1.so.7': 'libevent-2.1-7t64',\n      'libflite_cmu_grapheme_lang.so.1': 'libflite1',\n      'libflite_cmu_grapheme_lex.so.1': 'libflite1',\n      'libflite_cmu_indic_lang.so.1': 'libflite1',\n      'libflite_cmu_indic_lex.so.1': 'libflite1',\n      'libflite_cmu_time_awb.so.1': 'libflite1',\n      'libflite_cmu_us_awb.so.1': 'libflite1',\n      'libflite_cmu_us_kal.so.1': 'libflite1',\n      'libflite_cmu_us_kal16.so.1': 'libflite1',\n      'libflite_cmu_us_rms.so.1': 'libflite1',\n      'libflite_cmu_us_slt.so.1': 'libflite1',\n      'libflite_cmulex.so.1': 'libflite1',\n      'libflite_usenglish.so.1': 'libflite1',\n      'libflite.so.1': 'libflite1',\n      'libfontconfig.so.1': 'libfontconfig1',\n      'libfreetype.so.6': 'libfreetype6',\n      'libgbm.so.1': 'libgbm1',\n      'libgdk_pixbuf-2.0.so.0': 'libgdk-pixbuf-2.0-0',\n      'libgdk-3.so.0': 'libgtk-3-0t64',\n      'libgio-2.0.so.0': 'libglib2.0-0t64',\n      'libGLESv2.so.2': 'libgles2',\n      'libglib-2.0.so.0': 'libglib2.0-0t64',\n      'libgmodule-2.0.so.0': 'libglib2.0-0t64',\n      'libgobject-2.0.so.0': 'libglib2.0-0t64',\n      'libgstallocators-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstapp-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstaudio-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstbase-1.0.so.0': 'libgstreamer1.0-0',\n      'libgstcodecparsers-1.0.so.0': 'libgstreamer-plugins-bad1.0-0',\n      'libgstfft-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstgl-1.0.so.0': 'libgstreamer-gl1.0-0',\n      'libgstpbutils-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstreamer-1.0.so.0': 'libgstreamer1.0-0',\n      'libgsttag-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstvideo-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgtk-3.so.0': 'libgtk-3-0t64',\n      'libgtk-4.so.1': 'libgtk-4-1',\n      'libharfbuzz-icu.so.0': 'libharfbuzz-icu0',\n      'libharfbuzz.so.0': 'libharfbuzz0b',\n      'libhyphen.so.0': 'libhyphen0',\n      'libicudata.so.74': 'libicu74',\n      'libicui18n.so.74': 'libicu74',\n      'libicuuc.so.74': 'libicu74',\n      'libjpeg.so.8': 'libjpeg-turbo8',\n      'liblcms2.so.2': 'liblcms2-2',\n      'libmanette-0.2.so.0': 'libmanette-0.2-0',\n      'libnspr4.so': 'libnspr4',\n      'libnss3.so': 'libnss3',\n      'libnssutil3.so': 'libnss3',\n      'libopus.so.0': 'libopus0',\n      'libpango-1.0.so.0': 'libpango-1.0-0',\n      'libpangocairo-1.0.so.0': 'libpangocairo-1.0-0',\n      'libpng16.so.16': 'libpng16-16t64',\n      'libsecret-1.so.0': 'libsecret-1-0',\n      'libsmime3.so': 'libnss3',\n      'libsoup-3.0.so.0': 'libsoup-3.0-0',\n      'libvpx.so.9': 'libvpx9',\n      'libwayland-client.so.0': 'libwayland-client0',\n      'libwayland-egl.so.1': 'libwayland-egl1',\n      'libwayland-server.so.0': 'libwayland-server0',\n      'libwebp.so.7': 'libwebp7',\n      'libwebpdemux.so.2': 'libwebpdemux2',\n      'libwoff2dec.so.1.0.2': 'libwoff1',\n      'libX11-xcb.so.1': 'libx11-xcb1',\n      'libX11.so.6': 'libx11-6',\n      'libxcb-shm.so.0': 'libxcb-shm0',\n      'libxcb.so.1': 'libxcb1',\n      'libXcomposite.so.1': 'libxcomposite1',\n      'libXcursor.so.1': 'libxcursor1',\n      'libXdamage.so.1': 'libxdamage1',\n      'libXext.so.6': 'libxext6',\n      'libXfixes.so.3': 'libxfixes3',\n      'libXi.so.6': 'libxi6',\n      'libxkbcommon.so.0': 'libxkbcommon0',\n      'libxml2.so.2': 'libxml2',\n      'libXrandr.so.2': 'libxrandr2',\n      'libXrender.so.1': 'libxrender1',\n      'libxslt.so.1': 'libxslt1.1',\n      'libx264.so': 'libx264-164',\n    },\n  },\n\n  'debian11-x64': {\n    tools: [\n      'xvfb',\n      'fonts-noto-color-emoji',\n      'fonts-unifont',\n      'libfontconfig1',\n      'libfreetype6',\n      'xfonts-cyrillic',\n      'xfonts-scalable',\n      'fonts-liberation',\n      'fonts-ipafont-gothic',\n      'fonts-wqy-zenhei',\n      'fonts-tlwg-loma-otf',\n      'fonts-freefont-ttf',\n    ],\n    chromium: [\n      'libasound2',\n      'libatk-bridge2.0-0',\n      'libatk1.0-0',\n      'libatspi2.0-0',\n      'libcairo2',\n      'libcups2',\n      'libdbus-1-3',\n      'libdrm2',\n      'libgbm1',\n      'libglib2.0-0',\n      'libnspr4',\n      'libnss3',\n      'libpango-1.0-0',\n      'libwayland-client0',\n      'libx11-6',\n      'libxcb1',\n      'libxcomposite1',\n      'libxdamage1',\n      'libxext6',\n      'libxfixes3',\n      'libxkbcommon0',\n      'libxrandr2'\n    ],\n    firefox: [\n      'libasound2',\n      'libatk1.0-0',\n      'libcairo-gobject2',\n      'libcairo2',\n      'libdbus-1-3',\n      'libdbus-glib-1-2',\n      'libfontconfig1',\n      'libfreetype6',\n      'libgdk-pixbuf-2.0-0',\n      'libglib2.0-0',\n      'libgtk-3-0',\n      'libharfbuzz0b',\n      'libpango-1.0-0',\n      'libpangocairo-1.0-0',\n      'libx11-6',\n      'libx11-xcb1',\n      'libxcb-shm0',\n      'libxcb1',\n      'libxcomposite1',\n      'libxcursor1',\n      'libxdamage1',\n      'libxext6',\n      'libxfixes3',\n      'libxi6',\n      'libxrandr2',\n      'libxrender1',\n      'libxtst6'\n    ],\n    webkit: [\n      'gstreamer1.0-libav',\n      'gstreamer1.0-plugins-bad',\n      'gstreamer1.0-plugins-base',\n      'gstreamer1.0-plugins-good',\n      'libatk-bridge2.0-0',\n      'libatk1.0-0',\n      'libcairo2',\n      'libdbus-1-3',\n      'libdrm2',\n      'libegl1',\n      'libenchant-2-2',\n      'libepoxy0',\n      'libevdev2',\n      'libfontconfig1',\n      'libfreetype6',\n      'libgbm1',\n      'libgdk-pixbuf-2.0-0',\n      'libgles2',\n      'libglib2.0-0',\n      'libglx0',\n      'libgstreamer-gl1.0-0',\n      'libgstreamer-plugins-base1.0-0',\n      'libgstreamer1.0-0',\n      'libgtk-3-0',\n      'libgudev-1.0-0',\n      'libharfbuzz-icu0',\n      'libharfbuzz0b',\n      'libhyphen0',\n      'libicu67',\n      'libjpeg62-turbo',\n      'liblcms2-2',\n      'libmanette-0.2-0',\n      'libnghttp2-14',\n      'libnotify4',\n      'libopengl0',\n      'libopenjp2-7',\n      'libopus0',\n      'libpango-1.0-0',\n      'libpng16-16',\n      'libproxy1v5',\n      'libsecret-1-0',\n      'libwayland-client0',\n      'libwayland-egl1',\n      'libwayland-server0',\n      'libwebp6',\n      'libwebpdemux2',\n      'libwoff1',\n      'libx11-6',\n      'libxcomposite1',\n      'libxdamage1',\n      'libxkbcommon0',\n      'libxml2',\n      'libxslt1.1',\n      'libatomic1',\n      'libevent-2.1-7',\n    ],\n    lib2package: {\n      'libasound.so.2': 'libasound2',\n      'libatk-1.0.so.0': 'libatk1.0-0',\n      'libatk-bridge-2.0.so.0': 'libatk-bridge2.0-0',\n      'libatspi.so.0': 'libatspi2.0-0',\n      'libcairo-gobject.so.2': 'libcairo-gobject2',\n      'libcairo.so.2': 'libcairo2',\n      'libcups.so.2': 'libcups2',\n      'libdbus-1.so.3': 'libdbus-1-3',\n      'libdbus-glib-1.so.2': 'libdbus-glib-1-2',\n      'libdrm.so.2': 'libdrm2',\n      'libEGL.so.1': 'libegl1',\n      'libenchant-2.so.2': 'libenchant-2-2',\n      'libepoxy.so.0': 'libepoxy0',\n      'libevdev.so.2': 'libevdev2',\n      'libfontconfig.so.1': 'libfontconfig1',\n      'libfreetype.so.6': 'libfreetype6',\n      'libgbm.so.1': 'libgbm1',\n      'libgdk_pixbuf-2.0.so.0': 'libgdk-pixbuf-2.0-0',\n      'libgdk-3.so.0': 'libgtk-3-0',\n      'libgio-2.0.so.0': 'libglib2.0-0',\n      'libGLESv2.so.2': 'libgles2',\n      'libglib-2.0.so.0': 'libglib2.0-0',\n      'libGLX.so.0': 'libglx0',\n      'libgmodule-2.0.so.0': 'libglib2.0-0',\n      'libgobject-2.0.so.0': 'libglib2.0-0',\n      'libgstallocators-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstapp-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstaudio-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstbase-1.0.so.0': 'libgstreamer1.0-0',\n      'libgstfft-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstgl-1.0.so.0': 'libgstreamer-gl1.0-0',\n      'libgstpbutils-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstreamer-1.0.so.0': 'libgstreamer1.0-0',\n      'libgsttag-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgstvideo-1.0.so.0': 'libgstreamer-plugins-base1.0-0',\n      'libgtk-3.so.0': 'libgtk-3-0',\n      'libgudev-1.0.so.0': 'libgudev-1.0-0',\n      'libharfbuzz-icu.so.0': 'libharfbuzz-icu0',\n      'libharfbuzz.so.0': 'libharfbuzz0b',\n      'libhyphen.so.0': 'libhyphen0',\n      'libicui18n.so.67': 'libicu67',\n      'libicuuc.so.67': 'libicu67',\n      'libjpeg.so.62': 'libjpeg62-turbo',\n      'liblcms2.so.2': 'liblcms2-2',\n      'libmanette-0.2.so.0': 'libmanette-0.2-0',\n      'libnotify.so.4': 'libnotify4',\n      'libnspr4.so': 'libnspr4',\n      'libnss3.so': 'libnss3',\n      'libnssutil3.so': 'libnss3',\n      'libOpenGL.so.0': 'libopengl0',\n      'libopenjp2.so.7': 'libopenjp2-7',\n      'libopus.so.0': 'libopus0',\n      'libpango-1.0.so.0': 'libpango-1.0-0',\n      'libpangocairo-1.0.so.0': 'libpangocairo-1.0-0',\n      'libpng16.so.16': 'libpng16-16',\n      'libproxy.so.1': 'libproxy1v5',\n      'libsecret-1.so.0': 'libsecret-1-0',\n      'libsmime3.so': 'libnss3',\n      'libwayland-client.so.0': 'libwayland-client0',\n      'libwayland-egl.so.1': 'libwayland-egl1',\n      'libwayland-server.so.0': 'libwayland-server0',\n      'libwebp.so.6': 'libwebp6',\n      'libwebpdemux.so.2': 'libwebpdemux2',\n      'libwoff2dec.so.1.0.2': 'libwoff1',\n      'libX11-xcb.so.1': 'libx11-xcb1',\n      'libX11.so.6': 'libx11-6',\n      'libxcb-shm.so.0': 'libxcb-shm0',\n      'libxcb.so.1': 'libxcb1',\n      'libXcomposite.so.1': 'libxcomposite1',\n      'libXcursor.so.1': 'libxcursor1',\n      'libXdamage.so.1': 'libxdamage1',\n      'libXext.so.6': 'libxext6',\n      'libXfixes.so.3': 'libxfixes3',\n      'libXi.so.6': 'libxi6',\n      'libxkbcommon.so.0': 'libxkbcommon0',\n      'libxml2.so.2': 'libxml2',\n      'libXrandr.so.2': 'libxrandr2',\n      'libXrender.so.1': 'libxrender1',\n      'libxslt.so.1': 'libxslt1.1',\n      'libXtst.so.6': 'libxtst6',\n      'libatomic.so.1': 'libatomic1',\n      'libevent-2.1.so.7': 'libevent-2.1-7',\n    }\n  },\n  'debian12-x64': {\n    tools: [\n      'xvfb',\n      'fonts-noto-color-emoji',\n      'fonts-unifont',\n      'libfontconfig1',\n      'libfreetype6',\n      'xfonts-scalable',\n      'fonts-liberation',\n      'fonts-ipafont-gothic',\n      'fonts-wqy-zenhei',\n      'fonts-tlwg-loma-otf',\n      'fonts-freefont-ttf',\n    ],\n    chromium: [\n      'libasound2',\n      'libatk-bridge2.0-0',\n      'libatk1.0-0',\n      'libatspi2.0-0',\n      'libcairo2',\n      'libcups2',\n      'libdbus-1-3',\n      'libdrm2',\n      'libgbm1',\n      'libglib2.0-0',\n      'libnspr4',\n      'libnss3',\n      'libpango-1.0-0',\n      'libx11-6',\n      'libxcb1',\n      'libxcomposite1',\n      'libxdamage1',\n      'libxext6',\n      'libxfixes3',\n      'libxkbcommon0',\n      'libxrandr2'\n    ],\n    firefox: [\n      'libasound2',\n      'libatk1.0-0',\n      'libcairo-gobject2',\n      'libcairo2',\n      'libdbus-1-3',\n      'libdbus-glib-1-2',\n      'libfontconfig1',\n      'libfreetype6',\n      'libgdk-pixbuf-2.0-0',\n      'libglib2.0-0',\n      'libgtk-3-0',\n      'libharfbuzz0b',\n      'libpango-1.0-0',\n      'libpangocairo-1.0-0',\n      'libx11-6',\n      'libx11-xcb1',\n      'libxcb-shm0',\n      'libxcb1',\n      'libxcomposite1',\n      'libxcursor1',\n      'libxdamage1',\n      'libxext6',\n      'libxfixes3',\n      'libxi6',\n      'libxrandr2',\n      'libxrender1',\n      'libxtst6'\n    ],\n    webkit: [\n      'libsoup-3.0-0',\n      'gstreamer1.0-libav',\n      'gstreamer1.0-plugins-bad',\n      'gstreamer1.0-plugins-base',\n      'gstreamer1.0-plugins-good',\n      'libatk-bridge2.0-0',\n      'libatk1.0-0',\n      'libcairo2',\n      'libdbus-1-3',\n      'libdrm2',\n      'libegl1',\n      'libenchant-2-2',\n      'libepoxy0',\n      'libevdev2',\n      'libfontconfig1',\n      'libfreetype6',\n      'libgbm1',\n      'libgdk-pixbuf-2.0-0',\n      'libgles2',\n      'libglib2.0-0',\n      'libglx0',\n      'libgstreamer-gl1.0-0',\n      'libgstreamer-plugins-base1.0-0',\n      'libgstreamer1.0-0',\n      'libgtk-4-1',\n      'libgudev-1.0-0',\n      'libharfbuzz-icu0',\n      'libharfbuzz0b',\n      'libhyphen0',\n      'libicu72',\n      'libjpeg62-turbo',\n      'liblcms2-2',\n      'libmanette-0.2-0',\n      'libnotify4',\n      'libopengl0',\n      'libopenjp2-7',\n      'libopus0',\n      'libpango-1.0-0',\n      'libpng16-16',\n      'libproxy1v5',\n      'libsecret-1-0',\n      'libwayland-client0',\n      'libwayland-egl1',\n      'libwayland-server0',\n      'libwebp7',\n      'libwebpdemux2',\n      'libwoff1',\n      'libx11-6',\n      'libxcomposite1',\n      'libxdamage1',\n      'libxkbcommon0',\n      'libxml2',\n      'libxslt1.1',\n      'libatomic1',\n      'libevent-2.1-7',\n      'libavif15',\n    ],\n    lib2package: {\n      'libavif.so.15': 'libavif15',\n      'libsoup-3.0.so.0': 'libsoup-3.0-0',\n      'libasound.so.2': 'libasound2',\n      'libatk-1.0.so.0': 'libatk1.0-0',\n      'libatk-bridge-2.0.so.0': 'libatk-bridge2.0-0',\n      'libatspi.so.0': 'libatspi2.0-0',\n      'libcairo.so.2': 'libcairo2',\n      'libcups.so.2': 'libcups2',\n      'libdbus-1.so.3': 'libdbus-1-3',\n      'libdrm.so.2': 'libdrm2',\n      'libgbm.so.1': 'libgbm1',\n      'libgio-2.0.so.0': 'libglib2.0-0',\n      'libglib-2.0.so.0': 'libglib2.0-0',\n      'libgobject-2.0.so.0': 'libglib2.0-0',\n      'libnspr4.so': 'libnspr4',\n      'libnss3.so': 'libnss3',\n      'libnssutil3.so': 'libnss3',\n      'libpango-1.0.so.0': 'libpango-1.0-0',\n      'libsmime3.so': 'libnss3',\n      'libX11.so.6': 'libx11-6',\n      'libxcb.so.1': 'libxcb1',\n      'libXcomposite.so.1': 'libxcomposite1',\n      'libXdamage.so.1': 'libxdamage1',\n      'libXext.so.6': 'libxext6',\n      'libXfixes.so.3': 'libxfixes3',\n      'libxkbcommon.so.0': 'libxkbcommon0',\n      'libXrandr.so.2': 'libxrandr2',\n      'libgtk-4.so.1': 'libgtk-4-1',\n    }\n  },\n};\n\ndeps['ubuntu20.04-arm64'] = {\n  tools: [...deps['ubuntu20.04-x64'].tools],\n  chromium: [...deps['ubuntu20.04-x64'].chromium],\n  firefox: [\n    ...deps['ubuntu20.04-x64'].firefox,\n  ],\n  webkit: [\n    ...deps['ubuntu20.04-x64'].webkit,\n  ],\n  lib2package: {\n    ...deps['ubuntu20.04-x64'].lib2package,\n  },\n};\n\ndeps['ubuntu22.04-arm64'] = {\n  tools: [...deps['ubuntu22.04-x64'].tools],\n  chromium: [...deps['ubuntu22.04-x64'].chromium],\n  firefox: [\n    ...deps['ubuntu22.04-x64'].firefox,\n  ],\n  webkit: [\n    ...deps['ubuntu22.04-x64'].webkit,\n  ],\n  lib2package: {\n    ...deps['ubuntu22.04-x64'].lib2package,\n  },\n};\n\ndeps['ubuntu24.04-arm64'] = {\n  tools: [...deps['ubuntu24.04-x64'].tools],\n  chromium: [...deps['ubuntu24.04-x64'].chromium],\n  firefox: [\n    ...deps['ubuntu24.04-x64'].firefox,\n  ],\n  webkit: [\n    ...deps['ubuntu24.04-x64'].webkit,\n  ],\n  lib2package: {\n    ...deps['ubuntu24.04-x64'].lib2package,\n  },\n};\n\ndeps['debian11-arm64'] = {\n  tools: [...deps['debian11-x64'].tools],\n  chromium: [...deps['debian11-x64'].chromium],\n  firefox: [\n    ...deps['debian11-x64'].firefox,\n  ],\n  webkit: [\n    ...deps['debian11-x64'].webkit,\n  ],\n  lib2package: {\n    ...deps['debian11-x64'].lib2package,\n  },\n};\n\ndeps['debian12-arm64'] = {\n  tools: [...deps['debian12-x64'].tools],\n  chromium: [...deps['debian12-x64'].chromium],\n  firefox: [\n    ...deps['debian12-x64'].firefox,\n  ],\n  webkit: [\n    ...deps['debian12-x64'].webkit,\n  ],\n  lib2package: {\n    ...deps['debian12-x64'].lib2package,\n  },\n};\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function wrapInASCIIBox(text: string, padding = 0): string {\n  const lines = text.split('\\n');\n  const maxLength = Math.max(...lines.map(line => line.length));\n  return [\n    '╔' + '═'.repeat(maxLength + padding * 2) + '╗',\n    ...lines.map(line => '║' + ' '.repeat(padding) + line + ' '.repeat(maxLength - line.length + padding) + '║'),\n    '╚' + '═'.repeat(maxLength + padding * 2) + '╝',\n  ].join('\\n');\n}\n\nexport function jsonStringifyForceASCII(object: any): string {\n  return JSON.stringify(object).replace(\n      /[\\u007f-\\uffff]/g,\n      c => '\\\\u' + ('0000' + c.charCodeAt(0).toString(16)).slice(-4)\n  );\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport os from 'os';\n\nimport { getLinuxDistributionInfoSync } from './linuxUtils';\n\nexport type HostPlatform = 'win64' |\n                           'mac10.13' |\n                           'mac10.14' |\n                           'mac10.15' |\n                           'mac11' | 'mac11-arm64' |\n                           'mac12' | 'mac12-arm64' |\n                           'mac13' | 'mac13-arm64' |\n                           'mac14' | 'mac14-arm64' |\n                           'mac15' | 'mac15-arm64' |\n                           'ubuntu18.04-x64' | 'ubuntu18.04-arm64' |\n                           'ubuntu20.04-x64' | 'ubuntu20.04-arm64' |\n                           'ubuntu22.04-x64' | 'ubuntu22.04-arm64' |\n                           'ubuntu24.04-x64' | 'ubuntu24.04-arm64' |\n                           'debian11-x64' | 'debian11-arm64' |\n                           'debian12-x64' | 'debian12-arm64' |\n                           '<unknown>';\n\nfunction calculatePlatform(): { hostPlatform: HostPlatform, isOfficiallySupportedPlatform: boolean } {\n  if (process.env.PLAYWRIGHT_HOST_PLATFORM_OVERRIDE) {\n    return {\n      hostPlatform: process.env.PLAYWRIGHT_HOST_PLATFORM_OVERRIDE as HostPlatform,\n      isOfficiallySupportedPlatform: false\n    };\n  }\n  const platform = os.platform();\n  if (platform === 'darwin') {\n    const ver = os.release().split('.').map((a: string) => parseInt(a, 10));\n    let macVersion = '';\n    if (ver[0] < 18) {\n      // Everything before 10.14 is considered 10.13.\n      macVersion = 'mac10.13';\n    } else if (ver[0] === 18) {\n      macVersion = 'mac10.14';\n    } else if (ver[0] === 19) {\n      macVersion = 'mac10.15';\n    } else {\n      // ver[0] >= 20\n      const LAST_STABLE_MACOS_MAJOR_VERSION = 15;\n      // Best-effort support for MacOS beta versions.\n      macVersion = 'mac' + Math.min(ver[0] - 9, LAST_STABLE_MACOS_MAJOR_VERSION);\n      // BigSur is the first version that might run on Apple Silicon.\n      if (os.cpus().some(cpu => cpu.model.includes('Apple')))\n        macVersion += '-arm64';\n    }\n    return { hostPlatform: macVersion as HostPlatform, isOfficiallySupportedPlatform: true };\n  }\n  if (platform === 'linux') {\n    if (!['x64', 'arm64'].includes(os.arch()))\n      return { hostPlatform: '<unknown>', isOfficiallySupportedPlatform: false };\n\n    const archSuffix = '-' + os.arch();\n    const distroInfo = getLinuxDistributionInfoSync();\n\n    // Pop!_OS is ubuntu-based and has the same versions.\n    // KDE Neon is ubuntu-based and has the same versions.\n    // TUXEDO OS is ubuntu-based and has the same versions.\n    if (distroInfo?.id === 'ubuntu' || distroInfo?.id === 'pop' || distroInfo?.id === 'neon' || distroInfo?.id === 'tuxedo') {\n      const isUbuntu = distroInfo?.id === 'ubuntu';\n      const version = distroInfo?.version;\n      const major = parseInt(distroInfo.version, 10);\n      if (major < 20)\n        return { hostPlatform: ('ubuntu18.04' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform: false };\n      if (major < 22)\n        return { hostPlatform: ('ubuntu20.04' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform: isUbuntu && version === '20.04' };\n      if (major < 24)\n        return { hostPlatform: ('ubuntu22.04' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform: isUbuntu && version === '22.04' };\n      if (major < 26)\n        return { hostPlatform: ('ubuntu24.04' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform: isUbuntu && version === '24.04' };\n      return { hostPlatform: ('ubuntu' + distroInfo.version + archSuffix) as HostPlatform, isOfficiallySupportedPlatform: false };\n    }\n    // Linux Mint is ubuntu-based but does not have the same versions\n    if (distroInfo?.id === 'linuxmint') {\n      const mintMajor = parseInt(distroInfo.version, 10);\n      if (mintMajor <= 20)\n        return { hostPlatform: ('ubuntu20.04' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform: false };\n      if (mintMajor === 21)\n        return { hostPlatform: ('ubuntu22.04' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform: false };\n      return { hostPlatform: ('ubuntu24.04' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform: false };\n    }\n    if (distroInfo?.id === 'debian' || distroInfo?.id === 'raspbian') {\n      const isOfficiallySupportedPlatform = distroInfo?.id === 'debian';\n      if (distroInfo?.version === '11')\n        return { hostPlatform: ('debian11' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform };\n      if (distroInfo?.version === '12')\n        return { hostPlatform: ('debian12' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform };\n      // use most recent supported release for 'debian testing' and 'unstable'.\n      // they never include a numeric version entry in /etc/os-release.\n      if (distroInfo?.version === '')\n        return { hostPlatform: ('debian12' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform };\n    }\n    return { hostPlatform: ('ubuntu20.04' + archSuffix) as HostPlatform, isOfficiallySupportedPlatform: false };\n  }\n  if (platform === 'win32')\n    return { hostPlatform: 'win64', isOfficiallySupportedPlatform: true };\n  return { hostPlatform: '<unknown>', isOfficiallySupportedPlatform: false };\n}\n\nexport const { hostPlatform, isOfficiallySupportedPlatform } = calculatePlatform();\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { spawn } from 'child_process';\n\nimport type { SpawnOptions } from 'child_process';\n\nexport function spawnAsync(cmd: string, args: string[], options: SpawnOptions = {}): Promise<{stdout: string, stderr: string, code: number | null, error?: Error}> {\n  const process = spawn(cmd, args, Object.assign({ windowsHide: true }, options));\n\n  return new Promise(resolve => {\n    let stdout = '';\n    let stderr = '';\n    if (process.stdout)\n      process.stdout.on('data', data => stdout += data.toString());\n    if (process.stderr)\n      process.stderr.on('data', data => stderr += data.toString());\n    process.on('close', code => resolve({ stdout, stderr, code }));\n    process.on('error', error => resolve({ stdout, stderr, code: 0, error }));\n  });\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as childProcess from 'child_process';\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { deps } from './nativeDeps';\nimport { wrapInASCIIBox } from '../utils/ascii';\nimport { hostPlatform, isOfficiallySupportedPlatform } from '../utils/hostPlatform';\nimport { spawnAsync } from '../utils/spawnAsync';\nimport { getPlaywrightVersion } from '../utils/userAgent';\n\nimport { buildPlaywrightCLICommand, registry } from '.';\n\nconst BIN_DIRECTORY = path.join(__dirname, '..', '..', '..', 'bin');\nconst languageBindingVersion = process.env.PW_CLI_DISPLAY_VERSION || require('../../../package.json').version;\n\nconst dockerVersionFilePath = '/ms-playwright/.docker-info';\nexport async function writeDockerVersion(dockerImageNameTemplate: string) {\n  await fs.promises.mkdir(path.dirname(dockerVersionFilePath), { recursive: true });\n  await fs.promises.writeFile(dockerVersionFilePath, JSON.stringify(dockerVersion(dockerImageNameTemplate), null, 2), 'utf8');\n  // Make sure version file is globally accessible.\n  await fs.promises.chmod(dockerVersionFilePath, 0o777);\n}\n\nexport function dockerVersion(dockerImageNameTemplate: string): { driverVersion: string, dockerImageName: string } {\n  return {\n    driverVersion: languageBindingVersion,\n    dockerImageName: dockerImageNameTemplate.replace('%version%', languageBindingVersion),\n  };\n}\n\nexport function readDockerVersionSync(): null | { driverVersion: string, dockerImageName: string, dockerImageNameTemplate: string } {\n  try {\n    const data = JSON.parse(fs.readFileSync(dockerVersionFilePath, 'utf8'));\n    return {\n      ...data,\n      dockerImageNameTemplate: data.dockerImageName.replace(data.driverVersion, '%version%'),\n    };\n  } catch (e) {\n    return null;\n  }\n}\n\nconst checkExecutable = (filePath: string) => {\n  if (process.platform === 'win32')\n    return filePath.endsWith('.exe');\n  return fs.promises.access(filePath, fs.constants.X_OK).then(() => true).catch(() => false);\n};\n\nfunction isSupportedWindowsVersion(): boolean {\n  if (os.platform() !== 'win32' || os.arch() !== 'x64')\n    return false;\n  const [major, minor] = os.release().split('.').map(token => parseInt(token, 10));\n  // This is based on: https://stackoverflow.com/questions/42524606/how-to-get-windows-version-using-node-js/44916050#44916050\n  // The table with versions is taken from: https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-osversioninfoexw#remarks\n  // Windows 7 is not supported and is encoded as `6.1`.\n  return major > 6 || (major === 6 && minor > 1);\n}\n\nexport type DependencyGroup = 'chromium' | 'firefox' | 'webkit' | 'tools';\n\nexport async function installDependenciesWindows(targets: Set<DependencyGroup>, dryRun: boolean): Promise<void> {\n  if (targets.has('chromium')) {\n    const command = 'powershell.exe';\n    const args = ['-ExecutionPolicy', 'Bypass', '-File', path.join(BIN_DIRECTORY, 'install_media_pack.ps1')];\n    if (dryRun) {\n      console.log(`${command} ${quoteProcessArgs(args).join(' ')}`); // eslint-disable-line no-console\n      return;\n    }\n    const { code } = await spawnAsync(command, args, { cwd: BIN_DIRECTORY, stdio: 'inherit' });\n    if (code !== 0)\n      throw new Error('Failed to install windows dependencies!');\n  }\n}\n\nexport async function installDependenciesLinux(targets: Set<DependencyGroup>, dryRun: boolean) {\n  const libraries: string[] = [];\n  const platform = hostPlatform;\n  if (!isOfficiallySupportedPlatform)\n    console.warn(`BEWARE: your OS is not officially supported by Playwright; installing dependencies for ${platform} as a fallback.`); // eslint-disable-line no-console\n  for (const target of targets) {\n    const info = deps[platform];\n    if (!info) {\n      console.warn(`Cannot install dependencies for ${platform} with Playwright ${getPlaywrightVersion()}!`);  // eslint-disable-line no-console\n      return;\n    }\n    libraries.push(...info[target]);\n  }\n  const uniqueLibraries = Array.from(new Set(libraries));\n  if (!dryRun)\n    console.log(`Installing dependencies...`);  // eslint-disable-line no-console\n  const commands: string[] = [];\n  commands.push('apt-get update');\n  commands.push(['apt-get', 'install', '-y', '--no-install-recommends',\n    ...uniqueLibraries,\n  ].join(' '));\n  const { command, args, elevatedPermissions } = await transformCommandsForRoot(commands);\n  if (dryRun) {\n    console.log(`${command} ${quoteProcessArgs(args).join(' ')}`); // eslint-disable-line no-console\n    return;\n  }\n  if (elevatedPermissions)\n    console.log('Switching to root user to install dependencies...'); // eslint-disable-line no-console\n  const child = childProcess.spawn(command, args, { stdio: 'inherit' });\n  await new Promise<void>((resolve, reject) => {\n    child.on('exit', (code: number) => code === 0 ? resolve() : reject(new Error(`Installation process exited with code: ${code}`)));\n    child.on('error', reject);\n  });\n}\n\nexport async function validateDependenciesWindows(sdkLanguage: string, windowsExeAndDllDirectories: string[]) {\n  const directoryPaths = windowsExeAndDllDirectories;\n  const lddPaths: string[] = [];\n  for (const directoryPath of directoryPaths)\n    lddPaths.push(...(await executablesOrSharedLibraries(directoryPath)));\n  const allMissingDeps = await Promise.all(lddPaths.map(lddPath => missingFileDependenciesWindows(sdkLanguage, lddPath)));\n  const missingDeps: Set<string> = new Set();\n  for (const deps of allMissingDeps) {\n    for (const dep of deps)\n      missingDeps.add(dep);\n  }\n\n  if (!missingDeps.size)\n    return;\n\n  let isCrtMissing = false;\n  let isMediaFoundationMissing = false;\n  for (const dep of missingDeps) {\n    if (dep.startsWith('api-ms-win-crt') || dep === 'vcruntime140.dll' || dep === 'vcruntime140_1.dll' || dep === 'msvcp140.dll')\n      isCrtMissing = true;\n    else if (dep === 'mf.dll' || dep === 'mfplat.dll' ||  dep === 'msmpeg2vdec.dll' || dep === 'evr.dll' || dep === 'avrt.dll')\n      isMediaFoundationMissing = true;\n  }\n\n  const details = [];\n\n  if (isCrtMissing) {\n    details.push(\n        `Some of the Universal C Runtime files cannot be found on the system. You can fix`,\n        `that by installing Microsoft Visual C++ Redistributable for Visual Studio from:`,\n        `https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads`,\n        ``);\n  }\n\n  if (isMediaFoundationMissing) {\n    details.push(\n        `Some of the Media Foundation files cannot be found on the system. If you are`,\n        `on Windows Server try fixing this by running the following command in PowerShell`,\n        `as Administrator:`,\n        ``,\n        `    Install-WindowsFeature Server-Media-Foundation`,\n        ``,\n        `For Windows N editions visit:`,\n        `https://support.microsoft.com/en-us/help/3145500/media-feature-pack-list-for-windows-n-editions`,\n        ``);\n  }\n\n  details.push(\n      `Full list of missing libraries:`,\n      `    ${[...missingDeps].join('\\n    ')}`,\n      ``);\n\n  const message = `Host system is missing dependencies!\\n\\n${details.join('\\n')}`;\n  if (isSupportedWindowsVersion()) {\n    throw new Error(message);\n  } else {\n    // eslint-disable-next-line no-console\n    console.warn(`WARNING: running on unsupported windows version!`);\n    // eslint-disable-next-line no-console\n    console.warn(message);\n  }\n}\n\nexport async function validateDependenciesLinux(sdkLanguage: string, linuxLddDirectories: string[], dlOpenLibraries: string[]) {\n  const directoryPaths = linuxLddDirectories;\n  const lddPaths: string[] = [];\n  for (const directoryPath of directoryPaths)\n    lddPaths.push(...(await executablesOrSharedLibraries(directoryPath)));\n  const missingDepsPerFile = await Promise.all(lddPaths.map(lddPath => missingFileDependencies(lddPath, directoryPaths)));\n  const missingDeps: Set<string> = new Set();\n  for (const deps of missingDepsPerFile) {\n    for (const dep of deps)\n      missingDeps.add(dep);\n  }\n  for (const dep of (await missingDLOPENLibraries(dlOpenLibraries)))\n    missingDeps.add(dep);\n  if (!missingDeps.size)\n    return;\n  const allMissingDeps = new Set(missingDeps);\n  // Check Ubuntu version.\n  const missingPackages = new Set();\n\n  const libraryToPackageNameMapping = deps[hostPlatform] ? {\n    ...(deps[hostPlatform]?.lib2package || {}),\n    ...MANUAL_LIBRARY_TO_PACKAGE_NAME_UBUNTU,\n  } : {};\n  // Translate missing dependencies to package names to install with apt.\n  for (const missingDep of missingDeps) {\n    const packageName = libraryToPackageNameMapping[missingDep];\n    if (packageName) {\n      missingPackages.add(packageName);\n      missingDeps.delete(missingDep);\n    }\n  }\n\n  const maybeSudo = process.getuid?.() && os.platform() !== 'win32' ? 'sudo ' : '';\n  const dockerInfo = readDockerVersionSync();\n  const errorLines = [\n    `Host system is missing dependencies to run browsers.`,\n  ];\n  // Ignore patch versions when comparing docker container version and Playwright version:\n  // we **NEVER** roll browsers in patch releases, so native dependencies do not change.\n  if (dockerInfo && !dockerInfo.driverVersion.startsWith(getPlaywrightVersion(true /* majorMinorOnly */) + '.')) {\n    // We are running in a docker container with unmatching version.\n    // In this case, we know how to install dependencies in it.\n    const pwVersion = getPlaywrightVersion();\n    const requiredDockerImage = dockerInfo.dockerImageName.replace(dockerInfo.driverVersion, pwVersion);\n    errorLines.push(...[\n      `This is most likely due to Docker image version not matching Playwright version:`,\n      `- Playwright  : ${pwVersion}`,\n      `- Docker image: ${dockerInfo.driverVersion}`,\n      ``,\n      `Either:`,\n      `- (recommended) use Docker image \"${requiredDockerImage}\"`,\n      `- (alternative 1) run the following command inside Docker to install missing dependencies:`,\n      ``,\n      `    ${maybeSudo}${buildPlaywrightCLICommand(sdkLanguage, 'install-deps')}`,\n      ``,\n      `- (alternative 2) use apt inside Docker:`,\n      ``,\n      `    ${maybeSudo}apt-get install ${[...missingPackages].join('\\\\\\n        ')}`,\n      ``,\n      `<3 Playwright Team`,\n    ]);\n  } else if (missingPackages.size && !missingDeps.size) {\n    // Only known dependencies are missing for browsers.\n    // Suggest installation with a Playwright CLI.\n    errorLines.push(...[\n      `Please install them with the following command:`,\n      ``,\n      `    ${maybeSudo}${buildPlaywrightCLICommand(sdkLanguage, 'install-deps')}`,\n      ``,\n      `Alternatively, use apt:`,\n      `    ${maybeSudo}apt-get install ${[...missingPackages].join('\\\\\\n        ')}`,\n      ``,\n      `<3 Playwright Team`,\n    ]);\n  } else {\n    // Unhappy path: we either run on unknown distribution, or we failed to resolve all missing\n    // libraries to package names.\n    // Print missing libraries only:\n    errorLines.push(...[\n      `Missing libraries:`,\n      ...[...allMissingDeps].map(dep => '    ' + dep),\n    ]);\n  }\n\n  throw new Error('\\n' + wrapInASCIIBox(errorLines.join('\\n'), 1));\n}\n\nfunction isSharedLib(basename: string) {\n  switch (os.platform()) {\n    case 'linux':\n      return basename.endsWith('.so') || basename.includes('.so.');\n    case 'win32':\n      return basename.endsWith('.dll');\n    default:\n      return false;\n  }\n}\n\nasync function executablesOrSharedLibraries(directoryPath: string): Promise<string[]> {\n  if (!fs.existsSync(directoryPath))\n    return [];\n  const allPaths = (await fs.promises.readdir(directoryPath)).map(file => path.resolve(directoryPath, file));\n  const allStats = await Promise.all(allPaths.map(aPath => fs.promises.stat(aPath)));\n  const filePaths = allPaths.filter((aPath, index) => (allStats[index] as any).isFile());\n\n  const executablersOrLibraries = (await Promise.all(filePaths.map(async filePath => {\n    const basename = path.basename(filePath).toLowerCase();\n    if (isSharedLib(basename))\n      return filePath;\n    if (await checkExecutable(filePath))\n      return filePath;\n    return false;\n  }))).filter(Boolean);\n\n  return executablersOrLibraries as string[];\n}\n\nasync function missingFileDependenciesWindows(sdkLanguage: string, filePath: string): Promise<Array<string>> {\n  const executable = registry.findExecutable('winldd')!.executablePathOrDie(sdkLanguage);\n  const dirname = path.dirname(filePath);\n  const { stdout, code } = await spawnAsync(executable, [filePath], {\n    cwd: dirname,\n    env: {\n      ...process.env,\n      LD_LIBRARY_PATH: process.env.LD_LIBRARY_PATH ? `${process.env.LD_LIBRARY_PATH}:${dirname}` : dirname,\n    },\n  });\n  if (code !== 0)\n    return [];\n  const missingDeps = stdout.split('\\n').map(line => line.trim()).filter(line => line.endsWith('not found') && line.includes('=>')).map(line => line.split('=>')[0].trim().toLowerCase());\n  return missingDeps;\n}\n\nasync function missingFileDependencies(filePath: string, extraLDPaths: string[]): Promise<Array<string>> {\n  const dirname = path.dirname(filePath);\n  let LD_LIBRARY_PATH = extraLDPaths.join(':');\n  if (process.env.LD_LIBRARY_PATH)\n    LD_LIBRARY_PATH = `${process.env.LD_LIBRARY_PATH}:${LD_LIBRARY_PATH}`;\n  const { stdout, code } = await spawnAsync('ldd', [filePath], {\n    cwd: dirname,\n    env: {\n      ...process.env,\n      LD_LIBRARY_PATH,\n    },\n  });\n  if (code !== 0)\n    return [];\n  const missingDeps = stdout.split('\\n').map(line => line.trim()).filter(line => line.endsWith('not found') && line.includes('=>')).map(line => line.split('=>')[0].trim());\n  return missingDeps;\n}\n\nasync function missingDLOPENLibraries(libraries: string[]): Promise<string[]> {\n  if (!libraries.length)\n    return [];\n  // NOTE: Using full-qualified path to `ldconfig` since `/sbin` is not part of the\n  // default PATH in CRON.\n  // @see https://github.com/microsoft/playwright/issues/3397\n  const { stdout, code, error } = await spawnAsync('/sbin/ldconfig', ['-p'], {});\n  if (code !== 0 || error)\n    return [];\n  const isLibraryAvailable = (library: string) => stdout.toLowerCase().includes(library.toLowerCase());\n  return libraries.filter(library => !isLibraryAvailable(library));\n}\n\nconst MANUAL_LIBRARY_TO_PACKAGE_NAME_UBUNTU: { [s: string]: string} = {\n  // libgstlibav.so (the only actual library provided by gstreamer1.0-libav) is not\n  // in the ldconfig cache, so we detect the actual library required for playing h.264\n  // and if it's missing recommend installing missing gstreamer lib.\n  // gstreamer1.0-libav -> libavcodec57 -> libx264-152\n  'libx264.so': 'gstreamer1.0-libav',\n};\n\nfunction quoteProcessArgs(args: string[]): string[] {\n  return args.map(arg => {\n    if (arg.includes(' '))\n      return `\"${arg}\"`;\n    return arg;\n  });\n}\n\nexport async function transformCommandsForRoot(commands: string[]): Promise<{ command: string, args: string[], elevatedPermissions: boolean}> {\n  const isRoot = process.getuid?.() === 0;\n  if (isRoot)\n    return { command: 'sh', args: ['-c', `${commands.join('&& ')}`], elevatedPermissions: false };\n  const sudoExists = await spawnAsync('which', ['sudo']);\n  if (sudoExists.code === 0)\n    return { command: 'sudo', args: ['--', 'sh', '-c', `${commands.join('&& ')}`], elevatedPermissions: true };\n  return { command: 'su', args: ['root', '-c', `${commands.join('&& ')}`], elevatedPermissions: true };\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function assert(value: any, message?: string): asserts value {\n  if (!value)\n    throw new Error(message || 'Assertion error');\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ntype HeadersArray = { name: string, value: string }[];\ntype HeadersObject = { [key: string]: string };\n\nexport function headersObjectToArray(headers: HeadersObject, separator?: string, setCookieSeparator?: string): HeadersArray {\n  if (!setCookieSeparator)\n    setCookieSeparator = separator;\n  const result: HeadersArray = [];\n  for (const name in headers) {\n    const values = headers[name];\n    if (values === undefined)\n      continue;\n    if (separator) {\n      const sep = name.toLowerCase() === 'set-cookie' ? setCookieSeparator : separator;\n      for (const value of values.split(sep!))\n        result.push({ name, value: value.trim() });\n    } else {\n      result.push({ name, value: values });\n    }\n  }\n  return result;\n}\n\nexport function headersArrayToObject(headers: HeadersArray, lowerCase: boolean): HeadersObject {\n  const result: HeadersObject = {};\n  for (const { name, value } of headers)\n    result[lowerCase ? name.toLowerCase() : name] = value;\n  return result;\n}\n","/* eslint-disable notice/notice */\n\n/*\n * The code in this file is licensed under the CC0 license.\n * http://creativecommons.org/publicdomain/zero/1.0/\n * It is free to use for any purpose. No attribution, permission, or reproduction of this license is required.\n */\n\n// Original at https://github.com/tabatkins/parse-css\n// Changes:\n//   - JS is replaced with TS.\n//   - Universal Module Definition wrapper is removed.\n//   - Everything not related to tokenizing - below the first exports block - is removed.\n\nexport interface CSSTokenInterface {\n  toSource(): string;\n  value: string | number | undefined;\n}\n\nconst between = function(num: number, first: number, last: number) { return num >= first && num <= last; };\nfunction digit(code: number) { return between(code, 0x30, 0x39); }\nfunction hexdigit(code: number) { return digit(code) || between(code, 0x41, 0x46) || between(code, 0x61, 0x66); }\nfunction uppercaseletter(code: number) { return between(code, 0x41, 0x5a); }\nfunction lowercaseletter(code: number) { return between(code, 0x61, 0x7a); }\nfunction letter(code: number) { return uppercaseletter(code) || lowercaseletter(code); }\nfunction nonascii(code: number) { return code >= 0x80; }\nfunction namestartchar(code: number) { return letter(code) || nonascii(code) || code === 0x5f; }\nfunction namechar(code: number) { return namestartchar(code) || digit(code) || code === 0x2d; }\nfunction nonprintable(code: number) { return between(code, 0, 8) || code === 0xb || between(code, 0xe, 0x1f) || code === 0x7f; }\nfunction newline(code: number) { return code === 0xa; }\nfunction whitespace(code: number) { return newline(code) || code === 9 || code === 0x20; }\n\nconst maximumallowedcodepoint = 0x10ffff;\n\nexport class InvalidCharacterError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'InvalidCharacterError';\n  }\n}\n\nfunction preprocess(str: string): number[] {\n  // Turn a string into an array of code points,\n  // following the preprocessing cleanup rules.\n  const codepoints = [];\n  for (let i = 0; i < str.length; i++) {\n    let code = str.charCodeAt(i);\n    if (code === 0xd && str.charCodeAt(i + 1) === 0xa) {\n      code = 0xa; i++;\n    }\n    if (code === 0xd || code === 0xc)\n      code = 0xa;\n    if (code === 0x0)\n      code = 0xfffd;\n    if (between(code, 0xd800, 0xdbff) && between(str.charCodeAt(i + 1), 0xdc00, 0xdfff)) {\n      // Decode a surrogate pair into an astral codepoint.\n      const lead = code - 0xd800;\n      const trail = str.charCodeAt(i + 1) - 0xdc00;\n      code = Math.pow(2, 16) + lead * Math.pow(2, 10) + trail;\n      i++;\n    }\n    codepoints.push(code);\n  }\n  return codepoints;\n}\n\nfunction stringFromCode(code: number) {\n  if (code <= 0xffff)\n    return String.fromCharCode(code);\n  // Otherwise, encode astral char as surrogate pair.\n  code -= Math.pow(2, 16);\n  const lead = Math.floor(code / Math.pow(2, 10)) + 0xd800;\n  const trail = code % Math.pow(2, 10) + 0xdc00;\n  return String.fromCharCode(lead) + String.fromCharCode(trail);\n}\n\nexport function tokenize(str1: string): CSSTokenInterface[] {\n  const str = preprocess(str1);\n  let i = -1;\n  const tokens: CSSTokenInterface[] = [];\n  let code: number;\n\n  // Line number information.\n  let line = 0;\n  let column = 0;\n  // The only use of lastLineLength is in reconsume().\n  let lastLineLength = 0;\n  const incrLineno = function() {\n    line += 1;\n    lastLineLength = column;\n    column = 0;\n  };\n  const locStart = { line: line, column: column };\n\n  const codepoint = function(i: number): number {\n    if (i >= str.length)\n      return -1;\n\n    return str[i];\n  };\n  const next = function(num?: number) {\n    if (num === undefined)\n      num = 1;\n    if (num > 3)\n      throw 'Spec Error: no more than three codepoints of lookahead.';\n    return codepoint(i + num);\n  };\n  const consume = function(num?: number): boolean {\n    if (num === undefined)\n      num = 1;\n    i += num;\n    code = codepoint(i);\n    if (newline(code))\n      incrLineno();\n    else\n      column += num;\n    // console.log('Consume '+i+' '+String.fromCharCode(code) + ' 0x' + code.toString(16));\n    return true;\n  };\n  const reconsume = function() {\n    i -= 1;\n    if (newline(code)) {\n      line -= 1;\n      column = lastLineLength;\n    } else {\n      column -= 1;\n    }\n    locStart.line = line;\n    locStart.column = column;\n    return true;\n  };\n  const eof = function(codepoint?: number): boolean {\n    if (codepoint === undefined)\n      codepoint = code;\n    return codepoint === -1;\n  };\n  const donothing = function() { };\n  const parseerror = function() {\n    // Language bindings don't like writing to stdout!\n    // console.log('Parse error at index ' + i + ', processing codepoint 0x' + code.toString(16) + '.'); return true;\n  };\n\n  const consumeAToken = function(): CSSTokenInterface {\n    consumeComments();\n    consume();\n    if (whitespace(code)) {\n      while (whitespace(next()))\n        consume();\n      return new WhitespaceToken();\n    } else if (code === 0x22) {return consumeAStringToken();} else if (code === 0x23) {\n      if (namechar(next()) || areAValidEscape(next(1), next(2))) {\n        const token = new HashToken('');\n        if (wouldStartAnIdentifier(next(1), next(2), next(3)))\n          token.type = 'id';\n        token.value = consumeAName();\n        return token;\n      } else {\n        return new DelimToken(code);\n      }\n    } else if (code === 0x24) {\n      if (next() === 0x3d) {\n        consume();\n        return new SuffixMatchToken();\n      } else {\n        return new DelimToken(code);\n      }\n    } else if (code === 0x27) {return consumeAStringToken();} else if (code === 0x28) {return new OpenParenToken();} else if (code === 0x29) {return new CloseParenToken();} else if (code === 0x2a) {\n      if (next() === 0x3d) {\n        consume();\n        return new SubstringMatchToken();\n      } else {\n        return new DelimToken(code);\n      }\n    } else if (code === 0x2b) {\n      if (startsWithANumber()) {\n        reconsume();\n        return consumeANumericToken();\n      } else {\n        return new DelimToken(code);\n      }\n    } else if (code === 0x2c) {return new CommaToken();} else if (code === 0x2d) {\n      if (startsWithANumber()) {\n        reconsume();\n        return consumeANumericToken();\n      } else if (next(1) === 0x2d && next(2) === 0x3e) {\n        consume(2);\n        return new CDCToken();\n      } else if (startsWithAnIdentifier()) {\n        reconsume();\n        return consumeAnIdentlikeToken();\n      } else {\n        return new DelimToken(code);\n      }\n    } else if (code === 0x2e) {\n      if (startsWithANumber()) {\n        reconsume();\n        return consumeANumericToken();\n      } else {\n        return new DelimToken(code);\n      }\n    } else if (code === 0x3a) {return new ColonToken();} else if (code === 0x3b) {return new SemicolonToken();} else if (code === 0x3c) {\n      if (next(1) === 0x21 && next(2) === 0x2d && next(3) === 0x2d) {\n        consume(3);\n        return new CDOToken();\n      } else {\n        return new DelimToken(code);\n      }\n    } else if (code === 0x40) {\n      if (wouldStartAnIdentifier(next(1), next(2), next(3)))\n        return new AtKeywordToken(consumeAName());\n      else\n        return new DelimToken(code);\n\n    } else if (code === 0x5b) {return new OpenSquareToken();} else if (code === 0x5c) {\n      if (startsWithAValidEscape()) {\n        reconsume();\n        return consumeAnIdentlikeToken();\n      } else {\n        parseerror();\n        return new DelimToken(code);\n      }\n    } else if (code === 0x5d) {return new CloseSquareToken();} else if (code === 0x5e) {\n      if (next() === 0x3d) {\n        consume();\n        return new PrefixMatchToken();\n      } else {\n        return new DelimToken(code);\n      }\n    } else if (code === 0x7b) {return new OpenCurlyToken();} else if (code === 0x7c) {\n      if (next() === 0x3d) {\n        consume();\n        return new DashMatchToken();\n      } else if (next() === 0x7c) {\n        consume();\n        return new ColumnToken();\n      } else {\n        return new DelimToken(code);\n      }\n    } else if (code === 0x7d) {return new CloseCurlyToken();} else if (code === 0x7e) {\n      if (next() === 0x3d) {\n        consume();\n        return new IncludeMatchToken();\n      } else {\n        return new DelimToken(code);\n      }\n    } else if (digit(code)) {\n      reconsume();\n      return consumeANumericToken();\n    } else if (namestartchar(code)) {\n      reconsume();\n      return consumeAnIdentlikeToken();\n    } else if (eof()) {return new EOFToken();} else {return new DelimToken(code);}\n  };\n\n  const consumeComments = function() {\n    while (next(1) === 0x2f && next(2) === 0x2a) {\n      consume(2);\n      while (true) {\n        consume();\n        if (code === 0x2a && next() === 0x2f) {\n          consume();\n          break;\n        } else if (eof()) {\n          parseerror();\n          return;\n        }\n      }\n    }\n  };\n\n  const consumeANumericToken = function() {\n    const num = consumeANumber();\n    if (wouldStartAnIdentifier(next(1), next(2), next(3))) {\n      const token = new DimensionToken();\n      token.value = num.value;\n      token.repr = num.repr;\n      token.type = num.type;\n      token.unit = consumeAName();\n      return token;\n    } else if (next() === 0x25) {\n      consume();\n      const token = new PercentageToken();\n      token.value = num.value;\n      token.repr = num.repr;\n      return token;\n    } else {\n      const token = new NumberToken();\n      token.value = num.value;\n      token.repr = num.repr;\n      token.type = num.type;\n      return token;\n    }\n  };\n\n  const consumeAnIdentlikeToken = function(): CSSTokenInterface {\n    const str = consumeAName();\n    if (str.toLowerCase() === 'url' && next() === 0x28) {\n      consume();\n      while (whitespace(next(1)) && whitespace(next(2)))\n        consume();\n      if (next() === 0x22 || next() === 0x27)\n        return new FunctionToken(str);\n      else if (whitespace(next()) && (next(2) === 0x22 || next(2) === 0x27))\n        return new FunctionToken(str);\n      else\n        return consumeAURLToken();\n\n    } else if (next() === 0x28) {\n      consume();\n      return new FunctionToken(str);\n    } else {\n      return new IdentToken(str);\n    }\n  };\n\n  const consumeAStringToken = function(endingCodePoint?: number): CSSParserToken {\n    if (endingCodePoint === undefined)\n      endingCodePoint = code;\n    let string = '';\n    while (consume()) {\n      if (code === endingCodePoint || eof()) {\n        return new StringToken(string);\n      } else if (newline(code)) {\n        parseerror();\n        reconsume();\n        return new BadStringToken();\n      } else if (code === 0x5c) {\n        if (eof(next()))\n          donothing();\n        else if (newline(next()))\n          consume();\n        else\n          string += stringFromCode(consumeEscape());\n\n      } else {\n        string += stringFromCode(code);\n      }\n    }\n    throw new Error('Internal error');\n  };\n\n  const consumeAURLToken = function(): CSSTokenInterface {\n    const token = new URLToken('');\n    while (whitespace(next()))\n      consume();\n    if (eof(next()))\n      return token;\n    while (consume()) {\n      if (code === 0x29 || eof()) {\n        return token;\n      } else if (whitespace(code)) {\n        while (whitespace(next()))\n          consume();\n        if (next() === 0x29 || eof(next())) {\n          consume();\n          return token;\n        } else {\n          consumeTheRemnantsOfABadURL();\n          return new BadURLToken();\n        }\n      } else if (code === 0x22 || code === 0x27 || code === 0x28 || nonprintable(code)) {\n        parseerror();\n        consumeTheRemnantsOfABadURL();\n        return new BadURLToken();\n      } else if (code === 0x5c) {\n        if (startsWithAValidEscape()) {\n          token.value += stringFromCode(consumeEscape());\n        } else {\n          parseerror();\n          consumeTheRemnantsOfABadURL();\n          return new BadURLToken();\n        }\n      } else {\n        token.value += stringFromCode(code);\n      }\n    }\n    throw new Error('Internal error');\n  };\n\n  const consumeEscape = function() {\n    // Assume the current character is the \\\n    // and the next code point is not a newline.\n    consume();\n    if (hexdigit(code)) {\n      // Consume 1-6 hex digits\n      const digits = [code];\n      for (let total = 0; total < 5; total++) {\n        if (hexdigit(next())) {\n          consume();\n          digits.push(code);\n        } else {\n          break;\n        }\n      }\n      if (whitespace(next()))\n        consume();\n      let value = parseInt(digits.map(function(x) { return String.fromCharCode(x); }).join(''), 16);\n      if (value > maximumallowedcodepoint)\n        value = 0xfffd;\n      return value;\n    } else if (eof()) {\n      return 0xfffd;\n    } else {\n      return code;\n    }\n  };\n\n  const areAValidEscape = function(c1: number, c2: number) {\n    if (c1 !== 0x5c)\n      return false;\n    if (newline(c2))\n      return false;\n    return true;\n  };\n  const startsWithAValidEscape = function() {\n    return areAValidEscape(code, next());\n  };\n\n  const wouldStartAnIdentifier = function(c1: number, c2: number, c3: number) {\n    if (c1 === 0x2d)\n      return namestartchar(c2) || c2 === 0x2d || areAValidEscape(c2, c3);\n    else if (namestartchar(c1))\n      return true;\n    else if (c1 === 0x5c)\n      return areAValidEscape(c1, c2);\n    else\n      return false;\n\n  };\n  const startsWithAnIdentifier = function() {\n    return wouldStartAnIdentifier(code, next(1), next(2));\n  };\n\n  const wouldStartANumber = function(c1: number, c2: number, c3: number) {\n    if (c1 === 0x2b || c1 === 0x2d) {\n      if (digit(c2))\n        return true;\n      if (c2 === 0x2e && digit(c3))\n        return true;\n      return false;\n    } else if (c1 === 0x2e) {\n      if (digit(c2))\n        return true;\n      return false;\n    } else if (digit(c1)) {\n      return true;\n    } else {\n      return false;\n    }\n  };\n  const startsWithANumber = function() {\n    return wouldStartANumber(code, next(1), next(2));\n  };\n\n  const consumeAName = function(): string {\n    let result = '';\n    while (consume()) {\n      if (namechar(code)) {\n        result += stringFromCode(code);\n      } else if (startsWithAValidEscape()) {\n        result += stringFromCode(consumeEscape());\n      } else {\n        reconsume();\n        return result;\n      }\n    }\n    throw new Error('Internal parse error');\n  };\n\n  const consumeANumber = function() {\n    let repr = '';\n    let type = 'integer';\n    if (next() === 0x2b || next() === 0x2d) {\n      consume();\n      repr += stringFromCode(code);\n    }\n    while (digit(next())) {\n      consume();\n      repr += stringFromCode(code);\n    }\n    if (next(1) === 0x2e && digit(next(2))) {\n      consume();\n      repr += stringFromCode(code);\n      consume();\n      repr += stringFromCode(code);\n      type = 'number';\n      while (digit(next())) {\n        consume();\n        repr += stringFromCode(code);\n      }\n    }\n    const c1 = next(1), c2 = next(2), c3 = next(3);\n    if ((c1 === 0x45 || c1 === 0x65) && digit(c2)) {\n      consume();\n      repr += stringFromCode(code);\n      consume();\n      repr += stringFromCode(code);\n      type = 'number';\n      while (digit(next())) {\n        consume();\n        repr += stringFromCode(code);\n      }\n    } else if ((c1 === 0x45 || c1 === 0x65) && (c2 === 0x2b || c2 === 0x2d) && digit(c3)) {\n      consume();\n      repr += stringFromCode(code);\n      consume();\n      repr += stringFromCode(code);\n      consume();\n      repr += stringFromCode(code);\n      type = 'number';\n      while (digit(next())) {\n        consume();\n        repr += stringFromCode(code);\n      }\n    }\n    const value = convertAStringToANumber(repr);\n    return { type: type, value: value, repr: repr };\n  };\n\n  const convertAStringToANumber = function(string: string): number {\n    // CSS's number rules are identical to JS, afaik.\n    return +string;\n  };\n\n  const consumeTheRemnantsOfABadURL = function() {\n    while (consume()) {\n      if (code === 0x29 || eof()) {\n        return;\n      } else if (startsWithAValidEscape()) {\n        consumeEscape();\n        donothing();\n      } else {\n        donothing();\n      }\n    }\n  };\n\n  let iterationCount = 0;\n  while (!eof(next())) {\n    tokens.push(consumeAToken());\n    iterationCount++;\n    if (iterationCount > str.length * 2)\n      throw new Error(\"I'm infinite-looping!\");\n  }\n  return tokens;\n}\n\nexport class CSSParserToken implements CSSTokenInterface {\n  tokenType = '';\n  value: string | number | undefined;\n  toJSON(): any {\n    return { token: this.tokenType };\n  }\n  toString() { return this.tokenType; }\n  toSource() { return '' + this; }\n}\n\nexport class BadStringToken extends CSSParserToken {\n  override tokenType = 'BADSTRING';\n}\n\nexport class BadURLToken extends CSSParserToken {\n  override tokenType = 'BADURL';\n}\n\nexport class WhitespaceToken extends CSSParserToken {\n  override tokenType = 'WHITESPACE';\n  override toString() { return 'WS'; }\n  override toSource() { return ' '; }\n}\n\nexport class CDOToken extends CSSParserToken {\n  override tokenType = 'CDO';\n  override toSource() { return '<!--'; }\n}\n\nexport class CDCToken extends CSSParserToken {\n  override tokenType = 'CDC';\n  override toSource() { return '-->'; }\n}\n\nexport class ColonToken extends CSSParserToken {\n  override tokenType = ':';\n}\n\nexport class SemicolonToken extends CSSParserToken {\n  override tokenType = ';';\n}\n\nexport class CommaToken extends CSSParserToken {\n  override tokenType = ',';\n}\n\nexport class GroupingToken extends CSSParserToken {\n  override value = '';\n  mirror = '';\n}\n\nexport class OpenCurlyToken extends GroupingToken {\n  override tokenType = '{';\n  constructor() {\n    super();\n    this.value = '{';\n    this.mirror = '}';\n  }\n}\n\nexport class CloseCurlyToken extends GroupingToken {\n  override tokenType = '}';\n  constructor() {\n    super();\n    this.value = '}';\n    this.mirror = '{';\n  }\n}\n\nexport class OpenSquareToken extends GroupingToken {\n  override tokenType = '[';\n  constructor() {\n    super();\n    this.value = '[';\n    this.mirror = ']';\n  }\n}\n\nexport class CloseSquareToken extends GroupingToken {\n  override tokenType = ']';\n  constructor() {\n    super();\n    this.value = ']';\n    this.mirror = '[';\n  }\n}\n\nexport class OpenParenToken extends GroupingToken {\n  override tokenType = '(';\n  constructor() {\n    super();\n    this.value = '(';\n    this.mirror = ')';\n  }\n}\n\nexport class CloseParenToken extends GroupingToken {\n  override   tokenType = ')';\n  constructor() {\n    super();\n    this.value = ')';\n    this.mirror = '(';\n  }\n}\n\nexport class IncludeMatchToken extends CSSParserToken {\n  override tokenType = '~=';\n}\n\nexport class DashMatchToken extends CSSParserToken {\n  override tokenType = '|=';\n}\n\nexport class PrefixMatchToken extends CSSParserToken {\n  override tokenType = '^=';\n}\n\nexport class SuffixMatchToken extends CSSParserToken {\n  override tokenType = '$=';\n}\n\nexport class SubstringMatchToken extends CSSParserToken {\n  override tokenType = '*=';\n}\n\nexport class ColumnToken extends CSSParserToken {\n  override tokenType = '||';\n}\n\nexport class EOFToken extends CSSParserToken {\n  override tokenType = 'EOF';\n  override toSource() { return ''; }\n}\n\nexport class DelimToken extends CSSParserToken {\n  override tokenType = 'DELIM';\n  override value: string = '';\n\n  constructor(code: number) {\n    super();\n    this.value = stringFromCode(code);\n  }\n\n  override toString() { return 'DELIM(' + this.value + ')'; }\n\n  override toJSON() {\n    const json = this.constructor.prototype.constructor.prototype.toJSON.call(this);\n    json.value = this.value;\n    return json;\n  }\n\n  override toSource() {\n    if (this.value === '\\\\')\n      return '\\\\\\n';\n    else\n      return this.value;\n  }\n}\n\nexport abstract class StringValuedToken extends CSSParserToken {\n  override value: string = '';\n  ASCIIMatch(str: string) {\n    return this.value.toLowerCase() === str.toLowerCase();\n  }\n\n  override toJSON() {\n    const json = this.constructor.prototype.constructor.prototype.toJSON.call(this);\n    json.value = this.value;\n    return json;\n  }\n}\n\nexport class IdentToken extends StringValuedToken {\n  constructor(val: string) {\n    super();\n    this.value = val;\n  }\n\n  override tokenType = 'IDENT';\n  override toString() { return 'IDENT(' + this.value + ')'; }\n  override toSource() {\n    return escapeIdent(this.value);\n  }\n}\n\nexport class FunctionToken extends StringValuedToken {\n  override tokenType = 'FUNCTION';\n  mirror: string;\n  constructor(val: string) {\n    super();\n    this.value = val;\n    this.mirror = ')';\n  }\n\n  override toString() { return 'FUNCTION(' + this.value + ')'; }\n\n  override toSource() {\n    return escapeIdent(this.value) + '(';\n  }\n}\n\nexport class AtKeywordToken extends StringValuedToken {\n  override tokenType = 'AT-KEYWORD';\n  constructor(val: string) {\n    super();\n    this.value = val;\n  }\n  override toString() { return 'AT(' + this.value + ')'; }\n  override toSource() {\n    return '@' + escapeIdent(this.value);\n  }\n}\n\nexport class HashToken extends StringValuedToken {\n  override tokenType = 'HASH';\n  type: string;\n  constructor(val: string) {\n    super();\n    this.value = val;\n    this.type = 'unrestricted';\n  }\n\n  override toString() { return 'HASH(' + this.value + ')'; }\n\n  override toJSON() {\n    const json = this.constructor.prototype.constructor.prototype.toJSON.call(this);\n    json.value = this.value;\n    json.type = this.type;\n    return json;\n  }\n\n  override toSource() {\n    if (this.type === 'id')\n      return '#' + escapeIdent(this.value);\n    else\n      return '#' + escapeHash(this.value);\n\n  }\n}\n\nexport class StringToken extends StringValuedToken {\n  override tokenType = 'STRING';\n  constructor(val: string) {\n    super();\n    this.value = val;\n  }\n\n  override toString() {\n    return '\"' + escapeString(this.value) + '\"';\n  }\n}\n\nexport class URLToken extends StringValuedToken {\n  override tokenType = 'URL';\n  constructor(val: string) {\n    super();\n    this.value = val;\n  }\n  override toString() { return 'URL(' + this.value + ')'; }\n  override toSource() {\n    return 'url(\"' + escapeString(this.value) + '\")';\n  }\n}\n\nexport class NumberToken extends CSSParserToken {\n  override tokenType = 'NUMBER';\n  type: string;\n  repr: string;\n\n  constructor() {\n    super();\n    this.type = 'integer';\n    this.repr = '';\n  }\n\n  override toString() {\n    if (this.type === 'integer')\n      return 'INT(' + this.value + ')';\n    return 'NUMBER(' + this.value + ')';\n  }\n  override toJSON() {\n    const json = super.toJSON();\n    json.value = this.value;\n    json.type = this.type;\n    json.repr = this.repr;\n    return json;\n  }\n  override toSource() { return this.repr; }\n}\n\n\nexport class PercentageToken extends CSSParserToken {\n  override tokenType = 'PERCENTAGE';\n  repr: string;\n  constructor() {\n    super();\n    this.repr = '';\n  }\n  override toString() { return 'PERCENTAGE(' + this.value + ')'; }\n  override toJSON() {\n    const json = this.constructor.prototype.constructor.prototype.toJSON.call(this);\n    json.value = this.value;\n    json.repr = this.repr;\n    return json;\n  }\n  override toSource() { return this.repr + '%'; }\n}\n\nexport class DimensionToken extends CSSParserToken {\n  override tokenType = 'DIMENSION';\n  type: string;\n  repr: string;\n  unit: string;\n\n  constructor() {\n    super();\n    this.type = 'integer';\n    this.repr = '';\n    this.unit = '';\n  }\n\n  override toString() { return 'DIM(' + this.value + ',' + this.unit + ')'; }\n  override toJSON() {\n    const json = this.constructor.prototype.constructor.prototype.toJSON.call(this);\n    json.value = this.value;\n    json.type = this.type;\n    json.repr = this.repr;\n    json.unit = this.unit;\n    return json;\n  }\n  override toSource() {\n    const source = this.repr;\n    let unit = escapeIdent(this.unit);\n    if (unit[0].toLowerCase() === 'e' && (unit[1] === '-' || between(unit.charCodeAt(1), 0x30, 0x39))) {\n      // Unit is ambiguous with scinot\n      // Remove the leading \"e\", replace with escape.\n      unit = '\\\\65 ' + unit.slice(1, unit.length);\n    }\n    return source + unit;\n  }\n}\n\nfunction escapeIdent(string: string) {\n  string = '' + string;\n  let result = '';\n  const firstcode = string.charCodeAt(0);\n  for (let i = 0; i < string.length; i++) {\n    const code = string.charCodeAt(i);\n    if (code === 0x0)\n      throw new InvalidCharacterError('Invalid character: the input contains U+0000.');\n\n    if (\n      between(code, 0x1, 0x1f) || code === 0x7f ||\n      (i === 0 && between(code, 0x30, 0x39)) ||\n      (i === 1 && between(code, 0x30, 0x39) && firstcode === 0x2d)\n    )\n      result += '\\\\' + code.toString(16) + ' ';\n    else if (\n      code >= 0x80 ||\n      code === 0x2d ||\n      code === 0x5f ||\n      between(code, 0x30, 0x39) ||\n      between(code, 0x41, 0x5a) ||\n      between(code, 0x61, 0x7a)\n    )\n      result += string[i];\n    else\n      result += '\\\\' + string[i];\n\n  }\n  return result;\n}\n\nfunction escapeHash(string: string) {\n  // Escapes the contents of \"unrestricted\"-type hash tokens.\n  // Won't preserve the ID-ness of \"id\"-type hash tokens;\n  // use escapeIdent() for that.\n  string = '' + string;\n  let result = '';\n  for (let i = 0; i < string.length; i++) {\n    const code = string.charCodeAt(i);\n    if (code === 0x0)\n      throw new InvalidCharacterError('Invalid character: the input contains U+0000.');\n\n    if (\n      code >= 0x80 ||\n      code === 0x2d ||\n      code === 0x5f ||\n      between(code, 0x30, 0x39) ||\n      between(code, 0x41, 0x5a) ||\n      between(code, 0x61, 0x7a)\n    )\n      result += string[i];\n    else\n      result += '\\\\' + code.toString(16) + ' ';\n\n  }\n  return result;\n}\n\nfunction escapeString(string: string) {\n  string = '' + string;\n  let result = '';\n  for (let i = 0; i < string.length; i++) {\n    const code = string.charCodeAt(i);\n\n    if (code === 0x0)\n      throw new InvalidCharacterError('Invalid character: the input contains U+0000.');\n\n    if (between(code, 0x1, 0x1f) || code === 0x7f)\n      result += '\\\\' + code.toString(16) + ' ';\n    else if (code === 0x22 || code === 0x5c)\n      result += '\\\\' + string[i];\n    else\n      result += string[i];\n\n  }\n  return result;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as css from './cssTokenizer';\n\nexport class InvalidSelectorError extends Error {\n}\n\nexport function isInvalidSelectorError(error: Error) {\n  return error instanceof InvalidSelectorError;\n}\n\n// Note: '>=' is used internally for text engine to preserve backwards compatibility.\ntype ClauseCombinator = '' | '>' | '+' | '~' | '>=';\n// TODO: consider\n//   - key=value\n//   - operators like `=`, `|=`, `~=`, `*=`, `/`\n//   - <empty>~=value\n//   - argument modes: \"parse all\", \"parse commas\", \"just a string\"\nexport type CSSFunctionArgument = CSSComplexSelector | number | string;\nexport type CSSFunction = { name: string, args: CSSFunctionArgument[] };\nexport type CSSSimpleSelector = { css?: string, functions: CSSFunction[] };\nexport type CSSComplexSelector = { simples: { selector: CSSSimpleSelector, combinator: ClauseCombinator }[] };\nexport type CSSComplexSelectorList = CSSComplexSelector[];\n\nexport function parseCSS(selector: string, customNames: Set<string>): { selector: CSSComplexSelectorList, names: string[] } {\n  let tokens: css.CSSTokenInterface[];\n  try {\n    tokens = css.tokenize(selector);\n    if (!(tokens[tokens.length - 1] instanceof css.EOFToken))\n      tokens.push(new css.EOFToken());\n  } catch (e) {\n    const newMessage = e.message + ` while parsing css selector \"${selector}\". Did you mean to CSS.escape it?`;\n    const index = (e.stack || '').indexOf(e.message);\n    if (index !== -1)\n      e.stack = e.stack.substring(0, index) + newMessage + e.stack.substring(index + e.message.length);\n    e.message = newMessage;\n    throw e;\n  }\n  const unsupportedToken = tokens.find(token => {\n    return (token instanceof css.AtKeywordToken) ||\n      (token instanceof css.BadStringToken) ||\n      (token instanceof css.BadURLToken) ||\n      (token instanceof css.ColumnToken) ||\n      (token instanceof css.CDOToken) ||\n      (token instanceof css.CDCToken) ||\n      (token instanceof css.SemicolonToken) ||\n      // TODO: Consider using these for something, e.g. to escape complex strings.\n      // For example :xpath{ (//div/bar[@attr=\"foo\"])[2]/baz }\n      // Or this way :xpath( {complex-xpath-goes-here(\"hello\")} )\n      (token instanceof css.OpenCurlyToken) ||\n      (token instanceof css.CloseCurlyToken) ||\n      // TODO: Consider treating these as strings?\n      (token instanceof css.URLToken) ||\n      (token instanceof css.PercentageToken);\n  });\n  if (unsupportedToken)\n    throw new InvalidSelectorError(`Unsupported token \"${unsupportedToken.toSource()}\" while parsing css selector \"${selector}\". Did you mean to CSS.escape it?`);\n\n  let pos = 0;\n  const names = new Set<string>();\n\n  function unexpected() {\n    return new InvalidSelectorError(`Unexpected token \"${tokens[pos].toSource()}\" while parsing css selector \"${selector}\". Did you mean to CSS.escape it?`);\n  }\n\n  function skipWhitespace() {\n    while (tokens[pos] instanceof css.WhitespaceToken)\n      pos++;\n  }\n\n  function isIdent(p = pos) {\n    return tokens[p] instanceof css.IdentToken;\n  }\n\n  function isString(p = pos) {\n    return tokens[p] instanceof css.StringToken;\n  }\n\n  function isNumber(p = pos) {\n    return tokens[p] instanceof css.NumberToken;\n  }\n\n  function isComma(p = pos) {\n    return tokens[p] instanceof css.CommaToken;\n  }\n\n  function isOpenParen(p = pos) {\n    return tokens[p] instanceof css.OpenParenToken;\n  }\n\n  function isCloseParen(p = pos) {\n    return tokens[p] instanceof css.CloseParenToken;\n  }\n\n  function isFunction(p = pos) {\n    return tokens[p] instanceof css.FunctionToken;\n  }\n\n  function isStar(p = pos) {\n    return (tokens[p] instanceof css.DelimToken) && tokens[p].value === '*';\n  }\n\n  function isEOF(p = pos) {\n    return tokens[p] instanceof css.EOFToken;\n  }\n\n  function isClauseCombinator(p = pos) {\n    return (tokens[p] instanceof css.DelimToken) && (['>', '+', '~'].includes(tokens[p].value as string));\n  }\n\n  function isSelectorClauseEnd(p = pos) {\n    return isComma(p) || isCloseParen(p) || isEOF(p) || isClauseCombinator(p) || (tokens[p] instanceof css.WhitespaceToken);\n  }\n\n  function consumeFunctionArguments(): CSSFunctionArgument[] {\n    const result = [consumeArgument()];\n    while (true) {\n      skipWhitespace();\n      if (!isComma())\n        break;\n      pos++;\n      result.push(consumeArgument());\n    }\n    return result;\n  }\n\n  function consumeArgument(): CSSFunctionArgument {\n    skipWhitespace();\n    if (isNumber())\n      return tokens[pos++].value!;\n    if (isString())\n      return tokens[pos++].value!;\n    return consumeComplexSelector();\n  }\n\n  function consumeComplexSelector(): CSSComplexSelector {\n    const result: CSSComplexSelector = { simples: [] };\n    skipWhitespace();\n    if (isClauseCombinator()) {\n      // Put implicit \":scope\" at the start. https://drafts.csswg.org/selectors-4/#relative\n      result.simples.push({ selector: { functions: [{ name: 'scope', args: [] }] }, combinator: '' });\n    } else {\n      result.simples.push({ selector: consumeSimpleSelector(), combinator: '' });\n    }\n    while (true) {\n      skipWhitespace();\n      if (isClauseCombinator()) {\n        result.simples[result.simples.length - 1].combinator = tokens[pos++].value as ClauseCombinator;\n        skipWhitespace();\n      } else if (isSelectorClauseEnd()) {\n        break;\n      }\n      result.simples.push({ combinator: '', selector: consumeSimpleSelector() });\n    }\n    return result;\n  }\n\n  function consumeSimpleSelector(): CSSSimpleSelector {\n    let rawCSSString = '';\n    const functions: CSSFunction[] = [];\n\n    while (!isSelectorClauseEnd()) {\n      if (isIdent() || isStar()) {\n        rawCSSString += tokens[pos++].toSource();\n      } else if (tokens[pos] instanceof css.HashToken) {\n        rawCSSString += tokens[pos++].toSource();\n      } else if ((tokens[pos] instanceof css.DelimToken) && tokens[pos].value === '.') {\n        pos++;\n        if (isIdent())\n          rawCSSString += '.' + tokens[pos++].toSource();\n        else\n          throw unexpected();\n      } else if (tokens[pos] instanceof css.ColonToken) {\n        pos++;\n        if (isIdent()) {\n          if (!customNames.has((tokens[pos].value as string).toLowerCase())) {\n            rawCSSString += ':' + tokens[pos++].toSource();\n          } else {\n            const name = (tokens[pos++].value as string).toLowerCase();\n            functions.push({ name, args: [] });\n            names.add(name);\n          }\n        } else if (isFunction()) {\n          const name = (tokens[pos++].value as string).toLowerCase();\n          if (!customNames.has(name)) {\n            rawCSSString += `:${name}(${consumeBuiltinFunctionArguments()})`;\n          } else {\n            functions.push({ name, args: consumeFunctionArguments() });\n            names.add(name);\n          }\n          skipWhitespace();\n          if (!isCloseParen())\n            throw unexpected();\n          pos++;\n        } else {\n          throw unexpected();\n        }\n      } else if (tokens[pos] instanceof css.OpenSquareToken) {\n        rawCSSString += '[';\n        pos++;\n        while (!(tokens[pos] instanceof css.CloseSquareToken) && !isEOF())\n          rawCSSString += tokens[pos++].toSource();\n        if (!(tokens[pos] instanceof css.CloseSquareToken))\n          throw unexpected();\n        rawCSSString += ']';\n        pos++;\n      } else {\n        throw unexpected();\n      }\n    }\n    if (!rawCSSString && !functions.length)\n      throw unexpected();\n    return { css: rawCSSString || undefined, functions };\n  }\n\n  function consumeBuiltinFunctionArguments(): string {\n    let s = '';\n    let balance = 1;  // First open paren is a part of a function token.\n    while (!isEOF()) {\n      if (isOpenParen() || isFunction())\n        balance++;\n      if (isCloseParen())\n        balance--;\n      if (!balance)\n        break;\n      s += tokens[pos++].toSource();\n    }\n    return s;\n  }\n\n  const result = consumeFunctionArguments();\n  if (!isEOF())\n    throw unexpected();\n  if (result.some(arg => typeof arg !== 'object' || !('simples' in arg)))\n    throw new InvalidSelectorError(`Error while parsing css selector \"${selector}\". Did you mean to CSS.escape it?`);\n  return { selector: result as CSSComplexSelector[], names: Array.from(names) };\n}\n\nexport function serializeSelector(args: CSSFunctionArgument[]) {\n  return args.map(arg => {\n    if (typeof arg === 'string')\n      return `\"${arg}\"`;\n    if (typeof arg === 'number')\n      return String(arg);\n    return arg.simples.map(({ selector, combinator }) => {\n      let s = selector.css || '';\n      s = s + selector.functions.map(func => `:${func.name}(${serializeSelector(func.args)})`).join('');\n      if (combinator)\n        s += ' ' + combinator;\n      return s;\n    }).join(' ');\n  }).join(', ');\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InvalidSelectorError, parseCSS } from './cssParser';\n\nimport type { CSSComplexSelectorList } from './cssParser';\nexport { InvalidSelectorError, isInvalidSelectorError } from './cssParser';\n\nexport type NestedSelectorBody = { parsed: ParsedSelector, distance?: number };\nconst kNestedSelectorNames = new Set(['internal:has', 'internal:has-not', 'internal:and', 'internal:or', 'internal:chain', 'left-of', 'right-of', 'above', 'below', 'near']);\nconst kNestedSelectorNamesWithDistance = new Set(['left-of', 'right-of', 'above', 'below', 'near']);\n\nexport type ParsedSelectorPart = {\n  name: string,\n  body: string | CSSComplexSelectorList | NestedSelectorBody,\n  source: string,\n};\n\nexport type ParsedSelector = {\n  parts: ParsedSelectorPart[],\n  capture?: number,\n};\n\ntype ParsedSelectorStrings = {\n  parts: { name: string, body: string }[],\n  capture?: number,\n};\n\nexport const customCSSNames = new Set(['not', 'is', 'where', 'has', 'scope', 'light', 'visible', 'text', 'text-matches', 'text-is', 'has-text', 'above', 'below', 'right-of', 'left-of', 'near', 'nth-match']);\n\nexport function parseSelector(selector: string): ParsedSelector {\n  const parsedStrings = parseSelectorString(selector);\n  const parts: ParsedSelectorPart[] = [];\n  for (const part of parsedStrings.parts) {\n    if (part.name === 'css' || part.name === 'css:light') {\n      if (part.name === 'css:light')\n        part.body = ':light(' + part.body + ')';\n      const parsedCSS = parseCSS(part.body, customCSSNames);\n      parts.push({\n        name: 'css',\n        body: parsedCSS.selector,\n        source: part.body\n      });\n      continue;\n    }\n    if (kNestedSelectorNames.has(part.name)) {\n      let innerSelector: string;\n      let distance: number | undefined;\n      try {\n        const unescaped = JSON.parse('[' + part.body + ']');\n        if (!Array.isArray(unescaped) || unescaped.length < 1 || unescaped.length > 2 || typeof unescaped[0] !== 'string')\n          throw new InvalidSelectorError(`Malformed selector: ${part.name}=` + part.body);\n        innerSelector = unescaped[0];\n        if (unescaped.length === 2) {\n          if (typeof unescaped[1] !== 'number' || !kNestedSelectorNamesWithDistance.has(part.name))\n            throw new InvalidSelectorError(`Malformed selector: ${part.name}=` + part.body);\n          distance = unescaped[1];\n        }\n      } catch (e) {\n        throw new InvalidSelectorError(`Malformed selector: ${part.name}=` + part.body);\n      }\n      const nested = { name: part.name, source: part.body, body: { parsed: parseSelector(innerSelector), distance } };\n      const lastFrame = [...nested.body.parsed.parts].reverse().find(part => part.name === 'internal:control' && part.body === 'enter-frame');\n      const lastFrameIndex = lastFrame ? nested.body.parsed.parts.indexOf(lastFrame) : -1;\n      // Allow nested selectors to start with the same frame selector.\n      if (lastFrameIndex !== -1 && selectorPartsEqual(nested.body.parsed.parts.slice(0, lastFrameIndex + 1), parts.slice(0, lastFrameIndex + 1)))\n        nested.body.parsed.parts.splice(0, lastFrameIndex + 1);\n      parts.push(nested);\n      continue;\n    }\n    parts.push({ ...part, source: part.body });\n  }\n  if (kNestedSelectorNames.has(parts[0].name))\n    throw new InvalidSelectorError(`\"${parts[0].name}\" selector cannot be first`);\n  return {\n    capture: parsedStrings.capture,\n    parts\n  };\n}\n\nexport function splitSelectorByFrame(selectorText: string): ParsedSelector[] {\n  const selector = parseSelector(selectorText);\n  const result: ParsedSelector[] = [];\n  let chunk: ParsedSelector = {\n    parts: [],\n  };\n  let chunkStartIndex = 0;\n  for (let i = 0; i < selector.parts.length; ++i) {\n    const part = selector.parts[i];\n    if (part.name === 'internal:control' && part.body === 'enter-frame') {\n      if (!chunk.parts.length)\n        throw new InvalidSelectorError('Selector cannot start with entering frame, select the iframe first');\n      result.push(chunk);\n      chunk = { parts: [] };\n      chunkStartIndex = i + 1;\n      continue;\n    }\n    if (selector.capture === i)\n      chunk.capture = i - chunkStartIndex;\n    chunk.parts.push(part);\n  }\n  if (!chunk.parts.length)\n    throw new InvalidSelectorError(`Selector cannot end with entering frame, while parsing selector ${selectorText}`);\n  result.push(chunk);\n  if (typeof selector.capture === 'number' && typeof result[result.length - 1].capture !== 'number')\n    throw new InvalidSelectorError(`Can not capture the selector before diving into the frame. Only use * after the last frame has been selected`);\n  return result;\n}\n\nfunction selectorPartsEqual(list1: ParsedSelectorPart[], list2: ParsedSelectorPart[]) {\n  return stringifySelector({ parts: list1 }) === stringifySelector({ parts: list2 });\n}\n\nexport function stringifySelector(selector: string | ParsedSelector, forceEngineName?: boolean): string {\n  if (typeof selector === 'string')\n    return selector;\n  return selector.parts.map((p, i) => {\n    let includeEngine = true;\n    if (!forceEngineName && i !== selector.capture) {\n      if (p.name === 'css')\n        includeEngine = false;\n      else if (p.name === 'xpath' && p.source.startsWith('//') || p.source.startsWith('..'))\n        includeEngine = false;\n    }\n    const prefix = includeEngine ? p.name + '=' : '';\n    return `${i === selector.capture ? '*' : ''}${prefix}${p.source}`;\n  }).join(' >> ');\n}\n\nexport function visitAllSelectorParts(selector: ParsedSelector, visitor: (part: ParsedSelectorPart, nested: boolean) => void) {\n  const visit = (selector: ParsedSelector, nested: boolean) => {\n    for (const part of selector.parts) {\n      visitor(part, nested);\n      if (kNestedSelectorNames.has(part.name))\n        visit((part.body as NestedSelectorBody).parsed, true);\n    }\n  };\n  visit(selector, false);\n}\n\nfunction parseSelectorString(selector: string): ParsedSelectorStrings {\n  let index = 0;\n  let quote: string | undefined;\n  let start = 0;\n  const result: ParsedSelectorStrings = { parts: [] };\n  const append = () => {\n    const part = selector.substring(start, index).trim();\n    const eqIndex = part.indexOf('=');\n    let name: string;\n    let body: string;\n    if (eqIndex !== -1 && part.substring(0, eqIndex).trim().match(/^[a-zA-Z_0-9-+:*]+$/)) {\n      name = part.substring(0, eqIndex).trim();\n      body = part.substring(eqIndex + 1);\n    } else if (part.length > 1 && part[0] === '\"' && part[part.length - 1] === '\"') {\n      name = 'text';\n      body = part;\n    } else if (part.length > 1 && part[0] === \"'\" && part[part.length - 1] === \"'\") {\n      name = 'text';\n      body = part;\n    } else if (/^\\(*\\/\\//.test(part) || part.startsWith('..')) {\n      // If selector starts with '//' or '//' prefixed with multiple opening\n      // parenthesis, consider xpath. @see https://github.com/microsoft/playwright/issues/817\n      // If selector starts with '..', consider xpath as well.\n      name = 'xpath';\n      body = part;\n    } else {\n      name = 'css';\n      body = part;\n    }\n    let capture = false;\n    if (name[0] === '*') {\n      capture = true;\n      name = name.substring(1);\n    }\n    result.parts.push({ name, body });\n    if (capture) {\n      if (result.capture !== undefined)\n        throw new InvalidSelectorError(`Only one of the selectors can capture using * modifier`);\n      result.capture = result.parts.length - 1;\n    }\n  };\n\n  if (!selector.includes('>>')) {\n    index = selector.length;\n    append();\n    return result;\n  }\n\n  const shouldIgnoreTextSelectorQuote = () => {\n    const prefix = selector.substring(start, index);\n    const match = prefix.match(/^\\s*text\\s*=(.*)$/);\n    // Must be a text selector with some text before the quote.\n    return !!match && !!match[1];\n  };\n\n  while (index < selector.length) {\n    const c = selector[index];\n    if (c === '\\\\' && index + 1 < selector.length) {\n      index += 2;\n    } else if (c === quote) {\n      quote = undefined;\n      index++;\n    } else if (!quote && (c === '\"' || c === '\\'' || c === '`') && !shouldIgnoreTextSelectorQuote()) {\n      quote = c;\n      index++;\n    } else if (!quote && c === '>' && selector[index + 1] === '>') {\n      append();\n      index += 2;\n      start = index;\n    } else {\n      index++;\n    }\n  }\n  append();\n  return result;\n}\n\nexport type AttributeSelectorOperator = '<truthy>'|'='|'*='|'|='|'^='|'$='|'~=';\nexport type AttributeSelectorPart = {\n  name: string,\n  jsonPath: string[],\n  op: AttributeSelectorOperator,\n  value: any,\n  caseSensitive: boolean,\n};\n\nexport type AttributeSelector = {\n  name: string,\n  attributes: AttributeSelectorPart[],\n};\n\n\nexport function parseAttributeSelector(selector: string, allowUnquotedStrings: boolean): AttributeSelector {\n  let wp = 0;\n  let EOL = selector.length === 0;\n\n  const next = () => selector[wp] || '';\n  const eat1 = () => {\n    const result = next();\n    ++wp;\n    EOL = wp >= selector.length;\n    return result;\n  };\n\n  const syntaxError = (stage: string|undefined) => {\n    if (EOL)\n      throw new InvalidSelectorError(`Unexpected end of selector while parsing selector \\`${selector}\\``);\n    throw new InvalidSelectorError(`Error while parsing selector \\`${selector}\\` - unexpected symbol \"${next()}\" at position ${wp}` + (stage ? ' during ' + stage : ''));\n  };\n\n  function skipSpaces() {\n    while (!EOL && /\\s/.test(next()))\n      eat1();\n  }\n\n  function isCSSNameChar(char: string) {\n    // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n    return (char >= '\\u0080')  // non-ascii\n        || (char >= '\\u0030' && char <= '\\u0039')  // digit\n        || (char >= '\\u0041' && char <= '\\u005a')  // uppercase letter\n        || (char >= '\\u0061' && char <= '\\u007a')  // lowercase letter\n        || (char >= '\\u0030' && char <= '\\u0039')  // digit\n        || char === '\\u005f'  // \"_\"\n        || char === '\\u002d';  // \"-\"\n  }\n\n  function readIdentifier() {\n    let result = '';\n    skipSpaces();\n    while (!EOL && isCSSNameChar(next()))\n      result += eat1();\n    return result;\n  }\n\n  function readQuotedString(quote: string) {\n    let result = eat1();\n    if (result !== quote)\n      syntaxError('parsing quoted string');\n    while (!EOL && next() !== quote) {\n      if (next() === '\\\\')\n        eat1();\n      result += eat1();\n    }\n    if (next() !== quote)\n      syntaxError('parsing quoted string');\n    result += eat1();\n    return result;\n  }\n\n  function readRegularExpression() {\n    if (eat1() !== '/')\n      syntaxError('parsing regular expression');\n    let source = '';\n    let inClass = false;\n    // https://262.ecma-international.org/11.0/#sec-literals-regular-expression-literals\n    while (!EOL) {\n      if (next() === '\\\\') {\n        source += eat1();\n        if (EOL)\n          syntaxError('parsing regular expression');\n      } else if (inClass && next() === ']') {\n        inClass = false;\n      } else if (!inClass && next() === '[') {\n        inClass = true;\n      } else if (!inClass && next() === '/') {\n        break;\n      }\n      source += eat1();\n    }\n    if (eat1() !== '/')\n      syntaxError('parsing regular expression');\n    let flags = '';\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n    while (!EOL && next().match(/[dgimsuy]/))\n      flags += eat1();\n    try {\n      return new RegExp(source, flags);\n    } catch (e) {\n      throw new InvalidSelectorError(`Error while parsing selector \\`${selector}\\`: ${e.message}`);\n    }\n  }\n\n  function readAttributeToken() {\n    let token = '';\n    skipSpaces();\n    if (next() === `'` || next() === `\"`)\n      token = readQuotedString(next()).slice(1, -1);\n    else\n      token = readIdentifier();\n    if (!token)\n      syntaxError('parsing property path');\n    return token;\n  }\n\n  function readOperator(): AttributeSelectorOperator {\n    skipSpaces();\n    let op = '';\n    if (!EOL)\n      op += eat1();\n    if (!EOL && (op !== '='))\n      op += eat1();\n    if (!['=', '*=', '^=', '$=', '|=', '~='].includes(op))\n      syntaxError('parsing operator');\n    return (op as AttributeSelectorOperator);\n  }\n\n  function readAttribute(): AttributeSelectorPart {\n    // skip leading [\n    eat1();\n\n    // read attribute name:\n    // foo.bar\n    // 'foo'  . \"ba zz\"\n    const jsonPath = [];\n    jsonPath.push(readAttributeToken());\n    skipSpaces();\n    while (next() === '.') {\n      eat1();\n      jsonPath.push(readAttributeToken());\n      skipSpaces();\n    }\n    // check property is truthy: [enabled]\n    if (next() === ']') {\n      eat1();\n      return { name: jsonPath.join('.'), jsonPath, op: '<truthy>', value: null, caseSensitive: false };\n    }\n\n    const operator = readOperator();\n\n    let value = undefined;\n    let caseSensitive = true;\n    skipSpaces();\n    if (next() === '/') {\n      if (operator !== '=')\n        throw new InvalidSelectorError(`Error while parsing selector \\`${selector}\\` - cannot use ${operator} in attribute with regular expression`);\n      value = readRegularExpression();\n    } else if (next() === `'` || next() === `\"`) {\n      value = readQuotedString(next()).slice(1, -1);\n      skipSpaces();\n      if (next() === 'i' || next() === 'I') {\n        caseSensitive = false;\n        eat1();\n      } else if (next() === 's' || next() === 'S') {\n        caseSensitive = true;\n        eat1();\n      }\n    } else {\n      value = '';\n      while (!EOL && (isCSSNameChar(next()) || next() === '+' || next() === '.'))\n        value += eat1();\n      if (value === 'true') {\n        value = true;\n      } else if (value === 'false') {\n        value = false;\n      } else {\n        if (!allowUnquotedStrings) {\n          value = +value;\n          if (Number.isNaN(value))\n            syntaxError('parsing attribute value');\n        }\n      }\n    }\n    skipSpaces();\n    if (next() !== ']')\n      syntaxError('parsing attribute value');\n\n    eat1();\n    if (operator !== '=' && typeof value !== 'string')\n      throw new InvalidSelectorError(`Error while parsing selector \\`${selector}\\` - cannot use ${operator} in attribute with non-string matching value - ${value}`);\n    return { name: jsonPath.join('.'), jsonPath, op: operator, value, caseSensitive };\n  }\n\n  const result: AttributeSelector = {\n    name: '',\n    attributes: [],\n  };\n  result.name = readIdentifier();\n  skipSpaces();\n  while (next() === '[') {\n    result.attributes.push(readAttribute());\n    skipSpaces();\n  }\n  if (!EOL)\n    syntaxError(undefined);\n  if (!result.name && !result.attributes.length)\n    throw new InvalidSelectorError(`Error while parsing selector \\`${selector}\\` - selector cannot be empty`);\n  return result;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// NOTE: this function should not be used to escape any selectors.\nexport function escapeWithQuotes(text: string, char: string = '\\'') {\n  const stringified = JSON.stringify(text);\n  const escapedText = stringified.substring(1, stringified.length - 1).replace(/\\\\\"/g, '\"');\n  if (char === '\\'')\n    return char + escapedText.replace(/[']/g, '\\\\\\'') + char;\n  if (char === '\"')\n    return char + escapedText.replace(/[\"]/g, '\\\\\"') + char;\n  if (char === '`')\n    return char + escapedText.replace(/[`]/g, '`') + char;\n  throw new Error('Invalid escape char');\n}\n\nexport function escapeTemplateString(text: string): string {\n  return text\n      .replace(/\\\\/g, '\\\\\\\\')\n      .replace(/`/g, '\\\\`')\n      .replace(/\\$\\{/g, '\\\\${');\n}\n\nexport function isString(obj: any): obj is string {\n  return typeof obj === 'string' || obj instanceof String;\n}\n\nexport function toTitleCase(name: string) {\n  return name.charAt(0).toUpperCase() + name.substring(1);\n}\n\nexport function toSnakeCase(name: string): string {\n  // E.g. ignoreHTTPSErrors => ignore_https_errors.\n  return name.replace(/([a-z0-9])([A-Z])/g, '$1_$2').replace(/([A-Z])([A-Z][a-z])/g, '$1_$2').toLowerCase();\n}\n\nexport function quoteCSSAttributeValue(text: string): string {\n  return `\"${text.replace(/[\"\\\\]/g, char => '\\\\' + char)}\"`;\n}\n\nlet normalizedWhitespaceCache: Map<string, string> | undefined;\n\nexport function cacheNormalizedWhitespaces() {\n  normalizedWhitespaceCache = new Map();\n}\n\nexport function normalizeWhiteSpace(text: string): string {\n  let result = normalizedWhitespaceCache?.get(text);\n  if (result === undefined) {\n    result = text.replace(/[\\u200b\\u00ad]/g, '').trim().replace(/\\s+/g, ' ');\n    normalizedWhitespaceCache?.set(text, result);\n  }\n  return result;\n}\n\nexport function normalizeEscapedRegexQuotes(source: string) {\n  // This function reverses the effect of escapeRegexForSelector below.\n  // Odd number of backslashes followed by the quote -> remove unneeded backslash.\n  return source.replace(/(^|[^\\\\])(\\\\\\\\)*\\\\(['\"`])/g, '$1$2$3');\n}\n\nfunction escapeRegexForSelector(re: RegExp): string {\n  // Unicode mode does not allow \"identity character escapes\", so we do not escape and\n  // hope that it does not contain quotes and/or >> signs.\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Character_escape\n  // TODO: rework RE usages in internal selectors away from literal representation to json, e.g. {source,flags}.\n  if (re.unicode || (re as any).unicodeSets)\n    return String(re);\n  // Even number of backslashes followed by the quote -> insert a backslash.\n  return String(re).replace(/(^|[^\\\\])(\\\\\\\\)*([\"'`])/g, '$1$2\\\\$3').replace(/>>/g, '\\\\>\\\\>');\n}\n\nexport function escapeForTextSelector(text: string | RegExp, exact: boolean): string {\n  if (typeof text !== 'string')\n    return escapeRegexForSelector(text);\n  return `${JSON.stringify(text)}${exact ? 's' : 'i'}`;\n}\n\nexport function escapeForAttributeSelector(value: string | RegExp, exact: boolean): string {\n  if (typeof value !== 'string')\n    return escapeRegexForSelector(value);\n  // TODO: this should actually be\n  //   cssEscape(value).replace(/\\\\ /g, ' ')\n  // However, our attribute selectors do not conform to CSS parsing spec,\n  // so we escape them differently.\n  return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/[\"]/g, '\\\\\"')}\"${exact ? 's' : 'i'}`;\n}\n\nexport function trimString(input: string, cap: number, suffix: string = ''): string {\n  if (input.length <= cap)\n    return input;\n  const chars = [...input];\n  if (chars.length > cap)\n    return chars.slice(0, cap - suffix.length).join('') + suffix;\n  return chars.join('');\n}\n\nexport function trimStringWithEllipsis(input: string, cap: number): string {\n  return trimString(input, cap, '\\u2026');\n}\n\nexport function escapeRegExp(s: string) {\n  // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping\n  return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n\nconst escaped = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', '\\'': '&#39;' };\nexport function escapeHTMLAttribute(s: string): string {\n  return s.replace(/[&<>\"']/ug, char => (escaped as any)[char]);\n}\nexport function escapeHTML(s: string): string {\n  return s.replace(/[&<]/ug, char => (escaped as any)[char]);\n}\n\nexport function longestCommonSubstring(s1: string, s2: string): string {\n  const n = s1.length;\n  const m = s2.length;\n  let maxLen = 0;\n  let endingIndex = 0;\n\n  // Initialize a 2D array with zeros\n  const dp = Array(n + 1)\n      .fill(null)\n      .map(() => Array(m + 1).fill(0));\n\n  // Build the dp table\n  for (let i = 1; i <= n; i++) {\n    for (let j = 1; j <= m; j++) {\n      if (s1[i - 1] === s2[j - 1]) {\n        dp[i][j] = dp[i - 1][j - 1] + 1;\n\n        if (dp[i][j] > maxLen) {\n          maxLen = dp[i][j];\n          endingIndex = i;\n        }\n      }\n    }\n  }\n\n  // Extract the longest common substring\n  return s1.slice(endingIndex - maxLen, endingIndex);\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {  parseAttributeSelector, parseSelector, stringifySelector } from './selectorParser';\nimport { escapeWithQuotes, normalizeEscapedRegexQuotes, toSnakeCase, toTitleCase } from './stringUtils';\n\nimport type { NestedSelectorBody } from './selectorParser';\nimport type { ParsedSelector } from './selectorParser';\n\nexport type Language = 'javascript' | 'python' | 'java' | 'csharp' | 'jsonl';\nexport type LocatorType = 'default' | 'role' | 'text' | 'label' | 'placeholder' | 'alt' | 'title' | 'test-id' | 'nth' | 'first' | 'last' | 'visible' | 'has-text' | 'has-not-text' | 'has' | 'hasNot' | 'frame' | 'frame-locator' | 'and' | 'or' | 'chain';\nexport type LocatorBase = 'page' | 'locator' | 'frame-locator';\nexport type Quote = '\\'' | '\"' | '`';\n\ntype LocatorOptions = {\n  attrs?: { name: string, value: string | boolean | number }[],\n  exact?: boolean,\n  name?: string | RegExp,\n  hasText?: string | RegExp,\n  hasNotText?: string | RegExp,\n};\nexport interface LocatorFactory {\n  generateLocator(base: LocatorBase, kind: LocatorType, body: string | RegExp, options?: LocatorOptions): string;\n  chainLocators(locators: string[]): string;\n}\n\nexport function asLocatorDescription(lang: Language, selector: string): string | undefined {\n  const parsed = parseSelector(selector);\n  const lastPart = parsed.parts[parsed.parts.length - 1];\n  if (lastPart?.name === 'internal:describe')\n    return JSON.parse(lastPart.body as string);\n  return asLocator(lang, selector);\n}\n\nexport function asLocator(lang: Language, selector: string, isFrameLocator: boolean = false): string {\n  return asLocators(lang, selector, isFrameLocator, 1)[0];\n}\n\nexport function asLocators(lang: Language, selector: string, isFrameLocator: boolean = false, maxOutputSize = 20, preferredQuote?: Quote): string[] {\n  try {\n    return innerAsLocators(new generators[lang](preferredQuote), parseSelector(selector), isFrameLocator, maxOutputSize);\n  } catch (e) {\n    // Tolerate invalid input.\n    return [selector];\n  }\n}\n\nfunction innerAsLocators(factory: LocatorFactory, parsed: ParsedSelector, isFrameLocator: boolean = false, maxOutputSize = 20): string[] {\n  const parts = [...parsed.parts];\n  const tokens: string[][] = [];\n  let nextBase: LocatorBase = isFrameLocator ? 'frame-locator' : 'page';\n  for (let index = 0; index < parts.length; index++) {\n    const part = parts[index];\n    const base = nextBase;\n    nextBase = 'locator';\n\n    if (part.name === 'internal:describe')\n      continue;\n    if (part.name === 'nth') {\n      if (part.body === '0')\n        tokens.push([factory.generateLocator(base, 'first', ''), factory.generateLocator(base, 'nth', '0')]);\n      else if (part.body === '-1')\n        tokens.push([factory.generateLocator(base, 'last', ''), factory.generateLocator(base, 'nth', '-1')]);\n      else\n        tokens.push([factory.generateLocator(base, 'nth', part.body as string)]);\n      continue;\n    }\n    if (part.name === 'visible') {\n      tokens.push([factory.generateLocator(base, 'visible', part.body as string), factory.generateLocator(base, 'default', `visible=${part.body}`)]);\n      continue;\n    }\n    if (part.name === 'internal:text') {\n      const { exact, text } = detectExact(part.body as string);\n      tokens.push([factory.generateLocator(base, 'text', text, { exact })]);\n      continue;\n    }\n    if (part.name === 'internal:has-text') {\n      const { exact, text } = detectExact(part.body as string);\n      // There is no locator equivalent for strict has-text, leave it as is.\n      if (!exact) {\n        tokens.push([factory.generateLocator(base, 'has-text', text, { exact })]);\n        continue;\n      }\n    }\n    if (part.name === 'internal:has-not-text') {\n      const { exact, text } = detectExact(part.body as string);\n      // There is no locator equivalent for strict has-not-text, leave it as is.\n      if (!exact) {\n        tokens.push([factory.generateLocator(base, 'has-not-text', text, { exact })]);\n        continue;\n      }\n    }\n    if (part.name === 'internal:has') {\n      const inners = innerAsLocators(factory, (part.body as NestedSelectorBody).parsed, false, maxOutputSize);\n      tokens.push(inners.map(inner => factory.generateLocator(base, 'has', inner)));\n      continue;\n    }\n    if (part.name === 'internal:has-not') {\n      const inners = innerAsLocators(factory, (part.body as NestedSelectorBody).parsed, false, maxOutputSize);\n      tokens.push(inners.map(inner => factory.generateLocator(base, 'hasNot', inner)));\n      continue;\n    }\n    if (part.name === 'internal:and') {\n      const inners = innerAsLocators(factory, (part.body as NestedSelectorBody).parsed, false, maxOutputSize);\n      tokens.push(inners.map(inner => factory.generateLocator(base, 'and', inner)));\n      continue;\n    }\n    if (part.name === 'internal:or') {\n      const inners = innerAsLocators(factory, (part.body as NestedSelectorBody).parsed, false, maxOutputSize);\n      tokens.push(inners.map(inner => factory.generateLocator(base, 'or', inner)));\n      continue;\n    }\n    if (part.name === 'internal:chain') {\n      const inners = innerAsLocators(factory, (part.body as NestedSelectorBody).parsed, false, maxOutputSize);\n      tokens.push(inners.map(inner => factory.generateLocator(base, 'chain', inner)));\n      continue;\n    }\n    if (part.name === 'internal:label') {\n      const { exact, text } = detectExact(part.body as string);\n      tokens.push([factory.generateLocator(base, 'label', text, { exact })]);\n      continue;\n    }\n    if (part.name === 'internal:role') {\n      const attrSelector = parseAttributeSelector(part.body as string, true);\n      const options: LocatorOptions = { attrs: [] };\n      for (const attr of attrSelector.attributes) {\n        if (attr.name === 'name') {\n          options.exact = attr.caseSensitive;\n          options.name = attr.value;\n        } else {\n          if (attr.name === 'level' && typeof attr.value === 'string')\n            attr.value = +attr.value;\n          options.attrs!.push({ name: attr.name === 'include-hidden' ? 'includeHidden' : attr.name, value: attr.value });\n        }\n      }\n      tokens.push([factory.generateLocator(base, 'role', attrSelector.name, options)]);\n      continue;\n    }\n    if (part.name === 'internal:testid') {\n      const attrSelector = parseAttributeSelector(part.body as string, true);\n      const { value } = attrSelector.attributes[0];\n      tokens.push([factory.generateLocator(base, 'test-id', value)]);\n      continue;\n    }\n    if (part.name === 'internal:attr') {\n      const attrSelector = parseAttributeSelector(part.body as string, true);\n      const { name, value, caseSensitive } = attrSelector.attributes[0];\n      const text = value as string | RegExp;\n      const exact = !!caseSensitive;\n      if (name === 'placeholder') {\n        tokens.push([factory.generateLocator(base, 'placeholder', text, { exact })]);\n        continue;\n      }\n      if (name === 'alt') {\n        tokens.push([factory.generateLocator(base, 'alt', text, { exact })]);\n        continue;\n      }\n      if (name === 'title') {\n        tokens.push([factory.generateLocator(base, 'title', text, { exact })]);\n        continue;\n      }\n    }\n    if (part.name === 'internal:control' && (part.body as string) === 'enter-frame') {\n      // transform last tokens from `${selector}` into `${selector}.contentFrame()` and `frameLocator(${selector})`\n      const lastTokens = tokens[tokens.length - 1];\n      const lastPart = parts[index - 1];\n\n      const transformed = lastTokens.map(token => factory.chainLocators([token, factory.generateLocator(base, 'frame', '')]));\n      if (['xpath', 'css'].includes(lastPart.name)) {\n        transformed.push(\n            factory.generateLocator(base, 'frame-locator', stringifySelector({ parts: [lastPart] })),\n            factory.generateLocator(base, 'frame-locator', stringifySelector({ parts: [lastPart] }, true))\n        );\n      }\n\n      lastTokens.splice(0, lastTokens.length, ...transformed);\n      nextBase = 'frame-locator';\n      continue;\n    }\n\n    const nextPart = parts[index + 1];\n\n    const selectorPart = stringifySelector({ parts: [part] });\n    const locatorPart = factory.generateLocator(base, 'default', selectorPart);\n\n    if (nextPart && ['internal:has-text', 'internal:has-not-text'].includes(nextPart.name)) {\n      const { exact, text } = detectExact(nextPart.body as string);\n      // There is no locator equivalent for strict has-text and has-not-text, leave it as is.\n      if (!exact) {\n        const nextLocatorPart = factory.generateLocator('locator', nextPart.name === 'internal:has-text' ? 'has-text' : 'has-not-text', text, { exact });\n        const options: LocatorOptions = {};\n        if (nextPart.name === 'internal:has-text')\n          options.hasText = text;\n        else\n          options.hasNotText = text;\n        const combinedPart = factory.generateLocator(base, 'default', selectorPart, options);\n        // Two options:\n        // - locator('div').filter({ hasText: 'foo' })\n        // - locator('div', { hasText: 'foo' })\n        tokens.push([factory.chainLocators([locatorPart, nextLocatorPart]), combinedPart]);\n        index++;\n        continue;\n      }\n    }\n\n    // Selectors can be prefixed with engine name, e.g. xpath=//foo\n    let locatorPartWithEngine: string | undefined;\n    if (['xpath', 'css'].includes(part.name)) {\n      const selectorPart = stringifySelector({ parts: [part] }, /* forceEngineName */ true);\n      locatorPartWithEngine = factory.generateLocator(base, 'default', selectorPart);\n    }\n\n    tokens.push([locatorPart, locatorPartWithEngine].filter(Boolean) as string[]);\n  }\n\n  return combineTokens(factory, tokens, maxOutputSize);\n}\n\nfunction combineTokens(factory: LocatorFactory, tokens: string[][], maxOutputSize: number): string[] {\n  const currentTokens = tokens.map(() => '');\n  const result: string[] = [];\n\n  const visit = (index: number) => {\n    if (index === tokens.length) {\n      result.push(factory.chainLocators(currentTokens));\n      return result.length < maxOutputSize;\n    }\n    for (const taken of tokens[index]) {\n      currentTokens[index] = taken;\n      if (!visit(index + 1))\n        return false;\n    }\n    return true;\n  };\n\n  visit(0);\n  return result;\n}\n\nfunction detectExact(text: string): { exact?: boolean, text: string | RegExp } {\n  let exact = false;\n  const match = text.match(/^\\/(.*)\\/([igm]*)$/);\n  if (match)\n    return { text: new RegExp(match[1], match[2]) };\n  if (text.endsWith('\"')) {\n    text = JSON.parse(text);\n    exact = true;\n  } else if (text.endsWith('\"s')) {\n    text = JSON.parse(text.substring(0, text.length - 1));\n    exact = true;\n  } else if (text.endsWith('\"i')) {\n    text = JSON.parse(text.substring(0, text.length - 1));\n    exact = false;\n  }\n  return { exact, text };\n}\n\nexport class JavaScriptLocatorFactory implements LocatorFactory {\n  constructor(private preferredQuote?: Quote) {}\n\n  generateLocator(base: LocatorBase, kind: LocatorType, body: string | RegExp, options: LocatorOptions = {}): string {\n    switch (kind) {\n      case 'default':\n        if (options.hasText !== undefined)\n          return `locator(${this.quote(body as string)}, { hasText: ${this.toHasText(options.hasText)} })`;\n        if (options.hasNotText !== undefined)\n          return `locator(${this.quote(body as string)}, { hasNotText: ${this.toHasText(options.hasNotText)} })`;\n        return `locator(${this.quote(body as string)})`;\n      case 'frame-locator':\n        return `frameLocator(${this.quote(body as string)})`;\n      case 'frame':\n        return `contentFrame()`;\n      case 'nth':\n        return `nth(${body})`;\n      case 'first':\n        return `first()`;\n      case 'last':\n        return `last()`;\n      case 'visible':\n        return `filter({ visible: ${body === 'true' ? 'true' : 'false'} })`;\n      case 'role':\n        const attrs: string[] = [];\n        if (isRegExp(options.name)) {\n          attrs.push(`name: ${this.regexToSourceString(options.name)}`);\n        } else if (typeof options.name === 'string') {\n          attrs.push(`name: ${this.quote(options.name)}`);\n          if (options.exact)\n            attrs.push(`exact: true`);\n        }\n        for (const { name, value } of options.attrs!)\n          attrs.push(`${name}: ${typeof value === 'string' ? this.quote(value) : value}`);\n        const attrString = attrs.length ? `, { ${attrs.join(', ')} }` : '';\n        return `getByRole(${this.quote(body as string)}${attrString})`;\n      case 'has-text':\n        return `filter({ hasText: ${this.toHasText(body)} })`;\n      case 'has-not-text':\n        return `filter({ hasNotText: ${this.toHasText(body)} })`;\n      case 'has':\n        return `filter({ has: ${body} })`;\n      case 'hasNot':\n        return `filter({ hasNot: ${body} })`;\n      case 'and':\n        return `and(${body})`;\n      case 'or':\n        return `or(${body})`;\n      case 'chain':\n        return `locator(${body})`;\n      case 'test-id':\n        return `getByTestId(${this.toTestIdValue(body)})`;\n      case 'text':\n        return this.toCallWithExact('getByText', body, !!options.exact);\n      case 'alt':\n        return this.toCallWithExact('getByAltText', body, !!options.exact);\n      case 'placeholder':\n        return this.toCallWithExact('getByPlaceholder', body, !!options.exact);\n      case 'label':\n        return this.toCallWithExact('getByLabel', body, !!options.exact);\n      case 'title':\n        return this.toCallWithExact('getByTitle', body, !!options.exact);\n      default:\n        throw new Error('Unknown selector kind ' + kind);\n    }\n  }\n\n  chainLocators(locators: string[]): string {\n    return locators.join('.');\n  }\n\n  private regexToSourceString(re: RegExp) {\n    return normalizeEscapedRegexQuotes(String(re));\n  }\n\n  private toCallWithExact(method: string, body: string | RegExp, exact?: boolean) {\n    if (isRegExp(body))\n      return `${method}(${this.regexToSourceString(body)})`;\n    return exact ? `${method}(${this.quote(body)}, { exact: true })` : `${method}(${this.quote(body)})`;\n  }\n\n  private toHasText(body: string | RegExp) {\n    if (isRegExp(body))\n      return this.regexToSourceString(body);\n    return this.quote(body);\n  }\n\n  private toTestIdValue(value: string | RegExp): string {\n    if (isRegExp(value))\n      return this.regexToSourceString(value);\n    return this.quote(value);\n  }\n\n  private quote(text: string) {\n    return escapeWithQuotes(text, this.preferredQuote ?? '\\'');\n  }\n}\n\nexport class PythonLocatorFactory implements LocatorFactory {\n  generateLocator(base: LocatorBase, kind: LocatorType, body: string | RegExp, options: LocatorOptions = {}): string {\n    switch (kind) {\n      case 'default':\n        if (options.hasText !== undefined)\n          return `locator(${this.quote(body as string)}, has_text=${this.toHasText(options.hasText)})`;\n        if (options.hasNotText !== undefined)\n          return `locator(${this.quote(body as string)}, has_not_text=${this.toHasText(options.hasNotText)})`;\n        return `locator(${this.quote(body as string)})`;\n      case 'frame-locator':\n        return `frame_locator(${this.quote(body as string)})`;\n      case 'frame':\n        return `content_frame`;\n      case 'nth':\n        return `nth(${body})`;\n      case 'first':\n        return `first`;\n      case 'last':\n        return `last`;\n      case 'visible':\n        return `filter(visible=${body === 'true' ? 'True' : 'False'})`;\n      case 'role':\n        const attrs: string[] = [];\n        if (isRegExp(options.name)) {\n          attrs.push(`name=${this.regexToString(options.name)}`);\n        } else if (typeof options.name === 'string') {\n          attrs.push(`name=${this.quote(options.name)}`);\n          if (options.exact)\n            attrs.push(`exact=True`);\n        }\n        for (const { name, value } of options.attrs!) {\n          let valueString = typeof value === 'string' ? this.quote(value) : value;\n          if (typeof value === 'boolean')\n            valueString = value ? 'True' : 'False';\n          attrs.push(`${toSnakeCase(name)}=${valueString}`);\n        }\n        const attrString = attrs.length ? `, ${attrs.join(', ')}` : '';\n        return `get_by_role(${this.quote(body as string)}${attrString})`;\n      case 'has-text':\n        return `filter(has_text=${this.toHasText(body)})`;\n      case 'has-not-text':\n        return `filter(has_not_text=${this.toHasText(body)})`;\n      case 'has':\n        return `filter(has=${body})`;\n      case 'hasNot':\n        return `filter(has_not=${body})`;\n      case 'and':\n        return `and_(${body})`;\n      case 'or':\n        return `or_(${body})`;\n      case 'chain':\n        return `locator(${body})`;\n      case 'test-id':\n        return `get_by_test_id(${this.toTestIdValue(body)})`;\n      case 'text':\n        return this.toCallWithExact('get_by_text', body, !!options.exact);\n      case 'alt':\n        return this.toCallWithExact('get_by_alt_text', body, !!options.exact);\n      case 'placeholder':\n        return this.toCallWithExact('get_by_placeholder', body, !!options.exact);\n      case 'label':\n        return this.toCallWithExact('get_by_label', body, !!options.exact);\n      case 'title':\n        return this.toCallWithExact('get_by_title', body, !!options.exact);\n      default:\n        throw new Error('Unknown selector kind ' + kind);\n    }\n  }\n\n  chainLocators(locators: string[]): string {\n    return locators.join('.');\n  }\n\n  private regexToString(body: RegExp) {\n    const suffix = body.flags.includes('i') ? ', re.IGNORECASE' : '';\n    return `re.compile(r\"${normalizeEscapedRegexQuotes(body.source).replace(/\\\\\\//, '/').replace(/\"/g, '\\\\\"')}\"${suffix})`;\n  }\n\n  private toCallWithExact(method: string, body: string | RegExp, exact: boolean) {\n    if (isRegExp(body))\n      return `${method}(${this.regexToString(body)})`;\n    if (exact)\n      return `${method}(${this.quote(body)}, exact=True)`;\n    return `${method}(${this.quote(body)})`;\n  }\n\n  private toHasText(body: string | RegExp) {\n    if (isRegExp(body))\n      return this.regexToString(body);\n    return `${this.quote(body)}`;\n  }\n\n  private toTestIdValue(value: string | RegExp) {\n    if (isRegExp(value))\n      return this.regexToString(value);\n    return this.quote(value);\n  }\n\n  private quote(text: string) {\n    return escapeWithQuotes(text, '\\\"');\n  }\n}\n\nexport class JavaLocatorFactory implements LocatorFactory {\n  generateLocator(base: LocatorBase, kind: LocatorType, body: string | RegExp, options: LocatorOptions = {}): string {\n    let clazz: string;\n    switch (base) {\n      case 'page': clazz = 'Page'; break;\n      case 'frame-locator': clazz = 'FrameLocator'; break;\n      case 'locator': clazz = 'Locator'; break;\n    }\n    switch (kind) {\n      case 'default':\n        if (options.hasText !== undefined)\n          return `locator(${this.quote(body as string)}, new ${clazz}.LocatorOptions().setHasText(${this.toHasText(options.hasText)}))`;\n        if (options.hasNotText !== undefined)\n          return `locator(${this.quote(body as string)}, new ${clazz}.LocatorOptions().setHasNotText(${this.toHasText(options.hasNotText)}))`;\n        return `locator(${this.quote(body as string)})`;\n      case 'frame-locator':\n        return `frameLocator(${this.quote(body as string)})`;\n      case 'frame':\n        return `contentFrame()`;\n      case 'nth':\n        return `nth(${body})`;\n      case 'first':\n        return `first()`;\n      case 'last':\n        return `last()`;\n      case 'visible':\n        return `filter(new ${clazz}.FilterOptions().setVisible(${body === 'true' ? 'true' : 'false'}))`;\n      case 'role':\n        const attrs: string[] = [];\n        if (isRegExp(options.name)) {\n          attrs.push(`.setName(${this.regexToString(options.name)})`);\n        } else if (typeof options.name === 'string') {\n          attrs.push(`.setName(${this.quote(options.name)})`);\n          if (options.exact)\n            attrs.push(`.setExact(true)`);\n        }\n        for (const { name, value } of options.attrs!)\n          attrs.push(`.set${toTitleCase(name)}(${typeof value === 'string' ? this.quote(value) : value})`);\n        const attrString = attrs.length ? `, new ${clazz}.GetByRoleOptions()${attrs.join('')}` : '';\n        return `getByRole(AriaRole.${toSnakeCase(body as string).toUpperCase()}${attrString})`;\n      case 'has-text':\n        return `filter(new ${clazz}.FilterOptions().setHasText(${this.toHasText(body)}))`;\n      case 'has-not-text':\n        return `filter(new ${clazz}.FilterOptions().setHasNotText(${this.toHasText(body)}))`;\n      case 'has':\n        return `filter(new ${clazz}.FilterOptions().setHas(${body}))`;\n      case 'hasNot':\n        return `filter(new ${clazz}.FilterOptions().setHasNot(${body}))`;\n      case 'and':\n        return `and(${body})`;\n      case 'or':\n        return `or(${body})`;\n      case 'chain':\n        return `locator(${body})`;\n      case 'test-id':\n        return `getByTestId(${this.toTestIdValue(body)})`;\n      case 'text':\n        return this.toCallWithExact(clazz, 'getByText', body, !!options.exact);\n      case 'alt':\n        return this.toCallWithExact(clazz, 'getByAltText', body, !!options.exact);\n      case 'placeholder':\n        return this.toCallWithExact(clazz, 'getByPlaceholder', body, !!options.exact);\n      case 'label':\n        return this.toCallWithExact(clazz, 'getByLabel', body, !!options.exact);\n      case 'title':\n        return this.toCallWithExact(clazz, 'getByTitle', body, !!options.exact);\n      default:\n        throw new Error('Unknown selector kind ' + kind);\n    }\n  }\n\n  chainLocators(locators: string[]): string {\n    return locators.join('.');\n  }\n\n  private regexToString(body: RegExp) {\n    const suffix = body.flags.includes('i') ? ', Pattern.CASE_INSENSITIVE' : '';\n    return `Pattern.compile(${this.quote(normalizeEscapedRegexQuotes(body.source))}${suffix})`;\n  }\n\n  private toCallWithExact(clazz: string, method: string, body: string | RegExp, exact: boolean) {\n    if (isRegExp(body))\n      return `${method}(${this.regexToString(body)})`;\n    if (exact)\n      return `${method}(${this.quote(body)}, new ${clazz}.${toTitleCase(method)}Options().setExact(true))`;\n    return `${method}(${this.quote(body)})`;\n  }\n\n  private toHasText(body: string | RegExp) {\n    if (isRegExp(body))\n      return this.regexToString(body);\n    return this.quote(body);\n  }\n\n  private toTestIdValue(value: string | RegExp) {\n    if (isRegExp(value))\n      return this.regexToString(value);\n    return this.quote(value);\n  }\n\n  private quote(text: string) {\n    return escapeWithQuotes(text, '\\\"');\n  }\n}\n\nexport class CSharpLocatorFactory implements LocatorFactory {\n  generateLocator(base: LocatorBase, kind: LocatorType, body: string | RegExp, options: LocatorOptions = {}): string {\n    switch (kind) {\n      case 'default':\n        if (options.hasText !== undefined)\n          return `Locator(${this.quote(body as string)}, new() { ${this.toHasText(options.hasText)} })`;\n        if (options.hasNotText !== undefined)\n          return `Locator(${this.quote(body as string)}, new() { ${this.toHasNotText(options.hasNotText)} })`;\n        return `Locator(${this.quote(body as string)})`;\n      case 'frame-locator':\n        return `FrameLocator(${this.quote(body as string)})`;\n      case 'frame':\n        return `ContentFrame`;\n      case 'nth':\n        return `Nth(${body})`;\n      case 'first':\n        return `First`;\n      case 'last':\n        return `Last`;\n      case 'visible':\n        return `Filter(new() { Visible = ${body === 'true' ? 'true' : 'false'} })`;\n      case 'role':\n        const attrs: string[] = [];\n        if (isRegExp(options.name)) {\n          attrs.push(`NameRegex = ${this.regexToString(options.name)}`);\n        } else if (typeof options.name === 'string') {\n          attrs.push(`Name = ${this.quote(options.name)}`);\n          if (options.exact)\n            attrs.push(`Exact = true`);\n        }\n        for (const { name, value } of options.attrs!)\n          attrs.push(`${toTitleCase(name)} = ${typeof value === 'string' ? this.quote(value) : value}`);\n        const attrString = attrs.length ? `, new() { ${attrs.join(', ')} }` : '';\n        return `GetByRole(AriaRole.${toTitleCase(body as string)}${attrString})`;\n      case 'has-text':\n        return `Filter(new() { ${this.toHasText(body)} })`;\n      case 'has-not-text':\n        return `Filter(new() { ${this.toHasNotText(body)} })`;\n      case 'has':\n        return `Filter(new() { Has = ${body} })`;\n      case 'hasNot':\n        return `Filter(new() { HasNot = ${body} })`;\n      case 'and':\n        return `And(${body})`;\n      case 'or':\n        return `Or(${body})`;\n      case 'chain':\n        return `Locator(${body})`;\n      case 'test-id':\n        return `GetByTestId(${this.toTestIdValue(body)})`;\n      case 'text':\n        return this.toCallWithExact('GetByText', body, !!options.exact);\n      case 'alt':\n        return this.toCallWithExact('GetByAltText', body, !!options.exact);\n      case 'placeholder':\n        return this.toCallWithExact('GetByPlaceholder', body, !!options.exact);\n      case 'label':\n        return this.toCallWithExact('GetByLabel', body, !!options.exact);\n      case 'title':\n        return this.toCallWithExact('GetByTitle', body, !!options.exact);\n      default:\n        throw new Error('Unknown selector kind ' + kind);\n    }\n  }\n\n  chainLocators(locators: string[]): string {\n    return locators.join('.');\n  }\n\n  private regexToString(body: RegExp): string {\n    const suffix = body.flags.includes('i') ? ', RegexOptions.IgnoreCase' : '';\n    return `new Regex(${this.quote(normalizeEscapedRegexQuotes(body.source))}${suffix})`;\n  }\n\n  private toCallWithExact(method: string, body: string | RegExp, exact: boolean) {\n    if (isRegExp(body))\n      return `${method}(${this.regexToString(body)})`;\n    if (exact)\n      return `${method}(${this.quote(body)}, new() { Exact = true })`;\n    return `${method}(${this.quote(body)})`;\n  }\n\n  private toHasText(body: string | RegExp) {\n    if (isRegExp(body))\n      return `HasTextRegex = ${this.regexToString(body)}`;\n    return `HasText = ${this.quote(body)}`;\n  }\n\n  private toTestIdValue(value: string | RegExp) {\n    if (isRegExp(value))\n      return this.regexToString(value);\n    return this.quote(value);\n  }\n\n  private toHasNotText(body: string | RegExp) {\n    if (isRegExp(body))\n      return `HasNotTextRegex = ${this.regexToString(body)}`;\n    return `HasNotText = ${this.quote(body)}`;\n  }\n\n  private quote(text: string) {\n    return escapeWithQuotes(text, '\\\"');\n  }\n}\n\nexport class JsonlLocatorFactory implements LocatorFactory {\n  generateLocator(base: LocatorBase, kind: LocatorType, body: string | RegExp, options: LocatorOptions = {}): string {\n    return JSON.stringify({\n      kind,\n      body,\n      options,\n    });\n  }\n\n  chainLocators(locators: string[]): string {\n    const objects = locators.map(l => JSON.parse(l));\n    for (let i = 0; i < objects.length - 1; ++i)\n      objects[i].next = objects[i + 1];\n    return JSON.stringify(objects[0]);\n  }\n}\n\nconst generators: Record<Language, new (preferredQuote?: Quote) => LocatorFactory> = {\n  javascript: JavaScriptLocatorFactory,\n  python: PythonLocatorFactory,\n  java: JavaLocatorFactory,\n  csharp: CSharpLocatorFactory,\n  jsonl: JsonlLocatorFactory,\n};\n\nfunction isRegExp(obj: any): obj is RegExp {\n  return obj instanceof RegExp;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function isJsonMimeType(mimeType: string) {\n  return !!mimeType.match(/^(application\\/json|application\\/.*?\\+json|text\\/(x-)?json)(;\\s*charset=.*)?$/);\n}\n\nexport function isTextualMimeType(mimeType: string) {\n  return !!mimeType.match(/^(text\\/.*?|application\\/(json|(x-)?javascript|xml.*?|ecmascript|graphql|x-www-form-urlencoded)|image\\/svg(\\+xml)?|application\\/.*?(\\+json|\\+xml))(;\\s*charset=.*)?$/);\n}\nexport function getMimeTypeForPath(path: string): string | null {\n  const dotIndex = path.lastIndexOf('.');\n  if (dotIndex === -1)\n    return null;\n  const extension = path.substring(dotIndex + 1);\n  return types.get(extension) || null;\n}\n\nconst types: Map<string, string> = new Map([\n  ['ez', 'application/andrew-inset'],\n  ['aw', 'application/applixware'],\n  ['atom', 'application/atom+xml'],\n  ['atomcat', 'application/atomcat+xml'],\n  ['atomdeleted', 'application/atomdeleted+xml'],\n  ['atomsvc', 'application/atomsvc+xml'],\n  ['dwd', 'application/atsc-dwd+xml'],\n  ['held', 'application/atsc-held+xml'],\n  ['rsat', 'application/atsc-rsat+xml'],\n  ['bdoc', 'application/bdoc'],\n  ['xcs', 'application/calendar+xml'],\n  ['ccxml', 'application/ccxml+xml'],\n  ['cdfx', 'application/cdfx+xml'],\n  ['cdmia', 'application/cdmi-capability'],\n  ['cdmic', 'application/cdmi-container'],\n  ['cdmid', 'application/cdmi-domain'],\n  ['cdmio', 'application/cdmi-object'],\n  ['cdmiq', 'application/cdmi-queue'],\n  ['cu', 'application/cu-seeme'],\n  ['mpd', 'application/dash+xml'],\n  ['davmount', 'application/davmount+xml'],\n  ['dbk', 'application/docbook+xml'],\n  ['dssc', 'application/dssc+der'],\n  ['xdssc', 'application/dssc+xml'],\n  ['ecma', 'application/ecmascript'],\n  ['es', 'application/ecmascript'],\n  ['emma', 'application/emma+xml'],\n  ['emotionml', 'application/emotionml+xml'],\n  ['epub', 'application/epub+zip'],\n  ['exi', 'application/exi'],\n  ['exp', 'application/express'],\n  ['fdt', 'application/fdt+xml'],\n  ['pfr', 'application/font-tdpfr'],\n  ['geojson', 'application/geo+json'],\n  ['gml', 'application/gml+xml'],\n  ['gpx', 'application/gpx+xml'],\n  ['gxf', 'application/gxf'],\n  ['gz', 'application/gzip'],\n  ['hjson', 'application/hjson'],\n  ['stk', 'application/hyperstudio'],\n  ['ink', 'application/inkml+xml'],\n  ['inkml', 'application/inkml+xml'],\n  ['ipfix', 'application/ipfix'],\n  ['its', 'application/its+xml'],\n  ['ear', 'application/java-archive'],\n  ['jar', 'application/java-archive'],\n  ['war', 'application/java-archive'],\n  ['ser', 'application/java-serialized-object'],\n  ['class', 'application/java-vm'],\n  ['js', 'application/javascript'],\n  ['mjs', 'application/javascript'],\n  ['json', 'application/json'],\n  ['map', 'application/json'],\n  ['json5', 'application/json5'],\n  ['jsonml', 'application/jsonml+json'],\n  ['jsonld', 'application/ld+json'],\n  ['lgr', 'application/lgr+xml'],\n  ['lostxml', 'application/lost+xml'],\n  ['hqx', 'application/mac-binhex40'],\n  ['cpt', 'application/mac-compactpro'],\n  ['mads', 'application/mads+xml'],\n  ['webmanifest', 'application/manifest+json'],\n  ['mrc', 'application/marc'],\n  ['mrcx', 'application/marcxml+xml'],\n  ['ma', 'application/mathematica'],\n  ['mb', 'application/mathematica'],\n  ['nb', 'application/mathematica'],\n  ['mathml', 'application/mathml+xml'],\n  ['mbox', 'application/mbox'],\n  ['mscml', 'application/mediaservercontrol+xml'],\n  ['metalink', 'application/metalink+xml'],\n  ['meta4', 'application/metalink4+xml'],\n  ['mets', 'application/mets+xml'],\n  ['maei', 'application/mmt-aei+xml'],\n  ['musd', 'application/mmt-usd+xml'],\n  ['mods', 'application/mods+xml'],\n  ['m21', 'application/mp21'],\n  ['mp21', 'application/mp21'],\n  ['m4p', 'application/mp4'],\n  ['mp4s', 'application/mp4'],\n  ['doc', 'application/msword'],\n  ['dot', 'application/msword'],\n  ['mxf', 'application/mxf'],\n  ['nq', 'application/n-quads'],\n  ['nt', 'application/n-triples'],\n  ['cjs', 'application/node'],\n  ['bin', 'application/octet-stream'],\n  ['bpk', 'application/octet-stream'],\n  ['buffer', 'application/octet-stream'],\n  ['deb', 'application/octet-stream'],\n  ['deploy', 'application/octet-stream'],\n  ['dist', 'application/octet-stream'],\n  ['distz', 'application/octet-stream'],\n  ['dll', 'application/octet-stream'],\n  ['dmg', 'application/octet-stream'],\n  ['dms', 'application/octet-stream'],\n  ['dump', 'application/octet-stream'],\n  ['elc', 'application/octet-stream'],\n  ['exe', 'application/octet-stream'],\n  ['img', 'application/octet-stream'],\n  ['iso', 'application/octet-stream'],\n  ['lrf', 'application/octet-stream'],\n  ['mar', 'application/octet-stream'],\n  ['msi', 'application/octet-stream'],\n  ['msm', 'application/octet-stream'],\n  ['msp', 'application/octet-stream'],\n  ['pkg', 'application/octet-stream'],\n  ['so', 'application/octet-stream'],\n  ['oda', 'application/oda'],\n  ['opf', 'application/oebps-package+xml'],\n  ['ogx', 'application/ogg'],\n  ['omdoc', 'application/omdoc+xml'],\n  ['onepkg', 'application/onenote'],\n  ['onetmp', 'application/onenote'],\n  ['onetoc', 'application/onenote'],\n  ['onetoc2', 'application/onenote'],\n  ['oxps', 'application/oxps'],\n  ['relo', 'application/p2p-overlay+xml'],\n  ['xer', 'application/patch-ops-error+xml'],\n  ['pdf', 'application/pdf'],\n  ['pgp', 'application/pgp-encrypted'],\n  ['asc', 'application/pgp-signature'],\n  ['sig', 'application/pgp-signature'],\n  ['prf', 'application/pics-rules'],\n  ['p10', 'application/pkcs10'],\n  ['p7c', 'application/pkcs7-mime'],\n  ['p7m', 'application/pkcs7-mime'],\n  ['p7s', 'application/pkcs7-signature'],\n  ['p8', 'application/pkcs8'],\n  ['ac', 'application/pkix-attr-cert'],\n  ['cer', 'application/pkix-cert'],\n  ['crl', 'application/pkix-crl'],\n  ['pkipath', 'application/pkix-pkipath'],\n  ['pki', 'application/pkixcmp'],\n  ['pls', 'application/pls+xml'],\n  ['ai', 'application/postscript'],\n  ['eps', 'application/postscript'],\n  ['ps', 'application/postscript'],\n  ['provx', 'application/provenance+xml'],\n  ['pskcxml', 'application/pskc+xml'],\n  ['raml', 'application/raml+yaml'],\n  ['owl', 'application/rdf+xml'],\n  ['rdf', 'application/rdf+xml'],\n  ['rif', 'application/reginfo+xml'],\n  ['rnc', 'application/relax-ng-compact-syntax'],\n  ['rl', 'application/resource-lists+xml'],\n  ['rld', 'application/resource-lists-diff+xml'],\n  ['rs', 'application/rls-services+xml'],\n  ['rapd', 'application/route-apd+xml'],\n  ['sls', 'application/route-s-tsid+xml'],\n  ['rusd', 'application/route-usd+xml'],\n  ['gbr', 'application/rpki-ghostbusters'],\n  ['mft', 'application/rpki-manifest'],\n  ['roa', 'application/rpki-roa'],\n  ['rsd', 'application/rsd+xml'],\n  ['rss', 'application/rss+xml'],\n  ['rtf', 'application/rtf'],\n  ['sbml', 'application/sbml+xml'],\n  ['scq', 'application/scvp-cv-request'],\n  ['scs', 'application/scvp-cv-response'],\n  ['spq', 'application/scvp-vp-request'],\n  ['spp', 'application/scvp-vp-response'],\n  ['sdp', 'application/sdp'],\n  ['senmlx', 'application/senml+xml'],\n  ['sensmlx', 'application/sensml+xml'],\n  ['setpay', 'application/set-payment-initiation'],\n  ['setreg', 'application/set-registration-initiation'],\n  ['shf', 'application/shf+xml'],\n  ['sieve', 'application/sieve'],\n  ['siv', 'application/sieve'],\n  ['smi', 'application/smil+xml'],\n  ['smil', 'application/smil+xml'],\n  ['rq', 'application/sparql-query'],\n  ['srx', 'application/sparql-results+xml'],\n  ['gram', 'application/srgs'],\n  ['grxml', 'application/srgs+xml'],\n  ['sru', 'application/sru+xml'],\n  ['ssdl', 'application/ssdl+xml'],\n  ['ssml', 'application/ssml+xml'],\n  ['swidtag', 'application/swid+xml'],\n  ['tei', 'application/tei+xml'],\n  ['teicorpus', 'application/tei+xml'],\n  ['tfi', 'application/thraud+xml'],\n  ['tsd', 'application/timestamped-data'],\n  ['toml', 'application/toml'],\n  ['trig', 'application/trig'],\n  ['ttml', 'application/ttml+xml'],\n  ['ubj', 'application/ubjson'],\n  ['rsheet', 'application/urc-ressheet+xml'],\n  ['td', 'application/urc-targetdesc+xml'],\n  ['vxml', 'application/voicexml+xml'],\n  ['wasm', 'application/wasm'],\n  ['wgt', 'application/widget'],\n  ['hlp', 'application/winhlp'],\n  ['wsdl', 'application/wsdl+xml'],\n  ['wspolicy', 'application/wspolicy+xml'],\n  ['xaml', 'application/xaml+xml'],\n  ['xav', 'application/xcap-att+xml'],\n  ['xca', 'application/xcap-caps+xml'],\n  ['xdf', 'application/xcap-diff+xml'],\n  ['xel', 'application/xcap-el+xml'],\n  ['xns', 'application/xcap-ns+xml'],\n  ['xenc', 'application/xenc+xml'],\n  ['xht', 'application/xhtml+xml'],\n  ['xhtml', 'application/xhtml+xml'],\n  ['xlf', 'application/xliff+xml'],\n  ['rng', 'application/xml'],\n  ['xml', 'application/xml'],\n  ['xsd', 'application/xml'],\n  ['xsl', 'application/xml'],\n  ['dtd', 'application/xml-dtd'],\n  ['xop', 'application/xop+xml'],\n  ['xpl', 'application/xproc+xml'],\n  ['*xsl', 'application/xslt+xml'],\n  ['xslt', 'application/xslt+xml'],\n  ['xspf', 'application/xspf+xml'],\n  ['mxml', 'application/xv+xml'],\n  ['xhvml', 'application/xv+xml'],\n  ['xvm', 'application/xv+xml'],\n  ['xvml', 'application/xv+xml'],\n  ['yang', 'application/yang'],\n  ['yin', 'application/yin+xml'],\n  ['zip', 'application/zip'],\n  ['*3gpp', 'audio/3gpp'],\n  ['adp', 'audio/adpcm'],\n  ['amr', 'audio/amr'],\n  ['au', 'audio/basic'],\n  ['snd', 'audio/basic'],\n  ['kar', 'audio/midi'],\n  ['mid', 'audio/midi'],\n  ['midi', 'audio/midi'],\n  ['rmi', 'audio/midi'],\n  ['mxmf', 'audio/mobile-xmf'],\n  ['*mp3', 'audio/mp3'],\n  ['m4a', 'audio/mp4'],\n  ['mp4a', 'audio/mp4'],\n  ['m2a', 'audio/mpeg'],\n  ['m3a', 'audio/mpeg'],\n  ['mp2', 'audio/mpeg'],\n  ['mp2a', 'audio/mpeg'],\n  ['mp3', 'audio/mpeg'],\n  ['mpga', 'audio/mpeg'],\n  ['oga', 'audio/ogg'],\n  ['ogg', 'audio/ogg'],\n  ['opus', 'audio/ogg'],\n  ['spx', 'audio/ogg'],\n  ['s3m', 'audio/s3m'],\n  ['sil', 'audio/silk'],\n  ['wav', 'audio/wav'],\n  ['*wav', 'audio/wave'],\n  ['weba', 'audio/webm'],\n  ['xm', 'audio/xm'],\n  ['ttc', 'font/collection'],\n  ['otf', 'font/otf'],\n  ['ttf', 'font/ttf'],\n  ['woff', 'font/woff'],\n  ['woff2', 'font/woff2'],\n  ['exr', 'image/aces'],\n  ['apng', 'image/apng'],\n  ['avif', 'image/avif'],\n  ['bmp', 'image/bmp'],\n  ['cgm', 'image/cgm'],\n  ['drle', 'image/dicom-rle'],\n  ['emf', 'image/emf'],\n  ['fits', 'image/fits'],\n  ['g3', 'image/g3fax'],\n  ['gif', 'image/gif'],\n  ['heic', 'image/heic'],\n  ['heics', 'image/heic-sequence'],\n  ['heif', 'image/heif'],\n  ['heifs', 'image/heif-sequence'],\n  ['hej2', 'image/hej2k'],\n  ['hsj2', 'image/hsj2'],\n  ['ief', 'image/ief'],\n  ['jls', 'image/jls'],\n  ['jp2', 'image/jp2'],\n  ['jpg2', 'image/jp2'],\n  ['jpe', 'image/jpeg'],\n  ['jpeg', 'image/jpeg'],\n  ['jpg', 'image/jpeg'],\n  ['jph', 'image/jph'],\n  ['jhc', 'image/jphc'],\n  ['jpm', 'image/jpm'],\n  ['jpf', 'image/jpx'],\n  ['jpx', 'image/jpx'],\n  ['jxr', 'image/jxr'],\n  ['jxra', 'image/jxra'],\n  ['jxrs', 'image/jxrs'],\n  ['jxs', 'image/jxs'],\n  ['jxsc', 'image/jxsc'],\n  ['jxsi', 'image/jxsi'],\n  ['jxss', 'image/jxss'],\n  ['ktx', 'image/ktx'],\n  ['ktx2', 'image/ktx2'],\n  ['png', 'image/png'],\n  ['sgi', 'image/sgi'],\n  ['svg', 'image/svg+xml'],\n  ['svgz', 'image/svg+xml'],\n  ['t38', 'image/t38'],\n  ['tif', 'image/tiff'],\n  ['tiff', 'image/tiff'],\n  ['tfx', 'image/tiff-fx'],\n  ['webp', 'image/webp'],\n  ['wmf', 'image/wmf'],\n  ['disposition-notification', 'message/disposition-notification'],\n  ['u8msg', 'message/global'],\n  ['u8dsn', 'message/global-delivery-status'],\n  ['u8mdn', 'message/global-disposition-notification'],\n  ['u8hdr', 'message/global-headers'],\n  ['eml', 'message/rfc822'],\n  ['mime', 'message/rfc822'],\n  ['3mf', 'model/3mf'],\n  ['gltf', 'model/gltf+json'],\n  ['glb', 'model/gltf-binary'],\n  ['iges', 'model/iges'],\n  ['igs', 'model/iges'],\n  ['mesh', 'model/mesh'],\n  ['msh', 'model/mesh'],\n  ['silo', 'model/mesh'],\n  ['mtl', 'model/mtl'],\n  ['obj', 'model/obj'],\n  ['stpx', 'model/step+xml'],\n  ['stpz', 'model/step+zip'],\n  ['stpxz', 'model/step-xml+zip'],\n  ['stl', 'model/stl'],\n  ['vrml', 'model/vrml'],\n  ['wrl', 'model/vrml'],\n  ['*x3db', 'model/x3d+binary'],\n  ['x3dbz', 'model/x3d+binary'],\n  ['x3db', 'model/x3d+fastinfoset'],\n  ['*x3dv', 'model/x3d+vrml'],\n  ['x3dvz', 'model/x3d+vrml'],\n  ['x3d', 'model/x3d+xml'],\n  ['x3dz', 'model/x3d+xml'],\n  ['x3dv', 'model/x3d-vrml'],\n  ['appcache', 'text/cache-manifest'],\n  ['manifest', 'text/cache-manifest'],\n  ['ics', 'text/calendar'],\n  ['ifb', 'text/calendar'],\n  ['coffee', 'text/coffeescript'],\n  ['litcoffee', 'text/coffeescript'],\n  ['css', 'text/css'],\n  ['csv', 'text/csv'],\n  ['htm', 'text/html'],\n  ['html', 'text/html'],\n  ['shtml', 'text/html'],\n  ['jade', 'text/jade'],\n  ['jsx', 'text/jsx'],\n  ['less', 'text/less'],\n  ['markdown', 'text/markdown'],\n  ['md', 'text/markdown'],\n  ['mml', 'text/mathml'],\n  ['mdx', 'text/mdx'],\n  ['n3', 'text/n3'],\n  ['conf', 'text/plain'],\n  ['def', 'text/plain'],\n  ['in', 'text/plain'],\n  ['ini', 'text/plain'],\n  ['list', 'text/plain'],\n  ['log', 'text/plain'],\n  ['text', 'text/plain'],\n  ['txt', 'text/plain'],\n  ['rtx', 'text/richtext'],\n  ['*rtf', 'text/rtf'],\n  ['sgm', 'text/sgml'],\n  ['sgml', 'text/sgml'],\n  ['shex', 'text/shex'],\n  ['slim', 'text/slim'],\n  ['slm', 'text/slim'],\n  ['spdx', 'text/spdx'],\n  ['styl', 'text/stylus'],\n  ['stylus', 'text/stylus'],\n  ['tsv', 'text/tab-separated-values'],\n  ['man', 'text/troff'],\n  ['me', 'text/troff'],\n  ['ms', 'text/troff'],\n  ['roff', 'text/troff'],\n  ['t', 'text/troff'],\n  ['tr', 'text/troff'],\n  ['ttl', 'text/turtle'],\n  ['uri', 'text/uri-list'],\n  ['uris', 'text/uri-list'],\n  ['urls', 'text/uri-list'],\n  ['vcard', 'text/vcard'],\n  ['vtt', 'text/vtt'],\n  ['*xml', 'text/xml'],\n  ['yaml', 'text/yaml'],\n  ['yml', 'text/yaml'],\n  ['3gp', 'video/3gpp'],\n  ['3gpp', 'video/3gpp'],\n  ['3g2', 'video/3gpp2'],\n  ['h261', 'video/h261'],\n  ['h263', 'video/h263'],\n  ['h264', 'video/h264'],\n  ['m4s', 'video/iso.segment'],\n  ['jpgv', 'video/jpeg'],\n  ['jpm', 'video/jpm'],\n  ['jpgm', 'video/jpm'],\n  ['mj2', 'video/mj2'],\n  ['mjp2', 'video/mj2'],\n  ['ts', 'video/mp2t'],\n  ['mp4', 'video/mp4'],\n  ['mp4v', 'video/mp4'],\n  ['mpg4', 'video/mp4'],\n  ['m1v', 'video/mpeg'],\n  ['m2v', 'video/mpeg'],\n  ['mpe', 'video/mpeg'],\n  ['mpeg', 'video/mpeg'],\n  ['mpg', 'video/mpeg'],\n  ['ogv', 'video/ogg'],\n  ['mov', 'video/quicktime'],\n  ['qt', 'video/quicktime'],\n  ['webm', 'video/webm']\n]);\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class MultiMap<K, V> {\n  private _map: Map<K, V[]>;\n\n  constructor() {\n    this._map = new Map<K, V[]>();\n  }\n\n  set(key: K, value: V) {\n    let values = this._map.get(key);\n    if (!values) {\n      values = [];\n      this._map.set(key, values);\n    }\n    values.push(value);\n  }\n\n  get(key: K): V[] {\n    return this._map.get(key) || [];\n  }\n\n  has(key: K): boolean {\n    return this._map.has(key);\n  }\n\n  delete(key: K, value: V) {\n    const values = this._map.get(key);\n    if (!values)\n      return;\n    if (values.includes(value))\n      this._map.set(key, values.filter(v => value !== v));\n  }\n\n  deleteAll(key: K) {\n    this._map.delete(key);\n  }\n\n  hasValue(key: K, value: V): boolean {\n    const values = this._map.get(key);\n    if (!values)\n      return false;\n    return values.includes(value);\n  }\n\n  get size(): number {\n    return this._map.size;\n  }\n\n  [Symbol.iterator](): Iterator<[K, V[]]> {\n    return this._map[Symbol.iterator]();\n  }\n\n  keys(): IterableIterator<K> {\n    return this._map.keys();\n  }\n\n  values(): Iterable<V> {\n    const result: V[] = [];\n    for (const key of this.keys())\n      result.push(...this.get(key));\n    return result;\n  }\n\n  clear() {\n    this._map.clear();\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// This file is generated by generate_channels.js, do not edit manually.\n\nexport const methodMetainfo = new Map<string, { internal?: boolean, title?: string, slowMo?: boolean, snapshot?: boolean, pausesBeforeInput?: boolean }>([\n  ['APIRequestContext.fetch', { title: 'Fetch \"{url}\"', }],\n  ['APIRequestContext.fetchResponseBody', { internal: true, }],\n  ['APIRequestContext.fetchLog', { internal: true, }],\n  ['APIRequestContext.storageState', { internal: true, }],\n  ['APIRequestContext.disposeAPIResponse', { internal: true, }],\n  ['APIRequestContext.dispose', { internal: true, }],\n  ['LocalUtils.zip', { internal: true, }],\n  ['LocalUtils.harOpen', { internal: true, }],\n  ['LocalUtils.harLookup', { internal: true, }],\n  ['LocalUtils.harClose', { internal: true, }],\n  ['LocalUtils.harUnzip', { internal: true, }],\n  ['LocalUtils.connect', { internal: true, }],\n  ['LocalUtils.tracingStarted', { internal: true, }],\n  ['LocalUtils.addStackToTracingNoReply', { internal: true, }],\n  ['LocalUtils.traceDiscarded', { internal: true, }],\n  ['LocalUtils.globToRegex', { internal: true, }],\n  ['Root.initialize', { internal: true, }],\n  ['Playwright.newRequest', { title: 'Create request context', }],\n  ['DebugController.initialize', { internal: true, }],\n  ['DebugController.setReportStateChanged', { internal: true, }],\n  ['DebugController.resetForReuse', { internal: true, }],\n  ['DebugController.navigate', { internal: true, }],\n  ['DebugController.setRecorderMode', { internal: true, }],\n  ['DebugController.highlight', { internal: true, }],\n  ['DebugController.hideHighlight', { internal: true, }],\n  ['DebugController.resume', { internal: true, }],\n  ['DebugController.kill', { internal: true, }],\n  ['DebugController.closeAllBrowsers', { internal: true, }],\n  ['SocksSupport.socksConnected', { internal: true, }],\n  ['SocksSupport.socksFailed', { internal: true, }],\n  ['SocksSupport.socksData', { internal: true, }],\n  ['SocksSupport.socksError', { internal: true, }],\n  ['SocksSupport.socksEnd', { internal: true, }],\n  ['BrowserType.launch', { title: 'Launch browser', }],\n  ['BrowserType.launchPersistentContext', { title: 'Launch persistent context', }],\n  ['BrowserType.connectOverCDP', { title: 'Connect over CDP', }],\n  ['Browser.close', { title: 'Close browser', }],\n  ['Browser.killForTests', { internal: true, }],\n  ['Browser.defaultUserAgentForTest', { internal: true, }],\n  ['Browser.newContext', { title: 'Create context', }],\n  ['Browser.newContextForReuse', { internal: true, }],\n  ['Browser.stopPendingOperations', { internal: true, title: 'Stop pending operations', }],\n  ['Browser.newBrowserCDPSession', { internal: true, title: 'Create CDP session', }],\n  ['Browser.startTracing', { internal: true, }],\n  ['Browser.stopTracing', { internal: true, }],\n  ['EventTarget.waitForEventInfo', { title: 'Wait for event \"{info.event}\"', snapshot: true, }],\n  ['BrowserContext.waitForEventInfo', { title: 'Wait for event \"{info.event}\"', snapshot: true, }],\n  ['Page.waitForEventInfo', { title: 'Wait for event \"{info.event}\"', snapshot: true, }],\n  ['WebSocket.waitForEventInfo', { title: 'Wait for event \"{info.event}\"', snapshot: true, }],\n  ['ElectronApplication.waitForEventInfo', { title: 'Wait for event \"{info.event}\"', snapshot: true, }],\n  ['AndroidDevice.waitForEventInfo', { title: 'Wait for event \"{info.event}\"', snapshot: true, }],\n  ['BrowserContext.addCookies', { title: 'Add cookies', }],\n  ['BrowserContext.addInitScript', { title: 'Add init script', }],\n  ['BrowserContext.clearCookies', { title: 'Clear cookies', }],\n  ['BrowserContext.clearPermissions', { title: 'Clear permissions', }],\n  ['BrowserContext.close', { title: 'Close context', }],\n  ['BrowserContext.cookies', { title: 'Get cookies', }],\n  ['BrowserContext.exposeBinding', { title: 'Expose binding', }],\n  ['BrowserContext.grantPermissions', { title: 'Grant permissions', }],\n  ['BrowserContext.newPage', { title: 'Create page', }],\n  ['BrowserContext.registerSelectorEngine', { internal: true, }],\n  ['BrowserContext.setTestIdAttributeName', { internal: true, }],\n  ['BrowserContext.setExtraHTTPHeaders', { title: 'Set extra HTTP headers', }],\n  ['BrowserContext.setGeolocation', { title: 'Set geolocation', }],\n  ['BrowserContext.setHTTPCredentials', { title: 'Set HTTP credentials', }],\n  ['BrowserContext.setNetworkInterceptionPatterns', { internal: true, }],\n  ['BrowserContext.setWebSocketInterceptionPatterns', { internal: true, }],\n  ['BrowserContext.setOffline', { title: 'Set offline mode', }],\n  ['BrowserContext.storageState', { title: 'Get storage state', }],\n  ['BrowserContext.pause', { title: 'Pause', }],\n  ['BrowserContext.enableRecorder', { internal: true, }],\n  ['BrowserContext.newCDPSession', { internal: true, }],\n  ['BrowserContext.harStart', { internal: true, }],\n  ['BrowserContext.harExport', { internal: true, }],\n  ['BrowserContext.createTempFiles', { internal: true, }],\n  ['BrowserContext.updateSubscription', { internal: true, }],\n  ['BrowserContext.clockFastForward', { title: 'Fast forward clock \"{ticksNumber}{ticksString}\"', }],\n  ['BrowserContext.clockInstall', { title: 'Install clock \"{timeNumber}{timeString}\"', }],\n  ['BrowserContext.clockPauseAt', { title: 'Pause clock \"{timeNumber}{timeString}\"', }],\n  ['BrowserContext.clockResume', { title: 'Resume clock', }],\n  ['BrowserContext.clockRunFor', { title: 'Run clock \"{ticksNumber}{ticksString}\"', }],\n  ['BrowserContext.clockSetFixedTime', { title: 'Set fixed time \"{timeNumber}{timeString}\"', }],\n  ['BrowserContext.clockSetSystemTime', { title: 'Set system time \"{timeNumber}{timeString}\"', }],\n  ['Page.addInitScript', { }],\n  ['Page.close', { title: 'Close', }],\n  ['Page.emulateMedia', { title: 'Emulate media', snapshot: true, }],\n  ['Page.exposeBinding', { title: 'Expose binding', }],\n  ['Page.goBack', { title: 'Go back', slowMo: true, snapshot: true, }],\n  ['Page.goForward', { title: 'Go forward', slowMo: true, snapshot: true, }],\n  ['Page.requestGC', { title: 'Request garbage collection', }],\n  ['Page.registerLocatorHandler', { title: 'Register locator handler', }],\n  ['Page.resolveLocatorHandlerNoReply', { internal: true, }],\n  ['Page.unregisterLocatorHandler', { title: 'Unregister locator handler', }],\n  ['Page.reload', { title: 'Reload', slowMo: true, snapshot: true, }],\n  ['Page.expectScreenshot', { title: 'Expect screenshot', snapshot: true, }],\n  ['Page.screenshot', { title: 'Screenshot', snapshot: true, }],\n  ['Page.setExtraHTTPHeaders', { title: 'Set extra HTTP headers', }],\n  ['Page.setNetworkInterceptionPatterns', { internal: true, }],\n  ['Page.setWebSocketInterceptionPatterns', { internal: true, }],\n  ['Page.setViewportSize', { title: 'Set viewport size', snapshot: true, }],\n  ['Page.keyboardDown', { title: 'Key down \"{key}\"', slowMo: true, snapshot: true, }],\n  ['Page.keyboardUp', { title: 'Key up \"{key}\"', slowMo: true, snapshot: true, }],\n  ['Page.keyboardInsertText', { title: 'Insert \"{text}\"', slowMo: true, snapshot: true, }],\n  ['Page.keyboardType', { title: 'Type \"{text}\"', slowMo: true, snapshot: true, }],\n  ['Page.keyboardPress', { title: 'Press \"{key}\"', slowMo: true, snapshot: true, }],\n  ['Page.mouseMove', { title: 'Mouse move', slowMo: true, snapshot: true, }],\n  ['Page.mouseDown', { title: 'Mouse down', slowMo: true, snapshot: true, }],\n  ['Page.mouseUp', { title: 'Mouse up', slowMo: true, snapshot: true, }],\n  ['Page.mouseClick', { title: 'Click', slowMo: true, snapshot: true, }],\n  ['Page.mouseWheel', { title: 'Mouse wheel', slowMo: true, snapshot: true, }],\n  ['Page.touchscreenTap', { title: 'Tap', slowMo: true, snapshot: true, }],\n  ['Page.accessibilitySnapshot', { internal: true, snapshot: true, }],\n  ['Page.pdf', { title: 'PDF', }],\n  ['Page.snapshotForAI', { internal: true, snapshot: true, }],\n  ['Page.startJSCoverage', { internal: true, }],\n  ['Page.stopJSCoverage', { internal: true, }],\n  ['Page.startCSSCoverage', { internal: true, }],\n  ['Page.stopCSSCoverage', { internal: true, }],\n  ['Page.bringToFront', { title: 'Bring to front', }],\n  ['Page.updateSubscription', { internal: true, }],\n  ['Frame.evalOnSelector', { title: 'Evaluate', snapshot: true, }],\n  ['Frame.evalOnSelectorAll', { title: 'Evaluate', snapshot: true, }],\n  ['Frame.addScriptTag', { title: 'Add script tag', snapshot: true, }],\n  ['Frame.addStyleTag', { title: 'Add style tag', snapshot: true, }],\n  ['Frame.ariaSnapshot', { title: 'Aria snapshot', snapshot: true, }],\n  ['Frame.blur', { title: 'Blur', slowMo: true, snapshot: true, }],\n  ['Frame.check', { title: 'Check', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['Frame.click', { title: 'Click', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['Frame.content', { title: 'Get content', snapshot: true, }],\n  ['Frame.dragAndDrop', { title: 'Drag and drop', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['Frame.dblclick', { title: 'Double click', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['Frame.dispatchEvent', { title: 'Dispatch \"{type}\"', slowMo: true, snapshot: true, }],\n  ['Frame.evaluateExpression', { title: 'Evaluate', snapshot: true, }],\n  ['Frame.evaluateExpressionHandle', { title: 'Evaluate', snapshot: true, }],\n  ['Frame.fill', { title: 'Fill \"{value}\"', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['Frame.focus', { title: 'Focus', slowMo: true, snapshot: true, }],\n  ['Frame.frameElement', { internal: true, }],\n  ['Frame.highlight', { internal: true, }],\n  ['Frame.getAttribute', { internal: true, snapshot: true, }],\n  ['Frame.goto', { title: 'Navigate to \"{url}\"', slowMo: true, snapshot: true, }],\n  ['Frame.hover', { title: 'Hover', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['Frame.innerHTML', { title: 'Get HTML', snapshot: true, }],\n  ['Frame.innerText', { title: 'Get inner text', snapshot: true, }],\n  ['Frame.inputValue', { title: 'Get input value', snapshot: true, }],\n  ['Frame.isChecked', { title: 'Is checked', snapshot: true, }],\n  ['Frame.isDisabled', { title: 'Is disabled', snapshot: true, }],\n  ['Frame.isEnabled', { title: 'Is enabled', snapshot: true, }],\n  ['Frame.isHidden', { title: 'Is hidden', snapshot: true, }],\n  ['Frame.isVisible', { title: 'Is visible', snapshot: true, }],\n  ['Frame.isEditable', { title: 'Is editable', snapshot: true, }],\n  ['Frame.press', { title: 'Press \"{key}\"', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['Frame.querySelector', { title: 'Query selector', snapshot: true, }],\n  ['Frame.querySelectorAll', { title: 'Query selector all', snapshot: true, }],\n  ['Frame.queryCount', { title: 'Query count', snapshot: true, }],\n  ['Frame.selectOption', { title: 'Select option', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['Frame.setContent', { title: 'Set content', snapshot: true, }],\n  ['Frame.setInputFiles', { title: 'Set input files', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['Frame.tap', { title: 'Tap', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['Frame.textContent', { title: 'Get text content', snapshot: true, }],\n  ['Frame.title', { internal: true, }],\n  ['Frame.type', { title: 'Type', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['Frame.uncheck', { title: 'Uncheck', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['Frame.waitForTimeout', { title: 'Wait for timeout', snapshot: true, }],\n  ['Frame.waitForFunction', { title: 'Wait for function', snapshot: true, }],\n  ['Frame.waitForSelector', { title: 'Wait for selector', snapshot: true, }],\n  ['Frame.expect', { title: 'Expect \"{expression}\"', snapshot: true, }],\n  ['Worker.evaluateExpression', { title: 'Evaluate', }],\n  ['Worker.evaluateExpressionHandle', { title: 'Evaluate', }],\n  ['JSHandle.dispose', { }],\n  ['ElementHandle.dispose', { }],\n  ['JSHandle.evaluateExpression', { title: 'Evaluate', snapshot: true, }],\n  ['ElementHandle.evaluateExpression', { title: 'Evaluate', snapshot: true, }],\n  ['JSHandle.evaluateExpressionHandle', { title: 'Evaluate', snapshot: true, }],\n  ['ElementHandle.evaluateExpressionHandle', { title: 'Evaluate', snapshot: true, }],\n  ['JSHandle.getPropertyList', { internal: true, }],\n  ['ElementHandle.getPropertyList', { internal: true, }],\n  ['JSHandle.getProperty', { internal: true, }],\n  ['ElementHandle.getProperty', { internal: true, }],\n  ['JSHandle.jsonValue', { internal: true, }],\n  ['ElementHandle.jsonValue', { internal: true, }],\n  ['ElementHandle.evalOnSelector', { title: 'Evaluate', snapshot: true, }],\n  ['ElementHandle.evalOnSelectorAll', { title: 'Evaluate', snapshot: true, }],\n  ['ElementHandle.boundingBox', { title: 'Get bounding box', snapshot: true, }],\n  ['ElementHandle.check', { title: 'Check', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['ElementHandle.click', { title: 'Click', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['ElementHandle.contentFrame', { internal: true, snapshot: true, }],\n  ['ElementHandle.dblclick', { title: 'Double click', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['ElementHandle.dispatchEvent', { title: 'Dispatch event', slowMo: true, snapshot: true, }],\n  ['ElementHandle.fill', { title: 'Fill \"{value}\"', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['ElementHandle.focus', { title: 'Focus', slowMo: true, snapshot: true, }],\n  ['ElementHandle.generateLocatorString', { internal: true, }],\n  ['ElementHandle.getAttribute', { internal: true, }],\n  ['ElementHandle.hover', { title: 'Hover', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['ElementHandle.innerHTML', { title: 'Get HTML', snapshot: true, }],\n  ['ElementHandle.innerText', { title: 'Get inner text', snapshot: true, }],\n  ['ElementHandle.inputValue', { title: 'Get input value', snapshot: true, }],\n  ['ElementHandle.isChecked', { title: 'Is checked', snapshot: true, }],\n  ['ElementHandle.isDisabled', { title: 'Is disabled', snapshot: true, }],\n  ['ElementHandle.isEditable', { title: 'Is editable', snapshot: true, }],\n  ['ElementHandle.isEnabled', { title: 'Is enabled', snapshot: true, }],\n  ['ElementHandle.isHidden', { title: 'Is hidden', snapshot: true, }],\n  ['ElementHandle.isVisible', { title: 'Is visible', snapshot: true, }],\n  ['ElementHandle.ownerFrame', { title: 'Get owner frame', }],\n  ['ElementHandle.press', { title: 'Press \"{key}\"', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['ElementHandle.querySelector', { title: 'Query selector', snapshot: true, }],\n  ['ElementHandle.querySelectorAll', { title: 'Query selector all', snapshot: true, }],\n  ['ElementHandle.screenshot', { title: 'Screenshot', snapshot: true, }],\n  ['ElementHandle.scrollIntoViewIfNeeded', { title: 'Scroll into view', slowMo: true, snapshot: true, }],\n  ['ElementHandle.selectOption', { title: 'Select option', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['ElementHandle.selectText', { title: 'Select text', slowMo: true, snapshot: true, }],\n  ['ElementHandle.setInputFiles', { title: 'Set input files', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['ElementHandle.tap', { title: 'Tap', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['ElementHandle.textContent', { title: 'Get text content', snapshot: true, }],\n  ['ElementHandle.type', { title: 'Type', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['ElementHandle.uncheck', { title: 'Uncheck', slowMo: true, snapshot: true, pausesBeforeInput: true, }],\n  ['ElementHandle.waitForElementState', { title: 'Wait for state', snapshot: true, }],\n  ['ElementHandle.waitForSelector', { title: 'Wait for selector', snapshot: true, }],\n  ['Request.response', { internal: true, }],\n  ['Request.rawRequestHeaders', { internal: true, }],\n  ['Route.redirectNavigationRequest', { internal: true, }],\n  ['Route.abort', { }],\n  ['Route.continue', { internal: true, }],\n  ['Route.fulfill', { internal: true, }],\n  ['WebSocketRoute.connect', { internal: true, }],\n  ['WebSocketRoute.ensureOpened', { internal: true, }],\n  ['WebSocketRoute.sendToPage', { internal: true, }],\n  ['WebSocketRoute.sendToServer', { internal: true, }],\n  ['WebSocketRoute.closePage', { internal: true, }],\n  ['WebSocketRoute.closeServer', { internal: true, }],\n  ['Response.body', { internal: true, }],\n  ['Response.securityDetails', { internal: true, }],\n  ['Response.serverAddr', { internal: true, }],\n  ['Response.rawResponseHeaders', { internal: true, }],\n  ['Response.sizes', { internal: true, }],\n  ['BindingCall.reject', { internal: true, }],\n  ['BindingCall.resolve', { internal: true, }],\n  ['Dialog.accept', { title: 'Accept dialog', }],\n  ['Dialog.dismiss', { title: 'Dismiss dialog', }],\n  ['Tracing.tracingStart', { internal: true, }],\n  ['Tracing.tracingStartChunk', { internal: true, }],\n  ['Tracing.tracingGroup', { title: 'Trace \"{name}\"', }],\n  ['Tracing.tracingGroupEnd', { title: 'Group end', }],\n  ['Tracing.tracingStopChunk', { internal: true, }],\n  ['Tracing.tracingStop', { internal: true, }],\n  ['Artifact.pathAfterFinished', { internal: true, }],\n  ['Artifact.saveAs', { internal: true, }],\n  ['Artifact.saveAsStream', { internal: true, }],\n  ['Artifact.failure', { internal: true, }],\n  ['Artifact.stream', { internal: true, }],\n  ['Artifact.cancel', { internal: true, }],\n  ['Artifact.delete', { internal: true, }],\n  ['Stream.read', { internal: true, }],\n  ['Stream.close', { internal: true, }],\n  ['WritableStream.write', { internal: true, }],\n  ['WritableStream.close', { internal: true, }],\n  ['CDPSession.send', { internal: true, }],\n  ['CDPSession.detach', { internal: true, }],\n  ['Electron.launch', { title: 'Launch electron', }],\n  ['ElectronApplication.browserWindow', { internal: true, }],\n  ['ElectronApplication.evaluateExpression', { title: 'Evaluate', }],\n  ['ElectronApplication.evaluateExpressionHandle', { title: 'Evaluate', }],\n  ['ElectronApplication.updateSubscription', { internal: true, }],\n  ['Android.devices', { internal: true, }],\n  ['AndroidSocket.write', { internal: true, }],\n  ['AndroidSocket.close', { internal: true, }],\n  ['AndroidDevice.wait', { }],\n  ['AndroidDevice.fill', { title: 'Fill \"{text}\"', }],\n  ['AndroidDevice.tap', { title: 'Tap', }],\n  ['AndroidDevice.drag', { title: 'Drag', }],\n  ['AndroidDevice.fling', { title: 'Fling', }],\n  ['AndroidDevice.longTap', { title: 'Long tap', }],\n  ['AndroidDevice.pinchClose', { title: 'Pinch close', }],\n  ['AndroidDevice.pinchOpen', { title: 'Pinch open', }],\n  ['AndroidDevice.scroll', { title: 'Scroll', }],\n  ['AndroidDevice.swipe', { title: 'Swipe', }],\n  ['AndroidDevice.info', { internal: true, }],\n  ['AndroidDevice.screenshot', { title: 'Screenshot', }],\n  ['AndroidDevice.inputType', { title: 'Type', }],\n  ['AndroidDevice.inputPress', { title: 'Press', }],\n  ['AndroidDevice.inputTap', { title: 'Tap', }],\n  ['AndroidDevice.inputSwipe', { title: 'Swipe', }],\n  ['AndroidDevice.inputDrag', { title: 'Drag', }],\n  ['AndroidDevice.launchBrowser', { title: 'Launch browser', }],\n  ['AndroidDevice.open', { title: 'Open app', }],\n  ['AndroidDevice.shell', { internal: true, }],\n  ['AndroidDevice.installApk', { title: 'Install apk', }],\n  ['AndroidDevice.push', { title: 'Push', }],\n  ['AndroidDevice.connectToWebView', { internal: true, }],\n  ['AndroidDevice.close', { internal: true, }],\n  ['JsonPipe.send', { internal: true, }],\n  ['JsonPipe.close', { internal: true, }]\n]);\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { methodMetainfo } from './protocolMetainfo';\n\nexport function formatProtocolParam(params: Record<string, string> | undefined, name: string): string {\n  if (!params)\n    return '';\n  if (name === 'url') {\n    try {\n      const urlObject = new URL(params[name]);\n      if (urlObject.protocol === 'data:')\n        return urlObject.protocol;\n      if (urlObject.protocol === 'about:')\n        return params[name];\n      return urlObject.pathname + urlObject.search;\n    } catch (error) {\n      return params[name];\n    }\n  }\n  if (name === 'timeNumber') {\n    // eslint-disable-next-line no-restricted-globals\n    return new Date(params[name]).toString();\n  }\n  return deepParam(params, name);\n}\n\nfunction deepParam(params: Record<string, any>, name: string): string {\n  const tokens = name.split('.');\n  let current = params;\n  for (const token of tokens) {\n    if (typeof current !== 'object' || current === null)\n      return '';\n    current = current[token];\n  }\n  if (current === undefined)\n    return '';\n  return String(current);\n}\n\nexport function renderTitleForCall(metadata: { title?: string, type: string, method: string, params: Record<string, string> | undefined }) {\n  const titleFormat = metadata.title ?? methodMetainfo.get(metadata.type + '.' + metadata.method)?.title ?? metadata.method;\n  return titleFormat.replace(/\\{([^}]+)\\}/g, (_, p1) => {\n    return formatProtocolParam(metadata.params, p1);\n  });\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport { isString } from  './stringUtils';\n\nexport function isRegExp(obj: any): obj is RegExp {\n  return obj instanceof RegExp || Object.prototype.toString.call(obj) === '[object RegExp]';\n}\n\nexport function isObject(obj: any): obj is NonNullable<object> {\n  return typeof obj === 'object' && obj !== null;\n}\n\nexport function isError(obj: any): obj is Error {\n  return obj instanceof Error || (obj && Object.getPrototypeOf(obj)?.name === 'Error');\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Hopefully, this file is never used in injected sources,\n// because it does not use `builtins.performance`,\n// and can break when clock emulation is engaged.\n\n/* eslint-disable no-restricted-globals */\n\nlet _timeOrigin = performance.timeOrigin;\nlet _timeShift = 0;\n\nexport function setTimeOrigin(origin: number) {\n  _timeOrigin = origin;\n  _timeShift = performance.timeOrigin - origin;\n}\n\nexport function timeOrigin(): number {\n  return _timeOrigin;\n}\n\nexport function monotonicTime(): number {\n  return Math.floor((performance.now() + _timeShift) * 1000) / 1000;\n}\n\nexport const DEFAULT_PLAYWRIGHT_TIMEOUT = 30_000;\nexport const DEFAULT_PLAYWRIGHT_LAUNCH_TIMEOUT = 3 * 60 * 1000; // 3 minutes\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Hopefully, this file is never used in injected sources,\n// because it does not use `builtins.setTimeout` and similar,\n// and can break when clock emulation is engaged.\n\n/* eslint-disable no-restricted-globals */\n\nimport { monotonicTime } from './time';\n\nexport async function raceAgainstDeadline<T>(cb: () => Promise<T>, deadline: number): Promise<{ result: T, timedOut: false } | { timedOut: true }> {\n  let timer: NodeJS.Timeout | undefined;\n  return Promise.race([\n    cb().then(result => {\n      return { result, timedOut: false };\n    }),\n    new Promise<{ timedOut: true }>(resolve => {\n      const kMaxDeadline = 2147483647; // 2^31-1\n      const timeout = (deadline || kMaxDeadline) - monotonicTime();\n      timer = setTimeout(() => resolve({ timedOut: true }), timeout);\n    }),\n  ]).finally(() => {\n    clearTimeout(timer);\n  });\n}\n\nexport async function pollAgainstDeadline<T>(callback: () => Promise<{ continuePolling: boolean, result: T }>, deadline: number, pollIntervals: number[] = [100, 250, 500, 1000]): Promise<{ result?: T, timedOut: boolean }> {\n  const lastPollInterval = pollIntervals.pop() ?? 1000;\n  let lastResult: T|undefined;\n  const wrappedCallback = () => Promise.resolve().then(callback);\n  while (true) {\n    const time = monotonicTime();\n    if (deadline && time >= deadline)\n      break;\n    const received = await raceAgainstDeadline(wrappedCallback, deadline);\n    if (received.timedOut)\n      break;\n    lastResult = (received as any).result.result;\n    if (!(received as any).result.continuePolling)\n      return { result: lastResult, timedOut: false };\n    const interval = pollIntervals!.shift() ?? lastPollInterval;\n    if (deadline && deadline <= monotonicTime() + interval)\n      break;\n    await new Promise(x => setTimeout(x, interval));\n  }\n  return { timedOut: true, result: lastResult };\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isString } from './stringUtils';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions#escaping\nconst escapedChars = new Set(['$', '^', '+', '.', '*', '(', ')', '|', '\\\\', '?', '{', '}', '[', ']']);\n\nexport function globToRegexPattern(glob: string): string {\n  const tokens = ['^'];\n  let inGroup = false;\n  for (let i = 0; i < glob.length; ++i) {\n    const c = glob[i];\n    if (c === '\\\\' && i + 1 < glob.length) {\n      const char = glob[++i];\n      tokens.push(escapedChars.has(char) ? '\\\\' + char : char);\n      continue;\n    }\n    if (c === '*') {\n      const beforeDeep = glob[i - 1];\n      let starCount = 1;\n      while (glob[i + 1] === '*') {\n        starCount++;\n        i++;\n      }\n      const afterDeep = glob[i + 1];\n      const isDeep = starCount > 1 &&\n          (beforeDeep === '/' || beforeDeep === undefined) &&\n          (afterDeep === '/' || afterDeep === undefined);\n      if (isDeep) {\n        tokens.push('((?:[^/]*(?:\\/|$))*)');\n        i++;\n      } else {\n        tokens.push('([^/]*)');\n      }\n      continue;\n    }\n\n    switch (c) {\n      case '{':\n        inGroup = true;\n        tokens.push('(');\n        break;\n      case '}':\n        inGroup = false;\n        tokens.push(')');\n        break;\n      case ',':\n        if (inGroup) {\n          tokens.push('|');\n          break;\n        }\n        tokens.push('\\\\' + c);\n        break;\n      default:\n        tokens.push(escapedChars.has(c) ? '\\\\' + c : c);\n    }\n  }\n  tokens.push('$');\n  return tokens.join('');\n}\n\nfunction isRegExp(obj: any): obj is RegExp {\n  return obj instanceof RegExp || Object.prototype.toString.call(obj) === '[object RegExp]';\n}\n\nexport type URLMatch = string | RegExp | ((url: URL) => boolean);\n\nexport function urlMatchesEqual(match1: URLMatch, match2: URLMatch) {\n  if (isRegExp(match1) && isRegExp(match2))\n    return match1.source === match2.source && match1.flags === match2.flags;\n  return match1 === match2;\n}\n\nexport function urlMatches(baseURL: string | undefined, urlString: string, match: URLMatch | undefined, webSocketUrl?: boolean): boolean {\n  if (match === undefined || match === '')\n    return true;\n  if (isString(match))\n    match = new RegExp(resolveGlobToRegexPattern(baseURL, match, webSocketUrl));\n  if (isRegExp(match)) {\n    const r = match.test(urlString);\n    return r;\n  }\n  const url = parseURL(urlString);\n  if (!url)\n    return false;\n  if (typeof match !== 'function')\n    throw new Error('url parameter should be string, RegExp or function');\n  return match(url);\n}\n\nexport function resolveGlobToRegexPattern(baseURL: string | undefined, glob: string, webSocketUrl?: boolean): string {\n  if (webSocketUrl)\n    baseURL = toWebSocketBaseUrl(baseURL);\n  glob = resolveGlobBase(baseURL, glob);\n  return globToRegexPattern(glob);\n}\n\nfunction toWebSocketBaseUrl(baseURL: string | undefined) {\n  // Allow http(s) baseURL to match ws(s) urls.\n  if (baseURL && /^https?:\\/\\//.test(baseURL))\n    baseURL = baseURL.replace(/^http/, 'ws');\n  return baseURL;\n}\n\nfunction resolveGlobBase(baseURL: string | undefined, match: string): string {\n  if (!match.startsWith('*')) {\n    const tokenMap = new Map<string, string>();\n    function mapToken(original: string, replacement: string) {\n      if (original.length === 0)\n        return '';\n      tokenMap.set(replacement, original);\n      return replacement;\n    }\n    // Escaped `\\\\?` behaves the same as `?` in our glob patterns.\n    match = match.replaceAll(/\\\\\\\\\\?/g, '?');\n    // Glob symbols may be escaped in the URL and some of them such as ? affect resolution,\n    // so we replace them with safe components first.\n    const relativePath = match.split('/').map((token, index) => {\n      if (token === '.' || token === '..' || token === '')\n        return token;\n      // Handle special case of http*://, note that the new schema has to be\n      // a web schema so that slashes are properly inserted after domain.\n      if (index === 0 && token.endsWith(':'))\n        return mapToken(token, 'http:');\n      const questionIndex = token.indexOf('?');\n      if (questionIndex === -1)\n        return mapToken(token, `$_${index}_$`);\n      const newPrefix = mapToken(token.substring(0, questionIndex), `$_${index}_$`);\n      const newSuffix = mapToken(token.substring(questionIndex), `?$_${index}_$`);\n      return newPrefix + newSuffix;\n    }).join('/');\n    let resolved = constructURLBasedOnBaseURL(baseURL, relativePath);\n    for (const [token, original] of tokenMap)\n      resolved = resolved.replace(token, original);\n    match = resolved;\n  }\n  return match;\n}\n\nfunction parseURL(url: string): URL | null {\n  try {\n    return new URL(url);\n  } catch (e) {\n    return null;\n  }\n}\n\nexport function constructURLBasedOnBaseURL(baseURL: string | undefined, givenURL: string): string {\n  try {\n    return (new URL(givenURL, baseURL)).toString();\n  } catch (e) {\n    return givenURL;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function blendWithWhite(c: number, a: number): number {\n  return 255 + (c - 255) * a;\n}\n\nexport function rgb2gray(r: number, g: number, b: number): number {\n  // NOTE: this is the exact integer formula from SSIM.js.\n  // See https://github.com/obartra/ssim/blob/ca8e3c6a6ff5f4f2e232239e0c3d91806f3c97d5/src/matlab/rgb2gray.ts#L56\n  return (77 * r + 150 * g + 29 * b + 128) >> 8;\n}\n\n// Perceived color difference defined by CIE94.\n// See https://en.wikipedia.org/wiki/Color_difference#CIE94\n//\n// The result of 1.0 is a \"just-noticeable difference\".\n//\n// Other results interpretation (taken from http://zschuessler.github.io/DeltaE/learn/):\n//   < 1.0     Not perceptible by human eyes.\n//   1-2        Perceptible through close observation.\n//   2-10       Perceptible at a glance.\n//   11-49      Colors are more similar than opposite\n//   100        Colors are exact opposite\nexport function colorDeltaE94(rgb1: number[], rgb2: number[]) {\n  const [l1, a1, b1] = xyz2lab(srgb2xyz(rgb1));\n  const [l2, a2, b2] = xyz2lab(srgb2xyz(rgb2));\n  const deltaL = l1 - l2;\n  const deltaA = a1 - a2;\n  const deltaB = b1 - b2;\n  const c1 = Math.sqrt(a1 ** 2 + b1 ** 2);\n  const c2 = Math.sqrt(a2 ** 2 + b2 ** 2);\n  const deltaC = c1 - c2;\n  let deltaH = deltaA ** 2 + deltaB ** 2 - deltaC ** 2;\n  deltaH = deltaH < 0 ? 0 : Math.sqrt(deltaH);\n  // The k1, k2, kL, kC, kH values for \"graphic arts\" applications.\n  // See https://en.wikipedia.org/wiki/Color_difference#CIE94\n  const k1 = 0.045;\n  const k2 = 0.015;\n  const kL = 1;\n  const kC = 1;\n  const kH = 1;\n\n  const sC = 1.0 + k1 * c1;\n  const sH = 1.0 + k2 * c1;\n  const sL = 1;\n\n  return Math.sqrt((deltaL / sL / kL) ** 2 + (deltaC / sC / kC) ** 2 + (deltaH / sH / kH) ** 2);\n}\n\n// sRGB -> 1-normalized XYZ (i.e. Y ∈ [0, 1]) with D65 illuminant\n// See https://en.wikipedia.org/wiki/SRGB#From_sRGB_to_CIE_XYZ\nexport function srgb2xyz(rgb: number[]): number[] {\n  let r = rgb[0] / 255;\n  let g = rgb[1] / 255;\n  let b = rgb[2] / 255;\n  r = (r > 0.04045) ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n  g = (g > 0.04045) ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n  b = (b > 0.04045) ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;\n  return [\n    (r * 0.4124 + g * 0.3576 + b * 0.1805),\n    (r * 0.2126 + g * 0.7152 + b * 0.0722),\n    (r * 0.0193 + g * 0.1192 + b * 0.9505),\n  ];\n}\n\nconst sigma_pow2 = 6 * 6 / 29 / 29;\nconst sigma_pow3 = 6 * 6 * 6 / 29 / 29 / 29;\n\n// 1-normalized CIE XYZ with D65 to L*a*b*\n// See https://en.wikipedia.org/wiki/CIELAB_color_space#From_CIEXYZ_to_CIELAB\nexport function xyz2lab(xyz: number[]): number[] {\n  const x = xyz[0] / 0.950489;\n  const y = xyz[1];\n  const z = xyz[2] / 1.088840;\n\n  const fx = x > sigma_pow3 ? x ** (1 / 3) : x / 3 / sigma_pow2 + 4 / 29;\n  const fy = y > sigma_pow3 ? y ** (1 / 3) : y / 3 / sigma_pow2 + 4 / 29;\n  const fz = z > sigma_pow3 ? z ** (1 / 3) : z / 3 / sigma_pow2 + 4 / 29;\n\n  const l = 116 * fy - 16;\n  const a = 500 * (fx - fy);\n  const b = 200 * (fy - fz);\n\n  return [l, a, b];\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { blendWithWhite } from './colorUtils';\n\nexport type PaddingOptions = {\n  paddingSize?: number,\n  paddingColorOdd?: number[],\n  paddingColorEven?: number[],\n};\n\nexport class ImageChannel {\n  data: Uint8Array;\n  width: number;\n  height: number;\n\n  static intoRGB(width: number, height: number, data: Buffer, options: PaddingOptions = {}): ImageChannel[] {\n    const {\n      paddingSize = 0,\n      paddingColorOdd = [255, 0, 255],\n      paddingColorEven = [0, 255, 0],\n    } = options;\n    const newWidth = width + 2 * paddingSize;\n    const newHeight = height + 2 * paddingSize;\n    const r = new Uint8Array(newWidth * newHeight);\n    const g = new Uint8Array(newWidth * newHeight);\n    const b = new Uint8Array(newWidth * newHeight);\n    for (let y = 0; y < newHeight; ++y) {\n      for (let x = 0; x < newWidth; ++x) {\n        const index = y * newWidth + x;\n        if (y >= paddingSize && y < newHeight - paddingSize && x >= paddingSize && x < newWidth - paddingSize) {\n          const offset = ((y - paddingSize) * width + (x - paddingSize)) * 4;\n          const alpha = data[offset + 3] === 255 ? 1 : data[offset + 3] / 255;\n          r[index] = blendWithWhite(data[offset], alpha);\n          g[index] = blendWithWhite(data[offset + 1], alpha);\n          b[index] = blendWithWhite(data[offset + 2], alpha);\n        } else {\n          const color = (y + x) % 2 === 0 ? paddingColorEven : paddingColorOdd;\n          r[index] = color[0];\n          g[index] = color[1];\n          b[index] = color[2];\n        }\n      }\n    }\n    return [\n      new ImageChannel(newWidth, newHeight, r),\n      new ImageChannel(newWidth, newHeight, g),\n      new ImageChannel(newWidth, newHeight, b),\n    ];\n  }\n\n  constructor(width: number, height: number, data: Uint8Array) {\n    this.data = data;\n    this.width = width;\n    this.height = height;\n  }\n\n  get(x: number, y: number) {\n    return this.data[y * this.width + x];\n  }\n\n  boundXY(x: number, y: number) {\n    return [\n      Math.min(Math.max(x, 0), this.width - 1),\n      Math.min(Math.max(y, 0), this.height - 1),\n    ];\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ImageChannel } from './imageChannel';\n\nexport interface Stats {\n  c1: ImageChannel;\n  c2: ImageChannel;\n\n  // Compute mean value. See https://en.wikipedia.org/wiki/Mean\n  meanC1(x1: number, y1: number, x2: number, y2: number): number;\n  meanC2(x1: number, y1: number, x2: number, y2: number): number;\n  // Compute **population** (not sample) variance. See https://en.wikipedia.org/wiki/Variance\n  varianceC1(x1: number, y1: number, x2: number, y2: number): number;\n  varianceC2(x1: number, y1: number, x2: number, y2: number): number;\n  // Compute covariance. See https://en.wikipedia.org/wiki/Covariance\n  covariance(x1: number, y1: number, x2: number, y2: number): number;\n}\n\n// Image channel has a 8-bit depth.\nconst DYNAMIC_RANGE = 2 ** 8 - 1;\n\nexport function ssim(stats: Stats, x1: number, y1: number, x2: number, y2: number): number {\n  const mean1 = stats.meanC1(x1, y1, x2, y2);\n  const mean2 = stats.meanC2(x1, y1, x2, y2);\n  const var1 = stats.varianceC1(x1, y1, x2, y2);\n  const var2 = stats.varianceC2(x1, y1, x2, y2);\n  const cov = stats.covariance(x1, y1, x2, y2);\n  const c1 = (0.01 * DYNAMIC_RANGE) ** 2;\n  const c2 = (0.03 * DYNAMIC_RANGE) ** 2;\n  return (2 * mean1 * mean2 + c1) * (2 * cov + c2) / (mean1 ** 2 + mean2 ** 2 + c1) / (var1 + var2 + c2);\n}\n\nexport class FastStats implements Stats {\n  c1: ImageChannel;\n  c2: ImageChannel;\n\n  private _partialSumC1: number[];\n  private _partialSumC2: number[];\n  private _partialSumMult: number[];\n  private _partialSumSq1: number[];\n  private _partialSumSq2: number[];\n\n  constructor(c1: ImageChannel, c2: ImageChannel) {\n    this.c1 = c1;\n    this.c2 = c2;\n    const { width, height } = c1;\n\n    this._partialSumC1 = new Array(width * height);\n    this._partialSumC2 = new Array(width * height);\n    this._partialSumSq1 = new Array(width * height);\n    this._partialSumSq2 = new Array(width * height);\n    this._partialSumMult = new Array(width * height);\n\n    const recalc = (mx: number[], idx: number, initial: number, x: number, y: number) => {\n      mx[idx] = initial;\n      if (y > 0)\n        mx[idx] += mx[(y - 1) * width + x];\n      if (x > 0)\n        mx[idx] += mx[y * width + x - 1];\n      if (x > 0 && y > 0)\n        mx[idx] -= mx[(y - 1) * width + x - 1];\n    };\n\n    for (let y = 0; y < height; ++y) {\n      for (let x = 0; x < width; ++x) {\n        const idx = y * width + x;\n        recalc(this._partialSumC1, idx, this.c1.data[idx], x, y);\n        recalc(this._partialSumC2, idx, this.c2.data[idx], x, y);\n        recalc(this._partialSumSq1, idx, this.c1.data[idx] * this.c1.data[idx], x, y);\n        recalc(this._partialSumSq2, idx, this.c2.data[idx] * this.c2.data[idx], x, y);\n        recalc(this._partialSumMult, idx, this.c1.data[idx] * this.c2.data[idx], x, y);\n      }\n    }\n  }\n\n  _sum(partialSum: number[], x1: number, y1: number, x2: number, y2: number): number {\n    const width = this.c1.width;\n    let result = partialSum[y2 * width + x2];\n    if (y1 > 0)\n      result -= partialSum[(y1 - 1) * width + x2];\n    if (x1 > 0)\n      result -= partialSum[y2 * width + x1 - 1];\n    if (x1 > 0 && y1 > 0)\n      result += partialSum[(y1 - 1) * width + x1 - 1];\n    return result;\n  }\n\n  meanC1(x1: number, y1: number, x2: number, y2: number): number {\n    const N = (y2 - y1 + 1) * (x2 - x1 + 1);\n    return this._sum(this._partialSumC1, x1, y1, x2, y2) / N;\n  }\n\n  meanC2(x1: number, y1: number, x2: number, y2: number): number {\n    const N = (y2 - y1 + 1) * (x2 - x1 + 1);\n    return this._sum(this._partialSumC2, x1, y1, x2, y2) / N;\n  }\n\n  varianceC1(x1: number, y1: number, x2: number, y2: number): number {\n    const N = (y2 - y1 + 1) * (x2 - x1 + 1);\n    return (this._sum(this._partialSumSq1, x1, y1, x2, y2) - (this._sum(this._partialSumC1, x1, y1, x2, y2) ** 2) / N) / N;\n  }\n\n  varianceC2(x1: number, y1: number, x2: number, y2: number): number {\n    const N = (y2 - y1 + 1) * (x2 - x1 + 1);\n    return (this._sum(this._partialSumSq2, x1, y1, x2, y2) - (this._sum(this._partialSumC2, x1, y1, x2, y2) ** 2) / N) / N;\n  }\n\n  covariance(x1: number, y1: number, x2: number, y2: number): number {\n    const N = (y2 - y1 + 1) * (x2 - x1 + 1);\n    return (this._sum(this._partialSumMult, x1, y1, x2, y2) - this._sum(this._partialSumC1, x1, y1, x2, y2) * this._sum(this._partialSumC2, x1, y1, x2, y2) / N) / N;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { blendWithWhite, colorDeltaE94, rgb2gray } from './colorUtils';\nimport { ImageChannel } from './imageChannel';\nimport { FastStats, ssim } from './stats';\n\nconst SSIM_WINDOW_RADIUS = 15;\nconst VARIANCE_WINDOW_RADIUS = 1;\n\nfunction drawPixel(width: number, data: Buffer, x: number, y: number, r: number, g: number, b: number) {\n  const idx = (y * width + x) * 4;\n  data[idx + 0] = r;\n  data[idx + 1] = g;\n  data[idx + 2] = b;\n  data[idx + 3] = 255;\n}\n\ntype CompareOptions = {\n  maxColorDeltaE94?: number;\n};\n\nexport function compare(actual: Buffer, expected: Buffer, diff: Buffer|null, width: number, height: number, options: CompareOptions = {}) {\n  const {\n    maxColorDeltaE94 = 1.0,\n  } = options;\n\n  const paddingSize = Math.max(VARIANCE_WINDOW_RADIUS, SSIM_WINDOW_RADIUS);\n  const paddingColorEven = [255, 0, 255];\n  const paddingColorOdd = [0, 255, 0];\n  const [r1, g1, b1] = ImageChannel.intoRGB(width, height, expected, {\n    paddingSize,\n    paddingColorEven,\n    paddingColorOdd,\n  });\n  const [r2, g2, b2] = ImageChannel.intoRGB(width, height, actual, {\n    paddingSize,\n    paddingColorEven,\n    paddingColorOdd,\n  });\n\n  const noop = (x: number, y: number) => {};\n  const drawRedPixel = diff ? (x: number, y: number) => drawPixel(width, diff, x - paddingSize, y - paddingSize, 255, 0, 0) : noop;\n  const drawYellowPixel = diff ? (x: number, y: number) => drawPixel(width, diff, x - paddingSize, y - paddingSize, 255, 255, 0) : noop;\n  const drawGrayPixel = diff ? (x: number, y: number) => {\n    const gray = rgb2gray(r1.get(x, y), g1.get(x, y), b1.get(x, y));\n    const value = blendWithWhite(gray, 0.1);\n    drawPixel(width, diff, x - paddingSize, y - paddingSize, value, value, value);\n  } : noop;\n\n  let fastR, fastG, fastB;\n\n  let diffCount = 0;\n  for (let y = paddingSize; y < r1.height - paddingSize; ++y){\n    for (let x = paddingSize; x < r1.width - paddingSize; ++x) {\n      // Fast-path: equal pixels.\n      if (r1.get(x, y) === r2.get(x, y) && g1.get(x, y) === g2.get(x, y) && b1.get(x, y) === b2.get(x, y)) {\n        drawGrayPixel(x, y);\n        continue;\n      }\n\n      // Compare pixel colors using the dE94 color difference formulae.\n      // The dE94 is normalized so that the value of 1.0 is the \"just-noticeable-difference\".\n      // Color difference below 1.0 is not noticeable to a human eye, so we can disregard it.\n      // See https://en.wikipedia.org/wiki/Color_difference\n      const delta = colorDeltaE94(\n          [r1.get(x, y), g1.get(x, y), b1.get(x, y)],\n          [r2.get(x, y), g2.get(x, y), b2.get(x, y)]\n      );\n\n      if (delta <= maxColorDeltaE94) {\n        drawGrayPixel(x, y);\n        continue;\n      }\n\n      if (!fastR || !fastG || !fastB) {\n        fastR = new FastStats(r1, r2);\n        fastG = new FastStats(g1, g2);\n        fastB = new FastStats(b1, b2);\n      }\n      const [varX1, varY1] = r1.boundXY(x - VARIANCE_WINDOW_RADIUS, y - VARIANCE_WINDOW_RADIUS);\n      const [varX2, varY2] = r1.boundXY(x + VARIANCE_WINDOW_RADIUS, y + VARIANCE_WINDOW_RADIUS);\n      const var1 = fastR.varianceC1(varX1, varY1, varX2, varY2) + fastG.varianceC1(varX1, varY1, varX2, varY2) + fastB.varianceC1(varX1, varY1, varX2, varY2);\n      const var2 = fastR.varianceC2(varX1, varY1, varX2, varY2) + fastG.varianceC2(varX1, varY1, varX2, varY2) + fastB.varianceC2(varX1, varY1, varX2, varY2);\n      // if this pixel is a part of a flood fill of a 3x3 square of either of the images, then it cannot be\n      // anti-aliasing pixel so it must be a pixel difference.\n      if (var1 === 0 || var2 === 0) {\n        drawRedPixel(x, y);\n        ++diffCount;\n        continue;\n      }\n\n      const [ssimX1, ssimY1] = r1.boundXY(x - SSIM_WINDOW_RADIUS, y - SSIM_WINDOW_RADIUS);\n      const [ssimX2, ssimY2] = r1.boundXY(x + SSIM_WINDOW_RADIUS, y + SSIM_WINDOW_RADIUS);\n      const ssimRGB = (ssim(fastR, ssimX1, ssimY1, ssimX2, ssimY2) + ssim(fastG, ssimX1, ssimY1, ssimX2, ssimY2) + ssim(fastB, ssimX1, ssimY1, ssimX2, ssimY2)) / 3.0;\n      const isAntialiased = ssimRGB >= 0.99;\n      if (isAntialiased) {\n        drawYellowPixel(x, y);\n      } else {\n        drawRedPixel(x, y);\n        ++diffCount;\n      }\n    }\n  }\n\n  return diffCount;\n}\n","/**\n * \n * ISC License\n *\n * Copyright (c) 2019, Mapbox\n\n * Permission to use, copy, modify, and/or distribute this software for any purpose\n * with or without fee is hereby granted, provided that the above copyright notice\n * and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n * THIS SOFTWARE.\n */\n\n'use strict';\n\nmodule.exports = pixelmatch;\n\nconst defaultOptions = {\n    threshold: 0.1,         // matching threshold (0 to 1); smaller is more sensitive\n    includeAA: false,       // whether to skip anti-aliasing detection\n    alpha: 0.1,             // opacity of original image in diff output\n    aaColor: [255, 255, 0], // color of anti-aliased pixels in diff output\n    diffColor: [255, 0, 0], // color of different pixels in diff output\n    diffColorAlt: null,     // whether to detect dark on light differences between img1 and img2 and set an alternative color to differentiate between the two\n    diffMask: false         // draw the diff over a transparent background (a mask)\n};\n\nfunction pixelmatch(img1, img2, output, width, height, options) {\n\n    if (!isPixelData(img1) || !isPixelData(img2) || (output && !isPixelData(output)))\n        throw new Error('Image data: Uint8Array, Uint8ClampedArray or Buffer expected.');\n\n    if (img1.length !== img2.length || (output && output.length !== img1.length))\n        throw new Error('Image sizes do not match.');\n\n    if (img1.length !== width * height * 4) throw new Error('Image data size does not match width/height.');\n\n    options = Object.assign({}, defaultOptions, options);\n\n    // check if images are identical\n    const len = width * height;\n    const a32 = new Uint32Array(img1.buffer, img1.byteOffset, len);\n    const b32 = new Uint32Array(img2.buffer, img2.byteOffset, len);\n    let identical = true;\n\n    for (let i = 0; i < len; i++) {\n        if (a32[i] !== b32[i]) { identical = false; break; }\n    }\n    if (identical) { // fast path if identical\n        if (output && !options.diffMask) {\n            for (let i = 0; i < len; i++) drawGrayPixel(img1, 4 * i, options.alpha, output);\n        }\n        return 0;\n    }\n\n    // maximum acceptable square distance between two colors;\n    // 35215 is the maximum possible value for the YIQ difference metric\n    const maxDelta = 35215 * options.threshold * options.threshold;\n    let diff = 0;\n\n    // compare each pixel of one image against the other one\n    for (let y = 0; y < height; y++) {\n        for (let x = 0; x < width; x++) {\n\n            const pos = (y * width + x) * 4;\n\n            // squared YUV distance between colors at this pixel position, negative if the img2 pixel is darker\n            const delta = colorDelta(img1, img2, pos, pos);\n\n            // the color difference is above the threshold\n            if (Math.abs(delta) > maxDelta) {\n                // check it's a real rendering difference or just anti-aliasing\n                if (!options.includeAA && (antialiased(img1, x, y, width, height, img2) ||\n                                           antialiased(img2, x, y, width, height, img1))) {\n                    // one of the pixels is anti-aliasing; draw as yellow and do not count as difference\n                    // note that we do not include such pixels in a mask\n                    if (output && !options.diffMask) drawPixel(output, pos, ...options.aaColor);\n\n                } else {\n                    // found substantial difference not caused by anti-aliasing; draw it as such\n                    if (output) {\n                        drawPixel(output, pos, ...(delta < 0 && options.diffColorAlt || options.diffColor));\n                    }\n                    diff++;\n                }\n\n            } else if (output) {\n                // pixels are similar; draw background as grayscale image blended with white\n                if (!options.diffMask) drawGrayPixel(img1, pos, options.alpha, output);\n            }\n        }\n    }\n\n    // return the number of different pixels\n    return diff;\n}\n\nfunction isPixelData(arr) {\n    // work around instanceof Uint8Array not working properly in some Jest environments\n    return ArrayBuffer.isView(arr) && arr.constructor.BYTES_PER_ELEMENT === 1;\n}\n\n// check if a pixel is likely a part of anti-aliasing;\n// based on \"Anti-aliased Pixel and Intensity Slope Detector\" paper by V. Vysniauskas, 2009\n\nfunction antialiased(img, x1, y1, width, height, img2) {\n    const x0 = Math.max(x1 - 1, 0);\n    const y0 = Math.max(y1 - 1, 0);\n    const x2 = Math.min(x1 + 1, width - 1);\n    const y2 = Math.min(y1 + 1, height - 1);\n    const pos = (y1 * width + x1) * 4;\n    let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;\n    let min = 0;\n    let max = 0;\n    let minX, minY, maxX, maxY;\n\n    // go through 8 adjacent pixels\n    for (let x = x0; x <= x2; x++) {\n        for (let y = y0; y <= y2; y++) {\n            if (x === x1 && y === y1) continue;\n\n            // brightness delta between the center pixel and adjacent one\n            const delta = colorDelta(img, img, pos, (y * width + x) * 4, true);\n\n            // count the number of equal, darker and brighter adjacent pixels\n            if (delta === 0) {\n                zeroes++;\n                // if found more than 2 equal siblings, it's definitely not anti-aliasing\n                if (zeroes > 2) return false;\n\n            // remember the darkest pixel\n            } else if (delta < min) {\n                min = delta;\n                minX = x;\n                minY = y;\n\n            // remember the brightest pixel\n            } else if (delta > max) {\n                max = delta;\n                maxX = x;\n                maxY = y;\n            }\n        }\n    }\n\n    // if there are no both darker and brighter pixels among siblings, it's not anti-aliasing\n    if (min === 0 || max === 0) return false;\n\n    // if either the darkest or the brightest pixel has 3+ equal siblings in both images\n    // (definitely not anti-aliased), this pixel is anti-aliased\n    return (hasManySiblings(img, minX, minY, width, height) && hasManySiblings(img2, minX, minY, width, height)) ||\n           (hasManySiblings(img, maxX, maxY, width, height) && hasManySiblings(img2, maxX, maxY, width, height));\n}\n\n// check if a pixel has 3+ adjacent pixels of the same color.\nfunction hasManySiblings(img, x1, y1, width, height) {\n    const x0 = Math.max(x1 - 1, 0);\n    const y0 = Math.max(y1 - 1, 0);\n    const x2 = Math.min(x1 + 1, width - 1);\n    const y2 = Math.min(y1 + 1, height - 1);\n    const pos = (y1 * width + x1) * 4;\n    let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;\n\n    // go through 8 adjacent pixels\n    for (let x = x0; x <= x2; x++) {\n        for (let y = y0; y <= y2; y++) {\n            if (x === x1 && y === y1) continue;\n\n            const pos2 = (y * width + x) * 4;\n            if (img[pos] === img[pos2] &&\n                img[pos + 1] === img[pos2 + 1] &&\n                img[pos + 2] === img[pos2 + 2] &&\n                img[pos + 3] === img[pos2 + 3]) zeroes++;\n\n            if (zeroes > 2) return true;\n        }\n    }\n\n    return false;\n}\n\n// calculate color difference according to the paper \"Measuring perceived color difference\n// using YIQ NTSC transmission color space in mobile applications\" by Y. Kotsarenko and F. Ramos\n\nfunction colorDelta(img1, img2, k, m, yOnly) {\n    let r1 = img1[k + 0];\n    let g1 = img1[k + 1];\n    let b1 = img1[k + 2];\n    let a1 = img1[k + 3];\n\n    let r2 = img2[m + 0];\n    let g2 = img2[m + 1];\n    let b2 = img2[m + 2];\n    let a2 = img2[m + 3];\n\n    if (a1 === a2 && r1 === r2 && g1 === g2 && b1 === b2) return 0;\n\n    if (a1 < 255) {\n        a1 /= 255;\n        r1 = blend(r1, a1);\n        g1 = blend(g1, a1);\n        b1 = blend(b1, a1);\n    }\n\n    if (a2 < 255) {\n        a2 /= 255;\n        r2 = blend(r2, a2);\n        g2 = blend(g2, a2);\n        b2 = blend(b2, a2);\n    }\n\n    const y1 = rgb2y(r1, g1, b1);\n    const y2 = rgb2y(r2, g2, b2);\n    const y = y1 - y2;\n\n    if (yOnly) return y; // brightness difference only\n\n    const i = rgb2i(r1, g1, b1) - rgb2i(r2, g2, b2);\n    const q = rgb2q(r1, g1, b1) - rgb2q(r2, g2, b2);\n\n    const delta = 0.5053 * y * y + 0.299 * i * i + 0.1957 * q * q;\n\n    // encode whether the pixel lightens or darkens in the sign\n    return y1 > y2 ? -delta : delta;\n}\n\nfunction rgb2y(r, g, b) { return r * 0.29889531 + g * 0.58662247 + b * 0.11448223; }\nfunction rgb2i(r, g, b) { return r * 0.59597799 - g * 0.27417610 - b * 0.32180189; }\nfunction rgb2q(r, g, b) { return r * 0.21147017 - g * 0.52261711 + b * 0.31114694; }\n\n// blend semi-transparent color with white\nfunction blend(c, a) {\n    return 255 + (c - 255) * a;\n}\n\nfunction drawPixel(output, pos, r, g, b) {\n    output[pos + 0] = r;\n    output[pos + 1] = g;\n    output[pos + 2] = b;\n    output[pos + 3] = 255;\n}\n\nfunction drawGrayPixel(img, i, alpha, output) {\n    const r = img[i + 0];\n    const g = img[i + 1];\n    const b = img[i + 2];\n    const val = blend(rgb2y(r, g, b), alpha * img[i + 3] / 255);\n    drawPixel(output, i, val, val, val);\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { compare } from './image_tools/compare';\n// @ts-ignore\nimport pixelmatch from '../../third_party/pixelmatch';\nimport { jpegjs } from '../../utilsBundle';\nimport { colors, diff } from '../../utilsBundle';\nimport { PNG } from '../../utilsBundle';\n\nexport type ImageComparatorOptions = { threshold?: number, maxDiffPixels?: number, maxDiffPixelRatio?: number, comparator?: string };\nexport type ComparatorResult = { diff?: Buffer; errorMessage: string; } | null;\nexport type Comparator = (actualBuffer: Buffer | string, expectedBuffer: Buffer, options?: any) => ComparatorResult;\n\nexport function getComparator(mimeType: string): Comparator {\n  if (mimeType === 'image/png')\n    return compareImages.bind(null, 'image/png');\n  if (mimeType === 'image/jpeg')\n    return compareImages.bind(null, 'image/jpeg');\n  if (mimeType === 'text/plain')\n    return compareText;\n  return compareBuffersOrStrings;\n}\n\nconst JPEG_JS_MAX_BUFFER_SIZE_IN_MB = 5 * 1024; // ~5 GB\n\nexport function compareBuffersOrStrings(actualBuffer: Buffer | string, expectedBuffer: Buffer): ComparatorResult {\n  if (typeof actualBuffer === 'string')\n    return compareText(actualBuffer, expectedBuffer);\n  if (!actualBuffer || !(actualBuffer instanceof Buffer))\n    return { errorMessage: 'Actual result should be a Buffer or a string.' };\n  if (Buffer.compare(actualBuffer, expectedBuffer))\n    return { errorMessage: 'Buffers differ' };\n  return null;\n}\n\ntype ImageData = { width: number, height: number, data: Buffer };\n\nfunction compareImages(mimeType: string, actualBuffer: Buffer | string, expectedBuffer: Buffer, options: ImageComparatorOptions = {}): ComparatorResult {\n  if (!actualBuffer || !(actualBuffer instanceof Buffer))\n    return { errorMessage: 'Actual result should be a Buffer.' };\n  validateBuffer(expectedBuffer, mimeType);\n\n  let actual: ImageData = mimeType === 'image/png' ? PNG.sync.read(actualBuffer) : jpegjs.decode(actualBuffer, { maxMemoryUsageInMB: JPEG_JS_MAX_BUFFER_SIZE_IN_MB });\n  let expected: ImageData = mimeType === 'image/png' ? PNG.sync.read(expectedBuffer) : jpegjs.decode(expectedBuffer, { maxMemoryUsageInMB: JPEG_JS_MAX_BUFFER_SIZE_IN_MB });\n  const size = { width: Math.max(expected.width, actual.width), height: Math.max(expected.height, actual.height) };\n  let sizesMismatchError = '';\n  if (expected.width !== actual.width || expected.height !== actual.height) {\n    sizesMismatchError = `Expected an image ${expected.width}px by ${expected.height}px, received ${actual.width}px by ${actual.height}px. `;\n    actual = resizeImage(actual, size);\n    expected = resizeImage(expected, size);\n  }\n  const diff = new PNG({ width: size.width, height: size.height });\n  let count;\n  if (options.comparator === 'ssim-cie94') {\n    count = compare(expected.data, actual.data, diff.data, size.width, size.height, {\n      // All ΔE* formulae are originally designed to have the difference of 1.0 stand for a \"just noticeable difference\" (JND).\n      // See https://en.wikipedia.org/wiki/Color_difference#CIELAB_%CE%94E*\n      maxColorDeltaE94: 1.0,\n    });\n  } else if ((options.comparator ?? 'pixelmatch') === 'pixelmatch') {\n    count = pixelmatch(expected.data, actual.data, diff.data, size.width, size.height, {\n      threshold: options.threshold ?? 0.2,\n    });\n  } else {\n    throw new Error(`Configuration specifies unknown comparator \"${options.comparator}\"`);\n  }\n\n  const maxDiffPixels1 = options.maxDiffPixels;\n  const maxDiffPixels2 = options.maxDiffPixelRatio !== undefined ? expected.width * expected.height * options.maxDiffPixelRatio : undefined;\n  let maxDiffPixels;\n  if (maxDiffPixels1 !== undefined && maxDiffPixels2 !== undefined)\n    maxDiffPixels = Math.min(maxDiffPixels1, maxDiffPixels2);\n  else\n    maxDiffPixels = maxDiffPixels1 ?? maxDiffPixels2 ?? 0;\n  const ratio = Math.ceil(count / (expected.width * expected.height) * 100) / 100;\n  const pixelsMismatchError = count > maxDiffPixels ? `${count} pixels (ratio ${ratio.toFixed(2)} of all image pixels) are different.` : '';\n  if (pixelsMismatchError || sizesMismatchError)\n    return { errorMessage: sizesMismatchError + pixelsMismatchError, diff: PNG.sync.write(diff) };\n  return null;\n}\n\nfunction validateBuffer(buffer: Buffer, mimeType: string): void {\n  if (mimeType === 'image/png') {\n    const pngMagicNumber = [137, 80, 78, 71, 13, 10, 26, 10];\n    if (buffer.length < pngMagicNumber.length || !pngMagicNumber.every((byte, index) => buffer[index] === byte))\n      throw new Error('could not decode image as PNG.');\n  } else if (mimeType === 'image/jpeg') {\n    const jpegMagicNumber = [255, 216];\n    if (buffer.length < jpegMagicNumber.length || !jpegMagicNumber.every((byte, index) => buffer[index] === byte))\n      throw new Error('could not decode image as JPEG.');\n  }\n}\n\nfunction compareText(actual: Buffer | string, expectedBuffer: Buffer): ComparatorResult {\n  if (typeof actual !== 'string')\n    return { errorMessage: 'Actual result should be a string' };\n  let expected = expectedBuffer.toString('utf-8');\n  if (expected === actual)\n    return null;\n  // Eliminate '\\\\ No newline at end of file'\n  if (!actual.endsWith('\\n'))\n    actual += '\\n';\n  if (!expected.endsWith('\\n'))\n    expected += '\\n';\n\n  const lines = diff.createPatch('file', expected, actual, undefined, undefined, { context: 5 }).split('\\n');\n  const coloredLines = lines.slice(4).map(line => {\n    if (line.startsWith('-'))\n      return colors.red(line);\n    if (line.startsWith('+'))\n      return colors.green(line);\n    if (line.startsWith('@@'))\n      return colors.dim(line);\n    return line;\n  });\n  const errorMessage = coloredLines.join('\\n');\n  return { errorMessage  };\n}\n\nfunction resizeImage(image: ImageData, size: { width: number, height: number }): ImageData {\n  if (image.width === size.width && image.height === size.height)\n    return image;\n  const buffer = new Uint8Array(size.width * size.height * 4);\n  for (let y = 0; y < size.height; y++) {\n    for (let x = 0; x < size.width; x++) {\n      const to = (y * size.width + x) * 4;\n      if (y < image.height && x < image.width) {\n        const from = (y * image.width + x) * 4;\n        buffer[to] = image.data[from];\n        buffer[to + 1] = image.data[from + 1];\n        buffer[to + 2] = image.data[from + 2];\n        buffer[to + 3] = image.data[from + 3];\n      } else {\n        buffer[to] = 0;\n        buffer[to + 1] = 0;\n        buffer[to + 2] = 0;\n        buffer[to + 3] = 0;\n      }\n    }\n  }\n  return { data: Buffer.from(buffer), width: size.width, height: size.height };\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport crypto from 'crypto';\n\nimport { assert } from '../../utils/isomorphic/assert';\n\nexport function createGuid(): string {\n  return crypto.randomBytes(16).toString('hex');\n}\n\nexport function calculateSha1(buffer: Buffer | string): string {\n  const hash = crypto.createHash('sha1');\n  hash.update(buffer);\n  return hash.digest('hex');\n}\n\n// Variable-length quantity encoding aka. base-128 encoding\nfunction encodeBase128(value: number): Buffer {\n  const bytes = [];\n  do {\n    let byte = value & 0x7f;\n    value >>>= 7;\n    if (bytes.length > 0)\n      byte |= 0x80;\n    bytes.push(byte);\n  } while (value > 0);\n  return Buffer.from(bytes.reverse());\n}\n\n// ASN1/DER Speficiation:   https://www.itu.int/rec/T-REC-X.680-X.693-202102-I/en\nclass DER {\n  static encodeSequence(data: Buffer[]): Buffer {\n    return this._encode(0x30, Buffer.concat(data));\n  }\n  static encodeInteger(data: number): Buffer {\n    assert(data >= -128 && data <= 127);\n    return this._encode(0x02, Buffer.from([data]));\n  }\n  static encodeObjectIdentifier(oid: string): Buffer {\n    const parts = oid.split('.').map(v => Number(v));\n    // Encode the second part, which could be large, using base-128 encoding if necessary\n    const output = [encodeBase128(40 * parts[0] + parts[1])];\n\n    for (let i = 2; i < parts.length; i++)\n      output.push(encodeBase128(parts[i]));\n\n\n    return this._encode(0x06, Buffer.concat(output));\n  }\n  static encodeNull(): Buffer {\n    return Buffer.from([0x05, 0x00]);\n  }\n  static encodeSet(data: Buffer[]): Buffer {\n    assert(data.length === 1, 'Only one item in the set is supported. We\\'d need to sort the data to support more.');\n    // We expect the data to be already sorted.\n    return this._encode(0x31, Buffer.concat(data));\n  }\n  static encodeExplicitContextDependent(tag: number, data: Buffer): Buffer {\n    return this._encode(0xa0 + tag, data);\n  }\n  static encodePrintableString(data: string): Buffer {\n    return this._encode(0x13, Buffer.from(data));\n  }\n  static encodeBitString(data: Buffer): Buffer {\n    // The first byte of the content is the number of unused bits at the end\n    const unusedBits = 0; // Assuming all bits are used\n    const content = Buffer.concat([Buffer.from([unusedBits]), data]);\n    return this._encode(0x03, content);\n  }\n  static encodeDate(date: Date): Buffer {\n    const year = date.getUTCFullYear();\n    const isGeneralizedTime = year >= 2050;\n    const parts = [\n      isGeneralizedTime ? year.toString() : year.toString().slice(-2),\n      (date.getUTCMonth() + 1).toString().padStart(2, '0'),\n      date.getUTCDate().toString().padStart(2, '0'),\n      date.getUTCHours().toString().padStart(2, '0'),\n      date.getUTCMinutes().toString().padStart(2, '0'),\n      date.getUTCSeconds().toString().padStart(2, '0')\n    ];\n    const encodedDate = parts.join('') + 'Z';\n    const tag = isGeneralizedTime ? 0x18 : 0x17; // 0x18 for GeneralizedTime, 0x17 for UTCTime\n    return this._encode(tag, Buffer.from(encodedDate));\n  }\n  private static _encode(tag: number, data: Buffer): Buffer {\n    const lengthBytes = this._encodeLength(data.length);\n    return Buffer.concat([Buffer.from([tag]), lengthBytes, data]);\n  }\n  private static _encodeLength(length: number): Buffer {\n    if (length < 128) {\n      return Buffer.from([length]);\n    } else {\n      const lengthBytes = [];\n      while (length > 0) {\n        lengthBytes.unshift(length & 0xFF);\n        length >>= 8;\n      }\n      return Buffer.from([0x80 | lengthBytes.length, ...lengthBytes]);\n    }\n  }\n}\n\n// X.509 Specification: https://datatracker.ietf.org/doc/html/rfc2459#section-4.1\nexport function generateSelfSignedCertificate() {\n  const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 2048 });\n  const publicKeyDer = publicKey.export({ type: 'pkcs1', format: 'der' });\n\n  const oneYearInMilliseconds = 365 * 24 * 60 * 60 * 1_000;\n  const notBefore = new Date(new Date().getTime() - oneYearInMilliseconds);\n  const notAfter = new Date(new Date().getTime() + oneYearInMilliseconds);\n\n  // List of fields / structure: https://datatracker.ietf.org/doc/html/rfc2459#section-4.1\n  const tbsCertificate = DER.encodeSequence([\n    DER.encodeExplicitContextDependent(0, DER.encodeInteger(1)), // version\n    DER.encodeInteger(1), // serialNumber\n    DER.encodeSequence([\n      DER.encodeObjectIdentifier('1.2.840.113549.1.1.11'), // sha256WithRSAEncryption PKCS #1\n      DER.encodeNull()\n    ]), // signature\n    DER.encodeSequence([\n      DER.encodeSet([\n        DER.encodeSequence([\n          DER.encodeObjectIdentifier('2.5.4.3'), // commonName X.520 DN component\n          DER.encodePrintableString('localhost')\n        ]),\n      ]),\n      DER.encodeSet([\n        DER.encodeSequence([\n          DER.encodeObjectIdentifier('2.5.4.10'), // organizationName X.520 DN component\n          DER.encodePrintableString('Playwright Client Certificate Support')\n        ])\n      ])\n    ]), // issuer\n    DER.encodeSequence([\n      DER.encodeDate(notBefore), // notBefore\n      DER.encodeDate(notAfter), // notAfter\n    ]), // validity\n    DER.encodeSequence([\n      DER.encodeSet([\n        DER.encodeSequence([\n          DER.encodeObjectIdentifier('2.5.4.3'), // commonName X.520 DN component\n          DER.encodePrintableString('localhost')\n        ]),\n      ]),\n      DER.encodeSet([\n        DER.encodeSequence([\n          DER.encodeObjectIdentifier('2.5.4.10'), // organizationName X.520 DN component\n          DER.encodePrintableString('Playwright Client Certificate Support')\n        ])\n      ])\n    ]), // subject\n    DER.encodeSequence([\n      DER.encodeSequence([\n        DER.encodeObjectIdentifier('1.2.840.113549.1.1.1'), // rsaEncryption PKCS #1\n        DER.encodeNull()\n      ]),\n      DER.encodeBitString(publicKeyDer)\n    ]), // SubjectPublicKeyInfo\n  ]);\n\n  const signature = crypto.sign('sha256', tbsCertificate, privateKey);\n\n  const certificate = DER.encodeSequence([\n    tbsCertificate,\n    DER.encodeSequence([\n      DER.encodeObjectIdentifier('1.2.840.113549.1.1.11'), // sha256WithRSAEncryption PKCS #1\n      DER.encodeNull()\n    ]),\n    DER.encodeBitString(signature)\n  ]);\n\n  const certPem = [\n    '-----BEGIN CERTIFICATE-----',\n    // Split the base64 string into lines of 64 characters\n    certificate.toString('base64').match(/.{1,64}/g)!.join('\\n'),\n    '-----END CERTIFICATE-----'\n  ].join('\\n');\n\n  return {\n    cert: certPem,\n    key: privateKey.export({ type: 'pkcs1', format: 'pem' }),\n  };\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function getFromENV(name: string): string | undefined {\n  let value = process.env[name];\n  value = value === undefined ? process.env[`npm_config_${name.toLowerCase()}`] : value;\n  value = value === undefined ?  process.env[`npm_package_config_${name.toLowerCase()}`] : value;\n  return value;\n}\n\nexport function getAsBooleanFromENV(name: string, defaultValue?: boolean | undefined): boolean {\n  const value = getFromENV(name);\n  if (value === 'false' || value === '0')\n    return false;\n  if (value)\n    return true;\n  return !!defaultValue;\n}\n\nexport function getPackageManager() {\n  const env = process.env.npm_config_user_agent || '';\n  if (env.includes('yarn'))\n    return 'yarn';\n  if (env.includes('pnpm'))\n    return 'pnpm';\n  return 'npm';\n}\n\nexport function getPackageManagerExecCommand() {\n  const packageManager = getPackageManager();\n  if (packageManager === 'yarn')\n    return 'yarn';\n  if (packageManager === 'pnpm')\n    return 'pnpm exec';\n  return 'npx';\n}\n\nexport function isLikelyNpxGlobal() {\n  return process.argv.length >= 2 && process.argv[1].includes('_npx');\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getFromENV, getAsBooleanFromENV } from './env';\n\nconst _debugMode = getFromENV('PWDEBUG') || '';\n\nexport function debugMode() {\n  if (_debugMode === 'console')\n    return 'console';\n  if (_debugMode === '0' || _debugMode === 'false')\n    return '';\n  return _debugMode ? 'inspector' : '';\n}\n\nlet _isUnderTest = getAsBooleanFromENV('PWTEST_UNDER_TEST');\nexport function setUnderTest(): void {\n  _isUnderTest = true;\n}\n\nexport function isUnderTest(): boolean {\n  return _isUnderTest;\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { EventEmitter } from 'events';\n\nexport type RegisteredListener = {\n  emitter: EventEmitter;\n  eventName: (string | symbol);\n  handler: (...args: any[]) => void;\n};\n\nclass EventsHelper {\n  static addEventListener(\n    emitter: EventEmitter,\n    eventName: (string | symbol),\n    handler: (...args: any[]) => void): RegisteredListener {\n    emitter.on(eventName, handler);\n    return { emitter, eventName, handler };\n  }\n\n  static removeEventListeners(listeners: Array<{\n      emitter: EventEmitter;\n      eventName: (string | symbol);\n      handler: (...args: any[]) => void;\n    }>) {\n    for (const listener of listeners)\n      listener.emitter.removeListener(listener.eventName, listener.handler);\n    listeners.splice(0, listeners.length);\n  }\n}\n\nexport const eventsHelper = EventsHelper;\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isRegExp, isString } from '../../utils/isomorphic/rtti';\n\nimport type { ExpectedTextValue } from '@protocol/channels';\n\nexport function serializeExpectedTextValues(items: (string | RegExp)[], options: { matchSubstring?: boolean, normalizeWhiteSpace?: boolean, ignoreCase?: boolean } = {}): ExpectedTextValue[] {\n  return items.map(i => ({\n    string: isString(i) ? i : undefined,\n    regexSource: isRegExp(i) ? i.source : undefined,\n    regexFlags: isRegExp(i) ? i.flags : undefined,\n    matchSubstring: options.matchSubstring,\n    ignoreCase: options.ignoreCase,\n    normalizeWhiteSpace: options.normalizeWhiteSpace,\n  }));\n}\n","exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream)\n\nexports.writableStream = isFunction(global.WritableStream)\n\nexports.abortController = isFunction(global.AbortController)\n\n// The xhr request to example.com may violate some restrictive CSP configurations,\n// so if we're running in a browser that supports `fetch`, avoid calling getXHR()\n// and assume support for certain features below.\nvar xhr\nfunction getXHR () {\n\t// Cache the xhr value\n\tif (xhr !== undefined) return xhr\n\n\tif (global.XMLHttpRequest) {\n\t\txhr = new global.XMLHttpRequest()\n\t\t// If XDomainRequest is available (ie only, where xhr might not work\n\t\t// cross domain), use the page location. Otherwise use example.com\n\t\t// Note: this doesn't actually make an http request.\n\t\ttry {\n\t\t\txhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com')\n\t\t} catch(e) {\n\t\t\txhr = null\n\t\t}\n\t} else {\n\t\t// Service workers don't have XHR\n\t\txhr = null\n\t}\n\treturn xhr\n}\n\nfunction checkTypeSupport (type) {\n\tvar xhr = getXHR()\n\tif (!xhr) return false\n\ttry {\n\t\txhr.responseType = type\n\t\treturn xhr.responseType === type\n\t} catch (e) {}\n\treturn false\n}\n\n// If fetch is supported, then arraybuffer will be supported too. Skip calling\n// checkTypeSupport(), since that calls getXHR().\nexports.arraybuffer = exports.fetch || checkTypeSupport('arraybuffer')\n\n// These next two tests unavoidably show warnings in Chrome. Since fetch will always\n// be used if it's available, just return false for these to avoid the warnings.\nexports.msstream = !exports.fetch && checkTypeSupport('ms-stream')\nexports.mozchunkedarraybuffer = !exports.fetch && checkTypeSupport('moz-chunked-arraybuffer')\n\n// If fetch is supported, then overrideMimeType will be supported too. Skip calling\n// getXHR().\nexports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false)\n\nfunction isFunction (value) {\n\treturn typeof value === 'function'\n}\n\nxhr = null // Help gc\n","module.exports = require('events').EventEmitter;\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var entry = {\n        data: v,\n        next: this.head\n      };\n      if (this.length === 0) this.tail = entry;\n      this.head = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, i);\n        i += p.data.length;\n        p = p.next;\n      }\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes or characters from the buffered data.\n  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();","'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n      if (state.autoDestroy) {\n        // In case of duplex streams we need a way to detect\n        // if the readable side is ready for autoDestroy as well\n        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\n    stream.removeListener('complete', onfinish);\n    stream.removeListener('abort', onclose);\n    stream.removeListener('request', onrequest);\n    if (stream.req) stream.req.removeListener('finish', onfinish);\n    stream.removeListener('end', onlegacyfinish);\n    stream.removeListener('close', onlegacyfinish);\n    stream.removeListener('finish', onfinish);\n    stream.removeListener('end', onend);\n    stream.removeListener('error', onerror);\n    stream.removeListener('close', onclose);\n  };\n}\nmodule.exports = eos;","'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;","module.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n      } else if (state.destroyed) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    state.awaitDrain = 0;\n    stream.emit('data', chunk);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var decoder = new StringDecoder(enc);\n  this._readableState.decoder = decoder;\n  // If setEncoding(null), decoder.encoding equals utf8\n  this._readableState.encoding = this._readableState.decoder.encoding;\n\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n  if (state.sync) {\n    // if we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call\n    emitReadable(stream);\n  } else {\n    // emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false;\n    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  debug('emitReadable', state.needReadable, state.emittedReadable);\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    process.nextTick(emitReadable_, stream);\n  }\n}\nfunction emitReadable_(stream) {\n  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (state.length || state.ended)) {\n    stream.emit('readable');\n    state.emittedReadable = false;\n  }\n\n  // The stream needs another readable event if\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(maybeReadMore_, stream, state);\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var len = state.length;\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n  var state = this._readableState;\n  if (ev === 'data') {\n    // update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0;\n\n    // Try start flowing on next tick if stream isn't explicitly paused\n    if (state.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.flowing = false;\n      state.emittedReadable = false;\n      debug('on readable', state.length, state.reading);\n      if (state.length) {\n        emitReadable(this);\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this);\n      }\n    }\n  }\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n  var res = Stream.prototype.removeListener.call(this, ev, fn);\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nfunction updateReadableListening(self) {\n  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\n    // flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true;\n\n    // crude way to check if we should resume\n  } else if (self.listenerCount('data') > 0) {\n    self.resume();\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    // we flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume()\n    state.flowing = !state.readableListening;\n    resume(this, state);\n  }\n  state.paused = false;\n  return this;\n};\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(resume_, stream, state);\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading);\n  if (!state.reading) {\n    stream.read(0);\n  }\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (this._readableState.flowing !== false) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  this._readableState.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = state.buffer.consume(n, state.decoder);\n  }\n  return ret;\n}\nfunction endReadable(stream) {\n  var state = stream._readableState;\n  debug('endReadable', state.endEmitted);\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(endReadableNT, state, stream);\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length);\n\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well\n      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","var capability = require('./capability')\nvar inherits = require('inherits')\nvar stream = require('readable-stream')\n\nvar rStates = exports.readyStates = {\n\tUNSENT: 0,\n\tOPENED: 1,\n\tHEADERS_RECEIVED: 2,\n\tLOADING: 3,\n\tDONE: 4\n}\n\nvar IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, resetTimers) {\n\tvar self = this\n\tstream.Readable.call(self)\n\n\tself._mode = mode\n\tself.headers = {}\n\tself.rawHeaders = []\n\tself.trailers = {}\n\tself.rawTrailers = []\n\n\t// Fake the 'close' event, but only once 'end' fires\n\tself.on('end', function () {\n\t\t// The nextTick is necessary to prevent the 'request' module from causing an infinite loop\n\t\tprocess.nextTick(function () {\n\t\t\tself.emit('close')\n\t\t})\n\t})\n\n\tif (mode === 'fetch') {\n\t\tself._fetchResponse = response\n\n\t\tself.url = response.url\n\t\tself.statusCode = response.status\n\t\tself.statusMessage = response.statusText\n\t\t\n\t\tresponse.headers.forEach(function (header, key){\n\t\t\tself.headers[key.toLowerCase()] = header\n\t\t\tself.rawHeaders.push(key, header)\n\t\t})\n\n\t\tif (capability.writableStream) {\n\t\t\tvar writable = new WritableStream({\n\t\t\t\twrite: function (chunk) {\n\t\t\t\t\tresetTimers(false)\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tif (self._destroyed) {\n\t\t\t\t\t\t\treject()\n\t\t\t\t\t\t} else if(self.push(Buffer.from(chunk))) {\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself._resumeFetch = resolve\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tclose: function () {\n\t\t\t\t\tresetTimers(true)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.push(null)\n\t\t\t\t},\n\t\t\t\tabort: function (err) {\n\t\t\t\t\tresetTimers(true)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttry {\n\t\t\t\tresponse.body.pipeTo(writable).catch(function (err) {\n\t\t\t\t\tresetTimers(true)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t} catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this\n\t\t}\n\t\t// fallback for when writableStream or pipeTo aren't available\n\t\tvar reader = response.body.getReader()\n\t\tfunction read () {\n\t\t\treader.read().then(function (result) {\n\t\t\t\tif (self._destroyed)\n\t\t\t\t\treturn\n\t\t\t\tresetTimers(result.done)\n\t\t\t\tif (result.done) {\n\t\t\t\t\tself.push(null)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tself.push(Buffer.from(result.value))\n\t\t\t\tread()\n\t\t\t}).catch(function (err) {\n\t\t\t\tresetTimers(true)\n\t\t\t\tif (!self._destroyed)\n\t\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t}\n\t\tread()\n\t} else {\n\t\tself._xhr = xhr\n\t\tself._pos = 0\n\n\t\tself.url = xhr.responseURL\n\t\tself.statusCode = xhr.status\n\t\tself.statusMessage = xhr.statusText\n\t\tvar headers = xhr.getAllResponseHeaders().split(/\\r?\\n/)\n\t\theaders.forEach(function (header) {\n\t\t\tvar matches = header.match(/^([^:]+):\\s*(.*)/)\n\t\t\tif (matches) {\n\t\t\t\tvar key = matches[1].toLowerCase()\n\t\t\t\tif (key === 'set-cookie') {\n\t\t\t\t\tif (self.headers[key] === undefined) {\n\t\t\t\t\t\tself.headers[key] = []\n\t\t\t\t\t}\n\t\t\t\t\tself.headers[key].push(matches[2])\n\t\t\t\t} else if (self.headers[key] !== undefined) {\n\t\t\t\t\tself.headers[key] += ', ' + matches[2]\n\t\t\t\t} else {\n\t\t\t\t\tself.headers[key] = matches[2]\n\t\t\t\t}\n\t\t\t\tself.rawHeaders.push(matches[1], matches[2])\n\t\t\t}\n\t\t})\n\n\t\tself._charset = 'x-user-defined'\n\t\tif (!capability.overrideMimeType) {\n\t\t\tvar mimeType = self.rawHeaders['mime-type']\n\t\t\tif (mimeType) {\n\t\t\t\tvar charsetMatch = mimeType.match(/;\\s*charset=([^;])(;|$)/)\n\t\t\t\tif (charsetMatch) {\n\t\t\t\t\tself._charset = charsetMatch[1].toLowerCase()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!self._charset)\n\t\t\t\tself._charset = 'utf-8' // best guess\n\t\t}\n\t}\n}\n\ninherits(IncomingMessage, stream.Readable)\n\nIncomingMessage.prototype._read = function () {\n\tvar self = this\n\n\tvar resolve = self._resumeFetch\n\tif (resolve) {\n\t\tself._resumeFetch = null\n\t\tresolve()\n\t}\n}\n\nIncomingMessage.prototype._onXHRProgress = function (resetTimers) {\n\tvar self = this\n\n\tvar xhr = self._xhr\n\n\tvar response = null\n\tswitch (self._mode) {\n\t\tcase 'text':\n\t\t\tresponse = xhr.responseText\n\t\t\tif (response.length > self._pos) {\n\t\t\t\tvar newData = response.substr(self._pos)\n\t\t\t\tif (self._charset === 'x-user-defined') {\n\t\t\t\t\tvar buffer = Buffer.alloc(newData.length)\n\t\t\t\t\tfor (var i = 0; i < newData.length; i++)\n\t\t\t\t\t\tbuffer[i] = newData.charCodeAt(i) & 0xff\n\n\t\t\t\t\tself.push(buffer)\n\t\t\t\t} else {\n\t\t\t\t\tself.push(newData, self._charset)\n\t\t\t\t}\n\t\t\t\tself._pos = response.length\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'arraybuffer':\n\t\t\tif (xhr.readyState !== rStates.DONE || !xhr.response)\n\t\t\t\tbreak\n\t\t\tresponse = xhr.response\n\t\t\tself.push(Buffer.from(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'moz-chunked-arraybuffer': // take whole\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING || !response)\n\t\t\t\tbreak\n\t\t\tself.push(Buffer.from(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'ms-stream':\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING)\n\t\t\t\tbreak\n\t\t\tvar reader = new global.MSStreamReader()\n\t\t\treader.onprogress = function () {\n\t\t\t\tif (reader.result.byteLength > self._pos) {\n\t\t\t\t\tself.push(Buffer.from(new Uint8Array(reader.result.slice(self._pos))))\n\t\t\t\t\tself._pos = reader.result.byteLength\n\t\t\t\t}\n\t\t\t}\n\t\t\treader.onload = function () {\n\t\t\t\tresetTimers(true)\n\t\t\t\tself.push(null)\n\t\t\t}\n\t\t\t// reader.onerror = ??? // TODO: this\n\t\t\treader.readAsArrayBuffer(response)\n\t\t\tbreak\n\t}\n\n\t// The ms-stream case handles end separately in reader.onload()\n\tif (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {\n\t\tresetTimers(true)\n\t\tself.push(null)\n\t}\n}\n","var capability = require('./capability')\nvar inherits = require('inherits')\nvar response = require('./response')\nvar stream = require('readable-stream')\n\nvar IncomingMessage = response.IncomingMessage\nvar rStates = response.readyStates\n\nfunction decideMode (preferBinary, useFetch) {\n\tif (capability.fetch && useFetch) {\n\t\treturn 'fetch'\n\t} else if (capability.mozchunkedarraybuffer) {\n\t\treturn 'moz-chunked-arraybuffer'\n\t} else if (capability.msstream) {\n\t\treturn 'ms-stream'\n\t} else if (capability.arraybuffer && preferBinary) {\n\t\treturn 'arraybuffer'\n\t} else {\n\t\treturn 'text'\n\t}\n}\n\nvar ClientRequest = module.exports = function (opts) {\n\tvar self = this\n\tstream.Writable.call(self)\n\n\tself._opts = opts\n\tself._body = []\n\tself._headers = {}\n\tif (opts.auth)\n\t\tself.setHeader('Authorization', 'Basic ' + Buffer.from(opts.auth).toString('base64'))\n\tObject.keys(opts.headers).forEach(function (name) {\n\t\tself.setHeader(name, opts.headers[name])\n\t})\n\n\tvar preferBinary\n\tvar useFetch = true\n\tif (opts.mode === 'disable-fetch' || ('requestTimeout' in opts && !capability.abortController)) {\n\t\t// If the use of XHR should be preferred. Not typically needed.\n\t\tuseFetch = false\n\t\tpreferBinary = true\n\t} else if (opts.mode === 'prefer-streaming') {\n\t\t// If streaming is a high priority but binary compatibility and\n\t\t// the accuracy of the 'content-type' header aren't\n\t\tpreferBinary = false\n\t} else if (opts.mode === 'allow-wrong-content-type') {\n\t\t// If streaming is more important than preserving the 'content-type' header\n\t\tpreferBinary = !capability.overrideMimeType\n\t} else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {\n\t\t// Use binary if text streaming may corrupt data or the content-type header, or for speed\n\t\tpreferBinary = true\n\t} else {\n\t\tthrow new Error('Invalid value for opts.mode')\n\t}\n\tself._mode = decideMode(preferBinary, useFetch)\n\tself._fetchTimer = null\n\tself._socketTimeout = null\n\tself._socketTimer = null\n\n\tself.on('finish', function () {\n\t\tself._onFinish()\n\t})\n}\n\ninherits(ClientRequest, stream.Writable)\n\nClientRequest.prototype.setHeader = function (name, value) {\n\tvar self = this\n\tvar lowerName = name.toLowerCase()\n\t// This check is not necessary, but it prevents warnings from browsers about setting unsafe\n\t// headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but\n\t// http-browserify did it, so I will too.\n\tif (unsafeHeaders.indexOf(lowerName) !== -1)\n\t\treturn\n\n\tself._headers[lowerName] = {\n\t\tname: name,\n\t\tvalue: value\n\t}\n}\n\nClientRequest.prototype.getHeader = function (name) {\n\tvar header = this._headers[name.toLowerCase()]\n\tif (header)\n\t\treturn header.value\n\treturn null\n}\n\nClientRequest.prototype.removeHeader = function (name) {\n\tvar self = this\n\tdelete self._headers[name.toLowerCase()]\n}\n\nClientRequest.prototype._onFinish = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\tvar opts = self._opts\n\n\tif ('timeout' in opts && opts.timeout !== 0) {\n\t\tself.setTimeout(opts.timeout)\n\t}\n\n\tvar headersObj = self._headers\n\tvar body = null\n\tif (opts.method !== 'GET' && opts.method !== 'HEAD') {\n        body = new Blob(self._body, {\n            type: (headersObj['content-type'] || {}).value || ''\n        });\n    }\n\n\t// create flattened list of headers\n\tvar headersList = []\n\tObject.keys(headersObj).forEach(function (keyName) {\n\t\tvar name = headersObj[keyName].name\n\t\tvar value = headersObj[keyName].value\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue.forEach(function (v) {\n\t\t\t\theadersList.push([name, v])\n\t\t\t})\n\t\t} else {\n\t\t\theadersList.push([name, value])\n\t\t}\n\t})\n\n\tif (self._mode === 'fetch') {\n\t\tvar signal = null\n\t\tif (capability.abortController) {\n\t\t\tvar controller = new AbortController()\n\t\t\tsignal = controller.signal\n\t\t\tself._fetchAbortController = controller\n\n\t\t\tif ('requestTimeout' in opts && opts.requestTimeout !== 0) {\n\t\t\t\tself._fetchTimer = global.setTimeout(function () {\n\t\t\t\t\tself.emit('requestTimeout')\n\t\t\t\t\tif (self._fetchAbortController)\n\t\t\t\t\t\tself._fetchAbortController.abort()\n\t\t\t\t}, opts.requestTimeout)\n\t\t\t}\n\t\t}\n\n\t\tglobal.fetch(self._opts.url, {\n\t\t\tmethod: self._opts.method,\n\t\t\theaders: headersList,\n\t\t\tbody: body || undefined,\n\t\t\tmode: 'cors',\n\t\t\tcredentials: opts.withCredentials ? 'include' : 'same-origin',\n\t\t\tsignal: signal\n\t\t}).then(function (response) {\n\t\t\tself._fetchResponse = response\n\t\t\tself._resetTimers(false)\n\t\t\tself._connect()\n\t\t}, function (reason) {\n\t\t\tself._resetTimers(true)\n\t\t\tif (!self._destroyed)\n\t\t\t\tself.emit('error', reason)\n\t\t})\n\t} else {\n\t\tvar xhr = self._xhr = new global.XMLHttpRequest()\n\t\ttry {\n\t\t\txhr.open(self._opts.method, self._opts.url, true)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\t// Can't set responseType on really old browsers\n\t\tif ('responseType' in xhr)\n\t\t\txhr.responseType = self._mode\n\n\t\tif ('withCredentials' in xhr)\n\t\t\txhr.withCredentials = !!opts.withCredentials\n\n\t\tif (self._mode === 'text' && 'overrideMimeType' in xhr)\n\t\t\txhr.overrideMimeType('text/plain; charset=x-user-defined')\n\n\t\tif ('requestTimeout' in opts) {\n\t\t\txhr.timeout = opts.requestTimeout\n\t\t\txhr.ontimeout = function () {\n\t\t\t\tself.emit('requestTimeout')\n\t\t\t}\n\t\t}\n\n\t\theadersList.forEach(function (header) {\n\t\t\txhr.setRequestHeader(header[0], header[1])\n\t\t})\n\n\t\tself._response = null\n\t\txhr.onreadystatechange = function () {\n\t\t\tswitch (xhr.readyState) {\n\t\t\t\tcase rStates.LOADING:\n\t\t\t\tcase rStates.DONE:\n\t\t\t\t\tself._onXHRProgress()\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// Necessary for streaming in Firefox, since xhr.response is ONLY defined\n\t\t// in onprogress, not in onreadystatechange with xhr.readyState = 3\n\t\tif (self._mode === 'moz-chunked-arraybuffer') {\n\t\t\txhr.onprogress = function () {\n\t\t\t\tself._onXHRProgress()\n\t\t\t}\n\t\t}\n\n\t\txhr.onerror = function () {\n\t\t\tif (self._destroyed)\n\t\t\t\treturn\n\t\t\tself._resetTimers(true)\n\t\t\tself.emit('error', new Error('XHR error'))\n\t\t}\n\n\t\ttry {\n\t\t\txhr.send(body)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t}\n}\n\n/**\n * Checks if xhr.status is readable and non-zero, indicating no error.\n * Even though the spec says it should be available in readyState 3,\n * accessing it throws an exception in IE8\n */\nfunction statusValid (xhr) {\n\ttry {\n\t\tvar status = xhr.status\n\t\treturn (status !== null && status !== 0)\n\t} catch (e) {\n\t\treturn false\n\t}\n}\n\nClientRequest.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tself._resetTimers(false)\n\n\tif (!statusValid(self._xhr) || self._destroyed)\n\t\treturn\n\n\tif (!self._response)\n\t\tself._connect()\n\n\tself._response._onXHRProgress(self._resetTimers.bind(self))\n}\n\nClientRequest.prototype._connect = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\n\tself._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode, self._resetTimers.bind(self))\n\tself._response.on('error', function(err) {\n\t\tself.emit('error', err)\n\t})\n\n\tself.emit('response', self._response)\n}\n\nClientRequest.prototype._write = function (chunk, encoding, cb) {\n\tvar self = this\n\n\tself._body.push(chunk)\n\tcb()\n}\n\nClientRequest.prototype._resetTimers = function (done) {\n\tvar self = this\n\n\tglobal.clearTimeout(self._socketTimer)\n\tself._socketTimer = null\n\n\tif (done) {\n\t\tglobal.clearTimeout(self._fetchTimer)\n\t\tself._fetchTimer = null\n\t} else if (self._socketTimeout) {\n\t\tself._socketTimer = global.setTimeout(function () {\n\t\t\tself.emit('timeout')\n\t\t}, self._socketTimeout)\n\t}\n}\n\nClientRequest.prototype.abort = ClientRequest.prototype.destroy = function (err) {\n\tvar self = this\n\tself._destroyed = true\n\tself._resetTimers(true)\n\tif (self._response)\n\t\tself._response._destroyed = true\n\tif (self._xhr)\n\t\tself._xhr.abort()\n\telse if (self._fetchAbortController)\n\t\tself._fetchAbortController.abort()\n\n\tif (err)\n\t\tself.emit('error', err)\n}\n\nClientRequest.prototype.end = function (data, encoding, cb) {\n\tvar self = this\n\tif (typeof data === 'function') {\n\t\tcb = data\n\t\tdata = undefined\n\t}\n\n\tstream.Writable.prototype.end.call(self, data, encoding, cb)\n}\n\nClientRequest.prototype.setTimeout = function (timeout, cb) {\n\tvar self = this\n\n\tif (cb)\n\t\tself.once('timeout', cb)\n\n\tself._socketTimeout = timeout\n\tself._resetTimers(false)\n}\n\nClientRequest.prototype.flushHeaders = function () {}\nClientRequest.prototype.setNoDelay = function () {}\nClientRequest.prototype.setSocketKeepAlive = function () {}\n\n// Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method\nvar unsafeHeaders = [\n\t'accept-charset',\n\t'accept-encoding',\n\t'access-control-request-headers',\n\t'access-control-request-method',\n\t'connection',\n\t'content-length',\n\t'cookie',\n\t'cookie2',\n\t'date',\n\t'dnt',\n\t'expect',\n\t'host',\n\t'keep-alive',\n\t'origin',\n\t'referer',\n\t'te',\n\t'trailer',\n\t'transfer-encoding',\n\t'upgrade',\n\t'via'\n]\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n    var target = {}\n\n    for (var i = 0; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n","module.exports = {\n  \"100\": \"Continue\",\n  \"101\": \"Switching Protocols\",\n  \"102\": \"Processing\",\n  \"200\": \"OK\",\n  \"201\": \"Created\",\n  \"202\": \"Accepted\",\n  \"203\": \"Non-Authoritative Information\",\n  \"204\": \"No Content\",\n  \"205\": \"Reset Content\",\n  \"206\": \"Partial Content\",\n  \"207\": \"Multi-Status\",\n  \"208\": \"Already Reported\",\n  \"226\": \"IM Used\",\n  \"300\": \"Multiple Choices\",\n  \"301\": \"Moved Permanently\",\n  \"302\": \"Found\",\n  \"303\": \"See Other\",\n  \"304\": \"Not Modified\",\n  \"305\": \"Use Proxy\",\n  \"307\": \"Temporary Redirect\",\n  \"308\": \"Permanent Redirect\",\n  \"400\": \"Bad Request\",\n  \"401\": \"Unauthorized\",\n  \"402\": \"Payment Required\",\n  \"403\": \"Forbidden\",\n  \"404\": \"Not Found\",\n  \"405\": \"Method Not Allowed\",\n  \"406\": \"Not Acceptable\",\n  \"407\": \"Proxy Authentication Required\",\n  \"408\": \"Request Timeout\",\n  \"409\": \"Conflict\",\n  \"410\": \"Gone\",\n  \"411\": \"Length Required\",\n  \"412\": \"Precondition Failed\",\n  \"413\": \"Payload Too Large\",\n  \"414\": \"URI Too Long\",\n  \"415\": \"Unsupported Media Type\",\n  \"416\": \"Range Not Satisfiable\",\n  \"417\": \"Expectation Failed\",\n  \"418\": \"I'm a teapot\",\n  \"421\": \"Misdirected Request\",\n  \"422\": \"Unprocessable Entity\",\n  \"423\": \"Locked\",\n  \"424\": \"Failed Dependency\",\n  \"425\": \"Unordered Collection\",\n  \"426\": \"Upgrade Required\",\n  \"428\": \"Precondition Required\",\n  \"429\": \"Too Many Requests\",\n  \"431\": \"Request Header Fields Too Large\",\n  \"451\": \"Unavailable For Legal Reasons\",\n  \"500\": \"Internal Server Error\",\n  \"501\": \"Not Implemented\",\n  \"502\": \"Bad Gateway\",\n  \"503\": \"Service Unavailable\",\n  \"504\": \"Gateway Timeout\",\n  \"505\": \"HTTP Version Not Supported\",\n  \"506\": \"Variant Also Negotiates\",\n  \"507\": \"Insufficient Storage\",\n  \"508\": \"Loop Detected\",\n  \"509\": \"Bandwidth Limit Exceeded\",\n  \"510\": \"Not Extended\",\n  \"511\": \"Network Authentication Required\"\n}\n","var ClientRequest = require('./lib/request')\nvar response = require('./lib/response')\nvar extend = require('xtend')\nvar statusCodes = require('builtin-status-codes')\nvar url = require('url')\n\nvar http = exports\n\nhttp.request = function (opts, cb) {\n\tif (typeof opts === 'string')\n\t\topts = url.parse(opts)\n\telse\n\t\topts = extend(opts)\n\n\t// Normally, the page is loaded from http or https, so not specifying a protocol\n\t// will result in a (valid) protocol-relative url. However, this won't work if\n\t// the protocol is something else, like 'file:'\n\tvar defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''\n\n\tvar protocol = opts.protocol || defaultProtocol\n\tvar host = opts.hostname || opts.host\n\tvar port = opts.port\n\tvar path = opts.path || '/'\n\n\t// Necessary for IPv6 addresses\n\tif (host && host.indexOf(':') !== -1)\n\t\thost = '[' + host + ']'\n\n\t// This may be a relative url. The browser should always be able to interpret it correctly.\n\topts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path\n\topts.method = (opts.method || 'GET').toUpperCase()\n\topts.headers = opts.headers || {}\n\n\t// Also valid opts.auth, opts.mode\n\n\tvar req = new ClientRequest(opts)\n\tif (cb)\n\t\treq.on('response', cb)\n\treturn req\n}\n\nhttp.get = function get (opts, cb) {\n\tvar req = http.request(opts, cb)\n\treq.end()\n\treturn req\n}\n\nhttp.ClientRequest = ClientRequest\nhttp.IncomingMessage = response.IncomingMessage\n\nhttp.Agent = function () {}\nhttp.Agent.defaultMaxSockets = 4\n\nhttp.globalAgent = new http.Agent()\n\nhttp.STATUS_CODES = statusCodes\n\nhttp.METHODS = [\n\t'CHECKOUT',\n\t'CONNECT',\n\t'COPY',\n\t'DELETE',\n\t'GET',\n\t'HEAD',\n\t'LOCK',\n\t'M-SEARCH',\n\t'MERGE',\n\t'MKACTIVITY',\n\t'MKCOL',\n\t'MOVE',\n\t'NOTIFY',\n\t'OPTIONS',\n\t'PATCH',\n\t'POST',\n\t'PROPFIND',\n\t'PROPPATCH',\n\t'PURGE',\n\t'PUT',\n\t'REPORT',\n\t'SEARCH',\n\t'SUBSCRIBE',\n\t'TRACE',\n\t'UNLOCK',\n\t'UNSUBSCRIBE'\n]","var http = require('http')\nvar url = require('url')\n\nvar https = module.exports\n\nfor (var key in http) {\n  if (http.hasOwnProperty(key)) https[key] = http[key]\n}\n\nhttps.request = function (params, cb) {\n  params = validateParams(params)\n  return http.request.call(this, params, cb)\n}\n\nhttps.get = function (params, cb) {\n  params = validateParams(params)\n  return http.get.call(this, params, cb)\n}\n\nfunction validateParams (params) {\n  if (typeof params === 'string') {\n    params = url.parse(params)\n  }\n  if (!params.protocol) {\n    params.protocol = 'https:'\n  }\n  if (params.protocol !== 'https:') {\n    throw new Error('Protocol \"' + params.protocol + '\" not supported. Expected \"https:\"')\n  }\n  return params\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport dns from 'dns';\nimport http from 'http';\nimport https from 'https';\nimport net from 'net';\nimport tls from 'tls';\n\nimport { assert } from '../../utils/isomorphic/assert';\nimport { ManualPromise } from '../../utils/isomorphic/manualPromise';\nimport { monotonicTime } from '../../utils/isomorphic/time';\n\n// Implementation(partial) of Happy Eyeballs 2 algorithm described in\n// https://www.rfc-editor.org/rfc/rfc8305\n\n// Same as in Chromium (https://source.chromium.org/chromium/chromium/src/+/5666ff4f5077a7e2f72902f3a95f5d553ea0d88d:net/socket/transport_connect_job.cc;l=102)\nconst connectionAttemptDelayMs = 300;\n\nconst kDNSLookupAt = Symbol('kDNSLookupAt');\nconst kTCPConnectionAt = Symbol('kTCPConnectionAt');\n\nclass HttpHappyEyeballsAgent extends http.Agent {\n  createConnection(options: http.ClientRequestArgs, oncreate?: (err: Error | null, socket?: net.Socket) => void): net.Socket | undefined {\n    // There is no ambiguity in case of IP address.\n    if (net.isIP(clientRequestArgsToHostName(options)))\n      return net.createConnection(options as net.NetConnectOpts);\n    createConnectionAsync(options, oncreate, /* useTLS */ false).catch(err => oncreate?.(err));\n  }\n}\n\nclass HttpsHappyEyeballsAgent extends https.Agent {\n  createConnection(options: http.ClientRequestArgs, oncreate?: (err: Error | null, socket?: net.Socket) => void): net.Socket | undefined {\n    // There is no ambiguity in case of IP address.\n    if (net.isIP(clientRequestArgsToHostName(options)))\n      return tls.connect(options as tls.ConnectionOptions);\n    createConnectionAsync(options, oncreate, /* useTLS */ true).catch(err => oncreate?.(err));\n  }\n}\n\n// These options are aligned with the default Node.js globalAgent options.\nexport const httpsHappyEyeballsAgent = new HttpsHappyEyeballsAgent({ keepAlive: true });\nexport const httpHappyEyeballsAgent = new HttpHappyEyeballsAgent({ keepAlive: true });\n\nexport async function createSocket(host: string, port: number): Promise<net.Socket> {\n  return new Promise((resolve, reject) => {\n    if (net.isIP(host)) {\n      const socket = net.createConnection({ host, port });\n      socket.on('connect', () => resolve(socket));\n      socket.on('error', error => reject(error));\n    } else {\n      createConnectionAsync({ host, port }, (err, socket) => {\n        if (err)\n          reject(err);\n        if (socket)\n          resolve(socket);\n      }, /* useTLS */ false).catch(err => reject(err));\n    }\n  });\n}\n\nexport async function createTLSSocket(options: tls.ConnectionOptions): Promise<tls.TLSSocket> {\n  return new Promise((resolve, reject) => {\n    assert(options.host, 'host is required');\n    if (net.isIP(options.host)) {\n      const socket = tls.connect(options);\n      socket.on('secureConnect', () => resolve(socket));\n      socket.on('error', error => reject(error));\n    } else {\n      createConnectionAsync(options, (err, socket) => {\n        if (err)\n          reject(err);\n        if (socket) {\n          socket.on('secureConnect', () => resolve(socket));\n          socket.on('error', error => reject(error));\n        }\n      }, true).catch(err => reject(err));\n    }\n  });\n}\n\nexport async function createConnectionAsync(\n  options: http.ClientRequestArgs,\n  oncreate: ((err: Error | null, socket?: tls.TLSSocket) => void) | undefined,\n  useTLS: true\n): Promise<void>;\n\nexport async function createConnectionAsync(\n  options: http.ClientRequestArgs,\n  oncreate: ((err: Error | null, socket?: net.Socket) => void) | undefined,\n  useTLS: false\n): Promise<void>;\n\nexport async function createConnectionAsync(\n  options: http.ClientRequestArgs,\n  oncreate: ((err: Error | null, socket?: any) => void) | undefined,\n  useTLS: boolean\n): Promise<void> {\n  const lookup = (options as any).__testHookLookup || lookupAddresses;\n  const hostname = clientRequestArgsToHostName(options);\n  const addresses = await lookup(hostname);\n  const dnsLookupAt = monotonicTime();\n  const sockets = new Set<net.Socket>();\n  let firstError;\n  let errorCount = 0;\n  const handleError = (socket: net.Socket, err: Error) => {\n    if (!sockets.delete(socket))\n      return;\n    ++errorCount;\n    firstError ??= err;\n    if (errorCount === addresses.length)\n      oncreate?.(firstError);\n  };\n\n  const connected = new ManualPromise();\n  for (const { address } of addresses) {\n    const socket = useTLS ?\n      tls.connect({\n        ...(options as tls.ConnectionOptions),\n        port: options.port as number,\n        host: address,\n        servername: hostname }) :\n      net.createConnection({\n        ...options,\n        port: options.port as number,\n        host: address });\n\n    (socket as any)[kDNSLookupAt] = dnsLookupAt;\n\n    // Each socket may fire only one of 'connect', 'timeout' or 'error' events.\n    // None of these events are fired after socket.destroy() is called.\n    socket.on('connect', () => {\n      (socket as any)[kTCPConnectionAt] = monotonicTime();\n\n      connected.resolve();\n      oncreate?.(null, socket);\n      // TODO: Cache the result?\n      // Close other outstanding sockets.\n      sockets.delete(socket);\n      for (const s of sockets)\n        s.destroy();\n      sockets.clear();\n    });\n    socket.on('timeout', () => {\n      // Timeout is not an error, so we have to manually close the socket.\n      socket.destroy();\n      handleError(socket, new Error('Connection timeout'));\n    });\n    socket.on('error', e => handleError(socket, e));\n    sockets.add(socket);\n    await Promise.race([\n      connected,\n      new Promise(f => setTimeout(f, connectionAttemptDelayMs))\n    ]);\n    if (connected.isDone())\n      break;\n  }\n}\n\nasync function lookupAddresses(hostname: string): Promise<dns.LookupAddress[]> {\n  const addresses = await dns.promises.lookup(hostname, { all: true, family: 0, verbatim: true });\n  let firstFamily = addresses.filter(({ family }) => family === 6);\n  let secondFamily = addresses.filter(({ family }) => family === 4);\n  // Make sure first address in the list is the same as in the original order.\n  if (firstFamily.length && firstFamily[0] !== addresses[0]) {\n    const tmp = firstFamily;\n    firstFamily = secondFamily;\n    secondFamily = tmp;\n  }\n  const result = [];\n  // Alternate ipv6 and ipv4 addresses.\n  for (let i = 0; i < Math.max(firstFamily.length, secondFamily.length); i++) {\n    if (firstFamily[i])\n      result.push(firstFamily[i]);\n    if (secondFamily[i])\n      result.push(secondFamily[i]);\n  }\n  return result;\n}\n\nfunction clientRequestArgsToHostName(options: http.ClientRequestArgs): string {\n  if (options.hostname)\n    return options.hostname;\n  if (options.host)\n    return options.host;\n  throw new Error('Either options.hostname or options.host must be provided');\n}\n\nexport function timingForSocket(socket: net.Socket | tls.TLSSocket) {\n  return {\n    dnsLookupAt: (socket as any)[kDNSLookupAt] as number | undefined,\n    tcpConnectionAt: (socket as any)[kTCPConnectionAt] as number | undefined,\n  };\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport http from 'http';\nimport http2 from 'http2';\nimport https from 'https';\nimport url from 'url';\n\nimport { HttpsProxyAgent, SocksProxyAgent, getProxyForUrl } from '../../utilsBundle';\nimport { httpHappyEyeballsAgent, httpsHappyEyeballsAgent } from './happyEyeballs';\n\nimport type net from 'net';\nimport type { ProxySettings } from '../types';\n\nexport type HTTPRequestParams = {\n  url: string,\n  method?: string,\n  headers?: http.OutgoingHttpHeaders,\n  data?: string | Buffer,\n  timeout?: number,\n  rejectUnauthorized?: boolean,\n};\n\nexport const NET_DEFAULT_TIMEOUT = 30_000;\n\nexport function httpRequest(params: HTTPRequestParams, onResponse: (r: http.IncomingMessage) => void, onError: (error: Error) => void) {\n  const parsedUrl = url.parse(params.url);\n  let options: https.RequestOptions = {\n    ...parsedUrl,\n    agent: parsedUrl.protocol === 'https:' ? httpsHappyEyeballsAgent : httpHappyEyeballsAgent,\n    method: params.method || 'GET',\n    headers: params.headers,\n  };\n  if (params.rejectUnauthorized !== undefined)\n    options.rejectUnauthorized = params.rejectUnauthorized;\n\n  const timeout = params.timeout ?? NET_DEFAULT_TIMEOUT;\n\n  const proxyURL = getProxyForUrl(params.url);\n  if (proxyURL) {\n    const parsedProxyURL = url.parse(proxyURL);\n    if (params.url.startsWith('http:')) {\n      options = {\n        path: parsedUrl.href,\n        host: parsedProxyURL.hostname,\n        port: parsedProxyURL.port,\n        headers: options.headers,\n        method: options.method\n      };\n    } else {\n      (parsedProxyURL as any).secureProxy = parsedProxyURL.protocol === 'https:';\n\n      options.agent = new HttpsProxyAgent(parsedProxyURL);\n      options.rejectUnauthorized = false;\n    }\n  }\n\n  const requestCallback = (res: http.IncomingMessage) => {\n    const statusCode = res.statusCode || 0;\n    if (statusCode >= 300 && statusCode < 400 && res.headers.location) {\n      // Close the original socket before following the redirect. Otherwise\n      // it may stay idle and cause a timeout error.\n      request.destroy();\n      httpRequest({ ...params, url: new URL(res.headers.location, params.url).toString() }, onResponse, onError);\n    } else {\n      onResponse(res);\n    }\n  };\n  const request = options.protocol === 'https:' ?\n    https.request(options, requestCallback) :\n    http.request(options, requestCallback);\n  request.on('error', onError);\n  if (timeout !== undefined) {\n    const rejectOnTimeout = () =>  {\n      onError(new Error(`Request to ${params.url} timed out after ${timeout}ms`));\n      request.abort();\n    };\n    if (timeout <= 0) {\n      rejectOnTimeout();\n      return;\n    }\n    request.setTimeout(timeout, rejectOnTimeout);\n  }\n  request.end(params.data);\n}\n\nexport function fetchData(params: HTTPRequestParams, onError?: (params: HTTPRequestParams, response: http.IncomingMessage) => Promise<Error>): Promise<string> {\n  return new Promise((resolve, reject) => {\n    httpRequest(params, async response => {\n      if (response.statusCode !== 200) {\n        const error = onError ? await onError(params, response) : new Error(`fetch failed: server returned code ${response.statusCode}. URL: ${params.url}`);\n        reject(error);\n        return;\n      }\n      let body = '';\n      response.on('data', (chunk: string) => body += chunk);\n      response.on('error', (error: any) => reject(error));\n      response.on('end', () => resolve(body));\n    }, reject);\n  });\n}\n\nfunction shouldBypassProxy(url: URL, bypass?: string): boolean {\n  if (!bypass)\n    return false;\n  const domains = bypass.split(',').map(s => {\n    s = s.trim();\n    if (!s.startsWith('.'))\n      s = '.' + s;\n    return s;\n  });\n  const domain = '.' + url.hostname;\n  return domains.some(d => domain.endsWith(d));\n}\n\nexport function createProxyAgent(proxy?: ProxySettings, forUrl?: URL) {\n  if (!proxy)\n    return;\n  if (forUrl && proxy.bypass && shouldBypassProxy(forUrl, proxy.bypass))\n    return;\n\n  // Browsers allow to specify proxy without a protocol, defaulting to http.\n  let proxyServer = proxy.server.trim();\n  if (!/^\\w+:\\/\\//.test(proxyServer))\n    proxyServer = 'http://' + proxyServer;\n\n  const proxyOpts = url.parse(proxyServer);\n  if (proxyOpts.protocol?.startsWith('socks')) {\n    return new SocksProxyAgent({\n      host: proxyOpts.hostname,\n      port: proxyOpts.port || undefined,\n    });\n  }\n  if (proxy.username)\n    proxyOpts.auth = `${proxy.username}:${proxy.password || ''}`;\n\n  if (forUrl && ['ws:', 'wss:'].includes(forUrl.protocol)) {\n    // Force CONNECT method for WebSockets.\n    return new HttpsProxyAgent(proxyOpts);\n  }\n\n  // TODO: We should use HttpProxyAgent conditional on proxyOpts.protocol instead of always using CONNECT method.\n  return new HttpsProxyAgent(proxyOpts);\n}\n\nexport function createHttpServer(requestListener?: (req: http.IncomingMessage, res: http.ServerResponse) => void): http.Server;\nexport function createHttpServer(options: http.ServerOptions, requestListener?: (req: http.IncomingMessage, res: http.ServerResponse) => void): http.Server;\nexport function createHttpServer(...args: any[]): http.Server {\n  const server = http.createServer(...args);\n  decorateServer(server);\n  return server;\n}\n\nexport function createHttpsServer(requestListener?: (req: http.IncomingMessage, res: http.ServerResponse) => void): https.Server;\nexport function createHttpsServer(options: https.ServerOptions, requestListener?: (req: http.IncomingMessage, res: http.ServerResponse) => void): https.Server;\nexport function createHttpsServer(...args: any[]): https.Server {\n  const server = https.createServer(...args);\n  decorateServer(server);\n  return server;\n}\n\nexport function createHttp2Server(onRequestHandler?: (request: http2.Http2ServerRequest, response: http2.Http2ServerResponse) => void,): http2.Http2SecureServer;\nexport function createHttp2Server(options: http2.SecureServerOptions, onRequestHandler?: (request: http2.Http2ServerRequest, response: http2.Http2ServerResponse) => void,): http2.Http2SecureServer;\nexport function createHttp2Server(...args: any[]): http2.Http2SecureServer {\n  const server = http2.createSecureServer(...args);\n  decorateServer(server);\n  return server;\n}\n\nexport async function isURLAvailable(url: URL, ignoreHTTPSErrors: boolean, onLog?: (data: string) => void, onStdErr?: (data: string) => void) {\n  let statusCode = await httpStatusCode(url, ignoreHTTPSErrors, onLog, onStdErr);\n  if (statusCode === 404 && url.pathname === '/') {\n    const indexUrl = new URL(url);\n    indexUrl.pathname = '/index.html';\n    statusCode = await httpStatusCode(indexUrl, ignoreHTTPSErrors, onLog, onStdErr);\n  }\n  return statusCode >= 200 && statusCode < 404;\n}\n\nasync function httpStatusCode(url: URL, ignoreHTTPSErrors: boolean, onLog?: (data: string) => void, onStdErr?: (data: string) => void): Promise<number> {\n  return new Promise(resolve => {\n    onLog?.(`HTTP GET: ${url}`);\n    httpRequest({\n      url: url.toString(),\n      headers: { Accept: '*/*' },\n      rejectUnauthorized: !ignoreHTTPSErrors\n    }, res => {\n      res.resume();\n      const statusCode = res.statusCode ?? 0;\n      onLog?.(`HTTP Status: ${statusCode}`);\n      resolve(statusCode);\n    }, error => {\n      if ((error as NodeJS.ErrnoException).code === 'DEPTH_ZERO_SELF_SIGNED_CERT')\n        onStdErr?.(`[WebServer] Self-signed certificate detected. Try adding ignoreHTTPSErrors: true to config.webServer.`);\n      onLog?.(`Error while checking if ${url} is available: ${error.message}`);\n      resolve(0);\n    });\n  });\n}\n\nfunction decorateServer(server: net.Server) {\n  const sockets = new Set<net.Socket>();\n  server.on('connection', socket => {\n    sockets.add(socket);\n    socket.once('close', () => sockets.delete(socket));\n  });\n\n  const close = server.close;\n  server.close = (callback?: (err?: Error) => void) => {\n    for (const socket of sockets)\n      socket.destroy();\n    sockets.clear();\n    return close.call(server, callback);\n  };\n}\n","\n/**\n * Module dependencies.\n */\n\nvar global = (function() { return this; })();\n\n/**\n * WebSocket constructor.\n */\n\nvar WebSocket = global.WebSocket || global.MozWebSocket;\n\n/**\n * Module exports.\n */\n\nmodule.exports = WebSocket ? ws : null;\n\n/**\n * WebSocket constructor.\n *\n * The third `opts` options object gets ignored in web browsers, since it's\n * non-standard, and throws a TypeError if passed to the constructor.\n * See: https://github.com/einaros/ws/issues/227\n *\n * @param {String} uri\n * @param {Array} protocols (optional)\n * @param {Object) opts (optional)\n * @api public\n */\n\nfunction ws(uri, protocols, opts) {\n  var instance;\n  if (protocols) {\n    instance = new WebSocket(uri, protocols);\n  } else {\n    instance = new WebSocket(uri);\n  }\n  return instance;\n}\n\nif (WebSocket) ws.prototype = WebSocket.prototype;\n","\nvar Writable = require('stream').Writable;\nvar inherits = require('inherits');\n\nfunction Endpoint(options, callback) {\n  if (!(this instanceof Endpoint)) return new Endpoint(options, callback);\n\n  // `options` defaults to {}\n  if (typeof options === 'function') {\n    callback = options;\n    options = {};\n  }\n\n  Writable.call(this, options);\n  var self = this;\n\n  this._objectMode = !!options.objectMode;\n\n  // will keep a long list of buffers\n  this._buffers = [];\n\n  // Cleanup event listeners\n  var sources = [];\n  function cleanup() {\n    self.removeListener('pipe', onpipe);\n    self.removeListener('error', error);\n    self.removeListener('finish', finish);\n    for (var i = 0, l = sources.length; i < l; i++) {\n      sources[i].removeListener('error', error);\n    }\n  }\n\n  // Either finish or error will be used to declare a done state\n  function finish() {\n    cleanup();\n    callback(null, self.buffer);\n  }\n\n  function error(err) {\n    cleanup();\n    callback(err, self.buffer);\n  }\n\n  // Handle errors on source streams\n  function onpipe(source) {\n    sources.push(source);\n    source.once('error', error);\n  }\n  function onunpipe(source) {\n    var index = sources.indexOf(source);\n    if (index !== -1) {\n      sources.splice(index, 1);\n      source.removeListener('error', error);\n    }\n  }\n\n  this.once('finish', finish);\n  this.once('error', error);\n  this.on('pipe', onpipe);\n  this.on('unpipe', onunpipe);\n}\nmodule.exports = Endpoint;\ninherits(Endpoint, Writable);\n\nEndpoint.prototype._write = function (data, encodeing, callback) {\n  this._buffers.push(data);\n\n  return callback(null);\n};\n\nObject.defineProperty(Endpoint.prototype, \"buffer\", {\n  get: function () {\n    if (this._objectMode) {\n      return this._buffers;\n    } else {\n      var total = Buffer.concat(this._buffers);\n      this._buffers = [ total ];\n      return total;\n    }\n  },\n  enumerable: true,\n  configurable: true\n});\n","\nvar fs = require('fs');\nvar path = require('path');\nvar util = require('util');\nvar http = require('http');\nvar events = require('events');\nvar WebSocket = require('ws');\nvar endpoint = require('endpoint');\n\n// Load library\nvar library = {};\nfs.readdirSync(path.resolve(__dirname, 'lib'))\n    .filter(function (filename) {\n        return filename[0] !== '.';\n    })\n    .forEach(function (filename) {\n        var filepath = path.resolve(__dirname, 'lib', filename);\n        library[path.basename(filename, '.js')] = require(filepath);\n    });\n\n// Main constructor\nfunction WebKitInspector(port, host, href, callback) {\n    if (!(this instanceof WebKitInspector)) {\n        return new WebKitInspector(port, host, href, callback);\n    }\n\n    this.closed = false;\n    this._callbacks = {};\n    this._id = 0;\n\n    this.debug = false;\n\n    // Add library domains\n    var domains = Object.keys(library);\n    for (var i = 0, l = domains.length; i < l; i++) {\n        this[ domains[i] ] = new library[ domains[i] ](this);\n    }\n\n    // Setup host and port parameters\n    if (typeof port !== 'number') {\n        throw new Error('A port number must be speficed');\n    }\n    if (typeof host !== 'string') {\n        throw new Error('A host name must be speficed');\n    }\n    if (typeof href !== 'string') {\n        throw new Error('A page url must be speficed');\n    }\n\n    // Add callback to connect event\n    if (callback) this.once('connect', callback);\n\n    // Try to connect to WebKit Server\n    this._tryConnect(port, host, href, 0, 2000);\n}\nutil.inherits(WebKitInspector, events.EventEmitter);\nmodule.exports = WebKitInspector;\n\nWebKitInspector.prototype._tryConnect = function(port, host, href, use, timeout) {\n    var self = this;\n\n    var time = Date.now();\n    var req = http.get('http://' + host + ':' + port + '/json', function (res) {\n        res.pipe(endpoint(function (err, buffer) {\n            if (err) return self.emit('error', err);\n\n            // Check that .close wasn't executed\n            if (self.closed) return;\n\n            // Find the websocket url pointing to the given url\n            var wsUrl = null;\n            var pages = JSON.parse(buffer.toString());\n            for (var i = 0, l = pages.length; i < l; i++) {\n                if (pages[i].url === href) {\n                    wsUrl = pages[i].webSocketDebuggerUrl || false;\n                    break;\n                }\n            }\n\n            // Check that a page was found\n            if (wsUrl === null) {\n                return self.emit('error', new Error('No page with the given url was found'));\n            }\n\n            // Check that a WebSocket connection is allowed\n            if (wsUrl === false) {\n                return self.emit('error', new Error('Another inspector is already listning'));\n            }\n\n            // Connect to the WebSocket\n            self._ws = new WebSocket(wsUrl);\n            self._ws.on('message', self._respond.bind(self));\n            self._ws.on('error', self.emit.bind(self, 'error'));\n            self._ws.once('open', self.emit.bind(self, 'connect'));\n            self._ws.once('close', self.close.bind(self));\n        }));\n    });\n\n    // Send request error to main object\n    req.on('error', function (err) {\n\n        // In case it was a ECONNREFUSED error\n        // and there is time left,\n        // and .close hasn't been called\n        var timeUse = (time - Date.now()) + use;\n        if (err.code === 'ECONNREFUSED' && (timeUse + 100) < timeout && self.closed === false) {\n\n            // Try to connect again after 100 ms\n            setTimeout(function() {\n                self._tryConnect(port, host, href, timeUse, timeout);\n            }, 100);\n\n            return;\n        }\n\n        // Emit error\n        self.emit('error', err);\n    });\n};\n\nWebKitInspector.prototype._splitArgs = function (argsList) {\n    var args = [], callback;\n\n    // Split callback from argsList, asumes that callback is the last argument\n    if (args.length === 1) {\n        callback = argsList[0];\n    } else {\n        for (var i = 0, l = argsList.length; i < l; i++) {\n            args.push(argsList[i]);\n        }\n\n        callback = args.pop();\n    }\n\n    // check that a callback was speficed\n    if (typeof callback !== 'function') {\n        throw new Error('missing callback');\n    }\n\n    return { args: args, callback: callback };\n};\n\nWebKitInspector.prototype._request = function (method, params, callback) {\n    var self = this;\n    var newId = ++this._id;\n\n    var request = {\n        'id': newId,\n        'method': method,\n        'params': params\n    };\n\n    this._callbacks[newId] = callback;\n\n    if (this.debug) {\n        console.log('=== Send request #' + newId + ' ===');\n        console.log(util.inspect(request, false, Infinity, true));\n        console.log('=== message end ===');\n    }\n\n    this._ws.send(JSON.stringify(request), function (err) {\n        if (err) {\n            delete self._callbacks[newId];\n            callback(err, null);\n        }\n    });\n};\n\nWebKitInspector.prototype._respond = function (message) {\n    message = JSON.parse(message);\n\n    // respond from a request\n    if (message.id) {\n        if (this.debug) {\n            console.log('=== Got response #' + message.id + ' ===');\n            console.log(util.inspect(message, false, Infinity, true));\n            console.log('=== message end ===');\n        }\n\n        var callback = this._callbacks[message.id];\n\n        // Emit error if callback isn't defined\n        if (callback === undefined) {\n            this.emit('error', new Error('atempt to fire a missing callback'));\n            return;\n        }\n\n        delete this._callbacks[message.id];\n\n        if (message.error) {\n            var err = new Error(message.error.message);\n                err.code = message.error.code;\n            callback.call(null, err, null);\n        } else {\n            callback.call(null, null, message.result);\n        }\n    }\n\n    // respond from a notification\n    else {\n        if (this.debug) {\n            console.log('=== Got event ::' + message.method + ' ===');\n            console.log(util.inspect(message, false, Infinity, true));\n            console.log('=== message end ===');\n        }\n\n        var method = message.method.split('.');\n        this[ method[0] ].emit(method[1], message.params);\n    }\n};\n\nWebKitInspector.prototype.close = function (callback) {\n    var self = this;\n\n    if (this.closed) return;\n    this.closed = true;\n\n    // Execute callback one close event emits\n    if (typeof callback === 'function') this.once('close', callback);\n\n    // Close WebSocket or just emit close\n    if (this._ws && this._ws.readyState !== WebSocket.CLOSED) {\n        this._ws.once('close', function () {\n            // the ws module do sometimes return an exit code as a argument\n            self.emit('close');\n        });\n        this._ws.close();\n    } else {\n        this.emit('close');\n    }\n};\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class AsyncLocalStorage<T extends { type: string; previous?: T }> {\n\n  lastZoneId = 0;\n  private _zones = new Map<number, T>();\n  private _current: T | undefined;\n\n  constructor() {}\n\n  getStore() {\n    return this._current;\n  }\n\n  run<R>(store: T, func: () => R): R  {\n    let id: number | undefined;\n    if (store) {\n      id = this.lastZoneId++;\n      this._zones.set(id, store);\n      this._current = store;\n      Object.defineProperty(func, 'name', { value: `__PWZONE__[${id}]-${store.type}` });\n    }\n\n    return runWithFinally(() => func(), () => {\n      if (id)\n        this._zones.delete(id);\n      if (store)\n        this._current = store.previous;\n    });\n  }\n}\n\nfunction runWithFinally<R>(func: () => R, finallyFunc: Function): R {\n  try {\n    const result = func();\n    if (result instanceof Promise) {\n      return result.then(r => {\n        finallyFunc();\n        return r;\n      }).catch(e => {\n        finallyFunc();\n        throw e;\n      }) as any;\n    }\n    finallyFunc();\n    return result;\n  } catch (e) {\n    finallyFunc();\n    throw e;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AsyncLocalStorage } from 'async_hooks';\n\nexport type ZoneType = 'crxZone' | 'apiZone' | 'stepZone';\n\nconst asyncLocalStorage = new AsyncLocalStorage<Zone | undefined>();\n\nexport class Zone {\n  private readonly _asyncLocalStorage: AsyncLocalStorage<Zone | undefined>;\n  private readonly _data: ReadonlyMap<ZoneType, unknown>;\n\n  constructor(asyncLocalStorage: AsyncLocalStorage<Zone | undefined>, store: Map<ZoneType, unknown>) {\n    this._asyncLocalStorage = asyncLocalStorage;\n    this._data = store;\n  }\n\n  with(type: ZoneType, data: unknown): Zone {\n    return new Zone(this._asyncLocalStorage, new Map(this._data).set(type, data));\n  }\n\n  without(type?: ZoneType): Zone {\n    const data = type ? new Map(this._data) : new Map();\n    data.delete(type);\n    return new Zone(this._asyncLocalStorage, data);\n  }\n\n  run<R>(func: () => R): R {\n    return this._asyncLocalStorage.run(this, func);\n  }\n\n  data<T>(type: ZoneType): T | undefined {\n    return this._data.get(type) as T | undefined;\n  }\n}\n\nexport const emptyZone = new Zone(asyncLocalStorage, new Map());\n\nexport function currentZone(): Zone {\n  return asyncLocalStorage.getStore() ?? emptyZone;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport crypto from 'crypto';\nimport fs from 'fs';\nimport path from 'path';\nimport * as util from 'util';\nimport { Readable, Writable, pipeline } from 'stream';\nimport { EventEmitter } from 'events';\n\nimport { colors } from '../../utilsBundle';\nimport { debugLogger } from './debugLogger';\nimport { currentZone, emptyZone } from './zones';\nimport { debugMode, isUnderTest } from './debug';\n\nimport type { Platform, Zone } from '../../client/platform';\nimport type { Zone as ZoneImpl } from './zones';\nimport type * as channels from '@protocol/channels';\n\nconst pipelineAsync = util.promisify(pipeline);\n\nclass NodeZone implements Zone {\n  private _zone: ZoneImpl;\n\n  constructor(zone: ZoneImpl) {\n    this._zone = zone;\n  }\n\n  push<T>(data: T) {\n    return new NodeZone(this._zone.with('apiZone', data));\n  }\n\n  pop() {\n    return new NodeZone(this._zone.without('apiZone'));\n  }\n\n  run<R>(func: () => R): R {\n    return this._zone.run(func);\n  }\n\n  data<T>(): T | undefined {\n    return this._zone.data('apiZone');\n  }\n}\n\nlet boxedStackPrefixes: string[] = [];\nexport function setBoxedStackPrefixes(prefixes: string[]) {\n  boxedStackPrefixes = prefixes;\n}\n\nconst coreDir = path.dirname(require.resolve('../../../package.json'));\n\nexport const nodePlatform: Platform = {\n  name: 'node',\n\n  boxedStackPrefixes: () => {\n    if (process.env.PWDEBUGIMPL)\n      return [];\n    return [coreDir, ...boxedStackPrefixes];\n  },\n\n  calculateSha1: (text: string) => {\n    const sha1 = crypto.createHash('sha1');\n    sha1.update(text);\n    return Promise.resolve(sha1.digest('hex'));\n  },\n\n  colors,\n\n  coreDir,\n\n  createGuid: () => crypto.randomBytes(16).toString('hex'),\n\n  defaultMaxListeners: () => EventEmitter.defaultMaxListeners,\n  fs: () => fs,\n\n  env: process.env,\n\n  inspectCustom: util.inspect.custom,\n\n  isDebugMode: () => !!debugMode(),\n\n  isJSDebuggerAttached: () => !!require('inspector').url(),\n\n  isLogEnabled(name: 'api' | 'channel') {\n    return debugLogger.isEnabled(name);\n  },\n\n  isUnderTest: () => isUnderTest(),\n\n  log(name: 'api' | 'channel', message: string | Error | object) {\n    debugLogger.log(name, message);\n  },\n\n  path: () => path,\n\n  pathSeparator: path.sep,\n\n  showInternalStackFrames: () => !!process.env.PWDEBUGIMPL,\n\n  async streamFile(path: string, stream: Writable): Promise<void> {\n    await pipelineAsync(fs.createReadStream(path), stream);\n  },\n\n  streamReadable: (channel: channels.StreamChannel) => {\n    return new ReadableStreamImpl(channel);\n  },\n\n  streamWritable: (channel: channels.WritableStreamChannel) => {\n    return new WritableStreamImpl(channel);\n  },\n\n  zones: {\n    current: () => new NodeZone(currentZone()),\n    empty: new NodeZone(emptyZone),\n  }\n};\n\nclass ReadableStreamImpl extends Readable {\n  private _channel: channels.StreamChannel;\n\n  constructor(channel: channels.StreamChannel) {\n    super();\n    this._channel = channel;\n  }\n\n  override async _read() {\n    const result = await this._channel.read({ size: 1024 * 1024 });\n    if (result.binary.byteLength)\n      this.push(result.binary);\n    else\n      this.push(null);\n  }\n\n  override _destroy(error: Error | null, callback: (error: Error | null | undefined) => void): void {\n    // Stream might be destroyed after the connection was closed.\n    this._channel.close().catch(e => null);\n    super._destroy(error, callback);\n  }\n}\n\nclass WritableStreamImpl extends Writable {\n  private _channel: channels.WritableStreamChannel;\n\n  constructor(channel: channels.WritableStreamChannel) {\n    super();\n    this._channel = channel;\n  }\n\n  override async _write(chunk: Buffer | string, encoding: BufferEncoding, callback: (error?: Error | null) => void) {\n    const error = await this._channel.write({ binary: typeof chunk === 'string' ? Buffer.from(chunk) : chunk }).catch(e => e);\n    callback(error || null);\n  }\n\n  override async _final(callback: (error?: Error | null) => void) {\n    // Stream might be destroyed after the connection was closed.\n    const error = await this._channel.close().catch(e => e);\n    callback(error || null);\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nfunction noop() {}\n\nexport const createInterface = noop;\n\nexport default {\n  createInterface,\n};\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as childProcess from 'child_process';\nimport fs from 'fs';\nimport * as readline from 'readline';\n\nimport { removeFolders } from './fileUtils';\nimport { isUnderTest } from '../../utils';\n\nexport type Env = {[key: string]: string | number | boolean | undefined};\n\nexport type LaunchProcessOptions = {\n  command: string,\n  args?: string[],\n  env?: Env,\n  shell?: boolean,\n\n  handleSIGINT?: boolean,\n  handleSIGTERM?: boolean,\n  handleSIGHUP?: boolean,\n  stdio: 'pipe' | 'stdin',\n  tempDirectories: string[],\n\n  cwd?: string,\n\n  // Note: attemptToGracefullyClose should reject if it does not close the browser.\n  attemptToGracefullyClose: () => Promise<any>,\n  onExit: (exitCode: number | null, signal: string | null) => void,\n  log: (message: string) => void,\n};\n\ntype LaunchResult = {\n  launchedProcess: childProcess.ChildProcess,\n  gracefullyClose: () => Promise<void>,\n  kill: () => Promise<void>,\n};\n\nexport const gracefullyCloseSet = new Set<() => Promise<void>>();\nconst killSet = new Set<() => void>();\n\nexport async function gracefullyCloseAll() {\n  await Promise.all(Array.from(gracefullyCloseSet).map(gracefullyClose => gracefullyClose().catch(e => {})));\n}\n\nexport function gracefullyProcessExitDoNotHang(code: number) {\n  // Force exit after 30 seconds.\n  // eslint-disable-next-line no-restricted-properties\n  setTimeout(() => process.exit(code), 30000);\n  // Meanwhile, try to gracefully close all browsers.\n  gracefullyCloseAll().then(() => {\n    // eslint-disable-next-line no-restricted-properties\n    process.exit(code);\n  });\n}\n\nfunction exitHandler() {\n  for (const kill of killSet)\n    kill();\n}\n\nlet sigintHandlerCalled = false;\nfunction sigintHandler() {\n  const exitWithCode130 = () => {\n    // Give tests a chance to see that launched process did exit and dispatch any async calls.\n    if (isUnderTest()) {\n      // eslint-disable-next-line no-restricted-properties\n      setTimeout(() => process.exit(130), 1000);\n    } else {\n      // eslint-disable-next-line no-restricted-properties\n      process.exit(130);\n    }\n  };\n\n  if (sigintHandlerCalled) {\n    // Resort to default handler from this point on, just in case we hang/stall.\n    process.off('SIGINT', sigintHandler);\n\n    // Upon second Ctrl+C, immediately kill browsers and exit.\n    // This prevents hanging in the case where closing the browser takes a lot of time or is buggy.\n    for (const kill of killSet)\n      kill();\n    exitWithCode130();\n  } else {\n    sigintHandlerCalled = true;\n    gracefullyCloseAll().then(() => exitWithCode130());\n  }\n}\n\nfunction sigtermHandler() {\n  gracefullyCloseAll();\n}\n\nfunction sighupHandler() {\n  gracefullyCloseAll();\n}\n\nconst installedHandlers = new Set<'exit' | 'SIGINT' | 'SIGTERM' | 'SIGHUP'>();\nconst processHandlers = {\n  exit: exitHandler,\n  SIGINT: sigintHandler,\n  SIGTERM: sigtermHandler,\n  SIGHUP: sighupHandler,\n};\nfunction addProcessHandlerIfNeeded(name: 'exit' | 'SIGINT' | 'SIGTERM' | 'SIGHUP') {\n  if (!installedHandlers.has(name)) {\n    installedHandlers.add(name);\n    process.on(name, processHandlers[name]);\n  }\n}\nfunction removeProcessHandlersIfNeeded() {\n  if (killSet.size)\n    return;\n  for (const handler of installedHandlers)\n    process.off(handler, processHandlers[handler]);\n  installedHandlers.clear();\n}\n\nexport async function launchProcess(options: LaunchProcessOptions): Promise<LaunchResult> {\n  const stdio: ('ignore' | 'pipe')[] = options.stdio === 'pipe' ? ['ignore', 'pipe', 'pipe', 'pipe', 'pipe'] : ['pipe', 'pipe', 'pipe'];\n  options.log(`<launching> ${options.command} ${options.args ? options.args.join(' ') : ''}`);\n  const spawnOptions: childProcess.SpawnOptions = {\n    // On non-windows platforms, `detached: true` makes child process a leader of a new\n    // process group, making it possible to kill child process tree with `.kill(-pid)` command.\n    // @see https://nodejs.org/api/child_process.html#child_process_options_detached\n    detached: process.platform !== 'win32',\n    env: (options.env as {[key: string]: string}),\n    cwd: options.cwd,\n    shell: options.shell,\n    stdio,\n  };\n  const spawnedProcess = childProcess.spawn(options.command, options.args || [], spawnOptions);\n\n  const cleanup = async () => {\n    options.log(`[pid=${spawnedProcess.pid || 'N/A'}] starting temporary directories cleanup`);\n    const errors = await removeFolders(options.tempDirectories);\n    for (let i = 0; i < options.tempDirectories.length; ++i) {\n      if (errors[i])\n        options.log(`[pid=${spawnedProcess.pid || 'N/A'}] exception while removing ${options.tempDirectories[i]}: ${errors[i]}`);\n    }\n    options.log(`[pid=${spawnedProcess.pid || 'N/A'}] finished temporary directories cleanup`);\n  };\n\n  // Prevent Unhandled 'error' event.\n  spawnedProcess.on('error', () => {});\n\n  if (!spawnedProcess.pid) {\n    let failed: (e: Error) => void;\n    const failedPromise = new Promise<Error>((f, r) => failed = f);\n    spawnedProcess.once('error', error => {\n      failed(new Error('Failed to launch: ' + error));\n    });\n    return cleanup().then(() => failedPromise).then(e => Promise.reject(e));\n  }\n  options.log(`<launched> pid=${spawnedProcess.pid}`);\n\n  const stdout = readline.createInterface({ input: spawnedProcess.stdout! });\n  stdout.on('line', (data: string) => {\n    options.log(`[pid=${spawnedProcess.pid}][out] ` + data);\n  });\n\n  const stderr = readline.createInterface({ input: spawnedProcess.stderr! });\n  stderr.on('line', (data: string) => {\n    options.log(`[pid=${spawnedProcess.pid}][err] ` + data);\n  });\n\n  let processClosed = false;\n  let fulfillCleanup = () => {};\n  const waitForCleanup = new Promise<void>(f => fulfillCleanup = f);\n  spawnedProcess.once('close', (exitCode, signal) => {\n    options.log(`[pid=${spawnedProcess.pid}] <process did exit: exitCode=${exitCode}, signal=${signal}>`);\n    processClosed = true;\n    gracefullyCloseSet.delete(gracefullyClose);\n    killSet.delete(killProcessAndCleanup);\n    removeProcessHandlersIfNeeded();\n    options.onExit(exitCode, signal);\n    // Cleanup as process exits.\n    cleanup().then(fulfillCleanup);\n  });\n\n  addProcessHandlerIfNeeded('exit');\n  if (options.handleSIGINT)\n    addProcessHandlerIfNeeded('SIGINT');\n  if (options.handleSIGTERM)\n    addProcessHandlerIfNeeded('SIGTERM');\n  if (options.handleSIGHUP)\n    addProcessHandlerIfNeeded('SIGHUP');\n  gracefullyCloseSet.add(gracefullyClose);\n  killSet.add(killProcessAndCleanup);\n\n  let gracefullyClosing = false;\n  async function gracefullyClose(): Promise<void> {\n    // We keep listeners until we are done, to handle 'exit' and 'SIGINT' while\n    // asynchronously closing to prevent zombie processes. This might introduce\n    // reentrancy to this function, for example user sends SIGINT second time.\n    // In this case, let's forcefully kill the process.\n    if (gracefullyClosing) {\n      options.log(`[pid=${spawnedProcess.pid}] <forcefully close>`);\n      killProcess();\n      await waitForCleanup;  // Ensure the process is dead and we have cleaned up.\n      return;\n    }\n    gracefullyClosing = true;\n    options.log(`[pid=${spawnedProcess.pid}] <gracefully close start>`);\n    await options.attemptToGracefullyClose().catch(() => killProcess());\n    await waitForCleanup;  // Ensure the process is dead and we have cleaned up.\n    options.log(`[pid=${spawnedProcess.pid}] <gracefully close end>`);\n  }\n\n  // This method has to be sync to be used in the 'exit' event handler.\n  function killProcess() {\n    gracefullyCloseSet.delete(gracefullyClose);\n    killSet.delete(killProcessAndCleanup);\n    removeProcessHandlersIfNeeded();\n    options.log(`[pid=${spawnedProcess.pid}] <kill>`);\n    if (spawnedProcess.pid && !spawnedProcess.killed && !processClosed) {\n      options.log(`[pid=${spawnedProcess.pid}] <will force kill>`);\n      // Force kill the browser.\n      try {\n        if (process.platform === 'win32') {\n          const taskkillProcess = childProcess.spawnSync(`taskkill /pid ${spawnedProcess.pid} /T /F`, { shell: true });\n          const [stdout, stderr] = [taskkillProcess.stdout.toString(), taskkillProcess.stderr.toString()];\n          if (stdout)\n            options.log(`[pid=${spawnedProcess.pid}] taskkill stdout: ${stdout}`);\n          if (stderr)\n            options.log(`[pid=${spawnedProcess.pid}] taskkill stderr: ${stderr}`);\n        } else {\n          process.kill(-spawnedProcess.pid, 'SIGKILL');\n        }\n      } catch (e) {\n        options.log(`[pid=${spawnedProcess.pid}] exception while trying to kill process: ${e}`);\n        // the process might have already stopped\n      }\n    } else {\n      options.log(`[pid=${spawnedProcess.pid}] <skipped force kill spawnedProcess.killed=${spawnedProcess.killed} processClosed=${processClosed}>`);\n    }\n  }\n\n  function killProcessAndCleanup() {\n    killProcess();\n    options.log(`[pid=${spawnedProcess.pid || 'N/A'}] starting temporary directories cleanup`);\n    for (const dir of options.tempDirectories) {\n      try {\n        fs.rmSync(dir, { force: true, recursive: true, maxRetries: 5 });\n      } catch (e) {\n        options.log(`[pid=${spawnedProcess.pid || 'N/A'}] exception while removing ${dir}: ${e}`);\n      }\n    }\n    options.log(`[pid=${spawnedProcess.pid || 'N/A'}] finished temporary directories cleanup`);\n  }\n\n  function killAndWait() {\n    killProcess();\n    return waitForCleanup;\n  }\n\n  return { launchedProcess: spawnedProcess, gracefullyClose, kill: killAndWait };\n}\n\nexport function envArrayToObject(env: { name: string, value: string }[]): Env {\n  const result: Env = {};\n  for (const { name, value } of env)\n    result[name] = value;\n  return result;\n}\n","/**\n * Copyright Microsoft Corporation. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\nconst profileDir = process.env.PWTEST_PROFILE_DIR || '';\n\nlet session: import('inspector').Session;\n\nexport async function startProfiling() {\n  if (!profileDir)\n    return;\n\n  session = new (require('inspector').Session)();\n  session.connect();\n  await new Promise<void>(f => {\n    session.post('Profiler.enable', () => {\n      session.post('Profiler.start', f);\n    });\n  });\n}\n\nexport async function stopProfiling(profileName: string) {\n  if (!profileDir)\n    return;\n\n  await new Promise<void>(f => session.post('Profiler.stop', (err, { profile }) => {\n    if (!err) {\n      fs.mkdirSync(profileDir, { recursive: true });\n      fs.writeFileSync(path.join(profileDir, profileName + '.json'), JSON.stringify(profile));\n    }\n    f();\n  }));\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport EventEmitter from 'events';\nimport net from 'net';\n\nimport { assert } from '../../utils/isomorphic/assert';\nimport { createGuid } from './crypto';\nimport { debugLogger } from './debugLogger';\nimport { createSocket } from './happyEyeballs';\n\nimport type { AddressInfo } from 'net';\n\n// https://tools.ietf.org/html/rfc1928\n\nenum SocksAuth {\n  NO_AUTHENTICATION_REQUIRED = 0x00,\n  GSSAPI = 0x01,\n  USERNAME_PASSWORD = 0x02,\n  NO_ACCEPTABLE_METHODS = 0xFF\n}\n\nenum SocksAddressType {\n  IPv4 = 0x01,\n  FqName = 0x03,\n  IPv6 = 0x04\n}\n\nenum SocksCommand {\n  CONNECT = 0x01,\n  BIND = 0x02,\n  UDP_ASSOCIATE = 0x03\n}\n\nenum SocksReply {\n  Succeeded = 0x00,\n  GeneralServerFailure = 0x01,\n  NotAllowedByRuleSet = 0x02,\n  NetworkUnreachable = 0x03,\n  HostUnreachable = 0x04,\n  ConnectionRefused = 0x05,\n  TtlExpired = 0x06,\n  CommandNotSupported = 0x07,\n  AddressTypeNotSupported = 0x08\n}\n\nexport type SocksSocketRequestedPayload = { uid: string, host: string, port: number };\nexport type SocksSocketConnectedPayload = { uid: string, host: string, port: number };\nexport type SocksSocketDataPayload = { uid: string, data: Buffer };\nexport type SocksSocketErrorPayload = { uid: string, error: string };\nexport type SocksSocketFailedPayload = { uid: string, errorCode: string };\nexport type SocksSocketClosedPayload = { uid: string };\nexport type SocksSocketEndPayload = { uid: string };\n\ninterface SocksConnectionClient {\n  onSocketRequested(payload: SocksSocketRequestedPayload): void;\n  onSocketData(payload: SocksSocketDataPayload): void;\n  onSocketClosed(payload: SocksSocketClosedPayload): void;\n}\n\nclass SocksConnection {\n  private _buffer = Buffer.from([]);\n  private _offset = 0;\n  private _fence = 0;\n  private _fenceCallback: (() => void) | undefined;\n  private _socket: net.Socket;\n  private _boundOnData: (buffer: Buffer) => void;\n  private _uid: string;\n  private _client: SocksConnectionClient;\n\n  constructor(uid: string, socket: net.Socket, client: SocksConnectionClient) {\n    this._uid = uid;\n    this._socket = socket;\n    this._client = client;\n    this._boundOnData = this._onData.bind(this);\n    socket.on('data', this._boundOnData);\n    socket.on('close', () => this._onClose());\n    socket.on('end', () => this._onClose());\n    socket.on('error', () => this._onClose());\n    this._run().catch(() => this._socket.end());\n  }\n\n  async _run() {\n    assert(await this._authenticate());\n    const { command, host, port } = await this._parseRequest();\n    if (command !== SocksCommand.CONNECT) {\n      this._writeBytes(Buffer.from([\n        0x05,\n        SocksReply.CommandNotSupported,\n        0x00, // RSV\n        0x01, // IPv4\n        0x00, 0x00, 0x00, 0x00, // Address\n        0x00, 0x00 // Port\n      ]));\n      return;\n    }\n\n    this._socket.off('data', this._boundOnData);\n    this._client.onSocketRequested({ uid: this._uid, host, port });\n  }\n\n  async _authenticate(): Promise<boolean> {\n    // Request:\n    // +----+----------+----------+\n    // |VER | NMETHODS | METHODS  |\n    // +----+----------+----------+\n    // | 1  |    1     | 1 to 255 |\n    // +----+----------+----------+\n\n    // Response:\n    // +----+--------+\n    // |VER | METHOD |\n    // +----+--------+\n    // | 1  |   1    |\n    // +----+--------+\n\n    const version = await this._readByte();\n    assert(version === 0x05, 'The VER field must be set to x05 for this version of the protocol, was ' + version);\n\n    const nMethods = await this._readByte();\n    assert(nMethods, 'No authentication methods specified');\n\n    const methods = await this._readBytes(nMethods);\n    for (const method of methods) {\n      if (method === 0) {\n        this._writeBytes(Buffer.from([version, method]));\n        return true;\n      }\n    }\n    this._writeBytes(Buffer.from([version, SocksAuth.NO_ACCEPTABLE_METHODS]));\n    return false;\n  }\n\n  async _parseRequest(): Promise<{ host: string, port: number, command: SocksCommand }> {\n    // Request.\n    // +----+-----+-------+------+----------+----------+\n    // |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |\n    // +----+-----+-------+------+----------+----------+\n    // | 1  |  1  | X'00' |  1   | Variable |    2     |\n    // +----+-----+-------+------+----------+----------+\n\n    // Response.\n    // +----+-----+-------+------+----------+----------+\n    // |VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |\n    // +----+-----+-------+------+----------+----------+\n    // | 1  |  1  | X'00' |  1   | Variable |    2     |\n    // +----+-----+-------+------+----------+----------+\n\n    const version = await this._readByte();\n    assert(version === 0x05, 'The VER field must be set to x05 for this version of the protocol, was ' + version);\n\n    const command = await this._readByte();\n    await this._readByte();  // skip reserved.\n    const addressType = await this._readByte();\n    let host = '';\n    switch (addressType) {\n      case SocksAddressType.IPv4:\n        host = (await this._readBytes(4)).join('.');\n        break;\n      case SocksAddressType.FqName:\n        const length = await this._readByte();\n        host = (await this._readBytes(length)).toString();\n        break;\n      case SocksAddressType.IPv6:\n        const bytes = await this._readBytes(16);\n        const tokens: string[] = [];\n        for (let i = 0; i < 8; ++i)\n          tokens.push(bytes.readUInt16BE(i * 2).toString(16));\n        host = tokens.join(':');\n        break;\n    }\n    const port = (await this._readBytes(2)).readUInt16BE(0);\n\n    this._buffer = Buffer.from([]);\n    this._offset = 0;\n    this._fence = 0;\n\n    return {\n      command,\n      host,\n      port\n    };\n  }\n\n  private async _readByte(): Promise<number> {\n    const buffer = await this._readBytes(1);\n    return buffer[0];\n  }\n\n  private async _readBytes(length: number): Promise<Buffer> {\n    this._fence = this._offset + length;\n    if (!this._buffer || this._buffer.length < this._fence)\n      await new Promise<void>(f => this._fenceCallback = f);\n    this._offset += length;\n    return this._buffer.slice(this._offset - length, this._offset);\n  }\n\n  private _writeBytes(buffer: Buffer) {\n    if (this._socket.writable)\n      this._socket.write(buffer);\n  }\n\n  private _onClose() {\n    this._client.onSocketClosed({ uid: this._uid });\n  }\n\n  private _onData(buffer: Buffer) {\n    this._buffer = Buffer.concat([this._buffer, buffer]);\n    if (this._fenceCallback && this._buffer.length >= this._fence) {\n      const callback = this._fenceCallback;\n      this._fenceCallback = undefined;\n      callback();\n    }\n  }\n\n  socketConnected(host: string, port: number) {\n    this._writeBytes(Buffer.from([\n      0x05,\n      SocksReply.Succeeded,\n      0x00, // RSV\n      ...ipToSocksAddress(host), // ATYP, Address\n      port >> 8, port & 0xFF // Port\n    ]));\n    this._socket.on('data', data => this._client.onSocketData({ uid: this._uid, data }));\n  }\n\n  socketFailed(errorCode: string) {\n    const buffer = Buffer.from([\n      0x05,\n      0,\n      0x00, // RSV\n      ...ipToSocksAddress('0.0.0.0'), // ATYP, Address\n      0, 0 // Port\n    ]);\n    switch (errorCode) {\n      case 'ENOENT':\n      case 'ENOTFOUND':\n      case 'ETIMEDOUT':\n      case 'EHOSTUNREACH':\n        buffer[1] = SocksReply.HostUnreachable;\n        break;\n      case 'ENETUNREACH':\n        buffer[1] = SocksReply.NetworkUnreachable;\n        break;\n      case 'ECONNREFUSED':\n        buffer[1] = SocksReply.ConnectionRefused;\n        break;\n      case 'ERULESET':\n        buffer[1] = SocksReply.NotAllowedByRuleSet;\n        break;\n    }\n    this._writeBytes(buffer);\n    this._socket.end();\n  }\n\n  sendData(data: Buffer) {\n    this._socket.write(data);\n  }\n\n  end() {\n    this._socket.end();\n  }\n\n  error(error: string) {\n    this._socket.destroy(new Error(error));\n  }\n}\n\nfunction hexToNumber(hex: string): number {\n  // Note: parseInt has a few issues including ignoring trailing characters and allowing leading 0x.\n  return [...hex].reduce((value, digit) => {\n    const code = digit.charCodeAt(0);\n    if (code >= 48 && code <= 57) // 0..9\n      return value + code;\n    if (code >= 97 && code <= 102) // a..f\n      return value + (code - 97) + 10;\n    if (code >= 65 && code <= 70) // A..F\n      return value + (code - 65) + 10;\n    throw new Error('Invalid IPv6 token ' + hex);\n  }, 0);\n}\n\nfunction ipToSocksAddress(address: string): number[] {\n  if (net.isIPv4(address)) {\n    return [\n      0x01, // IPv4\n      ...address.split('.', 4).map(t => (+t) & 0xFF), // Address\n    ];\n  }\n  if (net.isIPv6(address)) {\n    const result = [0x04]; // IPv6\n    const tokens = address.split(':', 8);\n    while (tokens.length < 8)\n      tokens.unshift('');\n    for (const token of tokens) {\n      const value = hexToNumber(token);\n      result.push((value >> 8) & 0xFF, value & 0xFF);  // Big-endian\n    }\n    return result;\n  }\n  throw new Error('Only IPv4 and IPv6 addresses are supported');\n}\n\ntype PatternMatcher = (host: string, port: number) => boolean;\n\nfunction starMatchToRegex(pattern: string) {\n  const source = pattern.split('*').map(s => {\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping\n    return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n  }).join('.*');\n  return new RegExp('^' + source + '$');\n}\n\n// This follows \"Proxy bypass rules\" syntax without implicit and negative rules.\n// https://source.chromium.org/chromium/chromium/src/+/main:net/docs/proxy.md;l=331\nexport function parsePattern(pattern: string | undefined): PatternMatcher {\n  if (!pattern)\n    return () => false;\n\n  const matchers: PatternMatcher[] = pattern.split(',').map(token => {\n    const match = token.match(/^(.*?)(?::(\\d+))?$/);\n    if (!match)\n      throw new Error(`Unsupported token \"${token}\" in pattern \"${pattern}\"`);\n    const tokenPort = match[2] ? +match[2] : undefined;\n    const portMatches = (port: number) => tokenPort === undefined || tokenPort === port;\n    let tokenHost = match[1];\n\n    if (tokenHost === '<loopback>') {\n      return (host, port) => {\n        if (!portMatches(port))\n          return false;\n        return host === 'localhost'\n            || host.endsWith('.localhost')\n            || host === '127.0.0.1'\n            || host === '[::1]';\n      };\n    }\n\n    if (tokenHost === '*')\n      return (host, port) => portMatches(port);\n\n    if (net.isIPv4(tokenHost) || net.isIPv6(tokenHost))\n      return (host, port) => host === tokenHost && portMatches(port);\n\n    if (tokenHost[0] === '.')\n      tokenHost = '*' + tokenHost;\n    const tokenRegex = starMatchToRegex(tokenHost);\n    return (host, port) => {\n      if (!portMatches(port))\n        return false;\n      if (net.isIPv4(host) || net.isIPv6(host))\n        return false;\n      return !!host.match(tokenRegex);\n    };\n  });\n  return (host, port) => matchers.some(matcher => matcher(host, port));\n}\n\nexport class SocksProxy extends EventEmitter implements SocksConnectionClient {\n  static Events = {\n    SocksRequested: 'socksRequested',\n    SocksData: 'socksData',\n    SocksClosed: 'socksClosed',\n  };\n\n  private _server: net.Server;\n  private _connections = new Map<string, SocksConnection>();\n  private _sockets = new Set<net.Socket>();\n  private _closed = false;\n  private _port: number | undefined;\n  private _patternMatcher: PatternMatcher = () => false;\n  private _directSockets = new Map<string, net.Socket>();\n\n  constructor() {\n    super();\n    this._server = new net.Server((socket: net.Socket) => {\n      const uid = createGuid();\n      const connection = new SocksConnection(uid, socket, this);\n      this._connections.set(uid, connection);\n    });\n    this._server.on('connection', socket => {\n      if (this._closed) {\n        socket.destroy();\n        return;\n      }\n      this._sockets.add(socket);\n      socket.once('close', () => this._sockets.delete(socket));\n    });\n  }\n\n  setPattern(pattern: string | undefined) {\n    try {\n      this._patternMatcher = parsePattern(pattern);\n    } catch (e) {\n      this._patternMatcher = () => false;\n    }\n  }\n\n  private async _handleDirect(request: SocksSocketRequestedPayload) {\n    try {\n      const socket = await createSocket(request.host, request.port);\n      socket.on('data', data => this._connections.get(request.uid)?.sendData(data));\n      socket.on('error', error => {\n        this._connections.get(request.uid)?.error(error.message);\n        this._directSockets.delete(request.uid);\n      });\n      socket.on('end', () => {\n        this._connections.get(request.uid)?.end();\n        this._directSockets.delete(request.uid);\n      });\n      const localAddress = socket.localAddress;\n      const localPort = socket.localPort;\n      this._directSockets.set(request.uid, socket);\n      this._connections.get(request.uid)?.socketConnected(localAddress!, localPort!);\n    } catch (error) {\n      this._connections.get(request.uid)?.socketFailed(error.code);\n    }\n  }\n\n  port() {\n    return this._port;\n  }\n\n  async listen(port: number, hostname?: string): Promise<number> {\n    return new Promise(f => {\n      this._server.listen(port, hostname, () => {\n        const port = (this._server.address() as AddressInfo).port;\n        this._port = port;\n        f(port);\n      });\n    });\n  }\n\n  async close() {\n    if (this._closed)\n      return;\n    this._closed = true;\n    for (const socket of this._sockets)\n      socket.destroy();\n    this._sockets.clear();\n    await new Promise(f => this._server.close(f));\n  }\n\n  onSocketRequested(payload: SocksSocketRequestedPayload) {\n    if (!this._patternMatcher(payload.host, payload.port)) {\n      this._handleDirect(payload);\n      return;\n    }\n    this.emit(SocksProxy.Events.SocksRequested, payload);\n  }\n\n  onSocketData(payload: SocksSocketDataPayload): void {\n    const direct = this._directSockets.get(payload.uid);\n    if (direct) {\n      direct.write(payload.data);\n      return;\n    }\n    this.emit(SocksProxy.Events.SocksData, payload);\n  }\n\n  onSocketClosed(payload: SocksSocketClosedPayload): void {\n    const direct = this._directSockets.get(payload.uid);\n    if (direct) {\n      direct.destroy();\n      this._directSockets.delete(payload.uid);\n      return;\n    }\n    this.emit(SocksProxy.Events.SocksClosed, payload);\n  }\n\n  socketConnected({ uid, host, port }: SocksSocketConnectedPayload) {\n    this._connections.get(uid)?.socketConnected(host, port);\n  }\n\n  socketFailed({ uid, errorCode }: SocksSocketFailedPayload) {\n    this._connections.get(uid)?.socketFailed(errorCode);\n  }\n\n  sendSocketData({ uid, data }: SocksSocketDataPayload) {\n    this._connections.get(uid)?.sendData(data);\n  }\n\n  sendSocketEnd({ uid }: SocksSocketEndPayload) {\n    this._connections.get(uid)?.end();\n  }\n\n  sendSocketError({ uid, error }: SocksSocketErrorPayload) {\n    this._connections.get(uid)?.error(error);\n  }\n}\n\nexport class SocksProxyHandler extends EventEmitter {\n  static Events = {\n    SocksConnected: 'socksConnected',\n    SocksData: 'socksData',\n    SocksError: 'socksError',\n    SocksFailed: 'socksFailed',\n    SocksEnd: 'socksEnd',\n  };\n\n  private _sockets = new Map<string, net.Socket>();\n  private _patternMatcher: PatternMatcher = () => false;\n  private _redirectPortForTest: number | undefined;\n\n  constructor(pattern: string | undefined, redirectPortForTest?: number) {\n    super();\n    this._patternMatcher = parsePattern(pattern);\n    this._redirectPortForTest = redirectPortForTest;\n  }\n\n  cleanup() {\n    for (const uid of this._sockets.keys())\n      this.socketClosed({ uid });\n  }\n\n  async socketRequested({ uid, host, port }: SocksSocketRequestedPayload): Promise<void> {\n    debugLogger.log('socks', `[${uid}] => request ${host}:${port}`);\n    if (!this._patternMatcher(host, port)) {\n      const payload: SocksSocketFailedPayload = { uid, errorCode: 'ERULESET' };\n      debugLogger.log('socks', `[${uid}] <= pattern error ${payload.errorCode}`);\n      this.emit(SocksProxyHandler.Events.SocksFailed, payload);\n      return;\n    }\n\n    if (host === 'local.playwright')\n      host = 'localhost';\n    try {\n      if (this._redirectPortForTest)\n        port = this._redirectPortForTest;\n      const socket = await createSocket(host, port);\n      socket.on('data', data => {\n        const payload: SocksSocketDataPayload = { uid, data };\n        this.emit(SocksProxyHandler.Events.SocksData, payload);\n      });\n      socket.on('error', error => {\n        const payload: SocksSocketErrorPayload = { uid, error: error.message };\n        debugLogger.log('socks', `[${uid}] <= network socket error ${payload.error}`);\n        this.emit(SocksProxyHandler.Events.SocksError, payload);\n        this._sockets.delete(uid);\n      });\n      socket.on('end', () => {\n        const payload: SocksSocketEndPayload = { uid };\n        debugLogger.log('socks', `[${uid}] <= network socket closed`);\n        this.emit(SocksProxyHandler.Events.SocksEnd, payload);\n        this._sockets.delete(uid);\n      });\n      const localAddress = socket.localAddress;\n      const localPort = socket.localPort;\n      this._sockets.set(uid, socket);\n      const payload: SocksSocketConnectedPayload = { uid, host: localAddress!, port: localPort! };\n      debugLogger.log('socks', `[${uid}] <= connected to network ${payload.host}:${payload.port}`);\n      this.emit(SocksProxyHandler.Events.SocksConnected, payload);\n    } catch (error) {\n      const payload: SocksSocketFailedPayload = { uid, errorCode: error.code };\n      debugLogger.log('socks', `[${uid}] <= connect error ${payload.errorCode}`);\n      this.emit(SocksProxyHandler.Events.SocksFailed, payload);\n    }\n  }\n\n  sendSocketData({ uid, data }: SocksSocketDataPayload): void {\n    this._sockets.get(uid)?.write(data);\n  }\n\n  socketClosed({ uid }: SocksSocketClosedPayload): void {\n    debugLogger.log('socks', `[${uid}] <= browser socket closed`);\n    this._sockets.get(uid)?.destroy();\n    this._sockets.delete(uid);\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// See https://joel.tools/microtasks/\nexport function makeWaitForNextTask() {\n  // As of Mar 2021, Electron v12 doesn't create new task with `setImmediate` despite\n  // using Node 14 internally, so we fallback to `setTimeout(0)` instead.\n  // @see https://github.com/electron/electron/issues/28261\n  if ((process.versions as any).electron)\n    return (callback: () => void) => setTimeout(callback, 0);\n  if (parseInt(process.versions.node, 10) >= 11)\n    return setImmediate;\n\n  // Unlike Node 11, Node 10 and less have a bug with Task and MicroTask execution order:\n  // - https://github.com/nodejs/node/issues/22257\n  //\n  // So we can't simply run setImmediate to dispatch code in a following task.\n  // However, we can run setImmediate from-inside setImmediate to make sure we're getting\n  // in the following task.\n\n  let spinning = false;\n  const callbacks: (() => void)[] = [];\n  const loop = () => {\n    const callback = callbacks.shift();\n    if (!callback) {\n      spinning = false;\n      return;\n    }\n    setImmediate(loop);\n    // Make sure to call callback() as the last thing since it's\n    // untrusted code that might throw.\n    callback();\n  };\n\n  return (callback: () => void) => {\n    callbacks.push(callback);\n    if (!spinning) {\n      spinning = true;\n      setImmediate(loop);\n    }\n  };\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { yauzl } from '../../zipBundle';\n\nimport type { Entry, UnzipFile } from '../../zipBundle';\n\nexport class ZipFile {\n  private _fileName: string;\n  private _zipFile: UnzipFile | undefined;\n  private _entries = new Map<string, Entry>();\n  private _openedPromise: Promise<void>;\n\n  constructor(fileName: string) {\n    this._fileName = fileName;\n    this._openedPromise = this._open();\n  }\n\n  private async _open() {\n    await new Promise<UnzipFile>((fulfill, reject) => {\n      yauzl.open(this._fileName, { autoClose: false }, (e, z) => {\n        if (e) {\n          reject(e);\n          return;\n        }\n        this._zipFile = z;\n        this._zipFile!.on('entry', (entry: Entry) => {\n          this._entries.set(entry.fileName, entry);\n        });\n        this._zipFile!.on('end', fulfill);\n      });\n    });\n  }\n\n  async entries(): Promise<string[]> {\n    await this._openedPromise;\n    return [...this._entries.keys()];\n  }\n\n  async read(entryPath: string): Promise<Buffer> {\n    await this._openedPromise;\n    const entry = this._entries.get(entryPath)!;\n    if (!entry)\n      throw new Error(`${entryPath} not found in file ${this._fileName}`);\n\n    return new Promise((resolve, reject) => {\n      this._zipFile!.openReadStream(entry, (error, readStream) => {\n        if (error || !readStream) {\n          reject(error || 'Entry not found');\n          return;\n        }\n\n        const buffers: Buffer[] = [];\n        readStream.on('data', data => buffers.push(data));\n        readStream.on('end', () => resolve(Buffer.concat(buffers)));\n      });\n    });\n  }\n\n  close() {\n    this._zipFile?.close();\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport * as util from 'util';\n\nimport { downloadBrowserWithProgressBar, logPolitely } from './browserFetcher';\nimport { dockerVersion, readDockerVersionSync, transformCommandsForRoot } from './dependencies';\nimport { installDependenciesLinux, installDependenciesWindows, validateDependenciesLinux, validateDependenciesWindows } from './dependencies';\nimport { calculateSha1, getAsBooleanFromENV, getFromENV, getPackageManagerExecCommand } from '../../utils';\nimport { wrapInASCIIBox } from '../utils/ascii';\nimport { debugLogger } from '../utils/debugLogger';\nimport {  hostPlatform, isOfficiallySupportedPlatform } from '../utils/hostPlatform';\nimport { fetchData, NET_DEFAULT_TIMEOUT } from '../utils/network';\nimport { spawnAsync } from '../utils/spawnAsync';\nimport { getEmbedderName } from '../utils/userAgent';\nimport { lockfile } from '../../utilsBundle';\nimport { canAccessFile, existsAsync, removeFolders } from '../utils/fileUtils';\n\nimport type { DependencyGroup } from './dependencies';\nimport type { HostPlatform } from '../utils/hostPlatform';\n\nexport { writeDockerVersion } from './dependencies';\n\nconst PACKAGE_PATH = path.join(__dirname, '..', '..', '..');\nconst BIN_PATH = path.join(__dirname, '..', '..', '..', 'bin');\n\nconst PLAYWRIGHT_CDN_MIRRORS = [\n  'https://cdn.playwright.dev/dbazure/download/playwright', // ESRP CDN\n  'https://playwright.download.prss.microsoft.com/dbazure/download/playwright', // Directly hit ESRP CDN\n  'https://cdn.playwright.dev', // Hit the Storage Bucket directly\n];\n\nif (process.env.PW_TEST_CDN_THAT_SHOULD_WORK) {\n  for (let i = 0; i < PLAYWRIGHT_CDN_MIRRORS.length; i++) {\n    const cdn = PLAYWRIGHT_CDN_MIRRORS[i];\n    if (cdn !== process.env.PW_TEST_CDN_THAT_SHOULD_WORK) {\n      const parsedCDN = new URL(cdn);\n      parsedCDN.hostname = parsedCDN.hostname + '.does-not-resolve.playwright.dev';\n      PLAYWRIGHT_CDN_MIRRORS[i] = parsedCDN.toString();\n    }\n  }\n}\n\nconst EXECUTABLE_PATHS = {\n  'chromium': {\n    'linux': ['chrome-linux', 'chrome'],\n    'mac': ['chrome-mac', 'Chromium.app', 'Contents', 'MacOS', 'Chromium'],\n    'win': ['chrome-win', 'chrome.exe'],\n  },\n  'chromium-headless-shell': {\n    'linux': ['chrome-linux', 'headless_shell'],\n    'mac': ['chrome-mac', 'headless_shell'],\n    'win': ['chrome-win', 'headless_shell.exe'],\n  },\n  'firefox': {\n    'linux': ['firefox', 'firefox'],\n    'mac': ['firefox', 'Nightly.app', 'Contents', 'MacOS', 'firefox'],\n    'win': ['firefox', 'firefox.exe'],\n  },\n  'webkit': {\n    'linux': ['pw_run.sh'],\n    'mac': ['pw_run.sh'],\n    'win': ['Playwright.exe'],\n  },\n  'ffmpeg': {\n    'linux': ['ffmpeg-linux'],\n    'mac': ['ffmpeg-mac'],\n    'win': ['ffmpeg-win64.exe'],\n  },\n  'winldd': {\n    'linux': undefined,\n    'mac': undefined,\n    'win': ['PrintDeps.exe'],\n  },\n};\n\ntype DownloadPaths = Record<HostPlatform, string | undefined>;\nconst DOWNLOAD_PATHS: Record<BrowserName | InternalTool, DownloadPaths> = {\n  'chromium': {\n    '<unknown>': undefined,\n    'ubuntu18.04-x64': undefined,\n    'ubuntu20.04-x64': 'builds/chromium/%s/chromium-linux.zip',\n    'ubuntu22.04-x64': 'builds/chromium/%s/chromium-linux.zip',\n    'ubuntu24.04-x64': 'builds/chromium/%s/chromium-linux.zip',\n    'ubuntu18.04-arm64': undefined,\n    'ubuntu20.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',\n    'ubuntu22.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',\n    'ubuntu24.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',\n    'debian11-x64': 'builds/chromium/%s/chromium-linux.zip',\n    'debian11-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',\n    'debian12-x64': 'builds/chromium/%s/chromium-linux.zip',\n    'debian12-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',\n    'mac10.13': 'builds/chromium/%s/chromium-mac.zip',\n    'mac10.14': 'builds/chromium/%s/chromium-mac.zip',\n    'mac10.15': 'builds/chromium/%s/chromium-mac.zip',\n    'mac11': 'builds/chromium/%s/chromium-mac.zip',\n    'mac11-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',\n    'mac12': 'builds/chromium/%s/chromium-mac.zip',\n    'mac12-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',\n    'mac13': 'builds/chromium/%s/chromium-mac.zip',\n    'mac13-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',\n    'mac14': 'builds/chromium/%s/chromium-mac.zip',\n    'mac14-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',\n    'mac15': 'builds/chromium/%s/chromium-mac.zip',\n    'mac15-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',\n    'win64': 'builds/chromium/%s/chromium-win64.zip',\n  },\n  'chromium-headless-shell': {\n    '<unknown>': undefined,\n    'ubuntu18.04-x64': undefined,\n    'ubuntu20.04-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',\n    'ubuntu22.04-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',\n    'ubuntu24.04-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',\n    'ubuntu18.04-arm64': undefined,\n    'ubuntu20.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',\n    'ubuntu22.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',\n    'ubuntu24.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',\n    'debian11-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',\n    'debian11-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',\n    'debian12-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',\n    'debian12-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',\n    'mac10.13': undefined,\n    'mac10.14': undefined,\n    'mac10.15': undefined,\n    'mac11': 'builds/chromium/%s/chromium-headless-shell-mac.zip',\n    'mac11-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',\n    'mac12': 'builds/chromium/%s/chromium-headless-shell-mac.zip',\n    'mac12-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',\n    'mac13': 'builds/chromium/%s/chromium-headless-shell-mac.zip',\n    'mac13-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',\n    'mac14': 'builds/chromium/%s/chromium-headless-shell-mac.zip',\n    'mac14-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',\n    'mac15': 'builds/chromium/%s/chromium-headless-shell-mac.zip',\n    'mac15-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',\n    'win64': 'builds/chromium/%s/chromium-headless-shell-win64.zip',\n  },\n  'chromium-tip-of-tree': {\n    '<unknown>': undefined,\n    'ubuntu18.04-x64': undefined,\n    'ubuntu20.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',\n    'ubuntu22.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',\n    'ubuntu24.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',\n    'ubuntu18.04-arm64': undefined,\n    'ubuntu20.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',\n    'ubuntu22.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',\n    'ubuntu24.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',\n    'debian11-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',\n    'debian11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',\n    'debian12-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',\n    'debian12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',\n    'mac10.13': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',\n    'mac10.14': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',\n    'mac10.15': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',\n    'mac11': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',\n    'mac11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',\n    'mac12': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',\n    'mac12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',\n    'mac13': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',\n    'mac13-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',\n    'mac14': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',\n    'mac14-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',\n    'mac15': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',\n    'mac15-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',\n    'win64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-win64.zip',\n  },\n  'chromium-tip-of-tree-headless-shell': {\n    '<unknown>': undefined,\n    'ubuntu18.04-x64': undefined,\n    'ubuntu20.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',\n    'ubuntu22.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',\n    'ubuntu24.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',\n    'ubuntu18.04-arm64': undefined,\n    'ubuntu20.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',\n    'ubuntu22.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',\n    'ubuntu24.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',\n    'debian11-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',\n    'debian11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',\n    'debian12-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',\n    'debian12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',\n    'mac10.13': undefined,\n    'mac10.14': undefined,\n    'mac10.15': undefined,\n    'mac11': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',\n    'mac11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',\n    'mac12': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',\n    'mac12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',\n    'mac13': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',\n    'mac13-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',\n    'mac14': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',\n    'mac14-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',\n    'mac15': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',\n    'mac15-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',\n    'win64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-win64.zip',\n  },\n  'firefox': {\n    '<unknown>': undefined,\n    'ubuntu18.04-x64': undefined,\n    'ubuntu20.04-x64': 'builds/firefox/%s/firefox-ubuntu-20.04.zip',\n    'ubuntu22.04-x64': 'builds/firefox/%s/firefox-ubuntu-22.04.zip',\n    'ubuntu24.04-x64': 'builds/firefox/%s/firefox-ubuntu-24.04.zip',\n    'ubuntu18.04-arm64': undefined,\n    'ubuntu20.04-arm64': 'builds/firefox/%s/firefox-ubuntu-20.04-arm64.zip',\n    'ubuntu22.04-arm64': 'builds/firefox/%s/firefox-ubuntu-22.04-arm64.zip',\n    'ubuntu24.04-arm64': 'builds/firefox/%s/firefox-ubuntu-24.04-arm64.zip',\n    'debian11-x64': 'builds/firefox/%s/firefox-debian-11.zip',\n    'debian11-arm64': 'builds/firefox/%s/firefox-debian-11-arm64.zip',\n    'debian12-x64': 'builds/firefox/%s/firefox-debian-12.zip',\n    'debian12-arm64': 'builds/firefox/%s/firefox-debian-12-arm64.zip',\n    'mac10.13': 'builds/firefox/%s/firefox-mac.zip',\n    'mac10.14': 'builds/firefox/%s/firefox-mac.zip',\n    'mac10.15': 'builds/firefox/%s/firefox-mac.zip',\n    'mac11': 'builds/firefox/%s/firefox-mac.zip',\n    'mac11-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip',\n    'mac12': 'builds/firefox/%s/firefox-mac.zip',\n    'mac12-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip',\n    'mac13': 'builds/firefox/%s/firefox-mac.zip',\n    'mac13-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip',\n    'mac14': 'builds/firefox/%s/firefox-mac.zip',\n    'mac14-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip',\n    'mac15': 'builds/firefox/%s/firefox-mac.zip',\n    'mac15-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip',\n    'win64': 'builds/firefox/%s/firefox-win64.zip',\n  },\n  'firefox-beta': {\n    '<unknown>': undefined,\n    'ubuntu18.04-x64': undefined,\n    'ubuntu20.04-x64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-20.04.zip',\n    'ubuntu22.04-x64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-22.04.zip',\n    'ubuntu24.04-x64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-24.04.zip',\n    'ubuntu18.04-arm64': undefined,\n    'ubuntu20.04-arm64': undefined,\n    'ubuntu22.04-arm64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-22.04-arm64.zip',\n    'ubuntu24.04-arm64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-24.04-arm64.zip',\n    'debian11-x64': 'builds/firefox-beta/%s/firefox-beta-debian-11.zip',\n    'debian11-arm64': 'builds/firefox-beta/%s/firefox-beta-debian-11-arm64.zip',\n    'debian12-x64': 'builds/firefox-beta/%s/firefox-beta-debian-12.zip',\n    'debian12-arm64': 'builds/firefox-beta/%s/firefox-beta-debian-12-arm64.zip',\n    'mac10.13': 'builds/firefox-beta/%s/firefox-beta-mac.zip',\n    'mac10.14': 'builds/firefox-beta/%s/firefox-beta-mac.zip',\n    'mac10.15': 'builds/firefox-beta/%s/firefox-beta-mac.zip',\n    'mac11': 'builds/firefox-beta/%s/firefox-beta-mac.zip',\n    'mac11-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip',\n    'mac12': 'builds/firefox-beta/%s/firefox-beta-mac.zip',\n    'mac12-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip',\n    'mac13': 'builds/firefox-beta/%s/firefox-beta-mac.zip',\n    'mac13-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip',\n    'mac14': 'builds/firefox-beta/%s/firefox-beta-mac.zip',\n    'mac14-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip',\n    'mac15': 'builds/firefox-beta/%s/firefox-beta-mac.zip',\n    'mac15-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip',\n    'win64': 'builds/firefox-beta/%s/firefox-beta-win64.zip',\n  },\n  'webkit': {\n    '<unknown>': undefined,\n    'ubuntu18.04-x64': undefined,\n    'ubuntu20.04-x64': 'builds/webkit/%s/webkit-ubuntu-20.04.zip',\n    'ubuntu22.04-x64': 'builds/webkit/%s/webkit-ubuntu-22.04.zip',\n    'ubuntu24.04-x64': 'builds/webkit/%s/webkit-ubuntu-24.04.zip',\n    'ubuntu18.04-arm64': undefined,\n    'ubuntu20.04-arm64': 'builds/webkit/%s/webkit-ubuntu-20.04-arm64.zip',\n    'ubuntu22.04-arm64': 'builds/webkit/%s/webkit-ubuntu-22.04-arm64.zip',\n    'ubuntu24.04-arm64': 'builds/webkit/%s/webkit-ubuntu-24.04-arm64.zip',\n    'debian11-x64': 'builds/webkit/%s/webkit-debian-11.zip',\n    'debian11-arm64': 'builds/webkit/%s/webkit-debian-11-arm64.zip',\n    'debian12-x64': 'builds/webkit/%s/webkit-debian-12.zip',\n    'debian12-arm64': 'builds/webkit/%s/webkit-debian-12-arm64.zip',\n    'mac10.13': undefined,\n    'mac10.14': 'builds/deprecated-webkit-mac-10.14/%s/deprecated-webkit-mac-10.14.zip',\n    'mac10.15': 'builds/deprecated-webkit-mac-10.15/%s/deprecated-webkit-mac-10.15.zip',\n    'mac11': 'builds/webkit/%s/webkit-mac-11.zip',\n    'mac11-arm64': 'builds/webkit/%s/webkit-mac-11-arm64.zip',\n    'mac12': 'builds/webkit/%s/webkit-mac-12.zip',\n    'mac12-arm64': 'builds/webkit/%s/webkit-mac-12-arm64.zip',\n    'mac13': 'builds/webkit/%s/webkit-mac-13.zip',\n    'mac13-arm64': 'builds/webkit/%s/webkit-mac-13-arm64.zip',\n    'mac14': 'builds/webkit/%s/webkit-mac-14.zip',\n    'mac14-arm64': 'builds/webkit/%s/webkit-mac-14-arm64.zip',\n    'mac15': 'builds/webkit/%s/webkit-mac-15.zip',\n    'mac15-arm64': 'builds/webkit/%s/webkit-mac-15-arm64.zip',\n    'win64': 'builds/webkit/%s/webkit-win64.zip',\n  },\n  'ffmpeg': {\n    '<unknown>': undefined,\n    'ubuntu18.04-x64': undefined,\n    'ubuntu20.04-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip',\n    'ubuntu22.04-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip',\n    'ubuntu24.04-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip',\n    'ubuntu18.04-arm64': undefined,\n    'ubuntu20.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip',\n    'ubuntu22.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip',\n    'ubuntu24.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip',\n    'debian11-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip',\n    'debian11-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip',\n    'debian12-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip',\n    'debian12-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip',\n    'mac10.13': 'builds/ffmpeg/%s/ffmpeg-mac.zip',\n    'mac10.14': 'builds/ffmpeg/%s/ffmpeg-mac.zip',\n    'mac10.15': 'builds/ffmpeg/%s/ffmpeg-mac.zip',\n    'mac11': 'builds/ffmpeg/%s/ffmpeg-mac.zip',\n    'mac11-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip',\n    'mac12': 'builds/ffmpeg/%s/ffmpeg-mac.zip',\n    'mac12-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip',\n    'mac13': 'builds/ffmpeg/%s/ffmpeg-mac.zip',\n    'mac13-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip',\n    'mac14': 'builds/ffmpeg/%s/ffmpeg-mac.zip',\n    'mac14-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip',\n    'mac15': 'builds/ffmpeg/%s/ffmpeg-mac.zip',\n    'mac15-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip',\n    'win64': 'builds/ffmpeg/%s/ffmpeg-win64.zip',\n  },\n  'winldd': {\n    '<unknown>': undefined,\n    'ubuntu18.04-x64': undefined,\n    'ubuntu20.04-x64': undefined,\n    'ubuntu22.04-x64': undefined,\n    'ubuntu24.04-x64': undefined,\n    'ubuntu18.04-arm64': undefined,\n    'ubuntu20.04-arm64': undefined,\n    'ubuntu22.04-arm64': undefined,\n    'ubuntu24.04-arm64': undefined,\n    'debian11-x64': undefined,\n    'debian11-arm64': undefined,\n    'debian12-x64': undefined,\n    'debian12-arm64': undefined,\n    'mac10.13': undefined,\n    'mac10.14': undefined,\n    'mac10.15': undefined,\n    'mac11': undefined,\n    'mac11-arm64': undefined,\n    'mac12': undefined,\n    'mac12-arm64': undefined,\n    'mac13': undefined,\n    'mac13-arm64': undefined,\n    'mac14': undefined,\n    'mac14-arm64': undefined,\n    'mac15': undefined,\n    'mac15-arm64': undefined,\n    'win64': 'builds/winldd/%s/winldd-win64.zip',\n  },\n  'android': {\n    '<unknown>': 'builds/android/%s/android.zip',\n    'ubuntu18.04-x64': undefined,\n    'ubuntu20.04-x64': 'builds/android/%s/android.zip',\n    'ubuntu22.04-x64': 'builds/android/%s/android.zip',\n    'ubuntu24.04-x64': 'builds/android/%s/android.zip',\n    'ubuntu18.04-arm64': undefined,\n    'ubuntu20.04-arm64': 'builds/android/%s/android.zip',\n    'ubuntu22.04-arm64': 'builds/android/%s/android.zip',\n    'ubuntu24.04-arm64': 'builds/android/%s/android.zip',\n    'debian11-x64': 'builds/android/%s/android.zip',\n    'debian11-arm64': 'builds/android/%s/android.zip',\n    'debian12-x64': 'builds/android/%s/android.zip',\n    'debian12-arm64': 'builds/android/%s/android.zip',\n    'mac10.13': 'builds/android/%s/android.zip',\n    'mac10.14': 'builds/android/%s/android.zip',\n    'mac10.15': 'builds/android/%s/android.zip',\n    'mac11': 'builds/android/%s/android.zip',\n    'mac11-arm64': 'builds/android/%s/android.zip',\n    'mac12': 'builds/android/%s/android.zip',\n    'mac12-arm64': 'builds/android/%s/android.zip',\n    'mac13': 'builds/android/%s/android.zip',\n    'mac13-arm64': 'builds/android/%s/android.zip',\n    'mac14': 'builds/android/%s/android.zip',\n    'mac14-arm64': 'builds/android/%s/android.zip',\n    'mac15': 'builds/android/%s/android.zip',\n    'mac15-arm64': 'builds/android/%s/android.zip',\n    'win64': 'builds/android/%s/android.zip',\n  },\n  // TODO(bidi): implement downloads.\n  'bidi': {\n  } as DownloadPaths,\n};\n\nexport const registryDirectory = (() => {\n  let result: string;\n\n  const envDefined = getFromENV('PLAYWRIGHT_BROWSERS_PATH');\n  if (envDefined === '0') {\n    result = path.join(__dirname, '..', '..', '..', '.local-browsers');\n  } else if (envDefined) {\n    result = envDefined;\n  } else {\n    let cacheDirectory: string;\n    if (process.platform === 'linux')\n      cacheDirectory = process.env.XDG_CACHE_HOME || path.join(os.homedir(), '.cache');\n    else if (process.platform === 'darwin')\n      cacheDirectory = path.join(os.homedir(), 'Library', 'Caches');\n    else if (process.platform === 'win32')\n      cacheDirectory = process.env.LOCALAPPDATA || path.join(os.homedir(), 'AppData', 'Local');\n    else\n      throw new Error('Unsupported platform: ' + process.platform);\n    result = path.join(cacheDirectory, 'ms-playwright');\n  }\n\n  if (!path.isAbsolute(result)) {\n    // It is important to resolve to the absolute path:\n    //   - for unzipping to work correctly;\n    //   - so that registry directory matches between installation and execution.\n    // INIT_CWD points to the root of `npm/yarn install` and is probably what\n    // the user meant when typing the relative path.\n    result = path.resolve(getFromENV('INIT_CWD') || process.cwd(), result);\n  }\n  return result;\n})();\n\nfunction isBrowserDirectory(browserDirectory: string): boolean {\n  const baseName = path.basename(browserDirectory);\n  for (const browserName of allDownloadable) {\n    if (baseName.startsWith(browserName.replace(/-/g, '_') + '-'))\n      return true;\n  }\n  return false;\n}\n\ntype BrowsersJSON = {\n  comment: string\n  browsers: {\n    name: string,\n    revision: string,\n    browserVersion?: string,\n    installByDefault: boolean,\n    revisionOverrides?: {[os: string]: string},\n  }[]\n};\n\ntype BrowsersJSONDescriptor = {\n  name: string,\n  revision: string,\n  hasRevisionOverride: boolean\n  browserVersion?: string,\n  installByDefault: boolean,\n  dir: string,\n};\n\nexport type BrowserInfo = {\n  browserName: string,\n  browserVersion: number,\n  browserPath: string\n  referenceDir: string,\n};\n\nfunction readDescriptors(browsersJSON: BrowsersJSON): BrowsersJSONDescriptor[] {\n  return (browsersJSON['browsers']).map(obj => {\n    const name = obj.name;\n    const revisionOverride = (obj.revisionOverrides || {})[hostPlatform];\n    const revision = revisionOverride || obj.revision;\n    const browserDirectoryPrefix = revisionOverride ? `${name}_${hostPlatform}_special` : `${name}`;\n    const descriptor: BrowsersJSONDescriptor = {\n      name,\n      revision,\n      hasRevisionOverride: !!revisionOverride,\n      // We only put browser version for the supported operating systems.\n      browserVersion: revisionOverride ? undefined : obj.browserVersion,\n      installByDefault: !!obj.installByDefault,\n      // Method `isBrowserDirectory` determines directory to be browser iff\n      // it starts with some browser name followed by '-'. Some browser names\n      // are prefixes of others, e.g. 'webkit' is a prefix of `webkit-technology-preview`.\n      // To avoid older registries erroneously removing 'webkit-technology-preview', we have to\n      // ensure that browser folders to never include dashes inside.\n      dir: path.join(registryDirectory, browserDirectoryPrefix.replace(/-/g, '_') + '-' + revision),\n    };\n    return descriptor;\n  });\n}\n\nexport type BrowserName = 'chromium' | 'firefox' | 'webkit' | 'bidi';\ntype InternalTool = 'ffmpeg' | 'winldd' | 'firefox-beta' | 'chromium-tip-of-tree' | 'chromium-headless-shell' | 'chromium-tip-of-tree-headless-shell' | 'android';\ntype BidiChannel = 'moz-firefox' | 'moz-firefox-beta' | 'moz-firefox-nightly' | 'bidi-chrome-canary' | 'bidi-chrome-stable' | 'bidi-chromium';\ntype ChromiumChannel = 'chrome' | 'chrome-beta' | 'chrome-dev' | 'chrome-canary' | 'msedge' | 'msedge-beta' | 'msedge-dev' | 'msedge-canary';\nconst allDownloadable = ['android', 'chromium', 'firefox', 'webkit', 'ffmpeg', 'firefox-beta', 'chromium-tip-of-tree', 'chromium-headless-shell', 'chromium-tip-of-tree-headless-shell'];\n\nexport interface Executable {\n  type: 'browser' | 'tool' | 'channel';\n  name: BrowserName | InternalTool | ChromiumChannel | BidiChannel;\n  browserName: BrowserName | undefined;\n  installType: 'download-by-default' | 'download-on-demand' | 'install-script' | 'none';\n  directory: string | undefined;\n  downloadURLs?: string[],\n  browserVersion?: string,\n  executablePathOrDie(sdkLanguage: string): string;\n  executablePath(sdkLanguage: string): string | undefined;\n  _validateHostRequirements(sdkLanguage: string): Promise<void>;\n}\n\ninterface ExecutableImpl extends Executable {\n  _install?: () => Promise<void>;\n  _dependencyGroup?: DependencyGroup;\n  _isHermeticInstallation?: boolean;\n}\n\nexport class Registry {\n  private _executables: ExecutableImpl[];\n\n  constructor(browsersJSON: BrowsersJSON) {\n    const descriptors = readDescriptors(browsersJSON);\n    const findExecutablePath = (dir: string, name: keyof typeof EXECUTABLE_PATHS) => {\n      let tokens = undefined;\n      if (process.platform === 'linux')\n        tokens = EXECUTABLE_PATHS[name]['linux'];\n      else if (process.platform === 'darwin')\n        tokens = EXECUTABLE_PATHS[name]['mac'];\n      else if (process.platform === 'win32')\n        tokens = EXECUTABLE_PATHS[name]['win'];\n      return tokens ? path.join(dir, ...tokens) : undefined;\n    };\n    const executablePathOrDie = (name: string, e: string | undefined, installByDefault: boolean, sdkLanguage: string) => {\n      if (!e)\n        throw new Error(`${name} is not supported on ${hostPlatform}`);\n      const installCommand = buildPlaywrightCLICommand(sdkLanguage, `install${installByDefault ? '' : ' ' + name}`);\n      if (!canAccessFile(e)) {\n        const currentDockerVersion = readDockerVersionSync();\n        const preferredDockerVersion = currentDockerVersion ? dockerVersion(currentDockerVersion.dockerImageNameTemplate) : null;\n        const isOutdatedDockerImage = currentDockerVersion && preferredDockerVersion && currentDockerVersion.dockerImageName !== preferredDockerVersion.dockerImageName;\n        const prettyMessage = isOutdatedDockerImage ? [\n          `Looks like ${sdkLanguage === 'javascript' ? 'Playwright Test or ' : ''}Playwright was just updated to ${preferredDockerVersion.driverVersion}.`,\n          `Please update docker image as well.`,\n          `-  current: ${currentDockerVersion.dockerImageName}`,\n          `- required: ${preferredDockerVersion.dockerImageName}`,\n          ``,\n          `<3 Playwright Team`,\n        ].join('\\n') : [\n          `Looks like ${sdkLanguage === 'javascript' ? 'Playwright Test or ' : ''}Playwright was just installed or updated.`,\n          `Please run the following command to download new browser${installByDefault ? 's' : ''}:`,\n          ``,\n          `    ${installCommand}`,\n          ``,\n          `<3 Playwright Team`,\n        ].join('\\n');\n        throw new Error(`Executable doesn't exist at ${e}\\n${wrapInASCIIBox(prettyMessage, 1)}`);\n      }\n      return e;\n    };\n    this._executables = [];\n\n    const chromium = descriptors.find(d => d.name === 'chromium')!;\n    const chromiumExecutable = findExecutablePath(chromium.dir, 'chromium');\n    this._executables.push({\n      type: 'browser',\n      name: 'chromium',\n      browserName: 'chromium',\n      directory: chromium.dir,\n      executablePath: () => chromiumExecutable,\n      executablePathOrDie: (sdkLanguage: string) => executablePathOrDie('chromium', chromiumExecutable, chromium.installByDefault, sdkLanguage),\n      installType: chromium.installByDefault ? 'download-by-default' : 'download-on-demand',\n      _validateHostRequirements: (sdkLanguage: string) => this._validateHostRequirements(sdkLanguage, chromium.dir, ['chrome-linux'], [], ['chrome-win']),\n      downloadURLs: this._downloadURLs(chromium),\n      browserVersion: chromium.browserVersion,\n      _install: () => this._downloadExecutable(chromium, chromiumExecutable),\n      _dependencyGroup: 'chromium',\n      _isHermeticInstallation: true,\n    });\n\n    const chromiumHeadlessShell = descriptors.find(d => d.name === 'chromium-headless-shell')!;\n    const chromiumHeadlessShellExecutable = findExecutablePath(chromiumHeadlessShell.dir, 'chromium-headless-shell');\n    this._executables.push({\n      type: 'channel',\n      name: 'chromium-headless-shell',\n      browserName: 'chromium',\n      directory: chromiumHeadlessShell.dir,\n      executablePath: () => chromiumHeadlessShellExecutable,\n      executablePathOrDie: (sdkLanguage: string) => executablePathOrDie('chromium', chromiumHeadlessShellExecutable, chromiumHeadlessShell.installByDefault, sdkLanguage),\n      installType: chromiumHeadlessShell.installByDefault ? 'download-by-default' : 'download-on-demand',\n      _validateHostRequirements: (sdkLanguage: string) => this._validateHostRequirements(sdkLanguage, chromiumHeadlessShell.dir, ['chrome-linux'], [], ['chrome-win']),\n      downloadURLs: this._downloadURLs(chromiumHeadlessShell),\n      browserVersion: chromium.browserVersion,\n      _install: () => this._downloadExecutable(chromiumHeadlessShell, chromiumHeadlessShellExecutable),\n      _dependencyGroup: 'chromium',\n      _isHermeticInstallation: true,\n    });\n\n    const chromiumTipOfTreeHeadlessShell = descriptors.find(d => d.name === 'chromium-tip-of-tree-headless-shell')!;\n    const chromiumTipOfTreeHeadlessShellExecutable = findExecutablePath(chromiumTipOfTreeHeadlessShell.dir, 'chromium-headless-shell');\n    this._executables.push({\n      type: 'channel',\n      name: 'chromium-tip-of-tree-headless-shell',\n      browserName: 'chromium',\n      directory: chromiumTipOfTreeHeadlessShell.dir,\n      executablePath: () => chromiumTipOfTreeHeadlessShellExecutable,\n      executablePathOrDie: (sdkLanguage: string) => executablePathOrDie('chromium', chromiumTipOfTreeHeadlessShellExecutable, chromiumTipOfTreeHeadlessShell.installByDefault, sdkLanguage),\n      installType: chromiumTipOfTreeHeadlessShell.installByDefault ? 'download-by-default' : 'download-on-demand',\n      _validateHostRequirements: (sdkLanguage: string) => this._validateHostRequirements(sdkLanguage, chromiumTipOfTreeHeadlessShell.dir, ['chrome-linux'], [], ['chrome-win']),\n      downloadURLs: this._downloadURLs(chromiumTipOfTreeHeadlessShell),\n      browserVersion: chromium.browserVersion,\n      _install: () => this._downloadExecutable(chromiumTipOfTreeHeadlessShell, chromiumTipOfTreeHeadlessShellExecutable),\n      _dependencyGroup: 'chromium',\n      _isHermeticInstallation: true,\n    });\n\n    const chromiumTipOfTree = descriptors.find(d => d.name === 'chromium-tip-of-tree')!;\n    const chromiumTipOfTreeExecutable = findExecutablePath(chromiumTipOfTree.dir, 'chromium');\n    this._executables.push({\n      type: 'tool',\n      name: 'chromium-tip-of-tree',\n      browserName: 'chromium',\n      directory: chromiumTipOfTree.dir,\n      executablePath: () => chromiumTipOfTreeExecutable,\n      executablePathOrDie: (sdkLanguage: string) => executablePathOrDie('chromium-tip-of-tree', chromiumTipOfTreeExecutable, chromiumTipOfTree.installByDefault, sdkLanguage),\n      installType: chromiumTipOfTree.installByDefault ? 'download-by-default' : 'download-on-demand',\n      _validateHostRequirements: (sdkLanguage: string) => this._validateHostRequirements(sdkLanguage, chromiumTipOfTree.dir, ['chrome-linux'], [], ['chrome-win']),\n      downloadURLs: this._downloadURLs(chromiumTipOfTree),\n      browserVersion: chromiumTipOfTree.browserVersion,\n      _install: () => this._downloadExecutable(chromiumTipOfTree, chromiumTipOfTreeExecutable),\n      _dependencyGroup: 'chromium',\n      _isHermeticInstallation: true,\n    });\n\n    this._executables.push(this._createChromiumChannel('chrome', {\n      'linux': '/opt/google/chrome/chrome',\n      'darwin': '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',\n      'win32': `\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe`,\n    }, () => this._installChromiumChannel('chrome', {\n      'linux': 'reinstall_chrome_stable_linux.sh',\n      'darwin': 'reinstall_chrome_stable_mac.sh',\n      'win32': 'reinstall_chrome_stable_win.ps1',\n    })));\n\n    this._executables.push(this._createChromiumChannel('chrome-beta', {\n      'linux': '/opt/google/chrome-beta/chrome',\n      'darwin': '/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta',\n      'win32': `\\\\Google\\\\Chrome Beta\\\\Application\\\\chrome.exe`,\n    }, () => this._installChromiumChannel('chrome-beta', {\n      'linux': 'reinstall_chrome_beta_linux.sh',\n      'darwin': 'reinstall_chrome_beta_mac.sh',\n      'win32': 'reinstall_chrome_beta_win.ps1',\n    })));\n\n    this._executables.push(this._createChromiumChannel('chrome-dev', {\n      'linux': '/opt/google/chrome-unstable/chrome',\n      'darwin': '/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev',\n      'win32': `\\\\Google\\\\Chrome Dev\\\\Application\\\\chrome.exe`,\n    }));\n\n    this._executables.push(this._createChromiumChannel('chrome-canary', {\n      'linux': '',\n      'darwin': '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',\n      'win32': `\\\\Google\\\\Chrome SxS\\\\Application\\\\chrome.exe`,\n    }));\n\n    this._executables.push(this._createChromiumChannel('msedge', {\n      'linux': '/opt/microsoft/msedge/msedge',\n      'darwin': '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge',\n      'win32': `\\\\Microsoft\\\\Edge\\\\Application\\\\msedge.exe`,\n    }, () => this._installMSEdgeChannel('msedge', {\n      'linux': 'reinstall_msedge_stable_linux.sh',\n      'darwin': 'reinstall_msedge_stable_mac.sh',\n      'win32': 'reinstall_msedge_stable_win.ps1',\n    })));\n\n    this._executables.push(this._createChromiumChannel('msedge-beta', {\n      'linux': '/opt/microsoft/msedge-beta/msedge',\n      'darwin': '/Applications/Microsoft Edge Beta.app/Contents/MacOS/Microsoft Edge Beta',\n      'win32': `\\\\Microsoft\\\\Edge Beta\\\\Application\\\\msedge.exe`,\n    }, () => this._installMSEdgeChannel('msedge-beta', {\n      'darwin': 'reinstall_msedge_beta_mac.sh',\n      'linux': 'reinstall_msedge_beta_linux.sh',\n      'win32': 'reinstall_msedge_beta_win.ps1',\n    })));\n\n    this._executables.push(this._createChromiumChannel('msedge-dev', {\n      'linux': '/opt/microsoft/msedge-dev/msedge',\n      'darwin': '/Applications/Microsoft Edge Dev.app/Contents/MacOS/Microsoft Edge Dev',\n      'win32': `\\\\Microsoft\\\\Edge Dev\\\\Application\\\\msedge.exe`,\n    }, () => this._installMSEdgeChannel('msedge-dev', {\n      'darwin': 'reinstall_msedge_dev_mac.sh',\n      'linux': 'reinstall_msedge_dev_linux.sh',\n      'win32': 'reinstall_msedge_dev_win.ps1',\n    })));\n\n    this._executables.push(this._createChromiumChannel('msedge-canary', {\n      'linux': '',\n      'darwin': '/Applications/Microsoft Edge Canary.app/Contents/MacOS/Microsoft Edge Canary',\n      'win32': `\\\\Microsoft\\\\Edge SxS\\\\Application\\\\msedge.exe`,\n    }));\n\n    this._executables.push(this._createBidiFirefoxChannel('moz-firefox', {\n      'linux': '/snap/bin/firefox',\n      'darwin': '/Applications/Firefox.app/Contents/MacOS/firefox',\n      'win32': '\\\\Mozilla Firefox\\\\firefox.exe',\n    }));\n    this._executables.push(this._createBidiFirefoxChannel('moz-firefox-beta', {\n      'linux': '/opt/firefox-beta/firefox',\n      'darwin': '/Applications/Firefox.app/Contents/MacOS/firefox',\n      'win32': '\\\\Mozilla Firefox\\\\firefox.exe',\n    }));\n    this._executables.push(this._createBidiFirefoxChannel('moz-firefox-nightly', {\n      'linux': '/opt/firefox-nightly/firefox',\n      'darwin': '/Applications/Firefox Nightly.app/Contents/MacOS/firefox',\n      'win32': '\\\\Mozilla Firefox\\\\firefox.exe',\n    }));\n\n    this._executables.push(this._createBidiChromiumChannel('bidi-chrome-stable', {\n      'linux': '/opt/google/chrome/chrome',\n      'darwin': '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',\n      'win32': `\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe`,\n    }));\n    this._executables.push(this._createBidiChromiumChannel('bidi-chrome-canary', {\n      'linux': '',\n      'darwin': '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',\n      'win32': `\\\\Google\\\\Chrome SxS\\\\Application\\\\chrome.exe`,\n    }));\n    this._executables.push({\n      type: 'browser',\n      name: 'bidi-chromium',\n      browserName: 'bidi',\n      directory: chromium.dir,\n      executablePath: () => chromiumExecutable,\n      executablePathOrDie: (sdkLanguage: string) => executablePathOrDie('chromium', chromiumExecutable, chromium.installByDefault, sdkLanguage),\n      installType: 'download-on-demand',\n      _validateHostRequirements: (sdkLanguage: string) => this._validateHostRequirements(sdkLanguage, chromium.dir, ['chrome-linux'], [], ['chrome-win']),\n      downloadURLs: this._downloadURLs(chromium),\n      browserVersion: chromium.browserVersion,\n      _install: () => this._downloadExecutable(chromium, chromiumExecutable),\n      _dependencyGroup: 'chromium',\n      _isHermeticInstallation: true,\n    });\n\n    const firefox = descriptors.find(d => d.name === 'firefox')!;\n    const firefoxExecutable = findExecutablePath(firefox.dir, 'firefox');\n    this._executables.push({\n      type: 'browser',\n      name: 'firefox',\n      browserName: 'firefox',\n      directory: firefox.dir,\n      executablePath: () => firefoxExecutable,\n      executablePathOrDie: (sdkLanguage: string) => executablePathOrDie('firefox', firefoxExecutable, firefox.installByDefault, sdkLanguage),\n      installType: firefox.installByDefault ? 'download-by-default' : 'download-on-demand',\n      _validateHostRequirements: (sdkLanguage: string) => this._validateHostRequirements(sdkLanguage, firefox.dir, ['firefox'], [], ['firefox']),\n      downloadURLs: this._downloadURLs(firefox),\n      browserVersion: firefox.browserVersion,\n      _install: () => this._downloadExecutable(firefox, firefoxExecutable),\n      _dependencyGroup: 'firefox',\n      _isHermeticInstallation: true,\n    });\n\n    const firefoxBeta = descriptors.find(d => d.name === 'firefox-beta')!;\n    const firefoxBetaExecutable = findExecutablePath(firefoxBeta.dir, 'firefox');\n    this._executables.push({\n      type: 'tool',\n      name: 'firefox-beta',\n      browserName: 'firefox',\n      directory: firefoxBeta.dir,\n      executablePath: () => firefoxBetaExecutable,\n      executablePathOrDie: (sdkLanguage: string) => executablePathOrDie('firefox-beta', firefoxBetaExecutable, firefoxBeta.installByDefault, sdkLanguage),\n      installType: firefoxBeta.installByDefault ? 'download-by-default' : 'download-on-demand',\n      _validateHostRequirements: (sdkLanguage: string) => this._validateHostRequirements(sdkLanguage, firefoxBeta.dir, ['firefox'], [], ['firefox']),\n      downloadURLs: this._downloadURLs(firefoxBeta),\n      browserVersion: firefoxBeta.browserVersion,\n      _install: () => this._downloadExecutable(firefoxBeta, firefoxBetaExecutable),\n      _dependencyGroup: 'firefox',\n      _isHermeticInstallation: true,\n    });\n\n    const webkit = descriptors.find(d => d.name === 'webkit')!;\n    const webkitExecutable = findExecutablePath(webkit.dir, 'webkit');\n    const webkitLinuxLddDirectories = [\n      path.join('minibrowser-gtk'),\n      path.join('minibrowser-gtk', 'bin'),\n      path.join('minibrowser-gtk', 'lib'),\n      path.join('minibrowser-gtk', 'sys', 'lib'),\n      path.join('minibrowser-wpe'),\n      path.join('minibrowser-wpe', 'bin'),\n      path.join('minibrowser-wpe', 'lib'),\n      path.join('minibrowser-wpe', 'sys', 'lib'),\n    ];\n    this._executables.push({\n      type: 'browser',\n      name: 'webkit',\n      browserName: 'webkit',\n      directory: webkit.dir,\n      executablePath: () => webkitExecutable,\n      executablePathOrDie: (sdkLanguage: string) => executablePathOrDie('webkit', webkitExecutable, webkit.installByDefault, sdkLanguage),\n      installType: webkit.installByDefault ? 'download-by-default' : 'download-on-demand',\n      _validateHostRequirements: (sdkLanguage: string) => this._validateHostRequirements(sdkLanguage, webkit.dir, webkitLinuxLddDirectories, ['libGLESv2.so.2', 'libx264.so'], ['']),\n      downloadURLs: this._downloadURLs(webkit),\n      browserVersion: webkit.browserVersion,\n      _install: () => this._downloadExecutable(webkit, webkitExecutable),\n      _dependencyGroup: 'webkit',\n      _isHermeticInstallation: true,\n    });\n\n    const ffmpeg = descriptors.find(d => d.name === 'ffmpeg')!;\n    const ffmpegExecutable = findExecutablePath(ffmpeg.dir, 'ffmpeg');\n    this._executables.push({\n      type: 'tool',\n      name: 'ffmpeg',\n      browserName: undefined,\n      directory: ffmpeg.dir,\n      executablePath: () => ffmpegExecutable,\n      executablePathOrDie: (sdkLanguage: string) => executablePathOrDie('ffmpeg', ffmpegExecutable, ffmpeg.installByDefault, sdkLanguage),\n      installType: ffmpeg.installByDefault ? 'download-by-default' : 'download-on-demand',\n      _validateHostRequirements: () => Promise.resolve(),\n      downloadURLs: this._downloadURLs(ffmpeg),\n      _install: () => this._downloadExecutable(ffmpeg, ffmpegExecutable),\n      _dependencyGroup: 'tools',\n      _isHermeticInstallation: true,\n    });\n    const winldd = descriptors.find(d => d.name === 'winldd')!;\n    const winlddExecutable = findExecutablePath(winldd.dir, 'winldd');\n    this._executables.push({\n      type: 'tool',\n      name: 'winldd',\n      browserName: undefined,\n      directory: winldd.dir,\n      executablePath: () => winlddExecutable,\n      executablePathOrDie: (sdkLanguage: string) => executablePathOrDie('winldd', winlddExecutable, winldd.installByDefault, sdkLanguage),\n      installType: process.platform === 'win32' ? 'download-by-default' : 'none',\n      _validateHostRequirements: () => Promise.resolve(),\n      downloadURLs: this._downloadURLs(winldd),\n      _install: () => this._downloadExecutable(winldd, winlddExecutable),\n      _dependencyGroup: 'tools',\n      _isHermeticInstallation: true,\n    });\n    const android = descriptors.find(d => d.name === 'android')!;\n    this._executables.push({\n      type: 'tool',\n      name: 'android',\n      browserName: undefined,\n      directory: android.dir,\n      executablePath: () => undefined,\n      executablePathOrDie: () => '',\n      installType: 'download-on-demand',\n      _validateHostRequirements: () => Promise.resolve(),\n      downloadURLs: this._downloadURLs(android),\n      _install: () => this._downloadExecutable(android),\n      _dependencyGroup: 'tools',\n      _isHermeticInstallation: true,\n    });\n\n    this._executables.push({\n      type: 'browser',\n      name: 'bidi',\n      browserName: 'bidi',\n      directory: undefined,\n      executablePath: () => undefined,\n      executablePathOrDie: () => '',\n      installType: 'none',\n      _validateHostRequirements: () => Promise.resolve(),\n      downloadURLs: [],\n      _install: () => Promise.resolve(),\n      _dependencyGroup: 'tools',\n      _isHermeticInstallation: true,\n    });\n  }\n\n  private _createChromiumChannel(name: ChromiumChannel, lookAt: Record<'linux' | 'darwin' | 'win32', string>, install?: () => Promise<void>): ExecutableImpl {\n    const executablePath = (sdkLanguage: string, shouldThrow: boolean) => {\n      const suffix = lookAt[process.platform as 'linux' | 'darwin' | 'win32'];\n      if (!suffix) {\n        if (shouldThrow)\n          throw new Error(`Chromium distribution '${name}' is not supported on ${process.platform}`);\n        return undefined;\n      }\n      const prefixes = (process.platform === 'win32' ? [\n        process.env.LOCALAPPDATA,\n        process.env.PROGRAMFILES,\n        process.env['PROGRAMFILES(X86)'],\n        // In some cases there is no PROGRAMFILES/(86) env var set but HOMEDRIVE is set.\n        process.env.HOMEDRIVE + '\\\\Program Files',\n        process.env.HOMEDRIVE + '\\\\Program Files (x86)',\n      ].filter(Boolean) : ['']) as string[];\n\n      for (const prefix of prefixes) {\n        const executablePath = path.join(prefix, suffix);\n        if (canAccessFile(executablePath))\n          return executablePath;\n      }\n      if (!shouldThrow)\n        return undefined;\n\n      const location = prefixes.length ? ` at ${path.join(prefixes[0], suffix)}` : ``;\n      const installation = install ? `\\nRun \"${buildPlaywrightCLICommand(sdkLanguage, 'install ' + name)}\"` : '';\n      throw new Error(`Chromium distribution '${name}' is not found${location}${installation}`);\n    };\n    return {\n      type: 'channel',\n      name,\n      browserName: 'chromium',\n      directory: undefined,\n      executablePath: (sdkLanguage: string) => executablePath(sdkLanguage, false),\n      executablePathOrDie: (sdkLanguage: string) => executablePath(sdkLanguage, true)!,\n      installType: install ? 'install-script' : 'none',\n      _validateHostRequirements: () => Promise.resolve(),\n      _isHermeticInstallation: false,\n      _install: install,\n    };\n  }\n\n  private _createBidiFirefoxChannel(name: BidiChannel, lookAt: Record<'linux' | 'darwin' | 'win32', string>, install?: () => Promise<void>): ExecutableImpl {\n    const executablePath = (sdkLanguage: string, shouldThrow: boolean) => {\n      const suffix = lookAt[process.platform as 'linux' | 'darwin' | 'win32'];\n      if (!suffix) {\n        if (shouldThrow)\n          throw new Error(`Firefox distribution '${name}' is not supported on ${process.platform}`);\n        return undefined;\n      }\n      const prefixes = (process.platform === 'win32' ? [\n        process.env.LOCALAPPDATA,\n        process.env.PROGRAMFILES,\n        process.env['PROGRAMFILES(X86)'],\n        // In some cases there is no PROGRAMFILES/(86) env var set but HOMEDRIVE is set.\n        process.env.HOMEDRIVE + '\\\\Program Files',\n        process.env.HOMEDRIVE + '\\\\Program Files (x86)',\n      ].filter(Boolean) : ['']) as string[];\n\n      for (const prefix of prefixes) {\n        const executablePath = path.join(prefix, suffix);\n        if (canAccessFile(executablePath))\n          return executablePath;\n      }\n      if (shouldThrow)\n        throw new Error(`Cannot find Firefox installation for channel '${name}' at the standard system paths.`);\n      return undefined;\n    };\n    return {\n      type: 'channel',\n      name,\n      browserName: 'bidi',\n      directory: undefined,\n      executablePath: (sdkLanguage: string) => executablePath(sdkLanguage, false),\n      executablePathOrDie: (sdkLanguage: string) => executablePath(sdkLanguage, true)!,\n      installType: 'none',\n      _validateHostRequirements: () => Promise.resolve(),\n      _isHermeticInstallation: true,\n      _install: install,\n    };\n  }\n\n  private _createBidiChromiumChannel(name: BidiChannel, lookAt: Record<'linux' | 'darwin' | 'win32', string>, install?: () => Promise<void>): ExecutableImpl {\n    const executablePath = (sdkLanguage: string, shouldThrow: boolean) => {\n      const suffix = lookAt[process.platform as 'linux' | 'darwin' | 'win32'];\n      if (!suffix) {\n        if (shouldThrow)\n          throw new Error(`Firefox distribution '${name}' is not supported on ${process.platform}`);\n        return undefined;\n      }\n      const prefixes = (process.platform === 'win32' ? [\n        process.env.LOCALAPPDATA,\n        process.env.PROGRAMFILES,\n        process.env['PROGRAMFILES(X86)'],\n        // In some cases there is no PROGRAMFILES/(86) env var set but HOMEDRIVE is set.\n        process.env.HOMEDRIVE + '\\\\Program Files',\n        process.env.HOMEDRIVE + '\\\\Program Files (x86)',\n      ].filter(Boolean) : ['']) as string[];\n\n      for (const prefix of prefixes) {\n        const executablePath = path.join(prefix, suffix);\n        if (canAccessFile(executablePath))\n          return executablePath;\n      }\n      if (!shouldThrow)\n        return undefined;\n\n      const location = prefixes.length ? ` at ${path.join(prefixes[0], suffix)}` : ``;\n      const installation = install ? `\\nRun \"${buildPlaywrightCLICommand(sdkLanguage, 'install ' + name)}\"` : '';\n      throw new Error(`Chromium distribution '${name}' is not found${location}${installation}`);\n    };\n    return {\n      type: 'channel',\n      name,\n      browserName: 'bidi',\n      directory: undefined,\n      executablePath: (sdkLanguage: string) => executablePath(sdkLanguage, false),\n      executablePathOrDie: (sdkLanguage: string) => executablePath(sdkLanguage, true)!,\n      installType: install ? 'install-script' : 'none',\n      _validateHostRequirements: () => Promise.resolve(),\n      _isHermeticInstallation: false,\n      _install: install,\n    };\n  }\n\n  executables(): Executable[] {\n    return this._executables;\n  }\n\n  findExecutable(name: BrowserName): Executable;\n  findExecutable(name: string): Executable | undefined;\n  findExecutable(name: string): Executable | undefined {\n    return this._executables.find(b => b.name === name);\n  }\n\n  defaultExecutables(): Executable[] {\n    return this._executables.filter(e => e.installType === 'download-by-default');\n  }\n\n  private _dedupe(executables: Executable[]): ExecutableImpl[] {\n    return Array.from(new Set(executables as ExecutableImpl[]));\n  }\n\n  private async _validateHostRequirements(sdkLanguage: string, browserDirectory: string, linuxLddDirectories: string[], dlOpenLibraries: string[], windowsExeAndDllDirectories: string[]) {\n    if (os.platform() === 'linux')\n      return await validateDependenciesLinux(sdkLanguage, linuxLddDirectories.map(d => path.join(browserDirectory, d)), dlOpenLibraries);\n    if (os.platform() === 'win32' && os.arch() === 'x64')\n      return await validateDependenciesWindows(sdkLanguage, windowsExeAndDllDirectories.map(d => path.join(browserDirectory, d)));\n  }\n\n  async installDeps(executablesToInstallDeps: Executable[], dryRun: boolean) {\n    const executables = this._dedupe(executablesToInstallDeps);\n    const targets = new Set<DependencyGroup>();\n    for (const executable of executables) {\n      if (executable._dependencyGroup)\n        targets.add(executable._dependencyGroup);\n    }\n    targets.add('tools');\n    if (os.platform() === 'win32')\n      return await installDependenciesWindows(targets, dryRun);\n    if (os.platform() === 'linux')\n      return await installDependenciesLinux(targets, dryRun);\n  }\n\n  async install(executablesToInstall: Executable[], forceReinstall: boolean) {\n    const executables = this._dedupe(executablesToInstall);\n    await fs.promises.mkdir(registryDirectory, { recursive: true });\n    const lockfilePath = path.join(registryDirectory, '__dirlock');\n    const linksDir = path.join(registryDirectory, '.links');\n\n    let releaseLock;\n    try {\n      releaseLock = await lockfile.lock(registryDirectory, {\n        retries: {\n          // Retry 20 times during 10 minutes with\n          // exponential back-off.\n          // See documentation at: https://www.npmjs.com/package/retry#retrytimeoutsoptions\n          retries: 20,\n          factor: 1.27579,\n        },\n        onCompromised: (err: Error) => {\n          throw new Error(`${err.message} Path: ${lockfilePath}`);\n        },\n        lockfilePath,\n      });\n      // Create a link first, so that cache validation does not remove our own browsers.\n      await fs.promises.mkdir(linksDir, { recursive: true });\n      await fs.promises.writeFile(path.join(linksDir, calculateSha1(PACKAGE_PATH)), PACKAGE_PATH);\n\n      // Remove stale browsers.\n      if (!getAsBooleanFromENV('PLAYWRIGHT_SKIP_BROWSER_GC'))\n        await this._validateInstallationCache(linksDir);\n\n      // Install browsers for this package.\n      for (const executable of executables) {\n        if (!executable._install)\n          throw new Error(`ERROR: Playwright does not support installing ${executable.name}`);\n\n        const { embedderName } = getEmbedderName();\n        if (!getAsBooleanFromENV('CI') && !executable._isHermeticInstallation && !forceReinstall && executable.executablePath(embedderName)) {\n          const command = buildPlaywrightCLICommand(embedderName, 'install --force ' + executable.name);\n          process.stderr.write('\\n' + wrapInASCIIBox([\n            `ATTENTION: \"${executable.name}\" is already installed on the system!`,\n            ``,\n            `\"${executable.name}\" installation is not hermetic; installing newer version`,\n            `requires *removal* of a current installation first.`,\n            ``,\n            `To *uninstall* current version and re-install latest \"${executable.name}\":`,\n            ``,\n            `- Close all running instances of \"${executable.name}\", if any`,\n            `- Use \"--force\" to install browser:`,\n            ``,\n            `    ${command}`,\n            ``,\n            `<3 Playwright Team`,\n          ].join('\\n'), 1) + '\\n\\n');\n          return;\n        }\n        await executable._install();\n      }\n    } catch (e) {\n      if (e.code === 'ELOCKED') {\n        const rmCommand = process.platform === 'win32' ? 'rm -R' : 'rm -rf';\n        throw new Error('\\n' + wrapInASCIIBox([\n          `An active lockfile is found at:`,\n          ``,\n          `  ${lockfilePath}`,\n          ``,\n          `Either:`,\n          `- wait a few minutes if other Playwright is installing browsers in parallel`,\n          `- remove lock manually with:`,\n          ``,\n          `    ${rmCommand} ${lockfilePath}`,\n          ``,\n          `<3 Playwright Team`,\n        ].join('\\n'), 1));\n      } else {\n        throw e;\n      }\n    } finally {\n      if (releaseLock)\n        await releaseLock();\n    }\n  }\n\n  async uninstall(all: boolean): Promise<{ numberOfBrowsersLeft: number }> {\n    const linksDir = path.join(registryDirectory, '.links');\n    if (all) {\n      const links = await fs.promises.readdir(linksDir).catch(() => []);\n      for (const link of links)\n        await fs.promises.unlink(path.join(linksDir, link));\n    } else {\n      await fs.promises.unlink(path.join(linksDir, calculateSha1(PACKAGE_PATH))).catch(() => {});\n    }\n\n    // Remove stale browsers.\n    await this._validateInstallationCache(linksDir);\n\n    return {\n      numberOfBrowsersLeft: (await fs.promises.readdir(registryDirectory).catch(() => [])).filter(browserDirectory => isBrowserDirectory(browserDirectory)).length\n    };\n  }\n\n  async validateHostRequirementsForExecutablesIfNeeded(executables: Executable[], sdkLanguage: string) {\n    if (getAsBooleanFromENV('PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS')) {\n      process.stderr.write('Skipping host requirements validation logic because `PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS` env variable is set.\\n');\n      return;\n    }\n    for (const executable of executables)\n      await this._validateHostRequirementsForExecutableIfNeeded(executable, sdkLanguage);\n  }\n\n  private async _validateHostRequirementsForExecutableIfNeeded(executable: Executable, sdkLanguage: string) {\n    const kMaximumReValidationPeriod = 30 * 24 * 60 * 60 * 1000; // 30 days\n    // Executable does not require validation.\n    if (!executable.directory)\n      return;\n    const markerFile = path.join(executable.directory, 'DEPENDENCIES_VALIDATED');\n    // Executable is already validated.\n    if (await fs.promises.stat(markerFile).then(stat => (Date.now() - stat.mtime.getTime()) < kMaximumReValidationPeriod).catch(() => false))\n      return;\n\n    debugLogger.log('install', `validating host requirements for \"${executable.name}\"`);\n    try {\n      await executable._validateHostRequirements(sdkLanguage);\n      debugLogger.log('install', `validation passed for ${executable.name}`);\n    } catch (error) {\n      debugLogger.log('install', `validation failed for ${executable.name}`);\n      throw error;\n    }\n\n    await fs.promises.writeFile(markerFile, '').catch(() => {});\n  }\n\n  private _downloadURLs(descriptor: BrowsersJSONDescriptor): string[] {\n    const paths = (DOWNLOAD_PATHS as any)[descriptor.name];\n    const downloadPathTemplate: string|undefined = paths[hostPlatform] || paths['<unknown>'];\n    if (!downloadPathTemplate)\n      return [];\n    const downloadPath = util.format(downloadPathTemplate, descriptor.revision);\n\n    let downloadURLs = PLAYWRIGHT_CDN_MIRRORS.map(mirror => `${mirror}/${downloadPath}`) ;\n    let downloadHostEnv;\n    if (descriptor.name.startsWith('chromium'))\n      downloadHostEnv = 'PLAYWRIGHT_CHROMIUM_DOWNLOAD_HOST';\n    else if (descriptor.name.startsWith('firefox'))\n      downloadHostEnv = 'PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST';\n    else if (descriptor.name.startsWith('webkit'))\n      downloadHostEnv = 'PLAYWRIGHT_WEBKIT_DOWNLOAD_HOST';\n\n    const customHostOverride = (downloadHostEnv && getFromENV(downloadHostEnv)) || getFromENV('PLAYWRIGHT_DOWNLOAD_HOST');\n    if (customHostOverride)\n      downloadURLs = [`${customHostOverride}/${downloadPath}`];\n    return downloadURLs;\n  }\n\n  private async _downloadExecutable(descriptor: BrowsersJSONDescriptor, executablePath?: string) {\n    const downloadURLs = this._downloadURLs(descriptor);\n    if (!downloadURLs.length)\n      throw new Error(`ERROR: Playwright does not support ${descriptor.name} on ${hostPlatform}`);\n    if (!isOfficiallySupportedPlatform)\n      logPolitely(`BEWARE: your OS is not officially supported by Playwright; downloading fallback build for ${hostPlatform}.`);\n    if (descriptor.hasRevisionOverride) {\n      const message = `You are using a frozen ${descriptor.name} browser which does not receive updates anymore on ${hostPlatform}. Please update to the latest version of your operating system to test up-to-date browsers.`;\n      if (process.env.GITHUB_ACTIONS)\n        console.log(`::warning title=Playwright::${message}`);  // eslint-disable-line no-console\n      else\n        logPolitely(message);\n    }\n\n    const displayName = descriptor.name.split('-').map(word => {\n      return word === 'ffmpeg' ? 'FFMPEG' : word.charAt(0).toUpperCase() + word.slice(1);\n    }).join(' ');\n    const title = descriptor.browserVersion\n      ? `${displayName} ${descriptor.browserVersion} (playwright build v${descriptor.revision})`\n      : `${displayName} playwright build v${descriptor.revision}`;\n\n    const downloadFileName = `playwright-download-${descriptor.name}-${hostPlatform}-${descriptor.revision}.zip`;\n    // PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT is a misnomer, it actually controls the socket's\n    // max idle timeout. Unfortunately, we cannot rename it without breaking existing user workflows.\n    const downloadSocketTimeoutEnv = getFromENV('PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT');\n    const downloadSocketTimeout = +(downloadSocketTimeoutEnv || '0') || NET_DEFAULT_TIMEOUT;\n    await downloadBrowserWithProgressBar(title, descriptor.dir, executablePath, downloadURLs, downloadFileName, downloadSocketTimeout).catch(e => {\n      throw new Error(`Failed to download ${title}, caused by\\n${e.stack}`);\n    });\n  }\n\n  private async _installMSEdgeChannel(channel: 'msedge'|'msedge-beta'|'msedge-dev', scripts: Record<'linux' | 'darwin' | 'win32', string>) {\n    const scriptArgs: string[] = [];\n    if (process.platform !== 'linux') {\n      const products = lowercaseAllKeys(JSON.parse(await fetchData({ url: 'https://edgeupdates.microsoft.com/api/products' })));\n\n      const productName = {\n        'msedge': 'Stable',\n        'msedge-beta': 'Beta',\n        'msedge-dev': 'Dev',\n      }[channel];\n      const product = products.find((product: any) => product.product === productName);\n      const searchConfig = ({\n        darwin: { platform: 'MacOS', arch: 'universal', artifact: 'pkg' },\n        win32: { platform: 'Windows', arch: 'x64', artifact: 'msi' },\n      } as any)[process.platform];\n      const release = searchConfig ? product.releases.find((release: any) => release.platform === searchConfig.platform && release.architecture === searchConfig.arch && release.artifacts.length > 0) : null;\n      const artifact = release ? release.artifacts.find((artifact: any) => artifact.artifactname === searchConfig.artifact) : null;\n      if (artifact)\n        scriptArgs.push(artifact.location /* url */);\n      else\n        throw new Error(`Cannot install ${channel} on ${process.platform}`);\n    }\n    await this._installChromiumChannel(channel, scripts, scriptArgs);\n  }\n\n  private async _installChromiumChannel(channel: string, scripts: Record<'linux' | 'darwin' | 'win32', string>, scriptArgs: string[] = []) {\n    const scriptName = scripts[process.platform as 'linux' | 'darwin' | 'win32'];\n    if (!scriptName)\n      throw new Error(`Cannot install ${channel} on ${process.platform}`);\n    const cwd = BIN_PATH;\n    const isPowerShell = scriptName.endsWith('.ps1');\n    if (isPowerShell) {\n      const args = [\n        '-ExecutionPolicy', 'Bypass', '-File',\n        path.join(BIN_PATH, scriptName),\n        ...scriptArgs\n      ];\n      const { code } = await spawnAsync('powershell.exe', args, { cwd, stdio: 'inherit' });\n      if (code !== 0)\n        throw new Error(`Failed to install ${channel}`);\n    } else {\n      const { command, args, elevatedPermissions } = await transformCommandsForRoot([`bash \"${path.join(BIN_PATH, scriptName)}\" ${scriptArgs.join('')}`]);\n      if (elevatedPermissions)\n        console.log('Switching to root user to install dependencies...'); // eslint-disable-line no-console\n      const { code } = await spawnAsync(command, args, { cwd, stdio: 'inherit' });\n      if (code !== 0)\n        throw new Error(`Failed to install ${channel}`);\n    }\n  }\n\n  async listInstalledBrowsers() {\n    const linksDir = path.join(registryDirectory, '.links');\n    const { browsers } = await this._traverseBrowserInstallations(linksDir);\n    return browsers.filter(browser => fs.existsSync(browser.browserPath));\n  }\n\n  private async _validateInstallationCache(linksDir: string) {\n    const { browsers, brokenLinks } = await this._traverseBrowserInstallations(linksDir);\n    await this._deleteStaleBrowsers(browsers);\n    await this._deleteBrokenInstallations(brokenLinks);\n  }\n\n  private async _traverseBrowserInstallations(linksDir: string): Promise<{ browsers: BrowserInfo[], brokenLinks: string[] }> {\n    const browserList: BrowserInfo[] = [];\n    const brokenLinks: string[] = [];\n    for (const fileName of await fs.promises.readdir(linksDir)) {\n      const linkPath = path.join(linksDir, fileName);\n      let linkTarget = '';\n      try {\n        linkTarget = (await fs.promises.readFile(linkPath)).toString();\n        const browsersJSON = require(path.join(linkTarget, 'browsers.json'));\n        const descriptors = readDescriptors(browsersJSON);\n        for (const browserName of allDownloadable) {\n          // We retain browsers if they are found in the descriptor.\n          // Note, however, that there are older versions out in the wild that rely on\n          // the \"download\" field in the browser descriptor and use its value\n          // to retain and download browsers.\n          // As of v1.10, we decided to abandon \"download\" field.\n          const descriptor = descriptors.find(d => d.name === browserName);\n          if (!descriptor)\n            continue;\n\n          const browserPath = descriptor.dir;\n          const browserVersion = parseInt(descriptor.revision, 10);\n          browserList.push({\n            browserName,\n            browserVersion,\n            browserPath,\n            referenceDir: linkTarget,\n          });\n        }\n      } catch (e) {\n        brokenLinks.push(linkPath);\n      }\n    }\n\n    return { browsers: browserList, brokenLinks };\n  }\n\n  private async _deleteStaleBrowsers(browserList: BrowserInfo[]) {\n    const usedBrowserPaths: Set<string> = new Set();\n    for (const browser of browserList) {\n      const { browserName, browserVersion, browserPath } = browser;\n\n      // Old browser installations don't have marker file.\n      // We switched chromium from 999999 to 1000, 300000 is the new Y2K.\n      const shouldHaveMarkerFile = (browserName === 'chromium' && (browserVersion >= 786218 || browserVersion < 300000)) ||\n          (browserName === 'firefox' && browserVersion >= 1128) ||\n          (browserName === 'webkit' && browserVersion >= 1307) ||\n          // All new applications have a marker file right away.\n          (browserName !== 'firefox' && browserName !== 'chromium' && browserName !== 'webkit');\n      if (!shouldHaveMarkerFile || (await existsAsync(browserDirectoryToMarkerFilePath(browserPath))))\n        usedBrowserPaths.add(browserPath);\n    }\n\n    let downloadedBrowsers = (await fs.promises.readdir(registryDirectory)).map(file => path.join(registryDirectory, file));\n    downloadedBrowsers = downloadedBrowsers.filter(file => isBrowserDirectory(file));\n    const directories = new Set<string>(downloadedBrowsers);\n    for (const browserDirectory of usedBrowserPaths)\n      directories.delete(browserDirectory);\n    for (const directory of directories)\n      logPolitely('Removing unused browser at ' + directory);\n    await removeFolders([...directories]);\n  }\n\n  private async _deleteBrokenInstallations(brokenLinks: string[]) {\n    for (const linkPath of brokenLinks)\n      await fs.promises.unlink(linkPath).catch(e => {});\n  }\n}\n\nexport function browserDirectoryToMarkerFilePath(browserDirectory: string): string {\n  return path.join(browserDirectory, 'INSTALLATION_COMPLETE');\n}\n\nexport function buildPlaywrightCLICommand(sdkLanguage: string, parameters: string): string {\n  switch (sdkLanguage) {\n    case 'python':\n      return `playwright ${parameters}`;\n    case 'java':\n      return `mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args=\"${parameters}\"`;\n    case 'csharp':\n      return `pwsh bin/Debug/netX/playwright.ps1 ${parameters}`;\n    default: {\n      const packageManagerCommand = getPackageManagerExecCommand();\n      return `${packageManagerCommand} playwright ${parameters}`;\n    }\n  }\n}\n\nexport async function installBrowsersForNpmInstall(browsers: string[]) {\n  // PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD should have a value of 0 or 1\n  if (getAsBooleanFromENV('PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD')) {\n    logPolitely('Skipping browsers download because `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD` env variable is set');\n    return false;\n  }\n  const executables: Executable[] = [];\n  if (process.platform === 'win32')\n    executables.push(registry.findExecutable('winldd')!);\n  for (const browserName of browsers) {\n    const executable = registry.findExecutable(browserName);\n    if (!executable || executable.installType === 'none')\n      throw new Error(`Cannot install ${browserName}`);\n    executables.push(executable);\n  }\n\n  await registry.install(executables, false /* forceReinstall */);\n}\n\nexport function findChromiumChannel(sdkLanguage: string): string | undefined {\n  // Fall back to the stable channels of popular vendors to work out of the box.\n  // Null means no installation and no channels found.\n  let channel = null;\n  for (const name of ['chromium', 'chrome', 'msedge']) {\n    try {\n      registry.findExecutable(name)!.executablePathOrDie(sdkLanguage);\n      channel = name === 'chromium' ? undefined : name;\n      break;\n    } catch (e) {\n    }\n  }\n\n  if (channel === null) {\n    const installCommand = buildPlaywrightCLICommand(sdkLanguage, `install chromium`);\n    const prettyMessage = [\n      `No chromium-based browser found on the system.`,\n      `Please run the following command to download one:`,\n      ``,\n      `    ${installCommand}`,\n      ``,\n      `<3 Playwright Team`,\n    ].join('\\n');\n    throw new Error('\\n' + wrapInASCIIBox(prettyMessage, 1));\n  }\n  return channel;\n}\n\nfunction lowercaseAllKeys(json: any): any {\n  if (typeof json !== 'object' || !json)\n    return json;\n\n  if (Array.isArray(json))\n    return json.map(lowercaseAllKeys);\n\n  const result: any = {};\n  for (const [key, value] of Object.entries(json))\n    result[key.toLowerCase()] = lowercaseAllKeys(value);\n  return result;\n}\n\nexport const registry = new Registry(require('../../../browsers.json'));\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { SerializedValue } from '@protocol/channels';\n\nexport function parseSerializedValue(value: SerializedValue, handles: any[] | undefined): any {\n  return innerParseSerializedValue(value, handles, new Map(), []);\n}\n\nfunction innerParseSerializedValue(value: SerializedValue, handles: any[] | undefined, refs: Map<number, object>, accessChain: Array<string | number>): any {\n  if (value.ref !== undefined)\n    return refs.get(value.ref);\n  if (value.n !== undefined)\n    return value.n;\n  if (value.s !== undefined)\n    return value.s;\n  if (value.b !== undefined)\n    return value.b;\n  if (value.v !== undefined) {\n    if (value.v === 'undefined')\n      return undefined;\n    if (value.v === 'null')\n      return null;\n    if (value.v === 'NaN')\n      return NaN;\n    if (value.v === 'Infinity')\n      return Infinity;\n    if (value.v === '-Infinity')\n      return -Infinity;\n    if (value.v === '-0')\n      return -0;\n  }\n  if (value.d !== undefined)\n    return new Date(value.d);\n  if (value.u !== undefined)\n    return new URL(value.u);\n  if (value.bi !== undefined)\n    return BigInt(value.bi);\n  if (value.e !== undefined) {\n    const error = new Error(value.e.m);\n    error.name = value.e.n;\n    error.stack = value.e.s;\n    return error;\n  }\n  if (value.r !== undefined)\n    return new RegExp(value.r.p, value.r.f);\n  if (value.ta !== undefined) {\n    const ctor = typedArrayKindToConstructor[value.ta.k] as any;\n    return new ctor(value.ta.b.buffer, value.ta.b.byteOffset, value.ta.b.length / ctor.BYTES_PER_ELEMENT);\n  }\n\n  if (value.a !== undefined) {\n    const result: any[] = [];\n    refs.set(value.id!, result);\n    for (let i = 0; i < value.a.length; i++)\n      result.push(innerParseSerializedValue(value.a[i], handles, refs, [...accessChain, i]));\n    return result;\n  }\n  if (value.o !== undefined) {\n    const result: any = {};\n    refs.set(value.id!, result);\n    for (const { k, v } of value.o)\n      result[k] = innerParseSerializedValue(v, handles, refs, [...accessChain, k]);\n    return result;\n  }\n  if (value.h !== undefined) {\n    if (handles === undefined)\n      throw new Error('Unexpected handle');\n    return handles[value.h];\n  }\n  throw new Error(`Attempting to deserialize unexpected value${accessChainToDisplayString(accessChain)}: ${value}`);\n}\n\nexport type HandleOrValue = { h: number } | { fallThrough: any };\ntype VisitorInfo = {\n  visited: Map<object, number>;\n  lastId: number;\n};\n\nexport function serializeValue(value: any, handleSerializer: (value: any) => HandleOrValue): SerializedValue {\n  return innerSerializeValue(value, handleSerializer, { lastId: 0, visited: new Map() }, []);\n}\n\nfunction innerSerializeValue(value: any, handleSerializer: (value: any) => HandleOrValue, visitorInfo: VisitorInfo, accessChain: Array<string | number>): SerializedValue {\n  const handle = handleSerializer(value);\n  if ('fallThrough' in handle)\n    value = handle.fallThrough;\n  else\n    return handle;\n\n  if (typeof value === 'symbol')\n    return { v: 'undefined' };\n  if (Object.is(value, undefined))\n    return { v: 'undefined' };\n  if (Object.is(value, null))\n    return { v: 'null' };\n  if (Object.is(value, NaN))\n    return { v: 'NaN' };\n  if (Object.is(value, Infinity))\n    return { v: 'Infinity' };\n  if (Object.is(value, -Infinity))\n    return { v: '-Infinity' };\n  if (Object.is(value, -0))\n    return { v: '-0' };\n  if (typeof value === 'boolean')\n    return { b: value };\n  if (typeof value === 'number')\n    return { n: value };\n  if (typeof value === 'string')\n    return { s: value };\n  if (typeof value === 'bigint')\n    return { bi: value.toString() };\n  if (isError(value))\n    return { e: { n: value.name, m: value.message, s: value.stack || '' } };\n  if (isDate(value))\n    return { d: value.toJSON() };\n  if (isURL(value))\n    return { u: value.toJSON() };\n  if (isRegExp(value))\n    return { r: { p: value.source, f: value.flags } };\n\n  const typedArrayKind = constructorToTypedArrayKind.get(value.constructor);\n  if (typedArrayKind)\n    return { ta: { b: Buffer.from(value.buffer, value.byteOffset, value.byteLength), k: typedArrayKind } };\n\n  const id = visitorInfo.visited.get(value);\n  if (id)\n    return { ref: id };\n\n  if (Array.isArray(value)) {\n    const a = [];\n    const id = ++visitorInfo.lastId;\n    visitorInfo.visited.set(value, id);\n    for (let i = 0; i < value.length; ++i)\n      a.push(innerSerializeValue(value[i], handleSerializer, visitorInfo, [...accessChain, i]));\n    return { a, id };\n  }\n  if (typeof value === 'object') {\n    const o: { k: string, v: SerializedValue }[] = [];\n    const id = ++visitorInfo.lastId;\n    visitorInfo.visited.set(value, id);\n    for (const name of Object.keys(value))\n      o.push({ k: name, v: innerSerializeValue(value[name], handleSerializer, visitorInfo, [...accessChain, name]) });\n    return { o, id };\n  }\n  // Likely only functions can reach here.\n  throw new Error(`Attempting to serialize unexpected value${accessChainToDisplayString(accessChain)}: ${value}`);\n}\n\nfunction accessChainToDisplayString(accessChain: Array<string | number>): string {\n  const chainString = accessChain.map((accessor, i) => {\n    if (typeof accessor === 'string')\n      return i ? `.${accessor}` : accessor;\n    return `[${accessor}]`;\n  }).join('');\n\n  return chainString.length > 0 ? ` at position \"${chainString}\"` : '';\n}\n\nfunction isRegExp(obj: any): obj is RegExp {\n  return obj instanceof RegExp || Object.prototype.toString.call(obj) === '[object RegExp]';\n}\n\nfunction isDate(obj: any): obj is Date {\n  return obj instanceof Date || Object.prototype.toString.call(obj) === '[object Date]';\n}\n\nfunction isURL(obj: any): obj is URL {\n  return obj instanceof URL || Object.prototype.toString.call(obj) === '[object URL]';\n}\n\nfunction isError(obj: any): obj is Error {\n  const proto = obj ? Object.getPrototypeOf(obj) : null;\n  return obj instanceof Error || proto?.name === 'Error' || (proto && isError(proto));\n}\n\n\ntype TypedArrayKind = NonNullable<SerializedValue['ta']>['k'];\nconst typedArrayKindToConstructor: Record<TypedArrayKind, Function> = {\n  i8: Int8Array,\n  ui8: Uint8Array,\n  ui8c: Uint8ClampedArray,\n  i16: Int16Array,\n  ui16: Uint16Array,\n  i32: Int32Array,\n  ui32: Uint32Array,\n  f32: Float32Array,\n  f64: Float64Array,\n  bi64: BigInt64Array,\n  bui64: BigUint64Array,\n};\nconst constructorToTypedArrayKind: Map<Function, TypedArrayKind> = new Map(Object.entries(typedArrayKindToConstructor).map(([k, v]) => [v, k as TypedArrayKind]));\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { parseSerializedValue, serializeValue } from '../protocol/serializers';\nimport { isError } from '../utils';\n\nimport type { SerializedError } from '@protocol/channels';\n\nclass CustomError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = this.constructor.name;\n  }\n}\n\nexport class TimeoutError extends CustomError {}\n\nexport class TargetClosedError extends CustomError {\n  constructor(cause?: string, logs?: string) {\n    super((cause || 'Target page, context or browser has been closed') + (logs || ''));\n  }\n}\n\nexport function isTargetClosedError(error: Error) {\n  return error instanceof TargetClosedError || error.name === 'TargetClosedError';\n}\n\nexport function serializeError(e: any): SerializedError {\n  if (isError(e))\n    return { error: { message: e.message, stack: e.stack, name: e.name } };\n  return { value: serializeValue(e, value => ({ fallThrough: value })) };\n}\n\nexport function parseError(error: SerializedError): Error {\n  if (!error.error) {\n    if (error.value === undefined)\n      throw new Error('Serialized error must have either an error or a value');\n    return parseSerializedValue(error.value, undefined);\n  }\n  const e = new Error(error.error.message);\n  e.stack = error.error.stack || '';\n  e.name = error.error.name;\n  return e;\n}\n","/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport { createGuid } from './utils/crypto';\n\nimport type { Browser } from './browser';\nimport type { BrowserContext } from './browserContext';\nimport type { BrowserType } from './browserType';\nimport type { Dialog } from './dialog';\nimport type { Download } from './download';\nimport type { APIRequestContext } from './fetch';\nimport type { Frame } from './frames';\nimport type { Page } from './page';\nimport type { Playwright } from './playwright';\nimport type { CallMetadata } from '@protocol/callMetadata';\nexport type { CallMetadata } from '@protocol/callMetadata';\n\nexport type Attribution = {\n  playwright: Playwright;\n  browserType?: BrowserType;\n  browser?: Browser;\n  context?: BrowserContext | APIRequestContext;\n  page?: Page;\n  frame?: Frame;\n};\n\nexport class SdkObject extends EventEmitter {\n  guid: string;\n  attribution: Attribution;\n  instrumentation: Instrumentation;\n\n  constructor(parent: SdkObject, guidPrefix?: string, guid?: string) {\n    super();\n    this.guid = guid || `${guidPrefix || ''}@${createGuid()}`;\n    this.setMaxListeners(0);\n    this.attribution = { ...parent.attribution };\n    this.instrumentation = parent.instrumentation;\n  }\n}\n\nexport interface Instrumentation {\n  addListener(listener: InstrumentationListener, context: BrowserContext | APIRequestContext | null): void;\n  removeListener(listener: InstrumentationListener): void;\n  onBeforeCall(sdkObject: SdkObject, metadata: CallMetadata): Promise<void>;\n  onBeforeInputAction(sdkObject: SdkObject, metadata: CallMetadata): Promise<void>;\n  onCallLog(sdkObject: SdkObject, metadata: CallMetadata, logName: string, message: string): void;\n  onAfterCall(sdkObject: SdkObject, metadata: CallMetadata): Promise<void>;\n  onPageOpen(page: Page): void;\n  onPageClose(page: Page): void;\n  onBrowserOpen(browser: Browser): void;\n  onBrowserClose(browser: Browser): void;\n  onDialog(dialog: Dialog): void;\n  onDownload(page: Page, download: Download): void;\n}\n\nexport interface InstrumentationListener {\n  onBeforeCall?(sdkObject: SdkObject, metadata: CallMetadata): Promise<void>;\n  onBeforeInputAction?(sdkObject: SdkObject, metadata: CallMetadata): Promise<void>;\n  onCallLog?(sdkObject: SdkObject, metadata: CallMetadata, logName: string, message: string): void;\n  onAfterCall?(sdkObject: SdkObject, metadata: CallMetadata): Promise<void>;\n  onPageOpen?(page: Page): void;\n  onPageClose?(page: Page): void;\n  onBrowserOpen?(browser: Browser): void;\n  onBrowserClose?(browser: Browser): void;\n  onDialog?(dialog: Dialog): void;\n  onDownload?(page: Page, download: Download): void;\n}\n\nexport function createInstrumentation(): Instrumentation {\n  const listeners = new Map<InstrumentationListener, BrowserContext | APIRequestContext | null>();\n  return new Proxy({}, {\n    get: (obj: any, prop: string | symbol) => {\n      if (typeof prop !== 'string')\n        return obj[prop];\n      if (prop === 'addListener')\n        return (listener: InstrumentationListener, context: BrowserContext | APIRequestContext | null) => listeners.set(listener, context);\n      if (prop === 'removeListener')\n        return (listener: InstrumentationListener) => listeners.delete(listener);\n      if (!prop.startsWith('on'))\n        return obj[prop];\n      return async (sdkObject: SdkObject, ...params: any[]) => {\n        for (const [listener, context] of listeners) {\n          if (!context || sdkObject.attribution.context === context)\n            await (listener as any)[prop]?.(sdkObject, ...params);\n        }\n      };\n    },\n  });\n}\n\nexport function serverSideCallMetadata(): CallMetadata {\n  return {\n    id: '',\n    startTime: 0,\n    endTime: 0,\n    type: 'Internal',\n    method: '',\n    params: {},\n    log: [],\n    isServerSide: true,\n  };\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { rewriteErrorMessage } from '../utils/isomorphic/stackTrace';\n\nexport class ProtocolError extends Error {\n  type: 'error' | 'closed' | 'crashed';\n  method: string | undefined;\n  logs: string | undefined;\n\n  constructor(type: 'error' | 'closed' | 'crashed', method?: string, logs?: string) {\n    super();\n    this.type = type;\n    this.method = method;\n    this.logs = logs;\n  }\n\n  setMessage(message: string) {\n    rewriteErrorMessage(this, `Protocol error (${this.method}): ${message}`);\n  }\n\n  browserLogMessage() {\n    return this.logs ? '\\nBrowser logs:\\n' + this.logs : '';\n  }\n}\n\nexport function isProtocolError(e: Error): e is ProtocolError {\n  return e instanceof ProtocolError;\n}\n\nexport function isSessionClosedError(e: Error): e is ProtocolError {\n  return e instanceof ProtocolError && (e.type === 'closed' || e.type === 'crashed');\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function compressCallLog(log: string[]): string[] {\n  const lines: string[] = [];\n\n  for (const block of findRepeatedSubsequences(log)) {\n    for (let i = 0; i < block.sequence.length; i++) {\n      const line = block.sequence[i];\n      const leadingWhitespace = line.match(/^\\s*/);\n      const whitespacePrefix = '  ' + leadingWhitespace?.[0] || '';\n      const countPrefix = `${block.count} × `;\n      if (block.count > 1 && i === 0)\n        lines.push(whitespacePrefix + countPrefix + line.trim());\n      else if (block.count > 1)\n        lines.push(whitespacePrefix + ' '.repeat(countPrefix.length - 2) + '- ' + line.trim());\n      else\n        lines.push(whitespacePrefix + '- ' + line.trim());\n    }\n  }\n  return lines;\n}\n\nfunction findRepeatedSubsequences(s: string[]): { sequence: string[]; count: number }[] {\n  const n = s.length;\n  const result = [];\n  let i = 0;\n\n  const arraysEqual = (a1: string[], a2: string[]) => {\n    if (a1.length !== a2.length)\n      return false;\n    for (let j = 0; j < a1.length; j++) {\n      if (a1[j] !== a2[j])\n        return false;\n    }\n\n    return true;\n  };\n\n  while (i < n) {\n    let maxRepeatCount = 1;\n    let maxRepeatSubstr = [s[i]]; // Initialize with the element at index i\n    let maxRepeatLength = 1;\n\n    // Try substrings of length from 1 to the remaining length of the array\n    for (let p = 1; p <= n - i; p++) {\n      const substr = s.slice(i, i + p); // Extract substring as array\n      let k = 1;\n\n      // Count how many times the substring repeats consecutively\n      while (\n        i + p * k <= n &&\n        arraysEqual(s.slice(i + p * (k - 1), i + p * k), substr)\n      )\n        k += 1;\n\n      k -= 1; // Adjust k since it increments one extra time in the loop\n\n      // Update the maximal repeating substring if necessary\n      if (k > 1 && (k * p) > (maxRepeatCount * maxRepeatLength)) {\n        maxRepeatCount = k;\n        maxRepeatSubstr = substr;\n        maxRepeatLength = p;\n      }\n    }\n\n    // Record the substring and its count\n    result.push({ sequence: maxRepeatSubstr, count: maxRepeatCount });\n    i += maxRepeatLength * maxRepeatCount; // Move index forward\n  }\n\n  return result;\n}\n\nexport const findRepeatedSubsequencesForTest = findRepeatedSubsequences;\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport { eventsHelper } from '../utils/eventsHelper';\nimport { ValidationError, createMetadataValidator, findValidator  } from '../../protocol/validator';\nimport { LongStandingScope, assert, monotonicTime, rewriteErrorMessage } from '../../utils';\nimport { isUnderTest } from '../utils/debug';\nimport { TargetClosedError, isTargetClosedError, serializeError } from '../errors';\nimport { SdkObject } from '../instrumentation';\nimport { isProtocolError } from '../protocolError';\nimport { compressCallLog } from '../callLog';\nimport { methodMetainfo } from '../../utils/isomorphic/protocolMetainfo';\n\nimport type { CallMetadata } from '../instrumentation';\nimport type { PlaywrightDispatcher } from './playwrightDispatcher';\nimport type { RegisteredListener } from '../utils/eventsHelper';\nimport type { ValidatorContext } from '../../protocol/validator';\nimport type * as channels from '@protocol/channels';\n\nconst metadataValidator = createMetadataValidator();\n\nlet maxDispatchersOverride: number | undefined;\nexport function setMaxDispatchersForTest(value: number | undefined) {\n  maxDispatchersOverride = value;\n}\nfunction maxDispatchersForBucket(gcBucket: string) {\n  return maxDispatchersOverride ?? {\n    'JSHandle': 100000,\n    'ElementHandle': 100000,\n  }[gcBucket] ?? 10000;\n}\n\nexport class Dispatcher<Type extends { guid: string }, ChannelType, ParentScopeType extends DispatcherScope> extends EventEmitter implements channels.Channel {\n  readonly connection: DispatcherConnection;\n  // Parent is always \"isScope\".\n  private _parent: ParentScopeType | undefined;\n  // Only \"isScope\" channel owners have registered dispatchers inside.\n  private _dispatchers = new Map<string, DispatcherScope>();\n  protected _disposed = false;\n  protected _eventListeners: RegisteredListener[] = [];\n\n  readonly _guid: string;\n  readonly _type: string;\n  readonly _gcBucket: string;\n  _object: Type;\n  private _openScope = new LongStandingScope();\n\n  constructor(parent: ParentScopeType | DispatcherConnection, object: Type, type: string, initializer: channels.InitializerTraits<ChannelType>, gcBucket?: string) {\n    super();\n\n    this.connection = parent instanceof DispatcherConnection ? parent : parent.connection;\n    this._parent = parent instanceof DispatcherConnection ? undefined : parent;\n\n    const guid = object.guid;\n    this._guid = guid;\n    this._type = type;\n    this._object = object;\n    this._gcBucket = gcBucket ?? type;\n\n    this.connection.registerDispatcher(this);\n    if (this._parent) {\n      assert(!this._parent._dispatchers.has(guid));\n      this._parent._dispatchers.set(guid, this);\n    }\n\n    if (this._parent)\n      this.connection.sendCreate(this._parent, type, guid, initializer);\n    this.connection.maybeDisposeStaleDispatchers(this._gcBucket);\n  }\n\n  parentScope(): ParentScopeType {\n    return this._parent!;\n  }\n\n  addObjectListener(eventName: (string | symbol), handler: (...args: any[]) => void) {\n    this._eventListeners.push(eventsHelper.addEventListener(this._object as unknown as EventEmitter, eventName, handler));\n  }\n\n  adopt(child: DispatcherScope) {\n    if (child._parent === this)\n      return;\n    const oldParent = child._parent!;\n    oldParent._dispatchers.delete(child._guid);\n    this._dispatchers.set(child._guid, child);\n    child._parent = this;\n    this.connection.sendAdopt(this, child);\n  }\n\n  async _handleCommand(callMetadata: CallMetadata, method: string, validParams: any) {\n    const commandPromise = (this as any)[method](validParams, callMetadata);\n    try {\n      return await this._openScope.race(commandPromise);\n    } catch (e) {\n      if (callMetadata.potentiallyClosesScope && isTargetClosedError(e))\n        return await commandPromise;\n      throw e;\n    }\n  }\n\n  _dispatchEvent<T extends keyof channels.EventsTraits<ChannelType>>(method: T, params?: channels.EventsTraits<ChannelType>[T]) {\n    if (this._disposed) {\n      if (isUnderTest())\n        throw new Error(`${this._guid} is sending \"${String(method)}\" event after being disposed`);\n      // Just ignore this event outside of tests.\n      return;\n    }\n    this.connection.sendEvent(this, method as string, params);\n  }\n\n  _dispose(reason?: 'gc') {\n    this._disposeRecursively(new TargetClosedError());\n    this.connection.sendDispose(this, reason);\n  }\n\n  protected _onDispose() {\n  }\n\n  private _disposeRecursively(error: Error) {\n    assert(!this._disposed, `${this._guid} is disposed more than once`);\n    this._onDispose();\n    this._disposed = true;\n    eventsHelper.removeEventListeners(this._eventListeners);\n\n    // Clean up from parent and connection.\n    this._parent?._dispatchers.delete(this._guid);\n    const list = this.connection._dispatchersByBucket.get(this._gcBucket);\n    list?.delete(this._guid);\n    this.connection._dispatcherByGuid.delete(this._guid);\n    this.connection._dispatcherByObject.delete(this._object);\n\n    // Dispose all children.\n    for (const dispatcher of [...this._dispatchers.values()])\n      dispatcher._disposeRecursively(error);\n    this._dispatchers.clear();\n    this._openScope.close(error);\n  }\n\n  _debugScopeState(): any {\n    return {\n      _guid: this._guid,\n      objects: Array.from(this._dispatchers.values()).map(o => o._debugScopeState()),\n    };\n  }\n\n  async waitForEventInfo(): Promise<void> {\n    // Instrumentation takes care of this.\n  }\n}\n\nexport type DispatcherScope = Dispatcher<any, any, any>;\n\nexport class RootDispatcher extends Dispatcher<{ guid: '' }, any, any> {\n  private _initialized = false;\n\n  constructor(connection: DispatcherConnection, private readonly createPlaywright?: (scope: RootDispatcher, options: channels.RootInitializeParams) => Promise<PlaywrightDispatcher>) {\n    super(connection, { guid: '' }, 'Root', {});\n  }\n\n  async initialize(params: channels.RootInitializeParams): Promise<channels.RootInitializeResult> {\n    assert(this.createPlaywright);\n    assert(!this._initialized);\n    this._initialized = true;\n    return {\n      playwright: await this.createPlaywright(this, params),\n    };\n  }\n}\n\nexport class DispatcherConnection {\n  readonly _dispatcherByGuid = new Map<string, DispatcherScope>();\n  readonly _dispatcherByObject = new Map<any, DispatcherScope>();\n  readonly _dispatchersByBucket = new Map<string, Set<string>>();\n  onmessage = (message: object) => {};\n  private _waitOperations = new Map<string, CallMetadata>();\n  private _isLocal: boolean;\n\n  constructor(isLocal?: boolean) {\n    this._isLocal = !!isLocal;\n  }\n\n  sendEvent(dispatcher: DispatcherScope, event: string, params: any) {\n    const validator = findValidator(dispatcher._type, event, 'Event');\n    params = validator(params, '', this._validatorToWireContext());\n    this.onmessage({ guid: dispatcher._guid, method: event, params });\n  }\n\n  sendCreate(parent: DispatcherScope, type: string, guid: string, initializer: any) {\n    const validator = findValidator(type, '', 'Initializer');\n    initializer = validator(initializer, '', this._validatorToWireContext());\n    this.onmessage({ guid: parent._guid, method: '__create__', params: { type, initializer, guid } });\n  }\n\n  sendAdopt(parent: DispatcherScope, dispatcher: DispatcherScope) {\n    this.onmessage({ guid: parent._guid, method: '__adopt__', params: { guid: dispatcher._guid } });\n  }\n\n  sendDispose(dispatcher: DispatcherScope, reason?: 'gc') {\n    this.onmessage({ guid: dispatcher._guid, method: '__dispose__', params: { reason } });\n  }\n\n  private _validatorToWireContext(): ValidatorContext {\n    return {\n      tChannelImpl: this._tChannelImplToWire.bind(this),\n      binary: this._isLocal ? 'buffer' : 'toBase64',\n      isUnderTest,\n    };\n  }\n\n  private _validatorFromWireContext(): ValidatorContext {\n    return {\n      tChannelImpl: this._tChannelImplFromWire.bind(this),\n      binary: this._isLocal ? 'buffer' : 'fromBase64',\n      isUnderTest,\n    };\n  }\n\n  private _tChannelImplFromWire(names: '*' | string[], arg: any, path: string, context: ValidatorContext): any {\n    if (arg && typeof arg === 'object' && typeof arg.guid === 'string') {\n      const guid = arg.guid;\n      const dispatcher = this._dispatcherByGuid.get(guid);\n      if (!dispatcher)\n        throw new ValidationError(`${path}: no object with guid ${guid}`);\n      if (names !== '*' && !names.includes(dispatcher._type))\n        throw new ValidationError(`${path}: object with guid ${guid} has type ${dispatcher._type}, expected ${names.toString()}`);\n      return dispatcher;\n    }\n    throw new ValidationError(`${path}: expected guid for ${names.toString()}`);\n  }\n\n  private _tChannelImplToWire(names: '*' | string[], arg: any, path: string, context: ValidatorContext): any {\n    if (arg instanceof Dispatcher)  {\n      if (names !== '*' && !names.includes(arg._type))\n        throw new ValidationError(`${path}: dispatcher with guid ${arg._guid} has type ${arg._type}, expected ${names.toString()}`);\n      return { guid: arg._guid };\n    }\n    throw new ValidationError(`${path}: expected dispatcher ${names.toString()}`);\n  }\n\n  existingDispatcher<DispatcherType>(object: any): DispatcherType | undefined {\n    return this._dispatcherByObject.get(object) as DispatcherType | undefined;\n  }\n\n  registerDispatcher(dispatcher: DispatcherScope) {\n    assert(!this._dispatcherByGuid.has(dispatcher._guid));\n    this._dispatcherByGuid.set(dispatcher._guid, dispatcher);\n    this._dispatcherByObject.set(dispatcher._object, dispatcher);\n    let list = this._dispatchersByBucket.get(dispatcher._gcBucket);\n    if (!list) {\n      list = new Set();\n      this._dispatchersByBucket.set(dispatcher._gcBucket, list);\n    }\n    list.add(dispatcher._guid);\n  }\n\n  maybeDisposeStaleDispatchers(gcBucket: string) {\n    const maxDispatchers = maxDispatchersForBucket(gcBucket);\n    const list = this._dispatchersByBucket.get(gcBucket);\n    if (!list || list.size <= maxDispatchers)\n      return;\n    const dispatchersArray = [...list];\n    const disposeCount = (maxDispatchers / 10) | 0;\n    this._dispatchersByBucket.set(gcBucket, new Set(dispatchersArray.slice(disposeCount)));\n    for (let i = 0; i < disposeCount; ++i) {\n      const d = this._dispatcherByGuid.get(dispatchersArray[i]);\n      if (!d)\n        continue;\n      d._dispose('gc');\n    }\n  }\n\n  async dispatch(message: object) {\n    const { id, guid, method, params, metadata } = message as any;\n    const dispatcher = this._dispatcherByGuid.get(guid);\n    if (!dispatcher) {\n      this.onmessage({ id, error: serializeError(new TargetClosedError()) });\n      return;\n    }\n\n    let validParams: any;\n    let validMetadata: channels.Metadata;\n    try {\n      const validator = findValidator(dispatcher._type, method, 'Params');\n      const validatorContext = this._validatorFromWireContext();\n      validParams = validator(params, '', validatorContext);\n      validMetadata = metadataValidator(metadata, '', validatorContext);\n      if (typeof (dispatcher as any)[method] !== 'function')\n        throw new Error(`Mismatching dispatcher: \"${dispatcher._type}\" does not implement \"${method}\"`);\n    } catch (e) {\n      this.onmessage({ id, error: serializeError(e) });\n      return;\n    }\n\n    if (methodMetainfo.get(dispatcher._type + '.' + method)?.internal) {\n      // For non-js ports, it is easier to detect internal calls here rather\n      // than generate protocol metainfo for each language.\n      validMetadata.internal = true;\n    }\n\n    const sdkObject = dispatcher._object instanceof SdkObject ? dispatcher._object : undefined;\n    const callMetadata: CallMetadata = {\n      id: `call@${id}`,\n      location: validMetadata.location,\n      title: validMetadata.title,\n      internal: validMetadata.internal,\n      stepId: validMetadata.stepId,\n      objectId: sdkObject?.guid,\n      pageId: sdkObject?.attribution?.page?.guid,\n      frameId: sdkObject?.attribution?.frame?.guid,\n      startTime: monotonicTime(),\n      endTime: 0,\n      type: dispatcher._type,\n      method,\n      params: params || {},\n      log: [],\n    };\n\n    if (sdkObject && params?.info?.waitId) {\n      // Process logs for waitForNavigation/waitForLoadState/etc.\n      const info = params.info;\n      switch (info.phase) {\n        case 'before': {\n          this._waitOperations.set(info.waitId, callMetadata);\n          await sdkObject.instrumentation.onBeforeCall(sdkObject, callMetadata);\n          this.onmessage({ id });\n          return;\n        } case 'log': {\n          const originalMetadata = this._waitOperations.get(info.waitId)!;\n          originalMetadata.log.push(info.message);\n          sdkObject.instrumentation.onCallLog(sdkObject, originalMetadata, 'api', info.message);\n          this.onmessage({ id });\n          return;\n        } case 'after': {\n          const originalMetadata = this._waitOperations.get(info.waitId)!;\n          originalMetadata.endTime = monotonicTime();\n          originalMetadata.error = info.error ? { error: { name: 'Error', message: info.error } } : undefined;\n          this._waitOperations.delete(info.waitId);\n          await sdkObject.instrumentation.onAfterCall(sdkObject, originalMetadata);\n          this.onmessage({ id });\n          return;\n        }\n      }\n    }\n\n    await sdkObject?.instrumentation.onBeforeCall(sdkObject, callMetadata);\n    const response: any = { id };\n    try {\n      const result = await dispatcher._handleCommand(callMetadata, method, validParams);\n      const validator = findValidator(dispatcher._type, method, 'Result');\n      response.result = validator(result, '', this._validatorToWireContext());\n      callMetadata.result = result;\n    } catch (e) {\n      if (isTargetClosedError(e) && sdkObject) {\n        const reason = closeReason(sdkObject);\n        if (reason)\n          rewriteErrorMessage(e, reason);\n      } else if (isProtocolError(e)) {\n        if (e.type === 'closed') {\n          const reason = sdkObject ? closeReason(sdkObject) : undefined;\n          e = new TargetClosedError(reason, e.browserLogMessage());\n        } else if (e.type === 'crashed') {\n          rewriteErrorMessage(e, 'Target crashed ' + e.browserLogMessage());\n        }\n      }\n      response.error = serializeError(e);\n      // The command handler could have set error in the metadata, do not reset it if there was no exception.\n      callMetadata.error = response.error;\n    } finally {\n      callMetadata.endTime = monotonicTime();\n      await sdkObject?.instrumentation.onAfterCall(sdkObject, callMetadata);\n    }\n\n    if (response.error)\n      response.log = compressCallLog(callMetadata.log);\n    this.onmessage(response);\n  }\n}\n\nfunction closeReason(sdkObject: SdkObject): string | undefined {\n  return sdkObject.attribution.page?.closeReason ||\n    sdkObject.attribution.context?._closeReason ||\n    sdkObject.attribution.browser?._closeReason;\n}\n","export const source = \"\\nvar __commonJS = obj => {\\n  let required = false;\\n  let result;\\n  return function __require() {\\n    if (!required) {\\n      required = true;\\n      let fn;\\n      for (const name in obj) { fn = obj[name]; break; }\\n      const module = { exports: {} };\\n      fn(module.exports, module);\\n      result = module.exports;\\n    }\\n    return result;\\n  }\\n};\\nvar __export = (target, all) => {for (var name in all) target[name] = all[name];};\\nvar __toESM = mod => ({ ...mod, 'default': mod });\\nvar __toCommonJS = mod => ({ ...mod, __esModule: true });\\n\\n\\n// packages/injected/src/clock.ts\\nvar clock_exports = {};\\n__export(clock_exports, {\\n  ClockController: () => ClockController,\\n  createClock: () => createClock,\\n  inject: () => inject,\\n  install: () => install\\n});\\nmodule.exports = __toCommonJS(clock_exports);\\nvar ClockController = class {\\n  constructor(embedder) {\\n    this._duringTick = false;\\n    this._uniqueTimerId = idCounterStart;\\n    this.disposables = [];\\n    this._log = [];\\n    this._timers = /* @__PURE__ */ new Map();\\n    this._now = { time: asWallTime(0), isFixedTime: false, ticks: 0, origin: asWallTime(-1) };\\n    this._embedder = embedder;\\n  }\\n  uninstall() {\\n    this.disposables.forEach((dispose) => dispose());\\n    this.disposables.length = 0;\\n  }\\n  now() {\\n    this._replayLogOnce();\\n    this._syncRealTime();\\n    return this._now.time;\\n  }\\n  install(time) {\\n    this._replayLogOnce();\\n    this._innerSetTime(asWallTime(time));\\n  }\\n  setSystemTime(time) {\\n    this._replayLogOnce();\\n    this._innerSetTime(asWallTime(time));\\n  }\\n  setFixedTime(time) {\\n    this._replayLogOnce();\\n    this._innerSetFixedTime(asWallTime(time));\\n  }\\n  performanceNow() {\\n    this._replayLogOnce();\\n    this._syncRealTime();\\n    return this._now.ticks;\\n  }\\n  _syncRealTime() {\\n    if (!this._realTime)\\n      return;\\n    const now = this._embedder.performanceNow();\\n    const sinceLastSync = now - this._realTime.lastSyncTicks;\\n    if (sinceLastSync > 0) {\\n      this._advanceNow(shiftTicks(this._now.ticks, sinceLastSync));\\n      this._realTime.lastSyncTicks = now;\\n    }\\n  }\\n  _innerSetTime(time) {\\n    this._now.time = time;\\n    this._now.isFixedTime = false;\\n    if (this._now.origin < 0)\\n      this._now.origin = this._now.time;\\n  }\\n  _innerSetFixedTime(time) {\\n    this._innerSetTime(time);\\n    this._now.isFixedTime = true;\\n  }\\n  _advanceNow(to) {\\n    if (!this._now.isFixedTime)\\n      this._now.time = asWallTime(this._now.time + to - this._now.ticks);\\n    this._now.ticks = to;\\n  }\\n  async log(type, time, param) {\\n    this._log.push({ type, time, param });\\n  }\\n  async runFor(ticks) {\\n    this._replayLogOnce();\\n    if (ticks < 0)\\n      throw new TypeError(\\\"Negative ticks are not supported\\\");\\n    await this._runTo(shiftTicks(this._now.ticks, ticks));\\n  }\\n  async _runTo(to) {\\n    to = Math.ceil(to);\\n    if (this._now.ticks > to)\\n      return;\\n    let firstException;\\n    while (true) {\\n      const result = await this._callFirstTimer(to);\\n      if (!result.timerFound)\\n        break;\\n      firstException = firstException || result.error;\\n    }\\n    this._advanceNow(to);\\n    if (firstException)\\n      throw firstException;\\n  }\\n  async pauseAt(time) {\\n    this._replayLogOnce();\\n    this._innerPause();\\n    const toConsume = time - this._now.time;\\n    await this._innerFastForwardTo(shiftTicks(this._now.ticks, toConsume));\\n    return toConsume;\\n  }\\n  _innerPause() {\\n    this._realTime = void 0;\\n    this._updateRealTimeTimer();\\n  }\\n  resume() {\\n    this._replayLogOnce();\\n    this._innerResume();\\n  }\\n  _innerResume() {\\n    const now = this._embedder.performanceNow();\\n    this._realTime = { startTicks: now, lastSyncTicks: now };\\n    this._updateRealTimeTimer();\\n  }\\n  _updateRealTimeTimer() {\\n    var _a;\\n    if (!this._realTime) {\\n      (_a = this._currentRealTimeTimer) == null ? void 0 : _a.dispose();\\n      this._currentRealTimeTimer = void 0;\\n      return;\\n    }\\n    const firstTimer = this._firstTimer();\\n    const callAt = Math.min(firstTimer ? firstTimer.callAt : this._now.ticks + maxTimeout, this._now.ticks + 100);\\n    if (this._currentRealTimeTimer && this._currentRealTimeTimer.callAt < callAt)\\n      return;\\n    if (this._currentRealTimeTimer) {\\n      this._currentRealTimeTimer.dispose();\\n      this._currentRealTimeTimer = void 0;\\n    }\\n    this._currentRealTimeTimer = {\\n      callAt,\\n      dispose: this._embedder.setTimeout(() => {\\n        this._currentRealTimeTimer = void 0;\\n        this._syncRealTime();\\n        void this._runTo(this._now.ticks).catch((e) => console.error(e)).then(() => this._updateRealTimeTimer());\\n      }, callAt - this._now.ticks)\\n    };\\n  }\\n  async fastForward(ticks) {\\n    this._replayLogOnce();\\n    await this._innerFastForwardTo(shiftTicks(this._now.ticks, ticks | 0));\\n  }\\n  async _innerFastForwardTo(to) {\\n    if (to < this._now.ticks)\\n      throw new Error(\\\"Cannot fast-forward to the past\\\");\\n    for (const timer of this._timers.values()) {\\n      if (to > timer.callAt)\\n        timer.callAt = to;\\n    }\\n    await this._runTo(to);\\n  }\\n  addTimer(options) {\\n    this._replayLogOnce();\\n    if (options.type === \\\"AnimationFrame\\\" /* AnimationFrame */ && !options.func)\\n      throw new Error(\\\"Callback must be provided to requestAnimationFrame calls\\\");\\n    if (options.type === \\\"IdleCallback\\\" /* IdleCallback */ && !options.func)\\n      throw new Error(\\\"Callback must be provided to requestIdleCallback calls\\\");\\n    if ([\\\"Timeout\\\" /* Timeout */, \\\"Interval\\\" /* Interval */].includes(options.type) && !options.func && options.delay === void 0)\\n      throw new Error(\\\"Callback must be provided to timer calls\\\");\\n    let delay = options.delay ? +options.delay : 0;\\n    if (!Number.isFinite(delay))\\n      delay = 0;\\n    delay = delay > maxTimeout ? 1 : delay;\\n    delay = Math.max(0, delay);\\n    const timer = {\\n      type: options.type,\\n      func: options.func,\\n      args: options.args || [],\\n      delay,\\n      callAt: shiftTicks(this._now.ticks, delay || (this._duringTick ? 1 : 0)),\\n      createdAt: this._now.ticks,\\n      id: this._uniqueTimerId++,\\n      error: new Error()\\n    };\\n    this._timers.set(timer.id, timer);\\n    if (this._realTime)\\n      this._updateRealTimeTimer();\\n    return timer.id;\\n  }\\n  countTimers() {\\n    return this._timers.size;\\n  }\\n  _firstTimer(beforeTick) {\\n    let firstTimer = null;\\n    for (const timer of this._timers.values()) {\\n      const isInRange = beforeTick === void 0 || timer.callAt <= beforeTick;\\n      if (isInRange && (!firstTimer || compareTimers(firstTimer, timer) === 1))\\n        firstTimer = timer;\\n    }\\n    return firstTimer;\\n  }\\n  _takeFirstTimer(beforeTick) {\\n    const timer = this._firstTimer(beforeTick);\\n    if (!timer)\\n      return null;\\n    this._advanceNow(timer.callAt);\\n    if (timer.type === \\\"Interval\\\" /* Interval */)\\n      timer.callAt = shiftTicks(timer.callAt, timer.delay);\\n    else\\n      this._timers.delete(timer.id);\\n    return timer;\\n  }\\n  async _callFirstTimer(beforeTick) {\\n    const timer = this._takeFirstTimer(beforeTick);\\n    if (!timer)\\n      return { timerFound: false };\\n    this._duringTick = true;\\n    try {\\n      if (typeof timer.func !== \\\"function\\\") {\\n        let error2;\\n        try {\\n          (() => {\\n            globalThis.eval(timer.func);\\n          })();\\n        } catch (e) {\\n          error2 = e;\\n        }\\n        await new Promise((f) => this._embedder.setTimeout(f));\\n        return { timerFound: true, error: error2 };\\n      }\\n      let args = timer.args;\\n      if (timer.type === \\\"AnimationFrame\\\" /* AnimationFrame */)\\n        args = [this._now.ticks];\\n      else if (timer.type === \\\"IdleCallback\\\" /* IdleCallback */)\\n        args = [{ didTimeout: false, timeRemaining: () => 0 }];\\n      let error;\\n      try {\\n        timer.func.apply(null, args);\\n      } catch (e) {\\n        error = e;\\n      }\\n      await new Promise((f) => this._embedder.setTimeout(f));\\n      return { timerFound: true, error };\\n    } finally {\\n      this._duringTick = false;\\n    }\\n  }\\n  getTimeToNextFrame() {\\n    return 16 - this._now.ticks % 16;\\n  }\\n  clearTimer(timerId, type) {\\n    this._replayLogOnce();\\n    if (!timerId) {\\n      return;\\n    }\\n    const id = Number(timerId);\\n    if (Number.isNaN(id) || id < idCounterStart) {\\n      const handlerName = getClearHandler(type);\\n      new Error(`Clock: ${handlerName} was invoked to clear a native timer instead of one created by the clock library.`);\\n    }\\n    const timer = this._timers.get(id);\\n    if (timer) {\\n      if (timer.type === type || timer.type === \\\"Timeout\\\" && type === \\\"Interval\\\" || timer.type === \\\"Interval\\\" && type === \\\"Timeout\\\") {\\n        this._timers.delete(id);\\n      } else {\\n        const clear = getClearHandler(type);\\n        const schedule = getScheduleHandler(timer.type);\\n        throw new Error(\\n          `Cannot clear timer: timer created with ${schedule}() but cleared with ${clear}()`\\n        );\\n      }\\n    }\\n  }\\n  _replayLogOnce() {\\n    if (!this._log.length)\\n      return;\\n    let lastLogTime = -1;\\n    let isPaused = false;\\n    for (const { type, time, param } of this._log) {\\n      if (!isPaused && lastLogTime !== -1)\\n        this._advanceNow(shiftTicks(this._now.ticks, time - lastLogTime));\\n      lastLogTime = time;\\n      if (type === \\\"install\\\") {\\n        this._innerSetTime(asWallTime(param));\\n      } else if (type === \\\"fastForward\\\" || type === \\\"runFor\\\") {\\n        this._advanceNow(shiftTicks(this._now.ticks, param));\\n      } else if (type === \\\"pauseAt\\\") {\\n        isPaused = true;\\n        this._innerPause();\\n        this._innerSetTime(asWallTime(param));\\n      } else if (type === \\\"resume\\\") {\\n        this._innerResume();\\n        isPaused = false;\\n      } else if (type === \\\"setFixedTime\\\") {\\n        this._innerSetFixedTime(asWallTime(param));\\n      } else if (type === \\\"setSystemTime\\\") {\\n        this._innerSetTime(asWallTime(param));\\n      }\\n    }\\n    if (!isPaused && lastLogTime > 0)\\n      this._advanceNow(shiftTicks(this._now.ticks, this._embedder.dateNow() - lastLogTime));\\n    this._log.length = 0;\\n  }\\n};\\nfunction mirrorDateProperties(target, source) {\\n  for (const prop in source) {\\n    if (source.hasOwnProperty(prop))\\n      target[prop] = source[prop];\\n  }\\n  target.toString = () => source.toString();\\n  target.prototype = source.prototype;\\n  target.parse = source.parse;\\n  target.UTC = source.UTC;\\n  target.prototype.toUTCString = source.prototype.toUTCString;\\n  target.isFake = true;\\n  return target;\\n}\\nfunction createDate(clock, NativeDate) {\\n  function ClockDate(year, month, date, hour, minute, second, ms) {\\n    if (!(this instanceof ClockDate))\\n      return new NativeDate(clock.now()).toString();\\n    switch (arguments.length) {\\n      case 0:\\n        return new NativeDate(clock.now());\\n      case 1:\\n        return new NativeDate(year);\\n      case 2:\\n        return new NativeDate(year, month);\\n      case 3:\\n        return new NativeDate(year, month, date);\\n      case 4:\\n        return new NativeDate(year, month, date, hour);\\n      case 5:\\n        return new NativeDate(year, month, date, hour, minute);\\n      case 6:\\n        return new NativeDate(\\n          year,\\n          month,\\n          date,\\n          hour,\\n          minute,\\n          second\\n        );\\n      default:\\n        return new NativeDate(\\n          year,\\n          month,\\n          date,\\n          hour,\\n          minute,\\n          second,\\n          ms\\n        );\\n    }\\n  }\\n  ClockDate.now = () => clock.now();\\n  return mirrorDateProperties(ClockDate, NativeDate);\\n}\\nfunction createIntl(clock, NativeIntl) {\\n  const ClockIntl = {};\\n  for (const key of Object.getOwnPropertyNames(NativeIntl))\\n    ClockIntl[key] = NativeIntl[key];\\n  ClockIntl.DateTimeFormat = function(...args) {\\n    const realFormatter = new NativeIntl.DateTimeFormat(...args);\\n    const formatter = {\\n      formatRange: realFormatter.formatRange.bind(realFormatter),\\n      formatRangeToParts: realFormatter.formatRangeToParts.bind(realFormatter),\\n      resolvedOptions: realFormatter.resolvedOptions.bind(realFormatter),\\n      format: (date) => realFormatter.format(date || clock.now()),\\n      formatToParts: (date) => realFormatter.formatToParts(date || clock.now())\\n    };\\n    return formatter;\\n  };\\n  ClockIntl.DateTimeFormat.prototype = Object.create(\\n    NativeIntl.DateTimeFormat.prototype\\n  );\\n  ClockIntl.DateTimeFormat.supportedLocalesOf = NativeIntl.DateTimeFormat.supportedLocalesOf;\\n  return ClockIntl;\\n}\\nfunction compareTimers(a, b) {\\n  if (a.callAt < b.callAt)\\n    return -1;\\n  if (a.callAt > b.callAt)\\n    return 1;\\n  if (a.type === \\\"Immediate\\\" /* Immediate */ && b.type !== \\\"Immediate\\\" /* Immediate */)\\n    return -1;\\n  if (a.type !== \\\"Immediate\\\" /* Immediate */ && b.type === \\\"Immediate\\\" /* Immediate */)\\n    return 1;\\n  if (a.createdAt < b.createdAt)\\n    return -1;\\n  if (a.createdAt > b.createdAt)\\n    return 1;\\n  if (a.id < b.id)\\n    return -1;\\n  if (a.id > b.id)\\n    return 1;\\n}\\nvar maxTimeout = Math.pow(2, 31) - 1;\\nvar idCounterStart = 1e12;\\nfunction platformOriginals(globalObject) {\\n  const raw = {\\n    setTimeout: globalObject.setTimeout,\\n    clearTimeout: globalObject.clearTimeout,\\n    setInterval: globalObject.setInterval,\\n    clearInterval: globalObject.clearInterval,\\n    requestAnimationFrame: globalObject.requestAnimationFrame ? globalObject.requestAnimationFrame : void 0,\\n    cancelAnimationFrame: globalObject.cancelAnimationFrame ? globalObject.cancelAnimationFrame : void 0,\\n    requestIdleCallback: globalObject.requestIdleCallback ? globalObject.requestIdleCallback : void 0,\\n    cancelIdleCallback: globalObject.cancelIdleCallback ? globalObject.cancelIdleCallback : void 0,\\n    Date: globalObject.Date,\\n    performance: globalObject.performance,\\n    Intl: globalObject.Intl\\n  };\\n  const bound = { ...raw };\\n  for (const key of Object.keys(bound)) {\\n    if (key !== \\\"Date\\\" && typeof bound[key] === \\\"function\\\")\\n      bound[key] = bound[key].bind(globalObject);\\n  }\\n  return { raw, bound };\\n}\\nfunction getScheduleHandler(type) {\\n  if (type === \\\"IdleCallback\\\" || type === \\\"AnimationFrame\\\")\\n    return `request${type}`;\\n  return `set${type}`;\\n}\\nfunction createApi(clock, originals) {\\n  return {\\n    setTimeout: (func, timeout, ...args) => {\\n      const delay = timeout ? +timeout : timeout;\\n      return clock.addTimer({\\n        type: \\\"Timeout\\\" /* Timeout */,\\n        func,\\n        args,\\n        delay\\n      });\\n    },\\n    clearTimeout: (timerId) => {\\n      if (timerId)\\n        clock.clearTimer(timerId, \\\"Timeout\\\" /* Timeout */);\\n    },\\n    setInterval: (func, timeout, ...args) => {\\n      const delay = timeout ? +timeout : timeout;\\n      return clock.addTimer({\\n        type: \\\"Interval\\\" /* Interval */,\\n        func,\\n        args,\\n        delay\\n      });\\n    },\\n    clearInterval: (timerId) => {\\n      if (timerId)\\n        return clock.clearTimer(timerId, \\\"Interval\\\" /* Interval */);\\n    },\\n    requestAnimationFrame: (callback) => {\\n      return clock.addTimer({\\n        type: \\\"AnimationFrame\\\" /* AnimationFrame */,\\n        func: callback,\\n        delay: clock.getTimeToNextFrame()\\n      });\\n    },\\n    cancelAnimationFrame: (timerId) => {\\n      if (timerId)\\n        return clock.clearTimer(timerId, \\\"AnimationFrame\\\" /* AnimationFrame */);\\n    },\\n    requestIdleCallback: (callback, options) => {\\n      let timeToNextIdlePeriod = 0;\\n      if (clock.countTimers() > 0)\\n        timeToNextIdlePeriod = 50;\\n      return clock.addTimer({\\n        type: \\\"IdleCallback\\\" /* IdleCallback */,\\n        func: callback,\\n        delay: (options == null ? void 0 : options.timeout) ? Math.min(options == null ? void 0 : options.timeout, timeToNextIdlePeriod) : timeToNextIdlePeriod\\n      });\\n    },\\n    cancelIdleCallback: (timerId) => {\\n      if (timerId)\\n        return clock.clearTimer(timerId, \\\"IdleCallback\\\" /* IdleCallback */);\\n    },\\n    Intl: originals.Intl ? createIntl(clock, originals.Intl) : void 0,\\n    Date: createDate(clock, originals.Date),\\n    performance: originals.performance ? fakePerformance(clock, originals.performance) : void 0\\n  };\\n}\\nfunction getClearHandler(type) {\\n  if (type === \\\"IdleCallback\\\" || type === \\\"AnimationFrame\\\")\\n    return `cancel${type}`;\\n  return `clear${type}`;\\n}\\nfunction fakePerformance(clock, performance) {\\n  const result = {\\n    now: () => clock.performanceNow()\\n  };\\n  result.__defineGetter__(\\\"timeOrigin\\\", () => clock._now.origin || 0);\\n  for (const key of Object.keys(performance.__proto__)) {\\n    if (key === \\\"now\\\" || key === \\\"timeOrigin\\\")\\n      continue;\\n    if (key === \\\"getEntries\\\" || key === \\\"getEntriesByName\\\" || key === \\\"getEntriesByType\\\")\\n      result[key] = () => [];\\n    else\\n      result[key] = () => {\\n      };\\n  }\\n  return result;\\n}\\nfunction createClock(globalObject) {\\n  const originals = platformOriginals(globalObject);\\n  const embedder = {\\n    dateNow: () => originals.raw.Date.now(),\\n    performanceNow: () => Math.ceil(originals.raw.performance.now()),\\n    setTimeout: (task, timeout) => {\\n      const timerId = originals.bound.setTimeout(task, timeout);\\n      return () => originals.bound.clearTimeout(timerId);\\n    },\\n    setInterval: (task, delay) => {\\n      const intervalId = originals.bound.setInterval(task, delay);\\n      return () => originals.bound.clearInterval(intervalId);\\n    }\\n  };\\n  const clock = new ClockController(embedder);\\n  const api = createApi(clock, originals.bound);\\n  return { clock, api, originals: originals.raw };\\n}\\nfunction install(globalObject, config = {}) {\\n  var _a, _b;\\n  if ((_a = globalObject.Date) == null ? void 0 : _a.isFake) {\\n    throw new TypeError(`Can't install fake timers twice on the same global object.`);\\n  }\\n  const { clock, api, originals } = createClock(globalObject);\\n  const toFake = ((_b = config.toFake) == null ? void 0 : _b.length) ? config.toFake : Object.keys(originals);\\n  for (const method of toFake) {\\n    if (method === \\\"Date\\\") {\\n      globalObject.Date = mirrorDateProperties(api.Date, globalObject.Date);\\n    } else if (method === \\\"Intl\\\") {\\n      globalObject.Intl = api[method];\\n    } else if (method === \\\"performance\\\") {\\n      globalObject.performance = api[method];\\n      const kEventTimeStamp = Symbol(\\\"playwrightEventTimeStamp\\\");\\n      Object.defineProperty(Event.prototype, \\\"timeStamp\\\", {\\n        get() {\\n          var _a2;\\n          if (!this[kEventTimeStamp])\\n            this[kEventTimeStamp] = (_a2 = api.performance) == null ? void 0 : _a2.now();\\n          return this[kEventTimeStamp];\\n        }\\n      });\\n    } else {\\n      globalObject[method] = (...args) => {\\n        return api[method].apply(api, args);\\n      };\\n    }\\n    clock.disposables.push(() => {\\n      globalObject[method] = originals[method];\\n    });\\n  }\\n  return { clock, api, originals };\\n}\\nfunction inject(globalObject) {\\n  const builtins = platformOriginals(globalObject).bound;\\n  const { clock: controller } = install(globalObject);\\n  controller.resume();\\n  return {\\n    controller,\\n    builtins\\n  };\\n}\\nfunction asWallTime(n) {\\n  return n;\\n}\\nfunction shiftTicks(ticks, ms) {\\n  return ticks + ms;\\n}\\n\";","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as rawClockSource from '../generated/clockSource';\n\nimport type { BrowserContext } from './browserContext';\nimport type { InitScript } from './page';\n\nexport class Clock {\n  private _browserContext: BrowserContext;\n  private _initScripts: InitScript[] = [];\n\n  constructor(browserContext: BrowserContext) {\n    this._browserContext = browserContext;\n  }\n\n  async resetForReuse() {\n    await this._browserContext.removeInitScripts(this._initScripts);\n    this._initScripts = [];\n  }\n\n  async fastForward(ticks: number | string) {\n    await this._installIfNeeded();\n    const ticksMillis = parseTicks(ticks);\n    this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('fastForward', ${Date.now()}, ${ticksMillis})`));\n    await this._evaluateInFrames(`globalThis.__pwClock.controller.fastForward(${ticksMillis})`);\n  }\n\n  async install(time: number | string | undefined) {\n    await this._installIfNeeded();\n    const timeMillis = time !== undefined ? parseTime(time) : Date.now();\n    this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('install', ${Date.now()}, ${timeMillis})`));\n    await this._evaluateInFrames(`globalThis.__pwClock.controller.install(${timeMillis})`);\n  }\n\n  async pauseAt(ticks: number | string) {\n    await this._installIfNeeded();\n    const timeMillis = parseTime(ticks);\n    this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('pauseAt', ${Date.now()}, ${timeMillis})`));\n    await this._evaluateInFrames(`globalThis.__pwClock.controller.pauseAt(${timeMillis})`);\n  }\n\n  async resume() {\n    await this._installIfNeeded();\n    this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('resume', ${Date.now()})`));\n    await this._evaluateInFrames(`globalThis.__pwClock.controller.resume()`);\n  }\n\n  async setFixedTime(time: string | number) {\n    await this._installIfNeeded();\n    const timeMillis = parseTime(time);\n    this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('setFixedTime', ${Date.now()}, ${timeMillis})`));\n    await this._evaluateInFrames(`globalThis.__pwClock.controller.setFixedTime(${timeMillis})`);\n  }\n\n  async setSystemTime(time: string | number) {\n    await this._installIfNeeded();\n    const timeMillis = parseTime(time);\n    this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('setSystemTime', ${Date.now()}, ${timeMillis})`));\n    await this._evaluateInFrames(`globalThis.__pwClock.controller.setSystemTime(${timeMillis})`);\n  }\n\n  async runFor(ticks: number | string) {\n    await this._installIfNeeded();\n    const ticksMillis = parseTicks(ticks);\n    this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('runFor', ${Date.now()}, ${ticksMillis})`));\n    await this._evaluateInFrames(`globalThis.__pwClock.controller.runFor(${ticksMillis})`);\n  }\n\n  private async _installIfNeeded() {\n    if (this._initScripts.length)\n      return;\n    const script = `(() => {\n      const module = {};\n      ${rawClockSource.source}\n      globalThis.__pwClock = (module.exports.inject())(globalThis);\n    })();`;\n    this._initScripts.push(await this._browserContext.addInitScript(script));\n    await this._evaluateInFrames(script);\n  }\n\n  private async _evaluateInFrames(script: string) {\n    await this._browserContext.safeNonStallingEvaluateInAllFrames(script, 'main', { throwOnJSErrors: true });\n  }\n}\n\n/**\n * Parse strings like '01:10:00' (meaning 1 hour, 10 minutes, 0 seconds) into\n * number of milliseconds. This is used to support human-readable strings passed\n * to clock.tick()\n */\nfunction parseTicks(value: number | string): number {\n  if (typeof value === 'number')\n    return value;\n  if (!value)\n    return 0;\n  const str = value;\n\n  const strings = str.split(':');\n  const l = strings.length;\n  let i = l;\n  let ms = 0;\n  let parsed;\n\n  if (l > 3 || !/^(\\d\\d:){0,2}\\d\\d?$/.test(str)) {\n    throw new Error(\n        `Clock only understands numbers, 'mm:ss' and 'hh:mm:ss'`,\n    );\n  }\n\n  while (i--) {\n    parsed = parseInt(strings[i], 10);\n    if (parsed >= 60)\n      throw new Error(`Invalid time ${str}`);\n    ms += parsed * Math.pow(60, l - i - 1);\n  }\n\n  return ms * 1000;\n}\n\nfunction parseTime(epoch: string | number | undefined): number {\n  if (!epoch)\n    return 0;\n  if (typeof epoch === 'number')\n    return epoch;\n  const parsed = new Date(epoch);\n  if (!isFinite(parsed.getTime()))\n    throw new Error(`Invalid date: ${epoch}`);\n  return parsed.getTime();\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport { debugMode, isUnderTest, monotonicTime } from '../utils';\nimport { BrowserContext } from './browserContext';\nimport { methodMetainfo } from '../utils/isomorphic/protocolMetainfo';\n\nimport type { CallMetadata, InstrumentationListener, SdkObject } from './instrumentation';\n\nconst symbol = Symbol('Debugger');\n\nexport class Debugger extends EventEmitter implements InstrumentationListener {\n  private _pauseOnNextStatement = false;\n  private _pausedCallsMetadata = new Map<CallMetadata, { resolve: () => void, sdkObject: SdkObject }>();\n  private _enabled: boolean;\n  private _context: BrowserContext;\n\n  static Events = {\n    PausedStateChanged: 'pausedstatechanged'\n  };\n  private _muted = false;\n  private _slowMo: number | undefined;\n\n  constructor(context: BrowserContext) {\n    super();\n    this._context = context;\n    (this._context as any)[symbol] = this;\n    this._enabled = debugMode() === 'inspector';\n    if (this._enabled)\n      this.pauseOnNextStatement();\n    context.instrumentation.addListener(this, context);\n    this._context.once(BrowserContext.Events.Close, () => {\n      this._context.instrumentation.removeListener(this);\n    });\n    this._slowMo = this._context._browser.options.slowMo;\n  }\n\n  async setMuted(muted: boolean) {\n    this._muted = muted;\n    if (muted) this.resume(false);\n  }\n\n  async onBeforeCall(sdkObject: SdkObject, metadata: CallMetadata): Promise<void> {\n    if (this._muted)\n      return;\n    if (shouldPauseOnCall(sdkObject, metadata) || (this._pauseOnNextStatement && shouldPauseBeforeStep(metadata)))\n      await this.pause(sdkObject, metadata);\n  }\n\n  async _doSlowMo() {\n    await new Promise(f => setTimeout(f, this._slowMo));\n  }\n\n  async onAfterCall(sdkObject: SdkObject, metadata: CallMetadata): Promise<void> {\n    if (this._slowMo && shouldSlowMo(metadata))\n      await this._doSlowMo();\n  }\n\n  async onBeforeInputAction(sdkObject: SdkObject, metadata: CallMetadata): Promise<void> {\n    if (this._muted)\n      return;\n\n    // onBeforeCall already handles metadata.pause, we don't want to pause again\n    if (metadata.playing)\n      return;\n\n    if (this._enabled && this._pauseOnNextStatement)\n      await this.pause(sdkObject, metadata);\n  }\n\n  async pause(sdkObject: SdkObject, metadata: CallMetadata) {\n    if (this._muted)\n      return;\n    this._enabled = true;\n    metadata.pauseStartTime = monotonicTime();\n    const result = new Promise<void>(resolve => {\n      this._pausedCallsMetadata.set(metadata, { resolve, sdkObject });\n    });\n    this.emit(Debugger.Events.PausedStateChanged);\n    return result;\n  }\n\n  resume(step: boolean) {\n    if (!this.isPaused())\n      return;\n\n    this._pauseOnNextStatement = step;\n    const endTime = monotonicTime();\n    for (const [metadata, { resolve }] of this._pausedCallsMetadata) {\n      metadata.pauseEndTime = endTime;\n      resolve();\n    }\n    this._pausedCallsMetadata.clear();\n    this.emit(Debugger.Events.PausedStateChanged);\n  }\n\n  pauseOnNextStatement() {\n    this._pauseOnNextStatement = true;\n  }\n\n  isPaused(metadata?: CallMetadata): boolean {\n    if (metadata)\n      return this._pausedCallsMetadata.has(metadata);\n    return !!this._pausedCallsMetadata.size;\n  }\n\n  pausedDetails(): { metadata: CallMetadata, sdkObject: SdkObject }[] {\n    const result: { metadata: CallMetadata, sdkObject: SdkObject }[] = [];\n    for (const [metadata, { sdkObject }] of this._pausedCallsMetadata)\n      result.push({ metadata, sdkObject });\n    return result;\n  }\n}\n\nfunction shouldPauseOnCall(sdkObject: SdkObject, metadata: CallMetadata): boolean {\n  if (sdkObject.attribution.playwright.options.isServer)\n    return false;\n  if (!sdkObject.attribution.browser?.options.headful && !isUnderTest())\n    return false;\n  return metadata.method === 'pause';\n}\n\nfunction shouldPauseBeforeStep(metadata: CallMetadata): boolean {\n  if (metadata.playing)\n    return true;\n  // Don't stop on internal.\n  if (metadata.internal)\n    return false;\n  // Always stop on 'close'\n  if (metadata.method === 'close')\n    return true;\n  if (metadata.method === 'waitForSelector' || metadata.method === 'waitForEventInfo' || metadata.method === 'querySelector' || metadata.method === 'querySelectorAll')\n    return false;  // Never stop on those, primarily for the test harness.\n  const step = metadata.type + '.' + metadata.method;\n  // Stop before everything that generates snapshot. But don't stop before those marked as pausesBeforeInputActions\n  // since we stop in them on a separate instrumentation signal.\n  const metainfo = methodMetainfo.get(step);\n  if (metainfo?.internal)\n    return false;\n  return !!metainfo?.snapshot && !metainfo.pausesBeforeInput;\n}\n\nexport function shouldSlowMo(metadata: CallMetadata): boolean {\n  const metainfo = methodMetainfo.get(metadata.type + '.' + metadata.method);\n  return !!metainfo?.slowMo;\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '../utils';\nimport { SdkObject } from './instrumentation';\n\nimport type { Instrumentation } from './instrumentation';\nimport type { Page } from './page';\n\ntype OnHandle = (accept: boolean, promptText?: string) => Promise<void>;\n\nexport type DialogType = 'alert' | 'beforeunload' | 'confirm' | 'prompt';\n\nexport class Dialog extends SdkObject {\n  private _page: Page;\n  private _type: DialogType;\n  private _message: string;\n  private _onHandle: OnHandle;\n  private _handled = false;\n  private _defaultValue: string;\n\n  constructor(page: Page, type: DialogType, message: string, onHandle: OnHandle, defaultValue?: string) {\n    super(page, 'dialog');\n    this._page = page;\n    this._type = type;\n    this._message = message;\n    this._onHandle = onHandle;\n    this._defaultValue = defaultValue || '';\n  }\n\n  page() {\n    return this._page;\n  }\n\n  type(): string {\n    return this._type;\n  }\n\n  message(): string {\n    return this._message;\n  }\n\n  defaultValue(): string {\n    return this._defaultValue;\n  }\n\n  async accept(promptText?: string) {\n    assert(!this._handled, 'Cannot accept dialog which is already handled!');\n    this._handled = true;\n    this._page.browserContext.dialogManager.dialogWillClose(this);\n    await this._onHandle(true, promptText);\n  }\n\n  async dismiss() {\n    assert(!this._handled, 'Cannot dismiss dialog which is already handled!');\n    this._handled = true;\n    this._page.browserContext.dialogManager.dialogWillClose(this);\n    await this._onHandle(false);\n  }\n\n  async close() {\n    if (this._type === 'beforeunload')\n      await this.accept();\n    else\n      await this.dismiss();\n  }\n}\n\nexport class DialogManager {\n  private _instrumentation: Instrumentation;\n  private _dialogHandlers = new Set<(dialog: Dialog) => boolean>();\n  private _openedDialogs = new Set<Dialog>();\n\n  constructor(instrumentation: Instrumentation) {\n    this._instrumentation = instrumentation;\n  }\n\n  dialogDidOpen(dialog: Dialog) {\n    // Any ongoing evaluations will be stalled until the dialog is closed.\n    for (const frame of dialog.page().frameManager.frames())\n      frame._invalidateNonStallingEvaluations('JavaScript dialog interrupted evaluation');\n    this._openedDialogs.add(dialog);\n    this._instrumentation.onDialog(dialog);\n\n    let hasHandlers = false;\n    for (const handler of this._dialogHandlers) {\n      if (handler(dialog))\n        hasHandlers = true;\n    }\n    if (!hasHandlers)\n      dialog.close().then(() => {});\n  }\n\n  dialogWillClose(dialog: Dialog) {\n    this._openedDialogs.delete(dialog);\n  }\n\n  addDialogHandler(handler: (dialog: Dialog) => boolean) {\n    this._dialogHandlers.add(handler);\n  }\n\n  removeDialogHandler(handler: (dialog: Dialog) => boolean) {\n    this._dialogHandlers.delete(handler);\n    if (!this._dialogHandlers.size) {\n      for (const dialog of this._openedDialogs)\n        dialog.close().catch(() => {});\n    }\n  }\n\n  hasOpenDialogsForPage(page: Page) {\n    return [...this._openedDialogs].some(dialog => dialog.page() === page);\n  }\n\n  async closeBeforeUnloadDialogs() {\n    await Promise.all([...this._openedDialogs].map(async dialog => {\n      if (dialog.type() === 'beforeunload')\n        await dialog.dismiss();\n    }));\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\n\nimport { assert } from '../utils';\nimport { TargetClosedError } from './errors';\nimport { SdkObject } from './instrumentation';\nimport { ManualPromise } from '../utils/isomorphic/manualPromise';\n\ntype SaveCallback = (localPath: string, error?: Error) => Promise<void>;\ntype CancelCallback = () => Promise<void>;\n\nexport class Artifact extends SdkObject {\n  private _localPath: string;\n  private _unaccessibleErrorMessage: string | undefined;\n  private _cancelCallback: CancelCallback | undefined;\n  private _finishedPromise = new ManualPromise<void>();\n  private _saveCallbacks: SaveCallback[] = [];\n  private _finished: boolean = false;\n  private _deleted = false;\n  private _failureError: Error | undefined;\n\n  constructor(parent: SdkObject, localPath: string, unaccessibleErrorMessage?: string, cancelCallback?: CancelCallback) {\n    super(parent, 'artifact');\n    this._localPath = localPath;\n    this._unaccessibleErrorMessage = unaccessibleErrorMessage;\n    this._cancelCallback = cancelCallback;\n  }\n\n  finishedPromise() {\n    return this._finishedPromise;\n  }\n\n  localPath() {\n    return this._localPath;\n  }\n\n  async localPathAfterFinished(): Promise<string> {\n    if (this._unaccessibleErrorMessage)\n      throw new Error(this._unaccessibleErrorMessage);\n    await this._finishedPromise;\n    if (this._failureError)\n      throw this._failureError;\n    return this._localPath;\n  }\n\n  saveAs(saveCallback: SaveCallback) {\n    if (this._unaccessibleErrorMessage)\n      throw new Error(this._unaccessibleErrorMessage);\n    if (this._deleted)\n      throw new Error(`File already deleted. Save before deleting.`);\n    if (this._failureError)\n      throw this._failureError;\n\n    if (this._finished) {\n      saveCallback(this._localPath).catch(() => {});\n      return;\n    }\n    this._saveCallbacks.push(saveCallback);\n  }\n\n  async failureError(): Promise<string | null> {\n    if (this._unaccessibleErrorMessage)\n      return this._unaccessibleErrorMessage;\n    await this._finishedPromise;\n    return this._failureError?.message || null;\n  }\n\n  async cancel(): Promise<void> {\n    assert(this._cancelCallback !== undefined);\n    return this._cancelCallback();\n  }\n\n  async delete(): Promise<void> {\n    if (this._unaccessibleErrorMessage)\n      return;\n    const fileName = await this.localPathAfterFinished();\n    if (this._deleted)\n      return;\n    this._deleted = true;\n    if (fileName)\n      await fs.promises.unlink(fileName).catch(e => {});\n  }\n\n  async deleteOnContextClose(): Promise<void> {\n    // Compared to \"delete\", this method does not wait for the artifact to finish.\n    // We use it when closing the context to avoid stalling.\n    if (this._deleted)\n      return;\n    this._deleted = true;\n    if (!this._unaccessibleErrorMessage)\n      await fs.promises.unlink(this._localPath).catch(e => {});\n    await this.reportFinished(new TargetClosedError());\n  }\n\n  async reportFinished(error?: Error) {\n    if (this._finished)\n      return;\n    this._finished = true;\n    this._failureError = error;\n\n    if (error) {\n      for (const callback of this._saveCallbacks)\n        await callback('', error);\n    } else {\n      for (const callback of this._saveCallbacks)\n        await callback(this._localPath);\n    }\n    this._saveCallbacks = [];\n\n    this._finishedPromise.resolve();\n  }\n}\n","export const source = \"\\nvar __commonJS = obj => {\\n  let required = false;\\n  let result;\\n  return function __require() {\\n    if (!required) {\\n      required = true;\\n      let fn;\\n      for (const name in obj) { fn = obj[name]; break; }\\n      const module = { exports: {} };\\n      fn(module.exports, module);\\n      result = module.exports;\\n    }\\n    return result;\\n  }\\n};\\nvar __export = (target, all) => {for (var name in all) target[name] = all[name];};\\nvar __toESM = mod => ({ ...mod, 'default': mod });\\nvar __toCommonJS = mod => ({ ...mod, __esModule: true });\\n\\n\\n// packages/injected/src/utilityScript.ts\\nvar utilityScript_exports = {};\\n__export(utilityScript_exports, {\\n  UtilityScript: () => UtilityScript\\n});\\nmodule.exports = __toCommonJS(utilityScript_exports);\\n\\n// packages/playwright-core/src/utils/isomorphic/utilityScriptSerializers.ts\\nfunction isRegExp(obj) {\\n  try {\\n    return obj instanceof RegExp || Object.prototype.toString.call(obj) === \\\"[object RegExp]\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isDate(obj) {\\n  try {\\n    return obj instanceof Date || Object.prototype.toString.call(obj) === \\\"[object Date]\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isURL(obj) {\\n  try {\\n    return obj instanceof URL || Object.prototype.toString.call(obj) === \\\"[object URL]\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isError(obj) {\\n  var _a;\\n  try {\\n    return obj instanceof Error || obj && ((_a = Object.getPrototypeOf(obj)) == null ? void 0 : _a.name) === \\\"Error\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isTypedArray(obj, constructor) {\\n  try {\\n    return obj instanceof constructor || Object.prototype.toString.call(obj) === `[object ${constructor.name}]`;\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nvar typedArrayConstructors = {\\n  i8: Int8Array,\\n  ui8: Uint8Array,\\n  ui8c: Uint8ClampedArray,\\n  i16: Int16Array,\\n  ui16: Uint16Array,\\n  i32: Int32Array,\\n  ui32: Uint32Array,\\n  // TODO: add Float16Array once it's in baseline\\n  f32: Float32Array,\\n  f64: Float64Array,\\n  bi64: BigInt64Array,\\n  bui64: BigUint64Array\\n};\\nfunction typedArrayToBase64(array) {\\n  if (\\\"toBase64\\\" in array)\\n    return array.toBase64();\\n  const binary = Array.from(new Uint8Array(array.buffer, array.byteOffset, array.byteLength)).map((b) => String.fromCharCode(b)).join(\\\"\\\");\\n  return btoa(binary);\\n}\\nfunction base64ToTypedArray(base64, TypedArrayConstructor) {\\n  const binary = atob(base64);\\n  const bytes = new Uint8Array(binary.length);\\n  for (let i = 0; i < binary.length; i++)\\n    bytes[i] = binary.charCodeAt(i);\\n  return new TypedArrayConstructor(bytes.buffer);\\n}\\nfunction parseEvaluationResultValue(value, handles = [], refs = /* @__PURE__ */ new Map()) {\\n  if (Object.is(value, void 0))\\n    return void 0;\\n  if (typeof value === \\\"object\\\" && value) {\\n    if (\\\"ref\\\" in value)\\n      return refs.get(value.ref);\\n    if (\\\"v\\\" in value) {\\n      if (value.v === \\\"undefined\\\")\\n        return void 0;\\n      if (value.v === \\\"null\\\")\\n        return null;\\n      if (value.v === \\\"NaN\\\")\\n        return NaN;\\n      if (value.v === \\\"Infinity\\\")\\n        return Infinity;\\n      if (value.v === \\\"-Infinity\\\")\\n        return -Infinity;\\n      if (value.v === \\\"-0\\\")\\n        return -0;\\n      return void 0;\\n    }\\n    if (\\\"d\\\" in value) {\\n      return new Date(value.d);\\n    }\\n    if (\\\"u\\\" in value)\\n      return new URL(value.u);\\n    if (\\\"bi\\\" in value)\\n      return BigInt(value.bi);\\n    if (\\\"e\\\" in value) {\\n      const error = new Error(value.e.m);\\n      error.name = value.e.n;\\n      error.stack = value.e.s;\\n      return error;\\n    }\\n    if (\\\"r\\\" in value)\\n      return new RegExp(value.r.p, value.r.f);\\n    if (\\\"a\\\" in value) {\\n      const result = [];\\n      refs.set(value.id, result);\\n      for (const a of value.a)\\n        result.push(parseEvaluationResultValue(a, handles, refs));\\n      return result;\\n    }\\n    if (\\\"o\\\" in value) {\\n      const result = {};\\n      refs.set(value.id, result);\\n      for (const { k, v } of value.o) {\\n        if (k === \\\"__proto__\\\")\\n          continue;\\n        result[k] = parseEvaluationResultValue(v, handles, refs);\\n      }\\n      return result;\\n    }\\n    if (\\\"h\\\" in value)\\n      return handles[value.h];\\n    if (\\\"ta\\\" in value)\\n      return base64ToTypedArray(value.ta.b, typedArrayConstructors[value.ta.k]);\\n  }\\n  return value;\\n}\\nfunction serializeAsCallArgument(value, handleSerializer) {\\n  return serialize(value, handleSerializer, { visited: /* @__PURE__ */ new Map(), lastId: 0 });\\n}\\nfunction serialize(value, handleSerializer, visitorInfo) {\\n  if (value && typeof value === \\\"object\\\") {\\n    if (typeof globalThis.Window === \\\"function\\\" && value instanceof globalThis.Window)\\n      return \\\"ref: <Window>\\\";\\n    if (typeof globalThis.Document === \\\"function\\\" && value instanceof globalThis.Document)\\n      return \\\"ref: <Document>\\\";\\n    if (typeof globalThis.Node === \\\"function\\\" && value instanceof globalThis.Node)\\n      return \\\"ref: <Node>\\\";\\n  }\\n  return innerSerialize(value, handleSerializer, visitorInfo);\\n}\\nfunction innerSerialize(value, handleSerializer, visitorInfo) {\\n  var _a;\\n  const result = handleSerializer(value);\\n  if (\\\"fallThrough\\\" in result)\\n    value = result.fallThrough;\\n  else\\n    return result;\\n  if (typeof value === \\\"symbol\\\")\\n    return { v: \\\"undefined\\\" };\\n  if (Object.is(value, void 0))\\n    return { v: \\\"undefined\\\" };\\n  if (Object.is(value, null))\\n    return { v: \\\"null\\\" };\\n  if (Object.is(value, NaN))\\n    return { v: \\\"NaN\\\" };\\n  if (Object.is(value, Infinity))\\n    return { v: \\\"Infinity\\\" };\\n  if (Object.is(value, -Infinity))\\n    return { v: \\\"-Infinity\\\" };\\n  if (Object.is(value, -0))\\n    return { v: \\\"-0\\\" };\\n  if (typeof value === \\\"boolean\\\")\\n    return value;\\n  if (typeof value === \\\"number\\\")\\n    return value;\\n  if (typeof value === \\\"string\\\")\\n    return value;\\n  if (typeof value === \\\"bigint\\\")\\n    return { bi: value.toString() };\\n  if (isError(value)) {\\n    let stack;\\n    if ((_a = value.stack) == null ? void 0 : _a.startsWith(value.name + \\\": \\\" + value.message)) {\\n      stack = value.stack;\\n    } else {\\n      stack = `${value.name}: ${value.message}\\n${value.stack}`;\\n    }\\n    return { e: { n: value.name, m: value.message, s: stack } };\\n  }\\n  if (isDate(value))\\n    return { d: value.toJSON() };\\n  if (isURL(value))\\n    return { u: value.toJSON() };\\n  if (isRegExp(value))\\n    return { r: { p: value.source, f: value.flags } };\\n  for (const [k, ctor] of Object.entries(typedArrayConstructors)) {\\n    if (isTypedArray(value, ctor))\\n      return { ta: { b: typedArrayToBase64(value), k } };\\n  }\\n  const id = visitorInfo.visited.get(value);\\n  if (id)\\n    return { ref: id };\\n  if (Array.isArray(value)) {\\n    const a = [];\\n    const id2 = ++visitorInfo.lastId;\\n    visitorInfo.visited.set(value, id2);\\n    for (let i = 0; i < value.length; ++i)\\n      a.push(serialize(value[i], handleSerializer, visitorInfo));\\n    return { a, id: id2 };\\n  }\\n  if (typeof value === \\\"object\\\") {\\n    const o = [];\\n    const id2 = ++visitorInfo.lastId;\\n    visitorInfo.visited.set(value, id2);\\n    for (const name of Object.keys(value)) {\\n      let item;\\n      try {\\n        item = value[name];\\n      } catch (e) {\\n        continue;\\n      }\\n      if (name === \\\"toJSON\\\" && typeof item === \\\"function\\\")\\n        o.push({ k: name, v: { o: [], id: 0 } });\\n      else\\n        o.push({ k: name, v: serialize(item, handleSerializer, visitorInfo) });\\n    }\\n    let jsonWrapper;\\n    try {\\n      if (o.length === 0 && value.toJSON && typeof value.toJSON === \\\"function\\\")\\n        jsonWrapper = { value: value.toJSON() };\\n    } catch (e) {\\n    }\\n    if (jsonWrapper)\\n      return innerSerialize(jsonWrapper.value, handleSerializer, visitorInfo);\\n    return { o, id: id2 };\\n  }\\n}\\n\\n// packages/injected/src/utilityScript.ts\\nvar UtilityScript = class {\\n  // eslint-disable-next-line no-restricted-globals\\n  constructor(global, isUnderTest) {\\n    var _a, _b, _c, _d, _e, _f, _g, _h;\\n    this.global = global;\\n    this.isUnderTest = isUnderTest;\\n    if (global.__pwClock) {\\n      this.builtins = global.__pwClock.builtins;\\n    } else {\\n      this.builtins = {\\n        setTimeout: (_a = global.setTimeout) == null ? void 0 : _a.bind(global),\\n        clearTimeout: (_b = global.clearTimeout) == null ? void 0 : _b.bind(global),\\n        setInterval: (_c = global.setInterval) == null ? void 0 : _c.bind(global),\\n        clearInterval: (_d = global.clearInterval) == null ? void 0 : _d.bind(global),\\n        requestAnimationFrame: (_e = global.requestAnimationFrame) == null ? void 0 : _e.bind(global),\\n        cancelAnimationFrame: (_f = global.cancelAnimationFrame) == null ? void 0 : _f.bind(global),\\n        requestIdleCallback: (_g = global.requestIdleCallback) == null ? void 0 : _g.bind(global),\\n        cancelIdleCallback: (_h = global.cancelIdleCallback) == null ? void 0 : _h.bind(global),\\n        performance: global.performance,\\n        Intl: global.Intl,\\n        Date: global.Date\\n      };\\n    }\\n    if (this.isUnderTest)\\n      global.builtins = this.builtins;\\n  }\\n  evaluate(isFunction, returnByValue, expression, argCount, ...argsAndHandles) {\\n    const args = argsAndHandles.slice(0, argCount);\\n    const handles = argsAndHandles.slice(argCount);\\n    const parameters = [];\\n    for (let i = 0; i < args.length; i++)\\n      parameters[i] = parseEvaluationResultValue(args[i], handles);\\n    let result = this.global.eval(expression);\\n    if (isFunction === true) {\\n      result = result(...parameters);\\n    } else if (isFunction === false) {\\n      result = result;\\n    } else {\\n      if (typeof result === \\\"function\\\")\\n        result = result(...parameters);\\n    }\\n    return returnByValue ? this._promiseAwareJsonValueNoThrow(result) : result;\\n  }\\n  jsonValue(returnByValue, value) {\\n    if (value === void 0)\\n      return void 0;\\n    return serializeAsCallArgument(value, (value2) => ({ fallThrough: value2 }));\\n  }\\n  _promiseAwareJsonValueNoThrow(value) {\\n    const safeJson = (value2) => {\\n      try {\\n        return this.jsonValue(true, value2);\\n      } catch (e) {\\n        return void 0;\\n      }\\n    };\\n    if (value && typeof value === \\\"object\\\" && typeof value.then === \\\"function\\\") {\\n      return (async () => {\\n        const promiseValue = await value;\\n        return safeJson(promiseValue);\\n      })();\\n    }\\n    return safeJson(value);\\n  }\\n};\\n\";","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ntype TypedArrayKind = 'i8' | 'ui8' | 'ui8c' | 'i16' | 'ui16' | 'i32' | 'ui32' | 'f32' | 'f64' | 'bi64' | 'bui64';\n\nexport type SerializedValue =\n    undefined | boolean | number | string |\n    { v: 'null' | 'undefined' | 'NaN' | 'Infinity' | '-Infinity' | '-0' } |\n    { d: string } |\n    { u: string } |\n    { bi: string } |\n    { e: { n: string, m: string, s: string } } |\n    { r: { p: string, f: string } } |\n    { a: SerializedValue[], id: number } |\n    { o: { k: string, v: SerializedValue }[], id: number } |\n    { ref: number } |\n    { h: number } |\n    { ta: { b: string, k: TypedArrayKind } };\n\ntype HandleOrValue = { h: number } | { fallThrough: any };\n\ntype VisitorInfo = {\n  visited: Map<object, number>;\n  lastId: number;\n};\n\nfunction isRegExp(obj: any): obj is RegExp {\n  try {\n    return obj instanceof RegExp || Object.prototype.toString.call(obj) === '[object RegExp]';\n  } catch (error) {\n    return false;\n  }\n}\n\n// eslint-disable-next-line no-restricted-globals\nfunction isDate(obj: any): obj is Date {\n  try {\n    // eslint-disable-next-line no-restricted-globals\n    return obj instanceof Date || Object.prototype.toString.call(obj) === '[object Date]';\n  } catch (error) {\n    return false;\n  }\n}\n\nfunction isURL(obj: any): obj is URL {\n  try {\n    return obj instanceof URL || Object.prototype.toString.call(obj) === '[object URL]';\n  } catch (error) {\n    return false;\n  }\n}\n\nfunction isError(obj: any): obj is Error {\n  try {\n    return obj instanceof Error || (obj && Object.getPrototypeOf(obj)?.name === 'Error');\n  } catch (error) {\n    return false;\n  }\n}\n\nfunction isTypedArray(obj: any, constructor: Function): boolean {\n  try {\n    return obj instanceof constructor || Object.prototype.toString.call(obj) === `[object ${constructor.name}]`;\n  } catch (error) {\n    return false;\n  }\n}\n\nconst typedArrayConstructors: Record<TypedArrayKind, Function> = {\n  i8: Int8Array,\n  ui8: Uint8Array,\n  ui8c: Uint8ClampedArray,\n  i16: Int16Array,\n  ui16: Uint16Array,\n  i32: Int32Array,\n  ui32: Uint32Array,\n  // TODO: add Float16Array once it's in baseline\n  f32: Float32Array,\n  f64: Float64Array,\n  bi64: BigInt64Array,\n  bui64: BigUint64Array,\n};\n\nfunction typedArrayToBase64(array: any) {\n  /**\n   * Firefox does not support iterating over typed arrays, so we use `.toBase64`.\n   * Error: 'Accessing TypedArray data over Xrays is slow, and forbidden in order to encourage performant code. To copy TypedArrays across origin boundaries, consider using Components.utils.cloneInto().'\n   */\n  if ('toBase64' in array)\n    return array.toBase64();\n  const binary = Array.from(new Uint8Array(array.buffer, array.byteOffset, array.byteLength)).map(b => String.fromCharCode(b)).join('');\n  return btoa(binary);\n}\n\nfunction base64ToTypedArray(base64: string, TypedArrayConstructor: any) {\n  const binary = atob(base64);\n  const bytes = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++)\n    bytes[i] = binary.charCodeAt(i);\n  return new TypedArrayConstructor(bytes.buffer);\n}\n\nexport function parseEvaluationResultValue(value: SerializedValue, handles: any[] = [], refs: Map<number, object> = new Map()): any {\n  if (Object.is(value, undefined))\n    return undefined;\n  if (typeof value === 'object' && value) {\n    if ('ref' in value)\n      return refs.get(value.ref);\n    if ('v' in value) {\n      if (value.v === 'undefined')\n        return undefined;\n      if (value.v === 'null')\n        return null;\n      if (value.v === 'NaN')\n        return NaN;\n      if (value.v === 'Infinity')\n        return Infinity;\n      if (value.v === '-Infinity')\n        return -Infinity;\n      if (value.v === '-0')\n        return -0;\n      return undefined;\n    }\n    if ('d' in value) {\n      // eslint-disable-next-line no-restricted-globals\n      return new Date(value.d);\n    }\n    if ('u' in value)\n      return new URL(value.u);\n    if ('bi' in value)\n      return BigInt(value.bi);\n    if ('e' in value) {\n      const error = new Error(value.e.m);\n      error.name = value.e.n;\n      error.stack = value.e.s;\n      return error;\n    }\n    if ('r' in value)\n      return new RegExp(value.r.p, value.r.f);\n    if ('a' in value) {\n      const result: any[] = [];\n      refs.set(value.id, result);\n      for (const a of value.a)\n        result.push(parseEvaluationResultValue(a, handles, refs));\n      return result;\n    }\n    if ('o' in value) {\n      const result: any = {};\n      refs.set(value.id, result);\n      for (const { k, v } of value.o) {\n        if (k === '__proto__')\n          continue;\n        result[k] = parseEvaluationResultValue(v, handles, refs);\n      }\n      return result;\n    }\n    if ('h' in value)\n      return handles[value.h];\n    if ('ta' in value)\n      return base64ToTypedArray(value.ta.b, typedArrayConstructors[value.ta.k]);\n  }\n  return value;\n}\n\nexport function serializeAsCallArgument(value: any, handleSerializer: (value: any) => HandleOrValue): SerializedValue {\n  return serialize(value, handleSerializer, { visited: new Map(), lastId: 0 });\n}\n\nfunction serialize(value: any, handleSerializer: (value: any) => HandleOrValue, visitorInfo: VisitorInfo): SerializedValue {\n  if (value && typeof value === 'object') {\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof globalThis.Window === 'function' && value instanceof globalThis.Window)\n      return 'ref: <Window>';\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof globalThis.Document === 'function' && value instanceof globalThis.Document)\n      return 'ref: <Document>';\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof globalThis.Node === 'function' && value instanceof globalThis.Node)\n      return 'ref: <Node>';\n  }\n  return innerSerialize(value, handleSerializer, visitorInfo);\n}\n\nfunction innerSerialize(value: any, handleSerializer: (value: any) => HandleOrValue, visitorInfo: VisitorInfo): SerializedValue {\n  const result = handleSerializer(value);\n  if ('fallThrough' in result)\n    value = result.fallThrough;\n  else\n    return result;\n\n  if (typeof value === 'symbol')\n    return { v: 'undefined' };\n  if (Object.is(value, undefined))\n    return { v: 'undefined' };\n  if (Object.is(value, null))\n    return { v: 'null' };\n  if (Object.is(value, NaN))\n    return { v: 'NaN' };\n  if (Object.is(value, Infinity))\n    return { v: 'Infinity' };\n  if (Object.is(value, -Infinity))\n    return { v: '-Infinity' };\n  if (Object.is(value, -0))\n    return { v: '-0' };\n\n  if (typeof value === 'boolean')\n    return value;\n  if (typeof value === 'number')\n    return value;\n  if (typeof value === 'string')\n    return value;\n  if (typeof value === 'bigint')\n    return { bi: value.toString() };\n\n  if (isError(value)) {\n    let stack;\n    if (value.stack?.startsWith(value.name + ': ' + value.message)) {\n      // v8\n      stack = value.stack;\n    } else {\n      stack = `${value.name}: ${value.message}\\n${value.stack}`;\n    }\n    return { e: { n: value.name, m: value.message, s: stack } };\n  }\n  if (isDate(value))\n    return { d: value.toJSON() };\n  if (isURL(value))\n    return { u: value.toJSON() };\n  if (isRegExp(value))\n    return { r: { p: value.source, f: value.flags } };\n  for (const [k, ctor] of Object.entries(typedArrayConstructors) as [TypedArrayKind, Function][]) {\n    if (isTypedArray(value, ctor))\n      return { ta: { b: typedArrayToBase64(value), k } };\n  }\n\n  const id = visitorInfo.visited.get(value);\n  if (id)\n    return { ref: id };\n\n  if (Array.isArray(value)) {\n    const a = [];\n    const id = ++visitorInfo.lastId;\n    visitorInfo.visited.set(value, id);\n    for (let i = 0; i < value.length; ++i)\n      a.push(serialize(value[i], handleSerializer, visitorInfo));\n    return { a, id };\n  }\n\n  if (typeof value === 'object') {\n    const o: { k: string, v: SerializedValue }[] = [];\n    const id = ++visitorInfo.lastId;\n    visitorInfo.visited.set(value, id);\n    for (const name of Object.keys(value)) {\n      let item;\n      try {\n        item = value[name];\n      } catch (e) {\n        continue;  // native bindings will throw sometimes\n      }\n      if (name === 'toJSON' && typeof item === 'function')\n        o.push({ k: name, v: { o: [], id: 0 } });\n      else\n        o.push({ k: name, v: serialize(item, handleSerializer, visitorInfo) });\n    }\n\n    let jsonWrapper;\n    try {\n      // If Object.keys().length === 0 we fall back to toJSON if it exists\n      if (o.length === 0 && value.toJSON && typeof value.toJSON === 'function')\n        jsonWrapper = { value: value.toJSON() };\n    } catch (e) {\n    }\n    if (jsonWrapper)\n      return innerSerialize(jsonWrapper.value, handleSerializer, visitorInfo);\n\n    return { o, id };\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SdkObject } from './instrumentation';\nimport * as rawUtilityScriptSource from '../generated/utilityScriptSource';\nimport { isUnderTest } from '../utils';\nimport { serializeAsCallArgument } from '../utils/isomorphic/utilityScriptSerializers';\nimport { LongStandingScope } from '../utils/isomorphic/manualPromise';\n\nimport type * as dom from './dom';\nimport type { UtilityScript } from '@injected/utilityScript';\n\ninterface TaggedAsJSHandle<T> {\n  __jshandle: T;\n}\ninterface TaggedAsElementHandle<T> {\n  __elementhandle: T;\n}\ntype NoHandles<Arg> = Arg extends TaggedAsJSHandle<any> ? never : (Arg extends object ? { [Key in keyof Arg]: NoHandles<Arg[Key]> } : Arg);\ntype Unboxed<Arg> =\n  Arg extends TaggedAsElementHandle<infer T> ? T :\n  Arg extends TaggedAsJSHandle<infer T> ? T :\n  Arg extends NoHandles<Arg> ? Arg :\n  Arg extends [infer A0] ? [Unboxed<A0>] :\n  Arg extends [infer A0, infer A1] ? [Unboxed<A0>, Unboxed<A1>] :\n  Arg extends [infer A0, infer A1, infer A2] ? [Unboxed<A0>, Unboxed<A1>, Unboxed<A2>] :\n  Arg extends Array<infer T> ? Array<Unboxed<T>> :\n  Arg extends object ? { [Key in keyof Arg]: Unboxed<Arg[Key]> } :\n  Arg;\nexport type Func0<R> = string | (() => R | Promise<R>);\nexport type Func1<Arg, R> = string | ((arg: Unboxed<Arg>) => R | Promise<R>);\nexport type FuncOn<On, Arg2, R> = string | ((on: On, arg2: Unboxed<Arg2>) => R | Promise<R>);\nexport type SmartHandle<T> = T extends Node ? dom.ElementHandle<T> : JSHandle<T>;\n\nexport interface ExecutionContextDelegate {\n  rawEvaluateJSON(expression: string): Promise<any>;\n  rawEvaluateHandle(context: ExecutionContext, expression: string): Promise<JSHandle>;\n  evaluateWithArguments(expression: string, returnByValue: boolean, utilityScript: JSHandle, values: any[], handles: JSHandle[]): Promise<any>;\n  getProperties(object: JSHandle): Promise<Map<string, JSHandle>>;\n  releaseHandle(handle: JSHandle): Promise<void>;\n}\n\nexport class ExecutionContext extends SdkObject {\n  readonly delegate: ExecutionContextDelegate;\n  private _utilityScriptPromise: Promise<JSHandle> | undefined;\n  private _contextDestroyedScope = new LongStandingScope();\n  readonly worldNameForTest: string;\n\n  constructor(parent: SdkObject, delegate: ExecutionContextDelegate, worldNameForTest: string) {\n    super(parent, 'execution-context');\n    this.worldNameForTest = worldNameForTest;\n    this.delegate = delegate;\n  }\n\n  contextDestroyed(reason: string) {\n    this._contextDestroyedScope.close(new Error(reason));\n  }\n\n  async _raceAgainstContextDestroyed<T>(promise: Promise<T>): Promise<T> {\n    return this._contextDestroyedScope.race(promise);\n  }\n\n  rawEvaluateJSON(expression: string): Promise<any> {\n    return this._raceAgainstContextDestroyed(this.delegate.rawEvaluateJSON(expression));\n  }\n\n  rawEvaluateHandle(expression: string): Promise<JSHandle> {\n    return this._raceAgainstContextDestroyed(this.delegate.rawEvaluateHandle(this, expression));\n  }\n\n  async evaluateWithArguments(expression: string, returnByValue: boolean, values: any[], handles: JSHandle[]): Promise<any> {\n    const utilityScript = await this.utilityScript();\n    return this._raceAgainstContextDestroyed(this.delegate.evaluateWithArguments(expression, returnByValue, utilityScript, values, handles));\n  }\n\n  getProperties(object: JSHandle): Promise<Map<string, JSHandle>> {\n    return this._raceAgainstContextDestroyed(this.delegate.getProperties(object));\n  }\n\n  releaseHandle(handle: JSHandle): Promise<void> {\n    return this.delegate.releaseHandle(handle);\n  }\n\n  adoptIfNeeded(handle: JSHandle): Promise<JSHandle> | null {\n    return null;\n  }\n\n  utilityScript(): Promise<JSHandle<UtilityScript>> {\n    if (!this._utilityScriptPromise) {\n      const source = `\n      (() => {\n        const module = {};\n        ${rawUtilityScriptSource.source}\n        return new (module.exports.UtilityScript())(globalThis, ${isUnderTest()});\n      })();`;\n      this._utilityScriptPromise = this._raceAgainstContextDestroyed(this.delegate.rawEvaluateHandle(this, source))\n          .then(handle => {\n            handle._setPreview('UtilityScript');\n            return handle;\n          });\n    }\n    return this._utilityScriptPromise;\n  }\n\n  async doSlowMo() {\n    // overridden in FrameExecutionContext\n  }\n}\n\nexport class JSHandle<T = any> extends SdkObject {\n  __jshandle: T = true as any;\n  readonly _context: ExecutionContext;\n  _disposed = false;\n  readonly _objectId: string | undefined;\n  readonly _value: any;\n  private _objectType: string;\n  protected _preview: string;\n  private _previewCallback: ((preview: string) => void) | undefined;\n\n  constructor(context: ExecutionContext, type: string, preview: string | undefined, objectId?: string, value?: any) {\n    super(context, 'handle');\n    this._context = context;\n    this._objectId = objectId;\n    this._value = value;\n    this._objectType = type;\n    this._preview = this._objectId ? preview || `JSHandle@${this._objectType}` : String(value);\n    if (this._objectId && (globalThis as any).leakedJSHandles)\n      (globalThis as any).leakedJSHandles.set(this, new Error('Leaked JSHandle'));\n  }\n\n  async evaluate<R, Arg>(pageFunction: FuncOn<T, Arg, R>, arg?: Arg): Promise<R> {\n    return evaluate(this._context, true /* returnByValue */, pageFunction, this, arg);\n  }\n\n  async evaluateHandle<R, Arg>(pageFunction: FuncOn<T, Arg, R>, arg?: Arg): Promise<SmartHandle<R>> {\n    return evaluate(this._context, false /* returnByValue */, pageFunction, this, arg);\n  }\n\n  async evaluateExpression(expression: string, options: { isFunction?: boolean }, arg: any) {\n    const value = await evaluateExpression(this._context, expression, { ...options, returnByValue: true }, this, arg);\n    await this._context.doSlowMo();\n    return value;\n  }\n\n  async evaluateExpressionHandle(expression: string, options: { isFunction?: boolean }, arg: any): Promise<JSHandle<any>> {\n    const value = await evaluateExpression(this._context, expression, { ...options, returnByValue: false }, this, arg);\n    await this._context.doSlowMo();\n    return value;\n  }\n\n  async getProperty(propertyName: string): Promise<JSHandle> {\n    const objectHandle = await this.evaluateHandle((object: any, propertyName) => {\n      const result: any = { __proto__: null };\n      result[propertyName] = object[propertyName];\n      return result;\n    }, propertyName);\n    const properties = await objectHandle.getProperties();\n    const result = properties.get(propertyName)!;\n    objectHandle.dispose();\n    return result;\n  }\n\n  async getProperties(): Promise<Map<string, JSHandle>> {\n    if (!this._objectId)\n      return new Map();\n    return this._context.getProperties(this);\n  }\n\n  rawValue() {\n    return this._value;\n  }\n\n  async jsonValue(): Promise<T> {\n    if (!this._objectId)\n      return this._value;\n    const script = `(utilityScript, ...args) => utilityScript.jsonValue(...args)`;\n    return this._context.evaluateWithArguments(script, true, [true], [this]);\n  }\n\n  asElement(): dom.ElementHandle | null {\n    return null;\n  }\n\n  dispose() {\n    if (this._disposed)\n      return;\n    this._disposed = true;\n    if (this._objectId) {\n      this._context.releaseHandle(this).catch(e => {});\n      if ((globalThis as any).leakedJSHandles)\n        (globalThis as any).leakedJSHandles.delete(this);\n    }\n  }\n\n  override toString(): string {\n    return this._preview;\n  }\n\n  _setPreviewCallback(callback: (preview: string) => void) {\n    this._previewCallback = callback;\n  }\n\n  preview(): string {\n    return this._preview;\n  }\n\n  worldNameForTest(): string {\n    return this._context.worldNameForTest;\n  }\n\n  _setPreview(preview: string) {\n    this._preview = preview;\n    if (this._previewCallback)\n      this._previewCallback(preview);\n  }\n}\n\nexport async function evaluate(context: ExecutionContext, returnByValue: boolean, pageFunction: Function | string, ...args: any[]): Promise<any> {\n  return evaluateExpression(context, String(pageFunction), { returnByValue, isFunction: typeof pageFunction === 'function' }, ...args);\n}\n\nexport async function evaluateExpression(context: ExecutionContext, expression: string, options: { returnByValue?: boolean, isFunction?: boolean }, ...args: any[]): Promise<any> {\n  expression = normalizeEvaluationExpression(expression, options.isFunction);\n  const handles: (Promise<JSHandle>)[] = [];\n  const toDispose: Promise<JSHandle>[] = [];\n  const pushHandle = (handle: Promise<JSHandle>): number => {\n    handles.push(handle);\n    return handles.length - 1;\n  };\n\n  args = args.map(arg => serializeAsCallArgument(arg, handle => {\n    if (handle instanceof JSHandle) {\n      if (!handle._objectId)\n        return { fallThrough: handle._value };\n      if (handle._disposed)\n        throw new JavaScriptErrorInEvaluate('JSHandle is disposed!');\n      const adopted = context.adoptIfNeeded(handle);\n      if (adopted === null)\n        return { h: pushHandle(Promise.resolve(handle)) };\n      toDispose.push(adopted);\n      return { h: pushHandle(adopted) };\n    }\n    return { fallThrough: handle };\n  }));\n\n  const utilityScriptObjects: JSHandle[] = [];\n  for (const handle of await Promise.all(handles)) {\n    if (handle._context !== context)\n      throw new JavaScriptErrorInEvaluate('JSHandles can be evaluated only in the context they were created!');\n    utilityScriptObjects.push(handle);\n  }\n\n  // See UtilityScript for arguments.\n  const utilityScriptValues = [options.isFunction, options.returnByValue, expression, args.length, ...args];\n\n  const script = `(utilityScript, ...args) => utilityScript.evaluate(...args)`;\n  try {\n    return await context.evaluateWithArguments(script, options.returnByValue || false, utilityScriptValues, utilityScriptObjects);\n  } finally {\n    toDispose.map(handlePromise => handlePromise.then(handle => handle.dispose()));\n  }\n}\n\nexport function parseUnserializableValue(unserializableValue: string): any {\n  if (unserializableValue === 'NaN')\n    return NaN;\n  if (unserializableValue === 'Infinity')\n    return Infinity;\n  if (unserializableValue === '-Infinity')\n    return -Infinity;\n  if (unserializableValue === '-0')\n    return -0;\n}\n\nexport function normalizeEvaluationExpression(expression: string, isFunction: boolean | undefined): string {\n  expression = expression.trim();\n\n  if (isFunction) {\n    try {\n      new Function('(' + expression + ')');\n    } catch (e1) {\n      // check if CSP doesn't allow 'unsafe-eval'\n      if (!(e1 instanceof EvalError) || !e1.message.includes('unsafe-eval')) {\n        // This means we might have a function shorthand. Try another\n        // time prefixing 'function '.\n        if (expression.startsWith('async '))\n          expression = 'async function ' + expression.substring('async '.length);\n        else\n          expression = 'function ' + expression;\n        try {\n          new Function('(' + expression  + ')');\n        } catch (e2) {\n          // We tried hard to serialize, but there's a weird beast here.\n          throw new Error('Passed function is not well-serializable!');\n        }\n      }\n    }\n  }\n\n  if (/^(async)?\\s*function(\\s|\\()/.test(expression))\n    expression = '(' + expression + ')';\n  return expression;\n}\n\n// Error inside the expression evaluation as opposed to a protocol error.\nexport class JavaScriptErrorInEvaluate extends Error {\n}\n\nexport function isJavaScriptErrorInEvaluate(error: Error) {\n  return error instanceof JavaScriptErrorInEvaluate;\n}\n\nexport function sparseArrayToString(entries: { name: string, value?: any }[]): string {\n  const arrayEntries = [];\n  for (const { name, value } of entries) {\n    const index = +name;\n    if (isNaN(index) || index < 0)\n      continue;\n    arrayEntries.push({ index, value });\n  }\n  arrayEntries.sort((a, b) => a.index - b.index);\n  let lastIndex = -1;\n  const tokens = [];\n  for (const { index, value } of arrayEntries) {\n    const emptyItems = index - lastIndex - 1;\n    if (emptyItems === 1)\n      tokens.push(`empty`);\n    else if (emptyItems > 1)\n      tokens.push(`empty x ${emptyItems}`);\n    tokens.push(String(value));\n    lastIndex = index;\n  }\n\n  return '[' + tokens.join(', ') + ']';\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TimeoutError } from './errors';\nimport { assert, monotonicTime } from '../utils';\nimport { ManualPromise } from '../utils/isomorphic/manualPromise';\n\nimport type { CallMetadata, Instrumentation, SdkObject } from './instrumentation';\nimport type { LogName } from './utils/debugLogger';\n\nexport interface Progress {\n  log(message: string): void;\n  timeUntilDeadline(): number;\n  isRunning(): boolean;\n  cleanupWhenAborted(cleanup: () => any): void;\n  throwIfAborted(): void;\n  metadata: CallMetadata;\n}\n\nexport class ProgressController {\n  private _forceAbortPromise = new ManualPromise<any>();\n\n  // Cleanups to be run only in the case of abort.\n  private _cleanups: (() => any)[] = [];\n\n  private _logName = 'api';\n  private _state: 'before' | 'running' | 'aborted' | 'finished' = 'before';\n  private _deadline: number = 0;\n  private _timeout: number = 0;\n  readonly metadata: CallMetadata;\n  readonly instrumentation: Instrumentation;\n  readonly sdkObject: SdkObject;\n\n  constructor(metadata: CallMetadata, sdkObject: SdkObject) {\n    this.metadata = metadata;\n    this.sdkObject = sdkObject;\n    this.instrumentation = sdkObject.instrumentation;\n    this._forceAbortPromise.catch(e => null);  // Prevent unhandled promise rejection.\n  }\n\n  setLogName(logName: LogName) {\n    this._logName = logName;\n  }\n\n  abort(error: Error) {\n    this._forceAbortPromise.reject(error);\n  }\n\n  async run<T>(task: (progress: Progress) => Promise<T>, timeout?: number): Promise<T> {\n    if (timeout) {\n      this._timeout = timeout;\n      this._deadline = timeout ? monotonicTime() + timeout : 0;\n    }\n\n    assert(this._state === 'before');\n    this._state = 'running';\n    this.sdkObject.attribution.context?._activeProgressControllers.add(this);\n\n    const progress: Progress = {\n      log: message => {\n        if (this._state === 'running')\n          this.metadata.log.push(message);\n        // Note: we might be sending logs after progress has finished, for example browser logs.\n        this.instrumentation.onCallLog(this.sdkObject, this.metadata, this._logName, message);\n      },\n      timeUntilDeadline: () => this._deadline ? this._deadline - monotonicTime() : 2147483647, // 2^31-1 safe setTimeout in Node.\n      isRunning: () => this._state === 'running',\n      cleanupWhenAborted: (cleanup: () => any) => {\n        if (this._state === 'running')\n          this._cleanups.push(cleanup);\n        else\n          runCleanup(cleanup);\n      },\n      throwIfAborted: () => {\n        if (this._state === 'aborted')\n          throw new AbortedError();\n      },\n      metadata: this.metadata\n    };\n\n    const timeoutError = new TimeoutError(`Timeout ${this._timeout}ms exceeded.`);\n    const timer = setTimeout(() => this._forceAbortPromise.reject(timeoutError), progress.timeUntilDeadline());\n    try {\n      const promise = task(progress);\n      const result = await Promise.race([promise, this._forceAbortPromise]);\n      this._state = 'finished';\n      return result;\n    } catch (e) {\n      this._state = 'aborted';\n      await Promise.all(this._cleanups.splice(0).map(runCleanup));\n      throw e;\n    } finally {\n      this.sdkObject.attribution.context?._activeProgressControllers.delete(this);\n      clearTimeout(timer);\n    }\n  }\n}\n\nasync function runCleanup(cleanup: () => any) {\n  try {\n    await cleanup();\n  } catch (e) {\n  }\n}\n\nclass AbortedError extends Error {}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport { assert } from '../utils/isomorphic/assert';\nimport { mime } from '../utilsBundle';\n\nimport type { WritableStreamDispatcher } from './dispatchers/writableStreamDispatcher';\nimport type { InputFilesItems } from './dom';\nimport type { Frame } from './frames';\nimport type * as types from './types';\nimport type * as channels from '@protocol/channels';\n\n// Keep in sync with the client.\nexport const fileUploadSizeLimit = 50 * 1024 * 1024;\n\nasync function filesExceedUploadLimit(files: string[]) {\n  const sizes = await Promise.all(files.map(async file => (await fs.promises.stat(file)).size));\n  return sizes.reduce((total, size) => total + size, 0) >= fileUploadSizeLimit;\n}\n\nexport async function prepareFilesForUpload(frame: Frame, params: channels.ElementHandleSetInputFilesParams): Promise<InputFilesItems> {\n  const { payloads, streams, directoryStream } = params;\n  let { localPaths, localDirectory } = params;\n\n  if ([payloads, localPaths, localDirectory, streams, directoryStream].filter(Boolean).length !== 1)\n    throw new Error('Exactly one of payloads, localPaths and streams must be provided');\n\n  if (streams)\n    localPaths = streams.map(c => (c as WritableStreamDispatcher).path());\n  if (directoryStream)\n    localDirectory = (directoryStream as WritableStreamDispatcher).path();\n\n  if (localPaths) {\n    for (const p of localPaths)\n      assert(path.isAbsolute(p) && path.resolve(p) === p, 'Paths provided to localPaths must be absolute and fully resolved.');\n  }\n\n  let fileBuffers: {\n    name: string,\n    mimeType?: string,\n    buffer: Buffer,\n    lastModifiedMs?: number,\n  }[] | undefined = payloads;\n\n  if (!frame._page.browserContext._browser._isCollocatedWithServer) {\n    // If the browser is on a different machine read files into buffers.\n    if (localPaths) {\n      if (await filesExceedUploadLimit(localPaths))\n        throw new Error('Cannot transfer files larger than 50Mb to a browser not co-located with the server');\n      fileBuffers = await Promise.all(localPaths.map(async item => {\n        return {\n          name: path.basename(item),\n          buffer: await fs.promises.readFile(item),\n          lastModifiedMs: (await fs.promises.stat(item)).mtimeMs,\n        };\n      }));\n      localPaths = undefined;\n    }\n  }\n\n  const filePayloads: types.FilePayload[] | undefined = fileBuffers?.map(payload => ({\n    name: payload.name,\n    mimeType: payload.mimeType || mime.getType(payload.name) || 'application/octet-stream',\n    buffer: payload.buffer.toString('base64'),\n    lastModifiedMs: payload.lastModifiedMs\n  }));\n\n  return { localPaths, localDirectory, filePayloads };\n}\n","export const source = \"\\nvar __commonJS = obj => {\\n  let required = false;\\n  let result;\\n  return function __require() {\\n    if (!required) {\\n      required = true;\\n      let fn;\\n      for (const name in obj) { fn = obj[name]; break; }\\n      const module = { exports: {} };\\n      fn(module.exports, module);\\n      result = module.exports;\\n    }\\n    return result;\\n  }\\n};\\nvar __export = (target, all) => {for (var name in all) target[name] = all[name];};\\nvar __toESM = mod => ({ ...mod, 'default': mod });\\nvar __toCommonJS = mod => ({ ...mod, __esModule: true });\\n\\n\\n// packages/injected/src/injectedScript.ts\\nvar injectedScript_exports = {};\\n__export(injectedScript_exports, {\\n  InjectedScript: () => InjectedScript\\n});\\nmodule.exports = __toCommonJS(injectedScript_exports);\\n\\n// packages/playwright-core/src/utils/isomorphic/ariaSnapshot.ts\\nfunction parseAriaSnapshot(yaml, text, options = {}) {\\n  var _a;\\n  const lineCounter = new yaml.LineCounter();\\n  const parseOptions = {\\n    keepSourceTokens: true,\\n    lineCounter,\\n    ...options\\n  };\\n  const yamlDoc = yaml.parseDocument(text, parseOptions);\\n  const errors = [];\\n  const convertRange = (range) => {\\n    return [lineCounter.linePos(range[0]), lineCounter.linePos(range[1])];\\n  };\\n  const addError = (error) => {\\n    errors.push({\\n      message: error.message,\\n      range: [lineCounter.linePos(error.pos[0]), lineCounter.linePos(error.pos[1])]\\n    });\\n  };\\n  const convertSeq = (container, seq) => {\\n    for (const item of seq.items) {\\n      const itemIsString = item instanceof yaml.Scalar && typeof item.value === \\\"string\\\";\\n      if (itemIsString) {\\n        const childNode = KeyParser.parse(item, parseOptions, errors);\\n        if (childNode) {\\n          container.children = container.children || [];\\n          container.children.push(childNode);\\n        }\\n        continue;\\n      }\\n      const itemIsMap = item instanceof yaml.YAMLMap;\\n      if (itemIsMap) {\\n        convertMap(container, item);\\n        continue;\\n      }\\n      errors.push({\\n        message: \\\"Sequence items should be strings or maps\\\",\\n        range: convertRange(item.range || seq.range)\\n      });\\n    }\\n  };\\n  const convertMap = (container, map) => {\\n    var _a2;\\n    for (const entry of map.items) {\\n      container.children = container.children || [];\\n      const keyIsString = entry.key instanceof yaml.Scalar && typeof entry.key.value === \\\"string\\\";\\n      if (!keyIsString) {\\n        errors.push({\\n          message: \\\"Only string keys are supported\\\",\\n          range: convertRange(entry.key.range || map.range)\\n        });\\n        continue;\\n      }\\n      const key = entry.key;\\n      const value = entry.value;\\n      if (key.value === \\\"text\\\") {\\n        const valueIsString = value instanceof yaml.Scalar && typeof value.value === \\\"string\\\";\\n        if (!valueIsString) {\\n          errors.push({\\n            message: \\\"Text value should be a string\\\",\\n            range: convertRange(entry.value.range || map.range)\\n          });\\n          continue;\\n        }\\n        container.children.push({\\n          kind: \\\"text\\\",\\n          text: valueOrRegex(value.value)\\n        });\\n        continue;\\n      }\\n      if (key.value === \\\"/children\\\") {\\n        const valueIsString = value instanceof yaml.Scalar && typeof value.value === \\\"string\\\";\\n        if (!valueIsString || value.value !== \\\"contain\\\" && value.value !== \\\"equal\\\" && value.value !== \\\"deep-equal\\\") {\\n          errors.push({\\n            message: 'Strict value should be \\\"contain\\\", \\\"equal\\\" or \\\"deep-equal\\\"',\\n            range: convertRange(entry.value.range || map.range)\\n          });\\n          continue;\\n        }\\n        container.containerMode = value.value;\\n        continue;\\n      }\\n      if (key.value.startsWith(\\\"/\\\")) {\\n        const valueIsString = value instanceof yaml.Scalar && typeof value.value === \\\"string\\\";\\n        if (!valueIsString) {\\n          errors.push({\\n            message: \\\"Property value should be a string\\\",\\n            range: convertRange(entry.value.range || map.range)\\n          });\\n          continue;\\n        }\\n        container.props = (_a2 = container.props) != null ? _a2 : {};\\n        container.props[key.value.slice(1)] = valueOrRegex(value.value);\\n        continue;\\n      }\\n      const childNode = KeyParser.parse(key, parseOptions, errors);\\n      if (!childNode)\\n        continue;\\n      const valueIsScalar = value instanceof yaml.Scalar;\\n      if (valueIsScalar) {\\n        const type = typeof value.value;\\n        if (type !== \\\"string\\\" && type !== \\\"number\\\" && type !== \\\"boolean\\\") {\\n          errors.push({\\n            message: \\\"Node value should be a string or a sequence\\\",\\n            range: convertRange(entry.value.range || map.range)\\n          });\\n          continue;\\n        }\\n        container.children.push({\\n          ...childNode,\\n          children: [{\\n            kind: \\\"text\\\",\\n            text: valueOrRegex(String(value.value))\\n          }]\\n        });\\n        continue;\\n      }\\n      const valueIsSequence = value instanceof yaml.YAMLSeq;\\n      if (valueIsSequence) {\\n        container.children.push(childNode);\\n        convertSeq(childNode, value);\\n        continue;\\n      }\\n      errors.push({\\n        message: \\\"Map values should be strings or sequences\\\",\\n        range: convertRange(entry.value.range || map.range)\\n      });\\n    }\\n  };\\n  const fragment = { kind: \\\"role\\\", role: \\\"fragment\\\" };\\n  yamlDoc.errors.forEach(addError);\\n  if (errors.length)\\n    return { errors, fragment };\\n  if (!(yamlDoc.contents instanceof yaml.YAMLSeq)) {\\n    errors.push({\\n      message: 'Aria snapshot must be a YAML sequence, elements starting with \\\" -\\\"',\\n      range: yamlDoc.contents ? convertRange(yamlDoc.contents.range) : [{ line: 0, col: 0 }, { line: 0, col: 0 }]\\n    });\\n  }\\n  if (errors.length)\\n    return { errors, fragment };\\n  convertSeq(fragment, yamlDoc.contents);\\n  if (errors.length)\\n    return { errors, fragment: emptyFragment };\\n  if (((_a = fragment.children) == null ? void 0 : _a.length) === 1)\\n    return { fragment: fragment.children[0], errors };\\n  return { fragment, errors };\\n}\\nvar emptyFragment = { kind: \\\"role\\\", role: \\\"fragment\\\" };\\nfunction normalizeWhitespace(text) {\\n  return text.replace(/[\\\\u200b\\\\u00ad]/g, \\\"\\\").replace(/[\\\\r\\\\n\\\\s\\\\t]+/g, \\\" \\\").trim();\\n}\\nfunction valueOrRegex(value) {\\n  return value.startsWith(\\\"/\\\") && value.endsWith(\\\"/\\\") && value.length > 1 ? { pattern: value.slice(1, -1) } : normalizeWhitespace(value);\\n}\\nvar KeyParser = class _KeyParser {\\n  static parse(text, options, errors) {\\n    try {\\n      return new _KeyParser(text.value)._parse();\\n    } catch (e) {\\n      if (e instanceof ParserError) {\\n        const message = options.prettyErrors === false ? e.message : e.message + \\\":\\\\n\\\\n\\\" + text.value + \\\"\\\\n\\\" + \\\" \\\".repeat(e.pos) + \\\"^\\\\n\\\";\\n        errors.push({\\n          message,\\n          range: [options.lineCounter.linePos(text.range[0]), options.lineCounter.linePos(text.range[0] + e.pos)]\\n        });\\n        return null;\\n      }\\n      throw e;\\n    }\\n  }\\n  constructor(input) {\\n    this._input = input;\\n    this._pos = 0;\\n    this._length = input.length;\\n  }\\n  _peek() {\\n    return this._input[this._pos] || \\\"\\\";\\n  }\\n  _next() {\\n    if (this._pos < this._length)\\n      return this._input[this._pos++];\\n    return null;\\n  }\\n  _eof() {\\n    return this._pos >= this._length;\\n  }\\n  _isWhitespace() {\\n    return !this._eof() && /\\\\s/.test(this._peek());\\n  }\\n  _skipWhitespace() {\\n    while (this._isWhitespace())\\n      this._pos++;\\n  }\\n  _readIdentifier(type) {\\n    if (this._eof())\\n      this._throwError(`Unexpected end of input when expecting ${type}`);\\n    const start = this._pos;\\n    while (!this._eof() && /[a-zA-Z]/.test(this._peek()))\\n      this._pos++;\\n    return this._input.slice(start, this._pos);\\n  }\\n  _readString() {\\n    let result = \\\"\\\";\\n    let escaped = false;\\n    while (!this._eof()) {\\n      const ch = this._next();\\n      if (escaped) {\\n        result += ch;\\n        escaped = false;\\n      } else if (ch === \\\"\\\\\\\\\\\") {\\n        escaped = true;\\n      } else if (ch === '\\\"') {\\n        return result;\\n      } else {\\n        result += ch;\\n      }\\n    }\\n    this._throwError(\\\"Unterminated string\\\");\\n  }\\n  _throwError(message, offset = 0) {\\n    throw new ParserError(message, offset || this._pos);\\n  }\\n  _readRegex() {\\n    let result = \\\"\\\";\\n    let escaped = false;\\n    let insideClass = false;\\n    while (!this._eof()) {\\n      const ch = this._next();\\n      if (escaped) {\\n        result += ch;\\n        escaped = false;\\n      } else if (ch === \\\"\\\\\\\\\\\") {\\n        escaped = true;\\n        result += ch;\\n      } else if (ch === \\\"/\\\" && !insideClass) {\\n        return { pattern: result };\\n      } else if (ch === \\\"[\\\") {\\n        insideClass = true;\\n        result += ch;\\n      } else if (ch === \\\"]\\\" && insideClass) {\\n        result += ch;\\n        insideClass = false;\\n      } else {\\n        result += ch;\\n      }\\n    }\\n    this._throwError(\\\"Unterminated regex\\\");\\n  }\\n  _readStringOrRegex() {\\n    const ch = this._peek();\\n    if (ch === '\\\"') {\\n      this._next();\\n      return normalizeWhitespace(this._readString());\\n    }\\n    if (ch === \\\"/\\\") {\\n      this._next();\\n      return this._readRegex();\\n    }\\n    return null;\\n  }\\n  _readAttributes(result) {\\n    let errorPos = this._pos;\\n    while (true) {\\n      this._skipWhitespace();\\n      if (this._peek() === \\\"[\\\") {\\n        this._next();\\n        this._skipWhitespace();\\n        errorPos = this._pos;\\n        const flagName = this._readIdentifier(\\\"attribute\\\");\\n        this._skipWhitespace();\\n        let flagValue = \\\"\\\";\\n        if (this._peek() === \\\"=\\\") {\\n          this._next();\\n          this._skipWhitespace();\\n          errorPos = this._pos;\\n          while (this._peek() !== \\\"]\\\" && !this._isWhitespace() && !this._eof())\\n            flagValue += this._next();\\n        }\\n        this._skipWhitespace();\\n        if (this._peek() !== \\\"]\\\")\\n          this._throwError(\\\"Expected ]\\\");\\n        this._next();\\n        this._applyAttribute(result, flagName, flagValue || \\\"true\\\", errorPos);\\n      } else {\\n        break;\\n      }\\n    }\\n  }\\n  _parse() {\\n    this._skipWhitespace();\\n    const role = this._readIdentifier(\\\"role\\\");\\n    this._skipWhitespace();\\n    const name = this._readStringOrRegex() || \\\"\\\";\\n    const result = { kind: \\\"role\\\", role, name };\\n    this._readAttributes(result);\\n    this._skipWhitespace();\\n    if (!this._eof())\\n      this._throwError(\\\"Unexpected input\\\");\\n    return result;\\n  }\\n  _applyAttribute(node, key, value, errorPos) {\\n    if (key === \\\"checked\\\") {\\n      this._assert(value === \\\"true\\\" || value === \\\"false\\\" || value === \\\"mixed\\\", 'Value of \\\"checked\\\" attribute must be a boolean or \\\"mixed\\\"', errorPos);\\n      node.checked = value === \\\"true\\\" ? true : value === \\\"false\\\" ? false : \\\"mixed\\\";\\n      return;\\n    }\\n    if (key === \\\"disabled\\\") {\\n      this._assert(value === \\\"true\\\" || value === \\\"false\\\", 'Value of \\\"disabled\\\" attribute must be a boolean', errorPos);\\n      node.disabled = value === \\\"true\\\";\\n      return;\\n    }\\n    if (key === \\\"expanded\\\") {\\n      this._assert(value === \\\"true\\\" || value === \\\"false\\\", 'Value of \\\"expanded\\\" attribute must be a boolean', errorPos);\\n      node.expanded = value === \\\"true\\\";\\n      return;\\n    }\\n    if (key === \\\"level\\\") {\\n      this._assert(!isNaN(Number(value)), 'Value of \\\"level\\\" attribute must be a number', errorPos);\\n      node.level = Number(value);\\n      return;\\n    }\\n    if (key === \\\"pressed\\\") {\\n      this._assert(value === \\\"true\\\" || value === \\\"false\\\" || value === \\\"mixed\\\", 'Value of \\\"pressed\\\" attribute must be a boolean or \\\"mixed\\\"', errorPos);\\n      node.pressed = value === \\\"true\\\" ? true : value === \\\"false\\\" ? false : \\\"mixed\\\";\\n      return;\\n    }\\n    if (key === \\\"selected\\\") {\\n      this._assert(value === \\\"true\\\" || value === \\\"false\\\", 'Value of \\\"selected\\\" attribute must be a boolean', errorPos);\\n      node.selected = value === \\\"true\\\";\\n      return;\\n    }\\n    this._assert(false, `Unsupported attribute [${key}]`, errorPos);\\n  }\\n  _assert(value, message, valuePos) {\\n    if (!value)\\n      this._throwError(message || \\\"Assertion error\\\", valuePos);\\n  }\\n};\\nvar ParserError = class extends Error {\\n  constructor(message, pos) {\\n    super(message);\\n    this.pos = pos;\\n  }\\n};\\n\\n// packages/playwright-core/src/utils/isomorphic/cssTokenizer.ts\\nvar between = function(num, first, last) {\\n  return num >= first && num <= last;\\n};\\nfunction digit(code) {\\n  return between(code, 48, 57);\\n}\\nfunction hexdigit(code) {\\n  return digit(code) || between(code, 65, 70) || between(code, 97, 102);\\n}\\nfunction uppercaseletter(code) {\\n  return between(code, 65, 90);\\n}\\nfunction lowercaseletter(code) {\\n  return between(code, 97, 122);\\n}\\nfunction letter(code) {\\n  return uppercaseletter(code) || lowercaseletter(code);\\n}\\nfunction nonascii(code) {\\n  return code >= 128;\\n}\\nfunction namestartchar(code) {\\n  return letter(code) || nonascii(code) || code === 95;\\n}\\nfunction namechar(code) {\\n  return namestartchar(code) || digit(code) || code === 45;\\n}\\nfunction nonprintable(code) {\\n  return between(code, 0, 8) || code === 11 || between(code, 14, 31) || code === 127;\\n}\\nfunction newline(code) {\\n  return code === 10;\\n}\\nfunction whitespace(code) {\\n  return newline(code) || code === 9 || code === 32;\\n}\\nvar maximumallowedcodepoint = 1114111;\\nvar InvalidCharacterError = class extends Error {\\n  constructor(message) {\\n    super(message);\\n    this.name = \\\"InvalidCharacterError\\\";\\n  }\\n};\\nfunction preprocess(str) {\\n  const codepoints = [];\\n  for (let i = 0; i < str.length; i++) {\\n    let code = str.charCodeAt(i);\\n    if (code === 13 && str.charCodeAt(i + 1) === 10) {\\n      code = 10;\\n      i++;\\n    }\\n    if (code === 13 || code === 12)\\n      code = 10;\\n    if (code === 0)\\n      code = 65533;\\n    if (between(code, 55296, 56319) && between(str.charCodeAt(i + 1), 56320, 57343)) {\\n      const lead = code - 55296;\\n      const trail = str.charCodeAt(i + 1) - 56320;\\n      code = Math.pow(2, 16) + lead * Math.pow(2, 10) + trail;\\n      i++;\\n    }\\n    codepoints.push(code);\\n  }\\n  return codepoints;\\n}\\nfunction stringFromCode(code) {\\n  if (code <= 65535)\\n    return String.fromCharCode(code);\\n  code -= Math.pow(2, 16);\\n  const lead = Math.floor(code / Math.pow(2, 10)) + 55296;\\n  const trail = code % Math.pow(2, 10) + 56320;\\n  return String.fromCharCode(lead) + String.fromCharCode(trail);\\n}\\nfunction tokenize(str1) {\\n  const str = preprocess(str1);\\n  let i = -1;\\n  const tokens = [];\\n  let code;\\n  let line = 0;\\n  let column = 0;\\n  let lastLineLength = 0;\\n  const incrLineno = function() {\\n    line += 1;\\n    lastLineLength = column;\\n    column = 0;\\n  };\\n  const locStart = { line, column };\\n  const codepoint = function(i2) {\\n    if (i2 >= str.length)\\n      return -1;\\n    return str[i2];\\n  };\\n  const next = function(num) {\\n    if (num === void 0)\\n      num = 1;\\n    if (num > 3)\\n      throw \\\"Spec Error: no more than three codepoints of lookahead.\\\";\\n    return codepoint(i + num);\\n  };\\n  const consume = function(num) {\\n    if (num === void 0)\\n      num = 1;\\n    i += num;\\n    code = codepoint(i);\\n    if (newline(code))\\n      incrLineno();\\n    else\\n      column += num;\\n    return true;\\n  };\\n  const reconsume = function() {\\n    i -= 1;\\n    if (newline(code)) {\\n      line -= 1;\\n      column = lastLineLength;\\n    } else {\\n      column -= 1;\\n    }\\n    locStart.line = line;\\n    locStart.column = column;\\n    return true;\\n  };\\n  const eof = function(codepoint2) {\\n    if (codepoint2 === void 0)\\n      codepoint2 = code;\\n    return codepoint2 === -1;\\n  };\\n  const donothing = function() {\\n  };\\n  const parseerror = function() {\\n  };\\n  const consumeAToken = function() {\\n    consumeComments();\\n    consume();\\n    if (whitespace(code)) {\\n      while (whitespace(next()))\\n        consume();\\n      return new WhitespaceToken();\\n    } else if (code === 34) {\\n      return consumeAStringToken();\\n    } else if (code === 35) {\\n      if (namechar(next()) || areAValidEscape(next(1), next(2))) {\\n        const token = new HashToken(\\\"\\\");\\n        if (wouldStartAnIdentifier(next(1), next(2), next(3)))\\n          token.type = \\\"id\\\";\\n        token.value = consumeAName();\\n        return token;\\n      } else {\\n        return new DelimToken(code);\\n      }\\n    } else if (code === 36) {\\n      if (next() === 61) {\\n        consume();\\n        return new SuffixMatchToken();\\n      } else {\\n        return new DelimToken(code);\\n      }\\n    } else if (code === 39) {\\n      return consumeAStringToken();\\n    } else if (code === 40) {\\n      return new OpenParenToken();\\n    } else if (code === 41) {\\n      return new CloseParenToken();\\n    } else if (code === 42) {\\n      if (next() === 61) {\\n        consume();\\n        return new SubstringMatchToken();\\n      } else {\\n        return new DelimToken(code);\\n      }\\n    } else if (code === 43) {\\n      if (startsWithANumber()) {\\n        reconsume();\\n        return consumeANumericToken();\\n      } else {\\n        return new DelimToken(code);\\n      }\\n    } else if (code === 44) {\\n      return new CommaToken();\\n    } else if (code === 45) {\\n      if (startsWithANumber()) {\\n        reconsume();\\n        return consumeANumericToken();\\n      } else if (next(1) === 45 && next(2) === 62) {\\n        consume(2);\\n        return new CDCToken();\\n      } else if (startsWithAnIdentifier()) {\\n        reconsume();\\n        return consumeAnIdentlikeToken();\\n      } else {\\n        return new DelimToken(code);\\n      }\\n    } else if (code === 46) {\\n      if (startsWithANumber()) {\\n        reconsume();\\n        return consumeANumericToken();\\n      } else {\\n        return new DelimToken(code);\\n      }\\n    } else if (code === 58) {\\n      return new ColonToken();\\n    } else if (code === 59) {\\n      return new SemicolonToken();\\n    } else if (code === 60) {\\n      if (next(1) === 33 && next(2) === 45 && next(3) === 45) {\\n        consume(3);\\n        return new CDOToken();\\n      } else {\\n        return new DelimToken(code);\\n      }\\n    } else if (code === 64) {\\n      if (wouldStartAnIdentifier(next(1), next(2), next(3)))\\n        return new AtKeywordToken(consumeAName());\\n      else\\n        return new DelimToken(code);\\n    } else if (code === 91) {\\n      return new OpenSquareToken();\\n    } else if (code === 92) {\\n      if (startsWithAValidEscape()) {\\n        reconsume();\\n        return consumeAnIdentlikeToken();\\n      } else {\\n        parseerror();\\n        return new DelimToken(code);\\n      }\\n    } else if (code === 93) {\\n      return new CloseSquareToken();\\n    } else if (code === 94) {\\n      if (next() === 61) {\\n        consume();\\n        return new PrefixMatchToken();\\n      } else {\\n        return new DelimToken(code);\\n      }\\n    } else if (code === 123) {\\n      return new OpenCurlyToken();\\n    } else if (code === 124) {\\n      if (next() === 61) {\\n        consume();\\n        return new DashMatchToken();\\n      } else if (next() === 124) {\\n        consume();\\n        return new ColumnToken();\\n      } else {\\n        return new DelimToken(code);\\n      }\\n    } else if (code === 125) {\\n      return new CloseCurlyToken();\\n    } else if (code === 126) {\\n      if (next() === 61) {\\n        consume();\\n        return new IncludeMatchToken();\\n      } else {\\n        return new DelimToken(code);\\n      }\\n    } else if (digit(code)) {\\n      reconsume();\\n      return consumeANumericToken();\\n    } else if (namestartchar(code)) {\\n      reconsume();\\n      return consumeAnIdentlikeToken();\\n    } else if (eof()) {\\n      return new EOFToken();\\n    } else {\\n      return new DelimToken(code);\\n    }\\n  };\\n  const consumeComments = function() {\\n    while (next(1) === 47 && next(2) === 42) {\\n      consume(2);\\n      while (true) {\\n        consume();\\n        if (code === 42 && next() === 47) {\\n          consume();\\n          break;\\n        } else if (eof()) {\\n          parseerror();\\n          return;\\n        }\\n      }\\n    }\\n  };\\n  const consumeANumericToken = function() {\\n    const num = consumeANumber();\\n    if (wouldStartAnIdentifier(next(1), next(2), next(3))) {\\n      const token = new DimensionToken();\\n      token.value = num.value;\\n      token.repr = num.repr;\\n      token.type = num.type;\\n      token.unit = consumeAName();\\n      return token;\\n    } else if (next() === 37) {\\n      consume();\\n      const token = new PercentageToken();\\n      token.value = num.value;\\n      token.repr = num.repr;\\n      return token;\\n    } else {\\n      const token = new NumberToken();\\n      token.value = num.value;\\n      token.repr = num.repr;\\n      token.type = num.type;\\n      return token;\\n    }\\n  };\\n  const consumeAnIdentlikeToken = function() {\\n    const str2 = consumeAName();\\n    if (str2.toLowerCase() === \\\"url\\\" && next() === 40) {\\n      consume();\\n      while (whitespace(next(1)) && whitespace(next(2)))\\n        consume();\\n      if (next() === 34 || next() === 39)\\n        return new FunctionToken(str2);\\n      else if (whitespace(next()) && (next(2) === 34 || next(2) === 39))\\n        return new FunctionToken(str2);\\n      else\\n        return consumeAURLToken();\\n    } else if (next() === 40) {\\n      consume();\\n      return new FunctionToken(str2);\\n    } else {\\n      return new IdentToken(str2);\\n    }\\n  };\\n  const consumeAStringToken = function(endingCodePoint) {\\n    if (endingCodePoint === void 0)\\n      endingCodePoint = code;\\n    let string = \\\"\\\";\\n    while (consume()) {\\n      if (code === endingCodePoint || eof()) {\\n        return new StringToken(string);\\n      } else if (newline(code)) {\\n        parseerror();\\n        reconsume();\\n        return new BadStringToken();\\n      } else if (code === 92) {\\n        if (eof(next()))\\n          donothing();\\n        else if (newline(next()))\\n          consume();\\n        else\\n          string += stringFromCode(consumeEscape());\\n      } else {\\n        string += stringFromCode(code);\\n      }\\n    }\\n    throw new Error(\\\"Internal error\\\");\\n  };\\n  const consumeAURLToken = function() {\\n    const token = new URLToken(\\\"\\\");\\n    while (whitespace(next()))\\n      consume();\\n    if (eof(next()))\\n      return token;\\n    while (consume()) {\\n      if (code === 41 || eof()) {\\n        return token;\\n      } else if (whitespace(code)) {\\n        while (whitespace(next()))\\n          consume();\\n        if (next() === 41 || eof(next())) {\\n          consume();\\n          return token;\\n        } else {\\n          consumeTheRemnantsOfABadURL();\\n          return new BadURLToken();\\n        }\\n      } else if (code === 34 || code === 39 || code === 40 || nonprintable(code)) {\\n        parseerror();\\n        consumeTheRemnantsOfABadURL();\\n        return new BadURLToken();\\n      } else if (code === 92) {\\n        if (startsWithAValidEscape()) {\\n          token.value += stringFromCode(consumeEscape());\\n        } else {\\n          parseerror();\\n          consumeTheRemnantsOfABadURL();\\n          return new BadURLToken();\\n        }\\n      } else {\\n        token.value += stringFromCode(code);\\n      }\\n    }\\n    throw new Error(\\\"Internal error\\\");\\n  };\\n  const consumeEscape = function() {\\n    consume();\\n    if (hexdigit(code)) {\\n      const digits = [code];\\n      for (let total = 0; total < 5; total++) {\\n        if (hexdigit(next())) {\\n          consume();\\n          digits.push(code);\\n        } else {\\n          break;\\n        }\\n      }\\n      if (whitespace(next()))\\n        consume();\\n      let value = parseInt(digits.map(function(x) {\\n        return String.fromCharCode(x);\\n      }).join(\\\"\\\"), 16);\\n      if (value > maximumallowedcodepoint)\\n        value = 65533;\\n      return value;\\n    } else if (eof()) {\\n      return 65533;\\n    } else {\\n      return code;\\n    }\\n  };\\n  const areAValidEscape = function(c1, c2) {\\n    if (c1 !== 92)\\n      return false;\\n    if (newline(c2))\\n      return false;\\n    return true;\\n  };\\n  const startsWithAValidEscape = function() {\\n    return areAValidEscape(code, next());\\n  };\\n  const wouldStartAnIdentifier = function(c1, c2, c3) {\\n    if (c1 === 45)\\n      return namestartchar(c2) || c2 === 45 || areAValidEscape(c2, c3);\\n    else if (namestartchar(c1))\\n      return true;\\n    else if (c1 === 92)\\n      return areAValidEscape(c1, c2);\\n    else\\n      return false;\\n  };\\n  const startsWithAnIdentifier = function() {\\n    return wouldStartAnIdentifier(code, next(1), next(2));\\n  };\\n  const wouldStartANumber = function(c1, c2, c3) {\\n    if (c1 === 43 || c1 === 45) {\\n      if (digit(c2))\\n        return true;\\n      if (c2 === 46 && digit(c3))\\n        return true;\\n      return false;\\n    } else if (c1 === 46) {\\n      if (digit(c2))\\n        return true;\\n      return false;\\n    } else if (digit(c1)) {\\n      return true;\\n    } else {\\n      return false;\\n    }\\n  };\\n  const startsWithANumber = function() {\\n    return wouldStartANumber(code, next(1), next(2));\\n  };\\n  const consumeAName = function() {\\n    let result = \\\"\\\";\\n    while (consume()) {\\n      if (namechar(code)) {\\n        result += stringFromCode(code);\\n      } else if (startsWithAValidEscape()) {\\n        result += stringFromCode(consumeEscape());\\n      } else {\\n        reconsume();\\n        return result;\\n      }\\n    }\\n    throw new Error(\\\"Internal parse error\\\");\\n  };\\n  const consumeANumber = function() {\\n    let repr = \\\"\\\";\\n    let type = \\\"integer\\\";\\n    if (next() === 43 || next() === 45) {\\n      consume();\\n      repr += stringFromCode(code);\\n    }\\n    while (digit(next())) {\\n      consume();\\n      repr += stringFromCode(code);\\n    }\\n    if (next(1) === 46 && digit(next(2))) {\\n      consume();\\n      repr += stringFromCode(code);\\n      consume();\\n      repr += stringFromCode(code);\\n      type = \\\"number\\\";\\n      while (digit(next())) {\\n        consume();\\n        repr += stringFromCode(code);\\n      }\\n    }\\n    const c1 = next(1), c2 = next(2), c3 = next(3);\\n    if ((c1 === 69 || c1 === 101) && digit(c2)) {\\n      consume();\\n      repr += stringFromCode(code);\\n      consume();\\n      repr += stringFromCode(code);\\n      type = \\\"number\\\";\\n      while (digit(next())) {\\n        consume();\\n        repr += stringFromCode(code);\\n      }\\n    } else if ((c1 === 69 || c1 === 101) && (c2 === 43 || c2 === 45) && digit(c3)) {\\n      consume();\\n      repr += stringFromCode(code);\\n      consume();\\n      repr += stringFromCode(code);\\n      consume();\\n      repr += stringFromCode(code);\\n      type = \\\"number\\\";\\n      while (digit(next())) {\\n        consume();\\n        repr += stringFromCode(code);\\n      }\\n    }\\n    const value = convertAStringToANumber(repr);\\n    return { type, value, repr };\\n  };\\n  const convertAStringToANumber = function(string) {\\n    return +string;\\n  };\\n  const consumeTheRemnantsOfABadURL = function() {\\n    while (consume()) {\\n      if (code === 41 || eof()) {\\n        return;\\n      } else if (startsWithAValidEscape()) {\\n        consumeEscape();\\n        donothing();\\n      } else {\\n        donothing();\\n      }\\n    }\\n  };\\n  let iterationCount = 0;\\n  while (!eof(next())) {\\n    tokens.push(consumeAToken());\\n    iterationCount++;\\n    if (iterationCount > str.length * 2)\\n      throw new Error(\\\"I'm infinite-looping!\\\");\\n  }\\n  return tokens;\\n}\\nvar CSSParserToken = class {\\n  constructor() {\\n    this.tokenType = \\\"\\\";\\n  }\\n  toJSON() {\\n    return { token: this.tokenType };\\n  }\\n  toString() {\\n    return this.tokenType;\\n  }\\n  toSource() {\\n    return \\\"\\\" + this;\\n  }\\n};\\nvar BadStringToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\"BADSTRING\\\";\\n  }\\n};\\nvar BadURLToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\"BADURL\\\";\\n  }\\n};\\nvar WhitespaceToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\"WHITESPACE\\\";\\n  }\\n  toString() {\\n    return \\\"WS\\\";\\n  }\\n  toSource() {\\n    return \\\" \\\";\\n  }\\n};\\nvar CDOToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\"CDO\\\";\\n  }\\n  toSource() {\\n    return \\\"<!--\\\";\\n  }\\n};\\nvar CDCToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\"CDC\\\";\\n  }\\n  toSource() {\\n    return \\\"-->\\\";\\n  }\\n};\\nvar ColonToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\":\\\";\\n  }\\n};\\nvar SemicolonToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\";\\\";\\n  }\\n};\\nvar CommaToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\",\\\";\\n  }\\n};\\nvar GroupingToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.value = \\\"\\\";\\n    this.mirror = \\\"\\\";\\n  }\\n};\\nvar OpenCurlyToken = class extends GroupingToken {\\n  constructor() {\\n    super();\\n    this.tokenType = \\\"{\\\";\\n    this.value = \\\"{\\\";\\n    this.mirror = \\\"}\\\";\\n  }\\n};\\nvar CloseCurlyToken = class extends GroupingToken {\\n  constructor() {\\n    super();\\n    this.tokenType = \\\"}\\\";\\n    this.value = \\\"}\\\";\\n    this.mirror = \\\"{\\\";\\n  }\\n};\\nvar OpenSquareToken = class extends GroupingToken {\\n  constructor() {\\n    super();\\n    this.tokenType = \\\"[\\\";\\n    this.value = \\\"[\\\";\\n    this.mirror = \\\"]\\\";\\n  }\\n};\\nvar CloseSquareToken = class extends GroupingToken {\\n  constructor() {\\n    super();\\n    this.tokenType = \\\"]\\\";\\n    this.value = \\\"]\\\";\\n    this.mirror = \\\"[\\\";\\n  }\\n};\\nvar OpenParenToken = class extends GroupingToken {\\n  constructor() {\\n    super();\\n    this.tokenType = \\\"(\\\";\\n    this.value = \\\"(\\\";\\n    this.mirror = \\\")\\\";\\n  }\\n};\\nvar CloseParenToken = class extends GroupingToken {\\n  constructor() {\\n    super();\\n    this.tokenType = \\\")\\\";\\n    this.value = \\\")\\\";\\n    this.mirror = \\\"(\\\";\\n  }\\n};\\nvar IncludeMatchToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\"~=\\\";\\n  }\\n};\\nvar DashMatchToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\"|=\\\";\\n  }\\n};\\nvar PrefixMatchToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\"^=\\\";\\n  }\\n};\\nvar SuffixMatchToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\"$=\\\";\\n  }\\n};\\nvar SubstringMatchToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\"*=\\\";\\n  }\\n};\\nvar ColumnToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\"||\\\";\\n  }\\n};\\nvar EOFToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.tokenType = \\\"EOF\\\";\\n  }\\n  toSource() {\\n    return \\\"\\\";\\n  }\\n};\\nvar DelimToken = class extends CSSParserToken {\\n  constructor(code) {\\n    super();\\n    this.tokenType = \\\"DELIM\\\";\\n    this.value = \\\"\\\";\\n    this.value = stringFromCode(code);\\n  }\\n  toString() {\\n    return \\\"DELIM(\\\" + this.value + \\\")\\\";\\n  }\\n  toJSON() {\\n    const json = this.constructor.prototype.constructor.prototype.toJSON.call(this);\\n    json.value = this.value;\\n    return json;\\n  }\\n  toSource() {\\n    if (this.value === \\\"\\\\\\\\\\\")\\n      return \\\"\\\\\\\\\\\\n\\\";\\n    else\\n      return this.value;\\n  }\\n};\\nvar StringValuedToken = class extends CSSParserToken {\\n  constructor() {\\n    super(...arguments);\\n    this.value = \\\"\\\";\\n  }\\n  ASCIIMatch(str) {\\n    return this.value.toLowerCase() === str.toLowerCase();\\n  }\\n  toJSON() {\\n    const json = this.constructor.prototype.constructor.prototype.toJSON.call(this);\\n    json.value = this.value;\\n    return json;\\n  }\\n};\\nvar IdentToken = class extends StringValuedToken {\\n  constructor(val) {\\n    super();\\n    this.tokenType = \\\"IDENT\\\";\\n    this.value = val;\\n  }\\n  toString() {\\n    return \\\"IDENT(\\\" + this.value + \\\")\\\";\\n  }\\n  toSource() {\\n    return escapeIdent(this.value);\\n  }\\n};\\nvar FunctionToken = class extends StringValuedToken {\\n  constructor(val) {\\n    super();\\n    this.tokenType = \\\"FUNCTION\\\";\\n    this.value = val;\\n    this.mirror = \\\")\\\";\\n  }\\n  toString() {\\n    return \\\"FUNCTION(\\\" + this.value + \\\")\\\";\\n  }\\n  toSource() {\\n    return escapeIdent(this.value) + \\\"(\\\";\\n  }\\n};\\nvar AtKeywordToken = class extends StringValuedToken {\\n  constructor(val) {\\n    super();\\n    this.tokenType = \\\"AT-KEYWORD\\\";\\n    this.value = val;\\n  }\\n  toString() {\\n    return \\\"AT(\\\" + this.value + \\\")\\\";\\n  }\\n  toSource() {\\n    return \\\"@\\\" + escapeIdent(this.value);\\n  }\\n};\\nvar HashToken = class extends StringValuedToken {\\n  constructor(val) {\\n    super();\\n    this.tokenType = \\\"HASH\\\";\\n    this.value = val;\\n    this.type = \\\"unrestricted\\\";\\n  }\\n  toString() {\\n    return \\\"HASH(\\\" + this.value + \\\")\\\";\\n  }\\n  toJSON() {\\n    const json = this.constructor.prototype.constructor.prototype.toJSON.call(this);\\n    json.value = this.value;\\n    json.type = this.type;\\n    return json;\\n  }\\n  toSource() {\\n    if (this.type === \\\"id\\\")\\n      return \\\"#\\\" + escapeIdent(this.value);\\n    else\\n      return \\\"#\\\" + escapeHash(this.value);\\n  }\\n};\\nvar StringToken = class extends StringValuedToken {\\n  constructor(val) {\\n    super();\\n    this.tokenType = \\\"STRING\\\";\\n    this.value = val;\\n  }\\n  toString() {\\n    return '\\\"' + escapeString(this.value) + '\\\"';\\n  }\\n};\\nvar URLToken = class extends StringValuedToken {\\n  constructor(val) {\\n    super();\\n    this.tokenType = \\\"URL\\\";\\n    this.value = val;\\n  }\\n  toString() {\\n    return \\\"URL(\\\" + this.value + \\\")\\\";\\n  }\\n  toSource() {\\n    return 'url(\\\"' + escapeString(this.value) + '\\\")';\\n  }\\n};\\nvar NumberToken = class extends CSSParserToken {\\n  constructor() {\\n    super();\\n    this.tokenType = \\\"NUMBER\\\";\\n    this.type = \\\"integer\\\";\\n    this.repr = \\\"\\\";\\n  }\\n  toString() {\\n    if (this.type === \\\"integer\\\")\\n      return \\\"INT(\\\" + this.value + \\\")\\\";\\n    return \\\"NUMBER(\\\" + this.value + \\\")\\\";\\n  }\\n  toJSON() {\\n    const json = super.toJSON();\\n    json.value = this.value;\\n    json.type = this.type;\\n    json.repr = this.repr;\\n    return json;\\n  }\\n  toSource() {\\n    return this.repr;\\n  }\\n};\\nvar PercentageToken = class extends CSSParserToken {\\n  constructor() {\\n    super();\\n    this.tokenType = \\\"PERCENTAGE\\\";\\n    this.repr = \\\"\\\";\\n  }\\n  toString() {\\n    return \\\"PERCENTAGE(\\\" + this.value + \\\")\\\";\\n  }\\n  toJSON() {\\n    const json = this.constructor.prototype.constructor.prototype.toJSON.call(this);\\n    json.value = this.value;\\n    json.repr = this.repr;\\n    return json;\\n  }\\n  toSource() {\\n    return this.repr + \\\"%\\\";\\n  }\\n};\\nvar DimensionToken = class extends CSSParserToken {\\n  constructor() {\\n    super();\\n    this.tokenType = \\\"DIMENSION\\\";\\n    this.type = \\\"integer\\\";\\n    this.repr = \\\"\\\";\\n    this.unit = \\\"\\\";\\n  }\\n  toString() {\\n    return \\\"DIM(\\\" + this.value + \\\",\\\" + this.unit + \\\")\\\";\\n  }\\n  toJSON() {\\n    const json = this.constructor.prototype.constructor.prototype.toJSON.call(this);\\n    json.value = this.value;\\n    json.type = this.type;\\n    json.repr = this.repr;\\n    json.unit = this.unit;\\n    return json;\\n  }\\n  toSource() {\\n    const source = this.repr;\\n    let unit = escapeIdent(this.unit);\\n    if (unit[0].toLowerCase() === \\\"e\\\" && (unit[1] === \\\"-\\\" || between(unit.charCodeAt(1), 48, 57))) {\\n      unit = \\\"\\\\\\\\65 \\\" + unit.slice(1, unit.length);\\n    }\\n    return source + unit;\\n  }\\n};\\nfunction escapeIdent(string) {\\n  string = \\\"\\\" + string;\\n  let result = \\\"\\\";\\n  const firstcode = string.charCodeAt(0);\\n  for (let i = 0; i < string.length; i++) {\\n    const code = string.charCodeAt(i);\\n    if (code === 0)\\n      throw new InvalidCharacterError(\\\"Invalid character: the input contains U+0000.\\\");\\n    if (between(code, 1, 31) || code === 127 || i === 0 && between(code, 48, 57) || i === 1 && between(code, 48, 57) && firstcode === 45)\\n      result += \\\"\\\\\\\\\\\" + code.toString(16) + \\\" \\\";\\n    else if (code >= 128 || code === 45 || code === 95 || between(code, 48, 57) || between(code, 65, 90) || between(code, 97, 122))\\n      result += string[i];\\n    else\\n      result += \\\"\\\\\\\\\\\" + string[i];\\n  }\\n  return result;\\n}\\nfunction escapeHash(string) {\\n  string = \\\"\\\" + string;\\n  let result = \\\"\\\";\\n  for (let i = 0; i < string.length; i++) {\\n    const code = string.charCodeAt(i);\\n    if (code === 0)\\n      throw new InvalidCharacterError(\\\"Invalid character: the input contains U+0000.\\\");\\n    if (code >= 128 || code === 45 || code === 95 || between(code, 48, 57) || between(code, 65, 90) || between(code, 97, 122))\\n      result += string[i];\\n    else\\n      result += \\\"\\\\\\\\\\\" + code.toString(16) + \\\" \\\";\\n  }\\n  return result;\\n}\\nfunction escapeString(string) {\\n  string = \\\"\\\" + string;\\n  let result = \\\"\\\";\\n  for (let i = 0; i < string.length; i++) {\\n    const code = string.charCodeAt(i);\\n    if (code === 0)\\n      throw new InvalidCharacterError(\\\"Invalid character: the input contains U+0000.\\\");\\n    if (between(code, 1, 31) || code === 127)\\n      result += \\\"\\\\\\\\\\\" + code.toString(16) + \\\" \\\";\\n    else if (code === 34 || code === 92)\\n      result += \\\"\\\\\\\\\\\" + string[i];\\n    else\\n      result += string[i];\\n  }\\n  return result;\\n}\\n\\n// packages/playwright-core/src/utils/isomorphic/cssParser.ts\\nvar InvalidSelectorError = class extends Error {\\n};\\nfunction parseCSS(selector, customNames) {\\n  let tokens;\\n  try {\\n    tokens = tokenize(selector);\\n    if (!(tokens[tokens.length - 1] instanceof EOFToken))\\n      tokens.push(new EOFToken());\\n  } catch (e) {\\n    const newMessage = e.message + ` while parsing css selector \\\"${selector}\\\". Did you mean to CSS.escape it?`;\\n    const index = (e.stack || \\\"\\\").indexOf(e.message);\\n    if (index !== -1)\\n      e.stack = e.stack.substring(0, index) + newMessage + e.stack.substring(index + e.message.length);\\n    e.message = newMessage;\\n    throw e;\\n  }\\n  const unsupportedToken = tokens.find((token) => {\\n    return token instanceof AtKeywordToken || token instanceof BadStringToken || token instanceof BadURLToken || token instanceof ColumnToken || token instanceof CDOToken || token instanceof CDCToken || token instanceof SemicolonToken || // TODO: Consider using these for something, e.g. to escape complex strings.\\n    // For example :xpath{ (//div/bar[@attr=\\\"foo\\\"])[2]/baz }\\n    // Or this way :xpath( {complex-xpath-goes-here(\\\"hello\\\")} )\\n    token instanceof OpenCurlyToken || token instanceof CloseCurlyToken || // TODO: Consider treating these as strings?\\n    token instanceof URLToken || token instanceof PercentageToken;\\n  });\\n  if (unsupportedToken)\\n    throw new InvalidSelectorError(`Unsupported token \\\"${unsupportedToken.toSource()}\\\" while parsing css selector \\\"${selector}\\\". Did you mean to CSS.escape it?`);\\n  let pos = 0;\\n  const names = /* @__PURE__ */ new Set();\\n  function unexpected() {\\n    return new InvalidSelectorError(`Unexpected token \\\"${tokens[pos].toSource()}\\\" while parsing css selector \\\"${selector}\\\". Did you mean to CSS.escape it?`);\\n  }\\n  function skipWhitespace() {\\n    while (tokens[pos] instanceof WhitespaceToken)\\n      pos++;\\n  }\\n  function isIdent(p = pos) {\\n    return tokens[p] instanceof IdentToken;\\n  }\\n  function isString(p = pos) {\\n    return tokens[p] instanceof StringToken;\\n  }\\n  function isNumber(p = pos) {\\n    return tokens[p] instanceof NumberToken;\\n  }\\n  function isComma(p = pos) {\\n    return tokens[p] instanceof CommaToken;\\n  }\\n  function isOpenParen(p = pos) {\\n    return tokens[p] instanceof OpenParenToken;\\n  }\\n  function isCloseParen(p = pos) {\\n    return tokens[p] instanceof CloseParenToken;\\n  }\\n  function isFunction(p = pos) {\\n    return tokens[p] instanceof FunctionToken;\\n  }\\n  function isStar(p = pos) {\\n    return tokens[p] instanceof DelimToken && tokens[p].value === \\\"*\\\";\\n  }\\n  function isEOF(p = pos) {\\n    return tokens[p] instanceof EOFToken;\\n  }\\n  function isClauseCombinator(p = pos) {\\n    return tokens[p] instanceof DelimToken && [\\\">\\\", \\\"+\\\", \\\"~\\\"].includes(tokens[p].value);\\n  }\\n  function isSelectorClauseEnd(p = pos) {\\n    return isComma(p) || isCloseParen(p) || isEOF(p) || isClauseCombinator(p) || tokens[p] instanceof WhitespaceToken;\\n  }\\n  function consumeFunctionArguments() {\\n    const result2 = [consumeArgument()];\\n    while (true) {\\n      skipWhitespace();\\n      if (!isComma())\\n        break;\\n      pos++;\\n      result2.push(consumeArgument());\\n    }\\n    return result2;\\n  }\\n  function consumeArgument() {\\n    skipWhitespace();\\n    if (isNumber())\\n      return tokens[pos++].value;\\n    if (isString())\\n      return tokens[pos++].value;\\n    return consumeComplexSelector();\\n  }\\n  function consumeComplexSelector() {\\n    const result2 = { simples: [] };\\n    skipWhitespace();\\n    if (isClauseCombinator()) {\\n      result2.simples.push({ selector: { functions: [{ name: \\\"scope\\\", args: [] }] }, combinator: \\\"\\\" });\\n    } else {\\n      result2.simples.push({ selector: consumeSimpleSelector(), combinator: \\\"\\\" });\\n    }\\n    while (true) {\\n      skipWhitespace();\\n      if (isClauseCombinator()) {\\n        result2.simples[result2.simples.length - 1].combinator = tokens[pos++].value;\\n        skipWhitespace();\\n      } else if (isSelectorClauseEnd()) {\\n        break;\\n      }\\n      result2.simples.push({ combinator: \\\"\\\", selector: consumeSimpleSelector() });\\n    }\\n    return result2;\\n  }\\n  function consumeSimpleSelector() {\\n    let rawCSSString = \\\"\\\";\\n    const functions = [];\\n    while (!isSelectorClauseEnd()) {\\n      if (isIdent() || isStar()) {\\n        rawCSSString += tokens[pos++].toSource();\\n      } else if (tokens[pos] instanceof HashToken) {\\n        rawCSSString += tokens[pos++].toSource();\\n      } else if (tokens[pos] instanceof DelimToken && tokens[pos].value === \\\".\\\") {\\n        pos++;\\n        if (isIdent())\\n          rawCSSString += \\\".\\\" + tokens[pos++].toSource();\\n        else\\n          throw unexpected();\\n      } else if (tokens[pos] instanceof ColonToken) {\\n        pos++;\\n        if (isIdent()) {\\n          if (!customNames.has(tokens[pos].value.toLowerCase())) {\\n            rawCSSString += \\\":\\\" + tokens[pos++].toSource();\\n          } else {\\n            const name = tokens[pos++].value.toLowerCase();\\n            functions.push({ name, args: [] });\\n            names.add(name);\\n          }\\n        } else if (isFunction()) {\\n          const name = tokens[pos++].value.toLowerCase();\\n          if (!customNames.has(name)) {\\n            rawCSSString += `:${name}(${consumeBuiltinFunctionArguments()})`;\\n          } else {\\n            functions.push({ name, args: consumeFunctionArguments() });\\n            names.add(name);\\n          }\\n          skipWhitespace();\\n          if (!isCloseParen())\\n            throw unexpected();\\n          pos++;\\n        } else {\\n          throw unexpected();\\n        }\\n      } else if (tokens[pos] instanceof OpenSquareToken) {\\n        rawCSSString += \\\"[\\\";\\n        pos++;\\n        while (!(tokens[pos] instanceof CloseSquareToken) && !isEOF())\\n          rawCSSString += tokens[pos++].toSource();\\n        if (!(tokens[pos] instanceof CloseSquareToken))\\n          throw unexpected();\\n        rawCSSString += \\\"]\\\";\\n        pos++;\\n      } else {\\n        throw unexpected();\\n      }\\n    }\\n    if (!rawCSSString && !functions.length)\\n      throw unexpected();\\n    return { css: rawCSSString || void 0, functions };\\n  }\\n  function consumeBuiltinFunctionArguments() {\\n    let s = \\\"\\\";\\n    let balance = 1;\\n    while (!isEOF()) {\\n      if (isOpenParen() || isFunction())\\n        balance++;\\n      if (isCloseParen())\\n        balance--;\\n      if (!balance)\\n        break;\\n      s += tokens[pos++].toSource();\\n    }\\n    return s;\\n  }\\n  const result = consumeFunctionArguments();\\n  if (!isEOF())\\n    throw unexpected();\\n  if (result.some((arg) => typeof arg !== \\\"object\\\" || !(\\\"simples\\\" in arg)))\\n    throw new InvalidSelectorError(`Error while parsing css selector \\\"${selector}\\\". Did you mean to CSS.escape it?`);\\n  return { selector: result, names: Array.from(names) };\\n}\\n\\n// packages/playwright-core/src/utils/isomorphic/selectorParser.ts\\nvar kNestedSelectorNames = /* @__PURE__ */ new Set([\\\"internal:has\\\", \\\"internal:has-not\\\", \\\"internal:and\\\", \\\"internal:or\\\", \\\"internal:chain\\\", \\\"left-of\\\", \\\"right-of\\\", \\\"above\\\", \\\"below\\\", \\\"near\\\"]);\\nvar kNestedSelectorNamesWithDistance = /* @__PURE__ */ new Set([\\\"left-of\\\", \\\"right-of\\\", \\\"above\\\", \\\"below\\\", \\\"near\\\"]);\\nvar customCSSNames = /* @__PURE__ */ new Set([\\\"not\\\", \\\"is\\\", \\\"where\\\", \\\"has\\\", \\\"scope\\\", \\\"light\\\", \\\"visible\\\", \\\"text\\\", \\\"text-matches\\\", \\\"text-is\\\", \\\"has-text\\\", \\\"above\\\", \\\"below\\\", \\\"right-of\\\", \\\"left-of\\\", \\\"near\\\", \\\"nth-match\\\"]);\\nfunction parseSelector(selector) {\\n  const parsedStrings = parseSelectorString(selector);\\n  const parts = [];\\n  for (const part of parsedStrings.parts) {\\n    if (part.name === \\\"css\\\" || part.name === \\\"css:light\\\") {\\n      if (part.name === \\\"css:light\\\")\\n        part.body = \\\":light(\\\" + part.body + \\\")\\\";\\n      const parsedCSS = parseCSS(part.body, customCSSNames);\\n      parts.push({\\n        name: \\\"css\\\",\\n        body: parsedCSS.selector,\\n        source: part.body\\n      });\\n      continue;\\n    }\\n    if (kNestedSelectorNames.has(part.name)) {\\n      let innerSelector;\\n      let distance;\\n      try {\\n        const unescaped = JSON.parse(\\\"[\\\" + part.body + \\\"]\\\");\\n        if (!Array.isArray(unescaped) || unescaped.length < 1 || unescaped.length > 2 || typeof unescaped[0] !== \\\"string\\\")\\n          throw new InvalidSelectorError(`Malformed selector: ${part.name}=` + part.body);\\n        innerSelector = unescaped[0];\\n        if (unescaped.length === 2) {\\n          if (typeof unescaped[1] !== \\\"number\\\" || !kNestedSelectorNamesWithDistance.has(part.name))\\n            throw new InvalidSelectorError(`Malformed selector: ${part.name}=` + part.body);\\n          distance = unescaped[1];\\n        }\\n      } catch (e) {\\n        throw new InvalidSelectorError(`Malformed selector: ${part.name}=` + part.body);\\n      }\\n      const nested = { name: part.name, source: part.body, body: { parsed: parseSelector(innerSelector), distance } };\\n      const lastFrame = [...nested.body.parsed.parts].reverse().find((part2) => part2.name === \\\"internal:control\\\" && part2.body === \\\"enter-frame\\\");\\n      const lastFrameIndex = lastFrame ? nested.body.parsed.parts.indexOf(lastFrame) : -1;\\n      if (lastFrameIndex !== -1 && selectorPartsEqual(nested.body.parsed.parts.slice(0, lastFrameIndex + 1), parts.slice(0, lastFrameIndex + 1)))\\n        nested.body.parsed.parts.splice(0, lastFrameIndex + 1);\\n      parts.push(nested);\\n      continue;\\n    }\\n    parts.push({ ...part, source: part.body });\\n  }\\n  if (kNestedSelectorNames.has(parts[0].name))\\n    throw new InvalidSelectorError(`\\\"${parts[0].name}\\\" selector cannot be first`);\\n  return {\\n    capture: parsedStrings.capture,\\n    parts\\n  };\\n}\\nfunction selectorPartsEqual(list1, list2) {\\n  return stringifySelector({ parts: list1 }) === stringifySelector({ parts: list2 });\\n}\\nfunction stringifySelector(selector, forceEngineName) {\\n  if (typeof selector === \\\"string\\\")\\n    return selector;\\n  return selector.parts.map((p, i) => {\\n    let includeEngine = true;\\n    if (!forceEngineName && i !== selector.capture) {\\n      if (p.name === \\\"css\\\")\\n        includeEngine = false;\\n      else if (p.name === \\\"xpath\\\" && p.source.startsWith(\\\"//\\\") || p.source.startsWith(\\\"..\\\"))\\n        includeEngine = false;\\n    }\\n    const prefix = includeEngine ? p.name + \\\"=\\\" : \\\"\\\";\\n    return `${i === selector.capture ? \\\"*\\\" : \\\"\\\"}${prefix}${p.source}`;\\n  }).join(\\\" >> \\\");\\n}\\nfunction visitAllSelectorParts(selector, visitor) {\\n  const visit = (selector2, nested) => {\\n    for (const part of selector2.parts) {\\n      visitor(part, nested);\\n      if (kNestedSelectorNames.has(part.name))\\n        visit(part.body.parsed, true);\\n    }\\n  };\\n  visit(selector, false);\\n}\\nfunction parseSelectorString(selector) {\\n  let index = 0;\\n  let quote;\\n  let start = 0;\\n  const result = { parts: [] };\\n  const append = () => {\\n    const part = selector.substring(start, index).trim();\\n    const eqIndex = part.indexOf(\\\"=\\\");\\n    let name;\\n    let body;\\n    if (eqIndex !== -1 && part.substring(0, eqIndex).trim().match(/^[a-zA-Z_0-9-+:*]+$/)) {\\n      name = part.substring(0, eqIndex).trim();\\n      body = part.substring(eqIndex + 1);\\n    } else if (part.length > 1 && part[0] === '\\\"' && part[part.length - 1] === '\\\"') {\\n      name = \\\"text\\\";\\n      body = part;\\n    } else if (part.length > 1 && part[0] === \\\"'\\\" && part[part.length - 1] === \\\"'\\\") {\\n      name = \\\"text\\\";\\n      body = part;\\n    } else if (/^\\\\(*\\\\/\\\\//.test(part) || part.startsWith(\\\"..\\\")) {\\n      name = \\\"xpath\\\";\\n      body = part;\\n    } else {\\n      name = \\\"css\\\";\\n      body = part;\\n    }\\n    let capture = false;\\n    if (name[0] === \\\"*\\\") {\\n      capture = true;\\n      name = name.substring(1);\\n    }\\n    result.parts.push({ name, body });\\n    if (capture) {\\n      if (result.capture !== void 0)\\n        throw new InvalidSelectorError(`Only one of the selectors can capture using * modifier`);\\n      result.capture = result.parts.length - 1;\\n    }\\n  };\\n  if (!selector.includes(\\\">>\\\")) {\\n    index = selector.length;\\n    append();\\n    return result;\\n  }\\n  const shouldIgnoreTextSelectorQuote = () => {\\n    const prefix = selector.substring(start, index);\\n    const match = prefix.match(/^\\\\s*text\\\\s*=(.*)$/);\\n    return !!match && !!match[1];\\n  };\\n  while (index < selector.length) {\\n    const c = selector[index];\\n    if (c === \\\"\\\\\\\\\\\" && index + 1 < selector.length) {\\n      index += 2;\\n    } else if (c === quote) {\\n      quote = void 0;\\n      index++;\\n    } else if (!quote && (c === '\\\"' || c === \\\"'\\\" || c === \\\"`\\\") && !shouldIgnoreTextSelectorQuote()) {\\n      quote = c;\\n      index++;\\n    } else if (!quote && c === \\\">\\\" && selector[index + 1] === \\\">\\\") {\\n      append();\\n      index += 2;\\n      start = index;\\n    } else {\\n      index++;\\n    }\\n  }\\n  append();\\n  return result;\\n}\\nfunction parseAttributeSelector(selector, allowUnquotedStrings) {\\n  let wp = 0;\\n  let EOL = selector.length === 0;\\n  const next = () => selector[wp] || \\\"\\\";\\n  const eat1 = () => {\\n    const result2 = next();\\n    ++wp;\\n    EOL = wp >= selector.length;\\n    return result2;\\n  };\\n  const syntaxError = (stage) => {\\n    if (EOL)\\n      throw new InvalidSelectorError(`Unexpected end of selector while parsing selector \\\\`${selector}\\\\``);\\n    throw new InvalidSelectorError(`Error while parsing selector \\\\`${selector}\\\\` - unexpected symbol \\\"${next()}\\\" at position ${wp}` + (stage ? \\\" during \\\" + stage : \\\"\\\"));\\n  };\\n  function skipSpaces() {\\n    while (!EOL && /\\\\s/.test(next()))\\n      eat1();\\n  }\\n  function isCSSNameChar(char) {\\n    return char >= \\\"\\\\x80\\\" || char >= \\\"0\\\" && char <= \\\"9\\\" || char >= \\\"A\\\" && char <= \\\"Z\\\" || char >= \\\"a\\\" && char <= \\\"z\\\" || char >= \\\"0\\\" && char <= \\\"9\\\" || char === \\\"_\\\" || char === \\\"-\\\";\\n  }\\n  function readIdentifier() {\\n    let result2 = \\\"\\\";\\n    skipSpaces();\\n    while (!EOL && isCSSNameChar(next()))\\n      result2 += eat1();\\n    return result2;\\n  }\\n  function readQuotedString(quote) {\\n    let result2 = eat1();\\n    if (result2 !== quote)\\n      syntaxError(\\\"parsing quoted string\\\");\\n    while (!EOL && next() !== quote) {\\n      if (next() === \\\"\\\\\\\\\\\")\\n        eat1();\\n      result2 += eat1();\\n    }\\n    if (next() !== quote)\\n      syntaxError(\\\"parsing quoted string\\\");\\n    result2 += eat1();\\n    return result2;\\n  }\\n  function readRegularExpression() {\\n    if (eat1() !== \\\"/\\\")\\n      syntaxError(\\\"parsing regular expression\\\");\\n    let source = \\\"\\\";\\n    let inClass = false;\\n    while (!EOL) {\\n      if (next() === \\\"\\\\\\\\\\\") {\\n        source += eat1();\\n        if (EOL)\\n          syntaxError(\\\"parsing regular expression\\\");\\n      } else if (inClass && next() === \\\"]\\\") {\\n        inClass = false;\\n      } else if (!inClass && next() === \\\"[\\\") {\\n        inClass = true;\\n      } else if (!inClass && next() === \\\"/\\\") {\\n        break;\\n      }\\n      source += eat1();\\n    }\\n    if (eat1() !== \\\"/\\\")\\n      syntaxError(\\\"parsing regular expression\\\");\\n    let flags = \\\"\\\";\\n    while (!EOL && next().match(/[dgimsuy]/))\\n      flags += eat1();\\n    try {\\n      return new RegExp(source, flags);\\n    } catch (e) {\\n      throw new InvalidSelectorError(`Error while parsing selector \\\\`${selector}\\\\`: ${e.message}`);\\n    }\\n  }\\n  function readAttributeToken() {\\n    let token = \\\"\\\";\\n    skipSpaces();\\n    if (next() === `'` || next() === `\\\"`)\\n      token = readQuotedString(next()).slice(1, -1);\\n    else\\n      token = readIdentifier();\\n    if (!token)\\n      syntaxError(\\\"parsing property path\\\");\\n    return token;\\n  }\\n  function readOperator() {\\n    skipSpaces();\\n    let op = \\\"\\\";\\n    if (!EOL)\\n      op += eat1();\\n    if (!EOL && op !== \\\"=\\\")\\n      op += eat1();\\n    if (![\\\"=\\\", \\\"*=\\\", \\\"^=\\\", \\\"$=\\\", \\\"|=\\\", \\\"~=\\\"].includes(op))\\n      syntaxError(\\\"parsing operator\\\");\\n    return op;\\n  }\\n  function readAttribute() {\\n    eat1();\\n    const jsonPath = [];\\n    jsonPath.push(readAttributeToken());\\n    skipSpaces();\\n    while (next() === \\\".\\\") {\\n      eat1();\\n      jsonPath.push(readAttributeToken());\\n      skipSpaces();\\n    }\\n    if (next() === \\\"]\\\") {\\n      eat1();\\n      return { name: jsonPath.join(\\\".\\\"), jsonPath, op: \\\"<truthy>\\\", value: null, caseSensitive: false };\\n    }\\n    const operator = readOperator();\\n    let value = void 0;\\n    let caseSensitive = true;\\n    skipSpaces();\\n    if (next() === \\\"/\\\") {\\n      if (operator !== \\\"=\\\")\\n        throw new InvalidSelectorError(`Error while parsing selector \\\\`${selector}\\\\` - cannot use ${operator} in attribute with regular expression`);\\n      value = readRegularExpression();\\n    } else if (next() === `'` || next() === `\\\"`) {\\n      value = readQuotedString(next()).slice(1, -1);\\n      skipSpaces();\\n      if (next() === \\\"i\\\" || next() === \\\"I\\\") {\\n        caseSensitive = false;\\n        eat1();\\n      } else if (next() === \\\"s\\\" || next() === \\\"S\\\") {\\n        caseSensitive = true;\\n        eat1();\\n      }\\n    } else {\\n      value = \\\"\\\";\\n      while (!EOL && (isCSSNameChar(next()) || next() === \\\"+\\\" || next() === \\\".\\\"))\\n        value += eat1();\\n      if (value === \\\"true\\\") {\\n        value = true;\\n      } else if (value === \\\"false\\\") {\\n        value = false;\\n      } else {\\n        if (!allowUnquotedStrings) {\\n          value = +value;\\n          if (Number.isNaN(value))\\n            syntaxError(\\\"parsing attribute value\\\");\\n        }\\n      }\\n    }\\n    skipSpaces();\\n    if (next() !== \\\"]\\\")\\n      syntaxError(\\\"parsing attribute value\\\");\\n    eat1();\\n    if (operator !== \\\"=\\\" && typeof value !== \\\"string\\\")\\n      throw new InvalidSelectorError(`Error while parsing selector \\\\`${selector}\\\\` - cannot use ${operator} in attribute with non-string matching value - ${value}`);\\n    return { name: jsonPath.join(\\\".\\\"), jsonPath, op: operator, value, caseSensitive };\\n  }\\n  const result = {\\n    name: \\\"\\\",\\n    attributes: []\\n  };\\n  result.name = readIdentifier();\\n  skipSpaces();\\n  while (next() === \\\"[\\\") {\\n    result.attributes.push(readAttribute());\\n    skipSpaces();\\n  }\\n  if (!EOL)\\n    syntaxError(void 0);\\n  if (!result.name && !result.attributes.length)\\n    throw new InvalidSelectorError(`Error while parsing selector \\\\`${selector}\\\\` - selector cannot be empty`);\\n  return result;\\n}\\n\\n// packages/playwright-core/src/utils/isomorphic/stringUtils.ts\\nfunction escapeWithQuotes(text, char = \\\"'\\\") {\\n  const stringified = JSON.stringify(text);\\n  const escapedText = stringified.substring(1, stringified.length - 1).replace(/\\\\\\\\\\\"/g, '\\\"');\\n  if (char === \\\"'\\\")\\n    return char + escapedText.replace(/[']/g, \\\"\\\\\\\\'\\\") + char;\\n  if (char === '\\\"')\\n    return char + escapedText.replace(/[\\\"]/g, '\\\\\\\\\\\"') + char;\\n  if (char === \\\"`\\\")\\n    return char + escapedText.replace(/[`]/g, \\\"`\\\") + char;\\n  throw new Error(\\\"Invalid escape char\\\");\\n}\\nfunction toTitleCase(name) {\\n  return name.charAt(0).toUpperCase() + name.substring(1);\\n}\\nfunction toSnakeCase(name) {\\n  return name.replace(/([a-z0-9])([A-Z])/g, \\\"$1_$2\\\").replace(/([A-Z])([A-Z][a-z])/g, \\\"$1_$2\\\").toLowerCase();\\n}\\nfunction quoteCSSAttributeValue(text) {\\n  return `\\\"${text.replace(/[\\\"\\\\\\\\]/g, (char) => \\\"\\\\\\\\\\\" + char)}\\\"`;\\n}\\nvar normalizedWhitespaceCache;\\nfunction cacheNormalizedWhitespaces() {\\n  normalizedWhitespaceCache = /* @__PURE__ */ new Map();\\n}\\nfunction normalizeWhiteSpace(text) {\\n  let result = normalizedWhitespaceCache == null ? void 0 : normalizedWhitespaceCache.get(text);\\n  if (result === void 0) {\\n    result = text.replace(/[\\\\u200b\\\\u00ad]/g, \\\"\\\").trim().replace(/\\\\s+/g, \\\" \\\");\\n    normalizedWhitespaceCache == null ? void 0 : normalizedWhitespaceCache.set(text, result);\\n  }\\n  return result;\\n}\\nfunction normalizeEscapedRegexQuotes(source) {\\n  return source.replace(/(^|[^\\\\\\\\])(\\\\\\\\\\\\\\\\)*\\\\\\\\(['\\\"`])/g, \\\"$1$2$3\\\");\\n}\\nfunction escapeRegexForSelector(re) {\\n  if (re.unicode || re.unicodeSets)\\n    return String(re);\\n  return String(re).replace(/(^|[^\\\\\\\\])(\\\\\\\\\\\\\\\\)*([\\\"'`])/g, \\\"$1$2\\\\\\\\$3\\\").replace(/>>/g, \\\"\\\\\\\\>\\\\\\\\>\\\");\\n}\\nfunction escapeForTextSelector(text, exact) {\\n  if (typeof text !== \\\"string\\\")\\n    return escapeRegexForSelector(text);\\n  return `${JSON.stringify(text)}${exact ? \\\"s\\\" : \\\"i\\\"}`;\\n}\\nfunction escapeForAttributeSelector(value, exact) {\\n  if (typeof value !== \\\"string\\\")\\n    return escapeRegexForSelector(value);\\n  return `\\\"${value.replace(/\\\\\\\\/g, \\\"\\\\\\\\\\\\\\\\\\\").replace(/[\\\"]/g, '\\\\\\\\\\\"')}\\\"${exact ? \\\"s\\\" : \\\"i\\\"}`;\\n}\\nfunction trimString(input, cap, suffix = \\\"\\\") {\\n  if (input.length <= cap)\\n    return input;\\n  const chars = [...input];\\n  if (chars.length > cap)\\n    return chars.slice(0, cap - suffix.length).join(\\\"\\\") + suffix;\\n  return chars.join(\\\"\\\");\\n}\\nfunction trimStringWithEllipsis(input, cap) {\\n  return trimString(input, cap, \\\"\\\\u2026\\\");\\n}\\nfunction escapeRegExp(s) {\\n  return s.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, \\\"\\\\\\\\$&\\\");\\n}\\nfunction longestCommonSubstring(s1, s2) {\\n  const n = s1.length;\\n  const m = s2.length;\\n  let maxLen = 0;\\n  let endingIndex = 0;\\n  const dp = Array(n + 1).fill(null).map(() => Array(m + 1).fill(0));\\n  for (let i = 1; i <= n; i++) {\\n    for (let j = 1; j <= m; j++) {\\n      if (s1[i - 1] === s2[j - 1]) {\\n        dp[i][j] = dp[i - 1][j - 1] + 1;\\n        if (dp[i][j] > maxLen) {\\n          maxLen = dp[i][j];\\n          endingIndex = i;\\n        }\\n      }\\n    }\\n  }\\n  return s1.slice(endingIndex - maxLen, endingIndex);\\n}\\n\\n// packages/playwright-core/src/utils/isomorphic/locatorGenerators.ts\\nfunction asLocator(lang, selector, isFrameLocator = false) {\\n  return asLocators(lang, selector, isFrameLocator, 1)[0];\\n}\\nfunction asLocators(lang, selector, isFrameLocator = false, maxOutputSize = 20, preferredQuote) {\\n  try {\\n    return innerAsLocators(new generators[lang](preferredQuote), parseSelector(selector), isFrameLocator, maxOutputSize);\\n  } catch (e) {\\n    return [selector];\\n  }\\n}\\nfunction innerAsLocators(factory, parsed, isFrameLocator = false, maxOutputSize = 20) {\\n  const parts = [...parsed.parts];\\n  const tokens = [];\\n  let nextBase = isFrameLocator ? \\\"frame-locator\\\" : \\\"page\\\";\\n  for (let index = 0; index < parts.length; index++) {\\n    const part = parts[index];\\n    const base = nextBase;\\n    nextBase = \\\"locator\\\";\\n    if (part.name === \\\"internal:describe\\\")\\n      continue;\\n    if (part.name === \\\"nth\\\") {\\n      if (part.body === \\\"0\\\")\\n        tokens.push([factory.generateLocator(base, \\\"first\\\", \\\"\\\"), factory.generateLocator(base, \\\"nth\\\", \\\"0\\\")]);\\n      else if (part.body === \\\"-1\\\")\\n        tokens.push([factory.generateLocator(base, \\\"last\\\", \\\"\\\"), factory.generateLocator(base, \\\"nth\\\", \\\"-1\\\")]);\\n      else\\n        tokens.push([factory.generateLocator(base, \\\"nth\\\", part.body)]);\\n      continue;\\n    }\\n    if (part.name === \\\"visible\\\") {\\n      tokens.push([factory.generateLocator(base, \\\"visible\\\", part.body), factory.generateLocator(base, \\\"default\\\", `visible=${part.body}`)]);\\n      continue;\\n    }\\n    if (part.name === \\\"internal:text\\\") {\\n      const { exact, text } = detectExact(part.body);\\n      tokens.push([factory.generateLocator(base, \\\"text\\\", text, { exact })]);\\n      continue;\\n    }\\n    if (part.name === \\\"internal:has-text\\\") {\\n      const { exact, text } = detectExact(part.body);\\n      if (!exact) {\\n        tokens.push([factory.generateLocator(base, \\\"has-text\\\", text, { exact })]);\\n        continue;\\n      }\\n    }\\n    if (part.name === \\\"internal:has-not-text\\\") {\\n      const { exact, text } = detectExact(part.body);\\n      if (!exact) {\\n        tokens.push([factory.generateLocator(base, \\\"has-not-text\\\", text, { exact })]);\\n        continue;\\n      }\\n    }\\n    if (part.name === \\\"internal:has\\\") {\\n      const inners = innerAsLocators(factory, part.body.parsed, false, maxOutputSize);\\n      tokens.push(inners.map((inner) => factory.generateLocator(base, \\\"has\\\", inner)));\\n      continue;\\n    }\\n    if (part.name === \\\"internal:has-not\\\") {\\n      const inners = innerAsLocators(factory, part.body.parsed, false, maxOutputSize);\\n      tokens.push(inners.map((inner) => factory.generateLocator(base, \\\"hasNot\\\", inner)));\\n      continue;\\n    }\\n    if (part.name === \\\"internal:and\\\") {\\n      const inners = innerAsLocators(factory, part.body.parsed, false, maxOutputSize);\\n      tokens.push(inners.map((inner) => factory.generateLocator(base, \\\"and\\\", inner)));\\n      continue;\\n    }\\n    if (part.name === \\\"internal:or\\\") {\\n      const inners = innerAsLocators(factory, part.body.parsed, false, maxOutputSize);\\n      tokens.push(inners.map((inner) => factory.generateLocator(base, \\\"or\\\", inner)));\\n      continue;\\n    }\\n    if (part.name === \\\"internal:chain\\\") {\\n      const inners = innerAsLocators(factory, part.body.parsed, false, maxOutputSize);\\n      tokens.push(inners.map((inner) => factory.generateLocator(base, \\\"chain\\\", inner)));\\n      continue;\\n    }\\n    if (part.name === \\\"internal:label\\\") {\\n      const { exact, text } = detectExact(part.body);\\n      tokens.push([factory.generateLocator(base, \\\"label\\\", text, { exact })]);\\n      continue;\\n    }\\n    if (part.name === \\\"internal:role\\\") {\\n      const attrSelector = parseAttributeSelector(part.body, true);\\n      const options = { attrs: [] };\\n      for (const attr of attrSelector.attributes) {\\n        if (attr.name === \\\"name\\\") {\\n          options.exact = attr.caseSensitive;\\n          options.name = attr.value;\\n        } else {\\n          if (attr.name === \\\"level\\\" && typeof attr.value === \\\"string\\\")\\n            attr.value = +attr.value;\\n          options.attrs.push({ name: attr.name === \\\"include-hidden\\\" ? \\\"includeHidden\\\" : attr.name, value: attr.value });\\n        }\\n      }\\n      tokens.push([factory.generateLocator(base, \\\"role\\\", attrSelector.name, options)]);\\n      continue;\\n    }\\n    if (part.name === \\\"internal:testid\\\") {\\n      const attrSelector = parseAttributeSelector(part.body, true);\\n      const { value } = attrSelector.attributes[0];\\n      tokens.push([factory.generateLocator(base, \\\"test-id\\\", value)]);\\n      continue;\\n    }\\n    if (part.name === \\\"internal:attr\\\") {\\n      const attrSelector = parseAttributeSelector(part.body, true);\\n      const { name, value, caseSensitive } = attrSelector.attributes[0];\\n      const text = value;\\n      const exact = !!caseSensitive;\\n      if (name === \\\"placeholder\\\") {\\n        tokens.push([factory.generateLocator(base, \\\"placeholder\\\", text, { exact })]);\\n        continue;\\n      }\\n      if (name === \\\"alt\\\") {\\n        tokens.push([factory.generateLocator(base, \\\"alt\\\", text, { exact })]);\\n        continue;\\n      }\\n      if (name === \\\"title\\\") {\\n        tokens.push([factory.generateLocator(base, \\\"title\\\", text, { exact })]);\\n        continue;\\n      }\\n    }\\n    if (part.name === \\\"internal:control\\\" && part.body === \\\"enter-frame\\\") {\\n      const lastTokens = tokens[tokens.length - 1];\\n      const lastPart = parts[index - 1];\\n      const transformed = lastTokens.map((token) => factory.chainLocators([token, factory.generateLocator(base, \\\"frame\\\", \\\"\\\")]));\\n      if ([\\\"xpath\\\", \\\"css\\\"].includes(lastPart.name)) {\\n        transformed.push(\\n          factory.generateLocator(base, \\\"frame-locator\\\", stringifySelector({ parts: [lastPart] })),\\n          factory.generateLocator(base, \\\"frame-locator\\\", stringifySelector({ parts: [lastPart] }, true))\\n        );\\n      }\\n      lastTokens.splice(0, lastTokens.length, ...transformed);\\n      nextBase = \\\"frame-locator\\\";\\n      continue;\\n    }\\n    const nextPart = parts[index + 1];\\n    const selectorPart = stringifySelector({ parts: [part] });\\n    const locatorPart = factory.generateLocator(base, \\\"default\\\", selectorPart);\\n    if (nextPart && [\\\"internal:has-text\\\", \\\"internal:has-not-text\\\"].includes(nextPart.name)) {\\n      const { exact, text } = detectExact(nextPart.body);\\n      if (!exact) {\\n        const nextLocatorPart = factory.generateLocator(\\\"locator\\\", nextPart.name === \\\"internal:has-text\\\" ? \\\"has-text\\\" : \\\"has-not-text\\\", text, { exact });\\n        const options = {};\\n        if (nextPart.name === \\\"internal:has-text\\\")\\n          options.hasText = text;\\n        else\\n          options.hasNotText = text;\\n        const combinedPart = factory.generateLocator(base, \\\"default\\\", selectorPart, options);\\n        tokens.push([factory.chainLocators([locatorPart, nextLocatorPart]), combinedPart]);\\n        index++;\\n        continue;\\n      }\\n    }\\n    let locatorPartWithEngine;\\n    if ([\\\"xpath\\\", \\\"css\\\"].includes(part.name)) {\\n      const selectorPart2 = stringifySelector(\\n        { parts: [part] },\\n        /* forceEngineName */\\n        true\\n      );\\n      locatorPartWithEngine = factory.generateLocator(base, \\\"default\\\", selectorPart2);\\n    }\\n    tokens.push([locatorPart, locatorPartWithEngine].filter(Boolean));\\n  }\\n  return combineTokens(factory, tokens, maxOutputSize);\\n}\\nfunction combineTokens(factory, tokens, maxOutputSize) {\\n  const currentTokens = tokens.map(() => \\\"\\\");\\n  const result = [];\\n  const visit = (index) => {\\n    if (index === tokens.length) {\\n      result.push(factory.chainLocators(currentTokens));\\n      return result.length < maxOutputSize;\\n    }\\n    for (const taken of tokens[index]) {\\n      currentTokens[index] = taken;\\n      if (!visit(index + 1))\\n        return false;\\n    }\\n    return true;\\n  };\\n  visit(0);\\n  return result;\\n}\\nfunction detectExact(text) {\\n  let exact = false;\\n  const match = text.match(/^\\\\/(.*)\\\\/([igm]*)$/);\\n  if (match)\\n    return { text: new RegExp(match[1], match[2]) };\\n  if (text.endsWith('\\\"')) {\\n    text = JSON.parse(text);\\n    exact = true;\\n  } else if (text.endsWith('\\\"s')) {\\n    text = JSON.parse(text.substring(0, text.length - 1));\\n    exact = true;\\n  } else if (text.endsWith('\\\"i')) {\\n    text = JSON.parse(text.substring(0, text.length - 1));\\n    exact = false;\\n  }\\n  return { exact, text };\\n}\\nvar JavaScriptLocatorFactory = class {\\n  constructor(preferredQuote) {\\n    this.preferredQuote = preferredQuote;\\n  }\\n  generateLocator(base, kind, body, options = {}) {\\n    switch (kind) {\\n      case \\\"default\\\":\\n        if (options.hasText !== void 0)\\n          return `locator(${this.quote(body)}, { hasText: ${this.toHasText(options.hasText)} })`;\\n        if (options.hasNotText !== void 0)\\n          return `locator(${this.quote(body)}, { hasNotText: ${this.toHasText(options.hasNotText)} })`;\\n        return `locator(${this.quote(body)})`;\\n      case \\\"frame-locator\\\":\\n        return `frameLocator(${this.quote(body)})`;\\n      case \\\"frame\\\":\\n        return `contentFrame()`;\\n      case \\\"nth\\\":\\n        return `nth(${body})`;\\n      case \\\"first\\\":\\n        return `first()`;\\n      case \\\"last\\\":\\n        return `last()`;\\n      case \\\"visible\\\":\\n        return `filter({ visible: ${body === \\\"true\\\" ? \\\"true\\\" : \\\"false\\\"} })`;\\n      case \\\"role\\\":\\n        const attrs = [];\\n        if (isRegExp(options.name)) {\\n          attrs.push(`name: ${this.regexToSourceString(options.name)}`);\\n        } else if (typeof options.name === \\\"string\\\") {\\n          attrs.push(`name: ${this.quote(options.name)}`);\\n          if (options.exact)\\n            attrs.push(`exact: true`);\\n        }\\n        for (const { name, value } of options.attrs)\\n          attrs.push(`${name}: ${typeof value === \\\"string\\\" ? this.quote(value) : value}`);\\n        const attrString = attrs.length ? `, { ${attrs.join(\\\", \\\")} }` : \\\"\\\";\\n        return `getByRole(${this.quote(body)}${attrString})`;\\n      case \\\"has-text\\\":\\n        return `filter({ hasText: ${this.toHasText(body)} })`;\\n      case \\\"has-not-text\\\":\\n        return `filter({ hasNotText: ${this.toHasText(body)} })`;\\n      case \\\"has\\\":\\n        return `filter({ has: ${body} })`;\\n      case \\\"hasNot\\\":\\n        return `filter({ hasNot: ${body} })`;\\n      case \\\"and\\\":\\n        return `and(${body})`;\\n      case \\\"or\\\":\\n        return `or(${body})`;\\n      case \\\"chain\\\":\\n        return `locator(${body})`;\\n      case \\\"test-id\\\":\\n        return `getByTestId(${this.toTestIdValue(body)})`;\\n      case \\\"text\\\":\\n        return this.toCallWithExact(\\\"getByText\\\", body, !!options.exact);\\n      case \\\"alt\\\":\\n        return this.toCallWithExact(\\\"getByAltText\\\", body, !!options.exact);\\n      case \\\"placeholder\\\":\\n        return this.toCallWithExact(\\\"getByPlaceholder\\\", body, !!options.exact);\\n      case \\\"label\\\":\\n        return this.toCallWithExact(\\\"getByLabel\\\", body, !!options.exact);\\n      case \\\"title\\\":\\n        return this.toCallWithExact(\\\"getByTitle\\\", body, !!options.exact);\\n      default:\\n        throw new Error(\\\"Unknown selector kind \\\" + kind);\\n    }\\n  }\\n  chainLocators(locators) {\\n    return locators.join(\\\".\\\");\\n  }\\n  regexToSourceString(re) {\\n    return normalizeEscapedRegexQuotes(String(re));\\n  }\\n  toCallWithExact(method, body, exact) {\\n    if (isRegExp(body))\\n      return `${method}(${this.regexToSourceString(body)})`;\\n    return exact ? `${method}(${this.quote(body)}, { exact: true })` : `${method}(${this.quote(body)})`;\\n  }\\n  toHasText(body) {\\n    if (isRegExp(body))\\n      return this.regexToSourceString(body);\\n    return this.quote(body);\\n  }\\n  toTestIdValue(value) {\\n    if (isRegExp(value))\\n      return this.regexToSourceString(value);\\n    return this.quote(value);\\n  }\\n  quote(text) {\\n    var _a;\\n    return escapeWithQuotes(text, (_a = this.preferredQuote) != null ? _a : \\\"'\\\");\\n  }\\n};\\nvar PythonLocatorFactory = class {\\n  generateLocator(base, kind, body, options = {}) {\\n    switch (kind) {\\n      case \\\"default\\\":\\n        if (options.hasText !== void 0)\\n          return `locator(${this.quote(body)}, has_text=${this.toHasText(options.hasText)})`;\\n        if (options.hasNotText !== void 0)\\n          return `locator(${this.quote(body)}, has_not_text=${this.toHasText(options.hasNotText)})`;\\n        return `locator(${this.quote(body)})`;\\n      case \\\"frame-locator\\\":\\n        return `frame_locator(${this.quote(body)})`;\\n      case \\\"frame\\\":\\n        return `content_frame`;\\n      case \\\"nth\\\":\\n        return `nth(${body})`;\\n      case \\\"first\\\":\\n        return `first`;\\n      case \\\"last\\\":\\n        return `last`;\\n      case \\\"visible\\\":\\n        return `filter(visible=${body === \\\"true\\\" ? \\\"True\\\" : \\\"False\\\"})`;\\n      case \\\"role\\\":\\n        const attrs = [];\\n        if (isRegExp(options.name)) {\\n          attrs.push(`name=${this.regexToString(options.name)}`);\\n        } else if (typeof options.name === \\\"string\\\") {\\n          attrs.push(`name=${this.quote(options.name)}`);\\n          if (options.exact)\\n            attrs.push(`exact=True`);\\n        }\\n        for (const { name, value } of options.attrs) {\\n          let valueString = typeof value === \\\"string\\\" ? this.quote(value) : value;\\n          if (typeof value === \\\"boolean\\\")\\n            valueString = value ? \\\"True\\\" : \\\"False\\\";\\n          attrs.push(`${toSnakeCase(name)}=${valueString}`);\\n        }\\n        const attrString = attrs.length ? `, ${attrs.join(\\\", \\\")}` : \\\"\\\";\\n        return `get_by_role(${this.quote(body)}${attrString})`;\\n      case \\\"has-text\\\":\\n        return `filter(has_text=${this.toHasText(body)})`;\\n      case \\\"has-not-text\\\":\\n        return `filter(has_not_text=${this.toHasText(body)})`;\\n      case \\\"has\\\":\\n        return `filter(has=${body})`;\\n      case \\\"hasNot\\\":\\n        return `filter(has_not=${body})`;\\n      case \\\"and\\\":\\n        return `and_(${body})`;\\n      case \\\"or\\\":\\n        return `or_(${body})`;\\n      case \\\"chain\\\":\\n        return `locator(${body})`;\\n      case \\\"test-id\\\":\\n        return `get_by_test_id(${this.toTestIdValue(body)})`;\\n      case \\\"text\\\":\\n        return this.toCallWithExact(\\\"get_by_text\\\", body, !!options.exact);\\n      case \\\"alt\\\":\\n        return this.toCallWithExact(\\\"get_by_alt_text\\\", body, !!options.exact);\\n      case \\\"placeholder\\\":\\n        return this.toCallWithExact(\\\"get_by_placeholder\\\", body, !!options.exact);\\n      case \\\"label\\\":\\n        return this.toCallWithExact(\\\"get_by_label\\\", body, !!options.exact);\\n      case \\\"title\\\":\\n        return this.toCallWithExact(\\\"get_by_title\\\", body, !!options.exact);\\n      default:\\n        throw new Error(\\\"Unknown selector kind \\\" + kind);\\n    }\\n  }\\n  chainLocators(locators) {\\n    return locators.join(\\\".\\\");\\n  }\\n  regexToString(body) {\\n    const suffix = body.flags.includes(\\\"i\\\") ? \\\", re.IGNORECASE\\\" : \\\"\\\";\\n    return `re.compile(r\\\"${normalizeEscapedRegexQuotes(body.source).replace(/\\\\\\\\\\\\//, \\\"/\\\").replace(/\\\"/g, '\\\\\\\\\\\"')}\\\"${suffix})`;\\n  }\\n  toCallWithExact(method, body, exact) {\\n    if (isRegExp(body))\\n      return `${method}(${this.regexToString(body)})`;\\n    if (exact)\\n      return `${method}(${this.quote(body)}, exact=True)`;\\n    return `${method}(${this.quote(body)})`;\\n  }\\n  toHasText(body) {\\n    if (isRegExp(body))\\n      return this.regexToString(body);\\n    return `${this.quote(body)}`;\\n  }\\n  toTestIdValue(value) {\\n    if (isRegExp(value))\\n      return this.regexToString(value);\\n    return this.quote(value);\\n  }\\n  quote(text) {\\n    return escapeWithQuotes(text, '\\\"');\\n  }\\n};\\nvar JavaLocatorFactory = class {\\n  generateLocator(base, kind, body, options = {}) {\\n    let clazz;\\n    switch (base) {\\n      case \\\"page\\\":\\n        clazz = \\\"Page\\\";\\n        break;\\n      case \\\"frame-locator\\\":\\n        clazz = \\\"FrameLocator\\\";\\n        break;\\n      case \\\"locator\\\":\\n        clazz = \\\"Locator\\\";\\n        break;\\n    }\\n    switch (kind) {\\n      case \\\"default\\\":\\n        if (options.hasText !== void 0)\\n          return `locator(${this.quote(body)}, new ${clazz}.LocatorOptions().setHasText(${this.toHasText(options.hasText)}))`;\\n        if (options.hasNotText !== void 0)\\n          return `locator(${this.quote(body)}, new ${clazz}.LocatorOptions().setHasNotText(${this.toHasText(options.hasNotText)}))`;\\n        return `locator(${this.quote(body)})`;\\n      case \\\"frame-locator\\\":\\n        return `frameLocator(${this.quote(body)})`;\\n      case \\\"frame\\\":\\n        return `contentFrame()`;\\n      case \\\"nth\\\":\\n        return `nth(${body})`;\\n      case \\\"first\\\":\\n        return `first()`;\\n      case \\\"last\\\":\\n        return `last()`;\\n      case \\\"visible\\\":\\n        return `filter(new ${clazz}.FilterOptions().setVisible(${body === \\\"true\\\" ? \\\"true\\\" : \\\"false\\\"}))`;\\n      case \\\"role\\\":\\n        const attrs = [];\\n        if (isRegExp(options.name)) {\\n          attrs.push(`.setName(${this.regexToString(options.name)})`);\\n        } else if (typeof options.name === \\\"string\\\") {\\n          attrs.push(`.setName(${this.quote(options.name)})`);\\n          if (options.exact)\\n            attrs.push(`.setExact(true)`);\\n        }\\n        for (const { name, value } of options.attrs)\\n          attrs.push(`.set${toTitleCase(name)}(${typeof value === \\\"string\\\" ? this.quote(value) : value})`);\\n        const attrString = attrs.length ? `, new ${clazz}.GetByRoleOptions()${attrs.join(\\\"\\\")}` : \\\"\\\";\\n        return `getByRole(AriaRole.${toSnakeCase(body).toUpperCase()}${attrString})`;\\n      case \\\"has-text\\\":\\n        return `filter(new ${clazz}.FilterOptions().setHasText(${this.toHasText(body)}))`;\\n      case \\\"has-not-text\\\":\\n        return `filter(new ${clazz}.FilterOptions().setHasNotText(${this.toHasText(body)}))`;\\n      case \\\"has\\\":\\n        return `filter(new ${clazz}.FilterOptions().setHas(${body}))`;\\n      case \\\"hasNot\\\":\\n        return `filter(new ${clazz}.FilterOptions().setHasNot(${body}))`;\\n      case \\\"and\\\":\\n        return `and(${body})`;\\n      case \\\"or\\\":\\n        return `or(${body})`;\\n      case \\\"chain\\\":\\n        return `locator(${body})`;\\n      case \\\"test-id\\\":\\n        return `getByTestId(${this.toTestIdValue(body)})`;\\n      case \\\"text\\\":\\n        return this.toCallWithExact(clazz, \\\"getByText\\\", body, !!options.exact);\\n      case \\\"alt\\\":\\n        return this.toCallWithExact(clazz, \\\"getByAltText\\\", body, !!options.exact);\\n      case \\\"placeholder\\\":\\n        return this.toCallWithExact(clazz, \\\"getByPlaceholder\\\", body, !!options.exact);\\n      case \\\"label\\\":\\n        return this.toCallWithExact(clazz, \\\"getByLabel\\\", body, !!options.exact);\\n      case \\\"title\\\":\\n        return this.toCallWithExact(clazz, \\\"getByTitle\\\", body, !!options.exact);\\n      default:\\n        throw new Error(\\\"Unknown selector kind \\\" + kind);\\n    }\\n  }\\n  chainLocators(locators) {\\n    return locators.join(\\\".\\\");\\n  }\\n  regexToString(body) {\\n    const suffix = body.flags.includes(\\\"i\\\") ? \\\", Pattern.CASE_INSENSITIVE\\\" : \\\"\\\";\\n    return `Pattern.compile(${this.quote(normalizeEscapedRegexQuotes(body.source))}${suffix})`;\\n  }\\n  toCallWithExact(clazz, method, body, exact) {\\n    if (isRegExp(body))\\n      return `${method}(${this.regexToString(body)})`;\\n    if (exact)\\n      return `${method}(${this.quote(body)}, new ${clazz}.${toTitleCase(method)}Options().setExact(true))`;\\n    return `${method}(${this.quote(body)})`;\\n  }\\n  toHasText(body) {\\n    if (isRegExp(body))\\n      return this.regexToString(body);\\n    return this.quote(body);\\n  }\\n  toTestIdValue(value) {\\n    if (isRegExp(value))\\n      return this.regexToString(value);\\n    return this.quote(value);\\n  }\\n  quote(text) {\\n    return escapeWithQuotes(text, '\\\"');\\n  }\\n};\\nvar CSharpLocatorFactory = class {\\n  generateLocator(base, kind, body, options = {}) {\\n    switch (kind) {\\n      case \\\"default\\\":\\n        if (options.hasText !== void 0)\\n          return `Locator(${this.quote(body)}, new() { ${this.toHasText(options.hasText)} })`;\\n        if (options.hasNotText !== void 0)\\n          return `Locator(${this.quote(body)}, new() { ${this.toHasNotText(options.hasNotText)} })`;\\n        return `Locator(${this.quote(body)})`;\\n      case \\\"frame-locator\\\":\\n        return `FrameLocator(${this.quote(body)})`;\\n      case \\\"frame\\\":\\n        return `ContentFrame`;\\n      case \\\"nth\\\":\\n        return `Nth(${body})`;\\n      case \\\"first\\\":\\n        return `First`;\\n      case \\\"last\\\":\\n        return `Last`;\\n      case \\\"visible\\\":\\n        return `Filter(new() { Visible = ${body === \\\"true\\\" ? \\\"true\\\" : \\\"false\\\"} })`;\\n      case \\\"role\\\":\\n        const attrs = [];\\n        if (isRegExp(options.name)) {\\n          attrs.push(`NameRegex = ${this.regexToString(options.name)}`);\\n        } else if (typeof options.name === \\\"string\\\") {\\n          attrs.push(`Name = ${this.quote(options.name)}`);\\n          if (options.exact)\\n            attrs.push(`Exact = true`);\\n        }\\n        for (const { name, value } of options.attrs)\\n          attrs.push(`${toTitleCase(name)} = ${typeof value === \\\"string\\\" ? this.quote(value) : value}`);\\n        const attrString = attrs.length ? `, new() { ${attrs.join(\\\", \\\")} }` : \\\"\\\";\\n        return `GetByRole(AriaRole.${toTitleCase(body)}${attrString})`;\\n      case \\\"has-text\\\":\\n        return `Filter(new() { ${this.toHasText(body)} })`;\\n      case \\\"has-not-text\\\":\\n        return `Filter(new() { ${this.toHasNotText(body)} })`;\\n      case \\\"has\\\":\\n        return `Filter(new() { Has = ${body} })`;\\n      case \\\"hasNot\\\":\\n        return `Filter(new() { HasNot = ${body} })`;\\n      case \\\"and\\\":\\n        return `And(${body})`;\\n      case \\\"or\\\":\\n        return `Or(${body})`;\\n      case \\\"chain\\\":\\n        return `Locator(${body})`;\\n      case \\\"test-id\\\":\\n        return `GetByTestId(${this.toTestIdValue(body)})`;\\n      case \\\"text\\\":\\n        return this.toCallWithExact(\\\"GetByText\\\", body, !!options.exact);\\n      case \\\"alt\\\":\\n        return this.toCallWithExact(\\\"GetByAltText\\\", body, !!options.exact);\\n      case \\\"placeholder\\\":\\n        return this.toCallWithExact(\\\"GetByPlaceholder\\\", body, !!options.exact);\\n      case \\\"label\\\":\\n        return this.toCallWithExact(\\\"GetByLabel\\\", body, !!options.exact);\\n      case \\\"title\\\":\\n        return this.toCallWithExact(\\\"GetByTitle\\\", body, !!options.exact);\\n      default:\\n        throw new Error(\\\"Unknown selector kind \\\" + kind);\\n    }\\n  }\\n  chainLocators(locators) {\\n    return locators.join(\\\".\\\");\\n  }\\n  regexToString(body) {\\n    const suffix = body.flags.includes(\\\"i\\\") ? \\\", RegexOptions.IgnoreCase\\\" : \\\"\\\";\\n    return `new Regex(${this.quote(normalizeEscapedRegexQuotes(body.source))}${suffix})`;\\n  }\\n  toCallWithExact(method, body, exact) {\\n    if (isRegExp(body))\\n      return `${method}(${this.regexToString(body)})`;\\n    if (exact)\\n      return `${method}(${this.quote(body)}, new() { Exact = true })`;\\n    return `${method}(${this.quote(body)})`;\\n  }\\n  toHasText(body) {\\n    if (isRegExp(body))\\n      return `HasTextRegex = ${this.regexToString(body)}`;\\n    return `HasText = ${this.quote(body)}`;\\n  }\\n  toTestIdValue(value) {\\n    if (isRegExp(value))\\n      return this.regexToString(value);\\n    return this.quote(value);\\n  }\\n  toHasNotText(body) {\\n    if (isRegExp(body))\\n      return `HasNotTextRegex = ${this.regexToString(body)}`;\\n    return `HasNotText = ${this.quote(body)}`;\\n  }\\n  quote(text) {\\n    return escapeWithQuotes(text, '\\\"');\\n  }\\n};\\nvar JsonlLocatorFactory = class {\\n  generateLocator(base, kind, body, options = {}) {\\n    return JSON.stringify({\\n      kind,\\n      body,\\n      options\\n    });\\n  }\\n  chainLocators(locators) {\\n    const objects = locators.map((l) => JSON.parse(l));\\n    for (let i = 0; i < objects.length - 1; ++i)\\n      objects[i].next = objects[i + 1];\\n    return JSON.stringify(objects[0]);\\n  }\\n};\\nvar generators = {\\n  javascript: JavaScriptLocatorFactory,\\n  python: PythonLocatorFactory,\\n  java: JavaLocatorFactory,\\n  csharp: CSharpLocatorFactory,\\n  jsonl: JsonlLocatorFactory\\n};\\nfunction isRegExp(obj) {\\n  return obj instanceof RegExp;\\n}\\n\\n// packages/injected/src/domUtils.ts\\nvar globalOptions = {};\\nfunction setGlobalOptions(options) {\\n  globalOptions = options;\\n}\\nfunction getGlobalOptions() {\\n  return globalOptions;\\n}\\nfunction isInsideScope(scope, element) {\\n  while (element) {\\n    if (scope.contains(element))\\n      return true;\\n    element = enclosingShadowHost(element);\\n  }\\n  return false;\\n}\\nfunction parentElementOrShadowHost(element) {\\n  if (element.parentElement)\\n    return element.parentElement;\\n  if (!element.parentNode)\\n    return;\\n  if (element.parentNode.nodeType === 11 && element.parentNode.host)\\n    return element.parentNode.host;\\n}\\nfunction enclosingShadowRootOrDocument(element) {\\n  let node = element;\\n  while (node.parentNode)\\n    node = node.parentNode;\\n  if (node.nodeType === 11 || node.nodeType === 9)\\n    return node;\\n}\\nfunction enclosingShadowHost(element) {\\n  while (element.parentElement)\\n    element = element.parentElement;\\n  return parentElementOrShadowHost(element);\\n}\\nfunction closestCrossShadow(element, css, scope) {\\n  while (element) {\\n    const closest = element.closest(css);\\n    if (scope && closest !== scope && (closest == null ? void 0 : closest.contains(scope)))\\n      return;\\n    if (closest)\\n      return closest;\\n    element = enclosingShadowHost(element);\\n  }\\n}\\nfunction getElementComputedStyle(element, pseudo) {\\n  return element.ownerDocument && element.ownerDocument.defaultView ? element.ownerDocument.defaultView.getComputedStyle(element, pseudo) : void 0;\\n}\\nfunction isElementStyleVisibilityVisible(element, style) {\\n  style = style != null ? style : getElementComputedStyle(element);\\n  if (!style)\\n    return true;\\n  if (Element.prototype.checkVisibility && globalOptions.browserNameForWorkarounds !== \\\"webkit\\\") {\\n    if (!element.checkVisibility())\\n      return false;\\n  } else {\\n    const detailsOrSummary = element.closest(\\\"details,summary\\\");\\n    if (detailsOrSummary !== element && (detailsOrSummary == null ? void 0 : detailsOrSummary.nodeName) === \\\"DETAILS\\\" && !detailsOrSummary.open)\\n      return false;\\n  }\\n  if (style.visibility !== \\\"visible\\\")\\n    return false;\\n  return true;\\n}\\nfunction box(element) {\\n  const style = getElementComputedStyle(element);\\n  if (!style)\\n    return { visible: true };\\n  if (style.display === \\\"contents\\\") {\\n    for (let child = element.firstChild; child; child = child.nextSibling) {\\n      if (child.nodeType === 1 && isElementVisible(child))\\n        return { visible: true, style };\\n      if (child.nodeType === 3 && isVisibleTextNode(child))\\n        return { visible: true, style };\\n    }\\n    return { visible: false, style };\\n  }\\n  if (!isElementStyleVisibilityVisible(element, style))\\n    return { style, visible: false };\\n  const rect = element.getBoundingClientRect();\\n  return { rect, style, visible: rect.width > 0 && rect.height > 0 };\\n}\\nfunction isElementVisible(element) {\\n  return box(element).visible;\\n}\\nfunction isVisibleTextNode(node) {\\n  const range = node.ownerDocument.createRange();\\n  range.selectNode(node);\\n  const rect = range.getBoundingClientRect();\\n  return rect.width > 0 && rect.height > 0;\\n}\\nfunction elementSafeTagName(element) {\\n  if (element instanceof HTMLFormElement)\\n    return \\\"FORM\\\";\\n  return element.tagName.toUpperCase();\\n}\\n\\n// packages/injected/src/roleUtils.ts\\nfunction hasExplicitAccessibleName(e) {\\n  return e.hasAttribute(\\\"aria-label\\\") || e.hasAttribute(\\\"aria-labelledby\\\");\\n}\\nvar kAncestorPreventingLandmark = \\\"article:not([role]), aside:not([role]), main:not([role]), nav:not([role]), section:not([role]), [role=article], [role=complementary], [role=main], [role=navigation], [role=region]\\\";\\nvar kGlobalAriaAttributes = [\\n  [\\\"aria-atomic\\\", void 0],\\n  [\\\"aria-busy\\\", void 0],\\n  [\\\"aria-controls\\\", void 0],\\n  [\\\"aria-current\\\", void 0],\\n  [\\\"aria-describedby\\\", void 0],\\n  [\\\"aria-details\\\", void 0],\\n  // Global use deprecated in ARIA 1.2\\n  // ['aria-disabled', undefined],\\n  [\\\"aria-dropeffect\\\", void 0],\\n  // Global use deprecated in ARIA 1.2\\n  // ['aria-errormessage', undefined],\\n  [\\\"aria-flowto\\\", void 0],\\n  [\\\"aria-grabbed\\\", void 0],\\n  // Global use deprecated in ARIA 1.2\\n  // ['aria-haspopup', undefined],\\n  [\\\"aria-hidden\\\", void 0],\\n  // Global use deprecated in ARIA 1.2\\n  // ['aria-invalid', undefined],\\n  [\\\"aria-keyshortcuts\\\", void 0],\\n  [\\\"aria-label\\\", [\\\"caption\\\", \\\"code\\\", \\\"deletion\\\", \\\"emphasis\\\", \\\"generic\\\", \\\"insertion\\\", \\\"paragraph\\\", \\\"presentation\\\", \\\"strong\\\", \\\"subscript\\\", \\\"superscript\\\"]],\\n  [\\\"aria-labelledby\\\", [\\\"caption\\\", \\\"code\\\", \\\"deletion\\\", \\\"emphasis\\\", \\\"generic\\\", \\\"insertion\\\", \\\"paragraph\\\", \\\"presentation\\\", \\\"strong\\\", \\\"subscript\\\", \\\"superscript\\\"]],\\n  [\\\"aria-live\\\", void 0],\\n  [\\\"aria-owns\\\", void 0],\\n  [\\\"aria-relevant\\\", void 0],\\n  [\\\"aria-roledescription\\\", [\\\"generic\\\"]]\\n];\\nfunction hasGlobalAriaAttribute(element, forRole) {\\n  return kGlobalAriaAttributes.some(([attr, prohibited]) => {\\n    return !(prohibited == null ? void 0 : prohibited.includes(forRole || \\\"\\\")) && element.hasAttribute(attr);\\n  });\\n}\\nfunction hasTabIndex(element) {\\n  return !Number.isNaN(Number(String(element.getAttribute(\\\"tabindex\\\"))));\\n}\\nfunction isFocusable(element) {\\n  return !isNativelyDisabled(element) && (isNativelyFocusable(element) || hasTabIndex(element));\\n}\\nfunction isNativelyFocusable(element) {\\n  const tagName = elementSafeTagName(element);\\n  if ([\\\"BUTTON\\\", \\\"DETAILS\\\", \\\"SELECT\\\", \\\"TEXTAREA\\\"].includes(tagName))\\n    return true;\\n  if (tagName === \\\"A\\\" || tagName === \\\"AREA\\\")\\n    return element.hasAttribute(\\\"href\\\");\\n  if (tagName === \\\"INPUT\\\")\\n    return !element.hidden;\\n  return false;\\n}\\nvar kImplicitRoleByTagName = {\\n  \\\"A\\\": (e) => {\\n    return e.hasAttribute(\\\"href\\\") ? \\\"link\\\" : null;\\n  },\\n  \\\"AREA\\\": (e) => {\\n    return e.hasAttribute(\\\"href\\\") ? \\\"link\\\" : null;\\n  },\\n  \\\"ARTICLE\\\": () => \\\"article\\\",\\n  \\\"ASIDE\\\": () => \\\"complementary\\\",\\n  \\\"BLOCKQUOTE\\\": () => \\\"blockquote\\\",\\n  \\\"BUTTON\\\": () => \\\"button\\\",\\n  \\\"CAPTION\\\": () => \\\"caption\\\",\\n  \\\"CODE\\\": () => \\\"code\\\",\\n  \\\"DATALIST\\\": () => \\\"listbox\\\",\\n  \\\"DD\\\": () => \\\"definition\\\",\\n  \\\"DEL\\\": () => \\\"deletion\\\",\\n  \\\"DETAILS\\\": () => \\\"group\\\",\\n  \\\"DFN\\\": () => \\\"term\\\",\\n  \\\"DIALOG\\\": () => \\\"dialog\\\",\\n  \\\"DT\\\": () => \\\"term\\\",\\n  \\\"EM\\\": () => \\\"emphasis\\\",\\n  \\\"FIELDSET\\\": () => \\\"group\\\",\\n  \\\"FIGURE\\\": () => \\\"figure\\\",\\n  \\\"FOOTER\\\": (e) => closestCrossShadow(e, kAncestorPreventingLandmark) ? null : \\\"contentinfo\\\",\\n  \\\"FORM\\\": (e) => hasExplicitAccessibleName(e) ? \\\"form\\\" : null,\\n  \\\"H1\\\": () => \\\"heading\\\",\\n  \\\"H2\\\": () => \\\"heading\\\",\\n  \\\"H3\\\": () => \\\"heading\\\",\\n  \\\"H4\\\": () => \\\"heading\\\",\\n  \\\"H5\\\": () => \\\"heading\\\",\\n  \\\"H6\\\": () => \\\"heading\\\",\\n  \\\"HEADER\\\": (e) => closestCrossShadow(e, kAncestorPreventingLandmark) ? null : \\\"banner\\\",\\n  \\\"HR\\\": () => \\\"separator\\\",\\n  \\\"HTML\\\": () => \\\"document\\\",\\n  \\\"IMG\\\": (e) => e.getAttribute(\\\"alt\\\") === \\\"\\\" && !e.getAttribute(\\\"title\\\") && !hasGlobalAriaAttribute(e) && !hasTabIndex(e) ? \\\"presentation\\\" : \\\"img\\\",\\n  \\\"INPUT\\\": (e) => {\\n    const type = e.type.toLowerCase();\\n    if (type === \\\"search\\\")\\n      return e.hasAttribute(\\\"list\\\") ? \\\"combobox\\\" : \\\"searchbox\\\";\\n    if ([\\\"email\\\", \\\"tel\\\", \\\"text\\\", \\\"url\\\", \\\"\\\"].includes(type)) {\\n      const list = getIdRefs(e, e.getAttribute(\\\"list\\\"))[0];\\n      return list && elementSafeTagName(list) === \\\"DATALIST\\\" ? \\\"combobox\\\" : \\\"textbox\\\";\\n    }\\n    if (type === \\\"hidden\\\")\\n      return null;\\n    if (type === \\\"file\\\" && !getGlobalOptions().inputFileRoleTextbox)\\n      return \\\"button\\\";\\n    return inputTypeToRole[type] || \\\"textbox\\\";\\n  },\\n  \\\"INS\\\": () => \\\"insertion\\\",\\n  \\\"LI\\\": () => \\\"listitem\\\",\\n  \\\"MAIN\\\": () => \\\"main\\\",\\n  \\\"MARK\\\": () => \\\"mark\\\",\\n  \\\"MATH\\\": () => \\\"math\\\",\\n  \\\"MENU\\\": () => \\\"list\\\",\\n  \\\"METER\\\": () => \\\"meter\\\",\\n  \\\"NAV\\\": () => \\\"navigation\\\",\\n  \\\"OL\\\": () => \\\"list\\\",\\n  \\\"OPTGROUP\\\": () => \\\"group\\\",\\n  \\\"OPTION\\\": () => \\\"option\\\",\\n  \\\"OUTPUT\\\": () => \\\"status\\\",\\n  \\\"P\\\": () => \\\"paragraph\\\",\\n  \\\"PROGRESS\\\": () => \\\"progressbar\\\",\\n  \\\"SECTION\\\": (e) => hasExplicitAccessibleName(e) ? \\\"region\\\" : null,\\n  \\\"SELECT\\\": (e) => e.hasAttribute(\\\"multiple\\\") || e.size > 1 ? \\\"listbox\\\" : \\\"combobox\\\",\\n  \\\"STRONG\\\": () => \\\"strong\\\",\\n  \\\"SUB\\\": () => \\\"subscript\\\",\\n  \\\"SUP\\\": () => \\\"superscript\\\",\\n  // For <svg> we default to Chrome behavior:\\n  // - Chrome reports 'img'.\\n  // - Firefox reports 'diagram' that is not in official ARIA spec yet.\\n  // - Safari reports 'no role', but still computes accessible name.\\n  \\\"SVG\\\": () => \\\"img\\\",\\n  \\\"TABLE\\\": () => \\\"table\\\",\\n  \\\"TBODY\\\": () => \\\"rowgroup\\\",\\n  \\\"TD\\\": (e) => {\\n    const table = closestCrossShadow(e, \\\"table\\\");\\n    const role = table ? getExplicitAriaRole(table) : \\\"\\\";\\n    return role === \\\"grid\\\" || role === \\\"treegrid\\\" ? \\\"gridcell\\\" : \\\"cell\\\";\\n  },\\n  \\\"TEXTAREA\\\": () => \\\"textbox\\\",\\n  \\\"TFOOT\\\": () => \\\"rowgroup\\\",\\n  \\\"TH\\\": (e) => {\\n    if (e.getAttribute(\\\"scope\\\") === \\\"col\\\")\\n      return \\\"columnheader\\\";\\n    if (e.getAttribute(\\\"scope\\\") === \\\"row\\\")\\n      return \\\"rowheader\\\";\\n    const table = closestCrossShadow(e, \\\"table\\\");\\n    const role = table ? getExplicitAriaRole(table) : \\\"\\\";\\n    return role === \\\"grid\\\" || role === \\\"treegrid\\\" ? \\\"gridcell\\\" : \\\"cell\\\";\\n  },\\n  \\\"THEAD\\\": () => \\\"rowgroup\\\",\\n  \\\"TIME\\\": () => \\\"time\\\",\\n  \\\"TR\\\": () => \\\"row\\\",\\n  \\\"UL\\\": () => \\\"list\\\"\\n};\\nvar kPresentationInheritanceParents = {\\n  \\\"DD\\\": [\\\"DL\\\", \\\"DIV\\\"],\\n  \\\"DIV\\\": [\\\"DL\\\"],\\n  \\\"DT\\\": [\\\"DL\\\", \\\"DIV\\\"],\\n  \\\"LI\\\": [\\\"OL\\\", \\\"UL\\\"],\\n  \\\"TBODY\\\": [\\\"TABLE\\\"],\\n  \\\"TD\\\": [\\\"TR\\\"],\\n  \\\"TFOOT\\\": [\\\"TABLE\\\"],\\n  \\\"TH\\\": [\\\"TR\\\"],\\n  \\\"THEAD\\\": [\\\"TABLE\\\"],\\n  \\\"TR\\\": [\\\"THEAD\\\", \\\"TBODY\\\", \\\"TFOOT\\\", \\\"TABLE\\\"]\\n};\\nfunction getImplicitAriaRole(element) {\\n  var _a;\\n  const implicitRole = ((_a = kImplicitRoleByTagName[elementSafeTagName(element)]) == null ? void 0 : _a.call(kImplicitRoleByTagName, element)) || \\\"\\\";\\n  if (!implicitRole)\\n    return null;\\n  let ancestor = element;\\n  while (ancestor) {\\n    const parent = parentElementOrShadowHost(ancestor);\\n    const parents = kPresentationInheritanceParents[elementSafeTagName(ancestor)];\\n    if (!parents || !parent || !parents.includes(elementSafeTagName(parent)))\\n      break;\\n    const parentExplicitRole = getExplicitAriaRole(parent);\\n    if ((parentExplicitRole === \\\"none\\\" || parentExplicitRole === \\\"presentation\\\") && !hasPresentationConflictResolution(parent, parentExplicitRole))\\n      return parentExplicitRole;\\n    ancestor = parent;\\n  }\\n  return implicitRole;\\n}\\nvar validRoles = [\\n  \\\"alert\\\",\\n  \\\"alertdialog\\\",\\n  \\\"application\\\",\\n  \\\"article\\\",\\n  \\\"banner\\\",\\n  \\\"blockquote\\\",\\n  \\\"button\\\",\\n  \\\"caption\\\",\\n  \\\"cell\\\",\\n  \\\"checkbox\\\",\\n  \\\"code\\\",\\n  \\\"columnheader\\\",\\n  \\\"combobox\\\",\\n  \\\"complementary\\\",\\n  \\\"contentinfo\\\",\\n  \\\"definition\\\",\\n  \\\"deletion\\\",\\n  \\\"dialog\\\",\\n  \\\"directory\\\",\\n  \\\"document\\\",\\n  \\\"emphasis\\\",\\n  \\\"feed\\\",\\n  \\\"figure\\\",\\n  \\\"form\\\",\\n  \\\"generic\\\",\\n  \\\"grid\\\",\\n  \\\"gridcell\\\",\\n  \\\"group\\\",\\n  \\\"heading\\\",\\n  \\\"img\\\",\\n  \\\"insertion\\\",\\n  \\\"link\\\",\\n  \\\"list\\\",\\n  \\\"listbox\\\",\\n  \\\"listitem\\\",\\n  \\\"log\\\",\\n  \\\"main\\\",\\n  \\\"mark\\\",\\n  \\\"marquee\\\",\\n  \\\"math\\\",\\n  \\\"meter\\\",\\n  \\\"menu\\\",\\n  \\\"menubar\\\",\\n  \\\"menuitem\\\",\\n  \\\"menuitemcheckbox\\\",\\n  \\\"menuitemradio\\\",\\n  \\\"navigation\\\",\\n  \\\"none\\\",\\n  \\\"note\\\",\\n  \\\"option\\\",\\n  \\\"paragraph\\\",\\n  \\\"presentation\\\",\\n  \\\"progressbar\\\",\\n  \\\"radio\\\",\\n  \\\"radiogroup\\\",\\n  \\\"region\\\",\\n  \\\"row\\\",\\n  \\\"rowgroup\\\",\\n  \\\"rowheader\\\",\\n  \\\"scrollbar\\\",\\n  \\\"search\\\",\\n  \\\"searchbox\\\",\\n  \\\"separator\\\",\\n  \\\"slider\\\",\\n  \\\"spinbutton\\\",\\n  \\\"status\\\",\\n  \\\"strong\\\",\\n  \\\"subscript\\\",\\n  \\\"superscript\\\",\\n  \\\"switch\\\",\\n  \\\"tab\\\",\\n  \\\"table\\\",\\n  \\\"tablist\\\",\\n  \\\"tabpanel\\\",\\n  \\\"term\\\",\\n  \\\"textbox\\\",\\n  \\\"time\\\",\\n  \\\"timer\\\",\\n  \\\"toolbar\\\",\\n  \\\"tooltip\\\",\\n  \\\"tree\\\",\\n  \\\"treegrid\\\",\\n  \\\"treeitem\\\"\\n];\\nfunction getExplicitAriaRole(element) {\\n  const roles = (element.getAttribute(\\\"role\\\") || \\\"\\\").split(\\\" \\\").map((role) => role.trim());\\n  return roles.find((role) => validRoles.includes(role)) || null;\\n}\\nfunction hasPresentationConflictResolution(element, role) {\\n  return hasGlobalAriaAttribute(element, role) || isFocusable(element);\\n}\\nfunction getAriaRole(element) {\\n  const explicitRole = getExplicitAriaRole(element);\\n  if (!explicitRole)\\n    return getImplicitAriaRole(element);\\n  if (explicitRole === \\\"none\\\" || explicitRole === \\\"presentation\\\") {\\n    const implicitRole = getImplicitAriaRole(element);\\n    if (hasPresentationConflictResolution(element, implicitRole))\\n      return implicitRole;\\n  }\\n  return explicitRole;\\n}\\nfunction getAriaBoolean(attr) {\\n  return attr === null ? void 0 : attr.toLowerCase() === \\\"true\\\";\\n}\\nfunction isElementIgnoredForAria(element) {\\n  return [\\\"STYLE\\\", \\\"SCRIPT\\\", \\\"NOSCRIPT\\\", \\\"TEMPLATE\\\"].includes(elementSafeTagName(element));\\n}\\nfunction isElementHiddenForAria(element) {\\n  if (isElementIgnoredForAria(element))\\n    return true;\\n  const style = getElementComputedStyle(element);\\n  const isSlot = element.nodeName === \\\"SLOT\\\";\\n  if ((style == null ? void 0 : style.display) === \\\"contents\\\" && !isSlot) {\\n    for (let child = element.firstChild; child; child = child.nextSibling) {\\n      if (child.nodeType === 1 && !isElementHiddenForAria(child))\\n        return false;\\n      if (child.nodeType === 3 && isVisibleTextNode(child))\\n        return false;\\n    }\\n    return true;\\n  }\\n  const isOptionInsideSelect = element.nodeName === \\\"OPTION\\\" && !!element.closest(\\\"select\\\");\\n  if (!isOptionInsideSelect && !isSlot && !isElementStyleVisibilityVisible(element, style))\\n    return true;\\n  return belongsToDisplayNoneOrAriaHiddenOrNonSlotted(element);\\n}\\nfunction belongsToDisplayNoneOrAriaHiddenOrNonSlotted(element) {\\n  let hidden = cacheIsHidden == null ? void 0 : cacheIsHidden.get(element);\\n  if (hidden === void 0) {\\n    hidden = false;\\n    if (element.parentElement && element.parentElement.shadowRoot && !element.assignedSlot)\\n      hidden = true;\\n    if (!hidden) {\\n      const style = getElementComputedStyle(element);\\n      hidden = !style || style.display === \\\"none\\\" || getAriaBoolean(element.getAttribute(\\\"aria-hidden\\\")) === true;\\n    }\\n    if (!hidden) {\\n      const parent = parentElementOrShadowHost(element);\\n      if (parent)\\n        hidden = belongsToDisplayNoneOrAriaHiddenOrNonSlotted(parent);\\n    }\\n    cacheIsHidden == null ? void 0 : cacheIsHidden.set(element, hidden);\\n  }\\n  return hidden;\\n}\\nfunction getIdRefs(element, ref) {\\n  if (!ref)\\n    return [];\\n  const root = enclosingShadowRootOrDocument(element);\\n  if (!root)\\n    return [];\\n  try {\\n    const ids = ref.split(\\\" \\\").filter((id) => !!id);\\n    const result = [];\\n    for (const id of ids) {\\n      const firstElement = root.querySelector(\\\"#\\\" + CSS.escape(id));\\n      if (firstElement && !result.includes(firstElement))\\n        result.push(firstElement);\\n    }\\n    return result;\\n  } catch (e) {\\n    return [];\\n  }\\n}\\nfunction trimFlatString(s) {\\n  return s.trim();\\n}\\nfunction asFlatString(s) {\\n  return s.split(\\\"\\\\xA0\\\").map((chunk) => chunk.replace(/\\\\r\\\\n/g, \\\"\\\\n\\\").replace(/[\\\\u200b\\\\u00ad]/g, \\\"\\\").replace(/\\\\s\\\\s*/g, \\\" \\\")).join(\\\"\\\\xA0\\\").trim();\\n}\\nfunction queryInAriaOwned(element, selector) {\\n  const result = [...element.querySelectorAll(selector)];\\n  for (const owned of getIdRefs(element, element.getAttribute(\\\"aria-owns\\\"))) {\\n    if (owned.matches(selector))\\n      result.push(owned);\\n    result.push(...owned.querySelectorAll(selector));\\n  }\\n  return result;\\n}\\nfunction getCSSContent(element, pseudo) {\\n  const cache = pseudo === \\\"::before\\\" ? cachePseudoContentBefore : pseudo === \\\"::after\\\" ? cachePseudoContentAfter : cachePseudoContent;\\n  if (cache == null ? void 0 : cache.has(element))\\n    return cache == null ? void 0 : cache.get(element);\\n  const style = getElementComputedStyle(element, pseudo);\\n  let content;\\n  if (style && style.display !== \\\"none\\\" && style.visibility !== \\\"hidden\\\") {\\n    content = parseCSSContentPropertyAsString(element, style.content, !!pseudo);\\n  }\\n  if (pseudo && content !== void 0) {\\n    const display = (style == null ? void 0 : style.display) || \\\"inline\\\";\\n    if (display !== \\\"inline\\\")\\n      content = \\\" \\\" + content + \\\" \\\";\\n  }\\n  if (cache)\\n    cache.set(element, content);\\n  return content;\\n}\\nfunction parseCSSContentPropertyAsString(element, content, isPseudo) {\\n  if (!content || content === \\\"none\\\" || content === \\\"normal\\\") {\\n    return;\\n  }\\n  try {\\n    let tokens = tokenize(content).filter((token) => !(token instanceof WhitespaceToken));\\n    const delimIndex = tokens.findIndex((token) => token instanceof DelimToken && token.value === \\\"/\\\");\\n    if (delimIndex !== -1) {\\n      tokens = tokens.slice(delimIndex + 1);\\n    } else if (!isPseudo) {\\n      return;\\n    }\\n    const accumulated = [];\\n    let index = 0;\\n    while (index < tokens.length) {\\n      if (tokens[index] instanceof StringToken) {\\n        accumulated.push(tokens[index].value);\\n        index++;\\n      } else if (index + 2 < tokens.length && tokens[index] instanceof FunctionToken && tokens[index].value === \\\"attr\\\" && tokens[index + 1] instanceof IdentToken && tokens[index + 2] instanceof CloseParenToken) {\\n        const attrName = tokens[index + 1].value;\\n        accumulated.push(element.getAttribute(attrName) || \\\"\\\");\\n        index += 3;\\n      } else {\\n        return;\\n      }\\n    }\\n    return accumulated.join(\\\"\\\");\\n  } catch {\\n  }\\n}\\nfunction getAriaLabelledByElements(element) {\\n  const ref = element.getAttribute(\\\"aria-labelledby\\\");\\n  if (ref === null)\\n    return null;\\n  const refs = getIdRefs(element, ref);\\n  return refs.length ? refs : null;\\n}\\nfunction allowsNameFromContent(role, targetDescendant) {\\n  const alwaysAllowsNameFromContent = [\\\"button\\\", \\\"cell\\\", \\\"checkbox\\\", \\\"columnheader\\\", \\\"gridcell\\\", \\\"heading\\\", \\\"link\\\", \\\"menuitem\\\", \\\"menuitemcheckbox\\\", \\\"menuitemradio\\\", \\\"option\\\", \\\"radio\\\", \\\"row\\\", \\\"rowheader\\\", \\\"switch\\\", \\\"tab\\\", \\\"tooltip\\\", \\\"treeitem\\\"].includes(role);\\n  const descendantAllowsNameFromContent = targetDescendant && [\\\"\\\", \\\"caption\\\", \\\"code\\\", \\\"contentinfo\\\", \\\"definition\\\", \\\"deletion\\\", \\\"emphasis\\\", \\\"insertion\\\", \\\"list\\\", \\\"listitem\\\", \\\"mark\\\", \\\"none\\\", \\\"paragraph\\\", \\\"presentation\\\", \\\"region\\\", \\\"row\\\", \\\"rowgroup\\\", \\\"section\\\", \\\"strong\\\", \\\"subscript\\\", \\\"superscript\\\", \\\"table\\\", \\\"term\\\", \\\"time\\\"].includes(role);\\n  return alwaysAllowsNameFromContent || descendantAllowsNameFromContent;\\n}\\nfunction getElementAccessibleName(element, includeHidden) {\\n  const cache = includeHidden ? cacheAccessibleNameHidden : cacheAccessibleName;\\n  let accessibleName = cache == null ? void 0 : cache.get(element);\\n  if (accessibleName === void 0) {\\n    accessibleName = \\\"\\\";\\n    const elementProhibitsNaming = [\\\"caption\\\", \\\"code\\\", \\\"definition\\\", \\\"deletion\\\", \\\"emphasis\\\", \\\"generic\\\", \\\"insertion\\\", \\\"mark\\\", \\\"paragraph\\\", \\\"presentation\\\", \\\"strong\\\", \\\"subscript\\\", \\\"suggestion\\\", \\\"superscript\\\", \\\"term\\\", \\\"time\\\"].includes(getAriaRole(element) || \\\"\\\");\\n    if (!elementProhibitsNaming) {\\n      accessibleName = asFlatString(getTextAlternativeInternal(element, {\\n        includeHidden,\\n        visitedElements: /* @__PURE__ */ new Set(),\\n        embeddedInTargetElement: \\\"self\\\"\\n      }));\\n    }\\n    cache == null ? void 0 : cache.set(element, accessibleName);\\n  }\\n  return accessibleName;\\n}\\nfunction getElementAccessibleDescription(element, includeHidden) {\\n  const cache = includeHidden ? cacheAccessibleDescriptionHidden : cacheAccessibleDescription;\\n  let accessibleDescription = cache == null ? void 0 : cache.get(element);\\n  if (accessibleDescription === void 0) {\\n    accessibleDescription = \\\"\\\";\\n    if (element.hasAttribute(\\\"aria-describedby\\\")) {\\n      const describedBy = getIdRefs(element, element.getAttribute(\\\"aria-describedby\\\"));\\n      accessibleDescription = asFlatString(describedBy.map((ref) => getTextAlternativeInternal(ref, {\\n        includeHidden,\\n        visitedElements: /* @__PURE__ */ new Set(),\\n        embeddedInDescribedBy: { element: ref, hidden: isElementHiddenForAria(ref) }\\n      })).join(\\\" \\\"));\\n    } else if (element.hasAttribute(\\\"aria-description\\\")) {\\n      accessibleDescription = asFlatString(element.getAttribute(\\\"aria-description\\\") || \\\"\\\");\\n    } else {\\n      accessibleDescription = asFlatString(element.getAttribute(\\\"title\\\") || \\\"\\\");\\n    }\\n    cache == null ? void 0 : cache.set(element, accessibleDescription);\\n  }\\n  return accessibleDescription;\\n}\\nfunction getAriaInvalid(element) {\\n  const ariaInvalid = element.getAttribute(\\\"aria-invalid\\\");\\n  if (!ariaInvalid || ariaInvalid.trim() === \\\"\\\" || ariaInvalid.toLocaleLowerCase() === \\\"false\\\")\\n    return \\\"false\\\";\\n  if (ariaInvalid === \\\"true\\\" || ariaInvalid === \\\"grammar\\\" || ariaInvalid === \\\"spelling\\\")\\n    return ariaInvalid;\\n  return \\\"true\\\";\\n}\\nfunction getValidityInvalid(element) {\\n  if (\\\"validity\\\" in element) {\\n    const validity = element.validity;\\n    return (validity == null ? void 0 : validity.valid) === false;\\n  }\\n  return false;\\n}\\nfunction getElementAccessibleErrorMessage(element) {\\n  const cache = cacheAccessibleErrorMessage;\\n  let accessibleErrorMessage = cacheAccessibleErrorMessage == null ? void 0 : cacheAccessibleErrorMessage.get(element);\\n  if (accessibleErrorMessage === void 0) {\\n    accessibleErrorMessage = \\\"\\\";\\n    const isAriaInvalid = getAriaInvalid(element) !== \\\"false\\\";\\n    const isValidityInvalid = getValidityInvalid(element);\\n    if (isAriaInvalid || isValidityInvalid) {\\n      const errorMessageId = element.getAttribute(\\\"aria-errormessage\\\");\\n      const errorMessages = getIdRefs(element, errorMessageId);\\n      const parts = errorMessages.map((errorMessage) => asFlatString(\\n        getTextAlternativeInternal(errorMessage, {\\n          visitedElements: /* @__PURE__ */ new Set(),\\n          embeddedInDescribedBy: { element: errorMessage, hidden: isElementHiddenForAria(errorMessage) }\\n        })\\n      ));\\n      accessibleErrorMessage = parts.join(\\\" \\\").trim();\\n    }\\n    cache == null ? void 0 : cache.set(element, accessibleErrorMessage);\\n  }\\n  return accessibleErrorMessage;\\n}\\nfunction getTextAlternativeInternal(element, options) {\\n  var _a, _b, _c, _d;\\n  if (options.visitedElements.has(element))\\n    return \\\"\\\";\\n  const childOptions = {\\n    ...options,\\n    embeddedInTargetElement: options.embeddedInTargetElement === \\\"self\\\" ? \\\"descendant\\\" : options.embeddedInTargetElement\\n  };\\n  if (!options.includeHidden) {\\n    const isEmbeddedInHiddenReferenceTraversal = !!((_a = options.embeddedInLabelledBy) == null ? void 0 : _a.hidden) || !!((_b = options.embeddedInDescribedBy) == null ? void 0 : _b.hidden) || !!((_c = options.embeddedInNativeTextAlternative) == null ? void 0 : _c.hidden) || !!((_d = options.embeddedInLabel) == null ? void 0 : _d.hidden);\\n    if (isElementIgnoredForAria(element) || !isEmbeddedInHiddenReferenceTraversal && isElementHiddenForAria(element)) {\\n      options.visitedElements.add(element);\\n      return \\\"\\\";\\n    }\\n  }\\n  const labelledBy = getAriaLabelledByElements(element);\\n  if (!options.embeddedInLabelledBy) {\\n    const accessibleName = (labelledBy || []).map((ref) => getTextAlternativeInternal(ref, {\\n      ...options,\\n      embeddedInLabelledBy: { element: ref, hidden: isElementHiddenForAria(ref) },\\n      embeddedInDescribedBy: void 0,\\n      embeddedInTargetElement: void 0,\\n      embeddedInLabel: void 0,\\n      embeddedInNativeTextAlternative: void 0\\n    })).join(\\\" \\\");\\n    if (accessibleName)\\n      return accessibleName;\\n  }\\n  const role = getAriaRole(element) || \\\"\\\";\\n  const tagName = elementSafeTagName(element);\\n  if (!!options.embeddedInLabel || !!options.embeddedInLabelledBy || options.embeddedInTargetElement === \\\"descendant\\\") {\\n    const isOwnLabel = [...element.labels || []].includes(element);\\n    const isOwnLabelledBy = (labelledBy || []).includes(element);\\n    if (!isOwnLabel && !isOwnLabelledBy) {\\n      if (role === \\\"textbox\\\") {\\n        options.visitedElements.add(element);\\n        if (tagName === \\\"INPUT\\\" || tagName === \\\"TEXTAREA\\\")\\n          return element.value;\\n        return element.textContent || \\\"\\\";\\n      }\\n      if ([\\\"combobox\\\", \\\"listbox\\\"].includes(role)) {\\n        options.visitedElements.add(element);\\n        let selectedOptions;\\n        if (tagName === \\\"SELECT\\\") {\\n          selectedOptions = [...element.selectedOptions];\\n          if (!selectedOptions.length && element.options.length)\\n            selectedOptions.push(element.options[0]);\\n        } else {\\n          const listbox = role === \\\"combobox\\\" ? queryInAriaOwned(element, \\\"*\\\").find((e) => getAriaRole(e) === \\\"listbox\\\") : element;\\n          selectedOptions = listbox ? queryInAriaOwned(listbox, '[aria-selected=\\\"true\\\"]').filter((e) => getAriaRole(e) === \\\"option\\\") : [];\\n        }\\n        if (!selectedOptions.length && tagName === \\\"INPUT\\\") {\\n          return element.value;\\n        }\\n        return selectedOptions.map((option) => getTextAlternativeInternal(option, childOptions)).join(\\\" \\\");\\n      }\\n      if ([\\\"progressbar\\\", \\\"scrollbar\\\", \\\"slider\\\", \\\"spinbutton\\\", \\\"meter\\\"].includes(role)) {\\n        options.visitedElements.add(element);\\n        if (element.hasAttribute(\\\"aria-valuetext\\\"))\\n          return element.getAttribute(\\\"aria-valuetext\\\") || \\\"\\\";\\n        if (element.hasAttribute(\\\"aria-valuenow\\\"))\\n          return element.getAttribute(\\\"aria-valuenow\\\") || \\\"\\\";\\n        return element.getAttribute(\\\"value\\\") || \\\"\\\";\\n      }\\n      if ([\\\"menu\\\"].includes(role)) {\\n        options.visitedElements.add(element);\\n        return \\\"\\\";\\n      }\\n    }\\n  }\\n  const ariaLabel = element.getAttribute(\\\"aria-label\\\") || \\\"\\\";\\n  if (trimFlatString(ariaLabel)) {\\n    options.visitedElements.add(element);\\n    return ariaLabel;\\n  }\\n  if (![\\\"presentation\\\", \\\"none\\\"].includes(role)) {\\n    if (tagName === \\\"INPUT\\\" && [\\\"button\\\", \\\"submit\\\", \\\"reset\\\"].includes(element.type)) {\\n      options.visitedElements.add(element);\\n      const value = element.value || \\\"\\\";\\n      if (trimFlatString(value))\\n        return value;\\n      if (element.type === \\\"submit\\\")\\n        return \\\"Submit\\\";\\n      if (element.type === \\\"reset\\\")\\n        return \\\"Reset\\\";\\n      const title = element.getAttribute(\\\"title\\\") || \\\"\\\";\\n      return title;\\n    }\\n    if (!getGlobalOptions().inputFileRoleTextbox && tagName === \\\"INPUT\\\" && element.type === \\\"file\\\") {\\n      options.visitedElements.add(element);\\n      const labels = element.labels || [];\\n      if (labels.length && !options.embeddedInLabelledBy)\\n        return getAccessibleNameFromAssociatedLabels(labels, options);\\n      return \\\"Choose File\\\";\\n    }\\n    if (tagName === \\\"INPUT\\\" && element.type === \\\"image\\\") {\\n      options.visitedElements.add(element);\\n      const labels = element.labels || [];\\n      if (labels.length && !options.embeddedInLabelledBy)\\n        return getAccessibleNameFromAssociatedLabels(labels, options);\\n      const alt = element.getAttribute(\\\"alt\\\") || \\\"\\\";\\n      if (trimFlatString(alt))\\n        return alt;\\n      const title = element.getAttribute(\\\"title\\\") || \\\"\\\";\\n      if (trimFlatString(title))\\n        return title;\\n      return \\\"Submit\\\";\\n    }\\n    if (!labelledBy && tagName === \\\"BUTTON\\\") {\\n      options.visitedElements.add(element);\\n      const labels = element.labels || [];\\n      if (labels.length)\\n        return getAccessibleNameFromAssociatedLabels(labels, options);\\n    }\\n    if (!labelledBy && tagName === \\\"OUTPUT\\\") {\\n      options.visitedElements.add(element);\\n      const labels = element.labels || [];\\n      if (labels.length)\\n        return getAccessibleNameFromAssociatedLabels(labels, options);\\n      return element.getAttribute(\\\"title\\\") || \\\"\\\";\\n    }\\n    if (!labelledBy && (tagName === \\\"TEXTAREA\\\" || tagName === \\\"SELECT\\\" || tagName === \\\"INPUT\\\")) {\\n      options.visitedElements.add(element);\\n      const labels = element.labels || [];\\n      if (labels.length)\\n        return getAccessibleNameFromAssociatedLabels(labels, options);\\n      const usePlaceholder = tagName === \\\"INPUT\\\" && [\\\"text\\\", \\\"password\\\", \\\"search\\\", \\\"tel\\\", \\\"email\\\", \\\"url\\\"].includes(element.type) || tagName === \\\"TEXTAREA\\\";\\n      const placeholder = element.getAttribute(\\\"placeholder\\\") || \\\"\\\";\\n      const title = element.getAttribute(\\\"title\\\") || \\\"\\\";\\n      if (!usePlaceholder || title)\\n        return title;\\n      return placeholder;\\n    }\\n    if (!labelledBy && tagName === \\\"FIELDSET\\\") {\\n      options.visitedElements.add(element);\\n      for (let child = element.firstElementChild; child; child = child.nextElementSibling) {\\n        if (elementSafeTagName(child) === \\\"LEGEND\\\") {\\n          return getTextAlternativeInternal(child, {\\n            ...childOptions,\\n            embeddedInNativeTextAlternative: { element: child, hidden: isElementHiddenForAria(child) }\\n          });\\n        }\\n      }\\n      const title = element.getAttribute(\\\"title\\\") || \\\"\\\";\\n      return title;\\n    }\\n    if (!labelledBy && tagName === \\\"FIGURE\\\") {\\n      options.visitedElements.add(element);\\n      for (let child = element.firstElementChild; child; child = child.nextElementSibling) {\\n        if (elementSafeTagName(child) === \\\"FIGCAPTION\\\") {\\n          return getTextAlternativeInternal(child, {\\n            ...childOptions,\\n            embeddedInNativeTextAlternative: { element: child, hidden: isElementHiddenForAria(child) }\\n          });\\n        }\\n      }\\n      const title = element.getAttribute(\\\"title\\\") || \\\"\\\";\\n      return title;\\n    }\\n    if (tagName === \\\"IMG\\\") {\\n      options.visitedElements.add(element);\\n      const alt = element.getAttribute(\\\"alt\\\") || \\\"\\\";\\n      if (trimFlatString(alt))\\n        return alt;\\n      const title = element.getAttribute(\\\"title\\\") || \\\"\\\";\\n      return title;\\n    }\\n    if (tagName === \\\"TABLE\\\") {\\n      options.visitedElements.add(element);\\n      for (let child = element.firstElementChild; child; child = child.nextElementSibling) {\\n        if (elementSafeTagName(child) === \\\"CAPTION\\\") {\\n          return getTextAlternativeInternal(child, {\\n            ...childOptions,\\n            embeddedInNativeTextAlternative: { element: child, hidden: isElementHiddenForAria(child) }\\n          });\\n        }\\n      }\\n      const summary = element.getAttribute(\\\"summary\\\") || \\\"\\\";\\n      if (summary)\\n        return summary;\\n    }\\n    if (tagName === \\\"AREA\\\") {\\n      options.visitedElements.add(element);\\n      const alt = element.getAttribute(\\\"alt\\\") || \\\"\\\";\\n      if (trimFlatString(alt))\\n        return alt;\\n      const title = element.getAttribute(\\\"title\\\") || \\\"\\\";\\n      return title;\\n    }\\n    if (tagName === \\\"SVG\\\" || element.ownerSVGElement) {\\n      options.visitedElements.add(element);\\n      for (let child = element.firstElementChild; child; child = child.nextElementSibling) {\\n        if (elementSafeTagName(child) === \\\"TITLE\\\" && child.ownerSVGElement) {\\n          return getTextAlternativeInternal(child, {\\n            ...childOptions,\\n            embeddedInLabelledBy: { element: child, hidden: isElementHiddenForAria(child) }\\n          });\\n        }\\n      }\\n    }\\n    if (element.ownerSVGElement && tagName === \\\"A\\\") {\\n      const title = element.getAttribute(\\\"xlink:title\\\") || \\\"\\\";\\n      if (trimFlatString(title)) {\\n        options.visitedElements.add(element);\\n        return title;\\n      }\\n    }\\n  }\\n  const shouldNameFromContentForSummary = tagName === \\\"SUMMARY\\\" && ![\\\"presentation\\\", \\\"none\\\"].includes(role);\\n  if (allowsNameFromContent(role, options.embeddedInTargetElement === \\\"descendant\\\") || shouldNameFromContentForSummary || !!options.embeddedInLabelledBy || !!options.embeddedInDescribedBy || !!options.embeddedInLabel || !!options.embeddedInNativeTextAlternative) {\\n    options.visitedElements.add(element);\\n    const accessibleName = innerAccumulatedElementText(element, childOptions);\\n    const maybeTrimmedAccessibleName = options.embeddedInTargetElement === \\\"self\\\" ? trimFlatString(accessibleName) : accessibleName;\\n    if (maybeTrimmedAccessibleName)\\n      return accessibleName;\\n  }\\n  if (![\\\"presentation\\\", \\\"none\\\"].includes(role) || tagName === \\\"IFRAME\\\") {\\n    options.visitedElements.add(element);\\n    const title = element.getAttribute(\\\"title\\\") || \\\"\\\";\\n    if (trimFlatString(title))\\n      return title;\\n  }\\n  options.visitedElements.add(element);\\n  return \\\"\\\";\\n}\\nfunction innerAccumulatedElementText(element, options) {\\n  const tokens = [];\\n  const visit = (node, skipSlotted) => {\\n    var _a;\\n    if (skipSlotted && node.assignedSlot)\\n      return;\\n    if (node.nodeType === 1) {\\n      const display = ((_a = getElementComputedStyle(node)) == null ? void 0 : _a.display) || \\\"inline\\\";\\n      let token = getTextAlternativeInternal(node, options);\\n      if (display !== \\\"inline\\\" || node.nodeName === \\\"BR\\\")\\n        token = \\\" \\\" + token + \\\" \\\";\\n      tokens.push(token);\\n    } else if (node.nodeType === 3) {\\n      tokens.push(node.textContent || \\\"\\\");\\n    }\\n  };\\n  tokens.push(getCSSContent(element, \\\"::before\\\") || \\\"\\\");\\n  const content = getCSSContent(element);\\n  if (content !== void 0) {\\n    tokens.push(content);\\n  } else {\\n    const assignedNodes = element.nodeName === \\\"SLOT\\\" ? element.assignedNodes() : [];\\n    if (assignedNodes.length) {\\n      for (const child of assignedNodes)\\n        visit(child, false);\\n    } else {\\n      for (let child = element.firstChild; child; child = child.nextSibling)\\n        visit(child, true);\\n      if (element.shadowRoot) {\\n        for (let child = element.shadowRoot.firstChild; child; child = child.nextSibling)\\n          visit(child, true);\\n      }\\n      for (const owned of getIdRefs(element, element.getAttribute(\\\"aria-owns\\\")))\\n        visit(owned, true);\\n    }\\n  }\\n  tokens.push(getCSSContent(element, \\\"::after\\\") || \\\"\\\");\\n  return tokens.join(\\\"\\\");\\n}\\nvar kAriaSelectedRoles = [\\\"gridcell\\\", \\\"option\\\", \\\"row\\\", \\\"tab\\\", \\\"rowheader\\\", \\\"columnheader\\\", \\\"treeitem\\\"];\\nfunction getAriaSelected(element) {\\n  if (elementSafeTagName(element) === \\\"OPTION\\\")\\n    return element.selected;\\n  if (kAriaSelectedRoles.includes(getAriaRole(element) || \\\"\\\"))\\n    return getAriaBoolean(element.getAttribute(\\\"aria-selected\\\")) === true;\\n  return false;\\n}\\nvar kAriaCheckedRoles = [\\\"checkbox\\\", \\\"menuitemcheckbox\\\", \\\"option\\\", \\\"radio\\\", \\\"switch\\\", \\\"menuitemradio\\\", \\\"treeitem\\\"];\\nfunction getAriaChecked(element) {\\n  const result = getChecked(element, true);\\n  return result === \\\"error\\\" ? false : result;\\n}\\nfunction getCheckedAllowMixed(element) {\\n  return getChecked(element, true);\\n}\\nfunction getCheckedWithoutMixed(element) {\\n  const result = getChecked(element, false);\\n  return result;\\n}\\nfunction getChecked(element, allowMixed) {\\n  const tagName = elementSafeTagName(element);\\n  if (allowMixed && tagName === \\\"INPUT\\\" && element.indeterminate)\\n    return \\\"mixed\\\";\\n  if (tagName === \\\"INPUT\\\" && [\\\"checkbox\\\", \\\"radio\\\"].includes(element.type))\\n    return element.checked;\\n  if (kAriaCheckedRoles.includes(getAriaRole(element) || \\\"\\\")) {\\n    const checked = element.getAttribute(\\\"aria-checked\\\");\\n    if (checked === \\\"true\\\")\\n      return true;\\n    if (allowMixed && checked === \\\"mixed\\\")\\n      return \\\"mixed\\\";\\n    return false;\\n  }\\n  return \\\"error\\\";\\n}\\nvar kAriaReadonlyRoles = [\\\"checkbox\\\", \\\"combobox\\\", \\\"grid\\\", \\\"gridcell\\\", \\\"listbox\\\", \\\"radiogroup\\\", \\\"slider\\\", \\\"spinbutton\\\", \\\"textbox\\\", \\\"columnheader\\\", \\\"rowheader\\\", \\\"searchbox\\\", \\\"switch\\\", \\\"treegrid\\\"];\\nfunction getReadonly(element) {\\n  const tagName = elementSafeTagName(element);\\n  if ([\\\"INPUT\\\", \\\"TEXTAREA\\\", \\\"SELECT\\\"].includes(tagName))\\n    return element.hasAttribute(\\\"readonly\\\");\\n  if (kAriaReadonlyRoles.includes(getAriaRole(element) || \\\"\\\"))\\n    return element.getAttribute(\\\"aria-readonly\\\") === \\\"true\\\";\\n  if (element.isContentEditable)\\n    return false;\\n  return \\\"error\\\";\\n}\\nvar kAriaPressedRoles = [\\\"button\\\"];\\nfunction getAriaPressed(element) {\\n  if (kAriaPressedRoles.includes(getAriaRole(element) || \\\"\\\")) {\\n    const pressed = element.getAttribute(\\\"aria-pressed\\\");\\n    if (pressed === \\\"true\\\")\\n      return true;\\n    if (pressed === \\\"mixed\\\")\\n      return \\\"mixed\\\";\\n  }\\n  return false;\\n}\\nvar kAriaExpandedRoles = [\\\"application\\\", \\\"button\\\", \\\"checkbox\\\", \\\"combobox\\\", \\\"gridcell\\\", \\\"link\\\", \\\"listbox\\\", \\\"menuitem\\\", \\\"row\\\", \\\"rowheader\\\", \\\"tab\\\", \\\"treeitem\\\", \\\"columnheader\\\", \\\"menuitemcheckbox\\\", \\\"menuitemradio\\\", \\\"rowheader\\\", \\\"switch\\\"];\\nfunction getAriaExpanded(element) {\\n  if (elementSafeTagName(element) === \\\"DETAILS\\\")\\n    return element.open;\\n  if (kAriaExpandedRoles.includes(getAriaRole(element) || \\\"\\\")) {\\n    const expanded = element.getAttribute(\\\"aria-expanded\\\");\\n    if (expanded === null)\\n      return void 0;\\n    if (expanded === \\\"true\\\")\\n      return true;\\n    return false;\\n  }\\n  return void 0;\\n}\\nvar kAriaLevelRoles = [\\\"heading\\\", \\\"listitem\\\", \\\"row\\\", \\\"treeitem\\\"];\\nfunction getAriaLevel(element) {\\n  const native = { \\\"H1\\\": 1, \\\"H2\\\": 2, \\\"H3\\\": 3, \\\"H4\\\": 4, \\\"H5\\\": 5, \\\"H6\\\": 6 }[elementSafeTagName(element)];\\n  if (native)\\n    return native;\\n  if (kAriaLevelRoles.includes(getAriaRole(element) || \\\"\\\")) {\\n    const attr = element.getAttribute(\\\"aria-level\\\");\\n    const value = attr === null ? Number.NaN : Number(attr);\\n    if (Number.isInteger(value) && value >= 1)\\n      return value;\\n  }\\n  return 0;\\n}\\nvar kAriaDisabledRoles = [\\\"application\\\", \\\"button\\\", \\\"composite\\\", \\\"gridcell\\\", \\\"group\\\", \\\"input\\\", \\\"link\\\", \\\"menuitem\\\", \\\"scrollbar\\\", \\\"separator\\\", \\\"tab\\\", \\\"checkbox\\\", \\\"columnheader\\\", \\\"combobox\\\", \\\"grid\\\", \\\"listbox\\\", \\\"menu\\\", \\\"menubar\\\", \\\"menuitemcheckbox\\\", \\\"menuitemradio\\\", \\\"option\\\", \\\"radio\\\", \\\"radiogroup\\\", \\\"row\\\", \\\"rowheader\\\", \\\"searchbox\\\", \\\"select\\\", \\\"slider\\\", \\\"spinbutton\\\", \\\"switch\\\", \\\"tablist\\\", \\\"textbox\\\", \\\"toolbar\\\", \\\"tree\\\", \\\"treegrid\\\", \\\"treeitem\\\"];\\nfunction getAriaDisabled(element) {\\n  return isNativelyDisabled(element) || hasExplicitAriaDisabled(element);\\n}\\nfunction isNativelyDisabled(element) {\\n  const isNativeFormControl = [\\\"BUTTON\\\", \\\"INPUT\\\", \\\"SELECT\\\", \\\"TEXTAREA\\\", \\\"OPTION\\\", \\\"OPTGROUP\\\"].includes(element.tagName);\\n  return isNativeFormControl && (element.hasAttribute(\\\"disabled\\\") || belongsToDisabledFieldSet(element));\\n}\\nfunction belongsToDisabledFieldSet(element) {\\n  const fieldSetElement = element == null ? void 0 : element.closest(\\\"FIELDSET[DISABLED]\\\");\\n  if (!fieldSetElement)\\n    return false;\\n  const legendElement = fieldSetElement.querySelector(\\\":scope > LEGEND\\\");\\n  return !legendElement || !legendElement.contains(element);\\n}\\nfunction hasExplicitAriaDisabled(element, isAncestor = false) {\\n  if (!element)\\n    return false;\\n  if (isAncestor || kAriaDisabledRoles.includes(getAriaRole(element) || \\\"\\\")) {\\n    const attribute = (element.getAttribute(\\\"aria-disabled\\\") || \\\"\\\").toLowerCase();\\n    if (attribute === \\\"true\\\")\\n      return true;\\n    if (attribute === \\\"false\\\")\\n      return false;\\n    return hasExplicitAriaDisabled(parentElementOrShadowHost(element), true);\\n  }\\n  return false;\\n}\\nfunction getAccessibleNameFromAssociatedLabels(labels, options) {\\n  return [...labels].map((label) => getTextAlternativeInternal(label, {\\n    ...options,\\n    embeddedInLabel: { element: label, hidden: isElementHiddenForAria(label) },\\n    embeddedInNativeTextAlternative: void 0,\\n    embeddedInLabelledBy: void 0,\\n    embeddedInDescribedBy: void 0,\\n    embeddedInTargetElement: void 0\\n  })).filter((accessibleName) => !!accessibleName).join(\\\" \\\");\\n}\\nfunction receivesPointerEvents(element) {\\n  const cache = cachePointerEvents;\\n  let e = element;\\n  let result;\\n  const parents = [];\\n  for (; e; e = parentElementOrShadowHost(e)) {\\n    const cached = cache.get(e);\\n    if (cached !== void 0) {\\n      result = cached;\\n      break;\\n    }\\n    parents.push(e);\\n    const style = getElementComputedStyle(e);\\n    if (!style) {\\n      result = true;\\n      break;\\n    }\\n    const value = style.pointerEvents;\\n    if (value) {\\n      result = value !== \\\"none\\\";\\n      break;\\n    }\\n  }\\n  if (result === void 0)\\n    result = true;\\n  for (const parent of parents)\\n    cache.set(parent, result);\\n  return result;\\n}\\nvar cacheAccessibleName;\\nvar cacheAccessibleNameHidden;\\nvar cacheAccessibleDescription;\\nvar cacheAccessibleDescriptionHidden;\\nvar cacheAccessibleErrorMessage;\\nvar cacheIsHidden;\\nvar cachePseudoContent;\\nvar cachePseudoContentBefore;\\nvar cachePseudoContentAfter;\\nvar cachePointerEvents;\\nvar cachesCounter = 0;\\nfunction beginAriaCaches() {\\n  ++cachesCounter;\\n  cacheAccessibleName != null ? cacheAccessibleName : cacheAccessibleName = /* @__PURE__ */ new Map();\\n  cacheAccessibleNameHidden != null ? cacheAccessibleNameHidden : cacheAccessibleNameHidden = /* @__PURE__ */ new Map();\\n  cacheAccessibleDescription != null ? cacheAccessibleDescription : cacheAccessibleDescription = /* @__PURE__ */ new Map();\\n  cacheAccessibleDescriptionHidden != null ? cacheAccessibleDescriptionHidden : cacheAccessibleDescriptionHidden = /* @__PURE__ */ new Map();\\n  cacheAccessibleErrorMessage != null ? cacheAccessibleErrorMessage : cacheAccessibleErrorMessage = /* @__PURE__ */ new Map();\\n  cacheIsHidden != null ? cacheIsHidden : cacheIsHidden = /* @__PURE__ */ new Map();\\n  cachePseudoContent != null ? cachePseudoContent : cachePseudoContent = /* @__PURE__ */ new Map();\\n  cachePseudoContentBefore != null ? cachePseudoContentBefore : cachePseudoContentBefore = /* @__PURE__ */ new Map();\\n  cachePseudoContentAfter != null ? cachePseudoContentAfter : cachePseudoContentAfter = /* @__PURE__ */ new Map();\\n  cachePointerEvents != null ? cachePointerEvents : cachePointerEvents = /* @__PURE__ */ new Map();\\n}\\nfunction endAriaCaches() {\\n  if (!--cachesCounter) {\\n    cacheAccessibleName = void 0;\\n    cacheAccessibleNameHidden = void 0;\\n    cacheAccessibleDescription = void 0;\\n    cacheAccessibleDescriptionHidden = void 0;\\n    cacheAccessibleErrorMessage = void 0;\\n    cacheIsHidden = void 0;\\n    cachePseudoContent = void 0;\\n    cachePseudoContentBefore = void 0;\\n    cachePseudoContentAfter = void 0;\\n    cachePointerEvents = void 0;\\n  }\\n}\\nvar inputTypeToRole = {\\n  \\\"button\\\": \\\"button\\\",\\n  \\\"checkbox\\\": \\\"checkbox\\\",\\n  \\\"image\\\": \\\"button\\\",\\n  \\\"number\\\": \\\"spinbutton\\\",\\n  \\\"radio\\\": \\\"radio\\\",\\n  \\\"range\\\": \\\"slider\\\",\\n  \\\"reset\\\": \\\"button\\\",\\n  \\\"submit\\\": \\\"button\\\"\\n};\\n\\n// packages/injected/src/yaml.ts\\nfunction yamlEscapeKeyIfNeeded(str) {\\n  if (!yamlStringNeedsQuotes(str))\\n    return str;\\n  return `'` + str.replace(/'/g, `''`) + `'`;\\n}\\nfunction yamlEscapeValueIfNeeded(str) {\\n  if (!yamlStringNeedsQuotes(str))\\n    return str;\\n  return '\\\"' + str.replace(/[\\\\\\\\\\\"\\\\x00-\\\\x1f\\\\x7f-\\\\x9f]/g, (c) => {\\n    switch (c) {\\n      case \\\"\\\\\\\\\\\":\\n        return \\\"\\\\\\\\\\\\\\\\\\\";\\n      case '\\\"':\\n        return '\\\\\\\\\\\"';\\n      case \\\"\\\\b\\\":\\n        return \\\"\\\\\\\\b\\\";\\n      case \\\"\\\\f\\\":\\n        return \\\"\\\\\\\\f\\\";\\n      case \\\"\\\\n\\\":\\n        return \\\"\\\\\\\\n\\\";\\n      case \\\"\\\\r\\\":\\n        return \\\"\\\\\\\\r\\\";\\n      case \\\"\\t\\\":\\n        return \\\"\\\\\\\\t\\\";\\n      default:\\n        const code = c.charCodeAt(0);\\n        return \\\"\\\\\\\\x\\\" + code.toString(16).padStart(2, \\\"0\\\");\\n    }\\n  }) + '\\\"';\\n}\\nfunction yamlStringNeedsQuotes(str) {\\n  if (str.length === 0)\\n    return true;\\n  if (/^\\\\s|\\\\s$/.test(str))\\n    return true;\\n  if (/[\\\\x00-\\\\x08\\\\x0b\\\\x0c\\\\x0e-\\\\x1f\\\\x7f-\\\\x9f]/.test(str))\\n    return true;\\n  if (/^-/.test(str))\\n    return true;\\n  if (/[\\\\n:](\\\\s|$)/.test(str))\\n    return true;\\n  if (/\\\\s#/.test(str))\\n    return true;\\n  if (/[\\\\n\\\\r]/.test(str))\\n    return true;\\n  if (/^[&*\\\\],?!>|@\\\"'#%]/.test(str))\\n    return true;\\n  if (/[{}`]/.test(str))\\n    return true;\\n  if (/^\\\\[/.test(str))\\n    return true;\\n  if (!isNaN(Number(str)) || [\\\"y\\\", \\\"n\\\", \\\"yes\\\", \\\"no\\\", \\\"true\\\", \\\"false\\\", \\\"on\\\", \\\"off\\\", \\\"null\\\"].includes(str.toLowerCase()))\\n    return true;\\n  return false;\\n}\\n\\n// packages/injected/src/ariaSnapshot.ts\\nvar lastRef = 0;\\nfunction generateAriaTree(rootElement, options) {\\n  const visited = /* @__PURE__ */ new Set();\\n  const snapshot = {\\n    root: { role: \\\"fragment\\\", name: \\\"\\\", children: [], element: rootElement, props: {}, box: box(rootElement), receivesPointerEvents: true },\\n    elements: /* @__PURE__ */ new Map()\\n  };\\n  const visit = (ariaNode, node) => {\\n    if (visited.has(node))\\n      return;\\n    visited.add(node);\\n    if (node.nodeType === Node.TEXT_NODE && node.nodeValue) {\\n      const text = node.nodeValue;\\n      if (ariaNode.role !== \\\"textbox\\\" && text)\\n        ariaNode.children.push(node.nodeValue || \\\"\\\");\\n      return;\\n    }\\n    if (node.nodeType !== Node.ELEMENT_NODE)\\n      return;\\n    const element = node;\\n    let isVisible = !isElementHiddenForAria(element);\\n    if (options == null ? void 0 : options.forAI)\\n      isVisible = isVisible || isElementVisible(element);\\n    if (!isVisible)\\n      return;\\n    const ariaChildren = [];\\n    if (element.hasAttribute(\\\"aria-owns\\\")) {\\n      const ids = element.getAttribute(\\\"aria-owns\\\").split(/\\\\s+/);\\n      for (const id of ids) {\\n        const ownedElement = rootElement.ownerDocument.getElementById(id);\\n        if (ownedElement)\\n          ariaChildren.push(ownedElement);\\n      }\\n    }\\n    const childAriaNode = toAriaNode(element, options);\\n    if (childAriaNode) {\\n      if (childAriaNode.ref)\\n        snapshot.elements.set(childAriaNode.ref, element);\\n      ariaNode.children.push(childAriaNode);\\n    }\\n    processElement(childAriaNode || ariaNode, element, ariaChildren);\\n  };\\n  function processElement(ariaNode, element, ariaChildren = []) {\\n    var _a;\\n    const display = ((_a = getElementComputedStyle(element)) == null ? void 0 : _a.display) || \\\"inline\\\";\\n    const treatAsBlock = display !== \\\"inline\\\" || element.nodeName === \\\"BR\\\" ? \\\" \\\" : \\\"\\\";\\n    if (treatAsBlock)\\n      ariaNode.children.push(treatAsBlock);\\n    ariaNode.children.push(getCSSContent(element, \\\"::before\\\") || \\\"\\\");\\n    const assignedNodes = element.nodeName === \\\"SLOT\\\" ? element.assignedNodes() : [];\\n    if (assignedNodes.length) {\\n      for (const child of assignedNodes)\\n        visit(ariaNode, child);\\n    } else {\\n      for (let child = element.firstChild; child; child = child.nextSibling) {\\n        if (!child.assignedSlot)\\n          visit(ariaNode, child);\\n      }\\n      if (element.shadowRoot) {\\n        for (let child = element.shadowRoot.firstChild; child; child = child.nextSibling)\\n          visit(ariaNode, child);\\n      }\\n    }\\n    for (const child of ariaChildren)\\n      visit(ariaNode, child);\\n    ariaNode.children.push(getCSSContent(element, \\\"::after\\\") || \\\"\\\");\\n    if (treatAsBlock)\\n      ariaNode.children.push(treatAsBlock);\\n    if (ariaNode.children.length === 1 && ariaNode.name === ariaNode.children[0])\\n      ariaNode.children = [];\\n    if (ariaNode.role === \\\"link\\\" && element.hasAttribute(\\\"href\\\")) {\\n      const href = element.getAttribute(\\\"href\\\");\\n      ariaNode.props[\\\"url\\\"] = href;\\n    }\\n  }\\n  beginAriaCaches();\\n  try {\\n    visit(snapshot.root, rootElement);\\n  } finally {\\n    endAriaCaches();\\n  }\\n  normalizeStringChildren(snapshot.root);\\n  normalizeGenericRoles(snapshot.root);\\n  return snapshot;\\n}\\nfunction ariaRef(element, role, name, options) {\\n  var _a;\\n  if (!(options == null ? void 0 : options.forAI))\\n    return void 0;\\n  let ariaRef2;\\n  ariaRef2 = element._ariaRef;\\n  if (!ariaRef2 || ariaRef2.role !== role || ariaRef2.name !== name) {\\n    ariaRef2 = { role, name, ref: ((_a = options == null ? void 0 : options.refPrefix) != null ? _a : \\\"\\\") + \\\"e\\\" + ++lastRef };\\n    element._ariaRef = ariaRef2;\\n  }\\n  return ariaRef2.ref;\\n}\\nfunction toAriaNode(element, options) {\\n  var _a;\\n  if (element.nodeName === \\\"IFRAME\\\") {\\n    return {\\n      role: \\\"iframe\\\",\\n      name: \\\"\\\",\\n      ref: ariaRef(element, \\\"iframe\\\", \\\"\\\", options),\\n      children: [],\\n      props: {},\\n      element,\\n      box: box(element),\\n      receivesPointerEvents: true\\n    };\\n  }\\n  const defaultRole = (options == null ? void 0 : options.forAI) ? \\\"generic\\\" : null;\\n  const role = (_a = getAriaRole(element)) != null ? _a : defaultRole;\\n  if (!role || role === \\\"presentation\\\" || role === \\\"none\\\")\\n    return null;\\n  const name = normalizeWhiteSpace(getElementAccessibleName(element, false) || \\\"\\\");\\n  const receivesPointerEvents3 = receivesPointerEvents(element);\\n  const result = {\\n    role,\\n    name,\\n    ref: ariaRef(element, role, name, options),\\n    children: [],\\n    props: {},\\n    element,\\n    box: box(element),\\n    receivesPointerEvents: receivesPointerEvents3\\n  };\\n  if (kAriaCheckedRoles.includes(role))\\n    result.checked = getAriaChecked(element);\\n  if (kAriaDisabledRoles.includes(role))\\n    result.disabled = getAriaDisabled(element);\\n  if (kAriaExpandedRoles.includes(role))\\n    result.expanded = getAriaExpanded(element);\\n  if (kAriaLevelRoles.includes(role))\\n    result.level = getAriaLevel(element);\\n  if (kAriaPressedRoles.includes(role))\\n    result.pressed = getAriaPressed(element);\\n  if (kAriaSelectedRoles.includes(role))\\n    result.selected = getAriaSelected(element);\\n  if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {\\n    if (element.type !== \\\"checkbox\\\" && element.type !== \\\"radio\\\" && (element.type !== \\\"file\\\" || getGlobalOptions().inputFileRoleTextbox))\\n      result.children = [element.value];\\n  }\\n  return result;\\n}\\nfunction normalizeGenericRoles(node) {\\n  const normalizeChildren = (node2) => {\\n    const result = [];\\n    for (const child of node2.children || []) {\\n      if (typeof child === \\\"string\\\") {\\n        result.push(child);\\n        continue;\\n      }\\n      const normalized = normalizeChildren(child);\\n      result.push(...normalized);\\n    }\\n    const removeSelf = node2.role === \\\"generic\\\" && result.length <= 1 && result.every((c) => typeof c !== \\\"string\\\" && receivesPointerEvents2(c));\\n    if (removeSelf)\\n      return result;\\n    node2.children = result;\\n    return [node2];\\n  };\\n  normalizeChildren(node);\\n}\\nfunction normalizeStringChildren(rootA11yNode) {\\n  const flushChildren = (buffer, normalizedChildren) => {\\n    if (!buffer.length)\\n      return;\\n    const text = normalizeWhiteSpace(buffer.join(\\\"\\\"));\\n    if (text)\\n      normalizedChildren.push(text);\\n    buffer.length = 0;\\n  };\\n  const visit = (ariaNode) => {\\n    const normalizedChildren = [];\\n    const buffer = [];\\n    for (const child of ariaNode.children || []) {\\n      if (typeof child === \\\"string\\\") {\\n        buffer.push(child);\\n      } else {\\n        flushChildren(buffer, normalizedChildren);\\n        visit(child);\\n        normalizedChildren.push(child);\\n      }\\n    }\\n    flushChildren(buffer, normalizedChildren);\\n    ariaNode.children = normalizedChildren.length ? normalizedChildren : [];\\n    if (ariaNode.children.length === 1 && ariaNode.children[0] === ariaNode.name)\\n      ariaNode.children = [];\\n  };\\n  visit(rootA11yNode);\\n}\\nfunction matchesText(text, template) {\\n  if (!template)\\n    return true;\\n  if (!text)\\n    return false;\\n  if (typeof template === \\\"string\\\")\\n    return text === template;\\n  return !!text.match(new RegExp(template.pattern));\\n}\\nfunction matchesTextNode(text, template) {\\n  return matchesText(text, template.text);\\n}\\nfunction matchesName(text, template) {\\n  return matchesText(text, template.name);\\n}\\nfunction matchesAriaTree(rootElement, template) {\\n  const snapshot = generateAriaTree(rootElement);\\n  const matches = matchesNodeDeep(snapshot.root, template, false, false);\\n  return {\\n    matches,\\n    received: {\\n      raw: renderAriaTree(snapshot, { mode: \\\"raw\\\" }),\\n      regex: renderAriaTree(snapshot, { mode: \\\"regex\\\" })\\n    }\\n  };\\n}\\nfunction getAllByAria(rootElement, template) {\\n  const root = generateAriaTree(rootElement).root;\\n  const matches = matchesNodeDeep(root, template, true, false);\\n  return matches.map((n) => n.element);\\n}\\nfunction matchesNode(node, template, isDeepEqual) {\\n  var _a;\\n  if (typeof node === \\\"string\\\" && template.kind === \\\"text\\\")\\n    return matchesTextNode(node, template);\\n  if (node === null || typeof node !== \\\"object\\\" || template.kind !== \\\"role\\\")\\n    return false;\\n  if (template.role !== \\\"fragment\\\" && template.role !== node.role)\\n    return false;\\n  if (template.checked !== void 0 && template.checked !== node.checked)\\n    return false;\\n  if (template.disabled !== void 0 && template.disabled !== node.disabled)\\n    return false;\\n  if (template.expanded !== void 0 && template.expanded !== node.expanded)\\n    return false;\\n  if (template.level !== void 0 && template.level !== node.level)\\n    return false;\\n  if (template.pressed !== void 0 && template.pressed !== node.pressed)\\n    return false;\\n  if (template.selected !== void 0 && template.selected !== node.selected)\\n    return false;\\n  if (!matchesName(node.name, template))\\n    return false;\\n  if (!matchesText(node.props.url, (_a = template.props) == null ? void 0 : _a.url))\\n    return false;\\n  if (template.containerMode === \\\"contain\\\")\\n    return containsList(node.children || [], template.children || []);\\n  if (template.containerMode === \\\"equal\\\")\\n    return listEqual(node.children || [], template.children || [], false);\\n  if (template.containerMode === \\\"deep-equal\\\" || isDeepEqual)\\n    return listEqual(node.children || [], template.children || [], true);\\n  return containsList(node.children || [], template.children || []);\\n}\\nfunction listEqual(children, template, isDeepEqual) {\\n  if (template.length !== children.length)\\n    return false;\\n  for (let i = 0; i < template.length; ++i) {\\n    if (!matchesNode(children[i], template[i], isDeepEqual))\\n      return false;\\n  }\\n  return true;\\n}\\nfunction containsList(children, template) {\\n  if (template.length > children.length)\\n    return false;\\n  const cc = children.slice();\\n  const tt = template.slice();\\n  for (const t of tt) {\\n    let c = cc.shift();\\n    while (c) {\\n      if (matchesNode(c, t, false))\\n        break;\\n      c = cc.shift();\\n    }\\n    if (!c)\\n      return false;\\n  }\\n  return true;\\n}\\nfunction matchesNodeDeep(root, template, collectAll, isDeepEqual) {\\n  const results = [];\\n  const visit = (node, parent) => {\\n    if (matchesNode(node, template, isDeepEqual)) {\\n      const result = typeof node === \\\"string\\\" ? parent : node;\\n      if (result)\\n        results.push(result);\\n      return !collectAll;\\n    }\\n    if (typeof node === \\\"string\\\")\\n      return false;\\n    for (const child of node.children || []) {\\n      if (visit(child, node))\\n        return true;\\n    }\\n    return false;\\n  };\\n  visit(root, null);\\n  return results;\\n}\\nfunction renderAriaTree(ariaSnapshot, options) {\\n  const lines = [];\\n  const includeText = (options == null ? void 0 : options.mode) === \\\"regex\\\" ? textContributesInfo : () => true;\\n  const renderString = (options == null ? void 0 : options.mode) === \\\"regex\\\" ? convertToBestGuessRegex : (str) => str;\\n  const visit = (ariaNode2, parentAriaNode, indent) => {\\n    if (typeof ariaNode2 === \\\"string\\\") {\\n      if (parentAriaNode && !includeText(parentAriaNode, ariaNode2))\\n        return;\\n      const text = yamlEscapeValueIfNeeded(renderString(ariaNode2));\\n      if (text)\\n        lines.push(indent + \\\"- text: \\\" + text);\\n      return;\\n    }\\n    let key = ariaNode2.role;\\n    if (ariaNode2.name && ariaNode2.name.length <= 900) {\\n      const name = renderString(ariaNode2.name);\\n      if (name) {\\n        const stringifiedName = name.startsWith(\\\"/\\\") && name.endsWith(\\\"/\\\") ? name : JSON.stringify(name);\\n        key += \\\" \\\" + stringifiedName;\\n      }\\n    }\\n    if (ariaNode2.checked === \\\"mixed\\\")\\n      key += ` [checked=mixed]`;\\n    if (ariaNode2.checked === true)\\n      key += ` [checked]`;\\n    if (ariaNode2.disabled)\\n      key += ` [disabled]`;\\n    if (ariaNode2.expanded)\\n      key += ` [expanded]`;\\n    if (ariaNode2.level)\\n      key += ` [level=${ariaNode2.level}]`;\\n    if (ariaNode2.pressed === \\\"mixed\\\")\\n      key += ` [pressed=mixed]`;\\n    if (ariaNode2.pressed === true)\\n      key += ` [pressed]`;\\n    if (ariaNode2.selected === true)\\n      key += ` [selected]`;\\n    if ((options == null ? void 0 : options.forAI) && receivesPointerEvents2(ariaNode2)) {\\n      const ref = ariaNode2.ref;\\n      const cursor = hasPointerCursor(ariaNode2) ? \\\" [cursor=pointer]\\\" : \\\"\\\";\\n      if (ref)\\n        key += ` [ref=${ref}]${cursor}`;\\n    }\\n    const escapedKey = indent + \\\"- \\\" + yamlEscapeKeyIfNeeded(key);\\n    const hasProps = !!Object.keys(ariaNode2.props).length;\\n    if (!ariaNode2.children.length && !hasProps) {\\n      lines.push(escapedKey);\\n    } else if (ariaNode2.children.length === 1 && typeof ariaNode2.children[0] === \\\"string\\\" && !hasProps) {\\n      const text = includeText(ariaNode2, ariaNode2.children[0]) ? renderString(ariaNode2.children[0]) : null;\\n      if (text)\\n        lines.push(escapedKey + \\\": \\\" + yamlEscapeValueIfNeeded(text));\\n      else\\n        lines.push(escapedKey);\\n    } else {\\n      lines.push(escapedKey + \\\":\\\");\\n      for (const [name, value] of Object.entries(ariaNode2.props))\\n        lines.push(indent + \\\"  - /\\\" + name + \\\": \\\" + yamlEscapeValueIfNeeded(value));\\n      for (const child of ariaNode2.children || [])\\n        visit(child, ariaNode2, indent + \\\"  \\\");\\n    }\\n  };\\n  const ariaNode = ariaSnapshot.root;\\n  if (ariaNode.role === \\\"fragment\\\") {\\n    for (const child of ariaNode.children || [])\\n      visit(child, ariaNode, \\\"\\\");\\n  } else {\\n    visit(ariaNode, null, \\\"\\\");\\n  }\\n  return lines.join(\\\"\\\\n\\\");\\n}\\nfunction convertToBestGuessRegex(text) {\\n  const dynamicContent = [\\n    // 2mb\\n    { regex: /\\\\b[\\\\d,.]+[bkmBKM]+\\\\b/, replacement: \\\"[\\\\\\\\d,.]+[bkmBKM]+\\\" },\\n    // 2ms, 20s\\n    { regex: /\\\\b\\\\d+[hmsp]+\\\\b/, replacement: \\\"\\\\\\\\d+[hmsp]+\\\" },\\n    { regex: /\\\\b[\\\\d,.]+[hmsp]+\\\\b/, replacement: \\\"[\\\\\\\\d,.]+[hmsp]+\\\" },\\n    // Do not replace single digits with regex by default.\\n    // 2+ digits: [Issue 22, 22.3, 2.33, 2,333]\\n    { regex: /\\\\b\\\\d+,\\\\d+\\\\b/, replacement: \\\"\\\\\\\\d+,\\\\\\\\d+\\\" },\\n    { regex: /\\\\b\\\\d+\\\\.\\\\d{2,}\\\\b/, replacement: \\\"\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\" },\\n    { regex: /\\\\b\\\\d{2,}\\\\.\\\\d+\\\\b/, replacement: \\\"\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\" },\\n    { regex: /\\\\b\\\\d{2,}\\\\b/, replacement: \\\"\\\\\\\\d+\\\" }\\n  ];\\n  let pattern = \\\"\\\";\\n  let lastIndex = 0;\\n  const combinedRegex = new RegExp(dynamicContent.map((r) => \\\"(\\\" + r.regex.source + \\\")\\\").join(\\\"|\\\"), \\\"g\\\");\\n  text.replace(combinedRegex, (match, ...args) => {\\n    const offset = args[args.length - 2];\\n    const groups = args.slice(0, -2);\\n    pattern += escapeRegExp(text.slice(lastIndex, offset));\\n    for (let i = 0; i < groups.length; i++) {\\n      if (groups[i]) {\\n        const { replacement } = dynamicContent[i];\\n        pattern += replacement;\\n        break;\\n      }\\n    }\\n    lastIndex = offset + match.length;\\n    return match;\\n  });\\n  if (!pattern)\\n    return text;\\n  pattern += escapeRegExp(text.slice(lastIndex));\\n  return String(new RegExp(pattern));\\n}\\nfunction textContributesInfo(node, text) {\\n  if (!text.length)\\n    return false;\\n  if (!node.name)\\n    return true;\\n  if (node.name.length > text.length)\\n    return false;\\n  const substr = text.length <= 200 && node.name.length <= 200 ? longestCommonSubstring(text, node.name) : \\\"\\\";\\n  let filtered = text;\\n  while (substr && filtered.includes(substr))\\n    filtered = filtered.replace(substr, \\\"\\\");\\n  return filtered.trim().length / text.length > 0.1;\\n}\\nfunction receivesPointerEvents2(ariaNode) {\\n  return ariaNode.box.visible && ariaNode.receivesPointerEvents;\\n}\\nfunction hasPointerCursor(ariaNode) {\\n  var _a;\\n  return ((_a = ariaNode.box.style) == null ? void 0 : _a.cursor) === \\\"pointer\\\";\\n}\\n\\n// packages/injected/src/highlight.css?inline\\nvar highlight_default = \\\":host{font-size:13px;font-family:system-ui,Ubuntu,Droid Sans,sans-serif;color:#333}svg{position:absolute;height:0}x-pw-tooltip{backdrop-filter:blur(5px);background-color:#fff;border-radius:6px;box-shadow:0 .5rem 1.2rem #0000004d;display:none;font-size:12.8px;font-weight:400;left:0;line-height:1.5;max-width:600px;position:absolute;top:0;padding:0;flex-direction:column;overflow:hidden}x-pw-tooltip-line{display:flex;max-width:600px;padding:6px;user-select:none;cursor:pointer}x-pw-tooltip-line.selectable:hover{background-color:#f2f2f2;overflow:hidden}x-pw-tooltip-footer{display:flex;max-width:600px;padding:6px;user-select:none;color:#777}x-pw-dialog{background-color:#fff;pointer-events:auto;border-radius:6px;box-shadow:0 .5rem 1.2rem #0000004d;display:flex;flex-direction:column;position:absolute;width:400px;height:150px;z-index:10;font-size:13px}x-pw-dialog-body{display:flex;flex-direction:column;flex:auto}x-pw-dialog-body label{margin:5px 8px;display:flex;flex-direction:row;align-items:center}x-pw-highlight{position:absolute;top:0;left:0;width:0;height:0}x-pw-action-point{position:absolute;width:20px;height:20px;background:red;border-radius:10px;margin:-10px 0 0 -10px;z-index:2}x-pw-separator{height:1px;margin:6px 9px;background:#949494e5}x-pw-tool-gripper{height:28px;width:24px;margin:2px 0;cursor:grab}x-pw-tool-gripper:active{cursor:grabbing}x-pw-tool-gripper>x-div{width:16px;height:16px;margin:6px 4px;clip-path:url(#icon-gripper);background-color:#555}x-pw-tools-list>label{display:flex;align-items:center;margin:0 10px;user-select:none}x-pw-tools-list{display:flex;width:100%;border-bottom:1px solid #dddddd}x-pw-tool-item{pointer-events:auto;height:28px;width:28px;border-radius:3px}x-pw-tool-item:not(.disabled){cursor:pointer}x-pw-tool-item:not(.disabled):hover{background-color:#dbdbdb}x-pw-tool-item.toggled{background-color:#8acae480}x-pw-tool-item.toggled:not(.disabled):hover{background-color:#8acae4c4}x-pw-tool-item>x-div{width:16px;height:16px;margin:6px;background-color:#3a3a3a}x-pw-tool-item.disabled>x-div{background-color:#61616180;cursor:default}x-pw-tool-item.record.toggled{background-color:transparent}x-pw-tool-item.record.toggled:not(.disabled):hover{background-color:#dbdbdb}x-pw-tool-item.record.toggled>x-div{background-color:#a1260d}x-pw-tool-item.record.disabled.toggled>x-div{opacity:.8}x-pw-tool-item.accept>x-div{background-color:#388a34}x-pw-tool-item.record>x-div{clip-path:url(#icon-circle-large-filled)}x-pw-tool-item.pick-locator>x-div{clip-path:url(#icon-inspect)}x-pw-tool-item.text>x-div{clip-path:url(#icon-whole-word)}x-pw-tool-item.visibility>x-div{clip-path:url(#icon-eye)}x-pw-tool-item.value>x-div{clip-path:url(#icon-symbol-constant)}x-pw-tool-item.snapshot>x-div{clip-path:url(#icon-gist)}x-pw-tool-item.accept>x-div{clip-path:url(#icon-check)}x-pw-tool-item.cancel>x-div{clip-path:url(#icon-close)}x-pw-tool-item.succeeded>x-div{clip-path:url(#icon-pass);background-color:#388a34!important}x-pw-overlay{position:absolute;top:0;max-width:min-content;z-index:2147483647;background:transparent;pointer-events:auto}x-pw-overlay x-pw-tools-list{background-color:#fffd;box-shadow:#0000001a 0 5px 5px;border-radius:3px;border-bottom:none}x-pw-overlay x-pw-tool-item{margin:2px}textarea.text-editor{font-family:system-ui,Ubuntu,Droid Sans,sans-serif;flex:auto;border:none;margin:6px 10px;color:#333;outline:1px solid transparent!important;resize:none;padding:0;font-size:13px}textarea.text-editor.does-not-match{outline:1px solid red!important}x-div{display:block}x-spacer{flex:auto}*{box-sizing:border-box}*[hidden]{display:none!important}x-locator-editor{flex:none;width:100%;height:60px;padding:4px;border-bottom:1px solid #dddddd;outline:1px solid transparent}x-locator-editor.does-not-match{outline:1px solid red}.CodeMirror{width:100%!important;height:100%!important}\\\\n\\\";\\n\\n// packages/injected/src/highlight.ts\\nvar Highlight = class {\\n  constructor(injectedScript) {\\n    this._renderedEntries = [];\\n    this._language = \\\"javascript\\\";\\n    this._injectedScript = injectedScript;\\n    const document = injectedScript.document;\\n    this._isUnderTest = injectedScript.isUnderTest;\\n    this._glassPaneElement = document.createElement(\\\"x-pw-glass\\\");\\n    this._glassPaneElement.style.position = \\\"fixed\\\";\\n    this._glassPaneElement.style.top = \\\"0\\\";\\n    this._glassPaneElement.style.right = \\\"0\\\";\\n    this._glassPaneElement.style.bottom = \\\"0\\\";\\n    this._glassPaneElement.style.left = \\\"0\\\";\\n    this._glassPaneElement.style.zIndex = \\\"2147483646\\\";\\n    this._glassPaneElement.style.pointerEvents = \\\"none\\\";\\n    this._glassPaneElement.style.display = \\\"flex\\\";\\n    this._glassPaneElement.style.backgroundColor = \\\"transparent\\\";\\n    for (const eventName of [\\\"click\\\", \\\"auxclick\\\", \\\"dragstart\\\", \\\"input\\\", \\\"keydown\\\", \\\"keyup\\\", \\\"pointerdown\\\", \\\"pointerup\\\", \\\"mousedown\\\", \\\"mouseup\\\", \\\"mouseleave\\\", \\\"focus\\\", \\\"scroll\\\"]) {\\n      this._glassPaneElement.addEventListener(eventName, (e) => {\\n        e.stopPropagation();\\n        e.stopImmediatePropagation();\\n      });\\n    }\\n    this._actionPointElement = document.createElement(\\\"x-pw-action-point\\\");\\n    this._actionPointElement.setAttribute(\\\"hidden\\\", \\\"true\\\");\\n    this._glassPaneShadow = this._glassPaneElement.attachShadow({ mode: this._isUnderTest ? \\\"open\\\" : \\\"closed\\\" });\\n    if (typeof this._glassPaneShadow.adoptedStyleSheets.push === \\\"function\\\") {\\n      const sheet = new this._injectedScript.window.CSSStyleSheet();\\n      sheet.replaceSync(highlight_default);\\n      this._glassPaneShadow.adoptedStyleSheets.push(sheet);\\n    } else {\\n      const styleElement = this._injectedScript.document.createElement(\\\"style\\\");\\n      styleElement.textContent = highlight_default;\\n      this._glassPaneShadow.appendChild(styleElement);\\n    }\\n    this._glassPaneShadow.appendChild(this._actionPointElement);\\n  }\\n  install() {\\n    if (this._injectedScript.document.documentElement && !this._injectedScript.document.documentElement.contains(this._glassPaneElement))\\n      this._injectedScript.document.documentElement.appendChild(this._glassPaneElement);\\n  }\\n  setLanguage(language) {\\n    this._language = language;\\n  }\\n  runHighlightOnRaf(selector) {\\n    if (this._rafRequest)\\n      this._injectedScript.utils.builtins.cancelAnimationFrame(this._rafRequest);\\n    const elements = this._injectedScript.querySelectorAll(selector, this._injectedScript.document.documentElement);\\n    const locator = asLocator(this._language, stringifySelector(selector));\\n    const color = elements.length > 1 ? \\\"#f6b26b7f\\\" : \\\"#6fa8dc7f\\\";\\n    this.updateHighlight(elements.map((element, index) => {\\n      const suffix = elements.length > 1 ? ` [${index + 1} of ${elements.length}]` : \\\"\\\";\\n      return { element, color, tooltipText: locator + suffix };\\n    }));\\n    this._rafRequest = this._injectedScript.utils.builtins.requestAnimationFrame(() => this.runHighlightOnRaf(selector));\\n  }\\n  uninstall() {\\n    if (this._rafRequest)\\n      this._injectedScript.utils.builtins.cancelAnimationFrame(this._rafRequest);\\n    this._glassPaneElement.remove();\\n  }\\n  showActionPoint(x, y) {\\n    this._actionPointElement.style.top = y + \\\"px\\\";\\n    this._actionPointElement.style.left = x + \\\"px\\\";\\n    this._actionPointElement.hidden = false;\\n  }\\n  hideActionPoint() {\\n    this._actionPointElement.hidden = true;\\n  }\\n  clearHighlight() {\\n    var _a, _b;\\n    for (const entry of this._renderedEntries) {\\n      (_a = entry.highlightElement) == null ? void 0 : _a.remove();\\n      (_b = entry.tooltipElement) == null ? void 0 : _b.remove();\\n    }\\n    this._renderedEntries = [];\\n  }\\n  maskElements(elements, color) {\\n    this.updateHighlight(elements.map((element) => ({ element, color })));\\n  }\\n  updateHighlight(entries) {\\n    if (this._highlightIsUpToDate(entries))\\n      return;\\n    this.clearHighlight();\\n    for (const entry of entries) {\\n      const highlightElement = this._createHighlightElement();\\n      this._glassPaneShadow.appendChild(highlightElement);\\n      let tooltipElement;\\n      if (entry.tooltipText) {\\n        tooltipElement = this._injectedScript.document.createElement(\\\"x-pw-tooltip\\\");\\n        this._glassPaneShadow.appendChild(tooltipElement);\\n        tooltipElement.style.top = \\\"0\\\";\\n        tooltipElement.style.left = \\\"0\\\";\\n        tooltipElement.style.display = \\\"flex\\\";\\n        const lineElement = this._injectedScript.document.createElement(\\\"x-pw-tooltip-line\\\");\\n        lineElement.textContent = entry.tooltipText;\\n        tooltipElement.appendChild(lineElement);\\n      }\\n      this._renderedEntries.push({ targetElement: entry.element, color: entry.color, tooltipElement, highlightElement });\\n    }\\n    for (const entry of this._renderedEntries) {\\n      entry.box = entry.targetElement.getBoundingClientRect();\\n      if (!entry.tooltipElement)\\n        continue;\\n      const { anchorLeft, anchorTop } = this.tooltipPosition(entry.box, entry.tooltipElement);\\n      entry.tooltipTop = anchorTop;\\n      entry.tooltipLeft = anchorLeft;\\n    }\\n    for (const entry of this._renderedEntries) {\\n      if (entry.tooltipElement) {\\n        entry.tooltipElement.style.top = entry.tooltipTop + \\\"px\\\";\\n        entry.tooltipElement.style.left = entry.tooltipLeft + \\\"px\\\";\\n      }\\n      const box2 = entry.box;\\n      entry.highlightElement.style.backgroundColor = entry.color;\\n      entry.highlightElement.style.left = box2.x + \\\"px\\\";\\n      entry.highlightElement.style.top = box2.y + \\\"px\\\";\\n      entry.highlightElement.style.width = box2.width + \\\"px\\\";\\n      entry.highlightElement.style.height = box2.height + \\\"px\\\";\\n      entry.highlightElement.style.display = \\\"block\\\";\\n      if (this._isUnderTest)\\n        console.error(\\\"Highlight box for test: \\\" + JSON.stringify({ x: box2.x, y: box2.y, width: box2.width, height: box2.height }));\\n    }\\n  }\\n  firstBox() {\\n    var _a;\\n    return (_a = this._renderedEntries[0]) == null ? void 0 : _a.box;\\n  }\\n  tooltipPosition(box2, tooltipElement) {\\n    const tooltipWidth = tooltipElement.offsetWidth;\\n    const tooltipHeight = tooltipElement.offsetHeight;\\n    const totalWidth = this._glassPaneElement.offsetWidth;\\n    const totalHeight = this._glassPaneElement.offsetHeight;\\n    let anchorLeft = box2.left;\\n    if (anchorLeft + tooltipWidth > totalWidth - 5)\\n      anchorLeft = totalWidth - tooltipWidth - 5;\\n    let anchorTop = box2.bottom + 5;\\n    if (anchorTop + tooltipHeight > totalHeight - 5) {\\n      if (box2.top > tooltipHeight + 5) {\\n        anchorTop = box2.top - tooltipHeight - 5;\\n      } else {\\n        anchorTop = totalHeight - 5 - tooltipHeight;\\n      }\\n    }\\n    return { anchorLeft, anchorTop };\\n  }\\n  _highlightIsUpToDate(entries) {\\n    if (entries.length !== this._renderedEntries.length)\\n      return false;\\n    for (let i = 0; i < this._renderedEntries.length; ++i) {\\n      if (entries[i].element !== this._renderedEntries[i].targetElement)\\n        return false;\\n      if (entries[i].color !== this._renderedEntries[i].color)\\n        return false;\\n      const oldBox = this._renderedEntries[i].box;\\n      if (!oldBox)\\n        return false;\\n      const box2 = entries[i].element.getBoundingClientRect();\\n      if (box2.top !== oldBox.top || box2.right !== oldBox.right || box2.bottom !== oldBox.bottom || box2.left !== oldBox.left)\\n        return false;\\n    }\\n    return true;\\n  }\\n  _createHighlightElement() {\\n    return this._injectedScript.document.createElement(\\\"x-pw-highlight\\\");\\n  }\\n  appendChild(element) {\\n    this._glassPaneShadow.appendChild(element);\\n  }\\n};\\n\\n// packages/injected/src/layoutSelectorUtils.ts\\nfunction boxRightOf(box1, box2, maxDistance) {\\n  const distance = box1.left - box2.right;\\n  if (distance < 0 || maxDistance !== void 0 && distance > maxDistance)\\n    return;\\n  return distance + Math.max(box2.bottom - box1.bottom, 0) + Math.max(box1.top - box2.top, 0);\\n}\\nfunction boxLeftOf(box1, box2, maxDistance) {\\n  const distance = box2.left - box1.right;\\n  if (distance < 0 || maxDistance !== void 0 && distance > maxDistance)\\n    return;\\n  return distance + Math.max(box2.bottom - box1.bottom, 0) + Math.max(box1.top - box2.top, 0);\\n}\\nfunction boxAbove(box1, box2, maxDistance) {\\n  const distance = box2.top - box1.bottom;\\n  if (distance < 0 || maxDistance !== void 0 && distance > maxDistance)\\n    return;\\n  return distance + Math.max(box1.left - box2.left, 0) + Math.max(box2.right - box1.right, 0);\\n}\\nfunction boxBelow(box1, box2, maxDistance) {\\n  const distance = box1.top - box2.bottom;\\n  if (distance < 0 || maxDistance !== void 0 && distance > maxDistance)\\n    return;\\n  return distance + Math.max(box1.left - box2.left, 0) + Math.max(box2.right - box1.right, 0);\\n}\\nfunction boxNear(box1, box2, maxDistance) {\\n  const kThreshold = maxDistance === void 0 ? 50 : maxDistance;\\n  let score = 0;\\n  if (box1.left - box2.right >= 0)\\n    score += box1.left - box2.right;\\n  if (box2.left - box1.right >= 0)\\n    score += box2.left - box1.right;\\n  if (box2.top - box1.bottom >= 0)\\n    score += box2.top - box1.bottom;\\n  if (box1.top - box2.bottom >= 0)\\n    score += box1.top - box2.bottom;\\n  return score > kThreshold ? void 0 : score;\\n}\\nvar kLayoutSelectorNames = [\\\"left-of\\\", \\\"right-of\\\", \\\"above\\\", \\\"below\\\", \\\"near\\\"];\\nfunction layoutSelectorScore(name, element, inner, maxDistance) {\\n  const box2 = element.getBoundingClientRect();\\n  const scorer = { \\\"left-of\\\": boxLeftOf, \\\"right-of\\\": boxRightOf, \\\"above\\\": boxAbove, \\\"below\\\": boxBelow, \\\"near\\\": boxNear }[name];\\n  let bestScore;\\n  for (const e of inner) {\\n    if (e === element)\\n      continue;\\n    const score = scorer(box2, e.getBoundingClientRect(), maxDistance);\\n    if (score === void 0)\\n      continue;\\n    if (bestScore === void 0 || score < bestScore)\\n      bestScore = score;\\n  }\\n  return bestScore;\\n}\\n\\n// packages/injected/src/selectorUtils.ts\\nfunction matchesComponentAttribute(obj, attr) {\\n  for (const token of attr.jsonPath) {\\n    if (obj !== void 0 && obj !== null)\\n      obj = obj[token];\\n  }\\n  return matchesAttributePart(obj, attr);\\n}\\nfunction matchesAttributePart(value, attr) {\\n  const objValue = typeof value === \\\"string\\\" && !attr.caseSensitive ? value.toUpperCase() : value;\\n  const attrValue = typeof attr.value === \\\"string\\\" && !attr.caseSensitive ? attr.value.toUpperCase() : attr.value;\\n  if (attr.op === \\\"<truthy>\\\")\\n    return !!objValue;\\n  if (attr.op === \\\"=\\\") {\\n    if (attrValue instanceof RegExp)\\n      return typeof objValue === \\\"string\\\" && !!objValue.match(attrValue);\\n    return objValue === attrValue;\\n  }\\n  if (typeof objValue !== \\\"string\\\" || typeof attrValue !== \\\"string\\\")\\n    return false;\\n  if (attr.op === \\\"*=\\\")\\n    return objValue.includes(attrValue);\\n  if (attr.op === \\\"^=\\\")\\n    return objValue.startsWith(attrValue);\\n  if (attr.op === \\\"$=\\\")\\n    return objValue.endsWith(attrValue);\\n  if (attr.op === \\\"|=\\\")\\n    return objValue === attrValue || objValue.startsWith(attrValue + \\\"-\\\");\\n  if (attr.op === \\\"~=\\\")\\n    return objValue.split(\\\" \\\").includes(attrValue);\\n  return false;\\n}\\nfunction shouldSkipForTextMatching(element) {\\n  const document = element.ownerDocument;\\n  return element.nodeName === \\\"SCRIPT\\\" || element.nodeName === \\\"NOSCRIPT\\\" || element.nodeName === \\\"STYLE\\\" || document.head && document.head.contains(element);\\n}\\nfunction elementText(cache, root) {\\n  let value = cache.get(root);\\n  if (value === void 0) {\\n    value = { full: \\\"\\\", normalized: \\\"\\\", immediate: [] };\\n    if (!shouldSkipForTextMatching(root)) {\\n      let currentImmediate = \\\"\\\";\\n      if (root instanceof HTMLInputElement && (root.type === \\\"submit\\\" || root.type === \\\"button\\\")) {\\n        value = { full: root.value, normalized: normalizeWhiteSpace(root.value), immediate: [root.value] };\\n      } else {\\n        for (let child = root.firstChild; child; child = child.nextSibling) {\\n          if (child.nodeType === Node.TEXT_NODE) {\\n            value.full += child.nodeValue || \\\"\\\";\\n            currentImmediate += child.nodeValue || \\\"\\\";\\n          } else if (child.nodeType === Node.COMMENT_NODE) {\\n            continue;\\n          } else {\\n            if (currentImmediate)\\n              value.immediate.push(currentImmediate);\\n            currentImmediate = \\\"\\\";\\n            if (child.nodeType === Node.ELEMENT_NODE)\\n              value.full += elementText(cache, child).full;\\n          }\\n        }\\n        if (currentImmediate)\\n          value.immediate.push(currentImmediate);\\n        if (root.shadowRoot)\\n          value.full += elementText(cache, root.shadowRoot).full;\\n        if (value.full)\\n          value.normalized = normalizeWhiteSpace(value.full);\\n      }\\n    }\\n    cache.set(root, value);\\n  }\\n  return value;\\n}\\nfunction elementMatchesText(cache, element, matcher) {\\n  if (shouldSkipForTextMatching(element))\\n    return \\\"none\\\";\\n  if (!matcher(elementText(cache, element)))\\n    return \\\"none\\\";\\n  for (let child = element.firstChild; child; child = child.nextSibling) {\\n    if (child.nodeType === Node.ELEMENT_NODE && matcher(elementText(cache, child)))\\n      return \\\"selfAndChildren\\\";\\n  }\\n  if (element.shadowRoot && matcher(elementText(cache, element.shadowRoot)))\\n    return \\\"selfAndChildren\\\";\\n  return \\\"self\\\";\\n}\\nfunction getElementLabels(textCache, element) {\\n  const labels = getAriaLabelledByElements(element);\\n  if (labels)\\n    return labels.map((label) => elementText(textCache, label));\\n  const ariaLabel = element.getAttribute(\\\"aria-label\\\");\\n  if (ariaLabel !== null && !!ariaLabel.trim())\\n    return [{ full: ariaLabel, normalized: normalizeWhiteSpace(ariaLabel), immediate: [ariaLabel] }];\\n  const isNonHiddenInput = element.nodeName === \\\"INPUT\\\" && element.type !== \\\"hidden\\\";\\n  if ([\\\"BUTTON\\\", \\\"METER\\\", \\\"OUTPUT\\\", \\\"PROGRESS\\\", \\\"SELECT\\\", \\\"TEXTAREA\\\"].includes(element.nodeName) || isNonHiddenInput) {\\n    const labels2 = element.labels;\\n    if (labels2)\\n      return [...labels2].map((label) => elementText(textCache, label));\\n  }\\n  return [];\\n}\\n\\n// packages/injected/src/reactSelectorEngine.ts\\nfunction getFunctionComponentName(component) {\\n  return component.displayName || component.name || \\\"Anonymous\\\";\\n}\\nfunction getComponentName(reactElement) {\\n  if (reactElement.type) {\\n    switch (typeof reactElement.type) {\\n      case \\\"function\\\":\\n        return getFunctionComponentName(reactElement.type);\\n      case \\\"string\\\":\\n        return reactElement.type;\\n      case \\\"object\\\":\\n        return reactElement.type.displayName || (reactElement.type.render ? getFunctionComponentName(reactElement.type.render) : \\\"\\\");\\n    }\\n  }\\n  if (reactElement._currentElement) {\\n    const elementType = reactElement._currentElement.type;\\n    if (typeof elementType === \\\"string\\\")\\n      return elementType;\\n    if (typeof elementType === \\\"function\\\")\\n      return elementType.displayName || elementType.name || \\\"Anonymous\\\";\\n  }\\n  return \\\"\\\";\\n}\\nfunction getComponentKey(reactElement) {\\n  var _a, _b;\\n  return (_b = reactElement.key) != null ? _b : (_a = reactElement._currentElement) == null ? void 0 : _a.key;\\n}\\nfunction getChildren(reactElement) {\\n  if (reactElement.child) {\\n    const children = [];\\n    for (let child = reactElement.child; child; child = child.sibling)\\n      children.push(child);\\n    return children;\\n  }\\n  if (!reactElement._currentElement)\\n    return [];\\n  const isKnownElement = (reactElement2) => {\\n    var _a;\\n    const elementType = (_a = reactElement2._currentElement) == null ? void 0 : _a.type;\\n    return typeof elementType === \\\"function\\\" || typeof elementType === \\\"string\\\";\\n  };\\n  if (reactElement._renderedComponent) {\\n    const child = reactElement._renderedComponent;\\n    return isKnownElement(child) ? [child] : [];\\n  }\\n  if (reactElement._renderedChildren)\\n    return [...Object.values(reactElement._renderedChildren)].filter(isKnownElement);\\n  return [];\\n}\\nfunction getProps(reactElement) {\\n  var _a;\\n  const props = (\\n    // React 16+\\n    reactElement.memoizedProps || // React 15\\n    ((_a = reactElement._currentElement) == null ? void 0 : _a.props)\\n  );\\n  if (!props || typeof props === \\\"string\\\")\\n    return props;\\n  const result = { ...props };\\n  delete result.children;\\n  return result;\\n}\\nfunction buildComponentsTree(reactElement) {\\n  var _a;\\n  const treeNode = {\\n    key: getComponentKey(reactElement),\\n    name: getComponentName(reactElement),\\n    children: getChildren(reactElement).map(buildComponentsTree),\\n    rootElements: [],\\n    props: getProps(reactElement)\\n  };\\n  const rootElement = (\\n    // React 16+\\n    // @see https://github.com/baruchvlz/resq/blob/5c15a5e04d3f7174087248f5a158c3d6dcc1ec72/src/utils.js#L29\\n    reactElement.stateNode || // React 15\\n    reactElement._hostNode || ((_a = reactElement._renderedComponent) == null ? void 0 : _a._hostNode)\\n  );\\n  if (rootElement instanceof Element) {\\n    treeNode.rootElements.push(rootElement);\\n  } else {\\n    for (const child of treeNode.children)\\n      treeNode.rootElements.push(...child.rootElements);\\n  }\\n  return treeNode;\\n}\\nfunction filterComponentsTree(treeNode, searchFn, result = []) {\\n  if (searchFn(treeNode))\\n    result.push(treeNode);\\n  for (const child of treeNode.children)\\n    filterComponentsTree(child, searchFn, result);\\n  return result;\\n}\\nfunction findReactRoots(root, roots = []) {\\n  const document = root.ownerDocument || root;\\n  const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\\n  do {\\n    const node = walker.currentNode;\\n    const reactNode = node;\\n    const rootKey = Object.keys(reactNode).find((key) => key.startsWith(\\\"__reactContainer\\\") && reactNode[key] !== null);\\n    if (rootKey) {\\n      roots.push(reactNode[rootKey].stateNode.current);\\n    } else {\\n      const legacyRootKey = \\\"_reactRootContainer\\\";\\n      if (reactNode.hasOwnProperty(legacyRootKey) && reactNode[legacyRootKey] !== null) {\\n        roots.push(reactNode[legacyRootKey]._internalRoot.current);\\n      }\\n    }\\n    if (node instanceof Element && node.hasAttribute(\\\"data-reactroot\\\")) {\\n      for (const key of Object.keys(node)) {\\n        if (key.startsWith(\\\"__reactInternalInstance\\\") || key.startsWith(\\\"__reactFiber\\\"))\\n          roots.push(node[key]);\\n      }\\n    }\\n    const shadowRoot = node instanceof Element ? node.shadowRoot : null;\\n    if (shadowRoot)\\n      findReactRoots(shadowRoot, roots);\\n  } while (walker.nextNode());\\n  return roots;\\n}\\nvar createReactEngine = () => ({\\n  queryAll(scope, selector) {\\n    const { name, attributes } = parseAttributeSelector(selector, false);\\n    const reactRoots = findReactRoots(scope.ownerDocument || scope);\\n    const trees = reactRoots.map((reactRoot) => buildComponentsTree(reactRoot));\\n    const treeNodes = trees.map((tree) => filterComponentsTree(tree, (treeNode) => {\\n      var _a;\\n      const props = (_a = treeNode.props) != null ? _a : {};\\n      if (treeNode.key !== void 0)\\n        props.key = treeNode.key;\\n      if (name && treeNode.name !== name)\\n        return false;\\n      if (treeNode.rootElements.some((domNode) => !isInsideScope(scope, domNode)))\\n        return false;\\n      for (const attr of attributes) {\\n        if (!matchesComponentAttribute(props, attr))\\n          return false;\\n      }\\n      return true;\\n    })).flat();\\n    const allRootElements = /* @__PURE__ */ new Set();\\n    for (const treeNode of treeNodes) {\\n      for (const domNode of treeNode.rootElements)\\n        allRootElements.add(domNode);\\n    }\\n    return [...allRootElements];\\n  }\\n});\\n\\n// packages/injected/src/roleSelectorEngine.ts\\nvar kSupportedAttributes = [\\\"selected\\\", \\\"checked\\\", \\\"pressed\\\", \\\"expanded\\\", \\\"level\\\", \\\"disabled\\\", \\\"name\\\", \\\"include-hidden\\\"];\\nkSupportedAttributes.sort();\\nfunction validateSupportedRole(attr, roles, role) {\\n  if (!roles.includes(role))\\n    throw new Error(`\\\"${attr}\\\" attribute is only supported for roles: ${roles.slice().sort().map((role2) => `\\\"${role2}\\\"`).join(\\\", \\\")}`);\\n}\\nfunction validateSupportedValues(attr, values) {\\n  if (attr.op !== \\\"<truthy>\\\" && !values.includes(attr.value))\\n    throw new Error(`\\\"${attr.name}\\\" must be one of ${values.map((v) => JSON.stringify(v)).join(\\\", \\\")}`);\\n}\\nfunction validateSupportedOp(attr, ops) {\\n  if (!ops.includes(attr.op))\\n    throw new Error(`\\\"${attr.name}\\\" does not support \\\"${attr.op}\\\" matcher`);\\n}\\nfunction validateAttributes(attrs, role) {\\n  const options = { role };\\n  for (const attr of attrs) {\\n    switch (attr.name) {\\n      case \\\"checked\\\": {\\n        validateSupportedRole(attr.name, kAriaCheckedRoles, role);\\n        validateSupportedValues(attr, [true, false, \\\"mixed\\\"]);\\n        validateSupportedOp(attr, [\\\"<truthy>\\\", \\\"=\\\"]);\\n        options.checked = attr.op === \\\"<truthy>\\\" ? true : attr.value;\\n        break;\\n      }\\n      case \\\"pressed\\\": {\\n        validateSupportedRole(attr.name, kAriaPressedRoles, role);\\n        validateSupportedValues(attr, [true, false, \\\"mixed\\\"]);\\n        validateSupportedOp(attr, [\\\"<truthy>\\\", \\\"=\\\"]);\\n        options.pressed = attr.op === \\\"<truthy>\\\" ? true : attr.value;\\n        break;\\n      }\\n      case \\\"selected\\\": {\\n        validateSupportedRole(attr.name, kAriaSelectedRoles, role);\\n        validateSupportedValues(attr, [true, false]);\\n        validateSupportedOp(attr, [\\\"<truthy>\\\", \\\"=\\\"]);\\n        options.selected = attr.op === \\\"<truthy>\\\" ? true : attr.value;\\n        break;\\n      }\\n      case \\\"expanded\\\": {\\n        validateSupportedRole(attr.name, kAriaExpandedRoles, role);\\n        validateSupportedValues(attr, [true, false]);\\n        validateSupportedOp(attr, [\\\"<truthy>\\\", \\\"=\\\"]);\\n        options.expanded = attr.op === \\\"<truthy>\\\" ? true : attr.value;\\n        break;\\n      }\\n      case \\\"level\\\": {\\n        validateSupportedRole(attr.name, kAriaLevelRoles, role);\\n        if (typeof attr.value === \\\"string\\\")\\n          attr.value = +attr.value;\\n        if (attr.op !== \\\"=\\\" || typeof attr.value !== \\\"number\\\" || Number.isNaN(attr.value))\\n          throw new Error(`\\\"level\\\" attribute must be compared to a number`);\\n        options.level = attr.value;\\n        break;\\n      }\\n      case \\\"disabled\\\": {\\n        validateSupportedValues(attr, [true, false]);\\n        validateSupportedOp(attr, [\\\"<truthy>\\\", \\\"=\\\"]);\\n        options.disabled = attr.op === \\\"<truthy>\\\" ? true : attr.value;\\n        break;\\n      }\\n      case \\\"name\\\": {\\n        if (attr.op === \\\"<truthy>\\\")\\n          throw new Error(`\\\"name\\\" attribute must have a value`);\\n        if (typeof attr.value !== \\\"string\\\" && !(attr.value instanceof RegExp))\\n          throw new Error(`\\\"name\\\" attribute must be a string or a regular expression`);\\n        options.name = attr.value;\\n        options.nameOp = attr.op;\\n        options.exact = attr.caseSensitive;\\n        break;\\n      }\\n      case \\\"include-hidden\\\": {\\n        validateSupportedValues(attr, [true, false]);\\n        validateSupportedOp(attr, [\\\"<truthy>\\\", \\\"=\\\"]);\\n        options.includeHidden = attr.op === \\\"<truthy>\\\" ? true : attr.value;\\n        break;\\n      }\\n      default: {\\n        throw new Error(`Unknown attribute \\\"${attr.name}\\\", must be one of ${kSupportedAttributes.map((a) => `\\\"${a}\\\"`).join(\\\", \\\")}.`);\\n      }\\n    }\\n  }\\n  return options;\\n}\\nfunction queryRole(scope, options, internal) {\\n  const result = [];\\n  const match = (element) => {\\n    if (getAriaRole(element) !== options.role)\\n      return;\\n    if (options.selected !== void 0 && getAriaSelected(element) !== options.selected)\\n      return;\\n    if (options.checked !== void 0 && getAriaChecked(element) !== options.checked)\\n      return;\\n    if (options.pressed !== void 0 && getAriaPressed(element) !== options.pressed)\\n      return;\\n    if (options.expanded !== void 0 && getAriaExpanded(element) !== options.expanded)\\n      return;\\n    if (options.level !== void 0 && getAriaLevel(element) !== options.level)\\n      return;\\n    if (options.disabled !== void 0 && getAriaDisabled(element) !== options.disabled)\\n      return;\\n    if (!options.includeHidden) {\\n      const isHidden = isElementHiddenForAria(element);\\n      if (isHidden)\\n        return;\\n    }\\n    if (options.name !== void 0) {\\n      const accessibleName = normalizeWhiteSpace(getElementAccessibleName(element, !!options.includeHidden));\\n      if (typeof options.name === \\\"string\\\")\\n        options.name = normalizeWhiteSpace(options.name);\\n      if (internal && !options.exact && options.nameOp === \\\"=\\\")\\n        options.nameOp = \\\"*=\\\";\\n      if (!matchesAttributePart(accessibleName, { name: \\\"\\\", jsonPath: [], op: options.nameOp || \\\"=\\\", value: options.name, caseSensitive: !!options.exact }))\\n        return;\\n    }\\n    result.push(element);\\n  };\\n  const query = (root) => {\\n    const shadows = [];\\n    if (root.shadowRoot)\\n      shadows.push(root.shadowRoot);\\n    for (const element of root.querySelectorAll(\\\"*\\\")) {\\n      match(element);\\n      if (element.shadowRoot)\\n        shadows.push(element.shadowRoot);\\n    }\\n    shadows.forEach(query);\\n  };\\n  query(scope);\\n  return result;\\n}\\nfunction createRoleEngine(internal) {\\n  return {\\n    queryAll: (scope, selector) => {\\n      const parsed = parseAttributeSelector(selector, true);\\n      const role = parsed.name.toLowerCase();\\n      if (!role)\\n        throw new Error(`Role must not be empty`);\\n      const options = validateAttributes(parsed.attributes, role);\\n      beginAriaCaches();\\n      try {\\n        return queryRole(scope, options, internal);\\n      } finally {\\n        endAriaCaches();\\n      }\\n    }\\n  };\\n}\\n\\n// packages/injected/src/selectorEvaluator.ts\\nvar SelectorEvaluatorImpl = class {\\n  constructor() {\\n    this._retainCacheCounter = 0;\\n    this._cacheText = /* @__PURE__ */ new Map();\\n    this._cacheQueryCSS = /* @__PURE__ */ new Map();\\n    this._cacheMatches = /* @__PURE__ */ new Map();\\n    this._cacheQuery = /* @__PURE__ */ new Map();\\n    this._cacheMatchesSimple = /* @__PURE__ */ new Map();\\n    this._cacheMatchesParents = /* @__PURE__ */ new Map();\\n    this._cacheCallMatches = /* @__PURE__ */ new Map();\\n    this._cacheCallQuery = /* @__PURE__ */ new Map();\\n    this._cacheQuerySimple = /* @__PURE__ */ new Map();\\n    this._engines = /* @__PURE__ */ new Map();\\n    this._engines.set(\\\"not\\\", notEngine);\\n    this._engines.set(\\\"is\\\", isEngine);\\n    this._engines.set(\\\"where\\\", isEngine);\\n    this._engines.set(\\\"has\\\", hasEngine);\\n    this._engines.set(\\\"scope\\\", scopeEngine);\\n    this._engines.set(\\\"light\\\", lightEngine);\\n    this._engines.set(\\\"visible\\\", visibleEngine);\\n    this._engines.set(\\\"text\\\", textEngine);\\n    this._engines.set(\\\"text-is\\\", textIsEngine);\\n    this._engines.set(\\\"text-matches\\\", textMatchesEngine);\\n    this._engines.set(\\\"has-text\\\", hasTextEngine);\\n    this._engines.set(\\\"right-of\\\", createLayoutEngine(\\\"right-of\\\"));\\n    this._engines.set(\\\"left-of\\\", createLayoutEngine(\\\"left-of\\\"));\\n    this._engines.set(\\\"above\\\", createLayoutEngine(\\\"above\\\"));\\n    this._engines.set(\\\"below\\\", createLayoutEngine(\\\"below\\\"));\\n    this._engines.set(\\\"near\\\", createLayoutEngine(\\\"near\\\"));\\n    this._engines.set(\\\"nth-match\\\", nthMatchEngine);\\n    const allNames = [...this._engines.keys()];\\n    allNames.sort();\\n    const parserNames = [...customCSSNames];\\n    parserNames.sort();\\n    if (allNames.join(\\\"|\\\") !== parserNames.join(\\\"|\\\"))\\n      throw new Error(`Please keep customCSSNames in sync with evaluator engines: ${allNames.join(\\\"|\\\")} vs ${parserNames.join(\\\"|\\\")}`);\\n  }\\n  begin() {\\n    ++this._retainCacheCounter;\\n  }\\n  end() {\\n    --this._retainCacheCounter;\\n    if (!this._retainCacheCounter) {\\n      this._cacheQueryCSS.clear();\\n      this._cacheMatches.clear();\\n      this._cacheQuery.clear();\\n      this._cacheMatchesSimple.clear();\\n      this._cacheMatchesParents.clear();\\n      this._cacheCallMatches.clear();\\n      this._cacheCallQuery.clear();\\n      this._cacheQuerySimple.clear();\\n      this._cacheText.clear();\\n    }\\n  }\\n  _cached(cache, main, rest, cb) {\\n    if (!cache.has(main))\\n      cache.set(main, []);\\n    const entries = cache.get(main);\\n    const entry = entries.find((e) => rest.every((value, index) => e.rest[index] === value));\\n    if (entry)\\n      return entry.result;\\n    const result = cb();\\n    entries.push({ rest, result });\\n    return result;\\n  }\\n  _checkSelector(s) {\\n    const wellFormed = typeof s === \\\"object\\\" && s && (Array.isArray(s) || \\\"simples\\\" in s && s.simples.length);\\n    if (!wellFormed)\\n      throw new Error(`Malformed selector \\\"${s}\\\"`);\\n    return s;\\n  }\\n  matches(element, s, context) {\\n    const selector = this._checkSelector(s);\\n    this.begin();\\n    try {\\n      return this._cached(this._cacheMatches, element, [selector, context.scope, context.pierceShadow, context.originalScope], () => {\\n        if (Array.isArray(selector))\\n          return this._matchesEngine(isEngine, element, selector, context);\\n        if (this._hasScopeClause(selector))\\n          context = this._expandContextForScopeMatching(context);\\n        if (!this._matchesSimple(element, selector.simples[selector.simples.length - 1].selector, context))\\n          return false;\\n        return this._matchesParents(element, selector, selector.simples.length - 2, context);\\n      });\\n    } finally {\\n      this.end();\\n    }\\n  }\\n  query(context, s) {\\n    const selector = this._checkSelector(s);\\n    this.begin();\\n    try {\\n      return this._cached(this._cacheQuery, selector, [context.scope, context.pierceShadow, context.originalScope], () => {\\n        if (Array.isArray(selector))\\n          return this._queryEngine(isEngine, context, selector);\\n        if (this._hasScopeClause(selector))\\n          context = this._expandContextForScopeMatching(context);\\n        const previousScoreMap = this._scoreMap;\\n        this._scoreMap = /* @__PURE__ */ new Map();\\n        let elements = this._querySimple(context, selector.simples[selector.simples.length - 1].selector);\\n        elements = elements.filter((element) => this._matchesParents(element, selector, selector.simples.length - 2, context));\\n        if (this._scoreMap.size) {\\n          elements.sort((a, b) => {\\n            const aScore = this._scoreMap.get(a);\\n            const bScore = this._scoreMap.get(b);\\n            if (aScore === bScore)\\n              return 0;\\n            if (aScore === void 0)\\n              return 1;\\n            if (bScore === void 0)\\n              return -1;\\n            return aScore - bScore;\\n          });\\n        }\\n        this._scoreMap = previousScoreMap;\\n        return elements;\\n      });\\n    } finally {\\n      this.end();\\n    }\\n  }\\n  _markScore(element, score) {\\n    if (this._scoreMap)\\n      this._scoreMap.set(element, score);\\n  }\\n  _hasScopeClause(selector) {\\n    return selector.simples.some((simple) => simple.selector.functions.some((f) => f.name === \\\"scope\\\"));\\n  }\\n  _expandContextForScopeMatching(context) {\\n    if (context.scope.nodeType !== 1)\\n      return context;\\n    const scope = parentElementOrShadowHost(context.scope);\\n    if (!scope)\\n      return context;\\n    return { ...context, scope, originalScope: context.originalScope || context.scope };\\n  }\\n  _matchesSimple(element, simple, context) {\\n    return this._cached(this._cacheMatchesSimple, element, [simple, context.scope, context.pierceShadow, context.originalScope], () => {\\n      if (element === context.scope)\\n        return false;\\n      if (simple.css && !this._matchesCSS(element, simple.css))\\n        return false;\\n      for (const func of simple.functions) {\\n        if (!this._matchesEngine(this._getEngine(func.name), element, func.args, context))\\n          return false;\\n      }\\n      return true;\\n    });\\n  }\\n  _querySimple(context, simple) {\\n    if (!simple.functions.length)\\n      return this._queryCSS(context, simple.css || \\\"*\\\");\\n    return this._cached(this._cacheQuerySimple, simple, [context.scope, context.pierceShadow, context.originalScope], () => {\\n      let css = simple.css;\\n      const funcs = simple.functions;\\n      if (css === \\\"*\\\" && funcs.length)\\n        css = void 0;\\n      let elements;\\n      let firstIndex = -1;\\n      if (css !== void 0) {\\n        elements = this._queryCSS(context, css);\\n      } else {\\n        firstIndex = funcs.findIndex((func) => this._getEngine(func.name).query !== void 0);\\n        if (firstIndex === -1)\\n          firstIndex = 0;\\n        elements = this._queryEngine(this._getEngine(funcs[firstIndex].name), context, funcs[firstIndex].args);\\n      }\\n      for (let i = 0; i < funcs.length; i++) {\\n        if (i === firstIndex)\\n          continue;\\n        const engine = this._getEngine(funcs[i].name);\\n        if (engine.matches !== void 0)\\n          elements = elements.filter((e) => this._matchesEngine(engine, e, funcs[i].args, context));\\n      }\\n      for (let i = 0; i < funcs.length; i++) {\\n        if (i === firstIndex)\\n          continue;\\n        const engine = this._getEngine(funcs[i].name);\\n        if (engine.matches === void 0)\\n          elements = elements.filter((e) => this._matchesEngine(engine, e, funcs[i].args, context));\\n      }\\n      return elements;\\n    });\\n  }\\n  _matchesParents(element, complex, index, context) {\\n    if (index < 0)\\n      return true;\\n    return this._cached(this._cacheMatchesParents, element, [complex, index, context.scope, context.pierceShadow, context.originalScope], () => {\\n      const { selector: simple, combinator } = complex.simples[index];\\n      if (combinator === \\\">\\\") {\\n        const parent = parentElementOrShadowHostInContext(element, context);\\n        if (!parent || !this._matchesSimple(parent, simple, context))\\n          return false;\\n        return this._matchesParents(parent, complex, index - 1, context);\\n      }\\n      if (combinator === \\\"+\\\") {\\n        const previousSibling = previousSiblingInContext(element, context);\\n        if (!previousSibling || !this._matchesSimple(previousSibling, simple, context))\\n          return false;\\n        return this._matchesParents(previousSibling, complex, index - 1, context);\\n      }\\n      if (combinator === \\\"\\\") {\\n        let parent = parentElementOrShadowHostInContext(element, context);\\n        while (parent) {\\n          if (this._matchesSimple(parent, simple, context)) {\\n            if (this._matchesParents(parent, complex, index - 1, context))\\n              return true;\\n            if (complex.simples[index - 1].combinator === \\\"\\\")\\n              break;\\n          }\\n          parent = parentElementOrShadowHostInContext(parent, context);\\n        }\\n        return false;\\n      }\\n      if (combinator === \\\"~\\\") {\\n        let previousSibling = previousSiblingInContext(element, context);\\n        while (previousSibling) {\\n          if (this._matchesSimple(previousSibling, simple, context)) {\\n            if (this._matchesParents(previousSibling, complex, index - 1, context))\\n              return true;\\n            if (complex.simples[index - 1].combinator === \\\"~\\\")\\n              break;\\n          }\\n          previousSibling = previousSiblingInContext(previousSibling, context);\\n        }\\n        return false;\\n      }\\n      if (combinator === \\\">=\\\") {\\n        let parent = element;\\n        while (parent) {\\n          if (this._matchesSimple(parent, simple, context)) {\\n            if (this._matchesParents(parent, complex, index - 1, context))\\n              return true;\\n            if (complex.simples[index - 1].combinator === \\\"\\\")\\n              break;\\n          }\\n          parent = parentElementOrShadowHostInContext(parent, context);\\n        }\\n        return false;\\n      }\\n      throw new Error(`Unsupported combinator \\\"${combinator}\\\"`);\\n    });\\n  }\\n  _matchesEngine(engine, element, args, context) {\\n    if (engine.matches)\\n      return this._callMatches(engine, element, args, context);\\n    if (engine.query)\\n      return this._callQuery(engine, args, context).includes(element);\\n    throw new Error(`Selector engine should implement \\\"matches\\\" or \\\"query\\\"`);\\n  }\\n  _queryEngine(engine, context, args) {\\n    if (engine.query)\\n      return this._callQuery(engine, args, context);\\n    if (engine.matches)\\n      return this._queryCSS(context, \\\"*\\\").filter((element) => this._callMatches(engine, element, args, context));\\n    throw new Error(`Selector engine should implement \\\"matches\\\" or \\\"query\\\"`);\\n  }\\n  _callMatches(engine, element, args, context) {\\n    return this._cached(this._cacheCallMatches, element, [engine, context.scope, context.pierceShadow, context.originalScope, ...args], () => {\\n      return engine.matches(element, args, context, this);\\n    });\\n  }\\n  _callQuery(engine, args, context) {\\n    return this._cached(this._cacheCallQuery, engine, [context.scope, context.pierceShadow, context.originalScope, ...args], () => {\\n      return engine.query(context, args, this);\\n    });\\n  }\\n  _matchesCSS(element, css) {\\n    return element.matches(css);\\n  }\\n  _queryCSS(context, css) {\\n    return this._cached(this._cacheQueryCSS, css, [context.scope, context.pierceShadow, context.originalScope], () => {\\n      let result = [];\\n      function query(root) {\\n        result = result.concat([...root.querySelectorAll(css)]);\\n        if (!context.pierceShadow)\\n          return;\\n        if (root.shadowRoot)\\n          query(root.shadowRoot);\\n        for (const element of root.querySelectorAll(\\\"*\\\")) {\\n          if (element.shadowRoot)\\n            query(element.shadowRoot);\\n        }\\n      }\\n      query(context.scope);\\n      return result;\\n    });\\n  }\\n  _getEngine(name) {\\n    const engine = this._engines.get(name);\\n    if (!engine)\\n      throw new Error(`Unknown selector engine \\\"${name}\\\"`);\\n    return engine;\\n  }\\n};\\nvar isEngine = {\\n  matches(element, args, context, evaluator) {\\n    if (args.length === 0)\\n      throw new Error(`\\\"is\\\" engine expects non-empty selector list`);\\n    return args.some((selector) => evaluator.matches(element, selector, context));\\n  },\\n  query(context, args, evaluator) {\\n    if (args.length === 0)\\n      throw new Error(`\\\"is\\\" engine expects non-empty selector list`);\\n    let elements = [];\\n    for (const arg of args)\\n      elements = elements.concat(evaluator.query(context, arg));\\n    return args.length === 1 ? elements : sortInDOMOrder(elements);\\n  }\\n};\\nvar hasEngine = {\\n  matches(element, args, context, evaluator) {\\n    if (args.length === 0)\\n      throw new Error(`\\\"has\\\" engine expects non-empty selector list`);\\n    return evaluator.query({ ...context, scope: element }, args).length > 0;\\n  }\\n  // TODO: we can implement efficient \\\"query\\\" by matching \\\"args\\\" and returning\\n  // all parents/descendants, just have to be careful with the \\\":scope\\\" matching.\\n};\\nvar scopeEngine = {\\n  matches(element, args, context, evaluator) {\\n    if (args.length !== 0)\\n      throw new Error(`\\\"scope\\\" engine expects no arguments`);\\n    const actualScope = context.originalScope || context.scope;\\n    if (actualScope.nodeType === 9)\\n      return element === actualScope.documentElement;\\n    return element === actualScope;\\n  },\\n  query(context, args, evaluator) {\\n    if (args.length !== 0)\\n      throw new Error(`\\\"scope\\\" engine expects no arguments`);\\n    const actualScope = context.originalScope || context.scope;\\n    if (actualScope.nodeType === 9) {\\n      const root = actualScope.documentElement;\\n      return root ? [root] : [];\\n    }\\n    if (actualScope.nodeType === 1)\\n      return [actualScope];\\n    return [];\\n  }\\n};\\nvar notEngine = {\\n  matches(element, args, context, evaluator) {\\n    if (args.length === 0)\\n      throw new Error(`\\\"not\\\" engine expects non-empty selector list`);\\n    return !evaluator.matches(element, args, context);\\n  }\\n};\\nvar lightEngine = {\\n  query(context, args, evaluator) {\\n    return evaluator.query({ ...context, pierceShadow: false }, args);\\n  },\\n  matches(element, args, context, evaluator) {\\n    return evaluator.matches(element, args, { ...context, pierceShadow: false });\\n  }\\n};\\nvar visibleEngine = {\\n  matches(element, args, context, evaluator) {\\n    if (args.length)\\n      throw new Error(`\\\"visible\\\" engine expects no arguments`);\\n    return isElementVisible(element);\\n  }\\n};\\nvar textEngine = {\\n  matches(element, args, context, evaluator) {\\n    if (args.length !== 1 || typeof args[0] !== \\\"string\\\")\\n      throw new Error(`\\\"text\\\" engine expects a single string`);\\n    const text = normalizeWhiteSpace(args[0]).toLowerCase();\\n    const matcher = (elementText2) => elementText2.normalized.toLowerCase().includes(text);\\n    return elementMatchesText(evaluator._cacheText, element, matcher) === \\\"self\\\";\\n  }\\n};\\nvar textIsEngine = {\\n  matches(element, args, context, evaluator) {\\n    if (args.length !== 1 || typeof args[0] !== \\\"string\\\")\\n      throw new Error(`\\\"text-is\\\" engine expects a single string`);\\n    const text = normalizeWhiteSpace(args[0]);\\n    const matcher = (elementText2) => {\\n      if (!text && !elementText2.immediate.length)\\n        return true;\\n      return elementText2.immediate.some((s) => normalizeWhiteSpace(s) === text);\\n    };\\n    return elementMatchesText(evaluator._cacheText, element, matcher) !== \\\"none\\\";\\n  }\\n};\\nvar textMatchesEngine = {\\n  matches(element, args, context, evaluator) {\\n    if (args.length === 0 || typeof args[0] !== \\\"string\\\" || args.length > 2 || args.length === 2 && typeof args[1] !== \\\"string\\\")\\n      throw new Error(`\\\"text-matches\\\" engine expects a regexp body and optional regexp flags`);\\n    const re = new RegExp(args[0], args.length === 2 ? args[1] : void 0);\\n    const matcher = (elementText2) => re.test(elementText2.full);\\n    return elementMatchesText(evaluator._cacheText, element, matcher) === \\\"self\\\";\\n  }\\n};\\nvar hasTextEngine = {\\n  matches(element, args, context, evaluator) {\\n    if (args.length !== 1 || typeof args[0] !== \\\"string\\\")\\n      throw new Error(`\\\"has-text\\\" engine expects a single string`);\\n    if (shouldSkipForTextMatching(element))\\n      return false;\\n    const text = normalizeWhiteSpace(args[0]).toLowerCase();\\n    const matcher = (elementText2) => elementText2.normalized.toLowerCase().includes(text);\\n    return matcher(elementText(evaluator._cacheText, element));\\n  }\\n};\\nfunction createLayoutEngine(name) {\\n  return {\\n    matches(element, args, context, evaluator) {\\n      const maxDistance = args.length && typeof args[args.length - 1] === \\\"number\\\" ? args[args.length - 1] : void 0;\\n      const queryArgs = maxDistance === void 0 ? args : args.slice(0, args.length - 1);\\n      if (args.length < 1 + (maxDistance === void 0 ? 0 : 1))\\n        throw new Error(`\\\"${name}\\\" engine expects a selector list and optional maximum distance in pixels`);\\n      const inner = evaluator.query(context, queryArgs);\\n      const score = layoutSelectorScore(name, element, inner, maxDistance);\\n      if (score === void 0)\\n        return false;\\n      evaluator._markScore(element, score);\\n      return true;\\n    }\\n  };\\n}\\nvar nthMatchEngine = {\\n  query(context, args, evaluator) {\\n    let index = args[args.length - 1];\\n    if (args.length < 2)\\n      throw new Error(`\\\"nth-match\\\" engine expects non-empty selector list and an index argument`);\\n    if (typeof index !== \\\"number\\\" || index < 1)\\n      throw new Error(`\\\"nth-match\\\" engine expects a one-based index as the last argument`);\\n    const elements = isEngine.query(context, args.slice(0, args.length - 1), evaluator);\\n    index--;\\n    return index < elements.length ? [elements[index]] : [];\\n  }\\n};\\nfunction parentElementOrShadowHostInContext(element, context) {\\n  if (element === context.scope)\\n    return;\\n  if (!context.pierceShadow)\\n    return element.parentElement || void 0;\\n  return parentElementOrShadowHost(element);\\n}\\nfunction previousSiblingInContext(element, context) {\\n  if (element === context.scope)\\n    return;\\n  return element.previousElementSibling || void 0;\\n}\\nfunction sortInDOMOrder(elements) {\\n  const elementToEntry = /* @__PURE__ */ new Map();\\n  const roots = [];\\n  const result = [];\\n  function append(element) {\\n    let entry = elementToEntry.get(element);\\n    if (entry)\\n      return entry;\\n    const parent = parentElementOrShadowHost(element);\\n    if (parent) {\\n      const parentEntry = append(parent);\\n      parentEntry.children.push(element);\\n    } else {\\n      roots.push(element);\\n    }\\n    entry = { children: [], taken: false };\\n    elementToEntry.set(element, entry);\\n    return entry;\\n  }\\n  for (const e of elements)\\n    append(e).taken = true;\\n  function visit(element) {\\n    const entry = elementToEntry.get(element);\\n    if (entry.taken)\\n      result.push(element);\\n    if (entry.children.length > 1) {\\n      const set = new Set(entry.children);\\n      entry.children = [];\\n      let child = element.firstElementChild;\\n      while (child && entry.children.length < set.size) {\\n        if (set.has(child))\\n          entry.children.push(child);\\n        child = child.nextElementSibling;\\n      }\\n      child = element.shadowRoot ? element.shadowRoot.firstElementChild : null;\\n      while (child && entry.children.length < set.size) {\\n        if (set.has(child))\\n          entry.children.push(child);\\n        child = child.nextElementSibling;\\n      }\\n    }\\n    entry.children.forEach(visit);\\n  }\\n  roots.forEach(visit);\\n  return result;\\n}\\n\\n// packages/injected/src/selectorGenerator.ts\\nvar kTextScoreRange = 10;\\nvar kExactPenalty = kTextScoreRange / 2;\\nvar kTestIdScore = 1;\\nvar kOtherTestIdScore = 2;\\nvar kIframeByAttributeScore = 10;\\nvar kBeginPenalizedScore = 50;\\nvar kRoleWithNameScore = 100;\\nvar kPlaceholderScore = 120;\\nvar kLabelScore = 140;\\nvar kAltTextScore = 160;\\nvar kTextScore = 180;\\nvar kTitleScore = 200;\\nvar kTextScoreRegex = 250;\\nvar kPlaceholderScoreExact = kPlaceholderScore + kExactPenalty;\\nvar kLabelScoreExact = kLabelScore + kExactPenalty;\\nvar kRoleWithNameScoreExact = kRoleWithNameScore + kExactPenalty;\\nvar kAltTextScoreExact = kAltTextScore + kExactPenalty;\\nvar kTextScoreExact = kTextScore + kExactPenalty;\\nvar kTitleScoreExact = kTitleScore + kExactPenalty;\\nvar kEndPenalizedScore = 300;\\nvar kCSSIdScore = 500;\\nvar kRoleWithoutNameScore = 510;\\nvar kCSSInputTypeNameScore = 520;\\nvar kCSSTagNameScore = 530;\\nvar kNthScore = 1e4;\\nvar kCSSFallbackScore = 1e7;\\nvar kScoreThresholdForTextExpect = 1e3;\\nfunction generateSelector(injectedScript, targetElement, options) {\\n  var _a;\\n  injectedScript._evaluator.begin();\\n  const cache = { allowText: /* @__PURE__ */ new Map(), disallowText: /* @__PURE__ */ new Map() };\\n  beginAriaCaches();\\n  try {\\n    let selectors = [];\\n    if (options.forTextExpect) {\\n      let targetTokens = cssFallback(injectedScript, targetElement.ownerDocument.documentElement, options);\\n      for (let element = targetElement; element; element = parentElementOrShadowHost(element)) {\\n        const tokens = generateSelectorFor(cache, injectedScript, element, { ...options, noText: true });\\n        if (!tokens)\\n          continue;\\n        const score = combineScores(tokens);\\n        if (score <= kScoreThresholdForTextExpect) {\\n          targetTokens = tokens;\\n          break;\\n        }\\n      }\\n      selectors = [joinTokens(targetTokens)];\\n    } else {\\n      if (!targetElement.matches(\\\"input,textarea,select\\\") && !targetElement.isContentEditable) {\\n        const interactiveParent = closestCrossShadow(targetElement, \\\"button,select,input,[role=button],[role=checkbox],[role=radio],a,[role=link]\\\", options.root);\\n        if (interactiveParent && isElementVisible(interactiveParent))\\n          targetElement = interactiveParent;\\n      }\\n      if (options.multiple) {\\n        const withText = generateSelectorFor(cache, injectedScript, targetElement, options);\\n        const withoutText = generateSelectorFor(cache, injectedScript, targetElement, { ...options, noText: true });\\n        let tokens = [withText, withoutText];\\n        cache.allowText.clear();\\n        cache.disallowText.clear();\\n        if (withText && hasCSSIdToken(withText))\\n          tokens.push(generateSelectorFor(cache, injectedScript, targetElement, { ...options, noCSSId: true }));\\n        if (withoutText && hasCSSIdToken(withoutText))\\n          tokens.push(generateSelectorFor(cache, injectedScript, targetElement, { ...options, noText: true, noCSSId: true }));\\n        tokens = tokens.filter(Boolean);\\n        if (!tokens.length) {\\n          const css = cssFallback(injectedScript, targetElement, options);\\n          tokens.push(css);\\n          if (hasCSSIdToken(css))\\n            tokens.push(cssFallback(injectedScript, targetElement, { ...options, noCSSId: true }));\\n        }\\n        selectors = [...new Set(tokens.map((t) => joinTokens(t)))];\\n      } else {\\n        const targetTokens = generateSelectorFor(cache, injectedScript, targetElement, options) || cssFallback(injectedScript, targetElement, options);\\n        selectors = [joinTokens(targetTokens)];\\n      }\\n    }\\n    const selector = selectors[0];\\n    const parsedSelector = injectedScript.parseSelector(selector);\\n    return {\\n      selector,\\n      selectors,\\n      elements: injectedScript.querySelectorAll(parsedSelector, (_a = options.root) != null ? _a : targetElement.ownerDocument)\\n    };\\n  } finally {\\n    endAriaCaches();\\n    injectedScript._evaluator.end();\\n  }\\n}\\nfunction filterRegexTokens(textCandidates) {\\n  return textCandidates.filter((c) => c[0].selector[0] !== \\\"/\\\");\\n}\\nfunction generateSelectorFor(cache, injectedScript, targetElement, options) {\\n  if (options.root && !isInsideScope(options.root, targetElement))\\n    throw new Error(`Target element must belong to the root's subtree`);\\n  if (targetElement === options.root)\\n    return [{ engine: \\\"css\\\", selector: \\\":scope\\\", score: 1 }];\\n  if (targetElement.ownerDocument.documentElement === targetElement)\\n    return [{ engine: \\\"css\\\", selector: \\\"html\\\", score: 1 }];\\n  const calculate = (element, allowText) => {\\n    var _a;\\n    const allowNthMatch = element === targetElement;\\n    let textCandidates = allowText ? buildTextCandidates(injectedScript, element, element === targetElement) : [];\\n    if (element !== targetElement) {\\n      textCandidates = filterRegexTokens(textCandidates);\\n    }\\n    const noTextCandidates = buildNoTextCandidates(injectedScript, element, options).filter((token) => !options.omitInternalEngines || !token.engine.startsWith(\\\"internal:\\\")).map((token) => [token]);\\n    let result = chooseFirstSelector(injectedScript, (_a = options.root) != null ? _a : targetElement.ownerDocument, element, [...textCandidates, ...noTextCandidates], allowNthMatch);\\n    textCandidates = filterRegexTokens(textCandidates);\\n    const checkWithText = (textCandidatesToUse) => {\\n      const allowParentText = allowText && !textCandidatesToUse.length;\\n      const candidates = [...textCandidatesToUse, ...noTextCandidates].filter((c) => {\\n        if (!result)\\n          return true;\\n        return combineScores(c) < combineScores(result);\\n      });\\n      let bestPossibleInParent = candidates[0];\\n      if (!bestPossibleInParent)\\n        return;\\n      for (let parent = parentElementOrShadowHost(element); parent && parent !== options.root; parent = parentElementOrShadowHost(parent)) {\\n        const parentTokens = calculateCached(parent, allowParentText);\\n        if (!parentTokens)\\n          continue;\\n        if (result && combineScores([...parentTokens, ...bestPossibleInParent]) >= combineScores(result))\\n          continue;\\n        bestPossibleInParent = chooseFirstSelector(injectedScript, parent, element, candidates, allowNthMatch);\\n        if (!bestPossibleInParent)\\n          return;\\n        const combined = [...parentTokens, ...bestPossibleInParent];\\n        if (!result || combineScores(combined) < combineScores(result))\\n          result = combined;\\n      }\\n    };\\n    checkWithText(textCandidates);\\n    if (element === targetElement && textCandidates.length)\\n      checkWithText([]);\\n    return result;\\n  };\\n  const calculateCached = (element, allowText) => {\\n    const map = allowText ? cache.allowText : cache.disallowText;\\n    let value = map.get(element);\\n    if (value === void 0) {\\n      value = calculate(element, allowText);\\n      map.set(element, value);\\n    }\\n    return value;\\n  };\\n  return calculate(targetElement, !options.noText);\\n}\\nfunction buildNoTextCandidates(injectedScript, element, options) {\\n  const candidates = [];\\n  {\\n    for (const attr of [\\\"data-testid\\\", \\\"data-test-id\\\", \\\"data-test\\\"]) {\\n      if (attr !== options.testIdAttributeName && element.getAttribute(attr))\\n        candidates.push({ engine: \\\"css\\\", selector: `[${attr}=${quoteCSSAttributeValue(element.getAttribute(attr))}]`, score: kOtherTestIdScore });\\n    }\\n    if (!options.noCSSId) {\\n      const idAttr = element.getAttribute(\\\"id\\\");\\n      if (idAttr && !isGuidLike(idAttr))\\n        candidates.push({ engine: \\\"css\\\", selector: makeSelectorForId(idAttr), score: kCSSIdScore });\\n    }\\n    candidates.push({ engine: \\\"css\\\", selector: escapeNodeName(element), score: kCSSTagNameScore });\\n  }\\n  if (element.nodeName === \\\"IFRAME\\\") {\\n    for (const attribute of [\\\"name\\\", \\\"title\\\"]) {\\n      if (element.getAttribute(attribute))\\n        candidates.push({ engine: \\\"css\\\", selector: `${escapeNodeName(element)}[${attribute}=${quoteCSSAttributeValue(element.getAttribute(attribute))}]`, score: kIframeByAttributeScore });\\n    }\\n    if (element.getAttribute(options.testIdAttributeName))\\n      candidates.push({ engine: \\\"css\\\", selector: `[${options.testIdAttributeName}=${quoteCSSAttributeValue(element.getAttribute(options.testIdAttributeName))}]`, score: kTestIdScore });\\n    penalizeScoreForLength([candidates]);\\n    return candidates;\\n  }\\n  if (element.getAttribute(options.testIdAttributeName))\\n    candidates.push({ engine: \\\"internal:testid\\\", selector: `[${options.testIdAttributeName}=${escapeForAttributeSelector(element.getAttribute(options.testIdAttributeName), true)}]`, score: kTestIdScore });\\n  if (element.nodeName === \\\"INPUT\\\" || element.nodeName === \\\"TEXTAREA\\\") {\\n    const input = element;\\n    if (input.placeholder) {\\n      candidates.push({ engine: \\\"internal:attr\\\", selector: `[placeholder=${escapeForAttributeSelector(input.placeholder, true)}]`, score: kPlaceholderScoreExact });\\n      for (const alternative of suitableTextAlternatives(input.placeholder))\\n        candidates.push({ engine: \\\"internal:attr\\\", selector: `[placeholder=${escapeForAttributeSelector(alternative.text, false)}]`, score: kPlaceholderScore - alternative.scoreBonus });\\n    }\\n  }\\n  const labels = getElementLabels(injectedScript._evaluator._cacheText, element);\\n  for (const label of labels) {\\n    const labelText = label.normalized;\\n    candidates.push({ engine: \\\"internal:label\\\", selector: escapeForTextSelector(labelText, true), score: kLabelScoreExact });\\n    for (const alternative of suitableTextAlternatives(labelText))\\n      candidates.push({ engine: \\\"internal:label\\\", selector: escapeForTextSelector(alternative.text, false), score: kLabelScore - alternative.scoreBonus });\\n  }\\n  const ariaRole = getAriaRole(element);\\n  if (ariaRole && ![\\\"none\\\", \\\"presentation\\\"].includes(ariaRole))\\n    candidates.push({ engine: \\\"internal:role\\\", selector: ariaRole, score: kRoleWithoutNameScore });\\n  if (element.getAttribute(\\\"name\\\") && [\\\"BUTTON\\\", \\\"FORM\\\", \\\"FIELDSET\\\", \\\"FRAME\\\", \\\"IFRAME\\\", \\\"INPUT\\\", \\\"KEYGEN\\\", \\\"OBJECT\\\", \\\"OUTPUT\\\", \\\"SELECT\\\", \\\"TEXTAREA\\\", \\\"MAP\\\", \\\"META\\\", \\\"PARAM\\\"].includes(element.nodeName))\\n    candidates.push({ engine: \\\"css\\\", selector: `${escapeNodeName(element)}[name=${quoteCSSAttributeValue(element.getAttribute(\\\"name\\\"))}]`, score: kCSSInputTypeNameScore });\\n  if ([\\\"INPUT\\\", \\\"TEXTAREA\\\"].includes(element.nodeName) && element.getAttribute(\\\"type\\\") !== \\\"hidden\\\") {\\n    if (element.getAttribute(\\\"type\\\"))\\n      candidates.push({ engine: \\\"css\\\", selector: `${escapeNodeName(element)}[type=${quoteCSSAttributeValue(element.getAttribute(\\\"type\\\"))}]`, score: kCSSInputTypeNameScore });\\n  }\\n  if ([\\\"INPUT\\\", \\\"TEXTAREA\\\", \\\"SELECT\\\"].includes(element.nodeName) && element.getAttribute(\\\"type\\\") !== \\\"hidden\\\")\\n    candidates.push({ engine: \\\"css\\\", selector: escapeNodeName(element), score: kCSSInputTypeNameScore + 1 });\\n  penalizeScoreForLength([candidates]);\\n  return candidates;\\n}\\nfunction buildTextCandidates(injectedScript, element, isTargetNode) {\\n  if (element.nodeName === \\\"SELECT\\\")\\n    return [];\\n  const candidates = [];\\n  const title = element.getAttribute(\\\"title\\\");\\n  if (title) {\\n    candidates.push([{ engine: \\\"internal:attr\\\", selector: `[title=${escapeForAttributeSelector(title, true)}]`, score: kTitleScoreExact }]);\\n    for (const alternative of suitableTextAlternatives(title))\\n      candidates.push([{ engine: \\\"internal:attr\\\", selector: `[title=${escapeForAttributeSelector(alternative.text, false)}]`, score: kTitleScore - alternative.scoreBonus }]);\\n  }\\n  const alt = element.getAttribute(\\\"alt\\\");\\n  if (alt && [\\\"APPLET\\\", \\\"AREA\\\", \\\"IMG\\\", \\\"INPUT\\\"].includes(element.nodeName)) {\\n    candidates.push([{ engine: \\\"internal:attr\\\", selector: `[alt=${escapeForAttributeSelector(alt, true)}]`, score: kAltTextScoreExact }]);\\n    for (const alternative of suitableTextAlternatives(alt))\\n      candidates.push([{ engine: \\\"internal:attr\\\", selector: `[alt=${escapeForAttributeSelector(alternative.text, false)}]`, score: kAltTextScore - alternative.scoreBonus }]);\\n  }\\n  const text = elementText(injectedScript._evaluator._cacheText, element).normalized;\\n  const textAlternatives = text ? suitableTextAlternatives(text) : [];\\n  if (text) {\\n    if (isTargetNode) {\\n      if (text.length <= 80)\\n        candidates.push([{ engine: \\\"internal:text\\\", selector: escapeForTextSelector(text, true), score: kTextScoreExact }]);\\n      for (const alternative of textAlternatives)\\n        candidates.push([{ engine: \\\"internal:text\\\", selector: escapeForTextSelector(alternative.text, false), score: kTextScore - alternative.scoreBonus }]);\\n    }\\n    const cssToken = { engine: \\\"css\\\", selector: escapeNodeName(element), score: kCSSTagNameScore };\\n    for (const alternative of textAlternatives)\\n      candidates.push([cssToken, { engine: \\\"internal:has-text\\\", selector: escapeForTextSelector(alternative.text, false), score: kTextScore - alternative.scoreBonus }]);\\n    if (text.length <= 80) {\\n      const re = new RegExp(\\\"^\\\" + escapeRegExp(text) + \\\"$\\\");\\n      candidates.push([cssToken, { engine: \\\"internal:has-text\\\", selector: escapeForTextSelector(re, false), score: kTextScoreRegex }]);\\n    }\\n  }\\n  const ariaRole = getAriaRole(element);\\n  if (ariaRole && ![\\\"none\\\", \\\"presentation\\\"].includes(ariaRole)) {\\n    const ariaName = getElementAccessibleName(element, false);\\n    if (ariaName) {\\n      const roleToken = { engine: \\\"internal:role\\\", selector: `${ariaRole}[name=${escapeForAttributeSelector(ariaName, true)}]`, score: kRoleWithNameScoreExact };\\n      candidates.push([roleToken]);\\n      for (const alternative of suitableTextAlternatives(ariaName))\\n        candidates.push([{ engine: \\\"internal:role\\\", selector: `${ariaRole}[name=${escapeForAttributeSelector(alternative.text, false)}]`, score: kRoleWithNameScore - alternative.scoreBonus }]);\\n    } else {\\n      const roleToken = { engine: \\\"internal:role\\\", selector: `${ariaRole}`, score: kRoleWithoutNameScore };\\n      for (const alternative of textAlternatives)\\n        candidates.push([roleToken, { engine: \\\"internal:has-text\\\", selector: escapeForTextSelector(alternative.text, false), score: kTextScore - alternative.scoreBonus }]);\\n      if (text.length <= 80) {\\n        const re = new RegExp(\\\"^\\\" + escapeRegExp(text) + \\\"$\\\");\\n        candidates.push([roleToken, { engine: \\\"internal:has-text\\\", selector: escapeForTextSelector(re, false), score: kTextScoreRegex }]);\\n      }\\n    }\\n  }\\n  penalizeScoreForLength(candidates);\\n  return candidates;\\n}\\nfunction makeSelectorForId(id) {\\n  return /^[a-zA-Z][a-zA-Z0-9\\\\-\\\\_]+$/.test(id) ? \\\"#\\\" + id : `[id=${quoteCSSAttributeValue(id)}]`;\\n}\\nfunction hasCSSIdToken(tokens) {\\n  return tokens.some((token) => token.engine === \\\"css\\\" && (token.selector.startsWith(\\\"#\\\") || token.selector.startsWith('[id=\\\"')));\\n}\\nfunction cssFallback(injectedScript, targetElement, options) {\\n  var _a;\\n  const root = (_a = options.root) != null ? _a : targetElement.ownerDocument;\\n  const tokens = [];\\n  function uniqueCSSSelector(prefix) {\\n    const path = tokens.slice();\\n    if (prefix)\\n      path.unshift(prefix);\\n    const selector = path.join(\\\" > \\\");\\n    const parsedSelector = injectedScript.parseSelector(selector);\\n    const node = injectedScript.querySelector(parsedSelector, root, false);\\n    return node === targetElement ? selector : void 0;\\n  }\\n  function makeStrict(selector) {\\n    const token = { engine: \\\"css\\\", selector, score: kCSSFallbackScore };\\n    const parsedSelector = injectedScript.parseSelector(selector);\\n    const elements = injectedScript.querySelectorAll(parsedSelector, root);\\n    if (elements.length === 1)\\n      return [token];\\n    const nth = { engine: \\\"nth\\\", selector: String(elements.indexOf(targetElement)), score: kNthScore };\\n    return [token, nth];\\n  }\\n  for (let element = targetElement; element && element !== root; element = parentElementOrShadowHost(element)) {\\n    let bestTokenForLevel = \\\"\\\";\\n    if (element.id && !options.noCSSId) {\\n      const token = makeSelectorForId(element.id);\\n      const selector = uniqueCSSSelector(token);\\n      if (selector)\\n        return makeStrict(selector);\\n      bestTokenForLevel = token;\\n    }\\n    const parent = element.parentNode;\\n    const classes = [...element.classList].map(escapeClassName);\\n    for (let i = 0; i < classes.length; ++i) {\\n      const token = \\\".\\\" + classes.slice(0, i + 1).join(\\\".\\\");\\n      const selector = uniqueCSSSelector(token);\\n      if (selector)\\n        return makeStrict(selector);\\n      if (!bestTokenForLevel && parent) {\\n        const sameClassSiblings = parent.querySelectorAll(token);\\n        if (sameClassSiblings.length === 1)\\n          bestTokenForLevel = token;\\n      }\\n    }\\n    if (parent) {\\n      const siblings = [...parent.children];\\n      const nodeName = element.nodeName;\\n      const sameTagSiblings = siblings.filter((sibling) => sibling.nodeName === nodeName);\\n      const token = sameTagSiblings.indexOf(element) === 0 ? escapeNodeName(element) : `${escapeNodeName(element)}:nth-child(${1 + siblings.indexOf(element)})`;\\n      const selector = uniqueCSSSelector(token);\\n      if (selector)\\n        return makeStrict(selector);\\n      if (!bestTokenForLevel)\\n        bestTokenForLevel = token;\\n    } else if (!bestTokenForLevel) {\\n      bestTokenForLevel = escapeNodeName(element);\\n    }\\n    tokens.unshift(bestTokenForLevel);\\n  }\\n  return makeStrict(uniqueCSSSelector());\\n}\\nfunction penalizeScoreForLength(groups) {\\n  for (const group of groups) {\\n    for (const token of group) {\\n      if (token.score > kBeginPenalizedScore && token.score < kEndPenalizedScore)\\n        token.score += Math.min(kTextScoreRange, token.selector.length / 10 | 0);\\n    }\\n  }\\n}\\nfunction joinTokens(tokens) {\\n  const parts = [];\\n  let lastEngine = \\\"\\\";\\n  for (const { engine, selector } of tokens) {\\n    if (parts.length && (lastEngine !== \\\"css\\\" || engine !== \\\"css\\\" || selector.startsWith(\\\":nth-match(\\\")))\\n      parts.push(\\\">>\\\");\\n    lastEngine = engine;\\n    if (engine === \\\"css\\\")\\n      parts.push(selector);\\n    else\\n      parts.push(`${engine}=${selector}`);\\n  }\\n  return parts.join(\\\" \\\");\\n}\\nfunction combineScores(tokens) {\\n  let score = 0;\\n  for (let i = 0; i < tokens.length; i++)\\n    score += tokens[i].score * (tokens.length - i);\\n  return score;\\n}\\nfunction chooseFirstSelector(injectedScript, scope, targetElement, selectors, allowNthMatch) {\\n  const joined = selectors.map((tokens) => ({ tokens, score: combineScores(tokens) }));\\n  joined.sort((a, b) => a.score - b.score);\\n  let bestWithIndex = null;\\n  for (const { tokens } of joined) {\\n    const parsedSelector = injectedScript.parseSelector(joinTokens(tokens));\\n    const result = injectedScript.querySelectorAll(parsedSelector, scope);\\n    if (result[0] === targetElement && result.length === 1) {\\n      return tokens;\\n    }\\n    const index = result.indexOf(targetElement);\\n    if (!allowNthMatch || bestWithIndex || index === -1 || result.length > 5)\\n      continue;\\n    const nth = { engine: \\\"nth\\\", selector: String(index), score: kNthScore };\\n    bestWithIndex = [...tokens, nth];\\n  }\\n  return bestWithIndex;\\n}\\nfunction isGuidLike(id) {\\n  let lastCharacterType;\\n  let transitionCount = 0;\\n  for (let i = 0; i < id.length; ++i) {\\n    const c = id[i];\\n    let characterType;\\n    if (c === \\\"-\\\" || c === \\\"_\\\")\\n      continue;\\n    if (c >= \\\"a\\\" && c <= \\\"z\\\")\\n      characterType = \\\"lower\\\";\\n    else if (c >= \\\"A\\\" && c <= \\\"Z\\\")\\n      characterType = \\\"upper\\\";\\n    else if (c >= \\\"0\\\" && c <= \\\"9\\\")\\n      characterType = \\\"digit\\\";\\n    else\\n      characterType = \\\"other\\\";\\n    if (characterType === \\\"lower\\\" && lastCharacterType === \\\"upper\\\") {\\n      lastCharacterType = characterType;\\n      continue;\\n    }\\n    if (lastCharacterType && lastCharacterType !== characterType)\\n      ++transitionCount;\\n    lastCharacterType = characterType;\\n  }\\n  return transitionCount >= id.length / 4;\\n}\\nfunction trimWordBoundary(text, maxLength) {\\n  if (text.length <= maxLength)\\n    return text;\\n  text = text.substring(0, maxLength);\\n  const match = text.match(/^(.*)\\\\b(.+?)$/);\\n  if (!match)\\n    return \\\"\\\";\\n  return match[1].trimEnd();\\n}\\nfunction suitableTextAlternatives(text) {\\n  let result = [];\\n  {\\n    const match = text.match(/^([\\\\d.,]+)[^.,\\\\w]/);\\n    const leadingNumberLength = match ? match[1].length : 0;\\n    if (leadingNumberLength) {\\n      const alt = trimWordBoundary(text.substring(leadingNumberLength).trimStart(), 80);\\n      result.push({ text: alt, scoreBonus: alt.length <= 30 ? 2 : 1 });\\n    }\\n  }\\n  {\\n    const match = text.match(/[^.,\\\\w]([\\\\d.,]+)$/);\\n    const trailingNumberLength = match ? match[1].length : 0;\\n    if (trailingNumberLength) {\\n      const alt = trimWordBoundary(text.substring(0, text.length - trailingNumberLength).trimEnd(), 80);\\n      result.push({ text: alt, scoreBonus: alt.length <= 30 ? 2 : 1 });\\n    }\\n  }\\n  if (text.length <= 30) {\\n    result.push({ text, scoreBonus: 0 });\\n  } else {\\n    result.push({ text: trimWordBoundary(text, 80), scoreBonus: 0 });\\n    result.push({ text: trimWordBoundary(text, 30), scoreBonus: 1 });\\n  }\\n  result = result.filter((r) => r.text);\\n  if (!result.length)\\n    result.push({ text: text.substring(0, 80), scoreBonus: 0 });\\n  return result;\\n}\\nfunction escapeNodeName(node) {\\n  return node.nodeName.toLocaleLowerCase().replace(/[:\\\\.]/g, (char) => \\\"\\\\\\\\\\\" + char);\\n}\\nfunction escapeClassName(className) {\\n  let result = \\\"\\\";\\n  for (let i = 0; i < className.length; i++)\\n    result += cssEscapeCharacter(className, i);\\n  return result;\\n}\\nfunction cssEscapeCharacter(s, i) {\\n  const c = s.charCodeAt(i);\\n  if (c === 0)\\n    return \\\"\\\\uFFFD\\\";\\n  if (c >= 1 && c <= 31 || c >= 48 && c <= 57 && (i === 0 || i === 1 && s.charCodeAt(0) === 45))\\n    return \\\"\\\\\\\\\\\" + c.toString(16) + \\\" \\\";\\n  if (i === 0 && c === 45 && s.length === 1)\\n    return \\\"\\\\\\\\\\\" + s.charAt(i);\\n  if (c >= 128 || c === 45 || c === 95 || c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122)\\n    return s.charAt(i);\\n  return \\\"\\\\\\\\\\\" + s.charAt(i);\\n}\\n\\n// packages/injected/src/vueSelectorEngine.ts\\nfunction basename(filename, ext) {\\n  const normalized = filename.replace(/^[a-zA-Z]:/, \\\"\\\").replace(/\\\\\\\\/g, \\\"/\\\");\\n  let result = normalized.substring(normalized.lastIndexOf(\\\"/\\\") + 1);\\n  if (ext && result.endsWith(ext))\\n    result = result.substring(0, result.length - ext.length);\\n  return result;\\n}\\nfunction toUpper(_, c) {\\n  return c ? c.toUpperCase() : \\\"\\\";\\n}\\nvar classifyRE = /(?:^|[-_/])(\\\\w)/g;\\nvar classify = (str) => {\\n  return str && str.replace(classifyRE, toUpper);\\n};\\nfunction buildComponentsTreeVue3(instance) {\\n  function getComponentTypeName(options) {\\n    const name = options.name || options._componentTag || options.__playwright_guessedName;\\n    if (name)\\n      return name;\\n    const file = options.__file;\\n    if (file)\\n      return classify(basename(file, \\\".vue\\\"));\\n  }\\n  function saveComponentName(instance2, key) {\\n    instance2.type.__playwright_guessedName = key;\\n    return key;\\n  }\\n  function getInstanceName(instance2) {\\n    var _a, _b, _c, _d;\\n    const name = getComponentTypeName(instance2.type || {});\\n    if (name)\\n      return name;\\n    if (instance2.root === instance2)\\n      return \\\"Root\\\";\\n    for (const key in (_b = (_a = instance2.parent) == null ? void 0 : _a.type) == null ? void 0 : _b.components) {\\n      if (((_c = instance2.parent) == null ? void 0 : _c.type.components[key]) === instance2.type)\\n        return saveComponentName(instance2, key);\\n    }\\n    for (const key in (_d = instance2.appContext) == null ? void 0 : _d.components) {\\n      if (instance2.appContext.components[key] === instance2.type)\\n        return saveComponentName(instance2, key);\\n    }\\n    return \\\"Anonymous Component\\\";\\n  }\\n  function isBeingDestroyed(instance2) {\\n    return instance2._isBeingDestroyed || instance2.isUnmounted;\\n  }\\n  function isFragment(instance2) {\\n    return instance2.subTree.type.toString() === \\\"Symbol(Fragment)\\\";\\n  }\\n  function getInternalInstanceChildren(subTree) {\\n    const list = [];\\n    if (subTree.component)\\n      list.push(subTree.component);\\n    if (subTree.suspense)\\n      list.push(...getInternalInstanceChildren(subTree.suspense.activeBranch));\\n    if (Array.isArray(subTree.children)) {\\n      subTree.children.forEach((childSubTree) => {\\n        if (childSubTree.component)\\n          list.push(childSubTree.component);\\n        else\\n          list.push(...getInternalInstanceChildren(childSubTree));\\n      });\\n    }\\n    return list.filter((child) => {\\n      var _a;\\n      return !isBeingDestroyed(child) && !((_a = child.type.devtools) == null ? void 0 : _a.hide);\\n    });\\n  }\\n  function getRootElementsFromComponentInstance(instance2) {\\n    if (isFragment(instance2))\\n      return getFragmentRootElements(instance2.subTree);\\n    return [instance2.subTree.el];\\n  }\\n  function getFragmentRootElements(vnode) {\\n    if (!vnode.children)\\n      return [];\\n    const list = [];\\n    for (let i = 0, l = vnode.children.length; i < l; i++) {\\n      const childVnode = vnode.children[i];\\n      if (childVnode.component)\\n        list.push(...getRootElementsFromComponentInstance(childVnode.component));\\n      else if (childVnode.el)\\n        list.push(childVnode.el);\\n    }\\n    return list;\\n  }\\n  function buildComponentsTree2(instance2) {\\n    return {\\n      name: getInstanceName(instance2),\\n      children: getInternalInstanceChildren(instance2.subTree).map(buildComponentsTree2),\\n      rootElements: getRootElementsFromComponentInstance(instance2),\\n      props: instance2.props\\n    };\\n  }\\n  return buildComponentsTree2(instance);\\n}\\nfunction buildComponentsTreeVue2(instance) {\\n  function getComponentName2(options) {\\n    const name = options.displayName || options.name || options._componentTag;\\n    if (name)\\n      return name;\\n    const file = options.__file;\\n    if (file)\\n      return classify(basename(file, \\\".vue\\\"));\\n  }\\n  function getInstanceName(instance2) {\\n    const name = getComponentName2(instance2.$options || instance2.fnOptions || {});\\n    if (name)\\n      return name;\\n    return instance2.$root === instance2 ? \\\"Root\\\" : \\\"Anonymous Component\\\";\\n  }\\n  function getInternalInstanceChildren(instance2) {\\n    if (instance2.$children)\\n      return instance2.$children;\\n    if (Array.isArray(instance2.subTree.children))\\n      return instance2.subTree.children.filter((vnode) => !!vnode.component).map((vnode) => vnode.component);\\n    return [];\\n  }\\n  function buildComponentsTree2(instance2) {\\n    return {\\n      name: getInstanceName(instance2),\\n      children: getInternalInstanceChildren(instance2).map(buildComponentsTree2),\\n      rootElements: [instance2.$el],\\n      props: instance2._props\\n    };\\n  }\\n  return buildComponentsTree2(instance);\\n}\\nfunction filterComponentsTree2(treeNode, searchFn, result = []) {\\n  if (searchFn(treeNode))\\n    result.push(treeNode);\\n  for (const child of treeNode.children)\\n    filterComponentsTree2(child, searchFn, result);\\n  return result;\\n}\\nfunction findVueRoots(root, roots = []) {\\n  const document = root.ownerDocument || root;\\n  const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\\n  const vue2Roots = /* @__PURE__ */ new Set();\\n  do {\\n    const node = walker.currentNode;\\n    if (node.__vue__)\\n      vue2Roots.add(node.__vue__.$root);\\n    if (node.__vue_app__ && node._vnode && node._vnode.component)\\n      roots.push({ root: node._vnode.component, version: 3 });\\n    const shadowRoot = node instanceof Element ? node.shadowRoot : null;\\n    if (shadowRoot)\\n      findVueRoots(shadowRoot, roots);\\n  } while (walker.nextNode());\\n  for (const vue2root of vue2Roots) {\\n    roots.push({\\n      version: 2,\\n      root: vue2root\\n    });\\n  }\\n  return roots;\\n}\\nvar createVueEngine = () => ({\\n  queryAll(scope, selector) {\\n    const document = scope.ownerDocument || scope;\\n    const { name, attributes } = parseAttributeSelector(selector, false);\\n    const vueRoots = findVueRoots(document);\\n    const trees = vueRoots.map((vueRoot) => vueRoot.version === 3 ? buildComponentsTreeVue3(vueRoot.root) : buildComponentsTreeVue2(vueRoot.root));\\n    const treeNodes = trees.map((tree) => filterComponentsTree2(tree, (treeNode) => {\\n      if (name && treeNode.name !== name)\\n        return false;\\n      if (treeNode.rootElements.some((rootElement) => !isInsideScope(scope, rootElement)))\\n        return false;\\n      for (const attr of attributes) {\\n        if (!matchesComponentAttribute(treeNode.props, attr))\\n          return false;\\n      }\\n      return true;\\n    })).flat();\\n    const allRootElements = /* @__PURE__ */ new Set();\\n    for (const treeNode of treeNodes) {\\n      for (const rootElement of treeNode.rootElements)\\n        allRootElements.add(rootElement);\\n    }\\n    return [...allRootElements];\\n  }\\n});\\n\\n// packages/injected/src/xpathSelectorEngine.ts\\nvar XPathEngine = {\\n  queryAll(root, selector) {\\n    if (selector.startsWith(\\\"/\\\") && root.nodeType !== Node.DOCUMENT_NODE)\\n      selector = \\\".\\\" + selector;\\n    const result = [];\\n    const document = root.ownerDocument || root;\\n    if (!document)\\n      return result;\\n    const it = document.evaluate(selector, root, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE);\\n    for (let node = it.iterateNext(); node; node = it.iterateNext()) {\\n      if (node.nodeType === Node.ELEMENT_NODE)\\n        result.push(node);\\n    }\\n    return result;\\n  }\\n};\\n\\n// packages/playwright-core/src/utils/isomorphic/locatorUtils.ts\\nfunction getByAttributeTextSelector(attrName, text, options) {\\n  return `internal:attr=[${attrName}=${escapeForAttributeSelector(text, (options == null ? void 0 : options.exact) || false)}]`;\\n}\\nfunction getByTestIdSelector(testIdAttributeName, testId) {\\n  return `internal:testid=[${testIdAttributeName}=${escapeForAttributeSelector(testId, true)}]`;\\n}\\nfunction getByLabelSelector(text, options) {\\n  return \\\"internal:label=\\\" + escapeForTextSelector(text, !!(options == null ? void 0 : options.exact));\\n}\\nfunction getByAltTextSelector(text, options) {\\n  return getByAttributeTextSelector(\\\"alt\\\", text, options);\\n}\\nfunction getByTitleSelector(text, options) {\\n  return getByAttributeTextSelector(\\\"title\\\", text, options);\\n}\\nfunction getByPlaceholderSelector(text, options) {\\n  return getByAttributeTextSelector(\\\"placeholder\\\", text, options);\\n}\\nfunction getByTextSelector(text, options) {\\n  return \\\"internal:text=\\\" + escapeForTextSelector(text, !!(options == null ? void 0 : options.exact));\\n}\\nfunction getByRoleSelector(role, options = {}) {\\n  const props = [];\\n  if (options.checked !== void 0)\\n    props.push([\\\"checked\\\", String(options.checked)]);\\n  if (options.disabled !== void 0)\\n    props.push([\\\"disabled\\\", String(options.disabled)]);\\n  if (options.selected !== void 0)\\n    props.push([\\\"selected\\\", String(options.selected)]);\\n  if (options.expanded !== void 0)\\n    props.push([\\\"expanded\\\", String(options.expanded)]);\\n  if (options.includeHidden !== void 0)\\n    props.push([\\\"include-hidden\\\", String(options.includeHidden)]);\\n  if (options.level !== void 0)\\n    props.push([\\\"level\\\", String(options.level)]);\\n  if (options.name !== void 0)\\n    props.push([\\\"name\\\", escapeForAttributeSelector(options.name, !!options.exact)]);\\n  if (options.pressed !== void 0)\\n    props.push([\\\"pressed\\\", String(options.pressed)]);\\n  return `internal:role=${role}${props.map(([n, v]) => `[${n}=${v}]`).join(\\\"\\\")}`;\\n}\\n\\n// packages/injected/src/consoleApi.ts\\nvar selectorSymbol = Symbol(\\\"selector\\\");\\nselectorSymbol;\\nvar _Locator = class _Locator {\\n  constructor(injectedScript, selector, options) {\\n    if (options == null ? void 0 : options.hasText)\\n      selector += ` >> internal:has-text=${escapeForTextSelector(options.hasText, false)}`;\\n    if (options == null ? void 0 : options.hasNotText)\\n      selector += ` >> internal:has-not-text=${escapeForTextSelector(options.hasNotText, false)}`;\\n    if (options == null ? void 0 : options.has)\\n      selector += ` >> internal:has=` + JSON.stringify(options.has[selectorSymbol]);\\n    if (options == null ? void 0 : options.hasNot)\\n      selector += ` >> internal:has-not=` + JSON.stringify(options.hasNot[selectorSymbol]);\\n    if ((options == null ? void 0 : options.visible) !== void 0)\\n      selector += ` >> visible=${options.visible ? \\\"true\\\" : \\\"false\\\"}`;\\n    this[selectorSymbol] = selector;\\n    if (selector) {\\n      const parsed = injectedScript.parseSelector(selector);\\n      this.element = injectedScript.querySelector(parsed, injectedScript.document, false);\\n      this.elements = injectedScript.querySelectorAll(parsed, injectedScript.document);\\n    }\\n    const selectorBase = selector;\\n    const self = this;\\n    self.locator = (selector2, options2) => {\\n      return new _Locator(injectedScript, selectorBase ? selectorBase + \\\" >> \\\" + selector2 : selector2, options2);\\n    };\\n    self.getByTestId = (testId) => self.locator(getByTestIdSelector(injectedScript.testIdAttributeNameForStrictErrorAndConsoleCodegen(), testId));\\n    self.getByAltText = (text, options2) => self.locator(getByAltTextSelector(text, options2));\\n    self.getByLabel = (text, options2) => self.locator(getByLabelSelector(text, options2));\\n    self.getByPlaceholder = (text, options2) => self.locator(getByPlaceholderSelector(text, options2));\\n    self.getByText = (text, options2) => self.locator(getByTextSelector(text, options2));\\n    self.getByTitle = (text, options2) => self.locator(getByTitleSelector(text, options2));\\n    self.getByRole = (role, options2 = {}) => self.locator(getByRoleSelector(role, options2));\\n    self.filter = (options2) => new _Locator(injectedScript, selector, options2);\\n    self.first = () => self.locator(\\\"nth=0\\\");\\n    self.last = () => self.locator(\\\"nth=-1\\\");\\n    self.nth = (index) => self.locator(`nth=${index}`);\\n    self.and = (locator) => new _Locator(injectedScript, selectorBase + ` >> internal:and=` + JSON.stringify(locator[selectorSymbol]));\\n    self.or = (locator) => new _Locator(injectedScript, selectorBase + ` >> internal:or=` + JSON.stringify(locator[selectorSymbol]));\\n  }\\n};\\nvar Locator = _Locator;\\nvar ConsoleAPI = class {\\n  constructor(injectedScript) {\\n    this._injectedScript = injectedScript;\\n  }\\n  install() {\\n    if (this._injectedScript.window.playwright)\\n      return;\\n    this._injectedScript.window.playwright = {\\n      $: (selector, strict) => this._querySelector(selector, !!strict),\\n      $$: (selector) => this._querySelectorAll(selector),\\n      inspect: (selector) => this._inspect(selector),\\n      selector: (element) => this._selector(element),\\n      generateLocator: (element, language) => this._generateLocator(element, language),\\n      ariaSnapshot: (element, options) => {\\n        return this._injectedScript.ariaSnapshot(element || this._injectedScript.document.body, options);\\n      },\\n      resume: () => this._resume(),\\n      ...new Locator(this._injectedScript, \\\"\\\")\\n    };\\n    delete this._injectedScript.window.playwright.filter;\\n    delete this._injectedScript.window.playwright.first;\\n    delete this._injectedScript.window.playwright.last;\\n    delete this._injectedScript.window.playwright.nth;\\n    delete this._injectedScript.window.playwright.and;\\n    delete this._injectedScript.window.playwright.or;\\n  }\\n  _querySelector(selector, strict) {\\n    if (typeof selector !== \\\"string\\\")\\n      throw new Error(`Usage: playwright.query('Playwright >> selector').`);\\n    const parsed = this._injectedScript.parseSelector(selector);\\n    return this._injectedScript.querySelector(parsed, this._injectedScript.document, strict);\\n  }\\n  _querySelectorAll(selector) {\\n    if (typeof selector !== \\\"string\\\")\\n      throw new Error(`Usage: playwright.$$('Playwright >> selector').`);\\n    const parsed = this._injectedScript.parseSelector(selector);\\n    return this._injectedScript.querySelectorAll(parsed, this._injectedScript.document);\\n  }\\n  _inspect(selector) {\\n    if (typeof selector !== \\\"string\\\")\\n      throw new Error(`Usage: playwright.inspect('Playwright >> selector').`);\\n    this._injectedScript.window.inspect(this._querySelector(selector, false));\\n  }\\n  _selector(element) {\\n    if (!(element instanceof Element))\\n      throw new Error(`Usage: playwright.selector(element).`);\\n    return this._injectedScript.generateSelectorSimple(element);\\n  }\\n  _generateLocator(element, language) {\\n    if (!(element instanceof Element))\\n      throw new Error(`Usage: playwright.locator(element).`);\\n    const selector = this._injectedScript.generateSelectorSimple(element);\\n    return asLocator(language || \\\"javascript\\\", selector);\\n  }\\n  _resume() {\\n    this._injectedScript.window.__pw_resume().catch(() => {\\n    });\\n  }\\n};\\n\\n// packages/playwright-core/src/utils/isomorphic/utilityScriptSerializers.ts\\nfunction isRegExp2(obj) {\\n  try {\\n    return obj instanceof RegExp || Object.prototype.toString.call(obj) === \\\"[object RegExp]\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isDate(obj) {\\n  try {\\n    return obj instanceof Date || Object.prototype.toString.call(obj) === \\\"[object Date]\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isURL(obj) {\\n  try {\\n    return obj instanceof URL || Object.prototype.toString.call(obj) === \\\"[object URL]\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isError(obj) {\\n  var _a;\\n  try {\\n    return obj instanceof Error || obj && ((_a = Object.getPrototypeOf(obj)) == null ? void 0 : _a.name) === \\\"Error\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isTypedArray(obj, constructor) {\\n  try {\\n    return obj instanceof constructor || Object.prototype.toString.call(obj) === `[object ${constructor.name}]`;\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nvar typedArrayConstructors = {\\n  i8: Int8Array,\\n  ui8: Uint8Array,\\n  ui8c: Uint8ClampedArray,\\n  i16: Int16Array,\\n  ui16: Uint16Array,\\n  i32: Int32Array,\\n  ui32: Uint32Array,\\n  // TODO: add Float16Array once it's in baseline\\n  f32: Float32Array,\\n  f64: Float64Array,\\n  bi64: BigInt64Array,\\n  bui64: BigUint64Array\\n};\\nfunction typedArrayToBase64(array) {\\n  if (\\\"toBase64\\\" in array)\\n    return array.toBase64();\\n  const binary = Array.from(new Uint8Array(array.buffer, array.byteOffset, array.byteLength)).map((b) => String.fromCharCode(b)).join(\\\"\\\");\\n  return btoa(binary);\\n}\\nfunction base64ToTypedArray(base64, TypedArrayConstructor) {\\n  const binary = atob(base64);\\n  const bytes = new Uint8Array(binary.length);\\n  for (let i = 0; i < binary.length; i++)\\n    bytes[i] = binary.charCodeAt(i);\\n  return new TypedArrayConstructor(bytes.buffer);\\n}\\nfunction parseEvaluationResultValue(value, handles = [], refs = /* @__PURE__ */ new Map()) {\\n  if (Object.is(value, void 0))\\n    return void 0;\\n  if (typeof value === \\\"object\\\" && value) {\\n    if (\\\"ref\\\" in value)\\n      return refs.get(value.ref);\\n    if (\\\"v\\\" in value) {\\n      if (value.v === \\\"undefined\\\")\\n        return void 0;\\n      if (value.v === \\\"null\\\")\\n        return null;\\n      if (value.v === \\\"NaN\\\")\\n        return NaN;\\n      if (value.v === \\\"Infinity\\\")\\n        return Infinity;\\n      if (value.v === \\\"-Infinity\\\")\\n        return -Infinity;\\n      if (value.v === \\\"-0\\\")\\n        return -0;\\n      return void 0;\\n    }\\n    if (\\\"d\\\" in value) {\\n      return new Date(value.d);\\n    }\\n    if (\\\"u\\\" in value)\\n      return new URL(value.u);\\n    if (\\\"bi\\\" in value)\\n      return BigInt(value.bi);\\n    if (\\\"e\\\" in value) {\\n      const error = new Error(value.e.m);\\n      error.name = value.e.n;\\n      error.stack = value.e.s;\\n      return error;\\n    }\\n    if (\\\"r\\\" in value)\\n      return new RegExp(value.r.p, value.r.f);\\n    if (\\\"a\\\" in value) {\\n      const result = [];\\n      refs.set(value.id, result);\\n      for (const a of value.a)\\n        result.push(parseEvaluationResultValue(a, handles, refs));\\n      return result;\\n    }\\n    if (\\\"o\\\" in value) {\\n      const result = {};\\n      refs.set(value.id, result);\\n      for (const { k, v } of value.o) {\\n        if (k === \\\"__proto__\\\")\\n          continue;\\n        result[k] = parseEvaluationResultValue(v, handles, refs);\\n      }\\n      return result;\\n    }\\n    if (\\\"h\\\" in value)\\n      return handles[value.h];\\n    if (\\\"ta\\\" in value)\\n      return base64ToTypedArray(value.ta.b, typedArrayConstructors[value.ta.k]);\\n  }\\n  return value;\\n}\\nfunction serializeAsCallArgument(value, handleSerializer) {\\n  return serialize(value, handleSerializer, { visited: /* @__PURE__ */ new Map(), lastId: 0 });\\n}\\nfunction serialize(value, handleSerializer, visitorInfo) {\\n  if (value && typeof value === \\\"object\\\") {\\n    if (typeof globalThis.Window === \\\"function\\\" && value instanceof globalThis.Window)\\n      return \\\"ref: <Window>\\\";\\n    if (typeof globalThis.Document === \\\"function\\\" && value instanceof globalThis.Document)\\n      return \\\"ref: <Document>\\\";\\n    if (typeof globalThis.Node === \\\"function\\\" && value instanceof globalThis.Node)\\n      return \\\"ref: <Node>\\\";\\n  }\\n  return innerSerialize(value, handleSerializer, visitorInfo);\\n}\\nfunction innerSerialize(value, handleSerializer, visitorInfo) {\\n  var _a;\\n  const result = handleSerializer(value);\\n  if (\\\"fallThrough\\\" in result)\\n    value = result.fallThrough;\\n  else\\n    return result;\\n  if (typeof value === \\\"symbol\\\")\\n    return { v: \\\"undefined\\\" };\\n  if (Object.is(value, void 0))\\n    return { v: \\\"undefined\\\" };\\n  if (Object.is(value, null))\\n    return { v: \\\"null\\\" };\\n  if (Object.is(value, NaN))\\n    return { v: \\\"NaN\\\" };\\n  if (Object.is(value, Infinity))\\n    return { v: \\\"Infinity\\\" };\\n  if (Object.is(value, -Infinity))\\n    return { v: \\\"-Infinity\\\" };\\n  if (Object.is(value, -0))\\n    return { v: \\\"-0\\\" };\\n  if (typeof value === \\\"boolean\\\")\\n    return value;\\n  if (typeof value === \\\"number\\\")\\n    return value;\\n  if (typeof value === \\\"string\\\")\\n    return value;\\n  if (typeof value === \\\"bigint\\\")\\n    return { bi: value.toString() };\\n  if (isError(value)) {\\n    let stack;\\n    if ((_a = value.stack) == null ? void 0 : _a.startsWith(value.name + \\\": \\\" + value.message)) {\\n      stack = value.stack;\\n    } else {\\n      stack = `${value.name}: ${value.message}\\n${value.stack}`;\\n    }\\n    return { e: { n: value.name, m: value.message, s: stack } };\\n  }\\n  if (isDate(value))\\n    return { d: value.toJSON() };\\n  if (isURL(value))\\n    return { u: value.toJSON() };\\n  if (isRegExp2(value))\\n    return { r: { p: value.source, f: value.flags } };\\n  for (const [k, ctor] of Object.entries(typedArrayConstructors)) {\\n    if (isTypedArray(value, ctor))\\n      return { ta: { b: typedArrayToBase64(value), k } };\\n  }\\n  const id = visitorInfo.visited.get(value);\\n  if (id)\\n    return { ref: id };\\n  if (Array.isArray(value)) {\\n    const a = [];\\n    const id2 = ++visitorInfo.lastId;\\n    visitorInfo.visited.set(value, id2);\\n    for (let i = 0; i < value.length; ++i)\\n      a.push(serialize(value[i], handleSerializer, visitorInfo));\\n    return { a, id: id2 };\\n  }\\n  if (typeof value === \\\"object\\\") {\\n    const o = [];\\n    const id2 = ++visitorInfo.lastId;\\n    visitorInfo.visited.set(value, id2);\\n    for (const name of Object.keys(value)) {\\n      let item;\\n      try {\\n        item = value[name];\\n      } catch (e) {\\n        continue;\\n      }\\n      if (name === \\\"toJSON\\\" && typeof item === \\\"function\\\")\\n        o.push({ k: name, v: { o: [], id: 0 } });\\n      else\\n        o.push({ k: name, v: serialize(item, handleSerializer, visitorInfo) });\\n    }\\n    let jsonWrapper;\\n    try {\\n      if (o.length === 0 && value.toJSON && typeof value.toJSON === \\\"function\\\")\\n        jsonWrapper = { value: value.toJSON() };\\n    } catch (e) {\\n    }\\n    if (jsonWrapper)\\n      return innerSerialize(jsonWrapper.value, handleSerializer, visitorInfo);\\n    return { o, id: id2 };\\n  }\\n}\\n\\n// packages/injected/src/utilityScript.ts\\nvar UtilityScript = class {\\n  // eslint-disable-next-line no-restricted-globals\\n  constructor(global, isUnderTest) {\\n    var _a, _b, _c, _d, _e, _f, _g, _h;\\n    this.global = global;\\n    this.isUnderTest = isUnderTest;\\n    if (global.__pwClock) {\\n      this.builtins = global.__pwClock.builtins;\\n    } else {\\n      this.builtins = {\\n        setTimeout: (_a = global.setTimeout) == null ? void 0 : _a.bind(global),\\n        clearTimeout: (_b = global.clearTimeout) == null ? void 0 : _b.bind(global),\\n        setInterval: (_c = global.setInterval) == null ? void 0 : _c.bind(global),\\n        clearInterval: (_d = global.clearInterval) == null ? void 0 : _d.bind(global),\\n        requestAnimationFrame: (_e = global.requestAnimationFrame) == null ? void 0 : _e.bind(global),\\n        cancelAnimationFrame: (_f = global.cancelAnimationFrame) == null ? void 0 : _f.bind(global),\\n        requestIdleCallback: (_g = global.requestIdleCallback) == null ? void 0 : _g.bind(global),\\n        cancelIdleCallback: (_h = global.cancelIdleCallback) == null ? void 0 : _h.bind(global),\\n        performance: global.performance,\\n        Intl: global.Intl,\\n        Date: global.Date\\n      };\\n    }\\n    if (this.isUnderTest)\\n      global.builtins = this.builtins;\\n  }\\n  evaluate(isFunction, returnByValue, expression, argCount, ...argsAndHandles) {\\n    const args = argsAndHandles.slice(0, argCount);\\n    const handles = argsAndHandles.slice(argCount);\\n    const parameters = [];\\n    for (let i = 0; i < args.length; i++)\\n      parameters[i] = parseEvaluationResultValue(args[i], handles);\\n    let result = this.global.eval(expression);\\n    if (isFunction === true) {\\n      result = result(...parameters);\\n    } else if (isFunction === false) {\\n      result = result;\\n    } else {\\n      if (typeof result === \\\"function\\\")\\n        result = result(...parameters);\\n    }\\n    return returnByValue ? this._promiseAwareJsonValueNoThrow(result) : result;\\n  }\\n  jsonValue(returnByValue, value) {\\n    if (value === void 0)\\n      return void 0;\\n    return serializeAsCallArgument(value, (value2) => ({ fallThrough: value2 }));\\n  }\\n  _promiseAwareJsonValueNoThrow(value) {\\n    const safeJson = (value2) => {\\n      try {\\n        return this.jsonValue(true, value2);\\n      } catch (e) {\\n        return void 0;\\n      }\\n    };\\n    if (value && typeof value === \\\"object\\\" && typeof value.then === \\\"function\\\") {\\n      return (async () => {\\n        const promiseValue = await value;\\n        return safeJson(promiseValue);\\n      })();\\n    }\\n    return safeJson(value);\\n  }\\n};\\n\\n// packages/injected/src/injectedScript.ts\\nvar InjectedScript = class {\\n  // eslint-disable-next-line no-restricted-globals\\n  constructor(window, options) {\\n    this._testIdAttributeNameForStrictErrorAndConsoleCodegen = \\\"data-testid\\\";\\n    // Recorder must use any external dependencies through InjectedScript.\\n    // Otherwise it will end up with a copy of all modules it uses, and any\\n    // module-level globals will be duplicated, which leads to subtle bugs.\\n    this.utils = {\\n      asLocator,\\n      cacheNormalizedWhitespaces,\\n      elementText,\\n      getAriaRole,\\n      getElementAccessibleDescription,\\n      getElementAccessibleName,\\n      isElementVisible,\\n      isInsideScope,\\n      normalizeWhiteSpace,\\n      parseAriaSnapshot,\\n      // Builtins protect injected code from clock emulation.\\n      builtins: null\\n    };\\n    this.window = window;\\n    this.document = window.document;\\n    this.isUnderTest = options.isUnderTest;\\n    this.utils.builtins = new UtilityScript(window, options.isUnderTest).builtins;\\n    this._sdkLanguage = options.sdkLanguage;\\n    this._testIdAttributeNameForStrictErrorAndConsoleCodegen = options.testIdAttributeName;\\n    this._evaluator = new SelectorEvaluatorImpl();\\n    this.consoleApi = new ConsoleAPI(this);\\n    this.onGlobalListenersRemoved = /* @__PURE__ */ new Set();\\n    this._autoClosingTags = /* @__PURE__ */ new Set([\\\"AREA\\\", \\\"BASE\\\", \\\"BR\\\", \\\"COL\\\", \\\"COMMAND\\\", \\\"EMBED\\\", \\\"HR\\\", \\\"IMG\\\", \\\"INPUT\\\", \\\"KEYGEN\\\", \\\"LINK\\\", \\\"MENUITEM\\\", \\\"META\\\", \\\"PARAM\\\", \\\"SOURCE\\\", \\\"TRACK\\\", \\\"WBR\\\"]);\\n    this._booleanAttributes = /* @__PURE__ */ new Set([\\\"checked\\\", \\\"selected\\\", \\\"disabled\\\", \\\"readonly\\\", \\\"multiple\\\"]);\\n    this._eventTypes = /* @__PURE__ */ new Map([\\n      [\\\"auxclick\\\", \\\"mouse\\\"],\\n      [\\\"click\\\", \\\"mouse\\\"],\\n      [\\\"dblclick\\\", \\\"mouse\\\"],\\n      [\\\"mousedown\\\", \\\"mouse\\\"],\\n      [\\\"mouseeenter\\\", \\\"mouse\\\"],\\n      [\\\"mouseleave\\\", \\\"mouse\\\"],\\n      [\\\"mousemove\\\", \\\"mouse\\\"],\\n      [\\\"mouseout\\\", \\\"mouse\\\"],\\n      [\\\"mouseover\\\", \\\"mouse\\\"],\\n      [\\\"mouseup\\\", \\\"mouse\\\"],\\n      [\\\"mouseleave\\\", \\\"mouse\\\"],\\n      [\\\"mousewheel\\\", \\\"mouse\\\"],\\n      [\\\"keydown\\\", \\\"keyboard\\\"],\\n      [\\\"keyup\\\", \\\"keyboard\\\"],\\n      [\\\"keypress\\\", \\\"keyboard\\\"],\\n      [\\\"textInput\\\", \\\"keyboard\\\"],\\n      [\\\"touchstart\\\", \\\"touch\\\"],\\n      [\\\"touchmove\\\", \\\"touch\\\"],\\n      [\\\"touchend\\\", \\\"touch\\\"],\\n      [\\\"touchcancel\\\", \\\"touch\\\"],\\n      [\\\"pointerover\\\", \\\"pointer\\\"],\\n      [\\\"pointerout\\\", \\\"pointer\\\"],\\n      [\\\"pointerenter\\\", \\\"pointer\\\"],\\n      [\\\"pointerleave\\\", \\\"pointer\\\"],\\n      [\\\"pointerdown\\\", \\\"pointer\\\"],\\n      [\\\"pointerup\\\", \\\"pointer\\\"],\\n      [\\\"pointermove\\\", \\\"pointer\\\"],\\n      [\\\"pointercancel\\\", \\\"pointer\\\"],\\n      [\\\"gotpointercapture\\\", \\\"pointer\\\"],\\n      [\\\"lostpointercapture\\\", \\\"pointer\\\"],\\n      [\\\"focus\\\", \\\"focus\\\"],\\n      [\\\"blur\\\", \\\"focus\\\"],\\n      [\\\"drag\\\", \\\"drag\\\"],\\n      [\\\"dragstart\\\", \\\"drag\\\"],\\n      [\\\"dragend\\\", \\\"drag\\\"],\\n      [\\\"dragover\\\", \\\"drag\\\"],\\n      [\\\"dragenter\\\", \\\"drag\\\"],\\n      [\\\"dragleave\\\", \\\"drag\\\"],\\n      [\\\"dragexit\\\", \\\"drag\\\"],\\n      [\\\"drop\\\", \\\"drag\\\"],\\n      [\\\"wheel\\\", \\\"wheel\\\"],\\n      [\\\"deviceorientation\\\", \\\"deviceorientation\\\"],\\n      [\\\"deviceorientationabsolute\\\", \\\"deviceorientation\\\"],\\n      [\\\"devicemotion\\\", \\\"devicemotion\\\"]\\n    ]);\\n    this._hoverHitTargetInterceptorEvents = /* @__PURE__ */ new Set([\\\"mousemove\\\"]);\\n    this._tapHitTargetInterceptorEvents = /* @__PURE__ */ new Set([\\\"pointerdown\\\", \\\"pointerup\\\", \\\"touchstart\\\", \\\"touchend\\\", \\\"touchcancel\\\"]);\\n    this._mouseHitTargetInterceptorEvents = /* @__PURE__ */ new Set([\\\"mousedown\\\", \\\"mouseup\\\", \\\"pointerdown\\\", \\\"pointerup\\\", \\\"click\\\", \\\"auxclick\\\", \\\"dblclick\\\", \\\"contextmenu\\\"]);\\n    this._allHitTargetInterceptorEvents = /* @__PURE__ */ new Set([...this._hoverHitTargetInterceptorEvents, ...this._tapHitTargetInterceptorEvents, ...this._mouseHitTargetInterceptorEvents]);\\n    this._engines = /* @__PURE__ */ new Map();\\n    this._engines.set(\\\"xpath\\\", XPathEngine);\\n    this._engines.set(\\\"xpath:light\\\", XPathEngine);\\n    this._engines.set(\\\"_react\\\", createReactEngine());\\n    this._engines.set(\\\"_vue\\\", createVueEngine());\\n    this._engines.set(\\\"role\\\", createRoleEngine(false));\\n    this._engines.set(\\\"text\\\", this._createTextEngine(true, false));\\n    this._engines.set(\\\"text:light\\\", this._createTextEngine(false, false));\\n    this._engines.set(\\\"id\\\", this._createAttributeEngine(\\\"id\\\", true));\\n    this._engines.set(\\\"id:light\\\", this._createAttributeEngine(\\\"id\\\", false));\\n    this._engines.set(\\\"data-testid\\\", this._createAttributeEngine(\\\"data-testid\\\", true));\\n    this._engines.set(\\\"data-testid:light\\\", this._createAttributeEngine(\\\"data-testid\\\", false));\\n    this._engines.set(\\\"data-test-id\\\", this._createAttributeEngine(\\\"data-test-id\\\", true));\\n    this._engines.set(\\\"data-test-id:light\\\", this._createAttributeEngine(\\\"data-test-id\\\", false));\\n    this._engines.set(\\\"data-test\\\", this._createAttributeEngine(\\\"data-test\\\", true));\\n    this._engines.set(\\\"data-test:light\\\", this._createAttributeEngine(\\\"data-test\\\", false));\\n    this._engines.set(\\\"css\\\", this._createCSSEngine());\\n    this._engines.set(\\\"nth\\\", { queryAll: () => [] });\\n    this._engines.set(\\\"visible\\\", this._createVisibleEngine());\\n    this._engines.set(\\\"internal:control\\\", this._createControlEngine());\\n    this._engines.set(\\\"internal:has\\\", this._createHasEngine());\\n    this._engines.set(\\\"internal:has-not\\\", this._createHasNotEngine());\\n    this._engines.set(\\\"internal:and\\\", { queryAll: () => [] });\\n    this._engines.set(\\\"internal:or\\\", { queryAll: () => [] });\\n    this._engines.set(\\\"internal:chain\\\", this._createInternalChainEngine());\\n    this._engines.set(\\\"internal:label\\\", this._createInternalLabelEngine());\\n    this._engines.set(\\\"internal:text\\\", this._createTextEngine(true, true));\\n    this._engines.set(\\\"internal:has-text\\\", this._createInternalHasTextEngine());\\n    this._engines.set(\\\"internal:has-not-text\\\", this._createInternalHasNotTextEngine());\\n    this._engines.set(\\\"internal:attr\\\", this._createNamedAttributeEngine());\\n    this._engines.set(\\\"internal:testid\\\", this._createNamedAttributeEngine());\\n    this._engines.set(\\\"internal:role\\\", createRoleEngine(true));\\n    this._engines.set(\\\"internal:describe\\\", this._createDescribeEngine());\\n    this._engines.set(\\\"aria-ref\\\", this._createAriaRefEngine());\\n    for (const { name, source } of options.customEngines)\\n      this._engines.set(name, this.eval(source));\\n    this._stableRafCount = options.stableRafCount;\\n    this._browserName = options.browserName;\\n    setGlobalOptions({ browserNameForWorkarounds: options.browserName, inputFileRoleTextbox: options.inputFileRoleTextbox });\\n    this._setupGlobalListenersRemovalDetection();\\n    this._setupHitTargetInterceptors();\\n    if (this.isUnderTest)\\n      this.window.__injectedScript = this;\\n  }\\n  eval(expression) {\\n    return this.window.eval(expression);\\n  }\\n  testIdAttributeNameForStrictErrorAndConsoleCodegen() {\\n    return this._testIdAttributeNameForStrictErrorAndConsoleCodegen;\\n  }\\n  parseSelector(selector) {\\n    const result = parseSelector(selector);\\n    visitAllSelectorParts(result, (part) => {\\n      if (!this._engines.has(part.name))\\n        throw this.createStacklessError(`Unknown engine \\\"${part.name}\\\" while parsing selector ${selector}`);\\n    });\\n    return result;\\n  }\\n  generateSelector(targetElement, options) {\\n    return generateSelector(this, targetElement, options);\\n  }\\n  generateSelectorSimple(targetElement, options) {\\n    return generateSelector(this, targetElement, { ...options, testIdAttributeName: this._testIdAttributeNameForStrictErrorAndConsoleCodegen }).selector;\\n  }\\n  querySelector(selector, root, strict) {\\n    const result = this.querySelectorAll(selector, root);\\n    if (strict && result.length > 1)\\n      throw this.strictModeViolationError(selector, result);\\n    return result[0];\\n  }\\n  _queryNth(elements, part) {\\n    const list = [...elements];\\n    let nth = +part.body;\\n    if (nth === -1)\\n      nth = list.length - 1;\\n    return new Set(list.slice(nth, nth + 1));\\n  }\\n  _queryLayoutSelector(elements, part, originalRoot) {\\n    const name = part.name;\\n    const body = part.body;\\n    const result = [];\\n    const inner = this.querySelectorAll(body.parsed, originalRoot);\\n    for (const element of elements) {\\n      const score = layoutSelectorScore(name, element, inner, body.distance);\\n      if (score !== void 0)\\n        result.push({ element, score });\\n    }\\n    result.sort((a, b) => a.score - b.score);\\n    return new Set(result.map((r) => r.element));\\n  }\\n  ariaSnapshot(node, options) {\\n    if (node.nodeType !== Node.ELEMENT_NODE)\\n      throw this.createStacklessError(\\\"Can only capture aria snapshot of Element nodes.\\\");\\n    this._lastAriaSnapshot = generateAriaTree(node, options);\\n    return renderAriaTree(this._lastAriaSnapshot, options);\\n  }\\n  getAllByAria(document, template) {\\n    return getAllByAria(document.documentElement, template);\\n  }\\n  querySelectorAll(selector, root) {\\n    if (selector.capture !== void 0) {\\n      if (selector.parts.some((part) => part.name === \\\"nth\\\"))\\n        throw this.createStacklessError(`Can't query n-th element in a request with the capture.`);\\n      const withHas = { parts: selector.parts.slice(0, selector.capture + 1) };\\n      if (selector.capture < selector.parts.length - 1) {\\n        const parsed = { parts: selector.parts.slice(selector.capture + 1) };\\n        const has = { name: \\\"internal:has\\\", body: { parsed }, source: stringifySelector(parsed) };\\n        withHas.parts.push(has);\\n      }\\n      return this.querySelectorAll(withHas, root);\\n    }\\n    if (!root[\\\"querySelectorAll\\\"])\\n      throw this.createStacklessError(\\\"Node is not queryable.\\\");\\n    if (selector.capture !== void 0) {\\n      throw this.createStacklessError(\\\"Internal error: there should not be a capture in the selector.\\\");\\n    }\\n    if (root.nodeType === 11 && selector.parts.length === 1 && selector.parts[0].name === \\\"css\\\" && selector.parts[0].source === \\\":scope\\\")\\n      return [root];\\n    this._evaluator.begin();\\n    try {\\n      let roots = /* @__PURE__ */ new Set([root]);\\n      for (const part of selector.parts) {\\n        if (part.name === \\\"nth\\\") {\\n          roots = this._queryNth(roots, part);\\n        } else if (part.name === \\\"internal:and\\\") {\\n          const andElements = this.querySelectorAll(part.body.parsed, root);\\n          roots = new Set(andElements.filter((e) => roots.has(e)));\\n        } else if (part.name === \\\"internal:or\\\") {\\n          const orElements = this.querySelectorAll(part.body.parsed, root);\\n          roots = new Set(sortInDOMOrder(/* @__PURE__ */ new Set([...roots, ...orElements])));\\n        } else if (kLayoutSelectorNames.includes(part.name)) {\\n          roots = this._queryLayoutSelector(roots, part, root);\\n        } else {\\n          const next = /* @__PURE__ */ new Set();\\n          for (const root2 of roots) {\\n            const all = this._queryEngineAll(part, root2);\\n            for (const one of all)\\n              next.add(one);\\n          }\\n          roots = next;\\n        }\\n      }\\n      return [...roots];\\n    } finally {\\n      this._evaluator.end();\\n    }\\n  }\\n  _queryEngineAll(part, root) {\\n    const result = this._engines.get(part.name).queryAll(root, part.body);\\n    for (const element of result) {\\n      if (!(\\\"nodeName\\\" in element))\\n        throw this.createStacklessError(`Expected a Node but got ${Object.prototype.toString.call(element)}`);\\n    }\\n    return result;\\n  }\\n  _createAttributeEngine(attribute, shadow) {\\n    const toCSS = (selector) => {\\n      const css = `[${attribute}=${JSON.stringify(selector)}]`;\\n      return [{ simples: [{ selector: { css, functions: [] }, combinator: \\\"\\\" }] }];\\n    };\\n    return {\\n      queryAll: (root, selector) => {\\n        return this._evaluator.query({ scope: root, pierceShadow: shadow }, toCSS(selector));\\n      }\\n    };\\n  }\\n  _createCSSEngine() {\\n    return {\\n      queryAll: (root, body) => {\\n        return this._evaluator.query({ scope: root, pierceShadow: true }, body);\\n      }\\n    };\\n  }\\n  _createTextEngine(shadow, internal) {\\n    const queryAll = (root, selector) => {\\n      const { matcher, kind } = createTextMatcher(selector, internal);\\n      const result = [];\\n      let lastDidNotMatchSelf = null;\\n      const appendElement = (element) => {\\n        if (kind === \\\"lax\\\" && lastDidNotMatchSelf && lastDidNotMatchSelf.contains(element))\\n          return false;\\n        const matches = elementMatchesText(this._evaluator._cacheText, element, matcher);\\n        if (matches === \\\"none\\\")\\n          lastDidNotMatchSelf = element;\\n        if (matches === \\\"self\\\" || matches === \\\"selfAndChildren\\\" && kind === \\\"strict\\\" && !internal)\\n          result.push(element);\\n      };\\n      if (root.nodeType === Node.ELEMENT_NODE)\\n        appendElement(root);\\n      const elements = this._evaluator._queryCSS({ scope: root, pierceShadow: shadow }, \\\"*\\\");\\n      for (const element of elements)\\n        appendElement(element);\\n      return result;\\n    };\\n    return { queryAll };\\n  }\\n  _createInternalHasTextEngine() {\\n    return {\\n      queryAll: (root, selector) => {\\n        if (root.nodeType !== 1)\\n          return [];\\n        const element = root;\\n        const text = elementText(this._evaluator._cacheText, element);\\n        const { matcher } = createTextMatcher(selector, true);\\n        return matcher(text) ? [element] : [];\\n      }\\n    };\\n  }\\n  _createInternalHasNotTextEngine() {\\n    return {\\n      queryAll: (root, selector) => {\\n        if (root.nodeType !== 1)\\n          return [];\\n        const element = root;\\n        const text = elementText(this._evaluator._cacheText, element);\\n        const { matcher } = createTextMatcher(selector, true);\\n        return matcher(text) ? [] : [element];\\n      }\\n    };\\n  }\\n  _createInternalLabelEngine() {\\n    return {\\n      queryAll: (root, selector) => {\\n        const { matcher } = createTextMatcher(selector, true);\\n        const allElements = this._evaluator._queryCSS({ scope: root, pierceShadow: true }, \\\"*\\\");\\n        return allElements.filter((element) => {\\n          return getElementLabels(this._evaluator._cacheText, element).some((label) => matcher(label));\\n        });\\n      }\\n    };\\n  }\\n  _createNamedAttributeEngine() {\\n    const queryAll = (root, selector) => {\\n      const parsed = parseAttributeSelector(selector, true);\\n      if (parsed.name || parsed.attributes.length !== 1)\\n        throw new Error(\\\"Malformed attribute selector: \\\" + selector);\\n      const { name, value, caseSensitive } = parsed.attributes[0];\\n      const lowerCaseValue = caseSensitive ? null : value.toLowerCase();\\n      let matcher;\\n      if (value instanceof RegExp)\\n        matcher = (s) => !!s.match(value);\\n      else if (caseSensitive)\\n        matcher = (s) => s === value;\\n      else\\n        matcher = (s) => s.toLowerCase().includes(lowerCaseValue);\\n      const elements = this._evaluator._queryCSS({ scope: root, pierceShadow: true }, `[${name}]`);\\n      return elements.filter((e) => matcher(e.getAttribute(name)));\\n    };\\n    return { queryAll };\\n  }\\n  _createDescribeEngine() {\\n    const queryAll = (root) => {\\n      if (root.nodeType !== 1)\\n        return [];\\n      return [root];\\n    };\\n    return { queryAll };\\n  }\\n  _createControlEngine() {\\n    return {\\n      queryAll(root, body) {\\n        if (body === \\\"enter-frame\\\")\\n          return [];\\n        if (body === \\\"return-empty\\\")\\n          return [];\\n        if (body === \\\"component\\\") {\\n          if (root.nodeType !== 1)\\n            return [];\\n          return [root.childElementCount === 1 ? root.firstElementChild : root];\\n        }\\n        throw new Error(`Internal error, unknown internal:control selector ${body}`);\\n      }\\n    };\\n  }\\n  _createHasEngine() {\\n    const queryAll = (root, body) => {\\n      if (root.nodeType !== 1)\\n        return [];\\n      const has = !!this.querySelector(body.parsed, root, false);\\n      return has ? [root] : [];\\n    };\\n    return { queryAll };\\n  }\\n  _createHasNotEngine() {\\n    const queryAll = (root, body) => {\\n      if (root.nodeType !== 1)\\n        return [];\\n      const has = !!this.querySelector(body.parsed, root, false);\\n      return has ? [] : [root];\\n    };\\n    return { queryAll };\\n  }\\n  _createVisibleEngine() {\\n    const queryAll = (root, body) => {\\n      if (root.nodeType !== 1)\\n        return [];\\n      const visible = body === \\\"true\\\";\\n      return isElementVisible(root) === visible ? [root] : [];\\n    };\\n    return { queryAll };\\n  }\\n  _createInternalChainEngine() {\\n    const queryAll = (root, body) => {\\n      return this.querySelectorAll(body.parsed, root);\\n    };\\n    return { queryAll };\\n  }\\n  extend(source, params) {\\n    const constrFunction = this.window.eval(`\\n    (() => {\\n      const module = {};\\n      ${source}\\n      return module.exports.default();\\n    })()`);\\n    return new constrFunction(this, params);\\n  }\\n  async viewportRatio(element) {\\n    return await new Promise((resolve) => {\\n      const observer = new IntersectionObserver((entries) => {\\n        resolve(entries[0].intersectionRatio);\\n        observer.disconnect();\\n      });\\n      observer.observe(element);\\n      this.utils.builtins.requestAnimationFrame(() => {\\n      });\\n    });\\n  }\\n  getElementBorderWidth(node) {\\n    if (node.nodeType !== Node.ELEMENT_NODE || !node.ownerDocument || !node.ownerDocument.defaultView)\\n      return { left: 0, top: 0 };\\n    const style = node.ownerDocument.defaultView.getComputedStyle(node);\\n    return { left: parseInt(style.borderLeftWidth || \\\"\\\", 10), top: parseInt(style.borderTopWidth || \\\"\\\", 10) };\\n  }\\n  describeIFrameStyle(iframe) {\\n    if (!iframe.ownerDocument || !iframe.ownerDocument.defaultView)\\n      return \\\"error:notconnected\\\";\\n    const defaultView = iframe.ownerDocument.defaultView;\\n    for (let e = iframe; e; e = parentElementOrShadowHost(e)) {\\n      if (defaultView.getComputedStyle(e).transform !== \\\"none\\\")\\n        return \\\"transformed\\\";\\n    }\\n    const iframeStyle = defaultView.getComputedStyle(iframe);\\n    return {\\n      left: parseInt(iframeStyle.borderLeftWidth || \\\"\\\", 10) + parseInt(iframeStyle.paddingLeft || \\\"\\\", 10),\\n      top: parseInt(iframeStyle.borderTopWidth || \\\"\\\", 10) + parseInt(iframeStyle.paddingTop || \\\"\\\", 10)\\n    };\\n  }\\n  retarget(node, behavior) {\\n    let element = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;\\n    if (!element)\\n      return null;\\n    if (behavior === \\\"none\\\")\\n      return element;\\n    if (!element.matches(\\\"input, textarea, select\\\") && !element.isContentEditable) {\\n      if (behavior === \\\"button-link\\\")\\n        element = element.closest(\\\"button, [role=button], a, [role=link]\\\") || element;\\n      else\\n        element = element.closest(\\\"button, [role=button], [role=checkbox], [role=radio]\\\") || element;\\n    }\\n    if (behavior === \\\"follow-label\\\") {\\n      if (!element.matches(\\\"a, input, textarea, button, select, [role=link], [role=button], [role=checkbox], [role=radio]\\\") && !element.isContentEditable) {\\n        const enclosingLabel = element.closest(\\\"label\\\");\\n        if (enclosingLabel && enclosingLabel.control)\\n          element = enclosingLabel.control;\\n      }\\n    }\\n    return element;\\n  }\\n  async checkElementStates(node, states) {\\n    if (states.includes(\\\"stable\\\")) {\\n      const stableResult = await this._checkElementIsStable(node);\\n      if (stableResult === false)\\n        return { missingState: \\\"stable\\\" };\\n      if (stableResult === \\\"error:notconnected\\\")\\n        return \\\"error:notconnected\\\";\\n    }\\n    for (const state of states) {\\n      if (state !== \\\"stable\\\") {\\n        const result = this.elementState(node, state);\\n        if (result.received === \\\"error:notconnected\\\")\\n          return \\\"error:notconnected\\\";\\n        if (!result.matches)\\n          return { missingState: state };\\n      }\\n    }\\n  }\\n  async _checkElementIsStable(node) {\\n    const continuePolling = Symbol(\\\"continuePolling\\\");\\n    let lastRect;\\n    let stableRafCounter = 0;\\n    let lastTime = 0;\\n    const check = () => {\\n      const element = this.retarget(node, \\\"no-follow-label\\\");\\n      if (!element)\\n        return \\\"error:notconnected\\\";\\n      const time = this.utils.builtins.performance.now();\\n      if (this._stableRafCount > 1 && time - lastTime < 15)\\n        return continuePolling;\\n      lastTime = time;\\n      const clientRect = element.getBoundingClientRect();\\n      const rect = { x: clientRect.top, y: clientRect.left, width: clientRect.width, height: clientRect.height };\\n      if (lastRect) {\\n        const samePosition = rect.x === lastRect.x && rect.y === lastRect.y && rect.width === lastRect.width && rect.height === lastRect.height;\\n        if (!samePosition)\\n          return false;\\n        if (++stableRafCounter >= this._stableRafCount)\\n          return true;\\n      }\\n      lastRect = rect;\\n      return continuePolling;\\n    };\\n    let fulfill;\\n    let reject;\\n    const result = new Promise((f, r) => {\\n      fulfill = f;\\n      reject = r;\\n    });\\n    const raf = () => {\\n      try {\\n        const success = check();\\n        if (success !== continuePolling)\\n          fulfill(success);\\n        else\\n          this.utils.builtins.requestAnimationFrame(raf);\\n      } catch (e) {\\n        reject(e);\\n      }\\n    };\\n    this.utils.builtins.requestAnimationFrame(raf);\\n    return result;\\n  }\\n  _createAriaRefEngine() {\\n    const queryAll = (root, selector) => {\\n      var _a, _b;\\n      const result = (_b = (_a = this._lastAriaSnapshot) == null ? void 0 : _a.elements) == null ? void 0 : _b.get(selector);\\n      return result && result.isConnected ? [result] : [];\\n    };\\n    return { queryAll };\\n  }\\n  elementState(node, state) {\\n    const element = this.retarget(node, [\\\"visible\\\", \\\"hidden\\\"].includes(state) ? \\\"none\\\" : \\\"follow-label\\\");\\n    if (!element || !element.isConnected) {\\n      if (state === \\\"hidden\\\")\\n        return { matches: true, received: \\\"hidden\\\" };\\n      return { matches: false, received: \\\"error:notconnected\\\" };\\n    }\\n    if (state === \\\"visible\\\" || state === \\\"hidden\\\") {\\n      const visible = isElementVisible(element);\\n      return {\\n        matches: state === \\\"visible\\\" ? visible : !visible,\\n        received: visible ? \\\"visible\\\" : \\\"hidden\\\"\\n      };\\n    }\\n    if (state === \\\"disabled\\\" || state === \\\"enabled\\\") {\\n      const disabled = getAriaDisabled(element);\\n      return {\\n        matches: state === \\\"disabled\\\" ? disabled : !disabled,\\n        received: disabled ? \\\"disabled\\\" : \\\"enabled\\\"\\n      };\\n    }\\n    if (state === \\\"editable\\\") {\\n      const disabled = getAriaDisabled(element);\\n      const readonly = getReadonly(element);\\n      if (readonly === \\\"error\\\")\\n        throw this.createStacklessError(\\\"Element is not an <input>, <textarea>, <select> or [contenteditable] and does not have a role allowing [aria-readonly]\\\");\\n      return {\\n        matches: !disabled && !readonly,\\n        received: disabled ? \\\"disabled\\\" : readonly ? \\\"readOnly\\\" : \\\"editable\\\"\\n      };\\n    }\\n    if (state === \\\"checked\\\" || state === \\\"unchecked\\\") {\\n      const need = state === \\\"checked\\\";\\n      const checked = getCheckedWithoutMixed(element);\\n      if (checked === \\\"error\\\")\\n        throw this.createStacklessError(\\\"Not a checkbox or radio button\\\");\\n      return {\\n        matches: need === checked,\\n        received: checked ? \\\"checked\\\" : \\\"unchecked\\\"\\n      };\\n    }\\n    if (state === \\\"indeterminate\\\") {\\n      const checked = getCheckedAllowMixed(element);\\n      if (checked === \\\"error\\\")\\n        throw this.createStacklessError(\\\"Not a checkbox or radio button\\\");\\n      return {\\n        matches: checked === \\\"mixed\\\",\\n        received: checked === true ? \\\"checked\\\" : checked === false ? \\\"unchecked\\\" : \\\"mixed\\\"\\n      };\\n    }\\n    throw this.createStacklessError(`Unexpected element state \\\"${state}\\\"`);\\n  }\\n  selectOptions(node, optionsToSelect) {\\n    const element = this.retarget(node, \\\"follow-label\\\");\\n    if (!element)\\n      return \\\"error:notconnected\\\";\\n    if (element.nodeName.toLowerCase() !== \\\"select\\\")\\n      throw this.createStacklessError(\\\"Element is not a <select> element\\\");\\n    const select = element;\\n    const options = [...select.options];\\n    const selectedOptions = [];\\n    let remainingOptionsToSelect = optionsToSelect.slice();\\n    for (let index = 0; index < options.length; index++) {\\n      const option = options[index];\\n      const filter = (optionToSelect) => {\\n        if (optionToSelect instanceof Node)\\n          return option === optionToSelect;\\n        let matches = true;\\n        if (optionToSelect.valueOrLabel !== void 0)\\n          matches = matches && (optionToSelect.valueOrLabel === option.value || optionToSelect.valueOrLabel === option.label);\\n        if (optionToSelect.value !== void 0)\\n          matches = matches && optionToSelect.value === option.value;\\n        if (optionToSelect.label !== void 0)\\n          matches = matches && optionToSelect.label === option.label;\\n        if (optionToSelect.index !== void 0)\\n          matches = matches && optionToSelect.index === index;\\n        return matches;\\n      };\\n      if (!remainingOptionsToSelect.some(filter))\\n        continue;\\n      selectedOptions.push(option);\\n      if (select.multiple) {\\n        remainingOptionsToSelect = remainingOptionsToSelect.filter((o) => !filter(o));\\n      } else {\\n        remainingOptionsToSelect = [];\\n        break;\\n      }\\n    }\\n    if (remainingOptionsToSelect.length)\\n      return \\\"error:optionsnotfound\\\";\\n    select.value = void 0;\\n    selectedOptions.forEach((option) => option.selected = true);\\n    select.dispatchEvent(new Event(\\\"input\\\", { bubbles: true, composed: true }));\\n    select.dispatchEvent(new Event(\\\"change\\\", { bubbles: true }));\\n    return selectedOptions.map((option) => option.value);\\n  }\\n  fill(node, value) {\\n    const element = this.retarget(node, \\\"follow-label\\\");\\n    if (!element)\\n      return \\\"error:notconnected\\\";\\n    if (element.nodeName.toLowerCase() === \\\"input\\\") {\\n      const input = element;\\n      const type = input.type.toLowerCase();\\n      const kInputTypesToSetValue = /* @__PURE__ */ new Set([\\\"color\\\", \\\"date\\\", \\\"time\\\", \\\"datetime-local\\\", \\\"month\\\", \\\"range\\\", \\\"week\\\"]);\\n      const kInputTypesToTypeInto = /* @__PURE__ */ new Set([\\\"\\\", \\\"email\\\", \\\"number\\\", \\\"password\\\", \\\"search\\\", \\\"tel\\\", \\\"text\\\", \\\"url\\\"]);\\n      if (!kInputTypesToTypeInto.has(type) && !kInputTypesToSetValue.has(type))\\n        throw this.createStacklessError(`Input of type \\\"${type}\\\" cannot be filled`);\\n      if (type === \\\"number\\\") {\\n        value = value.trim();\\n        if (isNaN(Number(value)))\\n          throw this.createStacklessError(\\\"Cannot type text into input[type=number]\\\");\\n      }\\n      if (kInputTypesToSetValue.has(type)) {\\n        value = value.trim();\\n        input.focus();\\n        input.value = value;\\n        if (input.value !== value)\\n          throw this.createStacklessError(\\\"Malformed value\\\");\\n        element.dispatchEvent(new Event(\\\"input\\\", { bubbles: true, composed: true }));\\n        element.dispatchEvent(new Event(\\\"change\\\", { bubbles: true }));\\n        return \\\"done\\\";\\n      }\\n    } else if (element.nodeName.toLowerCase() === \\\"textarea\\\") {\\n    } else if (!element.isContentEditable) {\\n      throw this.createStacklessError(\\\"Element is not an <input>, <textarea> or [contenteditable] element\\\");\\n    }\\n    this.selectText(element);\\n    return \\\"needsinput\\\";\\n  }\\n  selectText(node) {\\n    const element = this.retarget(node, \\\"follow-label\\\");\\n    if (!element)\\n      return \\\"error:notconnected\\\";\\n    if (element.nodeName.toLowerCase() === \\\"input\\\") {\\n      const input = element;\\n      input.select();\\n      input.focus();\\n      return \\\"done\\\";\\n    }\\n    if (element.nodeName.toLowerCase() === \\\"textarea\\\") {\\n      const textarea = element;\\n      textarea.selectionStart = 0;\\n      textarea.selectionEnd = textarea.value.length;\\n      textarea.focus();\\n      return \\\"done\\\";\\n    }\\n    const range = element.ownerDocument.createRange();\\n    range.selectNodeContents(element);\\n    const selection = element.ownerDocument.defaultView.getSelection();\\n    if (selection) {\\n      selection.removeAllRanges();\\n      selection.addRange(range);\\n    }\\n    element.focus();\\n    return \\\"done\\\";\\n  }\\n  _activelyFocused(node) {\\n    const activeElement = node.getRootNode().activeElement;\\n    const isFocused = activeElement === node && !!node.ownerDocument && node.ownerDocument.hasFocus();\\n    return { activeElement, isFocused };\\n  }\\n  focusNode(node, resetSelectionIfNotFocused) {\\n    if (!node.isConnected)\\n      return \\\"error:notconnected\\\";\\n    if (node.nodeType !== Node.ELEMENT_NODE)\\n      throw this.createStacklessError(\\\"Node is not an element\\\");\\n    const { activeElement, isFocused: wasFocused } = this._activelyFocused(node);\\n    if (node.isContentEditable && !wasFocused && activeElement && activeElement.blur) {\\n      activeElement.blur();\\n    }\\n    node.focus();\\n    node.focus();\\n    if (resetSelectionIfNotFocused && !wasFocused && node.nodeName.toLowerCase() === \\\"input\\\") {\\n      try {\\n        const input = node;\\n        input.setSelectionRange(0, 0);\\n      } catch (e) {\\n      }\\n    }\\n    return \\\"done\\\";\\n  }\\n  blurNode(node) {\\n    if (!node.isConnected)\\n      return \\\"error:notconnected\\\";\\n    if (node.nodeType !== Node.ELEMENT_NODE)\\n      throw this.createStacklessError(\\\"Node is not an element\\\");\\n    node.blur();\\n    return \\\"done\\\";\\n  }\\n  setInputFiles(node, payloads) {\\n    if (node.nodeType !== Node.ELEMENT_NODE)\\n      return \\\"Node is not of type HTMLElement\\\";\\n    const element = node;\\n    if (element.nodeName !== \\\"INPUT\\\")\\n      return \\\"Not an <input> element\\\";\\n    const input = element;\\n    const type = (input.getAttribute(\\\"type\\\") || \\\"\\\").toLowerCase();\\n    if (type !== \\\"file\\\")\\n      return \\\"Not an input[type=file] element\\\";\\n    const files = payloads.map((file) => {\\n      const bytes = Uint8Array.from(atob(file.buffer), (c) => c.charCodeAt(0));\\n      return new File([bytes], file.name, { type: file.mimeType, lastModified: file.lastModifiedMs });\\n    });\\n    const dt = new DataTransfer();\\n    for (const file of files)\\n      dt.items.add(file);\\n    input.files = dt.files;\\n    input.dispatchEvent(new Event(\\\"input\\\", { bubbles: true, composed: true }));\\n    input.dispatchEvent(new Event(\\\"change\\\", { bubbles: true }));\\n  }\\n  expectHitTarget(hitPoint, targetElement) {\\n    const roots = [];\\n    let parentElement = targetElement;\\n    while (parentElement) {\\n      const root = enclosingShadowRootOrDocument(parentElement);\\n      if (!root)\\n        break;\\n      roots.push(root);\\n      if (root.nodeType === 9)\\n        break;\\n      parentElement = root.host;\\n    }\\n    let hitElement;\\n    for (let index = roots.length - 1; index >= 0; index--) {\\n      const root = roots[index];\\n      const elements = root.elementsFromPoint(hitPoint.x, hitPoint.y);\\n      const singleElement = root.elementFromPoint(hitPoint.x, hitPoint.y);\\n      if (singleElement && elements[0] && parentElementOrShadowHost(singleElement) === elements[0]) {\\n        const style = this.window.getComputedStyle(singleElement);\\n        if ((style == null ? void 0 : style.display) === \\\"contents\\\") {\\n          elements.unshift(singleElement);\\n        }\\n      }\\n      if (elements[0] && elements[0].shadowRoot === root && elements[1] === singleElement) {\\n        elements.shift();\\n      }\\n      const innerElement = elements[0];\\n      if (!innerElement)\\n        break;\\n      hitElement = innerElement;\\n      if (index && innerElement !== roots[index - 1].host)\\n        break;\\n    }\\n    const hitParents = [];\\n    const isHitParentPositionStickyOrFixed = [];\\n    while (hitElement && hitElement !== targetElement) {\\n      hitParents.push(hitElement);\\n      isHitParentPositionStickyOrFixed.push([\\\"sticky\\\", \\\"fixed\\\"].includes(this.window.getComputedStyle(hitElement).position));\\n      hitElement = parentElementOrShadowHost(hitElement);\\n    }\\n    if (hitElement === targetElement)\\n      return \\\"done\\\";\\n    const hitTargetDescription = this.previewNode(hitParents[0] || this.document.documentElement);\\n    let hasPositionStickyOrFixed = isHitParentPositionStickyOrFixed.some((x) => x);\\n    let rootHitTargetDescription;\\n    let element = targetElement;\\n    while (element) {\\n      const index = hitParents.indexOf(element);\\n      if (index !== -1) {\\n        if (index > 1)\\n          rootHitTargetDescription = this.previewNode(hitParents[index - 1]);\\n        hasPositionStickyOrFixed = isHitParentPositionStickyOrFixed.slice(0, index).some((x) => x);\\n        break;\\n      }\\n      element = parentElementOrShadowHost(element);\\n    }\\n    if (rootHitTargetDescription)\\n      return { hitTargetDescription: `${hitTargetDescription} from ${rootHitTargetDescription} subtree`, hasPositionStickyOrFixed };\\n    return { hitTargetDescription, hasPositionStickyOrFixed };\\n  }\\n  // Life of a pointer action, for example click.\\n  //\\n  // 0. Retry items 1 and 2 while action fails due to navigation or element being detached.\\n  //   1. Resolve selector to an element.\\n  //   2. Retry the following steps until the element is detached or frame navigates away.\\n  //     2a. Wait for the element to be stable (not moving), visible and enabled.\\n  //     2b. Scroll element into view. Scrolling alternates between:\\n  //         - Built-in protocol scrolling.\\n  //         - Anchoring to the top/left, bottom/right and center/center.\\n  //         This is to scroll elements from under sticky headers/footers.\\n  //     2c. Click point is calculated, either based on explicitly specified position,\\n  //         or some visible point of the element based on protocol content quads.\\n  //     2d. Click point relative to page viewport is converted relative to the target iframe\\n  //         for the next hit-point check.\\n  //     2e. (injected) Hit target at the click point must be a descendant of the target element.\\n  //         This prevents mis-clicking in edge cases like <iframe> overlaying the target.\\n  //     2f. (injected) Events specific for click (or some other action type) are intercepted on\\n  //         the Window with capture:true. See 2i for details.\\n  //         Note: this step is skipped for drag&drop (see inline comments for the reason).\\n  //     2g. Necessary keyboard modifiers are pressed.\\n  //     2h. Click event is issued (mousemove + mousedown + mouseup).\\n  //     2i. (injected) For each event, we check that hit target at the event point\\n  //         is a descendant of the target element.\\n  //         This guarantees no race between issuing the event and handling it in the page,\\n  //         for example due to layout shift.\\n  //         When hit target check fails, we block all future events in the page.\\n  //     2j. Keyboard modifiers are restored.\\n  //     2k. (injected) Event interceptor is removed.\\n  //     2l. All navigations triggered between 2g-2k are awaited to be either committed or canceled.\\n  //     2m. If failed, wait for increasing amount of time before the next retry.\\n  setupHitTargetInterceptor(node, action, hitPoint, blockAllEvents) {\\n    const element = this.retarget(node, \\\"button-link\\\");\\n    if (!element || !element.isConnected)\\n      return \\\"error:notconnected\\\";\\n    if (hitPoint) {\\n      const preliminaryResult = this.expectHitTarget(hitPoint, element);\\n      if (preliminaryResult !== \\\"done\\\")\\n        return JSON.stringify(preliminaryResult);\\n    }\\n    if (action === \\\"drag\\\")\\n      return { stop: () => \\\"done\\\" };\\n    const events = {\\n      \\\"hover\\\": this._hoverHitTargetInterceptorEvents,\\n      \\\"tap\\\": this._tapHitTargetInterceptorEvents,\\n      \\\"mouse\\\": this._mouseHitTargetInterceptorEvents\\n    }[action];\\n    let result;\\n    const listener = (event) => {\\n      if (!events.has(event.type))\\n        return;\\n      if (!event.isTrusted)\\n        return;\\n      const point = !!this.window.TouchEvent && event instanceof this.window.TouchEvent ? event.touches[0] : event;\\n      if (result === void 0 && point)\\n        result = this.expectHitTarget({ x: point.clientX, y: point.clientY }, element);\\n      if (blockAllEvents || result !== \\\"done\\\" && result !== void 0) {\\n        event.preventDefault();\\n        event.stopPropagation();\\n        event.stopImmediatePropagation();\\n      }\\n    };\\n    const stop = () => {\\n      if (this._hitTargetInterceptor === listener)\\n        this._hitTargetInterceptor = void 0;\\n      return result || \\\"done\\\";\\n    };\\n    this._hitTargetInterceptor = listener;\\n    return { stop };\\n  }\\n  dispatchEvent(node, type, eventInitObj) {\\n    var _a, _b, _c, _d, _e;\\n    let event;\\n    const eventInit = { bubbles: true, cancelable: true, composed: true, ...eventInitObj };\\n    switch (this._eventTypes.get(type)) {\\n      case \\\"mouse\\\":\\n        event = new MouseEvent(type, eventInit);\\n        break;\\n      case \\\"keyboard\\\":\\n        event = new KeyboardEvent(type, eventInit);\\n        break;\\n      case \\\"touch\\\": {\\n        if (this._browserName === \\\"webkit\\\") {\\n          const createTouch = (t) => {\\n            var _a2, _b2, _c2;\\n            if (t instanceof Touch)\\n              return t;\\n            let pageX = t.pageX;\\n            if (pageX === void 0 && t.clientX !== void 0)\\n              pageX = t.clientX + (((_a2 = this.document.scrollingElement) == null ? void 0 : _a2.scrollLeft) || 0);\\n            let pageY = t.pageY;\\n            if (pageY === void 0 && t.clientY !== void 0)\\n              pageY = t.clientY + (((_b2 = this.document.scrollingElement) == null ? void 0 : _b2.scrollTop) || 0);\\n            return this.document.createTouch(this.window, (_c2 = t.target) != null ? _c2 : node, t.identifier, pageX, pageY, t.screenX, t.screenY, t.radiusX, t.radiusY, t.rotationAngle, t.force);\\n          };\\n          const createTouchList = (touches) => {\\n            if (touches instanceof TouchList || !touches)\\n              return touches;\\n            return this.document.createTouchList(...touches.map(createTouch));\\n          };\\n          (_a = eventInit.target) != null ? _a : eventInit.target = node;\\n          eventInit.touches = createTouchList(eventInit.touches);\\n          eventInit.targetTouches = createTouchList(eventInit.targetTouches);\\n          eventInit.changedTouches = createTouchList(eventInit.changedTouches);\\n          event = new TouchEvent(type, eventInit);\\n        } else {\\n          (_b = eventInit.target) != null ? _b : eventInit.target = node;\\n          eventInit.touches = (_c = eventInit.touches) == null ? void 0 : _c.map((t) => {\\n            var _a2;\\n            return t instanceof Touch ? t : new Touch({ ...t, target: (_a2 = t.target) != null ? _a2 : node });\\n          });\\n          eventInit.targetTouches = (_d = eventInit.targetTouches) == null ? void 0 : _d.map((t) => {\\n            var _a2;\\n            return t instanceof Touch ? t : new Touch({ ...t, target: (_a2 = t.target) != null ? _a2 : node });\\n          });\\n          eventInit.changedTouches = (_e = eventInit.changedTouches) == null ? void 0 : _e.map((t) => {\\n            var _a2;\\n            return t instanceof Touch ? t : new Touch({ ...t, target: (_a2 = t.target) != null ? _a2 : node });\\n          });\\n          event = new TouchEvent(type, eventInit);\\n        }\\n        break;\\n      }\\n      case \\\"pointer\\\":\\n        event = new PointerEvent(type, eventInit);\\n        break;\\n      case \\\"focus\\\":\\n        event = new FocusEvent(type, eventInit);\\n        break;\\n      case \\\"drag\\\":\\n        event = new DragEvent(type, eventInit);\\n        break;\\n      case \\\"wheel\\\":\\n        event = new WheelEvent(type, eventInit);\\n        break;\\n      case \\\"deviceorientation\\\":\\n        try {\\n          event = new DeviceOrientationEvent(type, eventInit);\\n        } catch {\\n          const { bubbles, cancelable, alpha, beta, gamma, absolute } = eventInit;\\n          event = this.document.createEvent(\\\"DeviceOrientationEvent\\\");\\n          event.initDeviceOrientationEvent(type, bubbles, cancelable, alpha, beta, gamma, absolute);\\n        }\\n        break;\\n      case \\\"devicemotion\\\":\\n        try {\\n          event = new DeviceMotionEvent(type, eventInit);\\n        } catch {\\n          const { bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval } = eventInit;\\n          event = this.document.createEvent(\\\"DeviceMotionEvent\\\");\\n          event.initDeviceMotionEvent(type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval);\\n        }\\n        break;\\n      default:\\n        event = new Event(type, eventInit);\\n        break;\\n    }\\n    node.dispatchEvent(event);\\n  }\\n  previewNode(node) {\\n    if (node.nodeType === Node.TEXT_NODE)\\n      return oneLine(`#text=${node.nodeValue || \\\"\\\"}`);\\n    if (node.nodeType !== Node.ELEMENT_NODE)\\n      return oneLine(`<${node.nodeName.toLowerCase()} />`);\\n    const element = node;\\n    const attrs = [];\\n    for (let i = 0; i < element.attributes.length; i++) {\\n      const { name, value } = element.attributes[i];\\n      if (name === \\\"style\\\")\\n        continue;\\n      if (!value && this._booleanAttributes.has(name))\\n        attrs.push(` ${name}`);\\n      else\\n        attrs.push(` ${name}=\\\"${value}\\\"`);\\n    }\\n    attrs.sort((a, b) => a.length - b.length);\\n    const attrText = trimStringWithEllipsis(attrs.join(\\\"\\\"), 500);\\n    if (this._autoClosingTags.has(element.nodeName))\\n      return oneLine(`<${element.nodeName.toLowerCase()}${attrText}/>`);\\n    const children = element.childNodes;\\n    let onlyText = false;\\n    if (children.length <= 5) {\\n      onlyText = true;\\n      for (let i = 0; i < children.length; i++)\\n        onlyText = onlyText && children[i].nodeType === Node.TEXT_NODE;\\n    }\\n    const text = onlyText ? element.textContent || \\\"\\\" : children.length ? \\\"\\\\u2026\\\" : \\\"\\\";\\n    return oneLine(`<${element.nodeName.toLowerCase()}${attrText}>${trimStringWithEllipsis(text, 50)}</${element.nodeName.toLowerCase()}>`);\\n  }\\n  strictModeViolationError(selector, matches) {\\n    const infos = matches.slice(0, 10).map((m) => ({\\n      preview: this.previewNode(m),\\n      selector: this.generateSelectorSimple(m)\\n    }));\\n    const lines = infos.map((info, i) => `\\n    ${i + 1}) ${info.preview} aka ${asLocator(this._sdkLanguage, info.selector)}`);\\n    if (infos.length < matches.length)\\n      lines.push(\\\"\\\\n    ...\\\");\\n    return this.createStacklessError(`strict mode violation: ${asLocator(this._sdkLanguage, stringifySelector(selector))} resolved to ${matches.length} elements:${lines.join(\\\"\\\")}\\n`);\\n  }\\n  createStacklessError(message) {\\n    if (this._browserName === \\\"firefox\\\") {\\n      const error2 = new Error(\\\"Error: \\\" + message);\\n      error2.stack = \\\"\\\";\\n      return error2;\\n    }\\n    const error = new Error(message);\\n    delete error.stack;\\n    return error;\\n  }\\n  createHighlight() {\\n    return new Highlight(this);\\n  }\\n  maskSelectors(selectors, color) {\\n    if (this._highlight)\\n      this.hideHighlight();\\n    this._highlight = new Highlight(this);\\n    this._highlight.install();\\n    const elements = [];\\n    for (const selector of selectors)\\n      elements.push(this.querySelectorAll(selector, this.document.documentElement));\\n    this._highlight.maskElements(elements.flat(), color);\\n  }\\n  highlight(selector) {\\n    if (!this._highlight) {\\n      this._highlight = new Highlight(this);\\n      this._highlight.install();\\n    }\\n    this._highlight.runHighlightOnRaf(selector);\\n  }\\n  hideHighlight() {\\n    if (this._highlight) {\\n      this._highlight.uninstall();\\n      delete this._highlight;\\n    }\\n  }\\n  markTargetElements(markedElements, callId) {\\n    var _a, _b;\\n    if (((_a = this._markedElements) == null ? void 0 : _a.callId) !== callId)\\n      this._markedElements = void 0;\\n    const previous = ((_b = this._markedElements) == null ? void 0 : _b.elements) || /* @__PURE__ */ new Set();\\n    const unmarkEvent = new CustomEvent(\\\"__playwright_unmark_target__\\\", {\\n      bubbles: true,\\n      cancelable: true,\\n      detail: callId,\\n      composed: true\\n    });\\n    for (const element of previous) {\\n      if (!markedElements.has(element))\\n        element.dispatchEvent(unmarkEvent);\\n    }\\n    const markEvent = new CustomEvent(\\\"__playwright_mark_target__\\\", {\\n      bubbles: true,\\n      cancelable: true,\\n      detail: callId,\\n      composed: true\\n    });\\n    for (const element of markedElements) {\\n      if (!previous.has(element))\\n        element.dispatchEvent(markEvent);\\n    }\\n    this._markedElements = { callId, elements: markedElements };\\n  }\\n  _setupGlobalListenersRemovalDetection() {\\n    const customEventName = \\\"__playwright_global_listeners_check__\\\";\\n    let seenEvent = false;\\n    const handleCustomEvent = () => seenEvent = true;\\n    this.window.addEventListener(customEventName, handleCustomEvent);\\n    new MutationObserver((entries) => {\\n      const newDocumentElement = entries.some((entry) => Array.from(entry.addedNodes).includes(this.document.documentElement));\\n      if (!newDocumentElement)\\n        return;\\n      seenEvent = false;\\n      this.window.dispatchEvent(new CustomEvent(customEventName));\\n      if (seenEvent)\\n        return;\\n      this.window.addEventListener(customEventName, handleCustomEvent);\\n      for (const callback of this.onGlobalListenersRemoved)\\n        callback();\\n    }).observe(this.document, { childList: true });\\n  }\\n  _setupHitTargetInterceptors() {\\n    const listener = (event) => {\\n      var _a;\\n      return (_a = this._hitTargetInterceptor) == null ? void 0 : _a.call(this, event);\\n    };\\n    const addHitTargetInterceptorListeners = () => {\\n      for (const event of this._allHitTargetInterceptorEvents)\\n        this.window.addEventListener(event, listener, { capture: true, passive: false });\\n    };\\n    addHitTargetInterceptorListeners();\\n    this.onGlobalListenersRemoved.add(addHitTargetInterceptorListeners);\\n  }\\n  async expect(element, options, elements) {\\n    const isArray = options.expression === \\\"to.have.count\\\" || options.expression.endsWith(\\\".array\\\");\\n    if (isArray)\\n      return this.expectArray(elements, options);\\n    if (!element) {\\n      if (!options.isNot && options.expression === \\\"to.be.hidden\\\")\\n        return { matches: true };\\n      if (options.isNot && options.expression === \\\"to.be.visible\\\")\\n        return { matches: false };\\n      if (!options.isNot && options.expression === \\\"to.be.detached\\\")\\n        return { matches: true };\\n      if (options.isNot && options.expression === \\\"to.be.attached\\\")\\n        return { matches: false };\\n      if (options.isNot && options.expression === \\\"to.be.in.viewport\\\")\\n        return { matches: false };\\n      return { matches: options.isNot, missingReceived: true };\\n    }\\n    return await this.expectSingleElement(element, options);\\n  }\\n  async expectSingleElement(element, options) {\\n    var _a, _b;\\n    const expression = options.expression;\\n    {\\n      let result;\\n      if (expression === \\\"to.have.attribute\\\") {\\n        const hasAttribute = element.hasAttribute(options.expressionArg);\\n        result = {\\n          matches: hasAttribute,\\n          received: hasAttribute ? \\\"attribute present\\\" : \\\"attribute not present\\\"\\n        };\\n      } else if (expression === \\\"to.be.checked\\\") {\\n        const { checked, indeterminate } = options.expectedValue;\\n        if (indeterminate) {\\n          if (checked !== void 0)\\n            throw this.createStacklessError(\\\"Can't assert indeterminate and checked at the same time\\\");\\n          result = this.elementState(element, \\\"indeterminate\\\");\\n        } else {\\n          result = this.elementState(element, checked === false ? \\\"unchecked\\\" : \\\"checked\\\");\\n        }\\n      } else if (expression === \\\"to.be.disabled\\\") {\\n        result = this.elementState(element, \\\"disabled\\\");\\n      } else if (expression === \\\"to.be.editable\\\") {\\n        result = this.elementState(element, \\\"editable\\\");\\n      } else if (expression === \\\"to.be.readonly\\\") {\\n        result = this.elementState(element, \\\"editable\\\");\\n        result.matches = !result.matches;\\n      } else if (expression === \\\"to.be.empty\\\") {\\n        if (element.nodeName === \\\"INPUT\\\" || element.nodeName === \\\"TEXTAREA\\\") {\\n          const value = element.value;\\n          result = { matches: !value, received: value ? \\\"notEmpty\\\" : \\\"empty\\\" };\\n        } else {\\n          const text = (_a = element.textContent) == null ? void 0 : _a.trim();\\n          result = { matches: !text, received: text ? \\\"notEmpty\\\" : \\\"empty\\\" };\\n        }\\n      } else if (expression === \\\"to.be.enabled\\\") {\\n        result = this.elementState(element, \\\"enabled\\\");\\n      } else if (expression === \\\"to.be.focused\\\") {\\n        const focused = this._activelyFocused(element).isFocused;\\n        result = {\\n          matches: focused,\\n          received: focused ? \\\"focused\\\" : \\\"inactive\\\"\\n        };\\n      } else if (expression === \\\"to.be.hidden\\\") {\\n        result = this.elementState(element, \\\"hidden\\\");\\n      } else if (expression === \\\"to.be.visible\\\") {\\n        result = this.elementState(element, \\\"visible\\\");\\n      } else if (expression === \\\"to.be.attached\\\") {\\n        result = {\\n          matches: true,\\n          received: \\\"attached\\\"\\n        };\\n      } else if (expression === \\\"to.be.detached\\\") {\\n        result = {\\n          matches: false,\\n          received: \\\"attached\\\"\\n        };\\n      }\\n      if (result) {\\n        if (result.received === \\\"error:notconnected\\\")\\n          throw this.createStacklessError(\\\"Element is not connected\\\");\\n        return result;\\n      }\\n    }\\n    {\\n      if (expression === \\\"to.have.property\\\") {\\n        let target = element;\\n        const properties = options.expressionArg.split(\\\".\\\");\\n        for (let i = 0; i < properties.length - 1; i++) {\\n          if (typeof target !== \\\"object\\\" || !(properties[i] in target))\\n            return { received: void 0, matches: false };\\n          target = target[properties[i]];\\n        }\\n        const received = target[properties[properties.length - 1]];\\n        const matches = deepEquals(received, options.expectedValue);\\n        return { received, matches };\\n      }\\n    }\\n    {\\n      if (expression === \\\"to.be.in.viewport\\\") {\\n        const ratio = await this.viewportRatio(element);\\n        return { received: `viewport ratio ${ratio}`, matches: ratio > 0 && ratio > ((_b = options.expectedNumber) != null ? _b : 0) - 1e-9 };\\n      }\\n    }\\n    {\\n      if (expression === \\\"to.have.values\\\") {\\n        element = this.retarget(element, \\\"follow-label\\\");\\n        if (element.nodeName !== \\\"SELECT\\\" || !element.multiple)\\n          throw this.createStacklessError(\\\"Not a select element with a multiple attribute\\\");\\n        const received = [...element.selectedOptions].map((o) => o.value);\\n        if (received.length !== options.expectedText.length)\\n          return { received, matches: false };\\n        return { received, matches: received.map((r, i) => new ExpectedTextMatcher(options.expectedText[i]).matches(r)).every(Boolean) };\\n      }\\n    }\\n    {\\n      if (expression === \\\"to.match.aria\\\") {\\n        const result = matchesAriaTree(element, options.expectedValue);\\n        return {\\n          received: result.received,\\n          matches: !!result.matches.length\\n        };\\n      }\\n    }\\n    {\\n      let received;\\n      if (expression === \\\"to.have.attribute.value\\\") {\\n        const value = element.getAttribute(options.expressionArg);\\n        if (value === null)\\n          return { received: null, matches: false };\\n        received = value;\\n      } else if ([\\\"to.have.class\\\", \\\"to.contain.class\\\"].includes(expression)) {\\n        if (!options.expectedText)\\n          throw this.createStacklessError(\\\"Expected text is not provided for \\\" + expression);\\n        return {\\n          received: element.classList.toString(),\\n          matches: new ExpectedTextMatcher(options.expectedText[0]).matchesClassList(\\n            this,\\n            element.classList,\\n            /* partial */\\n            expression === \\\"to.contain.class\\\"\\n          )\\n        };\\n      } else if (expression === \\\"to.have.css\\\") {\\n        received = this.window.getComputedStyle(element).getPropertyValue(options.expressionArg);\\n      } else if (expression === \\\"to.have.id\\\") {\\n        received = element.id;\\n      } else if (expression === \\\"to.have.text\\\") {\\n        received = options.useInnerText ? element.innerText : elementText(/* @__PURE__ */ new Map(), element).full;\\n      } else if (expression === \\\"to.have.accessible.name\\\") {\\n        received = getElementAccessibleName(\\n          element,\\n          false\\n          /* includeHidden */\\n        );\\n      } else if (expression === \\\"to.have.accessible.description\\\") {\\n        received = getElementAccessibleDescription(\\n          element,\\n          false\\n          /* includeHidden */\\n        );\\n      } else if (expression === \\\"to.have.accessible.error.message\\\") {\\n        received = getElementAccessibleErrorMessage(element);\\n      } else if (expression === \\\"to.have.role\\\") {\\n        received = getAriaRole(element) || \\\"\\\";\\n      } else if (expression === \\\"to.have.title\\\") {\\n        received = this.document.title;\\n      } else if (expression === \\\"to.have.url\\\") {\\n        received = this.document.location.href;\\n      } else if (expression === \\\"to.have.value\\\") {\\n        element = this.retarget(element, \\\"follow-label\\\");\\n        if (element.nodeName !== \\\"INPUT\\\" && element.nodeName !== \\\"TEXTAREA\\\" && element.nodeName !== \\\"SELECT\\\")\\n          throw this.createStacklessError(\\\"Not an input element\\\");\\n        received = element.value;\\n      }\\n      if (received !== void 0 && options.expectedText) {\\n        const matcher = new ExpectedTextMatcher(options.expectedText[0]);\\n        return { received, matches: matcher.matches(received) };\\n      }\\n    }\\n    throw this.createStacklessError(\\\"Unknown expect matcher: \\\" + expression);\\n  }\\n  expectArray(elements, options) {\\n    const expression = options.expression;\\n    if (expression === \\\"to.have.count\\\") {\\n      const received2 = elements.length;\\n      const matches2 = received2 === options.expectedNumber;\\n      return { received: received2, matches: matches2 };\\n    }\\n    if (!options.expectedText)\\n      throw this.createStacklessError(\\\"Expected text is not provided for \\\" + expression);\\n    if ([\\\"to.have.class.array\\\", \\\"to.contain.class.array\\\"].includes(expression)) {\\n      const receivedClassLists = elements.map((e) => e.classList);\\n      const received2 = receivedClassLists.map(String);\\n      if (receivedClassLists.length !== options.expectedText.length)\\n        return { received: received2, matches: false };\\n      const matches2 = this._matchSequentially(\\n        options.expectedText,\\n        receivedClassLists,\\n        (matcher, r) => matcher.matchesClassList(\\n          this,\\n          r,\\n          /* partial */\\n          expression === \\\"to.contain.class.array\\\"\\n        )\\n      );\\n      return {\\n        received: received2,\\n        matches: matches2\\n      };\\n    }\\n    if (![\\\"to.contain.text.array\\\", \\\"to.have.text.array\\\"].includes(expression))\\n      throw this.createStacklessError(\\\"Unknown expect matcher: \\\" + expression);\\n    const received = elements.map((e) => options.useInnerText ? e.innerText : elementText(/* @__PURE__ */ new Map(), e).full);\\n    const lengthShouldMatch = expression !== \\\"to.contain.text.array\\\";\\n    const matchesLength = received.length === options.expectedText.length || !lengthShouldMatch;\\n    if (!matchesLength)\\n      return { received, matches: false };\\n    const matches = this._matchSequentially(options.expectedText, received, (matcher, r) => matcher.matches(r));\\n    return { received, matches };\\n  }\\n  _matchSequentially(expectedText, received, matchFn) {\\n    const matchers = expectedText.map((e) => new ExpectedTextMatcher(e));\\n    let mIndex = 0;\\n    let rIndex = 0;\\n    while (mIndex < matchers.length && rIndex < received.length) {\\n      if (matchFn(matchers[mIndex], received[rIndex]))\\n        ++mIndex;\\n      ++rIndex;\\n    }\\n    return mIndex === matchers.length;\\n  }\\n};\\nfunction oneLine(s) {\\n  return s.replace(/\\\\n/g, \\\"\\\\u21B5\\\").replace(/\\\\t/g, \\\"\\\\u21C6\\\");\\n}\\nfunction cssUnquote(s) {\\n  s = s.substring(1, s.length - 1);\\n  if (!s.includes(\\\"\\\\\\\\\\\"))\\n    return s;\\n  const r = [];\\n  let i = 0;\\n  while (i < s.length) {\\n    if (s[i] === \\\"\\\\\\\\\\\" && i + 1 < s.length)\\n      i++;\\n    r.push(s[i++]);\\n  }\\n  return r.join(\\\"\\\");\\n}\\nfunction createTextMatcher(selector, internal) {\\n  if (selector[0] === \\\"/\\\" && selector.lastIndexOf(\\\"/\\\") > 0) {\\n    const lastSlash = selector.lastIndexOf(\\\"/\\\");\\n    const re = new RegExp(selector.substring(1, lastSlash), selector.substring(lastSlash + 1));\\n    return { matcher: (elementText2) => re.test(elementText2.full), kind: \\\"regex\\\" };\\n  }\\n  const unquote = internal ? JSON.parse.bind(JSON) : cssUnquote;\\n  let strict = false;\\n  if (selector.length > 1 && selector[0] === '\\\"' && selector[selector.length - 1] === '\\\"') {\\n    selector = unquote(selector);\\n    strict = true;\\n  } else if (internal && selector.length > 1 && selector[0] === '\\\"' && selector[selector.length - 2] === '\\\"' && selector[selector.length - 1] === \\\"i\\\") {\\n    selector = unquote(selector.substring(0, selector.length - 1));\\n    strict = false;\\n  } else if (internal && selector.length > 1 && selector[0] === '\\\"' && selector[selector.length - 2] === '\\\"' && selector[selector.length - 1] === \\\"s\\\") {\\n    selector = unquote(selector.substring(0, selector.length - 1));\\n    strict = true;\\n  } else if (selector.length > 1 && selector[0] === \\\"'\\\" && selector[selector.length - 1] === \\\"'\\\") {\\n    selector = unquote(selector);\\n    strict = true;\\n  }\\n  selector = normalizeWhiteSpace(selector);\\n  if (strict) {\\n    if (internal)\\n      return { kind: \\\"strict\\\", matcher: (elementText2) => elementText2.normalized === selector };\\n    const strictTextNodeMatcher = (elementText2) => {\\n      if (!selector && !elementText2.immediate.length)\\n        return true;\\n      return elementText2.immediate.some((s) => normalizeWhiteSpace(s) === selector);\\n    };\\n    return { matcher: strictTextNodeMatcher, kind: \\\"strict\\\" };\\n  }\\n  selector = selector.toLowerCase();\\n  return { kind: \\\"lax\\\", matcher: (elementText2) => elementText2.normalized.toLowerCase().includes(selector) };\\n}\\nvar ExpectedTextMatcher = class {\\n  constructor(expected) {\\n    this._normalizeWhiteSpace = expected.normalizeWhiteSpace;\\n    this._ignoreCase = expected.ignoreCase;\\n    this._string = expected.matchSubstring ? void 0 : this.normalize(expected.string);\\n    this._substring = expected.matchSubstring ? this.normalize(expected.string) : void 0;\\n    if (expected.regexSource) {\\n      const flags = new Set((expected.regexFlags || \\\"\\\").split(\\\"\\\"));\\n      if (expected.ignoreCase === false)\\n        flags.delete(\\\"i\\\");\\n      if (expected.ignoreCase === true)\\n        flags.add(\\\"i\\\");\\n      this._regex = new RegExp(expected.regexSource, [...flags].join(\\\"\\\"));\\n    }\\n  }\\n  matches(text) {\\n    if (!this._regex)\\n      text = this.normalize(text);\\n    if (this._string !== void 0)\\n      return text === this._string;\\n    if (this._substring !== void 0)\\n      return text.includes(this._substring);\\n    if (this._regex)\\n      return !!this._regex.test(text);\\n    return false;\\n  }\\n  matchesClassList(injectedScript, classList, partial) {\\n    if (partial) {\\n      if (this._regex)\\n        throw injectedScript.createStacklessError(\\\"Partial matching does not support regular expressions. Please provide a string value.\\\");\\n      return this._string.split(/\\\\s+/g).filter(Boolean).every((className) => classList.contains(className));\\n    }\\n    return this.matches(classList.toString());\\n  }\\n  normalize(s) {\\n    if (!s)\\n      return s;\\n    if (this._normalizeWhiteSpace)\\n      s = normalizeWhiteSpace(s);\\n    if (this._ignoreCase)\\n      s = s.toLocaleLowerCase();\\n    return s;\\n  }\\n};\\nfunction deepEquals(a, b) {\\n  if (a === b)\\n    return true;\\n  if (a && b && typeof a === \\\"object\\\" && typeof b === \\\"object\\\") {\\n    if (a.constructor !== b.constructor)\\n      return false;\\n    if (Array.isArray(a)) {\\n      if (a.length !== b.length)\\n        return false;\\n      for (let i = 0; i < a.length; ++i) {\\n        if (!deepEquals(a[i], b[i]))\\n          return false;\\n      }\\n      return true;\\n    }\\n    if (a instanceof RegExp)\\n      return a.source === b.source && a.flags === b.flags;\\n    if (a.valueOf !== Object.prototype.valueOf)\\n      return a.valueOf() === b.valueOf();\\n    if (a.toString !== Object.prototype.toString)\\n      return a.toString() === b.toString();\\n    const keys = Object.keys(a);\\n    if (keys.length !== Object.keys(b).length)\\n      return false;\\n    for (let i = 0; i < keys.length; ++i) {\\n      if (!b.hasOwnProperty(keys[i]))\\n        return false;\\n    }\\n    for (const key of keys) {\\n      if (!deepEquals(a[key], b[key]))\\n        return false;\\n    }\\n    return true;\\n  }\\n  if (typeof a === \\\"number\\\" && typeof b === \\\"number\\\")\\n    return isNaN(a) && isNaN(b);\\n  return false;\\n}\\n\";","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\n\nimport * as js from './javascript';\nimport { ProgressController } from './progress';\nimport { asLocator, isUnderTest } from '../utils';\nimport { prepareFilesForUpload } from './fileUploadUtils';\nimport { isSessionClosedError } from './protocolError';\nimport * as rawInjectedScriptSource from '../generated/injectedScriptSource';\n\nimport type * as frames from './frames';\nimport type { ElementState, HitTargetError, HitTargetInterceptionResult, InjectedScript, InjectedScriptOptions } from '@injected/injectedScript';\nimport type { CallMetadata } from './instrumentation';\nimport type { Page } from './page';\nimport type { Progress } from './progress';\nimport type { ScreenshotOptions } from './screenshotter';\nimport type * as types from './types';\nimport type * as channels from '@protocol/channels';\n\nexport type InputFilesItems = {\n  filePayloads?: types.FilePayload[],\n  localPaths?: string[]\n  localDirectory?: string\n};\n\ntype ActionName = 'click' | 'hover' | 'dblclick' | 'tap' | 'move and up' | 'move and down';\ntype PerformActionResult = 'error:notvisible' | 'error:notconnected' | 'error:notinviewport' | 'error:optionsnotfound' | { missingState: ElementState } | HitTargetError | 'done';\n\nexport class NonRecoverableDOMError extends Error {\n}\n\nexport function isNonRecoverableDOMError(error: Error) {\n  return error instanceof NonRecoverableDOMError;\n}\n\nexport class FrameExecutionContext extends js.ExecutionContext {\n  readonly frame: frames.Frame;\n  private _injectedScriptPromise?: Promise<js.JSHandle>;\n  readonly world: types.World | null;\n\n  constructor(delegate: js.ExecutionContextDelegate, frame: frames.Frame, world: types.World|null) {\n    super(frame, delegate, world || 'content-script');\n    this.frame = frame;\n    this.world = world;\n  }\n\n  override adoptIfNeeded(handle: js.JSHandle): Promise<js.JSHandle> | null {\n    if (handle instanceof ElementHandle && handle._context !== this)\n      return this.frame._page.delegate.adoptElementHandle(handle, this);\n    return null;\n  }\n\n  async evaluate<Arg, R>(pageFunction: js.Func1<Arg, R>, arg?: Arg): Promise<R> {\n    return js.evaluate(this, true /* returnByValue */, pageFunction, arg);\n  }\n\n  async evaluateHandle<Arg, R>(pageFunction: js.Func1<Arg, R>, arg?: Arg): Promise<js.SmartHandle<R>> {\n    return js.evaluate(this, false /* returnByValue */, pageFunction, arg);\n  }\n\n  async evaluateExpression(expression: string, options: { isFunction?: boolean }, arg?: any): Promise<any> {\n    return js.evaluateExpression(this, expression, { ...options, returnByValue: true }, arg);\n  }\n\n  async evaluateExpressionHandle(expression: string, options: { isFunction?: boolean }, arg?: any): Promise<js.JSHandle<any>> {\n    return js.evaluateExpression(this, expression, { ...options, returnByValue: false }, arg);\n  }\n\n  injectedScript(): Promise<js.JSHandle<InjectedScript>> {\n    if (!this._injectedScriptPromise) {\n      const customEngines: InjectedScriptOptions['customEngines'] = [];\n      const selectorsRegistry = this.frame._page.browserContext.selectors();\n      for (const [name, { source }] of selectorsRegistry._engines)\n        customEngines.push({ name, source: `(${source})` });\n      const sdkLanguage = this.frame.attribution.playwright.options.sdkLanguage;\n      const options: InjectedScriptOptions = {\n        isUnderTest: isUnderTest(),\n        sdkLanguage,\n        testIdAttributeName: selectorsRegistry.testIdAttributeName(),\n        stableRafCount: this.frame._page.delegate.rafCountForStablePosition(),\n        browserName: this.frame._page.browserContext._browser.options.name,\n        inputFileRoleTextbox: process.env.PLAYWRIGHT_INPUT_FILE_TEXTBOX ? true : false,\n        customEngines,\n      };\n      const source = `\n        (() => {\n        const module = {};\n        ${rawInjectedScriptSource.source}\n        return new (module.exports.InjectedScript())(globalThis, ${JSON.stringify(options)});\n        })();\n      `;\n      this._injectedScriptPromise = this.rawEvaluateHandle(source)\n          .then(handle => {\n            handle._setPreview('InjectedScript');\n            return handle;\n          });\n    }\n    return this._injectedScriptPromise;\n  }\n}\n\nexport class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {\n  __elementhandle: T = true as any;\n  declare readonly _context: FrameExecutionContext;\n  readonly _page: Page;\n  declare readonly _objectId: string;\n  readonly _frame: frames.Frame;\n\n  constructor(context: FrameExecutionContext, objectId: string) {\n    super(context, 'node', undefined, objectId);\n    this._page = context.frame._page;\n    this._frame = context.frame;\n    this._initializePreview().catch(e => {});\n  }\n\n  async _initializePreview() {\n    const utility = await this._context.injectedScript();\n    this._setPreview(await utility.evaluate((injected, e) => 'JSHandle@' + injected.previewNode(e), this));\n  }\n\n  override asElement(): ElementHandle<T> | null {\n    return this;\n  }\n\n  async evaluateInUtility<R, Arg>(pageFunction: js.Func1<[js.JSHandle<InjectedScript>, ElementHandle<T>, Arg], R>, arg: Arg): Promise<R | 'error:notconnected'> {\n    try {\n      const utility = await this._frame._utilityContext();\n      return await utility.evaluate(pageFunction, [await utility.injectedScript(), this, arg]);\n    } catch (e) {\n      if (js.isJavaScriptErrorInEvaluate(e) || isSessionClosedError(e))\n        throw e;\n      return 'error:notconnected';\n    }\n  }\n\n  async evaluateHandleInUtility<R, Arg>(pageFunction: js.Func1<[js.JSHandle<InjectedScript>, ElementHandle<T>, Arg], R>, arg: Arg): Promise<js.JSHandle<R> | 'error:notconnected'> {\n    try {\n      const utility = await this._frame._utilityContext();\n      return await utility.evaluateHandle(pageFunction, [await utility.injectedScript(), this, arg]);\n    } catch (e) {\n      if (js.isJavaScriptErrorInEvaluate(e) || isSessionClosedError(e))\n        throw e;\n      return 'error:notconnected';\n    }\n  }\n\n  async ownerFrame(): Promise<frames.Frame | null> {\n    const frameId = await this._page.delegate.getOwnerFrame(this);\n    if (!frameId)\n      return null;\n    const frame = this._page.frameManager.frame(frameId);\n    if (frame)\n      return frame;\n    for (const page of this._page.browserContext.pages()) {\n      const frame = page.frameManager.frame(frameId);\n      if (frame)\n        return frame;\n    }\n    return null;\n  }\n\n  async isIframeElement(): Promise<boolean | 'error:notconnected'> {\n    return this.evaluateInUtility(([injected, node]) => node && (node.nodeName === 'IFRAME' || node.nodeName === 'FRAME'), {});\n  }\n\n  async contentFrame(): Promise<frames.Frame | null> {\n    const isFrameElement = throwRetargetableDOMError(await this.isIframeElement());\n    if (!isFrameElement)\n      return null;\n    return this._page.delegate.getContentFrame(this);\n  }\n\n  async generateLocatorString(): Promise<string | undefined> {\n    const selectors = await this._generateSelectorString();\n    if (!selectors.length)\n      return;\n    return asLocator('javascript', selectors.reverse().join(' >> internal:control=enter-frame >> '));\n  }\n\n  private async _generateSelectorString(): Promise<string[]> {\n    const selector = await this.evaluateInUtility(async ([injected, node]) => {\n      return injected.generateSelectorSimple(node as unknown as Element);\n    }, {});\n    if (selector === 'error:notconnected')\n      return [];\n\n    let frame: frames.Frame | null = this._frame;\n    const result: string[] = [selector];\n    while (frame?.parentFrame()) {\n      const frameElement = await frame.frameElement();\n      if (frameElement) {\n        const selector = await frameElement.evaluateInUtility(async ([injected, node]) => {\n          return injected.generateSelectorSimple(node as unknown as Element);\n        }, {});\n        frameElement.dispose();\n        if (selector === 'error:notconnected')\n          return [];\n        result.push(selector);\n      }\n      frame = frame.parentFrame();\n    }\n    return result;\n  }\n\n  async getAttribute(metadata: CallMetadata, name: string): Promise<string | null> {\n    return this._frame.getAttribute(metadata, ':scope', name, { timeout: 0 }, this);\n  }\n\n  async inputValue(metadata: CallMetadata): Promise<string> {\n    return this._frame.inputValue(metadata, ':scope', { timeout: 0 }, this);\n  }\n\n  async textContent(metadata: CallMetadata): Promise<string | null> {\n    return this._frame.textContent(metadata, ':scope', { timeout: 0 }, this);\n  }\n\n  async innerText(metadata: CallMetadata): Promise<string> {\n    return this._frame.innerText(metadata, ':scope', { timeout: 0 }, this);\n  }\n\n  async innerHTML(metadata: CallMetadata): Promise<string> {\n    return this._frame.innerHTML(metadata, ':scope', { timeout: 0 }, this);\n  }\n\n  async dispatchEvent(metadata: CallMetadata, type: string, eventInit: Object = {}) {\n    return this._frame.dispatchEvent(metadata, ':scope', type, eventInit, { timeout: 0 }, this);\n  }\n\n  async _scrollRectIntoViewIfNeeded(rect?: types.Rect): Promise<'error:notvisible' | 'error:notconnected' | 'done'> {\n    return await this._page.delegate.scrollRectIntoViewIfNeeded(this, rect);\n  }\n\n  async _waitAndScrollIntoViewIfNeeded(progress: Progress, waitForVisible: boolean): Promise<void> {\n    const result = await this._retryAction(progress, 'scroll into view', async () => {\n      progress.log(`  waiting for element to be stable`);\n      const waitResult = await this.evaluateInUtility(async ([injected, node, { waitForVisible }]) => {\n        return await injected.checkElementStates(node, waitForVisible ? ['visible', 'stable'] : ['stable']);\n      }, { waitForVisible });\n      if (waitResult)\n        return waitResult;\n      return await this._scrollRectIntoViewIfNeeded();\n    }, {});\n    assertDone(throwRetargetableDOMError(result));\n  }\n\n  async scrollIntoViewIfNeeded(metadata: CallMetadata, options: types.TimeoutOptions) {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(\n        progress => this._waitAndScrollIntoViewIfNeeded(progress, false /* waitForVisible */),\n        options.timeout);\n  }\n\n  private async _clickablePoint(): Promise<types.Point | 'error:notvisible' | 'error:notinviewport' | 'error:notconnected'> {\n    const intersectQuadWithViewport = (quad: types.Quad): types.Quad => {\n      return quad.map(point => ({\n        x: Math.min(Math.max(point.x, 0), metrics.width),\n        y: Math.min(Math.max(point.y, 0), metrics.height),\n      })) as types.Quad;\n    };\n\n    const computeQuadArea = (quad: types.Quad) => {\n      // Compute sum of all directed areas of adjacent triangles\n      // https://en.wikipedia.org/wiki/Polygon#Simple_polygons\n      let area = 0;\n      for (let i = 0; i < quad.length; ++i) {\n        const p1 = quad[i];\n        const p2 = quad[(i + 1) % quad.length];\n        area += (p1.x * p2.y - p2.x * p1.y) / 2;\n      }\n      return Math.abs(area);\n    };\n\n    const [quads, metrics] = await Promise.all([\n      this._page.delegate.getContentQuads(this),\n      this._page.mainFrame()._utilityContext().then(utility => utility.evaluate(() => ({ width: innerWidth, height: innerHeight }))),\n    ] as const);\n    if (quads === 'error:notconnected')\n      return quads;\n    if (!quads || !quads.length)\n      return 'error:notvisible';\n\n    // Allow 1x1 elements. Compensate for rounding errors by comparing with 0.99 instead.\n    const filtered = quads.map(quad => intersectQuadWithViewport(quad)).filter(quad => computeQuadArea(quad) > 0.99);\n    if (!filtered.length)\n      return 'error:notinviewport';\n    if (this._page.browserContext._browser.options.name === 'firefox') {\n      // Firefox internally uses integer coordinates, so 8.x is converted to 8 or 9 when clicking.\n      //\n      // This does not work nicely for small elements. For example, 1x1 square with corners\n      // (8;8) and (9;9) is targeted when clicking at (8;8) but not when clicking at (9;9).\n      // So, clicking at (8.x;8.y) will sometimes click at (9;9) and miss the target.\n      //\n      // Therefore, we try to find an integer point within a quad to make sure we click inside the element.\n      for (const quad of filtered) {\n        const integerPoint = findIntegerPointInsideQuad(quad);\n        if (integerPoint)\n          return integerPoint;\n      }\n    }\n    // Return the middle point of the first quad.\n    return quadMiddlePoint(filtered[0]);\n  }\n\n  private async _offsetPoint(offset: types.Point): Promise<types.Point | 'error:notvisible' | 'error:notconnected'> {\n    const [box, border] = await Promise.all([\n      this.boundingBox(),\n      this.evaluateInUtility(([injected, node]) => injected.getElementBorderWidth(node), {}).catch(e => {}),\n    ]);\n    if (!box || !border)\n      return 'error:notvisible';\n    if (border === 'error:notconnected')\n      return border;\n    // Make point relative to the padding box to align with offsetX/offsetY.\n    return {\n      x: box.x + border.left + offset.x,\n      y: box.y + border.top + offset.y,\n    };\n  }\n\n  async _retryAction(progress: Progress, actionName: string, action: () => Promise<PerformActionResult>, options: { trial?: boolean, force?: boolean, skipActionPreChecks?: boolean }): Promise<'error:notconnected' | 'done'> {\n    let retry = 0;\n    // We progressively wait longer between retries, up to 500ms.\n    const waitTime = [0, 20, 100, 100, 500];\n\n    while (progress.isRunning()) {\n      if (retry) {\n        progress.log(`retrying ${actionName} action${options.trial ? ' (trial run)' : ''}`);\n        const timeout = waitTime[Math.min(retry - 1, waitTime.length - 1)];\n        if (timeout) {\n          progress.log(`  waiting ${timeout}ms`);\n          const result = await this.evaluateInUtility(([injected, node, timeout]) => new Promise<void>(f => setTimeout(f, timeout)), timeout);\n          if (result === 'error:notconnected')\n            return result;\n        }\n      } else {\n        progress.log(`attempting ${actionName} action${options.trial ? ' (trial run)' : ''}`);\n      }\n      if (!options.skipActionPreChecks && !options.force)\n        await this._frame._page.performActionPreChecks(progress);\n      const result = await action();\n      ++retry;\n      if (result === 'error:notvisible') {\n        if (options.force)\n          throw new NonRecoverableDOMError('Element is not visible');\n        progress.log('  element is not visible');\n        continue;\n      }\n      if (result === 'error:notinviewport') {\n        if (options.force)\n          throw new NonRecoverableDOMError('Element is outside of the viewport');\n        progress.log('  element is outside of the viewport');\n        continue;\n      }\n      if (result === 'error:optionsnotfound') {\n        progress.log('  did not find some options');\n        continue;\n      }\n      if (typeof result === 'object' && 'hitTargetDescription' in result) {\n        progress.log(`  ${result.hitTargetDescription} intercepts pointer events`);\n        continue;\n      }\n      if (typeof result === 'object' && 'missingState' in result) {\n        progress.log(`  element is not ${result.missingState}`);\n        continue;\n      }\n      return result;\n    }\n    return 'done';\n  }\n\n  async _retryPointerAction(progress: Progress, actionName: ActionName, waitForEnabled: boolean, action: (point: types.Point) => Promise<void>,\n    options: { waitAfter: boolean | 'disabled' } & types.PointerActionOptions & types.PointerActionWaitOptions): Promise<'error:notconnected' | 'done'> {\n    // Note: do not perform locator handlers checkpoint to avoid moving the mouse in the middle of a drag operation.\n    const skipActionPreChecks = actionName === 'move and up';\n    // By default, we scroll with protocol method to reveal the action point.\n    // However, that might not work to scroll from under position:sticky and position:fixed elements\n    // that overlay the target element. To fight this, we cycle through different\n    // scroll alignments. This works in most scenarios.\n    const scrollOptions: (ScrollIntoViewOptions | undefined)[] = [\n      undefined,\n      { block: 'end', inline: 'end' },\n      { block: 'center', inline: 'center' },\n      { block: 'start', inline: 'start' },\n    ];\n    let scrollOptionIndex = 0;\n    return await this._retryAction(progress, actionName, async () => {\n      const forceScrollOptions = scrollOptions[scrollOptionIndex % scrollOptions.length];\n      const result = await this._performPointerAction(progress, actionName, waitForEnabled, action, forceScrollOptions, options);\n      if (typeof result === 'object' && 'hasPositionStickyOrFixed' in result && result.hasPositionStickyOrFixed)\n        ++scrollOptionIndex;\n      else\n        scrollOptionIndex = 0;\n      return result;\n    }, { ...options, skipActionPreChecks });\n  }\n\n  async _performPointerAction(\n    progress: Progress,\n    actionName: ActionName,\n    waitForEnabled: boolean,\n    action: (point: types.Point) => Promise<void>,\n    forceScrollOptions: ScrollIntoViewOptions | undefined,\n    options: { waitAfter: boolean | 'disabled' } & types.PointerActionOptions & types.PointerActionWaitOptions,\n  ): Promise<PerformActionResult> {\n    const { force = false, position } = options;\n\n    const doScrollIntoView = async () => {\n      if (forceScrollOptions) {\n        return await this.evaluateInUtility(([injected, node, options]) => {\n          if (node.nodeType === 1 /* Node.ELEMENT_NODE */)\n            (node as Node as Element).scrollIntoView(options);\n          return 'done' as const;\n        }, forceScrollOptions);\n      }\n      return await this._scrollRectIntoViewIfNeeded(position ? { x: position.x, y: position.y, width: 0, height: 0 } : undefined);\n    };\n\n    if (this._frame.parentFrame()) {\n      // Best-effort scroll to make sure any iframes containing this element are scrolled\n      // into view and visible, so they are not throttled.\n      // See https://github.com/microsoft/playwright/issues/27196 for an example.\n      progress.throwIfAborted();  // Avoid action that has side-effects.\n      await doScrollIntoView().catch(() => {});\n    }\n\n    if ((options as any).__testHookBeforeStable)\n      await (options as any).__testHookBeforeStable();\n\n    if (!force) {\n      const elementStates: ElementState[] = waitForEnabled ? ['visible', 'enabled', 'stable'] : ['visible', 'stable'];\n      progress.log(`  waiting for element to be ${waitForEnabled ? 'visible, enabled and stable' : 'visible and stable'}`);\n      const result = await this.evaluateInUtility(async ([injected, node, { elementStates }]) => {\n        return await injected.checkElementStates(node, elementStates);\n      }, { elementStates });\n      if (result)\n        return result;\n      progress.log(`  element is ${waitForEnabled ? 'visible, enabled and stable' : 'visible and stable'}`);\n    }\n\n    if ((options as any).__testHookAfterStable)\n      await (options as any).__testHookAfterStable();\n\n    progress.log('  scrolling into view if needed');\n    progress.throwIfAborted();  // Avoid action that has side-effects.\n    const scrolled = await doScrollIntoView();\n    if (scrolled !== 'done')\n      return scrolled;\n    progress.log('  done scrolling');\n\n    const maybePoint = position ? await this._offsetPoint(position) : await this._clickablePoint();\n    if (typeof maybePoint === 'string')\n      return maybePoint;\n    const point = roundPoint(maybePoint);\n    progress.metadata.point = point;\n    await this.instrumentation.onBeforeInputAction(this, progress.metadata);\n\n    let hitTargetInterceptionHandle: js.JSHandle<HitTargetInterceptionResult> | undefined;\n    if (force) {\n      progress.log(`  forcing action`);\n    } else {\n      if ((options as any).__testHookBeforeHitTarget)\n        await (options as any).__testHookBeforeHitTarget();\n\n      const frameCheckResult = await this._checkFrameIsHitTarget(point);\n      if (frameCheckResult === 'error:notconnected' || ('hitTargetDescription' in frameCheckResult))\n        return frameCheckResult;\n      const hitPoint = frameCheckResult.framePoint;\n      const actionType = actionName === 'move and up' ? 'drag' : ((actionName === 'hover' || actionName === 'tap') ? actionName : 'mouse');\n      const handle = await this.evaluateHandleInUtility(([injected, node, { actionType, hitPoint, trial }]) => injected.setupHitTargetInterceptor(node, actionType, hitPoint, trial), { actionType, hitPoint, trial: !!options.trial } as const);\n      if (handle === 'error:notconnected')\n        return handle;\n      if (!handle._objectId) {\n        const error = handle.rawValue() as string;\n        if (error === 'error:notconnected')\n          return error;\n        return JSON.parse(error) as HitTargetError; // It is safe to parse, because we evaluated in utility.\n      }\n      hitTargetInterceptionHandle = handle as any;\n      progress.cleanupWhenAborted(() => {\n        // Do not await here, just in case the renderer is stuck (e.g. on alert)\n        // and we won't be able to cleanup.\n        hitTargetInterceptionHandle!.evaluate(h => h.stop()).catch(e => {});\n        hitTargetInterceptionHandle!.dispose();\n      });\n    }\n\n    const actionResult = await this._page.frameManager.waitForSignalsCreatedBy(progress, options.waitAfter === true, async () => {\n      if ((options as any).__testHookBeforePointerAction)\n        await (options as any).__testHookBeforePointerAction();\n      progress.throwIfAborted();  // Avoid action that has side-effects.\n      let restoreModifiers: types.KeyboardModifier[] | undefined;\n      if (options && options.modifiers)\n        restoreModifiers = await this._page.keyboard.ensureModifiers(options.modifiers);\n      progress.log(`  performing ${actionName} action`);\n      await action(point);\n      if (restoreModifiers)\n        await this._page.keyboard.ensureModifiers(restoreModifiers);\n      if (hitTargetInterceptionHandle) {\n        const stopHitTargetInterception = this._frame.raceAgainstEvaluationStallingEvents(() => {\n          return hitTargetInterceptionHandle.evaluate(h => h.stop());\n        }).catch(e => 'done' as const).finally(() => {\n          hitTargetInterceptionHandle?.dispose();\n        });\n        if (options.waitAfter !== false) {\n          // When noWaitAfter is passed, we do not want to accidentally stall on\n          // non-committed navigation blocking the evaluate.\n          const hitTargetResult = await stopHitTargetInterception;\n          if (hitTargetResult !== 'done')\n            return hitTargetResult;\n        }\n      }\n      progress.log(`  ${options.trial ? 'trial ' : ''}${actionName} action done`);\n      progress.log('  waiting for scheduled navigations to finish');\n      if ((options as any).__testHookAfterPointerAction)\n        await (options as any).__testHookAfterPointerAction();\n      return 'done';\n    });\n    if (actionResult !== 'done')\n      return actionResult;\n    progress.log('  navigations have finished');\n    return 'done';\n  }\n\n  private async _markAsTargetElement(metadata: CallMetadata) {\n    if (!metadata.id)\n      return;\n    await this.evaluateInUtility(([injected, node, callId]) => {\n      if (node.nodeType === 1 /* Node.ELEMENT_NODE */)\n        injected.markTargetElements(new Set([node as Node as Element]), callId);\n    }, metadata.id);\n  }\n\n  async hover(metadata: CallMetadata, options: types.PointerActionOptions & types.PointerActionWaitOptions): Promise<void> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      await this._markAsTargetElement(metadata);\n      const result = await this._hover(progress, options);\n      return assertDone(throwRetargetableDOMError(result));\n    }, options.timeout);\n  }\n\n  _hover(progress: Progress, options: types.PointerActionOptions & types.PointerActionWaitOptions): Promise<'error:notconnected' | 'done'> {\n    return this._retryPointerAction(progress, 'hover', false /* waitForEnabled */, point => this._page.mouse.move(point.x, point.y), { ...options, waitAfter: 'disabled' });\n  }\n\n  async click(metadata: CallMetadata, options: { noWaitAfter?: boolean } & types.MouseClickOptions & types.PointerActionWaitOptions): Promise<void> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      await this._markAsTargetElement(metadata);\n      const result = await this._click(progress, { ...options, waitAfter: !options.noWaitAfter });\n      return assertDone(throwRetargetableDOMError(result));\n    }, options.timeout);\n  }\n\n  _click(progress: Progress, options: { waitAfter: boolean | 'disabled' } & types.MouseClickOptions & types.PointerActionWaitOptions): Promise<'error:notconnected' | 'done'> {\n    return this._retryPointerAction(progress, 'click', true /* waitForEnabled */, point => this._page.mouse.click(point.x, point.y, options), options);\n  }\n\n  async dblclick(metadata: CallMetadata, options: types.MouseMultiClickOptions & types.PointerActionWaitOptions): Promise<void> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      await this._markAsTargetElement(metadata);\n      const result = await this._dblclick(progress, options);\n      return assertDone(throwRetargetableDOMError(result));\n    }, options.timeout);\n  }\n\n  _dblclick(progress: Progress, options: types.MouseMultiClickOptions & types.PointerActionWaitOptions): Promise<'error:notconnected' | 'done'> {\n    return this._retryPointerAction(progress, 'dblclick', true /* waitForEnabled */, point => this._page.mouse.dblclick(point.x, point.y, options), { ...options, waitAfter: 'disabled' });\n  }\n\n  async tap(metadata: CallMetadata, options: types.PointerActionWaitOptions): Promise<void> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      await this._markAsTargetElement(metadata);\n      const result = await this._tap(progress, options);\n      return assertDone(throwRetargetableDOMError(result));\n    }, options.timeout);\n  }\n\n  _tap(progress: Progress, options: types.PointerActionWaitOptions): Promise<'error:notconnected' | 'done'> {\n    return this._retryPointerAction(progress, 'tap', true /* waitForEnabled */, point => this._page.touchscreen.tap(point.x, point.y), { ...options, waitAfter: 'disabled' });\n  }\n\n  async selectOption(metadata: CallMetadata, elements: ElementHandle[], values: types.SelectOption[], options: types.CommonActionOptions): Promise<string[]> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      await this._markAsTargetElement(metadata);\n      const result = await this._selectOption(progress, elements, values, options);\n      return throwRetargetableDOMError(result);\n    }, options.timeout);\n  }\n\n  async _selectOption(progress: Progress, elements: ElementHandle[], values: types.SelectOption[], options: types.CommonActionOptions): Promise<string[] | 'error:notconnected'> {\n    let resultingOptions: string[] = [];\n    const result = await this._retryAction(progress, 'select option', async () => {\n      await this.instrumentation.onBeforeInputAction(this, progress.metadata);\n      if (!options.force)\n        progress.log(`  waiting for element to be visible and enabled`);\n      const optionsToSelect = [...elements, ...values];\n      const result = await this.evaluateInUtility(async ([injected, node, { optionsToSelect, force }]) => {\n        if (!force) {\n          const checkResult = await injected.checkElementStates(node, ['visible', 'enabled']);\n          if (checkResult)\n            return checkResult;\n        }\n        return injected.selectOptions(node, optionsToSelect);\n      }, { optionsToSelect, force: options.force });\n      if (Array.isArray(result)) {\n        progress.log('  selected specified option(s)');\n        resultingOptions = result;\n        return 'done';\n      }\n      return result;\n    }, options);\n    if (result === 'error:notconnected')\n      return result;\n    return resultingOptions;\n  }\n\n  async fill(metadata: CallMetadata, value: string, options: types.CommonActionOptions): Promise<void> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      await this._markAsTargetElement(metadata);\n      const result = await this._fill(progress, value, options);\n      assertDone(throwRetargetableDOMError(result));\n    }, options.timeout);\n  }\n\n  async _fill(progress: Progress, value: string, options: types.CommonActionOptions): Promise<'error:notconnected' | 'done'> {\n    progress.log(`  fill(\"${value}\")`);\n    return await this._retryAction(progress, 'fill', async () => {\n      await this.instrumentation.onBeforeInputAction(this, progress.metadata);\n      if (!options.force)\n        progress.log('  waiting for element to be visible, enabled and editable');\n      const result = await this.evaluateInUtility(async ([injected, node, { value, force }]) => {\n        if (!force) {\n          const checkResult = await injected.checkElementStates(node, ['visible', 'enabled', 'editable']);\n          if (checkResult)\n            return checkResult;\n        }\n        return injected.fill(node, value);\n      }, { value, force: options.force });\n      progress.throwIfAborted();  // Avoid action that has side-effects.\n      if (result === 'needsinput') {\n        if (value)\n          await this._page.keyboard.insertText(value);\n        else\n          await this._page.keyboard.press('Delete');\n        return 'done';\n      } else {\n        return result;\n      }\n    }, options);\n  }\n\n  async selectText(metadata: CallMetadata, options: types.CommonActionOptions): Promise<void> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      const result = await this._retryAction(progress, 'selectText', async () => {\n        if (!options.force)\n          progress.log('  waiting for element to be visible');\n        return await this.evaluateInUtility(async ([injected, node, { force }]) => {\n          if (!force) {\n            const checkResult = await injected.checkElementStates(node, ['visible']);\n            if (checkResult)\n              return checkResult;\n          }\n          return injected.selectText(node);\n        }, { force: options.force });\n      }, options);\n      assertDone(throwRetargetableDOMError(result));\n    }, options.timeout);\n  }\n\n  async setInputFiles(metadata: CallMetadata, params: channels.ElementHandleSetInputFilesParams) {\n    const inputFileItems = await prepareFilesForUpload(this._frame, params);\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      await this._markAsTargetElement(metadata);\n      const result = await this._setInputFiles(progress, inputFileItems);\n      return assertDone(throwRetargetableDOMError(result));\n    }, params.timeout);\n  }\n\n  async _setInputFiles(progress: Progress, items: InputFilesItems): Promise<'error:notconnected' | 'done'> {\n    const { filePayloads, localPaths, localDirectory } = items;\n    const multiple = filePayloads && filePayloads.length > 1 || localPaths && localPaths.length > 1;\n    const result = await this.evaluateHandleInUtility(([injected, node, { multiple, directoryUpload }]): Element | undefined => {\n      const element = injected.retarget(node, 'follow-label');\n      if (!element)\n        return;\n      if (element.tagName !== 'INPUT')\n        throw injected.createStacklessError('Node is not an HTMLInputElement');\n      const inputElement = element as HTMLInputElement;\n      if (multiple && !inputElement.multiple && !inputElement.webkitdirectory)\n        throw injected.createStacklessError('Non-multiple file input can only accept single file');\n      if (directoryUpload && !inputElement.webkitdirectory)\n        throw injected.createStacklessError('File input does not support directories, pass individual files instead');\n      if (!directoryUpload && inputElement.webkitdirectory)\n        throw injected.createStacklessError('[webkitdirectory] input requires passing a path to a directory');\n      return inputElement;\n    }, { multiple, directoryUpload: !!localDirectory });\n    if (result === 'error:notconnected' || !result.asElement())\n      return 'error:notconnected';\n    const retargeted = result.asElement() as ElementHandle<HTMLInputElement>;\n    await this.instrumentation.onBeforeInputAction(this, progress.metadata);\n    progress.throwIfAborted();  // Avoid action that has side-effects.\n    if (localPaths || localDirectory) {\n      const localPathsOrDirectory = localDirectory ? [localDirectory] : localPaths!;\n      await Promise.all((localPathsOrDirectory).map(localPath => (\n        fs.promises.access(localPath, fs.constants.F_OK)\n      )));\n      // Browsers traverse the given directory asynchronously and we want to ensure all files are uploaded.\n      const waitForInputEvent = localDirectory ? this.evaluate(node => new Promise<any>(fulfill => {\n        node.addEventListener('input', fulfill, { once: true });\n      })).catch(() => {}) : Promise.resolve();\n      await this._page.delegate.setInputFilePaths(retargeted, localPathsOrDirectory);\n      await waitForInputEvent;\n    } else {\n      await retargeted.evaluateInUtility(([injected, node, files]) =>\n        injected.setInputFiles(node, files), filePayloads!);\n    }\n    return 'done';\n  }\n\n  async focus(metadata: CallMetadata): Promise<void> {\n    const controller = new ProgressController(metadata, this);\n    await controller.run(async progress => {\n      await this._markAsTargetElement(metadata);\n      const result = await this._focus(progress);\n      return assertDone(throwRetargetableDOMError(result));\n    }, 0);\n  }\n\n  async _focus(progress: Progress, resetSelectionIfNotFocused?: boolean): Promise<'error:notconnected' | 'done'> {\n    progress.throwIfAborted();  // Avoid action that has side-effects.\n    return await this.evaluateInUtility(([injected, node, resetSelectionIfNotFocused]) => injected.focusNode(node, resetSelectionIfNotFocused), resetSelectionIfNotFocused);\n  }\n\n  async _blur(progress: Progress): Promise<'error:notconnected' | 'done'> {\n    progress.throwIfAborted();  // Avoid action that has side-effects.\n    return await this.evaluateInUtility(([injected, node]) => injected.blurNode(node), {});\n  }\n\n  async type(metadata: CallMetadata, text: string, options: { delay?: number } & types.TimeoutOptions & types.StrictOptions): Promise<void> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      await this._markAsTargetElement(metadata);\n      const result = await this._type(progress, text, options);\n      return assertDone(throwRetargetableDOMError(result));\n    }, options.timeout);\n  }\n\n  async _type(progress: Progress, text: string, options: { delay?: number } & types.TimeoutOptions & types.StrictOptions): Promise<'error:notconnected' | 'done'> {\n    progress.log(`elementHandle.type(\"${text}\")`);\n    await this.instrumentation.onBeforeInputAction(this, progress.metadata);\n    const result = await this._focus(progress, true /* resetSelectionIfNotFocused */);\n    if (result !== 'done')\n      return result;\n    progress.throwIfAborted();  // Avoid action that has side-effects.\n    await this._page.keyboard.type(text, options);\n    return 'done';\n  }\n\n  async press(metadata: CallMetadata, key: string, options: { delay?: number, noWaitAfter?: boolean } & types.TimeoutOptions & types.StrictOptions): Promise<void> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      await this._markAsTargetElement(metadata);\n      const result = await this._press(progress, key, options);\n      return assertDone(throwRetargetableDOMError(result));\n    }, options.timeout);\n  }\n\n  async _press(progress: Progress, key: string, options: { delay?: number, noWaitAfter?: boolean } & types.TimeoutOptions & types.StrictOptions): Promise<'error:notconnected' | 'done'> {\n    progress.log(`elementHandle.press(\"${key}\")`);\n    await this.instrumentation.onBeforeInputAction(this, progress.metadata);\n    return this._page.frameManager.waitForSignalsCreatedBy(progress, !options.noWaitAfter, async () => {\n      const result = await this._focus(progress, true /* resetSelectionIfNotFocused */);\n      if (result !== 'done')\n        return result;\n      progress.throwIfAborted();  // Avoid action that has side-effects.\n      await this._page.keyboard.press(key, options);\n      return 'done';\n    });\n  }\n\n  async check(metadata: CallMetadata, options: { position?: types.Point } & types.PointerActionWaitOptions) {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      const result = await this._setChecked(progress, true, options);\n      return assertDone(throwRetargetableDOMError(result));\n    }, options.timeout);\n  }\n\n  async uncheck(metadata: CallMetadata, options: { position?: types.Point } & types.PointerActionWaitOptions) {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      const result = await this._setChecked(progress, false, options);\n      return assertDone(throwRetargetableDOMError(result));\n    }, options.timeout);\n  }\n\n  async _setChecked(progress: Progress, state: boolean, options: { position?: types.Point } & types.PointerActionWaitOptions): Promise<'error:notconnected' | 'done'> {\n    const isChecked = async () => {\n      const result = await this.evaluateInUtility(([injected, node]) => injected.elementState(node, 'checked'), {});\n      if (result === 'error:notconnected' || result.received === 'error:notconnected')\n        throwElementIsNotAttached();\n      return result.matches;\n    };\n    await this._markAsTargetElement(progress.metadata);\n    if (await isChecked() === state)\n      return 'done';\n    const result = await this._click(progress, { ...options, waitAfter: 'disabled' });\n    if (result !== 'done')\n      return result;\n    if (options.trial)\n      return 'done';\n    if (await isChecked() !== state)\n      throw new NonRecoverableDOMError('Clicking the checkbox did not change its state');\n    return 'done';\n  }\n\n  async boundingBox(): Promise<types.Rect | null> {\n    return this._page.delegate.getBoundingBox(this);\n  }\n\n  async ariaSnapshot(options?: { forAI?: boolean, refPrefix?: string }): Promise<string> {\n    return await this.evaluateInUtility(([injected, element, options]) => injected.ariaSnapshot(element, options), options);\n  }\n\n  async screenshot(metadata: CallMetadata, options: ScreenshotOptions & types.TimeoutOptions): Promise<Buffer> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(\n        progress => this._page.screenshotter.screenshotElement(progress, this, options),\n        options.timeout);\n  }\n\n  async querySelector(selector: string, options: types.StrictOptions): Promise<ElementHandle | null> {\n    return this._frame.selectors.query(selector, options, this);\n  }\n\n  async querySelectorAll(selector: string): Promise<ElementHandle<Element>[]> {\n    return this._frame.selectors.queryAll(selector, this);\n  }\n\n  async evalOnSelector(selector: string, strict: boolean, expression: string, isFunction: boolean | undefined, arg: any): Promise<any> {\n    return this._frame.evalOnSelector(selector, strict, expression, isFunction, arg, this);\n  }\n\n  async evalOnSelectorAll(selector: string, expression: string, isFunction: boolean | undefined, arg: any): Promise<any> {\n    return this._frame.evalOnSelectorAll(selector, expression, isFunction, arg, this);\n  }\n\n  async isVisible(metadata: CallMetadata): Promise<boolean> {\n    return this._frame.isVisible(metadata, ':scope', {}, this);\n  }\n\n  async isHidden(metadata: CallMetadata): Promise<boolean> {\n    return this._frame.isHidden(metadata, ':scope', {}, this);\n  }\n\n  async isEnabled(metadata: CallMetadata): Promise<boolean> {\n    return this._frame.isEnabled(metadata, ':scope', { timeout: 0 }, this);\n  }\n\n  async isDisabled(metadata: CallMetadata): Promise<boolean> {\n    return this._frame.isDisabled(metadata, ':scope', { timeout: 0 }, this);\n  }\n\n  async isEditable(metadata: CallMetadata): Promise<boolean> {\n    return this._frame.isEditable(metadata, ':scope', { timeout: 0 }, this);\n  }\n\n  async isChecked(metadata: CallMetadata): Promise<boolean> {\n    return this._frame.isChecked(metadata, ':scope', { timeout: 0 }, this);\n  }\n\n  async waitForElementState(metadata: CallMetadata, state: 'visible' | 'hidden' | 'stable' | 'enabled' | 'disabled' | 'editable', options: types.TimeoutOptions): Promise<void> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      const actionName = `wait for ${state}`;\n      const result = await this._retryAction(progress, actionName, async () => {\n        return await this.evaluateInUtility(async ([injected, node, state]) => {\n          return (await injected.checkElementStates(node, [state])) || 'done';\n        }, state);\n      }, {});\n      assertDone(throwRetargetableDOMError(result));\n    }, options.timeout);\n  }\n\n  async waitForSelector(metadata: CallMetadata, selector: string, options: types.WaitForElementOptions): Promise<ElementHandle<Element> | null> {\n    return this._frame.waitForSelector(metadata, selector, options, this);\n  }\n\n  async _adoptTo(context: FrameExecutionContext): Promise<ElementHandle<T>> {\n    if (this._context !== context) {\n      const adopted = await this._page.delegate.adoptElementHandle(this, context);\n      this.dispose();\n      return adopted;\n    }\n    return this;\n  }\n\n  async _checkFrameIsHitTarget(point: types.Point): Promise<{ framePoint: types.Point | undefined } | 'error:notconnected' | HitTargetError> {\n    let frame = this._frame;\n    const data: { frame: frames.Frame, frameElement: ElementHandle<Element> | null, pointInFrame: types.Point }[] = [];\n    while (frame.parentFrame()) {\n      const frameElement = await frame.frameElement() as ElementHandle<Element>;\n      const box = await frameElement.boundingBox();\n      const style = await frameElement.evaluateInUtility(([injected, iframe]) => injected.describeIFrameStyle(iframe), {}).catch(e => 'error:notconnected' as const);\n      if (!box || style === 'error:notconnected')\n        return 'error:notconnected';\n      if (style === 'transformed') {\n        // We cannot translate coordinates when iframe has any transform applied.\n        // The best we can do right now is to skip the hitPoint check,\n        // and solely rely on the event interceptor.\n        return { framePoint: undefined };\n      }\n      // Translate from viewport coordinates to frame coordinates.\n      const pointInFrame = { x: point.x - box.x - style.left, y: point.y - box.y - style.top };\n      data.push({ frame, frameElement, pointInFrame });\n      frame = frame.parentFrame()!;\n    }\n    // Add main frame.\n    data.push({ frame, frameElement: null, pointInFrame: point });\n\n    for (let i = data.length - 1; i > 0; i--) {\n      const element = data[i - 1].frameElement!;\n      const point = data[i].pointInFrame;\n      // Hit target in the parent frame should hit the child frame element.\n      const hitTargetResult = await element.evaluateInUtility(([injected, element, hitPoint]) => {\n        return injected.expectHitTarget(hitPoint, element);\n      }, point);\n      if (hitTargetResult !== 'done')\n        return hitTargetResult;\n    }\n    return { framePoint: data[0].pointInFrame };\n  }\n}\n\nexport function throwRetargetableDOMError<T>(result: T | 'error:notconnected'): T {\n  if (result === 'error:notconnected')\n    throwElementIsNotAttached();\n  return result;\n}\n\nexport function throwElementIsNotAttached(): never {\n  throw new Error('Element is not attached to the DOM');\n}\n\nexport function assertDone(result: 'done'): void {\n  // This function converts 'done' to void and ensures typescript catches unhandled errors.\n}\n\nfunction roundPoint(point: types.Point): types.Point {\n  return {\n    x: (point.x * 100 | 0) / 100,\n    y: (point.y * 100 | 0) / 100,\n  };\n}\n\nfunction quadMiddlePoint(quad: types.Quad): types.Point {\n  const result = { x: 0, y: 0 };\n  for (const point of quad) {\n    result.x += point.x / 4;\n    result.y += point.y / 4;\n  }\n  return result;\n}\n\nfunction triangleArea(p1: types.Point, p2: types.Point, p3: types.Point): number {\n  return Math.abs(p1.x * (p2.y - p3.y) + p2.x * (p3.y - p1.y) + p3.x * (p1.y - p2.y)) / 2;\n}\n\nfunction isPointInsideQuad(point: types.Point, quad: types.Quad): boolean {\n  const area1 = triangleArea(point, quad[0], quad[1]) + triangleArea(point, quad[1], quad[2]) + triangleArea(point, quad[2], quad[3]) + triangleArea(point, quad[3], quad[0]);\n  const area2 = triangleArea(quad[0], quad[1], quad[2]) + triangleArea(quad[1], quad[2], quad[3]);\n  // Check that point is inside the quad.\n  if (Math.abs(area1 - area2) > 0.1)\n    return false;\n  // Check that point is not on the right/bottom edge, because clicking\n  // there does not actually click the element.\n  return point.x < Math.max(quad[0].x, quad[1].x, quad[2].x, quad[3].x) &&\n         point.y < Math.max(quad[0].y, quad[1].y, quad[2].y, quad[3].y);\n}\n\nfunction findIntegerPointInsideQuad(quad: types.Quad): types.Point | undefined {\n  // Try all four rounding directions of the middle point.\n  const point = quadMiddlePoint(quad);\n  point.x = Math.floor(point.x);\n  point.y = Math.floor(point.y);\n  if (isPointInsideQuad(point, quad))\n    return point;\n  point.x += 1;\n  if (isPointInsideQuad(point, quad))\n    return point;\n  point.y += 1;\n  if (isPointInsideQuad(point, quad))\n    return point;\n  point.x -= 1;\n  if (isPointInsideQuad(point, quad))\n    return point;\n}\n\nexport const kUnableToAdoptErrorMessage = 'Unable to adopt element handle from a different document';\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { asLocator } from '../utils';\nimport { InvalidSelectorError,  splitSelectorByFrame, stringifySelector, visitAllSelectorParts } from '../utils/isomorphic/selectorParser';\n\nimport type { ElementHandle, FrameExecutionContext } from './dom';\nimport type { Frame } from './frames';\nimport type { InjectedScript } from '@injected/injectedScript';\nimport type { JSHandle } from './javascript';\nimport type * as types from './types';\nimport type { ParsedSelector } from '../utils/isomorphic/selectorParser';\n\n\nexport type SelectorInfo = {\n  parsed: ParsedSelector,\n  world: types.World,\n  strict: boolean,\n};\n\nexport type SelectorInFrame = {\n  frame: Frame;\n  info: SelectorInfo;\n  scope?: ElementHandle;\n};\n\nexport class FrameSelectors {\n  readonly frame: Frame;\n\n  constructor(frame: Frame) {\n    this.frame = frame;\n  }\n\n  private _parseSelector(selector: string | ParsedSelector, options?: types.StrictOptions): SelectorInfo {\n    const strict = typeof options?.strict === 'boolean' ? options.strict : !!this.frame._page.browserContext._options.strictSelectors;\n    return this.frame._page.browserContext.selectors().parseSelector(selector, strict);\n  }\n\n  async query(selector: string, options?: types.StrictOptions, scope?: ElementHandle): Promise<ElementHandle<Element> | null> {\n    const resolved = await this.resolveInjectedForSelector(selector, options, scope);\n    // Be careful, |this.frame| can be different from |resolved.frame|.\n    if (!resolved)\n      return null;\n    const handle = await resolved.injected.evaluateHandle((injected, { info, scope }) => {\n      return injected.querySelector(info.parsed, scope || document, info.strict);\n    }, { info: resolved.info, scope: resolved.scope });\n    const elementHandle = handle.asElement() as ElementHandle<Element> | null;\n    if (!elementHandle) {\n      handle.dispose();\n      return null;\n    }\n    return adoptIfNeeded(elementHandle, await resolved.frame._mainContext());\n  }\n\n  async queryArrayInMainWorld(selector: string, scope?: ElementHandle): Promise<JSHandle<Element[]>> {\n    const resolved = await this.resolveInjectedForSelector(selector, { mainWorld: true }, scope);\n    // Be careful, |this.frame| can be different from |resolved.frame|.\n    if (!resolved)\n      throw new Error(`Failed to find frame for selector \"${selector}\"`);\n    return await resolved.injected.evaluateHandle((injected, { info, scope }) => {\n      return injected.querySelectorAll(info.parsed, scope || document);\n    }, { info: resolved.info, scope: resolved.scope });\n  }\n\n  async queryCount(selector: string): Promise<number> {\n    const resolved = await this.resolveInjectedForSelector(selector);\n    // Be careful, |this.frame| can be different from |resolved.frame|.\n    if (!resolved)\n      throw new Error(`Failed to find frame for selector \"${selector}\"`);\n    return await resolved.injected.evaluate((injected, { info }) => {\n      return injected.querySelectorAll(info.parsed, document).length;\n    }, { info: resolved.info });\n  }\n\n  async queryAll(selector: string, scope?: ElementHandle): Promise<ElementHandle<Element>[]> {\n    const resolved = await this.resolveInjectedForSelector(selector, {}, scope);\n    // Be careful, |this.frame| can be different from |resolved.frame|.\n    if (!resolved)\n      return [];\n    const arrayHandle = await resolved.injected.evaluateHandle((injected, { info, scope }) => {\n      return injected.querySelectorAll(info.parsed, scope || document);\n    }, { info: resolved.info, scope: resolved.scope });\n\n    const properties = await arrayHandle.getProperties();\n    arrayHandle.dispose();\n\n    // Note: adopting elements one by one may be slow. If we encounter the issue here,\n    // we might introduce 'useMainContext' option or similar to speed things up.\n    const targetContext = await resolved.frame._mainContext();\n    const result: Promise<ElementHandle<Element>>[] = [];\n    for (const property of properties.values()) {\n      const elementHandle = property.asElement() as ElementHandle<Element>;\n      if (elementHandle)\n        result.push(adoptIfNeeded(elementHandle, targetContext));\n      else\n        property.dispose();\n    }\n    return Promise.all(result);\n  }\n\n  private _jumpToAriaRefFrameIfNeeded(selector: string, info: SelectorInfo, frame: Frame): Frame {\n    if (info.parsed.parts[0].name !== 'aria-ref')\n      return frame;\n    const body = info.parsed.parts[0].body as string;\n    const match = body.match(/^f(\\d+)e\\d+$/);\n    if (!match)\n      return frame;\n    const frameIndex = +match[1];\n    const page = this.frame._page;\n    const frameId = page.lastSnapshotFrameIds[frameIndex - 1];\n    const jumptToFrame = frameId ? page.frameManager.frame(frameId) : null;\n    if (!jumptToFrame)\n      throw new InvalidSelectorError(`Invalid frame in aria-ref selector \"${selector}\"`);\n    return jumptToFrame;\n  }\n\n  async resolveFrameForSelector(selector: string, options: types.StrictOptions = {}, scope?: ElementHandle): Promise<SelectorInFrame | null> {\n    let frame: Frame = this.frame;\n    const frameChunks = splitSelectorByFrame(selector);\n\n    for (const chunk of frameChunks) {\n      visitAllSelectorParts(chunk, (part, nested) => {\n        if (nested && part.name === 'internal:control' && part.body === 'enter-frame') {\n          const locator = asLocator(this.frame._page.attribution.playwright.options.sdkLanguage, selector);\n          throw new InvalidSelectorError(`Frame locators are not allowed inside composite locators, while querying \"${locator}\"`);\n        }\n      });\n    }\n\n    for (let i = 0; i < frameChunks.length - 1; ++i) {\n      const info = this._parseSelector(frameChunks[i], options);\n      frame = this._jumpToAriaRefFrameIfNeeded(selector, info, frame);\n      const context = await frame._context(info.world);\n      const injectedScript = await context.injectedScript();\n      const handle = await injectedScript.evaluateHandle((injected, { info, scope, selectorString }) => {\n        const element = injected.querySelector(info.parsed, scope || document, info.strict);\n        if (element && element.nodeName !== 'IFRAME' && element.nodeName !== 'FRAME')\n          throw injected.createStacklessError(`Selector \"${selectorString}\" resolved to ${injected.previewNode(element)}, <iframe> was expected`);\n        return element;\n      }, { info, scope: i === 0 ? scope : undefined, selectorString: stringifySelector(info.parsed) });\n      const element = handle.asElement() as ElementHandle<Element> | null;\n      if (!element)\n        return null;\n      const maybeFrame = await frame._page.delegate.getContentFrame(element);\n      element.dispose();\n      if (!maybeFrame)\n        return null;\n      frame = maybeFrame;\n    }\n    // If we end up in the different frame, we should start from the frame root, so throw away the scope.\n    if (frame !== this.frame)\n      scope = undefined;\n    const lastChunk = frame.selectors._parseSelector(frameChunks[frameChunks.length - 1], options);\n    frame = this._jumpToAriaRefFrameIfNeeded(selector, lastChunk, frame);\n    return { frame, info: lastChunk, scope };\n  }\n\n  async resolveInjectedForSelector(selector: string, options?: { strict?: boolean, mainWorld?: boolean }, scope?: ElementHandle): Promise<{ injected: JSHandle<InjectedScript>, info: SelectorInfo, frame: Frame, scope?: ElementHandle } | undefined> {\n    const resolved = await this.resolveFrameForSelector(selector, options, scope);\n    // Be careful, |this.frame| can be different from |resolved.frame|.\n    if (!resolved)\n      return;\n    const context = await resolved.frame._context(options?.mainWorld ? 'main' : resolved.info.world);\n    const injected = await context.injectedScript();\n    return { injected, info: resolved.info, frame: resolved.frame, scope: resolved.scope };\n  }\n}\n\nasync function adoptIfNeeded<T extends Node>(handle: ElementHandle<T>, context: FrameExecutionContext): Promise<ElementHandle<T>> {\n  if (handle._context === context)\n    return handle;\n  const adopted = await handle._page.delegate.adoptElementHandle(handle, context);\n  handle.dispose();\n  return adopted;\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { debugLogger } from './utils/debugLogger';\nimport { eventsHelper } from './utils/eventsHelper';\n\nimport type { Progress } from './progress';\nimport type * as types from './types';\nimport type { RegisteredListener } from './utils/eventsHelper';\nimport type { EventEmitter } from 'events';\n\n\nconst MAX_LOG_LENGTH = process.env.MAX_LOG_LENGTH ? +process.env.MAX_LOG_LENGTH : Infinity;\n\nclass Helper {\n  static completeUserURL(urlString: string): string {\n    if (urlString.startsWith('localhost') || urlString.startsWith('127.0.0.1'))\n      urlString = 'http://' + urlString;\n    return urlString;\n  }\n\n  static enclosingIntRect(rect: types.Rect): types.Rect {\n    const x = Math.floor(rect.x + 1e-3);\n    const y = Math.floor(rect.y + 1e-3);\n    const x2 = Math.ceil(rect.x + rect.width - 1e-3);\n    const y2 = Math.ceil(rect.y + rect.height - 1e-3);\n    return { x, y, width: x2 - x, height: y2 - y };\n  }\n\n  static enclosingIntSize(size: types.Size): types.Size {\n    return { width: Math.floor(size.width + 1e-3), height: Math.floor(size.height + 1e-3) };\n  }\n\n  static getViewportSizeFromWindowFeatures(features: string[]): types.Size | null {\n    const widthString = features.find(f => f.startsWith('width='));\n    const heightString = features.find(f => f.startsWith('height='));\n    const width = widthString ? parseInt(widthString.substring(6), 10) : NaN;\n    const height = heightString ? parseInt(heightString.substring(7), 10) : NaN;\n    if (!Number.isNaN(width) && !Number.isNaN(height))\n      return { width, height };\n    return null;\n  }\n\n  static waitForEvent(progress: Progress | null, emitter: EventEmitter, event: string | symbol, predicate?: Function): { promise: Promise<any>, dispose: () => void } {\n    const listeners: RegisteredListener[] = [];\n    const promise = new Promise((resolve, reject) => {\n      listeners.push(eventsHelper.addEventListener(emitter, event, eventArg => {\n        try {\n          if (predicate && !predicate(eventArg))\n            return;\n          eventsHelper.removeEventListeners(listeners);\n          resolve(eventArg);\n        } catch (e) {\n          eventsHelper.removeEventListeners(listeners);\n          reject(e);\n        }\n      }));\n    });\n    const dispose = () => eventsHelper.removeEventListeners(listeners);\n    if (progress)\n      progress.cleanupWhenAborted(dispose);\n    return { promise, dispose };\n  }\n\n  static secondsToRoundishMillis(value: number): number {\n    return ((value * 1000000) | 0) / 1000;\n  }\n\n  static millisToRoundishMillis(value: number): number {\n    return ((value * 1000) | 0) / 1000;\n  }\n\n  static debugProtocolLogger(protocolLogger?: types.ProtocolLogger): types.ProtocolLogger {\n    return (direction: 'send' | 'receive', message: object) => {\n      if (protocolLogger)\n        protocolLogger(direction, message);\n      if (debugLogger.isEnabled('protocol')) {\n        let text = JSON.stringify(message);\n        if (text.length > MAX_LOG_LENGTH)\n          text = text.substring(0, MAX_LOG_LENGTH / 2) + ' <<<<<( LOG TRUNCATED )>>>>> ' + text.substring(text.length - MAX_LOG_LENGTH / 2);\n        debugLogger.log('protocol', (direction === 'send' ? 'SEND ► ' : '◀ RECV ') + text);\n      }\n    };\n  }\n\n  static formatBrowserLogs(logs: string[], disconnectReason?: string) {\n    if (!disconnectReason && !logs.length)\n      return '';\n    return '\\n' + (disconnectReason ? disconnectReason + '\\n' : '') + logs.join('\\n');\n  }\n}\n\nexport const helper = Helper;\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '../utils';\nimport { BrowserContext } from './browserContext';\nimport { APIRequestContext } from './fetch';\nimport { SdkObject } from './instrumentation';\nimport { ManualPromise } from '../utils/isomorphic/manualPromise';\n\nimport type * as contexts from './browserContext';\nimport type * as frames from './frames';\nimport type * as pages from './page';\nimport type * as types from './types';\nimport type { NormalizedContinueOverrides } from './types';\nimport type { HeadersArray, NameValue } from '../utils/isomorphic/types';\nimport type * as channels from '@protocol/channels';\n\n\nexport function filterCookies(cookies: channels.NetworkCookie[], urls: string[]): channels.NetworkCookie[] {\n  const parsedURLs = urls.map(s => new URL(s));\n  // Chromiums's cookies are missing sameSite when it is 'None'\n  return cookies.filter(c => {\n    if (!parsedURLs.length)\n      return true;\n    for (const parsedURL of parsedURLs) {\n      let domain = c.domain;\n      if (!domain.startsWith('.'))\n        domain = '.' + domain;\n      if (!('.' + parsedURL.hostname).endsWith(domain))\n        continue;\n      if (!parsedURL.pathname.startsWith(c.path))\n        continue;\n      if (parsedURL.protocol !== 'https:' && parsedURL.hostname !== 'localhost' && c.secure)\n        continue;\n      return true;\n    }\n    return false;\n  });\n}\n\n// Rollover to 5-digit year:\n// 253402300799 == Fri, 31 Dec 9999 23:59:59 +0000 (UTC)\n// 253402300800 == Sat,  1 Jan 1000 00:00:00 +0000 (UTC)\nexport const kMaxCookieExpiresDateInSeconds = 253402300799;\n\nexport function rewriteCookies(cookies: channels.SetNetworkCookie[]): channels.SetNetworkCookie[] {\n  return cookies.map(c => {\n    assert(c.url || (c.domain && c.path), 'Cookie should have a url or a domain/path pair');\n    assert(!(c.url && c.domain), 'Cookie should have either url or domain');\n    assert(!(c.url && c.path), 'Cookie should have either url or path');\n    assert(!(c.expires && c.expires < 0 && c.expires !== -1), 'Cookie should have a valid expires, only -1 or a positive number for the unix timestamp in seconds is allowed');\n    assert(!(c.expires && c.expires > 0 && c.expires > kMaxCookieExpiresDateInSeconds), 'Cookie should have a valid expires, only -1 or a positive number for the unix timestamp in seconds is allowed');\n    const copy = { ...c };\n    if (copy.url) {\n      assert(copy.url !== 'about:blank', `Blank page can not have cookie \"${c.name}\"`);\n      assert(!copy.url.startsWith('data:'), `Data URL page can not have cookie \"${c.name}\"`);\n      const url = new URL(copy.url);\n      copy.domain = url.hostname;\n      copy.path = url.pathname.substring(0, url.pathname.lastIndexOf('/') + 1);\n      copy.secure = url.protocol === 'https:';\n    }\n    return copy;\n  });\n}\n\nexport function parseURL(url: string): URL | null {\n  try {\n    return new URL(url);\n  } catch (e) {\n    return null;\n  }\n}\n\nexport function stripFragmentFromUrl(url: string): string {\n  if (!url.includes('#'))\n    return url;\n  return url.substring(0, url.indexOf('#'));\n}\n\nexport class Request extends SdkObject {\n  private _response: Response | null = null;\n  private _redirectedFrom: Request | null;\n  _redirectedTo: Request | null = null;\n  readonly _documentId?: string;\n  readonly _isFavicon: boolean;\n  _failureText: string | null = null;\n  private _url: string;\n  private _resourceType: string;\n  private _method: string;\n  private _postData: Buffer | null;\n  readonly _headers: HeadersArray;\n  private _headersMap = new Map<string, string>();\n  readonly _frame: frames.Frame | null = null;\n  readonly _serviceWorker: pages.Worker | null = null;\n  readonly _context: contexts.BrowserContext;\n  private _rawRequestHeadersPromise = new ManualPromise<HeadersArray>();\n  private _waitForResponsePromise = new ManualPromise<Response | null>();\n  _responseEndTiming = -1;\n  private _overrides: NormalizedContinueOverrides | undefined;\n  private _bodySize: number | undefined;\n\n  constructor(context: contexts.BrowserContext, frame: frames.Frame | null, serviceWorker: pages.Worker | null, redirectedFrom: Request | null, documentId: string | undefined,\n    url: string, resourceType: string, method: string, postData: Buffer | null, headers: HeadersArray) {\n    super(frame || context, 'request');\n    assert(!url.startsWith('data:'), 'Data urls should not fire requests');\n    this._context = context;\n    this._frame = frame;\n    this._serviceWorker = serviceWorker;\n    this._redirectedFrom = redirectedFrom;\n    if (redirectedFrom)\n      redirectedFrom._redirectedTo = this;\n    this._documentId = documentId;\n    this._url = stripFragmentFromUrl(url);\n    this._resourceType = resourceType;\n    this._method = method;\n    this._postData = postData;\n    this._headers = headers;\n    this._updateHeadersMap();\n    this._isFavicon = url.endsWith('/favicon.ico') || !!redirectedFrom?._isFavicon;\n  }\n\n  _setFailureText(failureText: string) {\n    this._failureText = failureText;\n    this._waitForResponsePromise.resolve(null);\n  }\n\n  _applyOverrides(overrides: types.NormalizedContinueOverrides) {\n    this._overrides = { ...this._overrides, ...overrides };\n    this._updateHeadersMap();\n    return this._overrides;\n  }\n\n  private _updateHeadersMap() {\n    for (const { name, value } of this.headers())\n      this._headersMap.set(name.toLowerCase(), value);\n  }\n\n  overrides() {\n    return this._overrides;\n  }\n\n  url(): string {\n    return this._overrides?.url || this._url;\n  }\n\n  resourceType(): string {\n    return this._resourceType;\n  }\n\n  method(): string {\n    return this._overrides?.method || this._method;\n  }\n\n  postDataBuffer(): Buffer | null {\n    return this._overrides?.postData || this._postData;\n  }\n\n  headers(): HeadersArray {\n    return this._overrides?.headers || this._headers;\n  }\n\n  headerValue(name: string): string | undefined {\n    return this._headersMap.get(name);\n  }\n\n  // \"null\" means no raw headers available - we'll use provisional headers as raw headers.\n  setRawRequestHeaders(headers: HeadersArray | null) {\n    if (!this._rawRequestHeadersPromise.isDone())\n      this._rawRequestHeadersPromise.resolve(headers || this._headers);\n  }\n\n  async rawRequestHeaders(): Promise<HeadersArray> {\n    return this._overrides?.headers || this._rawRequestHeadersPromise;\n  }\n\n  response(): PromiseLike<Response | null> {\n    return this._waitForResponsePromise;\n  }\n\n  _existingResponse(): Response | null {\n    return this._response;\n  }\n\n  _setResponse(response: Response) {\n    this._response = response;\n    this._waitForResponsePromise.resolve(response);\n  }\n\n  _finalRequest(): Request {\n    return this._redirectedTo ? this._redirectedTo._finalRequest() : this;\n  }\n\n  frame(): frames.Frame | null {\n    return this._frame;\n  }\n\n  serviceWorker(): pages.Worker | null {\n    return this._serviceWorker;\n  }\n\n  isNavigationRequest(): boolean {\n    return !!this._documentId;\n  }\n\n  redirectedFrom(): Request | null {\n    return this._redirectedFrom;\n  }\n\n  failure(): { errorText: string } | null {\n    if (this._failureText === null)\n      return null;\n    return {\n      errorText: this._failureText\n    };\n  }\n\n  // TODO(bidi): remove once post body is available.\n  _setBodySize(size: number) {\n    this._bodySize = size;\n  }\n\n  bodySize(): number {\n    return this._bodySize || this.postDataBuffer()?.length || 0;\n  }\n\n  async requestHeadersSize(): Promise<number> {\n    let headersSize = 4; // 4 = 2 spaces + 2 line breaks (GET /path \\r\\n)\n    headersSize += this.method().length;\n    headersSize += (new URL(this.url())).pathname.length;\n    headersSize += 8; // httpVersion\n    const headers = await this.rawRequestHeaders();\n    for (const header of headers)\n      headersSize += header.name.length + header.value.length + 4; // 4 = ': ' + '\\r\\n'\n    return headersSize;\n  }\n}\n\nexport class Route extends SdkObject {\n  private readonly _request: Request;\n  private readonly _delegate: RouteDelegate;\n  private _handled = false;\n  private _currentHandler: RouteHandler | undefined;\n  private _futureHandlers: RouteHandler[] = [];\n\n  constructor(request: Request, delegate: RouteDelegate) {\n    super(request._frame || request._context, 'route');\n    this._request = request;\n    this._delegate = delegate;\n    this._request._context.addRouteInFlight(this);\n  }\n\n  handle(handlers: RouteHandler[]) {\n    this._futureHandlers = [...handlers];\n    this.continue({ isFallback: true }).catch(() => {});\n  }\n\n  async removeHandler(handler: RouteHandler) {\n    this._futureHandlers = this._futureHandlers.filter(h => h !== handler);\n    if (handler === this._currentHandler) {\n      await this.continue({ isFallback: true }).catch(() => {});\n      return;\n    }\n  }\n\n  request(): Request {\n    return this._request;\n  }\n\n  async abort(errorCode: string = 'failed') {\n    this._startHandling();\n    this._request._context.emit(BrowserContext.Events.RequestAborted, this._request);\n    await this._delegate.abort(errorCode);\n    this._endHandling();\n  }\n\n  async redirectNavigationRequest(url: string) {\n    this._startHandling();\n    assert(this._request.isNavigationRequest());\n    this._request.frame()!.redirectNavigation(url, this._request._documentId!, this._request.headerValue('referer'));\n    this._endHandling();\n  }\n\n  async fulfill(overrides: channels.RouteFulfillParams) {\n    this._startHandling();\n    let body = overrides.body;\n    let isBase64 = overrides.isBase64 || false;\n    if (body === undefined) {\n      if (overrides.fetchResponseUid) {\n        const buffer = this._request._context.fetchRequest.fetchResponses.get(overrides.fetchResponseUid) || APIRequestContext.findResponseBody(overrides.fetchResponseUid);\n        assert(buffer, 'Fetch response has been disposed');\n        body = buffer.toString('base64');\n        isBase64 = true;\n      } else {\n        body = '';\n        isBase64 = false;\n      }\n    }\n    const headers = [...(overrides.headers || [])];\n    this._maybeAddCorsHeaders(headers);\n    this._request._context.emit(BrowserContext.Events.RequestFulfilled, this._request);\n    await this._delegate.fulfill({\n      status: overrides.status || 200,\n      headers,\n      body: body!,\n      isBase64,\n    });\n    this._endHandling();\n  }\n\n  // See https://github.com/microsoft/playwright/issues/12929\n  private _maybeAddCorsHeaders(headers: NameValue[]) {\n    const origin = this._request.headerValue('origin');\n    if (!origin)\n      return;\n    const requestUrl = new URL(this._request.url());\n    if (!requestUrl.protocol.startsWith('http'))\n      return;\n    if (requestUrl.origin === origin.trim())\n      return;\n    const corsHeader = headers.find(({ name }) => name === 'access-control-allow-origin');\n    if (corsHeader)\n      return;\n    headers.push({ name: 'access-control-allow-origin', value: origin });\n    headers.push({ name: 'access-control-allow-credentials', value: 'true' });\n    headers.push({ name: 'vary', value: 'Origin' });\n  }\n\n  async continue(overrides: types.NormalizedContinueOverrides) {\n    if (overrides.url) {\n      const newUrl = new URL(overrides.url);\n      const oldUrl = new URL(this._request.url());\n      if (oldUrl.protocol !== newUrl.protocol)\n        throw new Error('New URL must have same protocol as overridden URL');\n    }\n    if (overrides.headers)\n      overrides.headers = overrides.headers?.filter(header => header.name.toLowerCase() !== 'cookie');\n    overrides = this._request._applyOverrides(overrides);\n\n    const nextHandler = this._futureHandlers.shift();\n    if (nextHandler) {\n      this._currentHandler = nextHandler;\n      nextHandler(this, this._request);\n      return;\n    }\n\n    if (!overrides.isFallback)\n      this._request._context.emit(BrowserContext.Events.RequestContinued, this._request);\n    this._startHandling();\n    await this._delegate.continue(overrides);\n    this._endHandling();\n  }\n\n  private _startHandling() {\n    assert(!this._handled, 'Route is already handled!');\n    this._handled = true;\n    this._currentHandler = undefined;\n  }\n\n  private _endHandling() {\n    this._futureHandlers = [];\n    this._currentHandler = undefined;\n    this._request._context.removeRouteInFlight(this);\n  }\n}\n\nexport type RouteHandler = (route: Route, request: Request) => void;\n\ntype GetResponseBodyCallback = () => Promise<Buffer>;\n\nexport type ResourceTiming = {\n  startTime: number;\n  domainLookupStart: number;\n  domainLookupEnd: number;\n  connectStart: number;\n  secureConnectionStart: number;\n  connectEnd: number;\n  requestStart: number;\n  responseStart: number;\n};\n\nexport type ResourceSizes = {\n  requestBodySize: number,\n  requestHeadersSize: number,\n  responseBodySize: number,\n  responseHeadersSize: number,\n  transferSize: number,\n};\n\nexport type RemoteAddr = {\n  ipAddress: string;\n  port: number;\n};\n\nexport type SecurityDetails = {\n  protocol?: string;\n  subjectName?: string;\n  issuer?: string;\n  validFrom?: number;\n  validTo?: number;\n};\n\nexport class Response extends SdkObject {\n  private _request: Request;\n  private _contentPromise: Promise<Buffer> | null = null;\n  _finishedPromise = new ManualPromise<void>();\n  private _status: number;\n  private _statusText: string;\n  private _url: string;\n  private _headers: HeadersArray;\n  private _headersMap = new Map<string, string>();\n  private _getResponseBodyCallback: GetResponseBodyCallback;\n  private _timing: ResourceTiming;\n  private _serverAddrPromise = new ManualPromise<RemoteAddr | undefined>();\n  private _securityDetailsPromise = new ManualPromise<SecurityDetails | undefined>();\n  private _rawResponseHeadersPromise = new ManualPromise<HeadersArray>();\n  private _httpVersion: string | undefined;\n  private _fromServiceWorker: boolean;\n  private _encodedBodySizePromise = new ManualPromise<number | null>();\n  private _transferSizePromise = new ManualPromise<number | null>();\n  private _responseHeadersSizePromise = new ManualPromise<number | null>();\n\n  constructor(request: Request, status: number, statusText: string, headers: HeadersArray, timing: ResourceTiming, getResponseBodyCallback: GetResponseBodyCallback, fromServiceWorker: boolean, httpVersion?: string) {\n    super(request.frame() || request._context, 'response');\n    this._request = request;\n    this._timing = timing;\n    this._status = status;\n    this._statusText = statusText;\n    this._url = request.url();\n    this._headers = headers;\n    for (const { name, value } of this._headers)\n      this._headersMap.set(name.toLowerCase(), value);\n    this._getResponseBodyCallback = getResponseBodyCallback;\n    this._request._setResponse(this);\n    this._httpVersion = httpVersion;\n    this._fromServiceWorker = fromServiceWorker;\n  }\n\n  _serverAddrFinished(addr?: RemoteAddr) {\n    this._serverAddrPromise.resolve(addr);\n  }\n\n  _securityDetailsFinished(securityDetails?: SecurityDetails) {\n    this._securityDetailsPromise.resolve(securityDetails);\n  }\n\n  _requestFinished(responseEndTiming: number) {\n    this._request._responseEndTiming = Math.max(responseEndTiming, this._timing.responseStart);\n    // Set start time equal to end when request is served from memory cache.\n    if (this._timing.requestStart === -1)\n      this._timing.requestStart = this._request._responseEndTiming;\n    this._finishedPromise.resolve();\n  }\n\n  _setHttpVersion(httpVersion: string) {\n    this._httpVersion = httpVersion;\n  }\n\n  url(): string {\n    return this._url;\n  }\n\n  status(): number {\n    return this._status;\n  }\n\n  statusText(): string {\n    return this._statusText;\n  }\n\n  headers(): HeadersArray {\n    return this._headers;\n  }\n\n  headerValue(name: string): string | undefined {\n    return this._headersMap.get(name);\n  }\n\n  async rawResponseHeaders(): Promise<NameValue[]> {\n    return this._rawResponseHeadersPromise;\n  }\n\n  // \"null\" means no raw headers available - we'll use provisional headers as raw headers.\n  setRawResponseHeaders(headers: HeadersArray | null) {\n    if (!this._rawResponseHeadersPromise.isDone())\n      this._rawResponseHeadersPromise.resolve(headers || this._headers);\n  }\n\n  setTransferSize(size: number | null) {\n    this._transferSizePromise.resolve(size);\n  }\n\n  setEncodedBodySize(size: number | null) {\n    this._encodedBodySizePromise.resolve(size);\n  }\n\n  setResponseHeadersSize(size: number | null) {\n    this._responseHeadersSizePromise.resolve(size);\n  }\n\n  timing(): ResourceTiming {\n    return this._timing;\n  }\n\n  async serverAddr(): Promise<RemoteAddr|null> {\n    return await this._serverAddrPromise || null;\n  }\n\n  async securityDetails(): Promise<SecurityDetails|null> {\n    return await this._securityDetailsPromise || null;\n  }\n\n  body(): Promise<Buffer> {\n    if (!this._contentPromise) {\n      this._contentPromise = this._finishedPromise.then(async () => {\n        if (this._status >= 300 && this._status <= 399)\n          throw new Error('Response body is unavailable for redirect responses');\n        return this._getResponseBodyCallback();\n      });\n    }\n    return this._contentPromise;\n  }\n\n  request(): Request {\n    return this._request;\n  }\n\n  frame(): frames.Frame | null {\n    return this._request.frame();\n  }\n\n  httpVersion(): string {\n    if (!this._httpVersion)\n      return 'HTTP/1.1';\n    if (this._httpVersion === 'http/1.1')\n      return 'HTTP/1.1';\n    if (this._httpVersion === 'h2')\n      return 'HTTP/2.0';\n    return this._httpVersion;\n  }\n\n  fromServiceWorker(): boolean {\n    return this._fromServiceWorker;\n  }\n\n  async responseHeadersSize(): Promise<number> {\n    const availableSize = await this._responseHeadersSizePromise;\n    if (availableSize !== null)\n      return availableSize;\n\n    // Fallback to calculating it manually.\n    let headersSize = 4; // 4 = 2 spaces + 2 line breaks (HTTP/1.1 200 Ok\\r\\n)\n    headersSize += 8; // httpVersion;\n    headersSize += 3; // statusCode;\n    headersSize += this.statusText().length;\n    const headers = await this._rawResponseHeadersPromise;\n    for (const header of headers)\n      headersSize += header.name.length + header.value.length + 4; // 4 = ': ' + '\\r\\n'\n    headersSize += 2; // '\\r\\n'\n    return headersSize;\n  }\n\n  async sizes(): Promise<ResourceSizes> {\n    const requestHeadersSize = await this._request.requestHeadersSize();\n    const responseHeadersSize = await this.responseHeadersSize();\n\n    let encodedBodySize = await this._encodedBodySizePromise;\n    if (encodedBodySize === null) {\n      // Fallback to calculating it manually.\n      const headers = await this._rawResponseHeadersPromise;\n      const contentLength = headers.find(h => h.name.toLowerCase() === 'content-length')?.value;\n      encodedBodySize = contentLength ? +contentLength : 0;\n    }\n\n    let transferSize = await this._transferSizePromise;\n    if (transferSize === null) {\n      // Fallback to calculating it manually.\n      transferSize = responseHeadersSize + encodedBodySize;\n    }\n\n    return {\n      requestBodySize: this._request.bodySize(),\n      requestHeadersSize,\n      responseBodySize: encodedBodySize,\n      responseHeadersSize,\n      transferSize,\n    };\n  }\n}\n\nexport class WebSocket extends SdkObject {\n  private _url: string;\n  private _notified = false;\n\n  static Events = {\n    Close: 'close',\n    SocketError: 'socketerror',\n    FrameReceived: 'framereceived',\n    FrameSent: 'framesent',\n  };\n\n  constructor(parent: SdkObject, url: string) {\n    super(parent, 'ws');\n    this._url = url;\n  }\n\n  markAsNotified() {\n    // Sometimes we get \"onWebSocketRequest\" twice, at least in Chromium.\n    // Perhaps websocket is restarted because of chrome.webRequest extensions api?\n    // Or maybe the handshake response was a redirect?\n    if (this._notified)\n      return false;\n    this._notified = true;\n    return true;\n  }\n\n  url(): string {\n    return this._url;\n  }\n\n  frameSent(opcode: number, data: string) {\n    this.emit(WebSocket.Events.FrameSent, { opcode, data });\n  }\n\n  frameReceived(opcode: number, data: string) {\n    this.emit(WebSocket.Events.FrameReceived, { opcode, data });\n  }\n\n  error(errorMessage: string) {\n    this.emit(WebSocket.Events.SocketError, errorMessage);\n  }\n\n  closed() {\n    this.emit(WebSocket.Events.Close);\n  }\n}\n\nexport interface RouteDelegate {\n  abort(errorCode: string): Promise<void>;\n  fulfill(response: types.NormalizedFulfillResponse): Promise<void>;\n  continue(overrides: types.NormalizedContinueOverrides): Promise<void>;\n}\n\n// List taken from https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml with extra 306 and 418 codes.\nconst STATUS_TEXTS: { [status: string]: string } = {\n  '100': 'Continue',\n  '101': 'Switching Protocols',\n  '102': 'Processing',\n  '103': 'Early Hints',\n  '200': 'OK',\n  '201': 'Created',\n  '202': 'Accepted',\n  '203': 'Non-Authoritative Information',\n  '204': 'No Content',\n  '205': 'Reset Content',\n  '206': 'Partial Content',\n  '207': 'Multi-Status',\n  '208': 'Already Reported',\n  '226': 'IM Used',\n  '300': 'Multiple Choices',\n  '301': 'Moved Permanently',\n  '302': 'Found',\n  '303': 'See Other',\n  '304': 'Not Modified',\n  '305': 'Use Proxy',\n  '306': 'Switch Proxy',\n  '307': 'Temporary Redirect',\n  '308': 'Permanent Redirect',\n  '400': 'Bad Request',\n  '401': 'Unauthorized',\n  '402': 'Payment Required',\n  '403': 'Forbidden',\n  '404': 'Not Found',\n  '405': 'Method Not Allowed',\n  '406': 'Not Acceptable',\n  '407': 'Proxy Authentication Required',\n  '408': 'Request Timeout',\n  '409': 'Conflict',\n  '410': 'Gone',\n  '411': 'Length Required',\n  '412': 'Precondition Failed',\n  '413': 'Payload Too Large',\n  '414': 'URI Too Long',\n  '415': 'Unsupported Media Type',\n  '416': 'Range Not Satisfiable',\n  '417': 'Expectation Failed',\n  '418': 'I\\'m a teapot',\n  '421': 'Misdirected Request',\n  '422': 'Unprocessable Entity',\n  '423': 'Locked',\n  '424': 'Failed Dependency',\n  '425': 'Too Early',\n  '426': 'Upgrade Required',\n  '428': 'Precondition Required',\n  '429': 'Too Many Requests',\n  '431': 'Request Header Fields Too Large',\n  '451': 'Unavailable For Legal Reasons',\n  '500': 'Internal Server Error',\n  '501': 'Not Implemented',\n  '502': 'Bad Gateway',\n  '503': 'Service Unavailable',\n  '504': 'Gateway Timeout',\n  '505': 'HTTP Version Not Supported',\n  '506': 'Variant Also Negotiates',\n  '507': 'Insufficient Storage',\n  '508': 'Loop Detected',\n  '510': 'Not Extended',\n  '511': 'Network Authentication Required',\n};\n\nexport function statusText(status: number): string {\n  return STATUS_TEXTS[String(status)] || 'Unknown';\n}\n\nexport function singleHeader(name: string, value: string): HeadersArray {\n  return [{ name, value }];\n}\n\nexport function mergeHeaders(headers: (HeadersArray | undefined | null)[]): HeadersArray {\n  const lowerCaseToValue = new Map<string, string>();\n  const lowerCaseToOriginalCase = new Map<string, string>();\n  for (const h of headers) {\n    if (!h)\n      continue;\n    for (const { name, value } of h) {\n      const lower = name.toLowerCase();\n      lowerCaseToOriginalCase.set(lower, name);\n      lowerCaseToValue.set(lower, value);\n    }\n  }\n  const result: HeadersArray = [];\n  for (const [lower, value] of lowerCaseToValue)\n    result.push({ name: lowerCaseToOriginalCase.get(lower)!, value });\n  return result;\n}\n","/**\n * Copyright 2018 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type * as dom from './dom';\nimport type * as channels from '@protocol/channels';\n\nexport interface AXNode {\n    isInteresting(insideControl: boolean): boolean;\n    isLeafNode(): boolean;\n    isControl(): boolean;\n    serialize(): channels.AXNode;\n    children(): Iterable<AXNode>;\n}\n\nexport class Accessibility {\n  private _getAXTree:  (needle?: dom.ElementHandle) => Promise<{tree: AXNode, needle: AXNode | null}>;\n  constructor(getAXTree: (needle?: dom.ElementHandle) => Promise<{tree: AXNode, needle: AXNode | null}>) {\n    this._getAXTree = getAXTree;\n  }\n\n  async snapshot(options: {\n      interestingOnly?: boolean;\n      root?: dom.ElementHandle;\n    } = {}): Promise<channels.AXNode | null> {\n    const {\n      interestingOnly = true,\n      root = null,\n    } = options;\n    const { tree, needle } = await this._getAXTree(root || undefined);\n    if (!interestingOnly) {\n      if (root)\n        return needle && serializeTree(needle)[0];\n      return serializeTree(tree)[0];\n    }\n\n    const interestingNodes: Set<AXNode> = new Set();\n    collectInterestingNodes(interestingNodes, tree, false);\n    if (root && (!needle || !interestingNodes.has(needle)))\n      return null;\n    return serializeTree(needle || tree, interestingNodes)[0];\n  }\n}\n\nfunction collectInterestingNodes(collection: Set<AXNode>, node: AXNode, insideControl: boolean) {\n  if (node.isInteresting(insideControl))\n    collection.add(node);\n  if (node.isLeafNode())\n    return;\n  insideControl = insideControl || node.isControl();\n  for (const child of node.children())\n    collectInterestingNodes(collection, child, insideControl);\n}\n\nfunction serializeTree(node: AXNode, whitelistedNodes?: Set<AXNode>): channels.AXNode[] {\n  const children: channels.AXNode[] = [];\n  for (const child of node.children())\n    children.push(...serializeTree(child, whitelistedNodes));\n\n  if (whitelistedNodes && !whitelistedNodes.has(node))\n    return children;\n\n  const serializedNode = node.serialize();\n  if (children.length)\n    serializedNode.children = children;\n  return [serializedNode];\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type * as js from './javascript';\nimport type { Page } from './page';\nimport type { ConsoleMessageLocation } from './types';\n\nexport class ConsoleMessage {\n  private _type: string;\n  private _text?: string;\n  private _args: js.JSHandle[];\n  private _location: ConsoleMessageLocation;\n  private _page: Page | null;\n\n  constructor(page: Page | null, type: string, text: string | undefined, args: js.JSHandle[], location?: ConsoleMessageLocation) {\n    this._page = page;\n    this._type = type;\n    this._text = text;\n    this._args = args;\n    this._location = location || { url: '', lineNumber: 0, columnNumber: 0 };\n  }\n\n  page() {\n    return this._page;\n  }\n\n  type(): string {\n    return this._type;\n  }\n\n  text(): string {\n    if (this._text === undefined)\n      this._text = this._args.map(arg => arg.preview()).join(' ');\n    return this._text;\n  }\n\n  args(): js.JSHandle[] {\n    return this._args;\n  }\n\n  location(): ConsoleMessageLocation {\n    return this._location;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ElementHandle } from './dom';\nimport type { Page } from './page';\n\nexport class FileChooser {\n  private _page: Page;\n  private _elementHandle: ElementHandle;\n  private _isMultiple: boolean;\n\n  constructor(page: Page, elementHandle: ElementHandle, isMultiple: boolean) {\n    this._page = page;\n    this._elementHandle = elementHandle;\n    this._isMultiple = isMultiple;\n  }\n\n  element(): ElementHandle {\n    return this._elementHandle;\n  }\n\n  isMultiple(): boolean {\n    return this._isMultiple;\n  }\n\n  page(): Page {\n    return this._page;\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type KeyDefinition = {\n  key: string;\n  keyCode: number;\n  keyCodeWithoutLocation?: number;\n  shiftKey?: string;\n  shiftKeyCode?: number;\n  text?: string;\n  location?: number;\n};\n\nexport type KeyboardLayout = { [s: string]: KeyDefinition; };\n\nexport const keypadLocation = 3;\n\nexport const USKeyboardLayout: KeyboardLayout = {\n  // Functions row\n  'Escape': { 'keyCode': 27, 'key': 'Escape' },\n  'F1': { 'keyCode': 112, 'key': 'F1' },\n  'F2': { 'keyCode': 113, 'key': 'F2' },\n  'F3': { 'keyCode': 114, 'key': 'F3' },\n  'F4': { 'keyCode': 115, 'key': 'F4' },\n  'F5': { 'keyCode': 116, 'key': 'F5' },\n  'F6': { 'keyCode': 117, 'key': 'F6' },\n  'F7': { 'keyCode': 118, 'key': 'F7' },\n  'F8': { 'keyCode': 119, 'key': 'F8' },\n  'F9': { 'keyCode': 120, 'key': 'F9' },\n  'F10': { 'keyCode': 121, 'key': 'F10' },\n  'F11': { 'keyCode': 122, 'key': 'F11' },\n  'F12': { 'keyCode': 123, 'key': 'F12' },\n\n  // Numbers row\n  'Backquote': { 'keyCode': 192, 'shiftKey': '~', 'key': '`' },\n  'Digit1': { 'keyCode': 49, 'shiftKey': '!', 'key': '1' },\n  'Digit2': { 'keyCode': 50, 'shiftKey': '@', 'key': '2' },\n  'Digit3': { 'keyCode': 51, 'shiftKey': '#', 'key': '3' },\n  'Digit4': { 'keyCode': 52, 'shiftKey': '$', 'key': '4' },\n  'Digit5': { 'keyCode': 53, 'shiftKey': '%', 'key': '5' },\n  'Digit6': { 'keyCode': 54, 'shiftKey': '^', 'key': '6' },\n  'Digit7': { 'keyCode': 55, 'shiftKey': '&', 'key': '7' },\n  'Digit8': { 'keyCode': 56, 'shiftKey': '*', 'key': '8' },\n  'Digit9': { 'keyCode': 57, 'shiftKey': '\\(', 'key': '9' },\n  'Digit0': { 'keyCode': 48, 'shiftKey': ')', 'key': '0' },\n  'Minus': { 'keyCode': 189, 'shiftKey': '_', 'key': '-' },\n  'Equal': { 'keyCode': 187, 'shiftKey': '+', 'key': '=' },\n  'Backslash': { 'keyCode': 220, 'shiftKey': '|', 'key': '\\\\' },\n  'Backspace': { 'keyCode': 8, 'key': 'Backspace' },\n\n  // First row\n  'Tab': { 'keyCode': 9, 'key': 'Tab' },\n  'KeyQ': { 'keyCode': 81, 'shiftKey': 'Q', 'key': 'q' },\n  'KeyW': { 'keyCode': 87, 'shiftKey': 'W', 'key': 'w' },\n  'KeyE': { 'keyCode': 69, 'shiftKey': 'E', 'key': 'e' },\n  'KeyR': { 'keyCode': 82, 'shiftKey': 'R', 'key': 'r' },\n  'KeyT': { 'keyCode': 84, 'shiftKey': 'T', 'key': 't' },\n  'KeyY': { 'keyCode': 89, 'shiftKey': 'Y', 'key': 'y' },\n  'KeyU': { 'keyCode': 85, 'shiftKey': 'U', 'key': 'u' },\n  'KeyI': { 'keyCode': 73, 'shiftKey': 'I', 'key': 'i' },\n  'KeyO': { 'keyCode': 79, 'shiftKey': 'O', 'key': 'o' },\n  'KeyP': { 'keyCode': 80, 'shiftKey': 'P', 'key': 'p' },\n  'BracketLeft': { 'keyCode': 219, 'shiftKey': '{', 'key': '[' },\n  'BracketRight': { 'keyCode': 221, 'shiftKey': '}', 'key': ']' },\n\n  // Second row\n  'CapsLock': { 'keyCode': 20, 'key': 'CapsLock' },\n  'KeyA': { 'keyCode': 65, 'shiftKey': 'A', 'key': 'a' },\n  'KeyS': { 'keyCode': 83, 'shiftKey': 'S', 'key': 's' },\n  'KeyD': { 'keyCode': 68, 'shiftKey': 'D', 'key': 'd' },\n  'KeyF': { 'keyCode': 70, 'shiftKey': 'F', 'key': 'f' },\n  'KeyG': { 'keyCode': 71, 'shiftKey': 'G', 'key': 'g' },\n  'KeyH': { 'keyCode': 72, 'shiftKey': 'H', 'key': 'h' },\n  'KeyJ': { 'keyCode': 74, 'shiftKey': 'J', 'key': 'j' },\n  'KeyK': { 'keyCode': 75, 'shiftKey': 'K', 'key': 'k' },\n  'KeyL': { 'keyCode': 76, 'shiftKey': 'L', 'key': 'l' },\n  'Semicolon': { 'keyCode': 186, 'shiftKey': ':', 'key': ';' },\n  'Quote': { 'keyCode': 222, 'shiftKey': '\"', 'key': '\\'' },\n  'Enter': { 'keyCode': 13, 'key': 'Enter', 'text': '\\r' },\n\n  // Third row\n  'ShiftLeft': { 'keyCode': 160, 'keyCodeWithoutLocation': 16, 'key': 'Shift', 'location': 1 },\n  'KeyZ': { 'keyCode': 90, 'shiftKey': 'Z', 'key': 'z' },\n  'KeyX': { 'keyCode': 88, 'shiftKey': 'X', 'key': 'x' },\n  'KeyC': { 'keyCode': 67, 'shiftKey': 'C', 'key': 'c' },\n  'KeyV': { 'keyCode': 86, 'shiftKey': 'V', 'key': 'v' },\n  'KeyB': { 'keyCode': 66, 'shiftKey': 'B', 'key': 'b' },\n  'KeyN': { 'keyCode': 78, 'shiftKey': 'N', 'key': 'n' },\n  'KeyM': { 'keyCode': 77, 'shiftKey': 'M', 'key': 'm' },\n  'Comma': { 'keyCode': 188, 'shiftKey': '\\<', 'key': ',' },\n  'Period': { 'keyCode': 190, 'shiftKey': '>', 'key': '.' },\n  'Slash': { 'keyCode': 191, 'shiftKey': '?', 'key': '/' },\n  'ShiftRight': { 'keyCode': 161, 'keyCodeWithoutLocation': 16, 'key': 'Shift', 'location': 2 },\n\n  // Last row\n  'ControlLeft': { 'keyCode': 162, 'keyCodeWithoutLocation': 17, 'key': 'Control', 'location': 1 },\n  'MetaLeft': { 'keyCode': 91, 'key': 'Meta', 'location': 1 },\n  'AltLeft': { 'keyCode': 164, 'keyCodeWithoutLocation': 18, 'key': 'Alt', 'location': 1 },\n  'Space': { 'keyCode': 32, 'key': ' ' },\n  'AltRight': { 'keyCode': 165, 'keyCodeWithoutLocation': 18, 'key': 'Alt', 'location': 2 },\n  'AltGraph': { 'keyCode': 225, 'key': 'AltGraph' },\n  'MetaRight': { 'keyCode': 92, 'key': 'Meta', 'location': 2 },\n  'ContextMenu': { 'keyCode': 93, 'key': 'ContextMenu' },\n  'ControlRight': { 'keyCode': 163, 'keyCodeWithoutLocation': 17, 'key': 'Control', 'location': 2 },\n\n  // Center block\n  'PrintScreen': { 'keyCode': 44, 'key': 'PrintScreen' },\n  'ScrollLock': { 'keyCode': 145, 'key': 'ScrollLock' },\n  'Pause': { 'keyCode': 19, 'key': 'Pause' },\n\n  'PageUp': { 'keyCode': 33, 'key': 'PageUp' },\n  'PageDown': { 'keyCode': 34, 'key': 'PageDown' },\n  'Insert': { 'keyCode': 45, 'key': 'Insert' },\n  'Delete': { 'keyCode': 46, 'key': 'Delete' },\n  'Home': { 'keyCode': 36, 'key': 'Home' },\n  'End': { 'keyCode': 35, 'key': 'End' },\n\n  'ArrowLeft': { 'keyCode': 37, 'key': 'ArrowLeft' },\n  'ArrowUp': { 'keyCode': 38, 'key': 'ArrowUp' },\n  'ArrowRight': { 'keyCode': 39, 'key': 'ArrowRight' },\n  'ArrowDown': { 'keyCode': 40, 'key': 'ArrowDown' },\n\n  // Numpad\n  'NumLock': { 'keyCode': 144, 'key': 'NumLock' },\n  'NumpadDivide': { 'keyCode': 111, 'key': '/', 'location': 3 },\n  'NumpadMultiply': { 'keyCode': 106, 'key': '*', 'location': 3 },\n  'NumpadSubtract': { 'keyCode': 109, 'key': '-', 'location': 3 },\n  'Numpad7': { 'keyCode': 36, 'shiftKeyCode': 103, 'key': 'Home', 'shiftKey': '7', 'location': 3 },\n  'Numpad8': { 'keyCode': 38, 'shiftKeyCode': 104, 'key': 'ArrowUp', 'shiftKey': '8', 'location': 3 },\n  'Numpad9': { 'keyCode': 33, 'shiftKeyCode': 105, 'key': 'PageUp', 'shiftKey': '9', 'location': 3 },\n  'Numpad4': { 'keyCode': 37, 'shiftKeyCode': 100, 'key': 'ArrowLeft', 'shiftKey': '4', 'location': 3 },\n  'Numpad5': { 'keyCode': 12, 'shiftKeyCode': 101, 'key': 'Clear', 'shiftKey': '5', 'location': 3 },\n  'Numpad6': { 'keyCode': 39, 'shiftKeyCode': 102, 'key': 'ArrowRight', 'shiftKey': '6', 'location': 3 },\n  'NumpadAdd': { 'keyCode': 107, 'key': '+', 'location': 3 },\n  'Numpad1': { 'keyCode': 35, 'shiftKeyCode': 97, 'key': 'End', 'shiftKey': '1', 'location': 3 },\n  'Numpad2': { 'keyCode': 40, 'shiftKeyCode': 98, 'key': 'ArrowDown', 'shiftKey': '2', 'location': 3 },\n  'Numpad3': { 'keyCode': 34, 'shiftKeyCode': 99, 'key': 'PageDown', 'shiftKey': '3', 'location': 3 },\n  'Numpad0': { 'keyCode': 45, 'shiftKeyCode': 96, 'key': 'Insert', 'shiftKey': '0', 'location': 3 },\n  'NumpadDecimal': { 'keyCode': 46, 'shiftKeyCode': 110, 'key': '\\u0000', 'shiftKey': '.', 'location': 3 },\n  'NumpadEnter': { 'keyCode': 13, 'key': 'Enter', 'text': '\\r', 'location': 3 },\n};\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '../utils';\nimport * as keyboardLayout from './usKeyboardLayout';\n\nimport type { CallMetadata } from './instrumentation';\nimport type { Page } from './page';\nimport type * as types from './types';\n\nexport const keypadLocation = keyboardLayout.keypadLocation;\n\nexport type KeyDescription = {\n  keyCode: number,\n  keyCodeWithoutLocation: number,\n  key: string,\n  text: string,\n  code: string,\n  location: number,\n  shifted?: KeyDescription;\n};\n\nconst kModifiers: types.KeyboardModifier[] = ['Alt', 'Control', 'Meta', 'Shift'];\n\nexport interface RawKeyboard {\n  keydown(modifiers: Set<types.KeyboardModifier>, keyName: string, description: KeyDescription, autoRepeat: boolean): Promise<void>;\n  keyup(modifiers: Set<types.KeyboardModifier>, keyName: string, description: KeyDescription): Promise<void>;\n  sendText(text: string): Promise<void>;\n}\n\nexport class Keyboard {\n  private _pressedModifiers = new Set<types.KeyboardModifier>();\n  private _pressedKeys = new Set<string>();\n  private _raw: RawKeyboard;\n\n  constructor(raw: RawKeyboard) {\n    this._raw = raw;\n  }\n\n  async down(key: string) {\n    const description = this._keyDescriptionForString(key);\n    const autoRepeat = this._pressedKeys.has(description.code);\n    this._pressedKeys.add(description.code);\n    if (kModifiers.includes(description.key as types.KeyboardModifier))\n      this._pressedModifiers.add(description.key as types.KeyboardModifier);\n    await this._raw.keydown(this._pressedModifiers, key, description, autoRepeat);\n  }\n\n  private _keyDescriptionForString(str: string): KeyDescription {\n    const keyString = resolveSmartModifierString(str);\n    let description = usKeyboardLayout.get(keyString);\n    assert(description, `Unknown key: \"${keyString}\"`);\n    const shift = this._pressedModifiers.has('Shift');\n    description = shift && description.shifted ? description.shifted : description;\n\n    // if any modifiers besides shift are pressed, no text should be sent\n    if (this._pressedModifiers.size > 1 || (!this._pressedModifiers.has('Shift') && this._pressedModifiers.size === 1))\n      return { ...description, text: '' };\n    return description;\n  }\n\n  async up(key: string) {\n    const description = this._keyDescriptionForString(key);\n    if (kModifiers.includes(description.key as types.KeyboardModifier))\n      this._pressedModifiers.delete(description.key as types.KeyboardModifier);\n    this._pressedKeys.delete(description.code);\n    await this._raw.keyup(this._pressedModifiers, key, description);\n  }\n\n  async insertText(text: string) {\n    await this._raw.sendText(text);\n  }\n\n  async type(text: string, options?: { delay?: number }) {\n    const delay = (options && options.delay) || undefined;\n    for (const char of text) {\n      if (usKeyboardLayout.has(char)) {\n        await this.press(char, { delay });\n      } else {\n        if (delay)\n          await new Promise(f => setTimeout(f, delay));\n        await this.insertText(char);\n      }\n    }\n  }\n\n  async press(key: string, options: { delay?: number } = {}) {\n    function split(keyString: string) {\n      const keys = [];\n      let building = '';\n      for (const char of keyString) {\n        if (char === '+' && building) {\n          keys.push(building);\n          building = '';\n        } else {\n          building += char;\n        }\n      }\n      keys.push(building);\n      return keys;\n    }\n\n    const tokens = split(key);\n    key = tokens[tokens.length - 1];\n    for (let i = 0; i < tokens.length - 1; ++i)\n      await this.down(tokens[i]);\n    await this.down(key);\n    if (options.delay)\n      await new Promise(f => setTimeout(f, options.delay));\n    await this.up(key);\n    for (let i = tokens.length - 2; i >= 0; --i)\n      await this.up(tokens[i]);\n  }\n\n  async ensureModifiers(mm: types.SmartKeyboardModifier[]): Promise<types.KeyboardModifier[]> {\n    const modifiers = mm.map(resolveSmartModifier);\n    for (const modifier of modifiers) {\n      if (!kModifiers.includes(modifier))\n        throw new Error('Unknown modifier ' + modifier);\n    }\n    const restore: types.KeyboardModifier[] = Array.from(this._pressedModifiers);\n    for (const key of kModifiers) {\n      const needDown = modifiers.includes(key);\n      const isDown = this._pressedModifiers.has(key);\n      if (needDown && !isDown)\n        await this.down(key);\n      else if (!needDown && isDown)\n        await this.up(key);\n    }\n    return restore;\n  }\n\n  _modifiers(): Set<types.KeyboardModifier> {\n    return this._pressedModifiers;\n  }\n}\n\nexport function resolveSmartModifierString(key: string): string {\n  if (key === 'ControlOrMeta')\n    return process.platform === 'darwin' ? 'Meta' : 'Control';\n  return key;\n}\n\nexport function resolveSmartModifier(m: types.SmartKeyboardModifier): types.KeyboardModifier {\n  return resolveSmartModifierString(m) as types.KeyboardModifier;\n}\n\nexport interface RawMouse {\n  move(x: number, y: number, button: types.MouseButton | 'none', buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, forClick: boolean): Promise<void>;\n  down(x: number, y: number, button: types.MouseButton, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, clickCount: number): Promise<void>;\n  up(x: number, y: number, button: types.MouseButton, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, clickCount: number): Promise<void>;\n  wheel(x: number, y: number, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, deltaX: number, deltaY: number): Promise<void>;\n}\n\nexport class Mouse {\n  private _keyboard: Keyboard;\n  private _x = 0;\n  private _y = 0;\n  private _lastButton: 'none' | types.MouseButton = 'none';\n  private _buttons = new Set<types.MouseButton>();\n  private _raw: RawMouse;\n  private _page: Page;\n\n  constructor(raw: RawMouse, page: Page) {\n    this._raw = raw;\n    this._page = page;\n    this._keyboard = this._page.keyboard;\n  }\n\n  async move(x: number, y: number, options: { steps?: number, forClick?: boolean } = {}, metadata?: CallMetadata) {\n    if (metadata)\n      metadata.point = { x, y };\n    const { steps = 1 } = options;\n    const fromX = this._x;\n    const fromY = this._y;\n    this._x = x;\n    this._y = y;\n    for (let i = 1; i <= steps; i++) {\n      const middleX = fromX + (x - fromX) * (i / steps);\n      const middleY = fromY + (y - fromY) * (i / steps);\n      await this._raw.move(middleX, middleY, this._lastButton, this._buttons, this._keyboard._modifiers(), !!options.forClick);\n    }\n  }\n\n  async down(options: { button?: types.MouseButton, clickCount?: number } = {}, metadata?: CallMetadata) {\n    if (metadata)\n      metadata.point = { x: this._x, y: this._y };\n    const { button = 'left', clickCount = 1 } = options;\n    this._lastButton = button;\n    this._buttons.add(button);\n    await this._raw.down(this._x, this._y, this._lastButton, this._buttons, this._keyboard._modifiers(), clickCount);\n  }\n\n  async up(options: { button?: types.MouseButton, clickCount?: number } = {}, metadata?: CallMetadata) {\n    if (metadata)\n      metadata.point = { x: this._x, y: this._y };\n    const { button = 'left', clickCount = 1 } = options;\n    this._lastButton = 'none';\n    this._buttons.delete(button);\n    await this._raw.up(this._x, this._y, button, this._buttons, this._keyboard._modifiers(), clickCount);\n  }\n\n  async click(x: number, y: number, options: { delay?: number, button?: types.MouseButton, clickCount?: number } = {}, metadata?: CallMetadata) {\n    if (metadata)\n      metadata.point = { x, y };\n    const { delay = null, clickCount = 1 } = options;\n    if (delay) {\n      this.move(x, y, { forClick: true });\n      for (let cc = 1; cc <= clickCount; ++cc) {\n        await this.down({ ...options, clickCount: cc });\n        await new Promise(f => setTimeout(f, delay));\n        await this.up({ ...options, clickCount: cc });\n        if (cc < clickCount)\n          await new Promise(f => setTimeout(f, delay));\n      }\n    } else {\n      const promises = [];\n      promises.push(this.move(x, y, { forClick: true }));\n      for (let cc = 1; cc <= clickCount; ++cc) {\n        promises.push(this.down({ ...options, clickCount: cc }));\n        promises.push(this.up({ ...options, clickCount: cc }));\n      }\n      await Promise.all(promises);\n    }\n  }\n\n  async dblclick(x: number, y: number, options: { delay?: number, button?: types.MouseButton } = {}) {\n    await this.click(x, y, { ...options, clickCount: 2 });\n  }\n\n  async wheel(deltaX: number, deltaY: number) {\n    await this._raw.wheel(this._x, this._y, this._buttons, this._keyboard._modifiers(), deltaX, deltaY);\n  }\n}\n\nconst aliases = new Map<string, string[]>([\n  ['ShiftLeft', ['Shift']],\n  ['ControlLeft', ['Control']],\n  ['AltLeft', ['Alt']],\n  ['MetaLeft', ['Meta']],\n  ['Enter', ['\\n', '\\r']],\n]);\n\nconst usKeyboardLayout = buildLayoutClosure(keyboardLayout.USKeyboardLayout);\n\nfunction buildLayoutClosure(layout: keyboardLayout.KeyboardLayout): Map<string, KeyDescription> {\n  const result = new Map<string, KeyDescription>();\n  for (const code in layout) {\n    const definition = layout[code];\n    const description: KeyDescription = {\n      key: definition.key || '',\n      keyCode: definition.keyCode || 0,\n      keyCodeWithoutLocation: definition.keyCodeWithoutLocation || definition.keyCode || 0,\n      code,\n      text: definition.text || '',\n      location: definition.location || 0,\n    };\n    if (definition.key.length === 1)\n      description.text = description.key;\n\n    // Generate shifted definition.\n    let shiftedDescription: KeyDescription | undefined;\n    if (definition.shiftKey) {\n      assert(definition.shiftKey.length === 1);\n      shiftedDescription = { ...description };\n      shiftedDescription.key = definition.shiftKey;\n      shiftedDescription.text = definition.shiftKey;\n      if (definition.shiftKeyCode)\n        shiftedDescription.keyCode = definition.shiftKeyCode;\n    }\n\n    // Map from code: Digit3 -> { ... description, shifted }\n    result.set(code, { ...description, shifted: shiftedDescription });\n\n    // Map from aliases: Shift -> non-shiftable definition\n    if (aliases.has(code)) {\n      for (const alias of aliases.get(code)!)\n        result.set(alias, description);\n    }\n\n    // Do not use numpad when converting keys to codes.\n    if (definition.location)\n      continue;\n\n    // Map from key, no shifted\n    if (description.key.length === 1)\n      result.set(description.key, description);\n\n    // Map from shiftKey, no shifted\n    if (shiftedDescription)\n      result.set(shiftedDescription.key, { ...shiftedDescription, shifted: undefined });\n  }\n  return result;\n}\n\nexport interface RawTouchscreen {\n  tap(x: number, y: number, modifiers: Set<types.KeyboardModifier>): Promise<void>;\n}\n\nexport class Touchscreen {\n  private _raw: RawTouchscreen;\n  private _page: Page;\n\n  constructor(raw: RawTouchscreen, page: Page) {\n    this._raw = raw;\n    this._page = page;\n  }\n\n  async tap(x: number, y: number, metadata?: CallMetadata) {\n    if (metadata)\n      metadata.point = { x, y };\n    if (!this._page.browserContext._options.hasTouch)\n      throw new Error('hasTouch must be enabled on the browser context before using the touchscreen.');\n    await this._raw.tap(x, y, this._page.keyboard._modifiers());\n  }\n}\n","/**\n * Copyright 2019 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { helper } from './helper';\nimport { assert } from '../utils';\nimport { MultiMap } from '../utils/isomorphic/multimap';\n\nimport type * as dom from './dom';\nimport type { Frame } from './frames';\nimport type { Page } from './page';\nimport type { Progress } from './progress';\nimport type * as types from './types';\nimport type { Rect } from '../utils/isomorphic/types';\nimport type { ParsedSelector } from '../utils/isomorphic/selectorParser';\n\n\ndeclare global {\n  interface Window {\n    __pwCleanupScreenshot?: () => void;\n  }\n}\n\nexport type ScreenshotOptions = {\n  type?: 'png' | 'jpeg';\n  quality?: number;\n  omitBackground?: boolean;\n  animations?: 'disabled' | 'allow';\n  mask?: { frame: Frame, selector: string}[];\n  maskColor?: string;\n  fullPage?: boolean;\n  clip?: Rect;\n  scale?: 'css' | 'device';\n  caret?: 'hide' | 'initial';\n  style?: string;\n};\n\nfunction inPagePrepareForScreenshots(screenshotStyle: string, hideCaret: boolean, disableAnimations: boolean, syncAnimations: boolean) {\n  // In WebKit, sync the animations.\n  if (syncAnimations) {\n    const style = document.createElement('style');\n    style.textContent = 'body {}';\n    document.head.appendChild(style);\n    document.documentElement.getBoundingClientRect();\n    style.remove();\n  }\n\n  if (!screenshotStyle && !hideCaret && !disableAnimations)\n    return;\n\n  const collectRoots = (root: Document | ShadowRoot, roots: (Document|ShadowRoot)[] = []): (Document|ShadowRoot)[] => {\n    roots.push(root);\n    const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\n    do {\n      const node = walker.currentNode;\n      const shadowRoot = node instanceof Element ? node.shadowRoot : null;\n      if (shadowRoot)\n        collectRoots(shadowRoot, roots);\n    } while (walker.nextNode());\n    return roots;\n  };\n\n  const roots = collectRoots(document);\n  const cleanupCallbacks: (() => void)[] = [];\n\n  if (screenshotStyle) {\n    for (const root of roots) {\n      const styleTag = document.createElement('style');\n      styleTag.textContent = screenshotStyle;\n      if (root === document)\n        document.documentElement.append(styleTag);\n      else\n        root.append(styleTag);\n\n      cleanupCallbacks.push(() => {\n        styleTag.remove();\n      });\n    }\n  }\n\n  if (hideCaret) {\n    const elements = new Map<HTMLElement, { value: string, priority: string }>();\n    for (const root of roots) {\n      root.querySelectorAll('input,textarea,[contenteditable]').forEach(element => {\n        elements.set(element as HTMLElement, {\n          value: (element as HTMLElement).style.getPropertyValue('caret-color'),\n          priority: (element as HTMLElement).style.getPropertyPriority('caret-color')\n        });\n        (element as HTMLElement).style.setProperty('caret-color', 'transparent', 'important');\n      });\n    }\n    cleanupCallbacks.push(() => {\n      for (const [element, value] of elements)\n        element.style.setProperty('caret-color', value.value, value.priority);\n    });\n  }\n\n  if (disableAnimations) {\n    const infiniteAnimationsToResume: Set<Animation> = new Set();\n    const handleAnimations = (root: Document|ShadowRoot): void => {\n      for (const animation of root.getAnimations()) {\n        if (!animation.effect || animation.playbackRate === 0 || infiniteAnimationsToResume.has(animation))\n          continue;\n        const endTime = animation.effect.getComputedTiming().endTime;\n        if (Number.isFinite(endTime)) {\n          try {\n            animation.finish();\n          } catch (e) {\n            // animation.finish() should not throw for\n            // finite animations, but we'd like to be on the\n            // safe side.\n          }\n        } else {\n          try {\n            animation.cancel();\n            infiniteAnimationsToResume.add(animation);\n          } catch (e) {\n            // animation.cancel() should not throw for\n            // infinite animations, but we'd like to be on the\n            // safe side.\n          }\n        }\n      }\n    };\n    for (const root of roots) {\n      const handleRootAnimations: (() => void) = handleAnimations.bind(null, root);\n      handleRootAnimations();\n      root.addEventListener('transitionrun', handleRootAnimations);\n      root.addEventListener('animationstart', handleRootAnimations);\n      cleanupCallbacks.push(() => {\n        root.removeEventListener('transitionrun', handleRootAnimations);\n        root.removeEventListener('animationstart', handleRootAnimations);\n      });\n    }\n    cleanupCallbacks.push(() => {\n      for (const animation of infiniteAnimationsToResume) {\n        try {\n          animation.play();\n        } catch (e) {\n          // animation.play() should never throw, but\n          // we'd like to be on the safe side.\n        }\n      }\n    });\n  }\n\n  window.__pwCleanupScreenshot = () => {\n    for (const cleanupCallback of cleanupCallbacks)\n      cleanupCallback();\n    delete window.__pwCleanupScreenshot;\n  };\n}\n\nexport class Screenshotter {\n  private _queue = new TaskQueue();\n  private _page: Page;\n\n  constructor(page: Page) {\n    this._page = page;\n    this._queue = new TaskQueue();\n  }\n\n  private async _originalViewportSize(progress: Progress): Promise<types.Size> {\n    let viewportSize = this._page.emulatedSize()?.viewport;\n    if (!viewportSize)\n      viewportSize = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({ width: window.innerWidth, height: window.innerHeight }));\n    return viewportSize;\n  }\n\n  private async _fullPageSize(progress: Progress): Promise<types.Size> {\n    const fullPageSize = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => {\n      if (!document.body || !document.documentElement)\n        return null;\n      return {\n        width: Math.max(\n            document.body.scrollWidth, document.documentElement.scrollWidth,\n            document.body.offsetWidth, document.documentElement.offsetWidth,\n            document.body.clientWidth, document.documentElement.clientWidth\n        ),\n        height: Math.max(\n            document.body.scrollHeight, document.documentElement.scrollHeight,\n            document.body.offsetHeight, document.documentElement.offsetHeight,\n            document.body.clientHeight, document.documentElement.clientHeight\n        ),\n      };\n    });\n    return fullPageSize!;\n  }\n\n  async screenshotPage(progress: Progress, options: ScreenshotOptions): Promise<Buffer> {\n    const format = validateScreenshotOptions(options);\n    return this._queue.postTask(async () => {\n      progress.log('taking page screenshot');\n      const viewportSize = await this._originalViewportSize(progress);\n      await this._preparePageForScreenshot(progress, this._page.mainFrame(), options.style, options.caret !== 'initial', options.animations === 'disabled');\n      progress.throwIfAborted(); // Avoid restoring after failure - should be done by cleanup.\n\n      if (options.fullPage) {\n        const fullPageSize = await this._fullPageSize(progress);\n        let documentRect = { x: 0, y: 0, width: fullPageSize.width, height: fullPageSize.height };\n        const fitsViewport = fullPageSize.width <= viewportSize.width && fullPageSize.height <= viewportSize.height;\n        if (options.clip)\n          documentRect = trimClipToSize(options.clip, documentRect);\n        const buffer = await this._screenshot(progress, format, documentRect, undefined, fitsViewport, options);\n        progress.throwIfAborted(); // Avoid restoring after failure - should be done by cleanup.\n        await this._restorePageAfterScreenshot();\n        return buffer;\n      }\n\n      const viewportRect = options.clip ? trimClipToSize(options.clip, viewportSize) : { x: 0, y: 0, ...viewportSize };\n      const buffer = await this._screenshot(progress, format, undefined, viewportRect, true, options);\n      progress.throwIfAborted(); // Avoid restoring after failure - should be done by cleanup.\n      await this._restorePageAfterScreenshot();\n      return buffer;\n    });\n  }\n\n  async screenshotElement(progress: Progress, handle: dom.ElementHandle, options: ScreenshotOptions): Promise<Buffer> {\n    const format = validateScreenshotOptions(options);\n    return this._queue.postTask(async () => {\n      progress.log('taking element screenshot');\n      const viewportSize = await this._originalViewportSize(progress);\n\n      await this._preparePageForScreenshot(progress, handle._frame, options.style, options.caret !== 'initial', options.animations === 'disabled');\n      progress.throwIfAborted(); // Do not do extra work.\n\n      await handle._waitAndScrollIntoViewIfNeeded(progress, true /* waitForVisible */);\n\n      progress.throwIfAborted(); // Do not do extra work.\n      const boundingBox = await handle.boundingBox();\n      assert(boundingBox, 'Node is either not visible or not an HTMLElement');\n      assert(boundingBox.width !== 0, 'Node has 0 width.');\n      assert(boundingBox.height !== 0, 'Node has 0 height.');\n\n      const fitsViewport = boundingBox.width <= viewportSize.width && boundingBox.height <= viewportSize.height;\n      progress.throwIfAborted(); // Avoid extra work.\n      const scrollOffset = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({ x: window.scrollX, y: window.scrollY }));\n      const documentRect = { ...boundingBox };\n      documentRect.x += scrollOffset.x;\n      documentRect.y += scrollOffset.y;\n      const buffer = await this._screenshot(progress, format, helper.enclosingIntRect(documentRect), undefined, fitsViewport, options);\n      progress.throwIfAborted(); // Avoid restoring after failure - should be done by cleanup.\n      await this._restorePageAfterScreenshot();\n      return buffer;\n    });\n  }\n\n  async _preparePageForScreenshot(progress: Progress, frame: Frame, screenshotStyle: string | undefined, hideCaret: boolean, disableAnimations: boolean) {\n    if (disableAnimations)\n      progress.log('  disabled all CSS animations');\n    const syncAnimations = this._page.delegate.shouldToggleStyleSheetToSyncAnimations();\n    await this._page.safeNonStallingEvaluateInAllFrames('(' + inPagePrepareForScreenshots.toString() + `)(${JSON.stringify(screenshotStyle)}, ${hideCaret}, ${disableAnimations}, ${syncAnimations})`, 'utility');\n    if (!process.env.PW_TEST_SCREENSHOT_NO_FONTS_READY) {\n      progress.log('waiting for fonts to load...');\n      await frame.nonStallingEvaluateInExistingContext('document.fonts.ready', 'utility').catch(() => {});\n      progress.log('fonts loaded');\n    }\n    progress.cleanupWhenAborted(() => this._restorePageAfterScreenshot());\n  }\n\n  async _restorePageAfterScreenshot() {\n    await this._page.safeNonStallingEvaluateInAllFrames('window.__pwCleanupScreenshot && window.__pwCleanupScreenshot()', 'utility');\n  }\n\n  async _maskElements(progress: Progress, options: ScreenshotOptions): Promise<() => Promise<void>> {\n    const framesToParsedSelectors: MultiMap<Frame, ParsedSelector> = new MultiMap();\n\n    const cleanup = async () => {\n      await Promise.all([...framesToParsedSelectors.keys()].map(async frame => {\n        await frame.hideHighlight();\n      }));\n    };\n\n    if (!options.mask || !options.mask.length)\n      return cleanup;\n\n    await Promise.all((options.mask || []).map(async ({ frame, selector }) => {\n      const pair = await frame.selectors.resolveFrameForSelector(selector);\n      if (pair)\n        framesToParsedSelectors.set(pair.frame, pair.info.parsed);\n    }));\n    progress.throwIfAborted(); // Avoid extra work.\n\n    await Promise.all([...framesToParsedSelectors.keys()].map(async frame => {\n      await frame.maskSelectors(framesToParsedSelectors.get(frame), options.maskColor || '#F0F');\n    }));\n    progress.cleanupWhenAborted(cleanup);\n    return cleanup;\n  }\n\n  private async _screenshot(progress: Progress, format: 'png' | 'jpeg', documentRect: types.Rect | undefined, viewportRect: types.Rect | undefined, fitsViewport: boolean, options: ScreenshotOptions): Promise<Buffer> {\n    if ((options as any).__testHookBeforeScreenshot)\n      await (options as any).__testHookBeforeScreenshot();\n    progress.throwIfAborted(); // Screenshotting is expensive - avoid extra work.\n    const shouldSetDefaultBackground = options.omitBackground && format === 'png';\n    if (shouldSetDefaultBackground) {\n      await this._page.delegate.setBackgroundColor({ r: 0, g: 0, b: 0, a: 0 });\n      progress.cleanupWhenAborted(() => this._page.delegate.setBackgroundColor());\n    }\n    progress.throwIfAborted(); // Avoid extra work.\n\n    const cleanupHighlight = await this._maskElements(progress, options);\n    progress.throwIfAborted(); // Avoid extra work.\n\n    const quality = format === 'jpeg' ? options.quality ?? 80 : undefined;\n    const buffer = await this._page.delegate.takeScreenshot(progress, format, documentRect, viewportRect, quality, fitsViewport, options.scale || 'device');\n    progress.throwIfAborted(); // Avoid restoring after failure - should be done by cleanup.\n\n    await cleanupHighlight();\n    progress.throwIfAborted(); // Avoid restoring after failure - should be done by cleanup.\n\n    if (shouldSetDefaultBackground)\n      await this._page.delegate.setBackgroundColor();\n    progress.throwIfAborted(); // Avoid side effects.\n    if ((options as any).__testHookAfterScreenshot)\n      await (options as any).__testHookAfterScreenshot();\n    return buffer;\n  }\n}\n\nclass TaskQueue {\n  private _chain: Promise<any>;\n\n  constructor() {\n    this._chain = Promise.resolve();\n  }\n\n  postTask(task: () => any): Promise<any> {\n    const result = this._chain.then(task);\n    this._chain = result.catch(() => {});\n    return result;\n  }\n}\n\nfunction trimClipToSize(clip: types.Rect, size: types.Size): types.Rect {\n  const p1 = {\n    x: Math.max(0, Math.min(clip.x, size.width)),\n    y: Math.max(0, Math.min(clip.y, size.height))\n  };\n  const p2 = {\n    x: Math.max(0, Math.min(clip.x + clip.width, size.width)),\n    y: Math.max(0, Math.min(clip.y + clip.height, size.height))\n  };\n  const result = { x: p1.x, y: p1.y, width: p2.x - p1.x, height: p2.y - p1.y };\n  assert(result.width && result.height, 'Clipped area is either empty or outside the resulting image');\n  return result;\n}\n\nexport function validateScreenshotOptions(options: ScreenshotOptions): 'png' | 'jpeg' {\n  let format: 'png' | 'jpeg' | null = null;\n  // options.type takes precedence over inferring the type from options.path\n  // because it may be a 0-length file with no extension created beforehand (i.e. as a temp file).\n  if (options.type) {\n    assert(options.type === 'png' || options.type === 'jpeg', 'Unknown options.type value: ' + options.type);\n    format = options.type;\n  }\n\n  if (!format)\n    format = 'png';\n\n  if (options.quality !== undefined) {\n    assert(format === 'jpeg', 'options.quality is unsupported for the ' + format + ' screenshots');\n    assert(typeof options.quality === 'number', 'Expected options.quality to be a number but found ' + (typeof options.quality));\n    assert(Number.isInteger(options.quality), 'Expected options.quality to be an integer');\n    assert(options.quality >= 0 && options.quality <= 100, 'Expected options.quality to be between 0 and 100 (inclusive), got ' + options.quality);\n  }\n  if (options.clip) {\n    assert(typeof options.clip.x === 'number', 'Expected options.clip.x to be a number but found ' + (typeof options.clip.x));\n    assert(typeof options.clip.y === 'number', 'Expected options.clip.y to be a number but found ' + (typeof options.clip.y));\n    assert(typeof options.clip.width === 'number', 'Expected options.clip.width to be a number but found ' + (typeof options.clip.width));\n    assert(typeof options.clip.height === 'number', 'Expected options.clip.height to be a number but found ' + (typeof options.clip.height));\n    assert(options.clip.width !== 0, 'Expected options.clip.width not to be 0.');\n    assert(options.clip.height !== 0, 'Expected options.clip.height not to be 0.');\n  }\n  return format;\n}\n","export const source = \"\\nvar __commonJS = obj => {\\n  let required = false;\\n  let result;\\n  return function __require() {\\n    if (!required) {\\n      required = true;\\n      let fn;\\n      for (const name in obj) { fn = obj[name]; break; }\\n      const module = { exports: {} };\\n      fn(module.exports, module);\\n      result = module.exports;\\n    }\\n    return result;\\n  }\\n};\\nvar __export = (target, all) => {for (var name in all) target[name] = all[name];};\\nvar __toESM = mod => ({ ...mod, 'default': mod });\\nvar __toCommonJS = mod => ({ ...mod, __esModule: true });\\n\\n\\n// packages/injected/src/bindingsController.ts\\nvar bindingsController_exports = {};\\n__export(bindingsController_exports, {\\n  BindingsController: () => BindingsController\\n});\\nmodule.exports = __toCommonJS(bindingsController_exports);\\n\\n// packages/playwright-core/src/utils/isomorphic/utilityScriptSerializers.ts\\nfunction isRegExp(obj) {\\n  try {\\n    return obj instanceof RegExp || Object.prototype.toString.call(obj) === \\\"[object RegExp]\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isDate(obj) {\\n  try {\\n    return obj instanceof Date || Object.prototype.toString.call(obj) === \\\"[object Date]\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isURL(obj) {\\n  try {\\n    return obj instanceof URL || Object.prototype.toString.call(obj) === \\\"[object URL]\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isError(obj) {\\n  var _a;\\n  try {\\n    return obj instanceof Error || obj && ((_a = Object.getPrototypeOf(obj)) == null ? void 0 : _a.name) === \\\"Error\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isTypedArray(obj, constructor) {\\n  try {\\n    return obj instanceof constructor || Object.prototype.toString.call(obj) === `[object ${constructor.name}]`;\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nvar typedArrayConstructors = {\\n  i8: Int8Array,\\n  ui8: Uint8Array,\\n  ui8c: Uint8ClampedArray,\\n  i16: Int16Array,\\n  ui16: Uint16Array,\\n  i32: Int32Array,\\n  ui32: Uint32Array,\\n  // TODO: add Float16Array once it's in baseline\\n  f32: Float32Array,\\n  f64: Float64Array,\\n  bi64: BigInt64Array,\\n  bui64: BigUint64Array\\n};\\nfunction typedArrayToBase64(array) {\\n  if (\\\"toBase64\\\" in array)\\n    return array.toBase64();\\n  const binary = Array.from(new Uint8Array(array.buffer, array.byteOffset, array.byteLength)).map((b) => String.fromCharCode(b)).join(\\\"\\\");\\n  return btoa(binary);\\n}\\nfunction serializeAsCallArgument(value, handleSerializer) {\\n  return serialize(value, handleSerializer, { visited: /* @__PURE__ */ new Map(), lastId: 0 });\\n}\\nfunction serialize(value, handleSerializer, visitorInfo) {\\n  if (value && typeof value === \\\"object\\\") {\\n    if (typeof globalThis.Window === \\\"function\\\" && value instanceof globalThis.Window)\\n      return \\\"ref: <Window>\\\";\\n    if (typeof globalThis.Document === \\\"function\\\" && value instanceof globalThis.Document)\\n      return \\\"ref: <Document>\\\";\\n    if (typeof globalThis.Node === \\\"function\\\" && value instanceof globalThis.Node)\\n      return \\\"ref: <Node>\\\";\\n  }\\n  return innerSerialize(value, handleSerializer, visitorInfo);\\n}\\nfunction innerSerialize(value, handleSerializer, visitorInfo) {\\n  var _a;\\n  const result = handleSerializer(value);\\n  if (\\\"fallThrough\\\" in result)\\n    value = result.fallThrough;\\n  else\\n    return result;\\n  if (typeof value === \\\"symbol\\\")\\n    return { v: \\\"undefined\\\" };\\n  if (Object.is(value, void 0))\\n    return { v: \\\"undefined\\\" };\\n  if (Object.is(value, null))\\n    return { v: \\\"null\\\" };\\n  if (Object.is(value, NaN))\\n    return { v: \\\"NaN\\\" };\\n  if (Object.is(value, Infinity))\\n    return { v: \\\"Infinity\\\" };\\n  if (Object.is(value, -Infinity))\\n    return { v: \\\"-Infinity\\\" };\\n  if (Object.is(value, -0))\\n    return { v: \\\"-0\\\" };\\n  if (typeof value === \\\"boolean\\\")\\n    return value;\\n  if (typeof value === \\\"number\\\")\\n    return value;\\n  if (typeof value === \\\"string\\\")\\n    return value;\\n  if (typeof value === \\\"bigint\\\")\\n    return { bi: value.toString() };\\n  if (isError(value)) {\\n    let stack;\\n    if ((_a = value.stack) == null ? void 0 : _a.startsWith(value.name + \\\": \\\" + value.message)) {\\n      stack = value.stack;\\n    } else {\\n      stack = `${value.name}: ${value.message}\\n${value.stack}`;\\n    }\\n    return { e: { n: value.name, m: value.message, s: stack } };\\n  }\\n  if (isDate(value))\\n    return { d: value.toJSON() };\\n  if (isURL(value))\\n    return { u: value.toJSON() };\\n  if (isRegExp(value))\\n    return { r: { p: value.source, f: value.flags } };\\n  for (const [k, ctor] of Object.entries(typedArrayConstructors)) {\\n    if (isTypedArray(value, ctor))\\n      return { ta: { b: typedArrayToBase64(value), k } };\\n  }\\n  const id = visitorInfo.visited.get(value);\\n  if (id)\\n    return { ref: id };\\n  if (Array.isArray(value)) {\\n    const a = [];\\n    const id2 = ++visitorInfo.lastId;\\n    visitorInfo.visited.set(value, id2);\\n    for (let i = 0; i < value.length; ++i)\\n      a.push(serialize(value[i], handleSerializer, visitorInfo));\\n    return { a, id: id2 };\\n  }\\n  if (typeof value === \\\"object\\\") {\\n    const o = [];\\n    const id2 = ++visitorInfo.lastId;\\n    visitorInfo.visited.set(value, id2);\\n    for (const name of Object.keys(value)) {\\n      let item;\\n      try {\\n        item = value[name];\\n      } catch (e) {\\n        continue;\\n      }\\n      if (name === \\\"toJSON\\\" && typeof item === \\\"function\\\")\\n        o.push({ k: name, v: { o: [], id: 0 } });\\n      else\\n        o.push({ k: name, v: serialize(item, handleSerializer, visitorInfo) });\\n    }\\n    let jsonWrapper;\\n    try {\\n      if (o.length === 0 && value.toJSON && typeof value.toJSON === \\\"function\\\")\\n        jsonWrapper = { value: value.toJSON() };\\n    } catch (e) {\\n    }\\n    if (jsonWrapper)\\n      return innerSerialize(jsonWrapper.value, handleSerializer, visitorInfo);\\n    return { o, id: id2 };\\n  }\\n}\\n\\n// packages/injected/src/bindingsController.ts\\nvar BindingsController = class {\\n  // eslint-disable-next-line no-restricted-globals\\n  constructor(global, globalBindingName) {\\n    this._bindings = /* @__PURE__ */ new Map();\\n    this._global = global;\\n    this._globalBindingName = globalBindingName;\\n  }\\n  addBinding(bindingName, needsHandle) {\\n    const data = {\\n      callbacks: /* @__PURE__ */ new Map(),\\n      lastSeq: 0,\\n      handles: /* @__PURE__ */ new Map(),\\n      removed: false\\n    };\\n    this._bindings.set(bindingName, data);\\n    this._global[bindingName] = (...args) => {\\n      if (data.removed)\\n        throw new Error(`binding \\\"${bindingName}\\\" has been removed`);\\n      if (needsHandle && args.slice(1).some((arg) => arg !== void 0))\\n        throw new Error(`exposeBindingHandle supports a single argument, ${args.length} received`);\\n      const seq = ++data.lastSeq;\\n      const promise = new Promise((resolve, reject) => data.callbacks.set(seq, { resolve, reject }));\\n      let payload;\\n      if (needsHandle) {\\n        data.handles.set(seq, args[0]);\\n        payload = { name: bindingName, seq };\\n      } else {\\n        const serializedArgs = [];\\n        for (let i = 0; i < args.length; i++) {\\n          serializedArgs[i] = serializeAsCallArgument(args[i], (v) => {\\n            return { fallThrough: v };\\n          });\\n        }\\n        payload = { name: bindingName, seq, serializedArgs };\\n      }\\n      this._global[this._globalBindingName](JSON.stringify(payload));\\n      return promise;\\n    };\\n  }\\n  removeBinding(bindingName) {\\n    const data = this._bindings.get(bindingName);\\n    if (data)\\n      data.removed = true;\\n    this._bindings.delete(bindingName);\\n    delete this._global[bindingName];\\n  }\\n  takeBindingHandle(arg) {\\n    const handles = this._bindings.get(arg.name).handles;\\n    const handle = handles.get(arg.seq);\\n    handles.delete(arg.seq);\\n    return handle;\\n  }\\n  deliverBindingResult(arg) {\\n    const callbacks = this._bindings.get(arg.name).callbacks;\\n    if (\\\"error\\\" in arg)\\n      callbacks.get(arg.seq).reject(arg.error);\\n    else\\n      callbacks.get(arg.seq).resolve(arg.result);\\n    callbacks.delete(arg.seq);\\n  }\\n};\\n\";","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as accessibility from './accessibility';\nimport { BrowserContext } from './browserContext';\nimport { ConsoleMessage } from './console';\nimport { TargetClosedError, TimeoutError } from './errors';\nimport { FileChooser } from './fileChooser';\nimport * as frames from './frames';\nimport { helper } from './helper';\nimport * as input from './input';\nimport { SdkObject } from './instrumentation';\nimport * as js from './javascript';\nimport { ProgressController } from './progress';\nimport { Screenshotter, validateScreenshotOptions } from './screenshotter';\nimport { LongStandingScope, assert, renderTitleForCall, trimStringWithEllipsis } from '../utils';\nimport { asLocator } from '../utils';\nimport { getComparator } from './utils/comparators';\nimport { debugLogger } from './utils/debugLogger';\nimport { isInvalidSelectorError } from '../utils/isomorphic/selectorParser';\nimport { ManualPromise } from '../utils/isomorphic/manualPromise';\nimport { parseEvaluationResultValue } from '../utils/isomorphic/utilityScriptSerializers';\nimport { compressCallLog } from './callLog';\nimport * as rawBindingsControllerSource from '../generated/bindingsControllerSource';\n\nimport type { Artifact } from './artifact';\nimport type * as dom from './dom';\nimport type { CallMetadata } from './instrumentation';\nimport type * as network from './network';\nimport type { Progress } from './progress';\nimport type { ScreenshotOptions } from './screenshotter';\nimport type * as types from './types';\nimport type { ImageComparatorOptions } from './utils/comparators';\nimport type * as channels from '@protocol/channels';\nimport type { BindingPayload } from '@injected/bindingsController';\n\nexport interface PageDelegate {\n  readonly rawMouse: input.RawMouse;\n  readonly rawKeyboard: input.RawKeyboard;\n  readonly rawTouchscreen: input.RawTouchscreen;\n\n  reload(): Promise<void>;\n  goBack(): Promise<boolean>;\n  goForward(): Promise<boolean>;\n  requestGC(): Promise<void>;\n  addInitScript(initScript: InitScript): Promise<void>;\n  removeInitScripts(initScripts: InitScript[]): Promise<void>;\n  closePage(runBeforeUnload: boolean): Promise<void>;\n\n  navigateFrame(frame: frames.Frame, url: string, referrer: string | undefined): Promise<frames.GotoResult>;\n\n  updateExtraHTTPHeaders(): Promise<void>;\n  updateEmulatedViewportSize(preserveWindowBoundaries?: boolean): Promise<void>;\n  updateEmulateMedia(): Promise<void>;\n  updateRequestInterception(): Promise<void>;\n  updateFileChooserInterception(): Promise<void>;\n  bringToFront(): Promise<void>;\n\n  setBackgroundColor(color?: { r: number; g: number; b: number; a: number; }): Promise<void>;\n  takeScreenshot(progress: Progress, format: string, documentRect: types.Rect | undefined, viewportRect: types.Rect | undefined, quality: number | undefined, fitsViewport: boolean, scale: 'css' | 'device'): Promise<Buffer>;\n\n  adoptElementHandle<T extends Node>(handle: dom.ElementHandle<T>, to: dom.FrameExecutionContext): Promise<dom.ElementHandle<T>>;\n  getContentFrame(handle: dom.ElementHandle): Promise<frames.Frame | null>;  // Only called for frame owner elements.\n  getOwnerFrame(handle: dom.ElementHandle): Promise<string | null>; // Returns frameId.\n  getContentQuads(handle: dom.ElementHandle): Promise<types.Quad[] | null | 'error:notconnected'>;\n  setInputFilePaths(handle: dom.ElementHandle<HTMLInputElement>, files: string[]): Promise<void>;\n  getBoundingBox(handle: dom.ElementHandle): Promise<types.Rect | null>;\n  getFrameElement(frame: frames.Frame): Promise<dom.ElementHandle>;\n  scrollRectIntoViewIfNeeded(handle: dom.ElementHandle, rect?: types.Rect): Promise<'error:notvisible' | 'error:notconnected' | 'done'>;\n  setScreencastOptions(options: { width: number, height: number, quality: number } | null): Promise<void>;\n\n  getAccessibilityTree(needle?: dom.ElementHandle): Promise<{tree: accessibility.AXNode, needle: accessibility.AXNode | null}>;\n  pdf?: (options: channels.PagePdfParams) => Promise<Buffer>;\n  coverage?: () => any;\n\n  // Work around WebKit's raf issues on Windows.\n  rafCountForStablePosition(): number;\n  // Work around Chrome's non-associated input and protocol.\n  inputActionEpilogue(): Promise<void>;\n  // Work around for asynchronously dispatched CSP errors in Firefox.\n  readonly cspErrorsAsynchronousForInlineScripts?: boolean;\n  // Work around for mouse position in Firefox.\n  resetForReuse(): Promise<void>;\n  // WebKit hack.\n  shouldToggleStyleSheetToSyncAnimations(): boolean;\n}\n\ntype EmulatedSize = { screen: types.Size, viewport: types.Size };\n\ntype EmulatedMedia = {\n  media: types.MediaType;\n  colorScheme: types.ColorScheme;\n  reducedMotion: types.ReducedMotion;\n  forcedColors: types.ForcedColors;\n  contrast: types.Contrast;\n};\n\ntype ExpectScreenshotOptions = ImageComparatorOptions & ScreenshotOptions & {\n  timeout: number,\n  expected?: Buffer,\n  isNot?: boolean,\n  locator?: {\n    frame: frames.Frame,\n    selector: string,\n  },\n};\n\nexport class Page extends SdkObject {\n  static Events = {\n    Close: 'close',\n    Crash: 'crash',\n    Download: 'download',\n    EmulatedSizeChanged: 'emulatedsizechanged',\n    FileChooser: 'filechooser',\n    FrameAttached: 'frameattached',\n    FrameDetached: 'framedetached',\n    InternalFrameNavigatedToNewDocument: 'internalframenavigatedtonewdocument',\n    LocatorHandlerTriggered: 'locatorhandlertriggered',\n    ScreencastFrame: 'screencastframe',\n    Video: 'video',\n    WebSocket: 'websocket',\n    Worker: 'worker',\n  };\n\n  private _closedState: 'open' | 'closing' | 'closed' = 'open';\n  private _closedPromise = new ManualPromise<void>();\n  private _initialized: Page | Error | undefined;\n  private _initializedPromise = new ManualPromise<Page | Error>();\n  private _eventsToEmitAfterInitialized: { event: string | symbol, args: any[] }[] = [];\n  private _crashed = false;\n  readonly openScope = new LongStandingScope();\n  readonly browserContext: BrowserContext;\n  readonly keyboard: input.Keyboard;\n  readonly mouse: input.Mouse;\n  readonly touchscreen: input.Touchscreen;\n  readonly delegate: PageDelegate;\n  private _emulatedSize: EmulatedSize | undefined;\n  private _extraHTTPHeaders: types.HeadersArray | undefined;\n  private _emulatedMedia: Partial<EmulatedMedia> = {};\n  private _fileChooserInterceptedBy = new Set<any>();\n  private readonly _pageBindings = new Map<string, PageBinding>();\n  initScripts: InitScript[] = [];\n  readonly screenshotter: Screenshotter;\n  readonly frameManager: frames.FrameManager;\n  readonly accessibility: accessibility.Accessibility;\n  private _workers = new Map<string, Worker>();\n  readonly pdf: ((options: channels.PagePdfParams) => Promise<Buffer>) | undefined;\n  readonly coverage: any;\n  readonly requestInterceptors: network.RouteHandler[] = [];\n  video: Artifact | null = null;\n  private _opener: Page | undefined;\n  private _isServerSideOnly = false;\n  private _locatorHandlers = new Map<number, { selector: string, noWaitAfter?: boolean, resolved?: ManualPromise<void> }>();\n  private _lastLocatorHandlerUid = 0;\n  private _locatorHandlerRunningCounter = 0;\n\n  // Aiming at 25 fps by default - each frame is 40ms, but we give some slack with 35ms.\n  // When throttling for tracing, 200ms between frames, except for 10 frames around the action.\n  private _frameThrottler = new FrameThrottler(10, 35, 200);\n  closeReason: string | undefined;\n  lastSnapshotFrameIds: string[] = [];\n\n  constructor(delegate: PageDelegate, browserContext: BrowserContext) {\n    super(browserContext, 'page');\n    this.attribution.page = this;\n    this.delegate = delegate;\n    this.browserContext = browserContext;\n    this.accessibility = new accessibility.Accessibility(delegate.getAccessibilityTree.bind(delegate));\n    this.keyboard = new input.Keyboard(delegate.rawKeyboard);\n    this.mouse = new input.Mouse(delegate.rawMouse, this);\n    this.touchscreen = new input.Touchscreen(delegate.rawTouchscreen, this);\n    this.screenshotter = new Screenshotter(this);\n    this.frameManager = new frames.FrameManager(this);\n    if (delegate.pdf)\n      this.pdf = delegate.pdf.bind(delegate);\n    this.coverage = delegate.coverage ? delegate.coverage() : null;\n  }\n\n  async reportAsNew(opener: Page | undefined, error: Error | undefined = undefined, contextEvent: string = BrowserContext.Events.Page) {\n    if (opener) {\n      const openerPageOrError = await opener.waitForInitializedOrError();\n      if (openerPageOrError instanceof Page && !openerPageOrError.isClosed())\n        this._opener = openerPageOrError;\n    }\n    this._markInitialized(error, contextEvent);\n  }\n\n  private _markInitialized(error: Error | undefined = undefined, contextEvent: string = BrowserContext.Events.Page) {\n    if (error) {\n      // Initialization error could have happened because of\n      // context/browser closure. Just ignore the page.\n      if (this.browserContext.isClosingOrClosed())\n        return;\n      this.frameManager.createDummyMainFrameIfNeeded();\n    }\n    this._initialized = error || this;\n    this.emitOnContext(contextEvent, this);\n\n    for (const { event, args } of this._eventsToEmitAfterInitialized)\n      this.browserContext.emit(event, ...args);\n    this._eventsToEmitAfterInitialized = [];\n\n    // It may happen that page initialization finishes after Close event has already been sent,\n    // in that case we fire another Close event to ensure that each reported Page will have\n    // corresponding Close event after it is reported on the context.\n    if (this.isClosed())\n      this.emit(Page.Events.Close);\n    else\n      this.instrumentation.onPageOpen(this);\n\n    // Note: it is important to resolve _initializedPromise at the end,\n    // so that anyone who awaits waitForInitializedOrError got a ready and reported page.\n    this._initializedPromise.resolve(this._initialized);\n  }\n\n  initializedOrUndefined(): Page | undefined {\n    return this._initialized ? this : undefined;\n  }\n\n  waitForInitializedOrError(): Promise<Page | Error> {\n    return this._initializedPromise;\n  }\n\n  emitOnContext(event: string | symbol, ...args: any[]) {\n    if (this._isServerSideOnly)\n      return;\n    this.browserContext.emit(event, ...args);\n  }\n\n  emitOnContextOnceInitialized(event: string | symbol, ...args: any[]) {\n    if (this._isServerSideOnly)\n      return;\n    // Some events, like console messages, may come before page is ready.\n    // In this case, postpone the event until page is initialized,\n    // and dispatch it to the client later, either on the live Page,\n    // or on the \"errored\" Page.\n    if (this._initialized)\n      this.browserContext.emit(event, ...args);\n    else\n      this._eventsToEmitAfterInitialized.push({ event, args });\n  }\n\n  async resetForReuse(metadata: CallMetadata) {\n    this._locatorHandlers.clear();\n\n    // Re-navigate once init scripts are gone.\n    // TODO: we should have a timeout for `resetForReuse`.\n    await this.mainFrame().goto(metadata, 'about:blank', { timeout: 0 });\n    this._emulatedSize = undefined;\n    this._emulatedMedia = {};\n    this._extraHTTPHeaders = undefined;\n\n    await Promise.all([\n      this.delegate.updateEmulatedViewportSize(),\n      this.delegate.updateEmulateMedia(),\n    ]);\n\n    await this.delegate.resetForReuse();\n  }\n\n  _didClose() {\n    this.frameManager.dispose();\n    this._frameThrottler.dispose();\n    assert(this._closedState !== 'closed', 'Page closed twice');\n    this._closedState = 'closed';\n    this.emit(Page.Events.Close);\n    this._closedPromise.resolve();\n    this.instrumentation.onPageClose(this);\n    this.openScope.close(new TargetClosedError());\n  }\n\n  _didCrash() {\n    this.frameManager.dispose();\n    this._frameThrottler.dispose();\n    this.emit(Page.Events.Crash);\n    this._crashed = true;\n    this.instrumentation.onPageClose(this);\n    this.openScope.close(new Error('Page crashed'));\n  }\n\n  async _onFileChooserOpened(handle: dom.ElementHandle) {\n    let multiple;\n    try {\n      multiple = await handle.evaluate(element => !!(element as HTMLInputElement).multiple);\n    } catch (e) {\n      // Frame/context may be gone during async processing. Do not throw.\n      return;\n    }\n    if (!this.listenerCount(Page.Events.FileChooser)) {\n      handle.dispose();\n      return;\n    }\n    const fileChooser = new FileChooser(this, handle, multiple);\n    this.emit(Page.Events.FileChooser, fileChooser);\n  }\n\n  opener(): Page | undefined {\n    return this._opener;\n  }\n\n  mainFrame(): frames.Frame {\n    return this.frameManager.mainFrame();\n  }\n\n  frames(): frames.Frame[] {\n    return this.frameManager.frames();\n  }\n\n  async exposeBinding(name: string, needsHandle: boolean, playwrightBinding: frames.FunctionWithSource): Promise<PageBinding> {\n    if (this._pageBindings.has(name))\n      throw new Error(`Function \"${name}\" has been already registered`);\n    if (this.browserContext._pageBindings.has(name))\n      throw new Error(`Function \"${name}\" has been already registered in the browser context`);\n    await this.browserContext.exposePlaywrightBindingIfNeeded();\n    const binding = new PageBinding(name, playwrightBinding, needsHandle);\n    this._pageBindings.set(name, binding);\n    await this.delegate.addInitScript(binding.initScript);\n    await this.safeNonStallingEvaluateInAllFrames(binding.initScript.source, 'main');\n    return binding;\n  }\n\n  async removeExposedBindings(bindings: PageBinding[]) {\n    bindings = bindings.filter(binding => this._pageBindings.get(binding.name) === binding);\n    for (const binding of bindings)\n      this._pageBindings.delete(binding.name);\n    await this.delegate.removeInitScripts(bindings.map(binding => binding.initScript));\n    const cleanup = bindings.map(binding => `{ ${binding.cleanupScript} };\\n`).join('');\n    await this.safeNonStallingEvaluateInAllFrames(cleanup, 'main');\n  }\n\n  setExtraHTTPHeaders(headers: types.HeadersArray) {\n    this._extraHTTPHeaders = headers;\n    return this.delegate.updateExtraHTTPHeaders();\n  }\n\n  extraHTTPHeaders(): types.HeadersArray | undefined {\n    return this._extraHTTPHeaders;\n  }\n\n  async onBindingCalled(payload: string, context: dom.FrameExecutionContext) {\n    if (this._closedState === 'closed')\n      return;\n    await PageBinding.dispatch(this, payload, context);\n  }\n\n  addConsoleMessage(type: string, args: js.JSHandle[], location: types.ConsoleMessageLocation, text?: string) {\n    const message = new ConsoleMessage(this, type, text, args, location);\n    const intercepted = this.frameManager.interceptConsoleMessage(message);\n    if (intercepted) {\n      args.forEach(arg => arg.dispose());\n      return;\n    }\n    this.emitOnContextOnceInitialized(BrowserContext.Events.Console, message);\n  }\n\n  async reload(metadata: CallMetadata, options: types.NavigateOptions): Promise<network.Response | null> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(progress => this.mainFrame().raceNavigationAction(progress, options, async () => {\n      // Note: waitForNavigation may fail before we get response to reload(),\n      // so we should await it immediately.\n      const [response] = await Promise.all([\n        // Reload must be a new document, and should not be confused with a stray pushState.\n        this.mainFrame()._waitForNavigation(progress, true /* requiresNewDocument */, options),\n        this.delegate.reload(),\n      ]);\n      return response;\n    }), options.timeout);\n  }\n\n  async goBack(metadata: CallMetadata, options: types.NavigateOptions): Promise<network.Response | null> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(progress => this.mainFrame().raceNavigationAction(progress, options, async () => {\n      // Note: waitForNavigation may fail before we get response to goBack,\n      // so we should catch it immediately.\n      let error: Error | undefined;\n      const waitPromise = this.mainFrame()._waitForNavigation(progress, false /* requiresNewDocument */, options).catch(e => {\n        error = e;\n        return null;\n      });\n      const result = await this.delegate.goBack();\n      if (!result)\n        return null;\n      const response = await waitPromise;\n      if (error)\n        throw error;\n      return response;\n    }), options.timeout);\n  }\n\n  async goForward(metadata: CallMetadata, options: types.NavigateOptions): Promise<network.Response | null> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(progress => this.mainFrame().raceNavigationAction(progress, options, async () => {\n      // Note: waitForNavigation may fail before we get response to goForward,\n      // so we should catch it immediately.\n      let error: Error | undefined;\n      const waitPromise = this.mainFrame()._waitForNavigation(progress, false /* requiresNewDocument */, options).catch(e => {\n        error = e;\n        return null;\n      });\n      const result = await this.delegate.goForward();\n      if (!result)\n        return null;\n      const response = await waitPromise;\n      if (error)\n        throw error;\n      return response;\n    }), options.timeout);\n  }\n\n  requestGC(): Promise<void> {\n    return this.delegate.requestGC();\n  }\n\n  registerLocatorHandler(selector: string, noWaitAfter: boolean | undefined) {\n    const uid = ++this._lastLocatorHandlerUid;\n    this._locatorHandlers.set(uid, { selector, noWaitAfter });\n    return uid;\n  }\n\n  resolveLocatorHandler(uid: number, remove: boolean | undefined) {\n    const handler = this._locatorHandlers.get(uid);\n    if (remove)\n      this._locatorHandlers.delete(uid);\n    if (handler) {\n      handler.resolved?.resolve();\n      handler.resolved = undefined;\n    }\n  }\n\n  unregisterLocatorHandler(uid: number) {\n    this._locatorHandlers.delete(uid);\n  }\n\n  async performActionPreChecks(progress: Progress) {\n    await this._performWaitForNavigationCheck(progress);\n    progress.throwIfAborted();\n    await this._performLocatorHandlersCheckpoint(progress);\n    progress.throwIfAborted();\n    // Wait once again, just in case a locator handler caused a navigation.\n    await this._performWaitForNavigationCheck(progress);\n  }\n\n  private async _performWaitForNavigationCheck(progress: Progress) {\n    if (process.env.PLAYWRIGHT_SKIP_NAVIGATION_CHECK)\n      return;\n    const mainFrame = this.frameManager.mainFrame();\n    if (!mainFrame || !mainFrame.pendingDocument())\n      return;\n    const url = mainFrame.pendingDocument()?.request?.url();\n    const toUrl = url ? `\" ${trimStringWithEllipsis(url, 200)}\"` : '';\n    progress.log(`  waiting for${toUrl} navigation to finish...`);\n    await helper.waitForEvent(progress, mainFrame, frames.Frame.Events.InternalNavigation, (e: frames.NavigationEvent) => {\n      if (!e.isPublic)\n        return false;\n      if (!e.error)\n        progress.log(`  navigated to \"${trimStringWithEllipsis(mainFrame.url(), 200)}\"`);\n      return true;\n    }).promise;\n  }\n\n  private async _performLocatorHandlersCheckpoint(progress: Progress) {\n    // Do not run locator handlers from inside locator handler callbacks to avoid deadlocks.\n    if (this._locatorHandlerRunningCounter)\n      return;\n    for (const [uid, handler] of this._locatorHandlers) {\n      if (!handler.resolved) {\n        if (await this.mainFrame().isVisibleInternal(handler.selector, { strict: true })) {\n          handler.resolved = new ManualPromise();\n          this.emit(Page.Events.LocatorHandlerTriggered, uid);\n        }\n      }\n      if (handler.resolved) {\n        ++this._locatorHandlerRunningCounter;\n        progress.log(`  found ${asLocator(this.attribution.playwright.options.sdkLanguage, handler.selector)}, intercepting action to run the handler`);\n        const promise = handler.resolved.then(async () => {\n          progress.throwIfAborted();\n          if (!handler.noWaitAfter) {\n            progress.log(`  locator handler has finished, waiting for ${asLocator(this.attribution.playwright.options.sdkLanguage, handler.selector)} to be hidden`);\n            await this.mainFrame().waitForSelectorInternal(progress, handler.selector, false, { state: 'hidden' });\n          } else {\n            progress.log(`  locator handler has finished`);\n          }\n        });\n        await this.openScope.race(promise).finally(() => --this._locatorHandlerRunningCounter);\n        // Avoid side-effects after long-running operation.\n        progress.throwIfAborted();\n        progress.log(`  interception handler has finished, continuing`);\n      }\n    }\n  }\n\n  async emulateMedia(options: Partial<EmulatedMedia>) {\n    if (options.media !== undefined)\n      this._emulatedMedia.media = options.media;\n    if (options.colorScheme !== undefined)\n      this._emulatedMedia.colorScheme = options.colorScheme;\n    if (options.reducedMotion !== undefined)\n      this._emulatedMedia.reducedMotion = options.reducedMotion;\n    if (options.forcedColors !== undefined)\n      this._emulatedMedia.forcedColors = options.forcedColors;\n    if (options.contrast !== undefined)\n      this._emulatedMedia.contrast = options.contrast;\n\n    await this.delegate.updateEmulateMedia();\n  }\n\n  emulatedMedia(): EmulatedMedia {\n    const contextOptions = this.browserContext._options;\n    return {\n      media: this._emulatedMedia.media || 'no-override',\n      colorScheme: this._emulatedMedia.colorScheme !== undefined ? this._emulatedMedia.colorScheme : contextOptions.colorScheme ?? 'light',\n      reducedMotion: this._emulatedMedia.reducedMotion !== undefined ? this._emulatedMedia.reducedMotion : contextOptions.reducedMotion ?? 'no-preference',\n      forcedColors: this._emulatedMedia.forcedColors !== undefined ? this._emulatedMedia.forcedColors : contextOptions.forcedColors ?? 'none',\n      contrast: this._emulatedMedia.contrast !== undefined ? this._emulatedMedia.contrast : contextOptions.contrast ?? 'no-preference',\n    };\n  }\n\n  async setViewportSize(viewportSize: types.Size) {\n    this._setEmulatedSize({ viewport: { ...viewportSize }, screen: { ...viewportSize } });\n    await this.delegate.updateEmulatedViewportSize();\n  }\n\n  setEmulatedSizeFromWindowOpen(emulatedSize: EmulatedSize) {\n    this._setEmulatedSize(emulatedSize);\n  }\n\n  private _setEmulatedSize(emulatedSize: EmulatedSize) {\n    this._emulatedSize = emulatedSize;\n    this.emit(Page.Events.EmulatedSizeChanged);\n  }\n\n  emulatedSize(): EmulatedSize | undefined {\n    if (this._emulatedSize)\n      return this._emulatedSize;\n    const contextOptions = this.browserContext._options;\n    return contextOptions.viewport ? { viewport: contextOptions.viewport, screen: contextOptions.screen || contextOptions.viewport } : undefined;\n  }\n\n  async bringToFront(): Promise<void> {\n    await this.delegate.bringToFront();\n  }\n\n  async addInitScript(source: string, name?: string) {\n    const initScript = new InitScript(source, name);\n    this.initScripts.push(initScript);\n    await this.delegate.addInitScript(initScript);\n    return initScript;\n  }\n\n  async removeInitScripts(initScripts: InitScript[]) {\n    const set = new Set(initScripts);\n    this.initScripts = this.initScripts.filter(script => !set.has(script));\n    await this.delegate.removeInitScripts(initScripts);\n  }\n\n  needsRequestInterception(): boolean {\n    return this.requestInterceptors.length > 0 || this.browserContext.requestInterceptors.length > 0;\n  }\n\n  async addRequestInterceptor(handler: network.RouteHandler, prepend?: 'prepend'): Promise<void> {\n    if (prepend)\n      this.requestInterceptors.unshift(handler);\n    else\n      this.requestInterceptors.push(handler);\n    await this.delegate.updateRequestInterception();\n  }\n\n  async removeRequestInterceptor(handler: network.RouteHandler): Promise<void> {\n    const index = this.requestInterceptors.indexOf(handler);\n    if (index === -1)\n      return;\n    this.requestInterceptors.splice(index, 1);\n    await this.browserContext.notifyRoutesInFlightAboutRemovedHandler(handler);\n    await this.delegate.updateRequestInterception();\n  }\n\n  async expectScreenshot(metadata: CallMetadata, options: ExpectScreenshotOptions): Promise<{ actual?: Buffer, previous?: Buffer, diff?: Buffer, errorMessage?: string, log?: string[] }> {\n    const locator = options.locator;\n    const rafrafScreenshot = locator ? async (progress: Progress, timeout: number) => {\n      return await locator.frame.rafrafTimeoutScreenshotElementWithProgress(progress, locator.selector, timeout, options || {});\n    } : async (progress: Progress, timeout: number) => {\n      await this.performActionPreChecks(progress);\n      await this.mainFrame().rafrafTimeout(timeout);\n      return await this.screenshotter.screenshotPage(progress, options || {});\n    };\n\n    const comparator = getComparator('image/png');\n    const controller = new ProgressController(metadata, this);\n    if (!options.expected && options.isNot)\n      return { errorMessage: '\"not\" matcher requires expected result' };\n    try {\n      const format = validateScreenshotOptions(options || {});\n      if (format !== 'png')\n        throw new Error('Only PNG screenshots are supported');\n    } catch (error) {\n      return { errorMessage: error.message };\n    }\n    let intermediateResult: {\n      actual?: Buffer,\n      previous?: Buffer,\n      errorMessage: string,\n      diff?: Buffer,\n    } | undefined = undefined;\n    const areEqualScreenshots = (actual: Buffer | undefined, expected: Buffer | undefined, previous: Buffer | undefined) => {\n      const comparatorResult = actual && expected ? comparator(actual, expected, options) : undefined;\n      if (comparatorResult !== undefined && !!comparatorResult === !!options.isNot)\n        return true;\n      if (comparatorResult)\n        intermediateResult = { errorMessage: comparatorResult.errorMessage, diff: comparatorResult.diff, actual, previous };\n      return false;\n    };\n    const callTimeout = options.timeout;\n    return controller.run(async progress => {\n      let actual: Buffer | undefined;\n      let previous: Buffer | undefined;\n      const pollIntervals = [0, 100, 250, 500];\n      progress.log(`${renderTitleForCall(metadata)}${callTimeout ? ` with timeout ${callTimeout}ms` : ''}`);\n      if (options.expected)\n        progress.log(`  verifying given screenshot expectation`);\n      else\n        progress.log(`  generating new stable screenshot expectation`);\n      let isFirstIteration = true;\n      while (true) {\n        progress.throwIfAborted();\n        if (this.isClosed())\n          throw new Error('The page has closed');\n        const screenshotTimeout = pollIntervals.shift() ?? 1000;\n        if (screenshotTimeout)\n          progress.log(`waiting ${screenshotTimeout}ms before taking screenshot`);\n        previous = actual;\n        actual = await rafrafScreenshot(progress, screenshotTimeout).catch(e => {\n          progress.log(`failed to take screenshot - ` + e.message);\n          return undefined;\n        });\n        if (!actual)\n          continue;\n        // Compare against expectation for the first iteration.\n        const expectation = options.expected && isFirstIteration ? options.expected : previous;\n        if (areEqualScreenshots(actual, expectation, previous))\n          break;\n        if (intermediateResult)\n          progress.log(intermediateResult.errorMessage);\n        isFirstIteration = false;\n      }\n\n      if (!isFirstIteration)\n        progress.log(`captured a stable screenshot`);\n\n      if (!options.expected)\n        return { actual };\n\n      if (isFirstIteration) {\n        progress.log(`screenshot matched expectation`);\n        return {};\n      }\n\n      if (areEqualScreenshots(actual, options.expected, undefined)) {\n        progress.log(`screenshot matched expectation`);\n        return {};\n      }\n      throw new Error(intermediateResult!.errorMessage);\n    }, callTimeout).catch(e => {\n      // Q: Why not throw upon isSessionClosedError(e) as in other places?\n      // A: We want user to receive a friendly diff between actual and expected/previous.\n      if (js.isJavaScriptErrorInEvaluate(e) || isInvalidSelectorError(e))\n        throw e;\n      let errorMessage = e.message;\n      if (e instanceof TimeoutError && intermediateResult?.previous)\n        errorMessage = `Failed to take two consecutive stable screenshots.`;\n      return {\n        log: compressCallLog(e.message ? [...metadata.log, e.message] : metadata.log),\n        ...intermediateResult,\n        errorMessage,\n        timedOut: (e instanceof TimeoutError),\n      };\n    });\n  }\n\n  async screenshot(metadata: CallMetadata, options: ScreenshotOptions & types.TimeoutOptions): Promise<Buffer> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(\n        progress => this.screenshotter.screenshotPage(progress, options),\n        options.timeout);\n  }\n\n  async close(metadata: CallMetadata, options: { runBeforeUnload?: boolean, reason?: string } = {}) {\n    if (this._closedState === 'closed')\n      return;\n    if (options.reason)\n      this.closeReason = options.reason;\n    const runBeforeUnload = !!options.runBeforeUnload;\n    if (this._closedState !== 'closing') {\n      this._closedState = 'closing';\n      // This might throw if the browser context containing the page closes\n      // while we are trying to close the page.\n      await this.delegate.closePage(runBeforeUnload).catch(e => debugLogger.log('error', e));\n    }\n    if (!runBeforeUnload)\n      await this._closedPromise;\n  }\n\n  isClosed(): boolean {\n    return this._closedState === 'closed';\n  }\n\n  hasCrashed() {\n    return this._crashed;\n  }\n\n  isClosedOrClosingOrCrashed() {\n    return this._closedState !== 'open' || this._crashed;\n  }\n\n  addWorker(workerId: string, worker: Worker) {\n    this._workers.set(workerId, worker);\n    this.emit(Page.Events.Worker, worker);\n  }\n\n  removeWorker(workerId: string) {\n    const worker = this._workers.get(workerId);\n    if (!worker)\n      return;\n    worker.didClose();\n    this._workers.delete(workerId);\n  }\n\n  clearWorkers() {\n    for (const [workerId, worker] of this._workers) {\n      worker.didClose();\n      this._workers.delete(workerId);\n    }\n  }\n\n  async setFileChooserInterceptedBy(enabled: boolean, by: any): Promise<void> {\n    const wasIntercepted = this.fileChooserIntercepted();\n    if (enabled)\n      this._fileChooserInterceptedBy.add(by);\n    else\n      this._fileChooserInterceptedBy.delete(by);\n    if (wasIntercepted !== this.fileChooserIntercepted())\n      await this.delegate.updateFileChooserInterception();\n  }\n\n  fileChooserIntercepted() {\n    return this._fileChooserInterceptedBy.size > 0;\n  }\n\n  frameNavigatedToNewDocument(frame: frames.Frame) {\n    this.emit(Page.Events.InternalFrameNavigatedToNewDocument, frame);\n    const origin = frame.origin();\n    if (origin)\n      this.browserContext.addVisitedOrigin(origin);\n  }\n\n  allInitScripts() {\n    const bindings = [...this.browserContext._pageBindings.values(), ...this._pageBindings.values()].map(binding => binding.initScript);\n    if (this.browserContext.bindingsInitScript)\n      bindings.unshift(this.browserContext.bindingsInitScript);\n    return [...bindings, ...this.browserContext.initScripts, ...this.initScripts];\n  }\n\n  getBinding(name: string) {\n    return this._pageBindings.get(name) || this.browserContext._pageBindings.get(name);\n  }\n\n  setScreencastOptions(options: { width: number, height: number, quality: number } | null) {\n    this.delegate.setScreencastOptions(options).catch(e => debugLogger.log('error', e));\n    this._frameThrottler.setThrottlingEnabled(!!options);\n  }\n\n  throttleScreencastFrameAck(ack: () => void) {\n    // Don't ack immediately, tracing has smart throttling logic that is implemented here.\n    this._frameThrottler.ack(ack);\n  }\n\n  temporarilyDisableTracingScreencastThrottling() {\n    this._frameThrottler.recharge();\n  }\n\n  async safeNonStallingEvaluateInAllFrames(expression: string, world: types.World, options: { throwOnJSErrors?: boolean } = {}) {\n    await Promise.all(this.frames().map(async frame => {\n      try {\n        await frame.nonStallingEvaluateInExistingContext(expression, world);\n      } catch (e) {\n        if (options.throwOnJSErrors && js.isJavaScriptErrorInEvaluate(e))\n          throw e;\n      }\n    }));\n  }\n\n  async hideHighlight() {\n    await Promise.all(this.frames().map(frame => frame.hideHighlight().catch(() => {})));\n  }\n\n  markAsServerSideOnly() {\n    this._isServerSideOnly = true;\n  }\n\n  async snapshotForAI(metadata: CallMetadata): Promise<string> {\n    this.lastSnapshotFrameIds = [];\n    const snapshot = await snapshotFrameForAI(metadata, this.mainFrame(), 0, this.lastSnapshotFrameIds);\n    return snapshot.join('\\n');\n  }\n}\n\nexport class Worker extends SdkObject {\n  static Events = {\n    Close: 'close',\n  };\n\n  readonly url: string;\n  private _executionContextPromise: Promise<js.ExecutionContext>;\n  private _executionContextCallback: (value: js.ExecutionContext) => void;\n  existingExecutionContext: js.ExecutionContext | null = null;\n  readonly openScope = new LongStandingScope();\n\n  constructor(parent: SdkObject, url: string) {\n    super(parent, 'worker');\n    this.url = url;\n    this._executionContextCallback = () => {};\n    this._executionContextPromise = new Promise(x => this._executionContextCallback = x);\n  }\n\n  createExecutionContext(delegate: js.ExecutionContextDelegate) {\n    this.existingExecutionContext = new js.ExecutionContext(this, delegate, 'worker');\n    this._executionContextCallback(this.existingExecutionContext);\n    return this.existingExecutionContext;\n  }\n\n  didClose() {\n    if (this.existingExecutionContext)\n      this.existingExecutionContext.contextDestroyed('Worker was closed');\n    this.emit(Worker.Events.Close, this);\n    this.openScope.close(new Error('Worker closed'));\n  }\n\n  async evaluateExpression(expression: string, isFunction: boolean | undefined, arg: any): Promise<any> {\n    return js.evaluateExpression(await this._executionContextPromise, expression, { returnByValue: true, isFunction }, arg);\n  }\n\n  async evaluateExpressionHandle(expression: string, isFunction: boolean | undefined, arg: any): Promise<any> {\n    return js.evaluateExpression(await this._executionContextPromise, expression, { returnByValue: false, isFunction }, arg);\n  }\n}\n\nexport class PageBinding {\n  private static kController = '__playwright__binding__controller__';\n  static kBindingName = '__playwright__binding__';\n\n  static createInitScript() {\n    return new InitScript(`\n      (() => {\n        const module = {};\n        ${rawBindingsControllerSource.source}\n        const property = '${PageBinding.kController}';\n        if (!globalThis[property])\n          globalThis[property] = new (module.exports.BindingsController())(globalThis, '${PageBinding.kBindingName}');\n      })();\n    `);\n  }\n\n  readonly name: string;\n  readonly playwrightFunction: frames.FunctionWithSource;\n  readonly initScript: InitScript;\n  readonly needsHandle: boolean;\n  readonly cleanupScript: string;\n\n  constructor(name: string, playwrightFunction: frames.FunctionWithSource, needsHandle: boolean) {\n    this.name = name;\n    this.playwrightFunction = playwrightFunction;\n    this.initScript = new InitScript(`globalThis['${PageBinding.kController}'].addBinding(${JSON.stringify(name)}, ${needsHandle})`);\n    this.needsHandle = needsHandle;\n    this.cleanupScript = `globalThis['${PageBinding.kController}'].removeBinding(${JSON.stringify(name)})`;\n  }\n\n  static async dispatch(page: Page, payload: string, context: dom.FrameExecutionContext) {\n    const { name, seq, serializedArgs } = JSON.parse(payload) as BindingPayload;\n    try {\n      assert(context.world);\n      const binding = page.getBinding(name);\n      if (!binding)\n        throw new Error(`Function \"${name}\" is not exposed`);\n      let result: any;\n      if (binding.needsHandle) {\n        const handle = await context.evaluateExpressionHandle(`arg => globalThis['${PageBinding.kController}'].takeBindingHandle(arg)`, { isFunction: true }, { name, seq }).catch(e => null);\n        result = await binding.playwrightFunction({ frame: context.frame, page, context: page.browserContext }, handle);\n      } else {\n        if (!Array.isArray(serializedArgs))\n          throw new Error(`serializedArgs is not an array. This can happen when Array.prototype.toJSON is defined incorrectly`);\n        const args = serializedArgs!.map(a => parseEvaluationResultValue(a));\n        result = await binding.playwrightFunction({ frame: context.frame, page, context: page.browserContext }, ...args);\n      }\n      context.evaluateExpressionHandle(`arg => globalThis['${PageBinding.kController}'].deliverBindingResult(arg)`, { isFunction: true }, { name, seq, result }).catch(e => debugLogger.log('error', e));\n    } catch (error) {\n      context.evaluateExpressionHandle(`arg => globalThis['${PageBinding.kController}'].deliverBindingResult(arg)`, { isFunction: true }, { name, seq, error }).catch(e => debugLogger.log('error', e));\n    }\n  }\n}\n\nexport class InitScript {\n  readonly source: string;\n  readonly name?: string;\n\n  constructor(source: string, name?: string) {\n    this.source = `(() => {\n      ${source}\n    })();`;\n    this.name = name;\n  }\n}\n\nclass FrameThrottler {\n  private _acks: (() => void)[] = [];\n  private _defaultInterval: number;\n  private _throttlingInterval: number;\n  private _nonThrottledFrames: number;\n  private _budget: number;\n  private _throttlingEnabled = false;\n  private _timeoutId: NodeJS.Timeout | undefined;\n\n  constructor(nonThrottledFrames: number, defaultInterval: number, throttlingInterval: number) {\n    this._nonThrottledFrames = nonThrottledFrames;\n    this._budget = nonThrottledFrames;\n    this._defaultInterval = defaultInterval;\n    this._throttlingInterval = throttlingInterval;\n    this._tick();\n  }\n\n  dispose() {\n    if (this._timeoutId) {\n      clearTimeout(this._timeoutId);\n      this._timeoutId = undefined;\n    }\n  }\n\n  setThrottlingEnabled(enabled: boolean) {\n    this._throttlingEnabled = enabled;\n  }\n\n  recharge() {\n    // Send all acks, reset budget.\n    for (const ack of this._acks)\n      ack();\n    this._acks = [];\n    this._budget = this._nonThrottledFrames;\n    if (this._timeoutId) {\n      clearTimeout(this._timeoutId);\n      this._tick();\n    }\n  }\n\n  ack(ack: () => void) {\n    if (!this._timeoutId) {\n      // Already disposed.\n      ack();\n      return;\n    }\n    this._acks.push(ack);\n  }\n\n  private _tick() {\n    const ack = this._acks.shift();\n    if (ack) {\n      --this._budget;\n      ack();\n    }\n\n    if (this._throttlingEnabled && this._budget <= 0) {\n      // Non-throttled frame budget is exceeded. Next ack will be throttled.\n      this._timeoutId = setTimeout(() => this._tick(), this._throttlingInterval);\n    } else {\n      // Either not throttling, or still under budget. Next ack will be after the default timeout.\n      this._timeoutId = setTimeout(() => this._tick(), this._defaultInterval);\n    }\n  }\n}\n\nasync function snapshotFrameForAI(metadata: CallMetadata, frame: frames.Frame, frameOrdinal: number, frameIds: string[]): Promise<string[]> {\n  // Only await the topmost navigations, inner frames will be empty when racing.\n  const controller = new ProgressController(metadata, frame);\n  const snapshot = await controller.run(progress => {\n    return frame.retryWithProgressAndTimeouts(progress, [1000, 2000, 4000, 8000], async continuePolling => {\n      try {\n        const context = await frame._utilityContext();\n        const injectedScript = await context.injectedScript();\n        const snapshotOrRetry = await injectedScript.evaluate((injected, refPrefix) => {\n          const node = injected.document.body;\n          if (!node)\n            return true;\n          return injected.ariaSnapshot(node, { forAI: true, refPrefix });\n        }, frameOrdinal ? 'f' + frameOrdinal : '');\n        if (snapshotOrRetry === true)\n          return continuePolling;\n        return snapshotOrRetry;\n      } catch (e) {\n        if (js.isJavaScriptErrorInEvaluate(e))\n          throw e;\n        return continuePolling;\n      }\n    });\n  });\n\n  const lines = snapshot.split('\\n');\n  const result = [];\n  for (const line of lines) {\n    const match = line.match(/^(\\s*)- iframe \\[ref=(.*)\\]/);\n    if (!match) {\n      result.push(line);\n      continue;\n    }\n\n    const leadingSpace = match[1];\n    const ref = match[2];\n    const frameSelector = `aria-ref=${ref} >> internal:control=enter-frame`;\n    const frameBodySelector = `${frameSelector} >> body`;\n    const child = await frame.selectors.resolveFrameForSelector(frameBodySelector, { strict: true });\n    if (!child) {\n      result.push(line);\n      continue;\n    }\n    const frameOrdinal = frameIds.length + 1;\n    frameIds.push(child.frame._id);\n    try {\n      const childSnapshot = await snapshotFrameForAI(metadata, child.frame, frameOrdinal, frameIds);\n      result.push(line + ':', ...childSnapshot.map(l => leadingSpace + '  ' + l));\n    } catch {\n      result.push(line);\n    }\n  }\n  return result;\n}\n","/**\n * Copyright 2018 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { HeadersArray, Point, Size } from '../utils/isomorphic/types';\nexport type { HeadersArray, Point, Quad, Rect, Size } from '../utils/isomorphic/types';\nimport type * as channels from '@protocol/channels';\n\nexport type TimeoutOptions = { timeout: number };\n\nexport type StrictOptions = {\n  strict?: boolean,\n};\n\nexport type QueryOnSelectorOptions = StrictOptions & TimeoutOptions;\n\nexport type WaitForElementOptions = TimeoutOptions & StrictOptions & { state?: 'attached' | 'detached' | 'visible' | 'hidden' } & { omitReturnValue?: boolean };\n\nexport type WaitForFunctionOptions = TimeoutOptions & { pollingInterval?: number };\n\nexport type LifecycleEvent = 'load' | 'domcontentloaded' | 'networkidle' | 'commit';\nexport const kLifecycleEvents: Set<LifecycleEvent> = new Set(['load', 'domcontentloaded', 'networkidle', 'commit']);\n\nexport type NavigateOptions = TimeoutOptions & {\n  waitUntil?: LifecycleEvent,\n};\n\nexport type CommonActionOptions = TimeoutOptions & StrictOptions & {\n  force?: boolean,\n};\n\nexport type PointerActionWaitOptions = CommonActionOptions & {\n  trial?: boolean;\n};\n\nexport type PageScreencastOptions = {\n  width: number,\n  height: number,\n  outputFile: string,\n};\n\nexport type Credentials = {\n  username: string;\n  password: string;\n  origin?: string;\n  sendImmediately?: boolean;\n};\n\nexport type Geolocation = {\n  longitude: number;\n  latitude: number;\n  accuracy?: number;\n};\n\nexport type SelectOption = {\n  value?: string;\n  label?: string;\n  index?: number;\n};\n\nexport type FilePayload = {\n  name: string,\n  mimeType: string,\n  buffer: string,\n  lastModifiedMs?: number,\n};\n\nexport type MediaType = 'screen' | 'print' | 'no-override';\n\nexport type ColorScheme = 'dark' | 'light' | 'no-preference' | 'no-override';\n\nexport type ReducedMotion = 'no-preference' | 'reduce' | 'no-override';\n\nexport type ForcedColors = 'active' | 'none' | 'no-override';\n\nexport type Contrast = 'no-preference' | 'more' | 'no-override';\n\nexport type DeviceDescriptor = {\n  userAgent: string,\n  viewport: Size,\n  deviceScaleFactor: number,\n  isMobile: boolean,\n  hasTouch: boolean,\n  defaultBrowserType: 'chromium' | 'firefox' | 'webkit'\n};\nexport type Devices = { [name: string]: DeviceDescriptor };\n\nexport type ProxySettings = {\n  server: string,\n  bypass?: string,\n  username?: string,\n  password?: string\n};\n\nexport type KeyboardModifier = 'Alt' | 'Control' | 'Meta' | 'Shift';\nexport type SmartKeyboardModifier = KeyboardModifier |  'ControlOrMeta';\nexport type MouseButton = 'left' | 'right' | 'middle';\n\nexport type PointerActionOptions = {\n  modifiers?: SmartKeyboardModifier[];\n  position?: Point;\n};\n\nexport type DragActionOptions = {\n  sourcePosition?: Point;\n  targetPosition?: Point;\n};\n\n\nexport type MouseClickOptions = PointerActionOptions & {\n  delay?: number;\n  button?: MouseButton;\n  clickCount?: number;\n};\n\nexport type MouseMultiClickOptions = PointerActionOptions & {\n  delay?: number;\n  button?: MouseButton;\n};\n\nexport type World = 'main' | 'utility';\n\nexport type GotoOptions = NavigateOptions & {\n  referer?: string,\n};\n\nexport type NormalizedFulfillResponse = {\n  status: number,\n  headers: HeadersArray,\n  body: string,\n  isBase64: boolean,\n};\n\nexport type NormalizedContinueOverrides = {\n  url?: string,\n  method?: string,\n  headers?: HeadersArray,\n  postData?: Buffer,\n  isFallback: boolean,\n};\n\nexport type EmulatedSize = { viewport: Size, screen: Size };\n\nexport type LaunchOptions = channels.BrowserTypeLaunchParams & {\n  cdpPort?: number,\n  proxyOverride?: ProxySettings,\n  assistantMode?: boolean,\n};\n\nexport type BrowserContextOptions = channels.BrowserNewContextOptions & {\n  proxyOverride?: ProxySettings;\n  internalIgnoreHTTPSErrors?: boolean;\n};\n\nexport type ProtocolLogger = (direction: 'send' | 'receive', message: object) => void;\n\nexport type ConsoleMessageLocation = {\n  url: string,\n  lineNumber: number,\n  columnNumber: number,\n};\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BrowserContext } from './browserContext';\nimport * as dom from './dom';\nimport { TimeoutError } from './errors';\nimport { prepareFilesForUpload } from './fileUploadUtils';\nimport { FrameSelectors } from './frameSelectors';\nimport { helper } from './helper';\nimport { SdkObject, serverSideCallMetadata } from './instrumentation';\nimport * as js from './javascript';\nimport * as network from './network';\nimport { Page } from './page';\nimport { ProgressController } from './progress';\nimport * as types from './types';\nimport { LongStandingScope, asLocator, assert, constructURLBasedOnBaseURL, makeWaitForNextTask, monotonicTime, renderTitleForCall } from '../utils';\nimport { isSessionClosedError } from './protocolError';\nimport { debugLogger } from './utils/debugLogger';\nimport { eventsHelper } from './utils/eventsHelper';\nimport {  isInvalidSelectorError } from '../utils/isomorphic/selectorParser';\nimport { ManualPromise } from '../utils/isomorphic/manualPromise';\nimport { compressCallLog } from './callLog';\n\nimport type { ConsoleMessage } from './console';\nimport type { ElementStateWithoutStable, FrameExpectParams, InjectedScript } from '@injected/injectedScript';\nimport type { CallMetadata } from './instrumentation';\nimport type { Progress } from './progress';\nimport type { ScreenshotOptions } from './screenshotter';\nimport type { RegisteredListener } from './utils/eventsHelper';\nimport type { ParsedSelector } from '../utils/isomorphic/selectorParser';\nimport type * as channels from '@protocol/channels';\n\ntype ContextData = {\n  contextPromise: ManualPromise<dom.FrameExecutionContext | { destroyedReason: string }>;\n  context: dom.FrameExecutionContext | null;\n};\n\ntype DocumentInfo = {\n  // Unfortunately, we don't have documentId when we find out about\n  // a pending navigation from things like frameScheduledNavigaiton.\n  documentId: string | undefined,\n  request: network.Request | undefined,\n};\n\nexport type GotoResult = {\n  newDocumentId?: string,\n};\n\ntype ConsoleTagHandler = () => void;\n\ntype RegularLifecycleEvent = Exclude<types.LifecycleEvent, 'networkidle'>;\n\nexport type FunctionWithSource = (source: { context: BrowserContext, page: Page, frame: Frame}, ...args: any) => any;\n\nexport type NavigationEvent = {\n  // New frame url after navigation.\n  url: string,\n  // New frame name after navigation.\n  name: string,\n  // Information about the new document for cross-document navigations.\n  // Undefined for same-document navigations.\n  newDocument?: DocumentInfo,\n  // Error for cross-document navigations if any. When error is present,\n  // the navigation did not commit.\n  error?: Error,\n  // Whether this event should be visible to the clients via the public APIs.\n  isPublic?: boolean;\n};\n\ntype ElementCallback<T, R> = (injected: InjectedScript, element: Element, data: T) => R;\n\nexport class NavigationAbortedError extends Error {\n  readonly documentId?: string;\n  constructor(documentId: string | undefined, message: string) {\n    super(message);\n    this.documentId = documentId;\n  }\n}\n\nconst kDummyFrameId = '<dummy>';\n\nexport class FrameManager {\n  private _page: Page;\n  private _frames = new Map<string, Frame>();\n  private _mainFrame: Frame;\n  readonly _consoleMessageTags = new Map<string, ConsoleTagHandler>();\n  readonly _signalBarriers = new Set<SignalBarrier>();\n  private _webSockets = new Map<string, network.WebSocket>();\n\n  constructor(page: Page) {\n    this._page = page;\n    this._mainFrame = undefined as any as Frame;\n  }\n\n  createDummyMainFrameIfNeeded() {\n    if (!this._mainFrame)\n      this.frameAttached(kDummyFrameId, null);\n  }\n\n  dispose() {\n    for (const frame of this._frames.values()) {\n      frame._stopNetworkIdleTimer();\n      frame._invalidateNonStallingEvaluations('Target crashed');\n    }\n  }\n\n  mainFrame(): Frame {\n    return this._mainFrame;\n  }\n\n  frames() {\n    const frames: Frame[] = [];\n    collect(this._mainFrame);\n    return frames;\n\n    function collect(frame: Frame) {\n      frames.push(frame);\n      for (const subframe of frame.childFrames())\n        collect(subframe);\n    }\n  }\n\n  frame(frameId: string): Frame | null {\n    return this._frames.get(frameId) || null;\n  }\n\n  frameAttached(frameId: string, parentFrameId: string | null | undefined): Frame {\n    const parentFrame = parentFrameId ? this._frames.get(parentFrameId)! : null;\n    if (!parentFrame) {\n      if (this._mainFrame) {\n        // Update frame id to retain frame identity on cross-process navigation.\n        this._frames.delete(this._mainFrame._id);\n        this._mainFrame._id = frameId;\n      } else {\n        assert(!this._frames.has(frameId));\n        this._mainFrame = new Frame(this._page, frameId, parentFrame);\n      }\n      this._frames.set(frameId, this._mainFrame);\n      return this._mainFrame;\n    } else {\n      assert(!this._frames.has(frameId));\n      const frame = new Frame(this._page, frameId, parentFrame);\n      this._frames.set(frameId, frame);\n      this._page.emit(Page.Events.FrameAttached, frame);\n      return frame;\n    }\n  }\n\n  async waitForSignalsCreatedBy<T>(progress: Progress | null, waitAfter: boolean, action: () => Promise<T>): Promise<T> {\n    if (!waitAfter)\n      return action();\n    const barrier = new SignalBarrier(progress);\n    this._signalBarriers.add(barrier);\n    if (progress)\n      progress.cleanupWhenAborted(() => this._signalBarriers.delete(barrier));\n    const result = await action();\n    await this._page.delegate.inputActionEpilogue();\n    await barrier.waitFor();\n    this._signalBarriers.delete(barrier);\n    // Resolve in the next task, after all waitForNavigations.\n    await new Promise<void>(makeWaitForNextTask());\n    return result;\n  }\n\n  frameWillPotentiallyRequestNavigation() {\n    for (const barrier of this._signalBarriers)\n      barrier.retain();\n  }\n\n  frameDidPotentiallyRequestNavigation() {\n    for (const barrier of this._signalBarriers)\n      barrier.release();\n  }\n\n  frameRequestedNavigation(frameId: string, documentId?: string) {\n    const frame = this._frames.get(frameId);\n    if (!frame)\n      return;\n    for (const barrier of this._signalBarriers)\n      barrier.addFrameNavigation(frame);\n    if (frame.pendingDocument() && frame.pendingDocument()!.documentId === documentId) {\n      // Do not override request with undefined.\n      return;\n    }\n\n    const request = documentId ? Array.from(frame._inflightRequests).find(request => request._documentId === documentId) : undefined;\n    frame.setPendingDocument({ documentId, request });\n  }\n\n  frameCommittedNewDocumentNavigation(frameId: string, url: string, name: string, documentId: string, initial: boolean) {\n    const frame = this._frames.get(frameId)!;\n    this.removeChildFramesRecursively(frame);\n    this.clearWebSockets(frame);\n    frame._url = url;\n    frame._name = name;\n\n    let keepPending: DocumentInfo | undefined;\n    const pendingDocument = frame.pendingDocument();\n    if (pendingDocument) {\n      if (pendingDocument.documentId === undefined) {\n        // Pending with unknown documentId - assume it is the one being committed.\n        pendingDocument.documentId = documentId;\n      }\n      if (pendingDocument.documentId === documentId) {\n        // Committing a pending document.\n        frame._currentDocument = pendingDocument;\n      } else {\n        // Sometimes, we already have a new pending when the old one commits.\n        // An example would be Chromium error page followed by a new navigation request,\n        // where the error page commit arrives after Network.requestWillBeSent for the\n        // new navigation.\n        // We commit, but keep the pending request since it's not done yet.\n        keepPending = pendingDocument;\n        frame._currentDocument = { documentId, request: undefined };\n      }\n      frame.setPendingDocument(undefined);\n    } else {\n      // No pending - just commit a new document.\n      frame._currentDocument = { documentId, request: undefined };\n    }\n\n    frame._onClearLifecycle();\n    const navigationEvent: NavigationEvent = { url, name, newDocument: frame._currentDocument, isPublic: true };\n    this._fireInternalFrameNavigation(frame, navigationEvent);\n    if (!initial) {\n      debugLogger.log('api', `  navigated to \"${url}\"`);\n      this._page.frameNavigatedToNewDocument(frame);\n    }\n    // Restore pending if any - see comments above about keepPending.\n    frame.setPendingDocument(keepPending);\n  }\n\n  frameCommittedSameDocumentNavigation(frameId: string, url: string) {\n    const frame = this._frames.get(frameId);\n    if (!frame)\n      return;\n    const pending = frame.pendingDocument();\n    if (pending && pending.documentId === undefined && pending.request === undefined) {\n      // WebKit has notified about the same-document navigation being requested, so clear it.\n      frame.setPendingDocument(undefined);\n    }\n    frame._url = url;\n    const navigationEvent: NavigationEvent = { url, name: frame._name, isPublic: true };\n    this._fireInternalFrameNavigation(frame, navigationEvent);\n    debugLogger.log('api', `  navigated to \"${url}\"`);\n  }\n\n  frameAbortedNavigation(frameId: string, errorText: string, documentId?: string) {\n    const frame = this._frames.get(frameId);\n    if (!frame || !frame.pendingDocument())\n      return;\n    if (documentId !== undefined && frame.pendingDocument()!.documentId !== documentId)\n      return;\n    const navigationEvent: NavigationEvent = {\n      url: frame._url,\n      name: frame._name,\n      newDocument: frame.pendingDocument(),\n      error: new NavigationAbortedError(documentId, errorText),\n      isPublic: !(documentId && frame._redirectedNavigations.has(documentId)),\n    };\n    frame.setPendingDocument(undefined);\n    this._fireInternalFrameNavigation(frame, navigationEvent);\n  }\n\n  frameDetached(frameId: string) {\n    const frame = this._frames.get(frameId);\n    if (frame) {\n      this._removeFramesRecursively(frame);\n      this._page.mainFrame()._recalculateNetworkIdle();\n    }\n  }\n\n  frameLifecycleEvent(frameId: string, event: RegularLifecycleEvent) {\n    const frame = this._frames.get(frameId);\n    if (frame)\n      frame._onLifecycleEvent(event);\n  }\n\n  requestStarted(request: network.Request, route?: network.RouteDelegate) {\n    const frame = request.frame()!;\n    this._inflightRequestStarted(request);\n    if (request._documentId)\n      frame.setPendingDocument({ documentId: request._documentId, request });\n    if (request._isFavicon) {\n      // Abort favicon requests to avoid network access in case of interception.\n      route?.abort('aborted').catch(() => {});\n      return;\n    }\n    this._page.emitOnContext(BrowserContext.Events.Request, request);\n    if (route)\n      new network.Route(request, route).handle([...this._page.requestInterceptors, ...this._page.browserContext.requestInterceptors]);\n  }\n\n  requestReceivedResponse(response: network.Response) {\n    if (response.request()._isFavicon)\n      return;\n    this._page.emitOnContext(BrowserContext.Events.Response, response);\n  }\n\n  reportRequestFinished(request: network.Request, response: network.Response | null) {\n    this._inflightRequestFinished(request);\n    if (request._isFavicon)\n      return;\n    this._page.emitOnContext(BrowserContext.Events.RequestFinished, { request, response });\n  }\n\n  requestFailed(request: network.Request, canceled: boolean) {\n    const frame = request.frame()!;\n    this._inflightRequestFinished(request);\n    if (frame.pendingDocument() && frame.pendingDocument()!.request === request) {\n      let errorText = request.failure()!.errorText;\n      if (canceled)\n        errorText += '; maybe frame was detached?';\n      this.frameAbortedNavigation(frame._id, errorText, frame.pendingDocument()!.documentId);\n    }\n    if (request._isFavicon)\n      return;\n    this._page.emitOnContext(BrowserContext.Events.RequestFailed, request);\n  }\n\n  removeChildFramesRecursively(frame: Frame) {\n    for (const child of frame.childFrames())\n      this._removeFramesRecursively(child);\n  }\n\n  private _removeFramesRecursively(frame: Frame) {\n    this.removeChildFramesRecursively(frame);\n    frame._onDetached();\n    this._frames.delete(frame._id);\n    if (!this._page.isClosed())\n      this._page.emit(Page.Events.FrameDetached, frame);\n  }\n\n  private _inflightRequestFinished(request: network.Request) {\n    const frame = request.frame()!;\n    if (request._isFavicon)\n      return;\n    if (!frame._inflightRequests.has(request))\n      return;\n    frame._inflightRequests.delete(request);\n    if (frame._inflightRequests.size === 0)\n      frame._startNetworkIdleTimer();\n  }\n\n  private _inflightRequestStarted(request: network.Request) {\n    const frame = request.frame()!;\n    if (request._isFavicon)\n      return;\n    frame._inflightRequests.add(request);\n    if (frame._inflightRequests.size === 1)\n      frame._stopNetworkIdleTimer();\n  }\n\n  interceptConsoleMessage(message: ConsoleMessage): boolean {\n    if (message.type() !== 'debug')\n      return false;\n    const tag = message.text();\n    const handler = this._consoleMessageTags.get(tag);\n    if (!handler)\n      return false;\n    this._consoleMessageTags.delete(tag);\n    handler();\n    return true;\n  }\n\n  clearWebSockets(frame: Frame) {\n    // TODO: attribute sockets to frames.\n    if (frame.parentFrame())\n      return;\n    this._webSockets.clear();\n  }\n\n  onWebSocketCreated(requestId: string, url: string) {\n    const ws = new network.WebSocket(this._page, url);\n    this._webSockets.set(requestId, ws);\n  }\n\n  onWebSocketRequest(requestId: string) {\n    const ws = this._webSockets.get(requestId);\n    if (ws && ws.markAsNotified())\n      this._page.emit(Page.Events.WebSocket, ws);\n  }\n\n  onWebSocketResponse(requestId: string, status: number, statusText: string) {\n    const ws = this._webSockets.get(requestId);\n    if (status < 400)\n      return;\n    if (ws)\n      ws.error(`${statusText}: ${status}`);\n  }\n\n  onWebSocketFrameSent(requestId: string, opcode: number, data: string) {\n    const ws = this._webSockets.get(requestId);\n    if (ws)\n      ws.frameSent(opcode, data);\n  }\n\n  webSocketFrameReceived(requestId: string, opcode: number, data: string) {\n    const ws = this._webSockets.get(requestId);\n    if (ws)\n      ws.frameReceived(opcode, data);\n  }\n\n  webSocketClosed(requestId: string) {\n    const ws = this._webSockets.get(requestId);\n    if (ws)\n      ws.closed();\n    this._webSockets.delete(requestId);\n  }\n\n  webSocketError(requestId: string, errorMessage: string): void {\n    const ws = this._webSockets.get(requestId);\n    if (ws)\n      ws.error(errorMessage);\n  }\n\n  private _fireInternalFrameNavigation(frame: Frame, event: NavigationEvent) {\n    frame.emit(Frame.Events.InternalNavigation, event);\n  }\n}\n\nexport class Frame extends SdkObject {\n  static Events = {\n    InternalNavigation: 'internalnavigation',\n    AddLifecycle: 'addlifecycle',\n    RemoveLifecycle: 'removelifecycle',\n  };\n\n  _id: string;\n  _firedLifecycleEvents = new Set<types.LifecycleEvent>();\n  private _firedNetworkIdleSelf = false;\n  _currentDocument: DocumentInfo;\n  private _pendingDocument: DocumentInfo | undefined;\n  readonly _page: Page;\n  private _parentFrame: Frame | null;\n  _url = '';\n  private _contextData = new Map<types.World, ContextData>();\n  private _childFrames = new Set<Frame>();\n  _name = '';\n  _inflightRequests = new Set<network.Request>();\n  private _networkIdleTimer: NodeJS.Timeout | undefined;\n  private _setContentCounter = 0;\n  readonly _detachedScope = new LongStandingScope();\n  private _raceAgainstEvaluationStallingEventsPromises = new Set<ManualPromise<any>>();\n  readonly _redirectedNavigations = new Map<string, { url: string, gotoPromise: Promise<network.Response | null> }>(); // documentId -> data\n  readonly selectors: FrameSelectors;\n\n  constructor(page: Page, id: string, parentFrame: Frame | null) {\n    super(page, 'frame');\n    this.attribution.frame = this;\n    this._id = id;\n    this._page = page;\n    this._parentFrame = parentFrame;\n    this._currentDocument = { documentId: undefined, request: undefined };\n    this.selectors = new FrameSelectors(this);\n\n    this._contextData.set('main', { contextPromise: new ManualPromise(), context: null });\n    this._contextData.set('utility', { contextPromise: new ManualPromise(), context: null });\n    this._setContext('main', null);\n    this._setContext('utility', null);\n\n    if (this._parentFrame)\n      this._parentFrame._childFrames.add(this);\n\n    this._firedLifecycleEvents.add('commit');\n    if (id !== kDummyFrameId)\n      this._startNetworkIdleTimer();\n  }\n\n  isDetached(): boolean {\n    return this._detachedScope.isClosed();\n  }\n\n  _onLifecycleEvent(event: RegularLifecycleEvent) {\n    if (this._firedLifecycleEvents.has(event))\n      return;\n    this._firedLifecycleEvents.add(event);\n    this.emit(Frame.Events.AddLifecycle, event);\n    if (this === this._page.mainFrame() && this._url !== 'about:blank')\n      debugLogger.log('api', `  \"${event}\" event fired`);\n    this._page.mainFrame()._recalculateNetworkIdle();\n  }\n\n  _onClearLifecycle() {\n    for (const event of this._firedLifecycleEvents)\n      this.emit(Frame.Events.RemoveLifecycle, event);\n    this._firedLifecycleEvents.clear();\n    // Keep the current navigation request if any.\n    this._inflightRequests = new Set(Array.from(this._inflightRequests).filter(request => request === this._currentDocument.request));\n    this._stopNetworkIdleTimer();\n    if (this._inflightRequests.size === 0)\n      this._startNetworkIdleTimer();\n    this._page.mainFrame()._recalculateNetworkIdle(this);\n    this._onLifecycleEvent('commit');\n  }\n\n  setPendingDocument(documentInfo: DocumentInfo | undefined) {\n    this._pendingDocument = documentInfo;\n    if (documentInfo)\n      this._invalidateNonStallingEvaluations('Navigation interrupted the evaluation');\n  }\n\n  pendingDocument(): DocumentInfo | undefined {\n    return this._pendingDocument;\n  }\n\n  _invalidateNonStallingEvaluations(message: string) {\n    if (!this._raceAgainstEvaluationStallingEventsPromises.size)\n      return;\n    const error = new Error(message);\n    for (const promise of this._raceAgainstEvaluationStallingEventsPromises)\n      promise.reject(error);\n  }\n\n  async raceAgainstEvaluationStallingEvents<T>(cb: () => Promise<T>): Promise<T> {\n    if (this._pendingDocument)\n      throw new Error('Frame is currently attempting a navigation');\n    if (this._page.browserContext.dialogManager.hasOpenDialogsForPage(this._page))\n      throw new Error('Open JavaScript dialog prevents evaluation');\n\n    const promise = new ManualPromise<T>();\n    this._raceAgainstEvaluationStallingEventsPromises.add(promise);\n    try {\n      return await Promise.race([\n        cb(),\n        promise\n      ]);\n    } finally {\n      this._raceAgainstEvaluationStallingEventsPromises.delete(promise);\n    }\n  }\n\n  nonStallingRawEvaluateInExistingMainContext(expression: string): Promise<any> {\n    return this.raceAgainstEvaluationStallingEvents(() => {\n      const context = this._existingMainContext();\n      if (!context)\n        throw new Error('Frame does not yet have a main execution context');\n      return context.rawEvaluateJSON(expression);\n    });\n  }\n\n  nonStallingEvaluateInExistingContext(expression: string, world: types.World): Promise<any> {\n    return this.raceAgainstEvaluationStallingEvents(() => {\n      const context = this._contextData.get(world)?.context;\n      if (!context)\n        throw new Error('Frame does not yet have the execution context');\n      return context.evaluateExpression(expression, { isFunction: false });\n    });\n  }\n\n  _recalculateNetworkIdle(frameThatAllowsRemovingNetworkIdle?: Frame) {\n    let isNetworkIdle = this._firedNetworkIdleSelf;\n    for (const child of this._childFrames) {\n      child._recalculateNetworkIdle(frameThatAllowsRemovingNetworkIdle);\n      // We require networkidle event to be fired in the whole frame subtree, and then consider it done.\n      if (!child._firedLifecycleEvents.has('networkidle'))\n        isNetworkIdle = false;\n    }\n    if (isNetworkIdle && !this._firedLifecycleEvents.has('networkidle')) {\n      this._firedLifecycleEvents.add('networkidle');\n      this.emit(Frame.Events.AddLifecycle, 'networkidle');\n      if (this === this._page.mainFrame() && this._url !== 'about:blank')\n        debugLogger.log('api', `  \"networkidle\" event fired`);\n    }\n    if (frameThatAllowsRemovingNetworkIdle !== this && this._firedLifecycleEvents.has('networkidle') && !isNetworkIdle) {\n      // Usually, networkidle is fired once and not removed after that.\n      // However, when we clear them right before a new commit, this is allowed for a particular frame.\n      this._firedLifecycleEvents.delete('networkidle');\n      this.emit(Frame.Events.RemoveLifecycle, 'networkidle');\n    }\n  }\n\n  async raceNavigationAction(progress: Progress, options: types.GotoOptions, action: () => Promise<network.Response | null>): Promise<network.Response | null> {\n    return LongStandingScope.raceMultiple([\n      this._detachedScope,\n      this._page.openScope,\n    ], action().catch(e => {\n      if (e instanceof NavigationAbortedError && e.documentId) {\n        const data = this._redirectedNavigations.get(e.documentId);\n        if (data) {\n          progress.log(`waiting for redirected navigation to \"${data.url}\"`);\n          return data.gotoPromise;\n        }\n      }\n      throw e;\n    }));\n  }\n\n  redirectNavigation(url: string, documentId: string, referer: string | undefined) {\n    const controller = new ProgressController(serverSideCallMetadata(), this);\n    const data = {\n      url,\n      gotoPromise: controller.run(progress => this._gotoAction(progress, url, { referer }), 0),\n    };\n    this._redirectedNavigations.set(documentId, data);\n    data.gotoPromise.finally(() => this._redirectedNavigations.delete(documentId));\n  }\n\n  async goto(metadata: CallMetadata, url: string, options: types.GotoOptions): Promise<network.Response | null> {\n    const constructedNavigationURL = constructURLBasedOnBaseURL(this._page.browserContext._options.baseURL, url);\n    const controller = new ProgressController(metadata, this);\n    return controller.run(progress => {\n      return this.raceNavigationAction(progress, options, async () => this._gotoAction(progress, constructedNavigationURL, options));\n    }, options.timeout);\n  }\n\n  private async _gotoAction(progress: Progress, url: string, options: Omit<types.GotoOptions, 'timeout'>): Promise<network.Response | null> {\n    const waitUntil = verifyLifecycle('waitUntil', options.waitUntil === undefined ? 'load' : options.waitUntil);\n    progress.log(`navigating to \"${url}\", waiting until \"${waitUntil}\"`);\n    const headers = this._page.extraHTTPHeaders() || [];\n    const refererHeader = headers.find(h => h.name.toLowerCase() === 'referer');\n    let referer = refererHeader ? refererHeader.value : undefined;\n    if (options.referer !== undefined) {\n      if (referer !== undefined && referer !== options.referer)\n        throw new Error('\"referer\" is already specified as extra HTTP header');\n      referer = options.referer;\n    }\n    url = helper.completeUserURL(url);\n\n    const navigationEvents: NavigationEvent[] = [];\n    const collectNavigations = (arg: NavigationEvent) => navigationEvents.push(arg);\n    this.on(Frame.Events.InternalNavigation, collectNavigations);\n    const navigateResult = await this._page.delegate.navigateFrame(this, url, referer).finally(\n        () => this.off(Frame.Events.InternalNavigation, collectNavigations));\n\n    let event: NavigationEvent;\n    if (navigateResult.newDocumentId) {\n      const predicate = (event: NavigationEvent) => {\n        // We are interested either in this specific document, or any other document that\n        // did commit and replaced the expected document.\n        return event.newDocument && (event.newDocument.documentId === navigateResult.newDocumentId || !event.error);\n      };\n      const events = navigationEvents.filter(predicate);\n      if (events.length)\n        event = events[0];\n      else\n        event = await helper.waitForEvent(progress, this, Frame.Events.InternalNavigation, predicate).promise;\n      if (event.newDocument!.documentId !== navigateResult.newDocumentId) {\n        // This is just a sanity check. In practice, new navigation should\n        // cancel the previous one and report \"request cancelled\"-like error.\n        throw new NavigationAbortedError(navigateResult.newDocumentId, `Navigation to \"${url}\" is interrupted by another navigation to \"${event.url}\"`);\n      }\n      if (event.error)\n        throw event.error;\n    } else {\n      // Wait for same document navigation.\n      const predicate = (e: NavigationEvent) => !e.newDocument;\n      const events = navigationEvents.filter(predicate);\n      if (events.length)\n        event = events[0];\n      else\n        event = await helper.waitForEvent(progress, this, Frame.Events.InternalNavigation, predicate).promise;\n    }\n\n    if (!this._firedLifecycleEvents.has(waitUntil))\n      await helper.waitForEvent(progress, this, Frame.Events.AddLifecycle, (e: types.LifecycleEvent) => e === waitUntil).promise;\n\n    const request = event.newDocument ? event.newDocument.request : undefined;\n    const response = request ? request._finalRequest().response() : null;\n    return response;\n  }\n\n  async _waitForNavigation(progress: Progress, requiresNewDocument: boolean, options: types.NavigateOptions): Promise<network.Response | null> {\n    const waitUntil = verifyLifecycle('waitUntil', options.waitUntil === undefined ? 'load' : options.waitUntil);\n    progress.log(`waiting for navigation until \"${waitUntil}\"`);\n\n    const navigationEvent: NavigationEvent = await helper.waitForEvent(progress, this, Frame.Events.InternalNavigation, (event: NavigationEvent) => {\n      // Any failed navigation results in a rejection.\n      if (event.error)\n        return true;\n      if (requiresNewDocument && !event.newDocument)\n        return false;\n      progress.log(`  navigated to \"${this._url}\"`);\n      return true;\n    }).promise;\n    if (navigationEvent.error)\n      throw navigationEvent.error;\n\n    if (!this._firedLifecycleEvents.has(waitUntil))\n      await helper.waitForEvent(progress, this, Frame.Events.AddLifecycle, (e: types.LifecycleEvent) => e === waitUntil).promise;\n\n    const request = navigationEvent.newDocument ? navigationEvent.newDocument.request : undefined;\n    return request ? request._finalRequest().response() : null;\n  }\n\n  async _waitForLoadState(progress: Progress, state: types.LifecycleEvent): Promise<void> {\n    const waitUntil = verifyLifecycle('state', state);\n    if (!this._firedLifecycleEvents.has(waitUntil))\n      await helper.waitForEvent(progress, this, Frame.Events.AddLifecycle, (e: types.LifecycleEvent) => e === waitUntil).promise;\n  }\n\n  async frameElement(): Promise<dom.ElementHandle> {\n    return this._page.delegate.getFrameElement(this);\n  }\n\n  _context(world: types.World): Promise<dom.FrameExecutionContext> {\n    return this._contextData.get(world)!.contextPromise.then(contextOrDestroyedReason => {\n      if (contextOrDestroyedReason instanceof js.ExecutionContext)\n        return contextOrDestroyedReason;\n      throw new Error(contextOrDestroyedReason.destroyedReason);\n    });\n  }\n\n  _mainContext(): Promise<dom.FrameExecutionContext> {\n    return this._context('main');\n  }\n\n  private _existingMainContext(): dom.FrameExecutionContext | null {\n    return this._contextData.get('main')?.context || null;\n  }\n\n  _utilityContext(): Promise<dom.FrameExecutionContext> {\n    return this._context('utility');\n  }\n\n  async evaluateExpression(expression: string, options: { isFunction?: boolean, world?: types.World } = {}, arg?: any): Promise<any> {\n    const context = await this._context(options.world ?? 'main');\n    const value = await context.evaluateExpression(expression, options, arg);\n    return value;\n  }\n\n  async evaluateExpressionHandle(expression: string, options: { isFunction?: boolean, world?: types.World } = {}, arg?: any): Promise<js.JSHandle<any>> {\n    const context = await this._context(options.world ?? 'main');\n    const value = await context.evaluateExpressionHandle(expression, options, arg);\n    return value;\n  }\n\n  async querySelector(selector: string, options: types.StrictOptions): Promise<dom.ElementHandle<Element> | null> {\n    debugLogger.log('api', `    finding element using the selector \"${selector}\"`);\n    return this.selectors.query(selector, options);\n  }\n\n  async waitForSelector(metadata: CallMetadata, selector: string, options: types.WaitForElementOptions, scope?: dom.ElementHandle): Promise<dom.ElementHandle<Element> | null> {\n    const controller = new ProgressController(metadata, this);\n    if ((options as any).visibility)\n      throw new Error('options.visibility is not supported, did you mean options.state?');\n    if ((options as any).waitFor && (options as any).waitFor !== 'visible')\n      throw new Error('options.waitFor is not supported, did you mean options.state?');\n    const { state = 'visible' } = options;\n    if (!['attached', 'detached', 'visible', 'hidden'].includes(state))\n      throw new Error(`state: expected one of (attached|detached|visible|hidden)`);\n    return controller.run(async progress => {\n      progress.log(`waiting for ${this._asLocator(selector)}${state === 'attached' ? '' : ' to be ' + state}`);\n      return await this.waitForSelectorInternal(progress, selector, true, options, scope);\n    }, options.timeout);\n  }\n\n  async waitForSelectorInternal(progress: Progress, selector: string, performActionPreChecks: boolean, options: Omit<types.WaitForElementOptions, 'timeout'>, scope?: dom.ElementHandle): Promise<dom.ElementHandle<Element> | null> {\n    const { state = 'visible' } = options;\n    const promise = this.retryWithProgressAndTimeouts(progress, [0, 20, 50, 100, 100, 500], async continuePolling => {\n      if (performActionPreChecks)\n        await this._page.performActionPreChecks(progress);\n\n      const resolved = await this.selectors.resolveInjectedForSelector(selector, options, scope);\n      progress.throwIfAborted();\n      if (!resolved) {\n        if (state === 'hidden' || state === 'detached')\n          return null;\n        return continuePolling;\n      }\n      const result = await resolved.injected.evaluateHandle((injected, { info, root }) => {\n        if (root && !root.isConnected)\n          throw injected.createStacklessError('Element is not attached to the DOM');\n        const elements = injected.querySelectorAll(info.parsed, root || document);\n        const element: Element | undefined  = elements[0];\n        const visible = element ? injected.utils.isElementVisible(element) : false;\n        let log = '';\n        if (elements.length > 1) {\n          if (info.strict)\n            throw injected.strictModeViolationError(info.parsed, elements);\n          log = `  locator resolved to ${elements.length} elements. Proceeding with the first one: ${injected.previewNode(elements[0])}`;\n        } else if (element) {\n          log = `  locator resolved to ${visible ? 'visible' : 'hidden'} ${injected.previewNode(element)}`;\n        }\n        return { log, element, visible, attached: !!element };\n      }, { info: resolved.info, root: resolved.frame === this ? scope : undefined });\n      const { log, visible, attached } = await result.evaluate(r => ({ log: r.log, visible: r.visible, attached: r.attached }));\n      if (log)\n        progress.log(log);\n      const success = { attached, detached: !attached, visible, hidden: !visible }[state];\n      if (!success) {\n        result.dispose();\n        return continuePolling;\n      }\n      if (options.omitReturnValue) {\n        result.dispose();\n        return null;\n      }\n      const element = state === 'attached' || state === 'visible' ? await result.evaluateHandle(r => r.element) : null;\n      result.dispose();\n      if (!element)\n        return null;\n      if ((options as any).__testHookBeforeAdoptNode)\n        await (options as any).__testHookBeforeAdoptNode();\n      try {\n        return await element._adoptTo(await resolved.frame._mainContext());\n      } catch (e) {\n        return continuePolling;\n      }\n    });\n    return scope ? scope._context._raceAgainstContextDestroyed(promise) : promise;\n  }\n\n  async dispatchEvent(metadata: CallMetadata, selector: string, type: string, eventInit: Object = {}, options: types.QueryOnSelectorOptions, scope?: dom.ElementHandle): Promise<void> {\n    await this._callOnElementOnceMatches(metadata, selector, (injectedScript, element, data) => {\n      injectedScript.dispatchEvent(element, data.type, data.eventInit);\n    }, { type, eventInit }, { mainWorld: true, ...options }, scope);\n  }\n\n  async evalOnSelector(selector: string, strict: boolean, expression: string, isFunction: boolean | undefined, arg: any, scope?: dom.ElementHandle): Promise<any> {\n    const handle = await this.selectors.query(selector, { strict }, scope);\n    if (!handle)\n      throw new Error(`Failed to find element matching selector \"${selector}\"`);\n    const result = await handle.evaluateExpression(expression, { isFunction }, arg);\n    handle.dispose();\n    return result;\n  }\n\n  async evalOnSelectorAll(selector: string, expression: string, isFunction: boolean | undefined, arg: any, scope?: dom.ElementHandle): Promise<any> {\n    const arrayHandle = await this.selectors.queryArrayInMainWorld(selector, scope);\n    const result = await arrayHandle.evaluateExpression(expression, { isFunction }, arg);\n    arrayHandle.dispose();\n    return result;\n  }\n\n  async maskSelectors(selectors: ParsedSelector[], color: string): Promise<void> {\n    const context = await this._utilityContext();\n    const injectedScript = await context.injectedScript();\n    await injectedScript.evaluate((injected, { parsed, color }) => {\n      injected.maskSelectors(parsed, color);\n    }, { parsed: selectors, color: color });\n  }\n\n  async querySelectorAll(selector: string): Promise<dom.ElementHandle<Element>[]> {\n    return this.selectors.queryAll(selector);\n  }\n\n  async queryCount(selector: string): Promise<number> {\n    return await this.selectors.queryCount(selector);\n  }\n\n  async content(): Promise<string> {\n    try {\n      const context = await this._utilityContext();\n      return await context.evaluate(() => {\n        let retVal = '';\n        if (document.doctype)\n          retVal = new XMLSerializer().serializeToString(document.doctype);\n        if (document.documentElement)\n          retVal += document.documentElement.outerHTML;\n        return retVal;\n      });\n    } catch (e) {\n      if (js.isJavaScriptErrorInEvaluate(e) || isSessionClosedError(e))\n        throw e;\n      throw new Error(`Unable to retrieve content because the page is navigating and changing the content.`);\n    }\n  }\n\n  async setContent(metadata: CallMetadata, html: string, options: types.NavigateOptions): Promise<void> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      await this.raceNavigationAction(progress, options, async () => {\n        const waitUntil = options.waitUntil === undefined ? 'load' : options.waitUntil;\n        progress.log(`setting frame content, waiting until \"${waitUntil}\"`);\n        const tag = `--playwright--set--content--${this._id}--${++this._setContentCounter}--`;\n        const context = await this._utilityContext();\n        const lifecyclePromise = new Promise((resolve, reject) => {\n          this._page.frameManager._consoleMessageTags.set(tag, () => {\n            // Clear lifecycle right after document.open() - see 'tag' below.\n            this._onClearLifecycle();\n            this._waitForLoadState(progress, waitUntil).then(resolve).catch(reject);\n          });\n        });\n        const contentPromise = context.evaluate(({ html, tag }) => {\n          document.open();\n          console.debug(tag);  // eslint-disable-line no-console\n          document.write(html);\n          document.close();\n        }, { html, tag });\n        await Promise.all([contentPromise, lifecyclePromise]);\n        return null;\n      });\n    }, options.timeout);\n  }\n\n  name(): string {\n    return this._name || '';\n  }\n\n  url(): string {\n    return this._url;\n  }\n\n  origin(): string | undefined {\n    if (!this._url.startsWith('http'))\n      return;\n    return network.parseURL(this._url)?.origin;\n  }\n\n  parentFrame(): Frame | null {\n    return this._parentFrame;\n  }\n\n  childFrames(): Frame[] {\n    return Array.from(this._childFrames);\n  }\n\n  async addScriptTag(params: {\n      url?: string,\n      content?: string,\n      type?: string,\n    }): Promise<dom.ElementHandle> {\n    const {\n      url = null,\n      content = null,\n      type = ''\n    } = params;\n    if (!url && !content)\n      throw new Error('Provide an object with a `url`, `path` or `content` property');\n\n    const context = await this._mainContext();\n    return this._raceWithCSPError(async () => {\n      if (url !== null)\n        return (await context.evaluateHandle(addScriptUrl, { url, type })).asElement()!;\n      const result = (await context.evaluateHandle(addScriptContent, { content: content!, type })).asElement()!;\n      // Another round trip to the browser to ensure that we receive CSP error messages\n      // (if any) logged asynchronously in a separate task on the content main thread.\n      if (this._page.delegate.cspErrorsAsynchronousForInlineScripts)\n        await context.evaluate(() => true);\n      return result;\n    });\n\n    async function addScriptUrl(params: { url: string, type: string }): Promise<HTMLElement> {\n      const script = document.createElement('script');\n      script.src = params.url;\n      if (params.type)\n        script.type = params.type;\n      const promise = new Promise((res, rej) => {\n        script.onload = res;\n        script.onerror = e => rej(typeof e === 'string' ? new Error(e) : new Error(`Failed to load script at ${script.src}`));\n      });\n      document.head.appendChild(script);\n      await promise;\n      return script;\n    }\n\n    function addScriptContent(params: { content: string, type: string }): HTMLElement {\n      const script = document.createElement('script');\n      script.type = params.type || 'text/javascript';\n      script.text = params.content;\n      let error = null;\n      script.onerror = e => error = e;\n      document.head.appendChild(script);\n      if (error)\n        throw error;\n      return script;\n    }\n  }\n\n  async addStyleTag(params: { url?: string, content?: string }): Promise<dom.ElementHandle> {\n    const {\n      url = null,\n      content = null\n    } = params;\n    if (!url && !content)\n      throw new Error('Provide an object with a `url`, `path` or `content` property');\n\n    const context = await this._mainContext();\n    return this._raceWithCSPError(async () => {\n      if (url !== null)\n        return (await context.evaluateHandle(addStyleUrl, url)).asElement()!;\n      return (await context.evaluateHandle(addStyleContent, content!)).asElement()!;\n    });\n\n    async function addStyleUrl(url: string): Promise<HTMLElement> {\n      const link = document.createElement('link');\n      link.rel = 'stylesheet';\n      link.href = url;\n      const promise = new Promise((res, rej) => {\n        link.onload = res;\n        link.onerror = rej;\n      });\n      document.head.appendChild(link);\n      await promise;\n      return link;\n    }\n\n    async function addStyleContent(content: string): Promise<HTMLElement> {\n      const style = document.createElement('style');\n      style.type = 'text/css';\n      style.appendChild(document.createTextNode(content));\n      const promise = new Promise((res, rej) => {\n        style.onload = res;\n        style.onerror = rej;\n      });\n      document.head.appendChild(style);\n      await promise;\n      return style;\n    }\n  }\n\n  private async _raceWithCSPError(func: () => Promise<dom.ElementHandle>): Promise<dom.ElementHandle> {\n    const listeners: RegisteredListener[] = [];\n    let result: dom.ElementHandle;\n    let error: Error | undefined;\n    let cspMessage: ConsoleMessage | undefined;\n    const actionPromise = func().then(r => result = r).catch(e => error = e);\n    const errorPromise = new Promise<void>(resolve => {\n      listeners.push(eventsHelper.addEventListener(this._page.browserContext, BrowserContext.Events.Console, (message: ConsoleMessage) => {\n        if (message.page() !== this._page || message.type() !== 'error')\n          return;\n        if (message.text().includes('Content-Security-Policy') || message.text().includes('Content Security Policy')) {\n          cspMessage = message;\n          resolve();\n        }\n      }));\n    });\n    await Promise.race([actionPromise, errorPromise]);\n    eventsHelper.removeEventListeners(listeners);\n    if (cspMessage)\n      throw new Error(cspMessage.text());\n    if (error)\n      throw error;\n    return result!;\n  }\n\n  async retryWithProgressAndTimeouts<R>(progress: Progress, timeouts: number[], action: (continuePolling: symbol) => Promise<R | symbol>): Promise<R> {\n    const continuePolling = Symbol('continuePolling');\n    timeouts = [0, ...timeouts];\n    let timeoutIndex = 0;\n    while (progress.isRunning()) {\n      const timeout = timeouts[Math.min(timeoutIndex++, timeouts.length - 1)];\n      if (timeout) {\n        // Make sure we react immediately upon page close or frame detach.\n        // We need this to show expected/received values in time.\n        const actionPromise = new Promise(f => setTimeout(f, timeout));\n        await LongStandingScope.raceMultiple([\n          this._page.openScope,\n          this._detachedScope,\n        ], actionPromise);\n      }\n      progress.throwIfAborted();\n      try {\n        const result = await action(continuePolling);\n        if (result === continuePolling)\n          continue;\n        return result as R;\n      } catch (e) {\n        if (this._isErrorThatCannotBeRetried(e))\n          throw e;\n        continue;\n      }\n    }\n    progress.throwIfAborted();\n    return undefined as any;\n  }\n\n  private _isErrorThatCannotBeRetried(e: Error) {\n    // Always fail on JavaScript errors or when the main connection is closed.\n    if (js.isJavaScriptErrorInEvaluate(e) || isSessionClosedError(e))\n      return true;\n    // Certain errors opt-out of the retries, throw.\n    if (dom.isNonRecoverableDOMError(e) || isInvalidSelectorError(e))\n      return true;\n    // If the call is made on the detached frame - throw.\n    if (this.isDetached())\n      return true;\n    // Retry upon all other errors.\n    return false;\n  }\n\n  private async _retryWithProgressIfNotConnected<R>(\n    progress: Progress,\n    selector: string,\n    strict: boolean | undefined,\n    performActionPreChecks: boolean,\n    action: (handle: dom.ElementHandle<Element>) => Promise<R | 'error:notconnected'>): Promise<R> {\n    progress.log(`waiting for ${this._asLocator(selector)}`);\n    return this.retryWithProgressAndTimeouts(progress, [0, 20, 50, 100, 100, 500], async continuePolling => {\n      if (performActionPreChecks)\n        await this._page.performActionPreChecks(progress);\n\n      const resolved = await this.selectors.resolveInjectedForSelector(selector, { strict });\n      progress.throwIfAborted();\n      if (!resolved)\n        return continuePolling;\n      const result = await resolved.injected.evaluateHandle((injected, { info, callId }) => {\n        const elements = injected.querySelectorAll(info.parsed, document);\n        if (callId)\n          injected.markTargetElements(new Set(elements), callId);\n        const element = elements[0] as Element | undefined;\n        let log = '';\n        if (elements.length > 1) {\n          if (info.strict)\n            throw injected.strictModeViolationError(info.parsed, elements);\n          log = `  locator resolved to ${elements.length} elements. Proceeding with the first one: ${injected.previewNode(elements[0])}`;\n        } else if (element) {\n          log = `  locator resolved to ${injected.previewNode(element)}`;\n        }\n        return { log, success: !!element, element };\n      }, { info: resolved.info, callId: progress.metadata.id });\n      const { log, success } = await result.evaluate(r => ({ log: r.log, success: r.success }));\n      if (log)\n        progress.log(log);\n      if (!success) {\n        result.dispose();\n        return continuePolling;\n      }\n      const element = await result.evaluateHandle(r => r.element) as dom.ElementHandle<Element>;\n      result.dispose();\n      try {\n        const result = await action(element);\n        if (result === 'error:notconnected') {\n          progress.log('element was detached from the DOM, retrying');\n          return continuePolling;\n        }\n        return result;\n      } finally {\n        element?.dispose();\n      }\n    });\n  }\n\n  async rafrafTimeoutScreenshotElementWithProgress(progress: Progress, selector: string, timeout: number, options: ScreenshotOptions): Promise<Buffer> {\n    return await this._retryWithProgressIfNotConnected(progress, selector, true /* strict */, true /* performActionPreChecks */, async handle => {\n      await handle._frame.rafrafTimeout(timeout);\n      return await this._page.screenshotter.screenshotElement(progress, handle, options);\n    });\n  }\n\n  async click(metadata: CallMetadata, selector: string, options: { noWaitAfter?: boolean } & types.MouseClickOptions & types.PointerActionWaitOptions) {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._click(progress, { ...options, waitAfter: !options.noWaitAfter })));\n    }, options.timeout);\n  }\n\n  async dblclick(metadata: CallMetadata, selector: string, options: types.MouseMultiClickOptions & types.PointerActionWaitOptions) {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._dblclick(progress, options)));\n    }, options.timeout);\n  }\n\n  async dragAndDrop(metadata: CallMetadata, source: string, target: string, options: types.DragActionOptions & types.PointerActionWaitOptions) {\n    const controller = new ProgressController(metadata, this);\n    await controller.run(async progress => {\n      dom.assertDone(await this._retryWithProgressIfNotConnected(progress, source, options.strict, !options.force /* performActionPreChecks */, async handle => {\n        return handle._retryPointerAction(progress, 'move and down', false, async point => {\n          await this._page.mouse.move(point.x, point.y);\n          await this._page.mouse.down();\n        }, {\n          ...options,\n          waitAfter: 'disabled',\n          position: options.sourcePosition,\n          timeout: progress.timeUntilDeadline(),\n        });\n      }));\n      // Note: do not perform locator handlers checkpoint to avoid moving the mouse in the middle of a drag operation.\n      dom.assertDone(await this._retryWithProgressIfNotConnected(progress, target, options.strict, false /* performActionPreChecks */, async handle => {\n        return handle._retryPointerAction(progress, 'move and up', false, async point => {\n          await this._page.mouse.move(point.x, point.y);\n          await this._page.mouse.up();\n        }, {\n          ...options,\n          waitAfter: 'disabled',\n          position: options.targetPosition,\n          timeout: progress.timeUntilDeadline(),\n        });\n      }));\n    }, options.timeout);\n  }\n\n  async tap(metadata: CallMetadata, selector: string, options: types.PointerActionWaitOptions) {\n    if (!this._page.browserContext._options.hasTouch)\n      throw new Error('The page does not support tap. Use hasTouch context option to enable touch support.');\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._tap(progress, options)));\n    }, options.timeout);\n  }\n\n  async fill(metadata: CallMetadata, selector: string, value: string, options: types.TimeoutOptions & types.StrictOptions & { force?: boolean }) {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._fill(progress, value, options)));\n    }, options.timeout);\n  }\n\n  async focus(metadata: CallMetadata, selector: string, options: types.TimeoutOptions & types.StrictOptions) {\n    const controller = new ProgressController(metadata, this);\n    await controller.run(async progress => {\n      dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, true /* performActionPreChecks */, handle => handle._focus(progress)));\n    }, options.timeout);\n  }\n\n  async blur(metadata: CallMetadata, selector: string, options: types.TimeoutOptions & types.StrictOptions) {\n    const controller = new ProgressController(metadata, this);\n    await controller.run(async progress => {\n      dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, true /* performActionPreChecks */, handle => handle._blur(progress)));\n    }, options.timeout);\n  }\n\n  async textContent(metadata: CallMetadata, selector: string, options: types.QueryOnSelectorOptions, scope?: dom.ElementHandle): Promise<string | null> {\n    return this._callOnElementOnceMatches(metadata, selector, (injected, element) => element.textContent, undefined, options, scope);\n  }\n\n  async innerText(metadata: CallMetadata, selector: string, options: types.QueryOnSelectorOptions, scope?: dom.ElementHandle): Promise<string> {\n    return this._callOnElementOnceMatches(metadata, selector, (injectedScript, element) => {\n      if (element.namespaceURI !== 'http://www.w3.org/1999/xhtml')\n        throw injectedScript.createStacklessError('Node is not an HTMLElement');\n      return (element as HTMLElement).innerText;\n    }, undefined, options, scope);\n  }\n\n  async innerHTML(metadata: CallMetadata, selector: string, options: types.QueryOnSelectorOptions, scope?: dom.ElementHandle): Promise<string> {\n    return this._callOnElementOnceMatches(metadata, selector, (injected, element) => element.innerHTML, undefined, options, scope);\n  }\n\n  async getAttribute(metadata: CallMetadata, selector: string, name: string, options: types.QueryOnSelectorOptions, scope?: dom.ElementHandle): Promise<string | null> {\n    return this._callOnElementOnceMatches(metadata, selector, (injected, element, data) => element.getAttribute(data.name), { name }, options, scope);\n  }\n\n  async inputValue(metadata: CallMetadata, selector: string, options: types.TimeoutOptions & types.StrictOptions, scope?: dom.ElementHandle): Promise<string> {\n    return this._callOnElementOnceMatches(metadata, selector, (injectedScript, node) => {\n      const element = injectedScript.retarget(node, 'follow-label');\n      if (!element || (element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA' && element.nodeName !== 'SELECT'))\n        throw injectedScript.createStacklessError('Node is not an <input>, <textarea> or <select> element');\n      return (element as any).value;\n    }, undefined, options, scope);\n  }\n\n  async highlight(selector: string) {\n    const resolved = await this.selectors.resolveInjectedForSelector(selector);\n    if (!resolved)\n      return;\n    return await resolved.injected.evaluate((injected, { info }) => {\n      return injected.highlight(info.parsed);\n    }, { info: resolved.info });\n  }\n\n  async hideHighlight() {\n    return this.raceAgainstEvaluationStallingEvents(async () => {\n      const context = await this._utilityContext();\n      const injectedScript = await context.injectedScript();\n      return await injectedScript.evaluate(injected => {\n        return injected.hideHighlight();\n      });\n    });\n  }\n\n  private async _elementState(metadata: CallMetadata, selector: string, state: ElementStateWithoutStable, options: types.QueryOnSelectorOptions, scope?: dom.ElementHandle): Promise<boolean> {\n    const result = await this._callOnElementOnceMatches(metadata, selector, (injected, element, data) => {\n      return injected.elementState(element, data.state);\n    }, { state }, options, scope);\n    if (result.received === 'error:notconnected')\n      dom.throwElementIsNotAttached();\n    return result.matches;\n  }\n\n  async isVisible(metadata: CallMetadata, selector: string, options: types.StrictOptions = {}, scope?: dom.ElementHandle): Promise<boolean> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      progress.log(`  checking visibility of ${this._asLocator(selector)}`);\n      return await this.isVisibleInternal(selector, options, scope);\n    }, 0); // Note: isVisible is a one-shot operation without a timeout.\n  }\n\n  async isVisibleInternal(selector: string, options: types.StrictOptions = {}, scope?: dom.ElementHandle): Promise<boolean> {\n    try {\n      const resolved = await this.selectors.resolveInjectedForSelector(selector, options, scope);\n      if (!resolved)\n        return false;\n      return await resolved.injected.evaluate((injected, { info, root }) => {\n        const element = injected.querySelector(info.parsed, root || document, info.strict);\n        const state = element ? injected.elementState(element, 'visible') : { matches: false, received: 'error:notconnected' };\n        return state.matches;\n      }, { info: resolved.info, root: resolved.frame === this ? scope : undefined });\n    } catch (e) {\n      if (js.isJavaScriptErrorInEvaluate(e) || isInvalidSelectorError(e) || isSessionClosedError(e))\n        throw e;\n      return false;\n    }\n  }\n\n  async isHidden(metadata: CallMetadata, selector: string, options: types.StrictOptions = {}, scope?: dom.ElementHandle): Promise<boolean> {\n    return !(await this.isVisible(metadata, selector, options, scope));\n  }\n\n  async isDisabled(metadata: CallMetadata, selector: string, options: types.QueryOnSelectorOptions, scope?: dom.ElementHandle): Promise<boolean> {\n    return this._elementState(metadata, selector, 'disabled', options, scope);\n  }\n\n  async isEnabled(metadata: CallMetadata, selector: string, options: types.QueryOnSelectorOptions, scope?: dom.ElementHandle): Promise<boolean> {\n    return this._elementState(metadata, selector, 'enabled', options, scope);\n  }\n\n  async isEditable(metadata: CallMetadata, selector: string, options: types.QueryOnSelectorOptions, scope?: dom.ElementHandle): Promise<boolean> {\n    return this._elementState(metadata, selector, 'editable', options, scope);\n  }\n\n  async isChecked(metadata: CallMetadata, selector: string, options: types.QueryOnSelectorOptions, scope?: dom.ElementHandle): Promise<boolean> {\n    return this._elementState(metadata, selector, 'checked', options, scope);\n  }\n\n  async hover(metadata: CallMetadata, selector: string, options: types.PointerActionOptions & types.PointerActionWaitOptions) {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._hover(progress, options)));\n    }, options.timeout);\n  }\n\n  async selectOption(metadata: CallMetadata, selector: string, elements: dom.ElementHandle[], values: types.SelectOption[], options: types.CommonActionOptions): Promise<string[]> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      return await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._selectOption(progress, elements, values, options));\n    }, options.timeout);\n  }\n\n  async setInputFiles(metadata: CallMetadata, selector: string, params: channels.FrameSetInputFilesParams): Promise<channels.FrameSetInputFilesResult> {\n    const inputFileItems = await prepareFilesForUpload(this, params);\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, params.strict, true /* performActionPreChecks */, handle => handle._setInputFiles(progress, inputFileItems)));\n    }, params.timeout);\n  }\n\n  async type(metadata: CallMetadata, selector: string, text: string, options: { delay?: number } & types.TimeoutOptions & types.StrictOptions) {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, true /* performActionPreChecks */, handle => handle._type(progress, text, options)));\n    }, options.timeout);\n  }\n\n  async press(metadata: CallMetadata, selector: string, key: string, options: { delay?: number, noWaitAfter?: boolean } & types.TimeoutOptions & types.StrictOptions) {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, true /* performActionPreChecks */, handle => handle._press(progress, key, options)));\n    }, options.timeout);\n  }\n\n  async check(metadata: CallMetadata, selector: string, options: types.PointerActionWaitOptions) {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._setChecked(progress, true, options)));\n    }, options.timeout);\n  }\n\n  async uncheck(metadata: CallMetadata, selector: string, options: types.PointerActionWaitOptions) {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._setChecked(progress, false, options)));\n    }, options.timeout);\n  }\n\n  async waitForTimeout(metadata: CallMetadata, timeout: number) {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async () => {\n      await new Promise(resolve => setTimeout(resolve, timeout));\n    });\n  }\n\n  async ariaSnapshot(metadata: CallMetadata, selector: string, options: { forAI?: boolean } & types.TimeoutOptions): Promise<string> {\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      return await this._retryWithProgressIfNotConnected(progress, selector, true /* strict */, true /* performActionPreChecks */, handle => handle.ariaSnapshot(options));\n    }, options.timeout);\n  }\n\n  async expect(metadata: CallMetadata, selector: string, options: FrameExpectParams): Promise<{ matches: boolean, received?: any, log?: string[], timedOut?: boolean }> {\n    const result = await this._expectImpl(metadata, selector, options);\n    // Library mode special case for the expect errors which are return values, not exceptions.\n    if (result.matches === options.isNot)\n      metadata.error = { error: { name: 'Expect', message: 'Expect failed' } };\n    return result;\n  }\n\n  private async _expectImpl(metadata: CallMetadata, selector: string, options: FrameExpectParams): Promise<{ matches: boolean, received?: any, log?: string[], timedOut?: boolean }> {\n    const lastIntermediateResult: { received?: any, isSet: boolean } = { isSet: false };\n    try {\n      let timeout = options.timeout;\n      const start = timeout > 0 ? monotonicTime() : 0;\n\n      // Step 1: perform locator handlers checkpoint with a specified timeout.\n      await (new ProgressController(metadata, this)).run(async progress => {\n        progress.log(`${renderTitleForCall(metadata)}${timeout ? ` with timeout ${timeout}ms` : ''}`);\n        progress.log(`waiting for ${this._asLocator(selector)}`);\n        await this._page.performActionPreChecks(progress);\n      }, timeout);\n\n      // Step 2: perform one-shot expect check without a timeout.\n      // Supports the case of `expect(locator).toBeVisible({ timeout: 1 })`\n      // that should succeed when the locator is already visible.\n      try {\n        const resultOneShot = await (new ProgressController(metadata, this)).run(async progress => {\n          return await this._expectInternal(progress, selector, options, lastIntermediateResult);\n        });\n        if (resultOneShot.matches !== options.isNot)\n          return resultOneShot;\n      } catch (e) {\n        if (js.isJavaScriptErrorInEvaluate(e) || isInvalidSelectorError(e))\n          throw e;\n        // Ignore any other errors from one-shot, we'll handle them during retries.\n      }\n      if (timeout > 0) {\n        const elapsed = monotonicTime() - start;\n        timeout -= elapsed;\n      }\n      if (timeout < 0)\n        return { matches: options.isNot, log: compressCallLog(metadata.log), timedOut: true, received: lastIntermediateResult.received };\n\n      // Step 3: auto-retry expect with increasing timeouts. Bounded by the total remaining time.\n      return await (new ProgressController(metadata, this)).run(async progress => {\n        return await this.retryWithProgressAndTimeouts(progress, [100, 250, 500, 1000], async continuePolling => {\n          await this._page.performActionPreChecks(progress);\n          const { matches, received } = await this._expectInternal(progress, selector, options, lastIntermediateResult);\n          if (matches === options.isNot) {\n            // Keep waiting in these cases:\n            // expect(locator).conditionThatDoesNotMatch\n            // expect(locator).not.conditionThatDoesMatch\n            return continuePolling;\n          }\n          return { matches, received };\n        });\n      }, timeout);\n    } catch (e) {\n      // Q: Why not throw upon isSessionClosedError(e) as in other places?\n      // A: We want user to receive a friendly message containing the last intermediate result.\n      if (js.isJavaScriptErrorInEvaluate(e) || isInvalidSelectorError(e))\n        throw e;\n      const result: { matches: boolean, received?: any, log?: string[], timedOut?: boolean } = { matches: options.isNot, log: compressCallLog(metadata.log) };\n      if (lastIntermediateResult.isSet)\n        result.received = lastIntermediateResult.received;\n      if (e instanceof TimeoutError)\n        result.timedOut = true;\n      return result;\n    }\n  }\n\n  private async _expectInternal(progress: Progress, selector: string, options: FrameExpectParams, lastIntermediateResult: { received?: any, isSet: boolean }) {\n    const selectorInFrame = await this.selectors.resolveFrameForSelector(selector, { strict: true });\n    progress.throwIfAborted();\n\n    const { frame, info } = selectorInFrame || { frame: this, info: undefined };\n    const world = options.expression === 'to.have.property' ? 'main' : (info?.world ?? 'utility');\n    const context = await frame._context(world);\n    const injected = await context.injectedScript();\n    progress.throwIfAborted();\n\n    const { log, matches, received, missingReceived } = await injected.evaluate(async (injected, { info, options, callId }) => {\n      const elements = info ? injected.querySelectorAll(info.parsed, document) : [];\n      if (callId)\n        injected.markTargetElements(new Set(elements), callId);\n      const isArray = options.expression === 'to.have.count' || options.expression.endsWith('.array');\n      let log = '';\n      if (isArray)\n        log = `  locator resolved to ${elements.length} element${elements.length === 1 ? '' : 's'}`;\n      else if (elements.length > 1)\n        throw injected.strictModeViolationError(info!.parsed, elements);\n      else if (elements.length)\n        log = `  locator resolved to ${injected.previewNode(elements[0])}`;\n      return { log, ...await injected.expect(elements[0], options, elements) };\n    }, { info, options, callId: progress.metadata.id });\n\n    if (log)\n      progress.log(log);\n    // Note: missingReceived avoids `unexpected value \"undefined\"` when element was not found.\n    if (matches === options.isNot) {\n      lastIntermediateResult.received = missingReceived ? '<element(s) not found>' : received;\n      lastIntermediateResult.isSet = true;\n      if (!missingReceived && !Array.isArray(received))\n        progress.log(`  unexpected value \"${renderUnexpectedValue(options.expression, received)}\"`);\n    }\n    return { matches, received };\n  }\n\n  async _waitForFunctionExpression<R>(metadata: CallMetadata, expression: string, isFunction: boolean | undefined, arg: any, options: types.WaitForFunctionOptions, world: types.World = 'main'): Promise<js.SmartHandle<R>> {\n    const controller = new ProgressController(metadata, this);\n    if (typeof options.pollingInterval === 'number')\n      assert(options.pollingInterval > 0, 'Cannot poll with non-positive interval: ' + options.pollingInterval);\n    expression = js.normalizeEvaluationExpression(expression, isFunction);\n    return controller.run(async progress => {\n      return this.retryWithProgressAndTimeouts(progress, [100], async () => {\n        const context = world === 'main' ? await this._mainContext() : await this._utilityContext();\n        const injectedScript = await context.injectedScript();\n        const handle = await injectedScript.evaluateHandle((injected, { expression, isFunction, polling, arg }) => {\n          const predicate = (): R => {\n            // NOTE: make sure to use `globalThis.eval` instead of `self.eval` due to a bug with sandbox isolation\n            // in firefox.\n            // See https://bugzilla.mozilla.org/show_bug.cgi?id=1814898\n            let result = globalThis.eval(expression);\n            if (isFunction === true) {\n              result = result(arg);\n            } else if (isFunction === false) {\n              result = result;\n            } else {\n              // auto detect.\n              if (typeof result === 'function')\n                result = result(arg);\n            }\n            return result;\n          };\n\n          let fulfill: (result: R) => void;\n          let reject: (error: Error) => void;\n          let aborted = false;\n          const result = new Promise<R>((f, r) => { fulfill = f; reject = r; });\n\n          const next = () => {\n            if (aborted)\n              return;\n            try {\n              const success = predicate();\n              if (success) {\n                fulfill(success);\n                return;\n              }\n              if (typeof polling !== 'number')\n                injected.utils.builtins.requestAnimationFrame(next);\n              else\n                injected.utils.builtins.setTimeout(next, polling);\n            } catch (e) {\n              reject(e);\n            }\n          };\n\n          next();\n          return { result, abort: () => aborted = true };\n        }, { expression, isFunction, polling: options.pollingInterval, arg });\n        progress.cleanupWhenAborted(() => handle.evaluate(h => h.abort()).catch(() => {}));\n        return handle.evaluateHandle(h => h.result);\n      });\n    }, options.timeout);\n  }\n\n  async waitForFunctionValueInUtility<R>(progress: Progress, pageFunction: js.Func1<any, R>) {\n    const expression = `() => {\n      const result = (${pageFunction})();\n      if (!result)\n        return result;\n      return JSON.stringify(result);\n    }`;\n    const handle = await this._waitForFunctionExpression(serverSideCallMetadata(), expression, true, undefined, { timeout: progress.timeUntilDeadline() }, 'utility');\n    return JSON.parse(handle.rawValue()) as R;\n  }\n\n  async title(): Promise<string> {\n    const context = await this._utilityContext();\n    return context.evaluate(() => document.title);\n  }\n\n  async rafrafTimeout(timeout: number): Promise<void> {\n    if (timeout === 0)\n      return;\n    const context = await this._utilityContext();\n    await Promise.all([\n      // wait for double raf\n      context.evaluate(() => new Promise(x => {\n        requestAnimationFrame(() => {\n          requestAnimationFrame(x);\n        });\n      })),\n      new Promise(fulfill => setTimeout(fulfill, timeout)),\n    ]);\n  }\n\n  _onDetached() {\n    this._stopNetworkIdleTimer();\n    this._detachedScope.close(new Error('Frame was detached'));\n    for (const data of this._contextData.values()) {\n      if (data.context)\n        data.context.contextDestroyed('Frame was detached');\n      data.contextPromise.resolve({ destroyedReason: 'Frame was detached' });\n    }\n    if (this._parentFrame)\n      this._parentFrame._childFrames.delete(this);\n    this._parentFrame = null;\n  }\n\n  private async _callOnElementOnceMatches<T, R>(metadata: CallMetadata, selector: string, body: ElementCallback<T, R>, taskData: T, options: types.TimeoutOptions & types.StrictOptions & { mainWorld?: boolean }, scope?: dom.ElementHandle): Promise<R> {\n    const callbackText = body.toString();\n    const controller = new ProgressController(metadata, this);\n    return controller.run(async progress => {\n      progress.log(`waiting for ${this._asLocator(selector)}`);\n      const promise = this.retryWithProgressAndTimeouts(progress, [0, 20, 50, 100, 100, 500], async continuePolling => {\n        const resolved = await this.selectors.resolveInjectedForSelector(selector, options, scope);\n        progress.throwIfAborted();\n        if (!resolved)\n          return continuePolling;\n        const { log, success, value } = await resolved.injected.evaluate((injected, { info, callbackText, taskData, callId, root }) => {\n          const callback = injected.eval(callbackText) as ElementCallback<T, R>;\n          const element = injected.querySelector(info.parsed, root || document, info.strict);\n          if (!element)\n            return { success: false };\n          const log = `  locator resolved to ${injected.previewNode(element)}`;\n          if (callId)\n            injected.markTargetElements(new Set([element]), callId);\n          return { log, success: true, value: callback(injected, element, taskData as T) };\n        }, { info: resolved.info, callbackText, taskData, callId: progress.metadata.id, root: resolved.frame === this ? scope : undefined });\n\n        if (log)\n          progress.log(log);\n        if (!success)\n          return continuePolling;\n        return value!;\n      });\n      return scope ? scope._context._raceAgainstContextDestroyed(promise) : promise;\n    }, options.timeout);\n  }\n\n  private _setContext(world: types.World, context: dom.FrameExecutionContext | null) {\n    const data = this._contextData.get(world)!;\n    data.context = context;\n    if (context)\n      data.contextPromise.resolve(context);\n    else\n      data.contextPromise = new ManualPromise();\n  }\n\n  _contextCreated(world: types.World, context: dom.FrameExecutionContext) {\n    const data = this._contextData.get(world)!;\n    // In case of multiple sessions to the same target, there's a race between\n    // connections so we might end up creating multiple isolated worlds.\n    // We can use either.\n    if (data.context) {\n      data.context.contextDestroyed('Execution context was destroyed, most likely because of a navigation');\n      this._setContext(world, null);\n    }\n    this._setContext(world, context);\n  }\n\n  _contextDestroyed(context: dom.FrameExecutionContext) {\n    // Sometimes we get this after detach, in which case we should not reset\n    // our already destroyed contexts to something that will never resolve.\n    if (this._detachedScope.isClosed())\n      return;\n    context.contextDestroyed('Execution context was destroyed, most likely because of a navigation');\n    for (const [world, data] of this._contextData) {\n      if (data.context === context)\n        this._setContext(world, null);\n    }\n  }\n\n  _startNetworkIdleTimer() {\n    assert(!this._networkIdleTimer);\n    // We should not start a timer and report networkidle in detached frames.\n    // This happens at least in Firefox for child frames, where we may get requestFinished\n    // after the frame was detached - probably a race in the Firefox itself.\n    if (this._firedLifecycleEvents.has('networkidle') || this._detachedScope.isClosed())\n      return;\n    this._networkIdleTimer = setTimeout(() => {\n      this._firedNetworkIdleSelf = true;\n      this._page.mainFrame()._recalculateNetworkIdle();\n    }, 500);\n  }\n\n  _stopNetworkIdleTimer() {\n    if (this._networkIdleTimer)\n      clearTimeout(this._networkIdleTimer);\n    this._networkIdleTimer = undefined;\n    this._firedNetworkIdleSelf = false;\n  }\n\n  async extendInjectedScript(source: string, arg?: any): Promise<js.JSHandle> {\n    const context = await this._context('main');\n    const injectedScriptHandle = await context.injectedScript();\n    return injectedScriptHandle.evaluateHandle((injectedScript, { source, arg }) => {\n      return injectedScript.extend(source, arg);\n    }, { source, arg });\n  }\n\n  async resetStorageForCurrentOriginBestEffort(newStorage: channels.SetOriginStorage | undefined) {\n    const context = await this._utilityContext();\n    await context.evaluate(async ({ ls }) => {\n      // Clean DOMStorage.\n      sessionStorage.clear();\n      localStorage.clear();\n\n      // Add new DOM Storage values.\n      for (const entry of ls || [])\n        localStorage[entry.name] = entry.value;\n\n      // Clean Service Workers\n      const registrations = navigator.serviceWorker ? await navigator.serviceWorker.getRegistrations() : [];\n      await Promise.all(registrations.map(async r => {\n        // Heuristic for service workers that stalled during main script fetch or importScripts:\n        // Waiting for them to finish unregistering takes ages so we do not await.\n        // However, they will unregister immediately after fetch finishes and should not affect next page load.\n        // Unfortunately, loading next page in Chromium still takes 5 seconds waiting for\n        // some operation on this bogus service worker to finish.\n        if (!r.installing && !r.waiting && !r.active)\n          r.unregister().catch(() => {});\n        else\n          await r.unregister().catch(() => {});\n      }));\n\n      // Clean IndexedDB\n      for (const db of await indexedDB.databases?.() || []) {\n        // Do not wait for the callback - it is called on timer in Chromium (slow).\n        if (db.name)\n          indexedDB.deleteDatabase(db.name!);\n      }\n    }, { ls: newStorage?.localStorage }).catch(() => {});\n  }\n\n  private _asLocator(selector: string) {\n    return asLocator(this._page.attribution.playwright.options.sdkLanguage, selector);\n  }\n}\n\nclass SignalBarrier {\n  private _progress: Progress | null;\n  private _protectCount = 0;\n  private _promise = new ManualPromise<void>();\n\n  constructor(progress: Progress | null) {\n    this._progress = progress;\n    this.retain();\n  }\n\n  waitFor(): PromiseLike<void> {\n    this.release();\n    return this._promise;\n  }\n\n  async addFrameNavigation(frame: Frame) {\n    // Auto-wait top-level navigations only.\n    if (frame.parentFrame())\n      return;\n    this.retain();\n    const waiter = helper.waitForEvent(null, frame, Frame.Events.InternalNavigation, (e: NavigationEvent) => {\n      if (!e.isPublic)\n        return false;\n      if (!e.error && this._progress)\n        this._progress.log(`  navigated to \"${frame._url}\"`);\n      return true;\n    });\n    await LongStandingScope.raceMultiple([\n      frame._page.openScope,\n      frame._detachedScope,\n    ], waiter.promise).catch(() => {});\n    waiter.dispose();\n    this.release();\n  }\n\n  retain() {\n    ++this._protectCount;\n  }\n\n  release() {\n    --this._protectCount;\n    if (!this._protectCount)\n      this._promise.resolve();\n  }\n}\n\nfunction verifyLifecycle(name: string, waitUntil: types.LifecycleEvent): types.LifecycleEvent {\n  if (waitUntil as unknown === 'networkidle0')\n    waitUntil = 'networkidle';\n  if (!types.kLifecycleEvents.has(waitUntil))\n    throw new Error(`${name}: expected one of (load|domcontentloaded|networkidle|commit)`);\n  return waitUntil;\n}\n\nfunction renderUnexpectedValue(expression: string, received: any): string {\n  if (expression === 'to.match.aria')\n    return received ? received.raw : received;\n  return received;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, calculateSha1, monotonicTime } from '../../utils';\nimport { getPlaywrightVersion, isTextualMimeType, urlMatches } from '../../utils';\nimport { eventsHelper } from '../utils/eventsHelper';\nimport { ManualPromise } from '../../utils/isomorphic/manualPromise';\nimport { mime } from '../../utilsBundle';\nimport { BrowserContext } from '../browserContext';\nimport { APIRequestContext } from '../fetch';\nimport { Frame } from '../frames';\nimport { helper } from '../helper';\nimport * as network from '../network';\n\nimport type { RegisteredListener } from '../utils/eventsHelper';\nimport type { APIRequestEvent, APIRequestFinishedEvent } from '../fetch';\nimport type { Page } from '../page';\nimport type { Worker } from '../page';\nimport type { HeadersArray, LifecycleEvent } from '../types';\nimport type * as har from '@trace/har';\n\nconst FALLBACK_HTTP_VERSION = 'HTTP/1.1';\n\nexport interface HarTracerDelegate {\n  onEntryStarted(entry: har.Entry): void;\n  onEntryFinished(entry: har.Entry): void;\n  onContentBlob(sha1: string, buffer: Buffer): void;\n}\n\ntype HarTracerOptions = {\n  content: 'omit' | 'attach' | 'embed';\n  includeTraceInfo: boolean;\n  recordRequestOverrides: boolean;\n  waitForContentOnStop: boolean;\n  urlFilter?: string | RegExp;\n  slimMode?: boolean;\n  omitSecurityDetails?: boolean;\n  omitCookies?: boolean;\n  omitTiming?: boolean;\n  omitServerIP?: boolean;\n  omitPages?: boolean;\n  omitSizes?: boolean;\n  omitScripts?: boolean;\n};\n\nexport class HarTracer {\n  private _context: BrowserContext | APIRequestContext;\n  private _barrierPromises = new Set<Promise<void>>();\n  private _delegate: HarTracerDelegate;\n  private _options: HarTracerOptions;\n  private _pageEntries = new Map<Page, har.Page>();\n  private _eventListeners: RegisteredListener[] = [];\n  private _started = false;\n  private _entrySymbol: symbol;\n  private _baseURL: string | undefined;\n  private _page: Page | null;\n\n  constructor(context: BrowserContext | APIRequestContext, page: Page | null, delegate: HarTracerDelegate, options: HarTracerOptions) {\n    this._context = context;\n    this._page = page;\n    this._delegate = delegate;\n    this._options = options;\n    if (options.slimMode) {\n      options.omitSecurityDetails = true;\n      options.omitCookies = true;\n      options.omitTiming = true;\n      options.omitServerIP = true;\n      options.omitSizes = true;\n      options.omitPages = true;\n    }\n    this._entrySymbol = Symbol('requestHarEntry');\n    this._baseURL = context instanceof APIRequestContext ? context._defaultOptions().baseURL : context._options.baseURL;\n  }\n\n  start(options: { omitScripts: boolean }) {\n    if (this._started)\n      return;\n    this._options.omitScripts = options.omitScripts;\n    this._started = true;\n    const apiRequest = this._context instanceof APIRequestContext ? this._context : this._context.fetchRequest;\n    this._eventListeners = [\n      eventsHelper.addEventListener(apiRequest, APIRequestContext.Events.Request, (event: APIRequestEvent) => this._onAPIRequest(event)),\n      eventsHelper.addEventListener(apiRequest, APIRequestContext.Events.RequestFinished, (event: APIRequestFinishedEvent) => this._onAPIRequestFinished(event)),\n    ];\n    if (this._context instanceof BrowserContext) {\n      this._eventListeners.push(\n          eventsHelper.addEventListener(this._context, BrowserContext.Events.Page, (page: Page) => this._createPageEntryIfNeeded(page)),\n          eventsHelper.addEventListener(this._context, BrowserContext.Events.Request, (request: network.Request) => this._onRequest(request)),\n          eventsHelper.addEventListener(this._context, BrowserContext.Events.RequestFinished, ({ request, response }) => this._onRequestFinished(request, response).catch(() => {})),\n          eventsHelper.addEventListener(this._context, BrowserContext.Events.RequestFailed, request => this._onRequestFailed(request)),\n          eventsHelper.addEventListener(this._context, BrowserContext.Events.Response, (response: network.Response) => this._onResponse(response)),\n          eventsHelper.addEventListener(this._context, BrowserContext.Events.RequestAborted, request => this._onRequestAborted(request)),\n          eventsHelper.addEventListener(this._context, BrowserContext.Events.RequestFulfilled, request => this._onRequestFulfilled(request)),\n          eventsHelper.addEventListener(this._context, BrowserContext.Events.RequestContinued, request => this._onRequestContinued(request)),\n      );\n      for (const page of this._context.pages())\n        this._createPageEntryIfNeeded(page);\n    }\n  }\n\n  private _shouldIncludeEntryWithUrl(urlString: string) {\n    return !this._options.urlFilter || urlMatches(this._baseURL, urlString, this._options.urlFilter);\n  }\n\n  private _entryForRequest(request: network.Request | APIRequestEvent): har.Entry | undefined {\n    return (request as any)[this._entrySymbol];\n  }\n\n  private _createPageEntryIfNeeded(page?: Page): har.Page | undefined {\n    if (!page)\n      return;\n    if (this._options.omitPages)\n      return;\n    if (this._page && page !== this._page)\n      return;\n    let pageEntry = this._pageEntries.get(page);\n    if (!pageEntry) {\n      const date = new Date();\n      pageEntry = {\n        startedDateTime: date.toISOString(),\n        id: page.guid,\n        title: '',\n        pageTimings: this._options.omitTiming ? {} : {\n          onContentLoad: -1,\n          onLoad: -1,\n        },\n      };\n      (pageEntry as any)[startedDateSymbol] = date;\n\n      page.mainFrame().on(Frame.Events.AddLifecycle, (event: LifecycleEvent) => {\n        if (event === 'load')\n          this._onLoad(page, pageEntry!);\n        if (event === 'domcontentloaded')\n          this._onDOMContentLoaded(page, pageEntry!);\n      });\n\n      this._pageEntries.set(page, pageEntry);\n    }\n    return pageEntry;\n  }\n\n  private _onDOMContentLoaded(page: Page, pageEntry: har.Page) {\n    const promise = page.mainFrame().evaluateExpression(String(() => {\n      return {\n        title: document.title,\n        domContentLoaded: performance.timing.domContentLoadedEventStart,\n      };\n    }), { isFunction: true, world: 'utility' }).then(result => {\n      pageEntry.title = result.title;\n      if (!this._options.omitTiming)\n        pageEntry.pageTimings.onContentLoad = result.domContentLoaded;\n    }).catch(() => {});\n    this._addBarrier(page, promise);\n  }\n\n  private _onLoad(page: Page, pageEntry: har.Page) {\n    const promise = page.mainFrame().evaluateExpression(String(() => {\n      return {\n        title: document.title,\n        loaded: performance.timing.loadEventStart,\n      };\n    }), { isFunction: true, world: 'utility' }).then(result => {\n      pageEntry.title = result.title;\n      if (!this._options.omitTiming)\n        pageEntry.pageTimings.onLoad = result.loaded;\n    }).catch(() => {});\n    this._addBarrier(page, promise);\n  }\n\n  private _addBarrier(target: Page | Worker | null, promise: Promise<void>) {\n    if (!target)\n      return null;\n    if (!this._options.waitForContentOnStop)\n      return;\n    const race = target.openScope.safeRace(promise);\n    this._barrierPromises.add(race);\n    race.then(() => this._barrierPromises.delete(race));\n  }\n\n  private _onAPIRequest(event: APIRequestEvent) {\n    if (!this._shouldIncludeEntryWithUrl(event.url.toString()))\n      return;\n    const harEntry = createHarEntry(event.method, event.url, undefined, this._options);\n    harEntry._apiRequest = true;\n    if (!this._options.omitCookies)\n      harEntry.request.cookies = event.cookies;\n    harEntry.request.headers = Object.entries(event.headers).map(([name, value]) => ({ name, value }));\n    harEntry.request.postData = this._postDataForBuffer(event.postData || null, event.headers['content-type'],  this._options.content);\n    if (!this._options.omitSizes)\n      harEntry.request.bodySize = event.postData?.length || 0;\n    (event as any)[this._entrySymbol] = harEntry;\n    if (this._started)\n      this._delegate.onEntryStarted(harEntry);\n  }\n\n  private _onAPIRequestFinished(event: APIRequestFinishedEvent): void {\n    const harEntry = this._entryForRequest(event.requestEvent);\n    if (!harEntry)\n      return;\n\n    harEntry.response.status = event.statusCode;\n    harEntry.response.statusText = event.statusMessage;\n    harEntry.response.httpVersion = event.httpVersion;\n    harEntry.response.redirectURL = event.headers.location || '';\n\n    if (!this._options.omitServerIP) {\n      harEntry.serverIPAddress = event.serverIPAddress;\n      harEntry._serverPort = event.serverPort;\n    }\n\n    if (!this._options.omitTiming) {\n      harEntry.timings = event.timings;\n      this._computeHarEntryTotalTime(harEntry);\n    }\n\n    if (!this._options.omitSecurityDetails)\n      harEntry._securityDetails = event.securityDetails;\n\n    for (let i = 0; i < event.rawHeaders.length; i += 2) {\n      harEntry.response.headers.push({\n        name: event.rawHeaders[i],\n        value: event.rawHeaders[i + 1]\n      });\n    }\n    harEntry.response.cookies = this._options.omitCookies ? [] : event.cookies.map(c => {\n      return {\n        ...c,\n        expires: c.expires === -1 ? undefined : safeDateToISOString(c.expires)\n      };\n    });\n\n    const content = harEntry.response.content;\n    const contentType = event.headers['content-type'];\n    if (contentType)\n      content.mimeType = contentType;\n    this._storeResponseContent(event.body, content, 'other');\n    if (!this._options.omitSizes)\n      harEntry.response.bodySize = event.body?.length ?? 0;\n\n    if (this._started)\n      this._delegate.onEntryFinished(harEntry);\n  }\n\n  private _onRequest(request: network.Request) {\n    if (!this._shouldIncludeEntryWithUrl(request.url()))\n      return;\n    const page = request.frame()?._page;\n    if (this._page && page !== this._page)\n      return;\n    const url = network.parseURL(request.url());\n    if (!url)\n      return;\n\n    const pageEntry = this._createPageEntryIfNeeded(page);\n    const harEntry = createHarEntry(request.method(), url, request.frame()?.guid, this._options);\n    if (pageEntry)\n      harEntry.pageref = pageEntry.id;\n    this._recordRequestHeadersAndCookies(harEntry, request.headers());\n    harEntry.request.postData = this._postDataForRequest(request, this._options.content);\n    if (!this._options.omitSizes)\n      harEntry.request.bodySize = request.bodySize();\n    if (request.redirectedFrom()) {\n      const fromEntry = this._entryForRequest(request.redirectedFrom()!);\n      if (fromEntry)\n        fromEntry.response.redirectURL = request.url();\n    }\n    (request as any)[this._entrySymbol] = harEntry;\n    assert(this._started);\n    this._delegate.onEntryStarted(harEntry);\n  }\n\n  private _recordRequestHeadersAndCookies(harEntry: har.Entry, headers: HeadersArray) {\n    if (!this._options.omitCookies) {\n      harEntry.request.cookies = [];\n      for (const header of headers.filter(header => header.name.toLowerCase() === 'cookie'))\n        harEntry.request.cookies.push(...header.value.split(';').map(parseCookie));\n    }\n    harEntry.request.headers = headers;\n  }\n\n  private _recordRequestOverrides(harEntry: har.Entry, request: network.Request) {\n    if (!request.overrides() || !this._options.recordRequestOverrides)\n      return;\n    harEntry.request.method = request.method();\n    harEntry.request.url = request.url();\n    harEntry.request.postData = this._postDataForRequest(request, this._options.content);\n    this._recordRequestHeadersAndCookies(harEntry, request.headers());\n  }\n\n  private async _onRequestFinished(request: network.Request, response: network.Response | null) {\n    if (!response)\n      return;\n    const harEntry = this._entryForRequest(request);\n    if (!harEntry)\n      return;\n    const page = request.frame()?._page;\n\n    // In WebKit security details and server ip are reported in Network.loadingFinished, so we populate\n    // it here to not hang in case of long chunked responses, see https://github.com/microsoft/playwright/issues/21182.\n    if (!this._options.omitServerIP) {\n      this._addBarrier(page || request.serviceWorker(), response.serverAddr().then(server => {\n        if (server?.ipAddress)\n          harEntry.serverIPAddress = server.ipAddress;\n        if (server?.port)\n          harEntry._serverPort = server.port;\n      }));\n    }\n    if (!this._options.omitSecurityDetails) {\n      this._addBarrier(page || request.serviceWorker(), response.securityDetails().then(details => {\n        if (details)\n          harEntry._securityDetails = details;\n      }));\n    }\n\n    const httpVersion = response.httpVersion();\n    harEntry.request.httpVersion = httpVersion;\n    harEntry.response.httpVersion = httpVersion;\n\n    const compressionCalculationBarrier = this._options.omitSizes ? undefined : {\n      _encodedBodySize: -1,\n      _decodedBodySize: -1,\n      barrier: new ManualPromise<void>(),\n      _check: function() {\n        if (this._encodedBodySize !== -1 && this._decodedBodySize !== -1) {\n          harEntry.response.content.compression = Math.max(0, this._decodedBodySize - this._encodedBodySize);\n          this.barrier.resolve();\n        }\n      },\n      setEncodedBodySize: function(encodedBodySize: number){\n        this._encodedBodySize = encodedBodySize;\n        this._check();\n      },\n      setDecodedBodySize: function(decodedBodySize: number) {\n        this._decodedBodySize = decodedBodySize;\n        this._check();\n      }\n    };\n    if (compressionCalculationBarrier)\n      this._addBarrier(page || request.serviceWorker(), compressionCalculationBarrier.barrier);\n\n    const promise = response.body().then(buffer => {\n      if (this._options.omitScripts && request.resourceType() === 'script') {\n        compressionCalculationBarrier?.setDecodedBodySize(0);\n        return;\n      }\n\n      const content = harEntry.response.content;\n      compressionCalculationBarrier?.setDecodedBodySize(buffer.length);\n      this._storeResponseContent(buffer, content, request.resourceType());\n    }).catch(() => {\n      compressionCalculationBarrier?.setDecodedBodySize(0);\n    }).then(() => {\n      if (this._started)\n        this._delegate.onEntryFinished(harEntry);\n    });\n    this._addBarrier(page || request.serviceWorker(), promise);\n\n    // Response end timing is only available after the response event was received.\n    const timing = response.timing();\n    harEntry.timings.receive = response.request()._responseEndTiming !== -1 ? helper.millisToRoundishMillis(response.request()._responseEndTiming - timing.responseStart) : -1;\n    this._computeHarEntryTotalTime(harEntry);\n\n    if (!this._options.omitSizes) {\n      this._addBarrier(page || request.serviceWorker(), response.sizes().then(sizes => {\n        harEntry.response.bodySize = sizes.responseBodySize;\n        harEntry.response.headersSize = sizes.responseHeadersSize;\n        harEntry.response._transferSize = sizes.transferSize;\n        harEntry.request.headersSize = sizes.requestHeadersSize;\n        compressionCalculationBarrier?.setEncodedBodySize(sizes.responseBodySize);\n      }));\n    }\n  }\n\n  private async _onRequestFailed(request: network.Request) {\n    const harEntry = this._entryForRequest(request);\n    if (!harEntry)\n      return;\n\n    if (request._failureText !== null)\n      harEntry.response._failureText = request._failureText;\n    this._recordRequestOverrides(harEntry, request);\n    if (this._started)\n      this._delegate.onEntryFinished(harEntry);\n  }\n\n  private _onRequestAborted(request: network.Request) {\n    const harEntry = this._entryForRequest(request);\n    if (harEntry)\n      harEntry._wasAborted = true;\n  }\n\n  private _onRequestFulfilled(request: network.Request) {\n    const harEntry = this._entryForRequest(request);\n    if (harEntry)\n      harEntry._wasFulfilled = true;\n  }\n\n  private _onRequestContinued(request: network.Request) {\n    const harEntry = this._entryForRequest(request);\n    if (harEntry)\n      harEntry._wasContinued = true;\n  }\n\n  private _storeResponseContent(buffer: Buffer | undefined, content: har.Content, resourceType: string) {\n    if (!buffer) {\n      content.size = 0;\n      return;\n    }\n\n    if (!this._options.omitSizes)\n      content.size = buffer.length;\n\n    if (this._options.content === 'embed') {\n      // Sometimes, we can receive a font/media file with textual mime type. Browser\n      // still interprets them correctly, but the 'content-type' header is obviously wrong.\n      if (isTextualMimeType(content.mimeType) && resourceType !== 'font') {\n        content.text = buffer.toString();\n      } else {\n        content.text = buffer.toString('base64');\n        content.encoding = 'base64';\n      }\n    } else if (this._options.content === 'attach') {\n      const sha1 = calculateSha1(buffer) + '.' + (mime.getExtension(content.mimeType) || 'dat');\n      if (this._options.includeTraceInfo)\n        content._sha1 = sha1;\n      else\n        content._file = sha1;\n      if (this._started)\n        this._delegate.onContentBlob(sha1, buffer);\n    }\n  }\n\n  private _onResponse(response: network.Response) {\n    const harEntry = this._entryForRequest(response.request());\n    if (!harEntry)\n      return;\n    const page = response.frame()?._page;\n    const pageEntry = this._createPageEntryIfNeeded(page);\n    const request = response.request();\n\n    harEntry.response = {\n      status: response.status(),\n      statusText: response.statusText(),\n      httpVersion: response.httpVersion(),\n      // These are bad values that will be overwritten below.\n      cookies: [],\n      headers: [],\n      content: {\n        size: -1,\n        mimeType: 'x-unknown',\n      },\n      headersSize: -1,\n      bodySize: -1,\n      redirectURL: '',\n      _transferSize: this._options.omitSizes ? undefined : -1\n    };\n\n    if (!this._options.omitTiming) {\n      const startDateTime = pageEntry ? ((pageEntry as any)[startedDateSymbol] as Date).valueOf() : 0;\n      const timing = response.timing();\n      if (pageEntry && startDateTime > timing.startTime)\n        pageEntry.startedDateTime = new Date(timing.startTime).toISOString();\n      const dns = timing.domainLookupEnd !== -1 ? helper.millisToRoundishMillis(timing.domainLookupEnd - timing.domainLookupStart) : -1;\n      const connect = timing.connectEnd !== -1 ? helper.millisToRoundishMillis(timing.connectEnd - timing.connectStart) : -1;\n      const ssl = timing.connectEnd !== -1 ? helper.millisToRoundishMillis(timing.connectEnd - timing.secureConnectionStart) : -1;\n      const wait = timing.responseStart !== -1 ? helper.millisToRoundishMillis(timing.responseStart - timing.requestStart) : -1;\n      const receive = -1;\n\n      harEntry.timings = {\n        dns,\n        connect,\n        ssl,\n        send: 0,\n        wait,\n        receive,\n      };\n      this._computeHarEntryTotalTime(harEntry);\n    }\n\n    this._recordRequestOverrides(harEntry, request);\n    this._addBarrier(page || request.serviceWorker(), request.rawRequestHeaders().then(headers => {\n      this._recordRequestHeadersAndCookies(harEntry, headers);\n    }));\n    // Record available headers including redirect location in case the tracing is stopped before\n    // response extra info is received (in Chromium).\n    this._recordResponseHeaders(harEntry, response.headers());\n    this._addBarrier(page || request.serviceWorker(), response.rawResponseHeaders().then(headers => {\n      this._recordResponseHeaders(harEntry, headers);\n    }));\n  }\n\n  private _recordResponseHeaders(harEntry: har.Entry, headers: HeadersArray) {\n    if (!this._options.omitCookies) {\n      harEntry.response.cookies = headers\n          .filter(header => header.name.toLowerCase() === 'set-cookie')\n          .map(header => parseCookie(header.value));\n    }\n    harEntry.response.headers = headers;\n    const contentType = headers.find(header => header.name.toLowerCase() === 'content-type');\n    if (contentType)\n      harEntry.response.content.mimeType = contentType.value;\n  }\n\n  private _computeHarEntryTotalTime(harEntry: har.Entry) {\n    harEntry.time = [\n      harEntry.timings.dns,\n      harEntry.timings.connect,\n      harEntry.timings.ssl,\n      harEntry.timings.wait,\n      harEntry.timings.receive\n    ].reduce((pre, cur) => (cur || -1) > 0 ? cur! + pre! : pre, 0)!;\n  }\n\n  async flush() {\n    await Promise.all(this._barrierPromises);\n  }\n\n  stop() {\n    this._started = false;\n    eventsHelper.removeEventListeners(this._eventListeners);\n    this._barrierPromises.clear();\n\n    const context = this._context instanceof BrowserContext ? this._context : undefined;\n    const log: har.Log = {\n      version: '1.2',\n      creator: {\n        name: 'Playwright',\n        version: getPlaywrightVersion(),\n      },\n      browser: {\n        name: context?._browser.options.name || '',\n        version: context?._browser.version() || ''\n      },\n      pages: this._pageEntries.size ? Array.from(this._pageEntries.values()) : undefined,\n      entries: [],\n    };\n    if (!this._options.omitTiming) {\n      for (const pageEntry of log.pages || []) {\n        const startDateTime = ((pageEntry as any)[startedDateSymbol] as Date).valueOf();\n        if (typeof pageEntry.pageTimings.onContentLoad === 'number' && pageEntry.pageTimings.onContentLoad >= 0)\n          pageEntry.pageTimings.onContentLoad -= startDateTime;\n        else\n          pageEntry.pageTimings.onContentLoad = -1;\n        if (typeof pageEntry.pageTimings.onLoad === 'number' && pageEntry.pageTimings.onLoad >= 0)\n          pageEntry.pageTimings.onLoad -= startDateTime;\n        else\n          pageEntry.pageTimings.onLoad = -1;\n      }\n    }\n    this._pageEntries.clear();\n    return log;\n  }\n\n  private _postDataForRequest(request: network.Request, content: 'omit' | 'attach' | 'embed'): har.PostData | undefined {\n    const postData = request.postDataBuffer();\n    if (!postData)\n      return;\n\n    const contentType = request.headerValue('content-type');\n    return this._postDataForBuffer(postData, contentType, content);\n  }\n\n  private  _postDataForBuffer(postData: Buffer | null, contentType: string | undefined, content: 'omit' | 'attach' | 'embed'): har.PostData | undefined {\n    if (!postData)\n      return;\n\n    contentType ??= 'application/octet-stream';\n\n    const result: har.PostData = {\n      mimeType: contentType,\n      text: '',\n      params: []\n    };\n\n    if (content === 'embed' && contentType !== 'application/octet-stream')\n      result.text = postData.toString();\n\n    if (content === 'attach') {\n      const sha1 = calculateSha1(postData) + '.' + (mime.getExtension(contentType) || 'dat');\n      if (this._options.includeTraceInfo)\n        result._sha1 = sha1;\n      else\n        result._file = sha1;\n      this._delegate.onContentBlob(sha1, postData);\n    }\n\n    if (contentType === 'application/x-www-form-urlencoded') {\n      const parsed = new URLSearchParams(postData.toString());\n      for (const [name, value] of parsed.entries())\n        result.params.push({ name, value });\n    }\n\n    return result;\n  }\n\n}\n\nfunction createHarEntry(method: string, url: URL, frameref: string | undefined, options: HarTracerOptions): har.Entry {\n  const harEntry: har.Entry = {\n    _frameref: options.includeTraceInfo ? frameref : undefined,\n    _monotonicTime: options.includeTraceInfo ? monotonicTime() : undefined,\n    startedDateTime: new Date().toISOString(),\n    time: -1,\n    request: {\n      method: method,\n      url: url.toString(),\n      httpVersion: FALLBACK_HTTP_VERSION,\n      cookies: [],\n      headers: [],\n      queryString: [...url.searchParams].map(e => ({ name: e[0], value: e[1] })),\n      headersSize: -1,\n      bodySize: -1,\n    },\n    response: {\n      status: -1,\n      statusText: '',\n      httpVersion: FALLBACK_HTTP_VERSION,\n      cookies: [],\n      headers: [],\n      content: {\n        size: -1,\n        mimeType: 'x-unknown',\n      },\n      headersSize: -1,\n      bodySize: -1,\n      redirectURL: '',\n      _transferSize: options.omitSizes ? undefined : -1\n    },\n    cache: {},\n    timings: {\n      send: -1,\n      wait: -1,\n      receive: -1\n    },\n  };\n  return harEntry;\n}\n\nfunction parseCookie(c: string): har.Cookie {\n  const cookie: har.Cookie = {\n    name: '',\n    value: ''\n  };\n  let first = true;\n  for (const pair of c.split(/; */)) {\n    const indexOfEquals = pair.indexOf('=');\n    const name = indexOfEquals !== -1 ? pair.substr(0, indexOfEquals).trim() : pair.trim();\n    const value = indexOfEquals !== -1 ? pair.substr(indexOfEquals + 1, pair.length).trim() : '';\n    if (first) {\n      first = false;\n      cookie.name = name;\n      cookie.value = value;\n      continue;\n    }\n\n    if (name === 'Domain')\n      cookie.domain = value;\n    if (name === 'Expires')\n      cookie.expires = safeDateToISOString(value);\n    if (name === 'HttpOnly')\n      cookie.httpOnly = true;\n    if (name === 'Max-Age')\n      cookie.expires = safeDateToISOString(Date.now() + (+value) * 1000);\n    if (name === 'Path')\n      cookie.path = value;\n    if (name === 'SameSite')\n      cookie.sameSite = value;\n    if (name === 'Secure')\n      cookie.secure = true;\n  }\n  return cookie;\n}\n\nfunction safeDateToISOString(value: string | number) {\n  try {\n    return new Date(value).toISOString();\n  } catch (e) {\n  }\n}\n\nconst startedDateSymbol = Symbol('startedDate');\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport { Artifact } from '../artifact';\nimport { HarTracer } from './harTracer';\nimport { createGuid } from '../utils/crypto';\nimport { ManualPromise } from '../../utils/isomorphic/manualPromise';\nimport { yazl } from '../../zipBundle';\n\nimport type { BrowserContext } from '../browserContext';\nimport type { HarTracerDelegate } from './harTracer';\nimport type { ZipFile } from '../../zipBundle';\nimport type { Page } from '../page';\nimport type * as channels from '@protocol/channels';\nimport type * as har from '@trace/har';\nimport type EventEmitter from 'events';\n\nexport class HarRecorder implements HarTracerDelegate {\n  private _artifact: Artifact;\n  private _isFlushed: boolean = false;\n  private _tracer: HarTracer;\n  private _entries: har.Entry[] = [];\n  private _zipFile: ZipFile | null = null;\n  private _writtenZipEntries = new Set<string>();\n\n  constructor(context: BrowserContext, page: Page | null, options: channels.RecordHarOptions) {\n    this._artifact = new Artifact(context, path.join(context._browser.options.artifactsDir, `${createGuid()}.har`));\n    const urlFilterRe = options.urlRegexSource !== undefined && options.urlRegexFlags !== undefined ? new RegExp(options.urlRegexSource, options.urlRegexFlags) : undefined;\n    const expectsZip = !!options.zip;\n    const content = options.content || (expectsZip ? 'attach' : 'embed');\n    this._tracer = new HarTracer(context, page, this, {\n      content,\n      slimMode: options.mode === 'minimal',\n      includeTraceInfo: false,\n      recordRequestOverrides: true,\n      waitForContentOnStop: true,\n      urlFilter: urlFilterRe ?? options.urlGlob,\n    });\n    this._zipFile = content === 'attach' || expectsZip ? new yazl.ZipFile() : null;\n    this._tracer.start({ omitScripts: false });\n  }\n\n  onEntryStarted(entry: har.Entry) {\n    this._entries.push(entry);\n  }\n\n  onEntryFinished(entry: har.Entry) {\n  }\n\n  onContentBlob(sha1: string, buffer: Buffer) {\n    if (!this._zipFile || this._writtenZipEntries.has(sha1))\n      return;\n    this._writtenZipEntries.add(sha1);\n    this._zipFile!.addBuffer(buffer, sha1);\n  }\n\n  async flush() {\n    if (this._isFlushed)\n      return;\n    this._isFlushed = true;\n    await this._tracer.flush();\n\n    const log = this._tracer.stop();\n    log.entries = this._entries;\n\n    const harFileContent = jsonStringify({ log });\n\n    if (this._zipFile) {\n      const result = new ManualPromise<void>();\n      (this._zipFile as unknown as EventEmitter).on('error', error => result.reject(error));\n      this._zipFile.addBuffer(Buffer.from(harFileContent, 'utf-8'), 'har.har');\n      this._zipFile.end();\n      this._zipFile.outputStream.pipe(fs.createWriteStream(this._artifact.localPath())).on('close', () => {\n        result.resolve();\n      });\n      await result;\n    } else {\n      await fs.promises.writeFile(this._artifact.localPath(), harFileContent);\n    }\n  }\n\n  async export(): Promise<Artifact> {\n    await this.flush();\n    this._artifact.reportFinished();\n    return this._artifact;\n  }\n}\n\nfunction jsonStringify(object: any): string {\n  const tokens: string[] = [];\n  innerJsonStringify(object, tokens, '', false, undefined);\n  return tokens.join('');\n}\n\nfunction innerJsonStringify(object: any, tokens: string[], indent: string, flat: boolean, parentKey: string | undefined) {\n  if (typeof object !== 'object' || object === null) {\n    tokens.push(JSON.stringify(object));\n    return;\n  }\n\n  const isArray = Array.isArray(object);\n  if (!isArray && object.constructor.name !== 'Object') {\n    tokens.push(JSON.stringify(object));\n    return;\n  }\n\n  const entries = isArray ? object : Object.entries(object).filter(e => e[1] !== undefined);\n  if (!entries.length) {\n    tokens.push(isArray ? `[]` : `{}`);\n    return;\n  }\n\n  const childIndent = `${indent}  `;\n  let brackets: { open: string, close: string };\n  if (isArray)\n    brackets = flat ? { open: '[', close: ']' } : { open: `[\\n${childIndent}`, close: `\\n${indent}]` };\n  else\n    brackets = flat ? { open: '{ ', close: ' }' } : { open: `{\\n${childIndent}`, close: `\\n${indent}}` };\n\n  tokens.push(brackets.open);\n\n  for (let i = 0; i < entries.length; ++i) {\n    const entry = entries[i];\n    if (i)\n      tokens.push(flat ? `, ` : `,\\n${childIndent}`);\n    if (!isArray)\n      tokens.push(`${JSON.stringify(entry[0])}: `);\n    const key = isArray ? undefined : entry[0];\n    const flatten = flat || key === 'timings' || parentKey === 'headers';\n    innerJsonStringify(isArray ? entry : entry[1], tokens, childIndent, flatten, key);\n  }\n\n  tokens.push(brackets.close);\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { BrowserContextOptions } from '../../..';\nimport type * as types from '../types';\nimport type { LanguageGenerator, LanguageGeneratorOptions } from './types';\nimport type * as actions from '@recorder/actions';\n\nexport function generateCode(actions: actions.ActionInContext[], languageGenerator: LanguageGenerator, options: LanguageGeneratorOptions) {\n  let includeContext = false;\n  if (actions.some(a => a.action.name === 'openPage' && a.frame.pageAlias !== 'page'))\n    includeContext = true;\n  const header = languageGenerator.generateHeader(options, includeContext);\n  const footer = languageGenerator.generateFooter(options.saveStorage);\n  const actionTexts = actions.map(a => languageGenerator.generateAction(a)).filter(Boolean);\n  const text = [header, ...actionTexts, footer].join('\\n');\n  return { header, footer, actionTexts, text };\n}\n\nexport function sanitizeDeviceOptions(device: any, options: BrowserContextOptions): BrowserContextOptions {\n  // Filter out all the properties from the device descriptor.\n  const cleanedOptions: Record<string, any> = {};\n  for (const property in options) {\n    if (JSON.stringify(device[property]) !== JSON.stringify((options as any)[property]))\n      cleanedOptions[property] = (options as any)[property];\n  }\n  return cleanedOptions;\n}\n\nexport function toSignalMap(action: actions.Action) {\n  let popup: actions.PopupSignal | undefined;\n  let download: actions.DownloadSignal | undefined;\n  let dialog: actions.DialogSignal | undefined;\n  for (const signal of action.signals) {\n    if (signal.name === 'popup')\n      popup = signal;\n    else if (signal.name === 'download')\n      download = signal;\n    else if (signal.name === 'dialog')\n      dialog = signal;\n  }\n  return {\n    popup,\n    download,\n    dialog,\n  };\n}\n\nexport function toKeyboardModifiers(modifiers: number): types.SmartKeyboardModifier[] {\n  const result: types.SmartKeyboardModifier[] = [];\n  if (modifiers & 1)\n    result.push('Alt');\n  if (modifiers & 2)\n    result.push('ControlOrMeta');\n  if (modifiers & 4)\n    result.push('ControlOrMeta');\n  if (modifiers & 8)\n    result.push('Shift');\n  return result;\n}\n\nexport function fromKeyboardModifiers(modifiers?: types.SmartKeyboardModifier[]): number {\n  let result = 0;\n  if (!modifiers)\n    return result;\n  if (modifiers.includes('Alt'))\n    result |= 1;\n  if (modifiers.includes('Control'))\n    result |= 2;\n  if (modifiers.includes('ControlOrMeta'))\n    result |= 2;\n  if (modifiers.includes('Meta'))\n    result |= 4;\n  if (modifiers.includes('Shift'))\n    result |= 8;\n  return result;\n}\n\nexport function toClickOptionsForSourceCode(action: actions.ClickAction): types.MouseClickOptions {\n  const modifiers = toKeyboardModifiers(action.modifiers);\n  const options: types.MouseClickOptions = {};\n  if (action.button !== 'left')\n    options.button = action.button;\n  if (modifiers.length)\n    options.modifiers = modifiers;\n  // Do not render clickCount === 2 for dblclick.\n  if (action.clickCount > 2)\n    options.clickCount = action.clickCount;\n  if (action.position)\n    options.position = action.position;\n  return options;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { renderTitleForCall } from '../../utils/isomorphic/protocolFormatter';\n\nimport type { Frame } from '../frames';\nimport type { CallMetadata } from '../instrumentation';\nimport type { Page } from '../page';\nimport type * as actions from '@recorder/actions';\nimport type { CallLog, CallLogStatus } from '@recorder/recorderTypes';\n\nexport function buildFullSelector(framePath: string[], selector: string) {\n  return [...framePath, selector].join(' >> internal:control=enter-frame >> ');\n}\n\nexport function metadataToCallLog(metadata: CallMetadata, status: CallLogStatus): CallLog {\n  const title = renderTitleForCall(metadata);\n  if (metadata.error)\n    status = 'error';\n  const params = {\n    url: metadata.params?.url,\n    selector: metadata.params?.selector,\n  };\n  let duration = metadata.endTime ? metadata.endTime - metadata.startTime : undefined;\n  if (typeof duration === 'number' && metadata.pauseStartTime && metadata.pauseEndTime) {\n    duration -= (metadata.pauseEndTime - metadata.pauseStartTime);\n    duration = Math.max(duration, 0);\n  }\n  const callLog: CallLog = {\n    id: metadata.id,\n    messages: metadata.log,\n    title: title ?? '',\n    status,\n    error: metadata.error?.error?.message,\n    params,\n    duration,\n  };\n  return callLog;\n}\n\nexport function mainFrameForAction(pageAliases: Map<Page, string>, actionInContext: actions.ActionInContext): Frame {\n  const pageAlias = actionInContext.frame.pageAlias;\n  const page = [...pageAliases.entries()].find(([, alias]) => pageAlias === alias)?.[0];\n  if (!page)\n    throw new Error(`Internal error: page ${pageAlias} not found in [${[...pageAliases.values()]}]`);\n  return page.mainFrame();\n}\n\nexport async function frameForAction(pageAliases: Map<Page, string>, actionInContext: actions.ActionInContext, action: actions.ActionWithSelector): Promise<Frame> {\n  const pageAlias = actionInContext.frame.pageAlias;\n  const page = [...pageAliases.entries()].find(([, alias]) => pageAlias === alias)?.[0];\n  if (!page)\n    throw new Error('Internal error: page not found');\n  const fullSelector = buildFullSelector(actionInContext.frame.framePath, action.selector);\n  const result = await page.mainFrame().selectors.resolveFrameForSelector(fullSelector);\n  if (!result)\n    throw new Error('Internal error: frame not found');\n  return result.frame;\n}\n\nexport function collapseActions(actions: actions.ActionInContext[]): actions.ActionInContext[] {\n  const result: actions.ActionInContext[] = [];\n  for (const action of actions) {\n    const lastAction = result[result.length - 1];\n    const isSameAction = lastAction && lastAction.action.name === action.action.name && lastAction.frame.pageAlias === action.frame.pageAlias && lastAction.frame.framePath.join('|') === action.frame.framePath.join('|');\n    const isSameSelector = lastAction && 'selector' in lastAction.action && 'selector' in action.action && action.action.selector === lastAction.action.selector;\n    const shouldMerge = isSameAction && (action.action.name === 'navigate' || (action.action.name === 'fill' && isSameSelector));\n    if (!shouldMerge) {\n      result.push(action);\n      continue;\n    }\n    const startTime = result[result.length - 1].startTime;\n    result[result.length - 1] = action;\n    result[result.length - 1].startTime = startTime;\n  }\n  return result;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { serializeExpectedTextValues } from '../../utils';\nimport { toKeyboardModifiers } from '../codegen/language';\nimport { serverSideCallMetadata } from '../instrumentation';\nimport { buildFullSelector, mainFrameForAction } from './recorderUtils';\n\nimport type { Page } from '../page';\nimport type * as types from '../types';\nimport type * as actions from '@recorder/actions';\n\nexport async function performAction(pageAliases: Map<Page, string>, actionInContext: actions.ActionInContext) {\n  const callMetadata = serverSideCallMetadata();\n  const mainFrame = mainFrameForAction(pageAliases, actionInContext);\n  const { action } = actionInContext;\n\n  const kActionTimeout = 5000;\n\n  if (action.name === 'navigate') {\n    await mainFrame.goto(callMetadata, action.url, { timeout: kActionTimeout });\n    return;\n  }\n\n  if (action.name === 'openPage')\n    throw Error('Not reached');\n\n  if (action.name === 'closePage') {\n    await mainFrame._page.close(callMetadata);\n    return;\n  }\n\n  const selector = buildFullSelector(actionInContext.frame.framePath, action.selector);\n\n  if (action.name === 'click') {\n    const options = toClickOptions(action);\n    await mainFrame.click(callMetadata, selector, { ...options, timeout: kActionTimeout, strict: true });\n    return;\n  }\n\n  if (action.name === 'press') {\n    const modifiers = toKeyboardModifiers(action.modifiers);\n    const shortcut = [...modifiers, action.key].join('+');\n    await mainFrame.press(callMetadata, selector, shortcut, { timeout: kActionTimeout, strict: true });\n    return;\n  }\n\n  if (action.name === 'fill') {\n    await mainFrame.fill(callMetadata, selector, action.text, { timeout: kActionTimeout, strict: true });\n    return;\n  }\n\n  if (action.name === 'setInputFiles') {\n    await mainFrame.setInputFiles(callMetadata, selector, { selector, payloads: [], timeout: kActionTimeout, strict: true });\n    return;\n  }\n\n  if (action.name === 'check') {\n    await mainFrame.check(callMetadata, selector, { timeout: kActionTimeout, strict: true });\n    return;\n  }\n\n  if (action.name === 'uncheck') {\n    await mainFrame.uncheck(callMetadata, selector, { timeout: kActionTimeout, strict: true });\n    return;\n  }\n\n  if (action.name === 'select') {\n    const values = action.options.map(value => ({ value }));\n    await mainFrame.selectOption(callMetadata, selector, [], values, { timeout: kActionTimeout, strict: true });\n    return;\n  }\n\n  if (action.name === 'assertChecked') {\n    await mainFrame.expect(callMetadata, selector, {\n      selector,\n      expression: 'to.be.checked',\n      expectedValue: { checked: action.checked },\n      isNot: !action.checked,\n      timeout: kActionTimeout,\n    });\n    return;\n  }\n\n  if (action.name === 'assertText') {\n    await mainFrame.expect(callMetadata, selector, {\n      selector,\n      expression: 'to.have.text',\n      expectedText: serializeExpectedTextValues([action.text], { matchSubstring: true, normalizeWhiteSpace: true }),\n      isNot: false,\n      timeout: kActionTimeout,\n    });\n    return;\n  }\n\n  if (action.name === 'assertValue') {\n    await mainFrame.expect(callMetadata, selector, {\n      selector,\n      expression: 'to.have.value',\n      expectedValue: action.value,\n      isNot: false,\n      timeout: kActionTimeout,\n    });\n    return;\n  }\n\n  if (action.name === 'assertVisible') {\n    await mainFrame.expect(callMetadata, selector, {\n      selector,\n      expression: 'to.be.visible',\n      isNot: false,\n      timeout: kActionTimeout,\n    });\n    return;\n  }\n\n  throw new Error('Internal error: unexpected action ' + (action as any).name);\n}\n\nexport function toClickOptions(action: actions.ClickAction): types.MouseClickOptions {\n  const modifiers = toKeyboardModifiers(action.modifiers);\n  const options: types.MouseClickOptions = {};\n  if (action.button !== 'left')\n    options.button = action.button;\n  if (modifiers.length)\n    options.modifiers = modifiers;\n  if (action.clickCount > 1)\n    options.clickCount = action.clickCount;\n  if (action.position)\n    options.position = action.position;\n  return options;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport { performAction } from './recorderRunner';\nimport { collapseActions } from './recorderUtils';\nimport { isUnderTest } from '../utils/debug';\nimport { monotonicTime } from '../../utils/isomorphic/time';\n\nimport type { Signal } from '../../../../recorder/src/actions';\nimport type { Frame } from '../frames';\nimport type { Page } from '../page';\nimport type * as actions from '@recorder/actions';\n\nexport class RecorderCollection extends EventEmitter {\n  private _actions: actions.ActionInContext[] = [];\n  private _enabled = false;\n  private _pageAliases: Map<Page, string>;\n\n  constructor(pageAliases: Map<Page, string>) {\n    super();\n    this._pageAliases = pageAliases;\n  }\n\n  restart() {\n    this._actions = [];\n    this.emit('change', []);\n  }\n\n  loadActions(actions: actions.ActionInContext[]) {\n    this._actions = Array.from(actions);\n  }\n\n  setEnabled(enabled: boolean) {\n    this._enabled = enabled;\n  }\n\n  async performAction(actionInContext: actions.ActionInContext) {\n    await this._addAction(actionInContext, async () => {\n      await performAction(this._pageAliases, actionInContext);\n    });\n  }\n\n  addRecordedAction(actionInContext: actions.ActionInContext) {\n    if (['openPage', 'closePage'].includes(actionInContext.action.name)) {\n      this._actions.push(actionInContext);\n      this._fireChange();\n      return;\n    }\n    this._addAction(actionInContext).catch(() => {});\n  }\n\n  private async _addAction(actionInContext: actions.ActionInContext, callback?: () => Promise<void>) {\n    if (!this._enabled)\n      return;\n    if (actionInContext.action.name === 'openPage' || actionInContext.action.name === 'closePage') {\n      this._actions.push(actionInContext);\n      this._fireChange();\n      return;\n    }\n\n    this._actions.push(actionInContext);\n    this._fireChange();\n    await callback?.().catch();\n    actionInContext.endTime = monotonicTime();\n  }\n\n  signal(pageAlias: string, frame: Frame, signal: Signal) {\n    if (!this._enabled)\n      return;\n\n    if (signal.name === 'navigation' && frame._page.mainFrame() === frame) {\n      const timestamp = monotonicTime();\n      const lastAction = this._actions[this._actions.length - 1];\n      const signalThreshold = isUnderTest() ? 500 : 5000;\n\n      let generateGoto = false;\n      if (!lastAction)\n        generateGoto = true;\n      else if (lastAction.action.name !== 'click' && lastAction.action.name !== 'press' && lastAction.action.name !== 'fill')\n        generateGoto = true;\n      else if (timestamp - lastAction.startTime > signalThreshold)\n        generateGoto = true;\n\n      if (generateGoto) {\n        this.addRecordedAction({\n          frame: {\n            pageAlias,\n            framePath: [],\n          },\n          action: {\n            name: 'navigate',\n            url: frame.url(),\n            signals: [],\n          },\n          startTime: timestamp,\n          endTime: timestamp,\n        });\n      }\n      return;\n    }\n\n    if (this._actions.length) {\n      this._actions[this._actions.length - 1].action.signals.push(signal);\n      this._fireChange();\n      return;\n    }\n  }\n\n  private _fireChange() {\n    if (!this._enabled)\n      return;\n\n    this.emit('change', collapseActions(this._actions));\n  }\n}\n","export const source = \"\\nvar __commonJS = obj => {\\n  let required = false;\\n  let result;\\n  return function __require() {\\n    if (!required) {\\n      required = true;\\n      let fn;\\n      for (const name in obj) { fn = obj[name]; break; }\\n      const module = { exports: {} };\\n      fn(module.exports, module);\\n      result = module.exports;\\n    }\\n    return result;\\n  }\\n};\\nvar __export = (target, all) => {for (var name in all) target[name] = all[name];};\\nvar __toESM = mod => ({ ...mod, 'default': mod });\\nvar __toCommonJS = mod => ({ ...mod, __esModule: true });\\n\\n\\n// packages/injected/src/recorder/pollingRecorder.ts\\nvar pollingRecorder_exports = {};\\n__export(pollingRecorder_exports, {\\n  PollingRecorder: () => PollingRecorder,\\n  default: () => pollingRecorder_default\\n});\\nmodule.exports = __toCommonJS(pollingRecorder_exports);\\n\\n// packages/injected/src/recorder/clipPaths.ts\\nvar svgJson = { \\\"tagName\\\": \\\"svg\\\", \\\"children\\\": [{ \\\"tagName\\\": \\\"defs\\\", \\\"children\\\": [{ \\\"tagName\\\": \\\"clipPath\\\", \\\"attrs\\\": { \\\"width\\\": \\\"16\\\", \\\"height\\\": \\\"16\\\", \\\"viewBox\\\": \\\"0 0 16 16\\\", \\\"fill\\\": \\\"currentColor\\\", \\\"id\\\": \\\"icon-gripper\\\" }, \\\"children\\\": [{ \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"d\\\": \\\"M5 3h2v2H5zm0 4h2v2H5zm0 4h2v2H5zm4-8h2v2H9zm0 4h2v2H9zm0 4h2v2H9z\\\" } }] }, { \\\"tagName\\\": \\\"clipPath\\\", \\\"attrs\\\": { \\\"width\\\": \\\"16\\\", \\\"height\\\": \\\"16\\\", \\\"viewBox\\\": \\\"0 0 16 16\\\", \\\"fill\\\": \\\"currentColor\\\", \\\"id\\\": \\\"icon-circle-large-filled\\\" }, \\\"children\\\": [{ \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"d\\\": \\\"M8 1a6.8 6.8 0 0 1 1.86.253 6.899 6.899 0 0 1 3.083 1.805 6.903 6.903 0 0 1 1.804 3.083C14.916 6.738 15 7.357 15 8s-.084 1.262-.253 1.86a6.9 6.9 0 0 1-.704 1.674 7.157 7.157 0 0 1-2.516 2.509 6.966 6.966 0 0 1-1.668.71A6.984 6.984 0 0 1 8 15a6.984 6.984 0 0 1-1.86-.246 7.098 7.098 0 0 1-1.674-.711 7.3 7.3 0 0 1-1.415-1.094 7.295 7.295 0 0 1-1.094-1.415 7.098 7.098 0 0 1-.71-1.675A6.985 6.985 0 0 1 1 8c0-.643.082-1.262.246-1.86a6.968 6.968 0 0 1 .711-1.667 7.156 7.156 0 0 1 2.509-2.516 6.895 6.895 0 0 1 1.675-.704A6.808 6.808 0 0 1 8 1z\\\" } }] }, { \\\"tagName\\\": \\\"clipPath\\\", \\\"attrs\\\": { \\\"width\\\": \\\"16\\\", \\\"height\\\": \\\"16\\\", \\\"viewBox\\\": \\\"0 0 16 16\\\", \\\"fill\\\": \\\"currentColor\\\", \\\"id\\\": \\\"icon-inspect\\\" }, \\\"children\\\": [{ \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"fill-rule\\\": \\\"evenodd\\\", \\\"clip-rule\\\": \\\"evenodd\\\", \\\"d\\\": \\\"M1 3l1-1h12l1 1v6h-1V3H2v8h5v1H2l-1-1V3zm14.707 9.707L9 6v9.414l2.707-2.707h4zM10 13V8.414l3.293 3.293h-2L10 13z\\\" } }] }, { \\\"tagName\\\": \\\"clipPath\\\", \\\"attrs\\\": { \\\"width\\\": \\\"16\\\", \\\"height\\\": \\\"16\\\", \\\"viewBox\\\": \\\"0 0 16 16\\\", \\\"fill\\\": \\\"currentColor\\\", \\\"id\\\": \\\"icon-whole-word\\\" }, \\\"children\\\": [{ \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"fill-rule\\\": \\\"evenodd\\\", \\\"clip-rule\\\": \\\"evenodd\\\", \\\"d\\\": \\\"M0 11H1V13H15V11H16V14H15H1H0V11Z\\\" } }, { \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"d\\\": \\\"M6.84048 11H5.95963V10.1406H5.93814C5.555 10.7995 4.99104 11.1289 4.24625 11.1289C3.69839 11.1289 3.26871 10.9839 2.95718 10.6938C2.64924 10.4038 2.49527 10.0189 2.49527 9.53906C2.49527 8.51139 3.10041 7.91341 4.3107 7.74512L5.95963 7.51416C5.95963 6.57959 5.58186 6.1123 4.82632 6.1123C4.16389 6.1123 3.56591 6.33789 3.03238 6.78906V5.88672C3.57307 5.54297 4.19612 5.37109 4.90152 5.37109C6.19416 5.37109 6.84048 6.05501 6.84048 7.42285V11ZM5.95963 8.21777L4.63297 8.40039C4.22476 8.45768 3.91682 8.55973 3.70914 8.70654C3.50145 8.84977 3.39761 9.10579 3.39761 9.47461C3.39761 9.74316 3.4925 9.96338 3.68228 10.1353C3.87564 10.3035 4.13166 10.3877 4.45035 10.3877C4.8872 10.3877 5.24706 10.2355 5.52994 9.93115C5.8164 9.62321 5.95963 9.2347 5.95963 8.76562V8.21777Z\\\" } }, { \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"d\\\": \\\"M9.3475 10.2051H9.32601V11H8.44515V2.85742H9.32601V6.4668H9.3475C9.78076 5.73633 10.4146 5.37109 11.2489 5.37109C11.9543 5.37109 12.5057 5.61816 12.9032 6.1123C13.3042 6.60286 13.5047 7.26172 13.5047 8.08887C13.5047 9.00911 13.2809 9.74674 12.8333 10.3018C12.3857 10.8532 11.7734 11.1289 10.9964 11.1289C10.2695 11.1289 9.71989 10.821 9.3475 10.2051ZM9.32601 7.98682V8.75488C9.32601 9.20964 9.47282 9.59635 9.76644 9.91504C10.0636 10.2301 10.4396 10.3877 10.8944 10.3877C11.4279 10.3877 11.8451 10.1836 12.1458 9.77539C12.4502 9.36719 12.6024 8.79964 12.6024 8.07275C12.6024 7.46045 12.4609 6.98063 12.1781 6.6333C11.8952 6.28597 11.512 6.1123 11.0286 6.1123C10.5166 6.1123 10.1048 6.29134 9.7933 6.64941C9.48177 7.00391 9.32601 7.44971 9.32601 7.98682Z\\\" } }] }, { \\\"tagName\\\": \\\"clipPath\\\", \\\"attrs\\\": { \\\"width\\\": \\\"16\\\", \\\"height\\\": \\\"16\\\", \\\"viewBox\\\": \\\"0 0 16 16\\\", \\\"fill\\\": \\\"currentColor\\\", \\\"id\\\": \\\"icon-eye\\\" }, \\\"children\\\": [{ \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"d\\\": \\\"M7.99993 6.00316C9.47266 6.00316 10.6666 7.19708 10.6666 8.66981C10.6666 10.1426 9.47266 11.3365 7.99993 11.3365C6.52715 11.3365 5.33324 10.1426 5.33324 8.66981C5.33324 7.19708 6.52715 6.00316 7.99993 6.00316ZM7.99993 7.00315C7.07946 7.00315 6.33324 7.74935 6.33324 8.66981C6.33324 9.59028 7.07946 10.3365 7.99993 10.3365C8.9204 10.3365 9.6666 9.59028 9.6666 8.66981C9.6666 7.74935 8.9204 7.00315 7.99993 7.00315ZM7.99993 3.66675C11.0756 3.66675 13.7307 5.76675 14.4673 8.70968C14.5344 8.97755 14.3716 9.24908 14.1037 9.31615C13.8358 9.38315 13.5643 9.22041 13.4973 8.95248C12.8713 6.45205 10.6141 4.66675 7.99993 4.66675C5.38454 4.66675 3.12664 6.45359 2.50182 8.95555C2.43491 9.22341 2.16348 9.38635 1.89557 9.31948C1.62766 9.25255 1.46471 8.98115 1.53162 8.71321C2.26701 5.76856 4.9229 3.66675 7.99993 3.66675Z\\\" } }] }, { \\\"tagName\\\": \\\"clipPath\\\", \\\"attrs\\\": { \\\"width\\\": \\\"16\\\", \\\"height\\\": \\\"16\\\", \\\"viewBox\\\": \\\"0 0 16 16\\\", \\\"fill\\\": \\\"currentColor\\\", \\\"id\\\": \\\"icon-symbol-constant\\\" }, \\\"children\\\": [{ \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"fill-rule\\\": \\\"evenodd\\\", \\\"clip-rule\\\": \\\"evenodd\\\", \\\"d\\\": \\\"M4 6h8v1H4V6zm8 3H4v1h8V9z\\\" } }, { \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"fill-rule\\\": \\\"evenodd\\\", \\\"clip-rule\\\": \\\"evenodd\\\", \\\"d\\\": \\\"M1 4l1-1h12l1 1v8l-1 1H2l-1-1V4zm1 0v8h12V4H2z\\\" } }] }, { \\\"tagName\\\": \\\"clipPath\\\", \\\"attrs\\\": { \\\"width\\\": \\\"16\\\", \\\"height\\\": \\\"16\\\", \\\"viewBox\\\": \\\"0 0 16 16\\\", \\\"fill\\\": \\\"currentColor\\\", \\\"id\\\": \\\"icon-check\\\" }, \\\"children\\\": [{ \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"fill-rule\\\": \\\"evenodd\\\", \\\"clip-rule\\\": \\\"evenodd\\\", \\\"d\\\": \\\"M14.431 3.323l-8.47 10-.79-.036-3.35-4.77.818-.574 2.978 4.24 8.051-9.506.764.646z\\\" } }] }, { \\\"tagName\\\": \\\"clipPath\\\", \\\"attrs\\\": { \\\"width\\\": \\\"16\\\", \\\"height\\\": \\\"16\\\", \\\"viewBox\\\": \\\"0 0 16 16\\\", \\\"fill\\\": \\\"currentColor\\\", \\\"id\\\": \\\"icon-close\\\" }, \\\"children\\\": [{ \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"fill-rule\\\": \\\"evenodd\\\", \\\"clip-rule\\\": \\\"evenodd\\\", \\\"d\\\": \\\"M8 8.707l3.646 3.647.708-.707L8.707 8l3.647-3.646-.707-.708L8 7.293 4.354 3.646l-.707.708L7.293 8l-3.646 3.646.707.708L8 8.707z\\\" } }] }, { \\\"tagName\\\": \\\"clipPath\\\", \\\"attrs\\\": { \\\"width\\\": \\\"16\\\", \\\"height\\\": \\\"16\\\", \\\"viewBox\\\": \\\"0 0 16 16\\\", \\\"fill\\\": \\\"currentColor\\\", \\\"id\\\": \\\"icon-pass\\\" }, \\\"children\\\": [{ \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"d\\\": \\\"M6.27 10.87h.71l4.56-4.56-.71-.71-4.2 4.21-1.92-1.92L4 8.6l2.27 2.27z\\\" } }, { \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"fill-rule\\\": \\\"evenodd\\\", \\\"clip-rule\\\": \\\"evenodd\\\", \\\"d\\\": \\\"M8.6 1c1.6.1 3.1.9 4.2 2 1.3 1.4 2 3.1 2 5.1 0 1.6-.6 3.1-1.6 4.4-1 1.2-2.4 2.1-4 2.4-1.6.3-3.2.1-4.6-.7-1.4-.8-2.5-2-3.1-3.5C.9 9.2.8 7.5 1.3 6c.5-1.6 1.4-2.9 2.8-3.8C5.4 1.3 7 .9 8.6 1zm.5 12.9c1.3-.3 2.5-1 3.4-2.1.8-1.1 1.3-2.4 1.2-3.8 0-1.6-.6-3.2-1.7-4.3-1-1-2.2-1.6-3.6-1.7-1.3-.1-2.7.2-3.8 1-1.1.8-1.9 1.9-2.3 3.3-.4 1.3-.4 2.7.2 4 .6 1.3 1.5 2.3 2.7 3 1.2.7 2.6.9 3.9.6z\\\" } }] }, { \\\"tagName\\\": \\\"clipPath\\\", \\\"attrs\\\": { \\\"width\\\": \\\"16\\\", \\\"height\\\": \\\"16\\\", \\\"viewBox\\\": \\\"0 0 16 16\\\", \\\"fill\\\": \\\"currentColor\\\", \\\"id\\\": \\\"icon-gist\\\" }, \\\"children\\\": [{ \\\"tagName\\\": \\\"path\\\", \\\"attrs\\\": { \\\"fill-rule\\\": \\\"evenodd\\\", \\\"clip-rule\\\": \\\"evenodd\\\", \\\"d\\\": \\\"M10.57 1.14l3.28 3.3.15.36v9.7l-.5.5h-11l-.5-.5v-13l.5-.5h7.72l.35.14zM10 5h3l-3-3v3zM3 2v12h10V6H9.5L9 5.5V2H3zm2.062 7.533l1.817-1.828L6.17 7 4 9.179v.707l2.171 2.174.707-.707-1.816-1.82zM8.8 7.714l.7-.709 2.189 2.175v.709L9.5 12.062l-.705-.709 1.831-1.82L8.8 7.714z\\\" } }] }] }] };\\nvar clipPaths_default = svgJson;\\n\\n// packages/injected/src/recorder/recorder.ts\\nvar HighlightColors = {\\n  multiple: \\\"#f6b26b7f\\\",\\n  single: \\\"#6fa8dc7f\\\",\\n  assert: \\\"#8acae480\\\",\\n  action: \\\"#dc6f6f7f\\\"\\n};\\nvar NoneTool = class {\\n  cursor() {\\n    return \\\"default\\\";\\n  }\\n};\\nvar InspectTool = class {\\n  constructor(recorder, assertVisibility) {\\n    this._hoveredModel = null;\\n    this._hoveredElement = null;\\n    this._recorder = recorder;\\n    this._assertVisibility = assertVisibility;\\n  }\\n  cursor() {\\n    return \\\"pointer\\\";\\n  }\\n  cleanup() {\\n    this._hoveredModel = null;\\n    this._hoveredElement = null;\\n  }\\n  onClick(event) {\\n    var _a;\\n    consumeEvent(event);\\n    if (event.button !== 0)\\n      return;\\n    if ((_a = this._hoveredModel) == null ? void 0 : _a.selector)\\n      this._commit(this._hoveredModel.selector, this._hoveredModel);\\n  }\\n  onPointerDown(event) {\\n    consumeEvent(event);\\n  }\\n  onPointerUp(event) {\\n    consumeEvent(event);\\n  }\\n  onMouseDown(event) {\\n    consumeEvent(event);\\n  }\\n  onMouseUp(event) {\\n    consumeEvent(event);\\n  }\\n  onMouseMove(event) {\\n    var _a;\\n    consumeEvent(event);\\n    let target = this._recorder.deepEventTarget(event);\\n    if (!target.isConnected)\\n      target = null;\\n    if (this._hoveredElement === target)\\n      return;\\n    this._hoveredElement = target;\\n    let model = null;\\n    if (this._hoveredElement) {\\n      const generated = this._recorder.injectedScript.generateSelector(this._hoveredElement, { testIdAttributeName: this._recorder.state.testIdAttributeName, multiple: false });\\n      model = {\\n        selector: generated.selector,\\n        elements: generated.elements,\\n        tooltipText: this._recorder.injectedScript.utils.asLocator(this._recorder.state.language, generated.selector),\\n        color: this._assertVisibility ? HighlightColors.assert : HighlightColors.single\\n      };\\n    }\\n    if (((_a = this._hoveredModel) == null ? void 0 : _a.selector) === (model == null ? void 0 : model.selector))\\n      return;\\n    this._hoveredModel = model;\\n    this._recorder.updateHighlight(model, true);\\n  }\\n  onMouseEnter(event) {\\n    consumeEvent(event);\\n  }\\n  onMouseLeave(event) {\\n    consumeEvent(event);\\n    const window = this._recorder.injectedScript.window;\\n    if (window.top !== window && this._recorder.deepEventTarget(event).nodeType === Node.DOCUMENT_NODE)\\n      this._reset(true);\\n  }\\n  onKeyDown(event) {\\n    consumeEvent(event);\\n    if (event.key === \\\"Escape\\\") {\\n      if (this._assertVisibility)\\n        this._recorder.setMode(\\\"recording\\\");\\n    }\\n  }\\n  onKeyUp(event) {\\n    consumeEvent(event);\\n  }\\n  onScroll(event) {\\n    this._reset(false);\\n  }\\n  _commit(selector, model) {\\n    var _a;\\n    if (this._assertVisibility) {\\n      this._recorder.recordAction({\\n        name: \\\"assertVisible\\\",\\n        selector,\\n        signals: []\\n      });\\n      this._recorder.setMode(\\\"recording\\\");\\n      (_a = this._recorder.overlay) == null ? void 0 : _a.flashToolSucceeded(\\\"assertingVisibility\\\");\\n    } else {\\n      this._recorder.elementPicked(selector, model);\\n    }\\n  }\\n  _reset(userGesture) {\\n    this._hoveredElement = null;\\n    this._hoveredModel = null;\\n    this._recorder.updateHighlight(null, userGesture);\\n  }\\n};\\nvar RecordActionTool = class {\\n  constructor(recorder) {\\n    this._hoveredModel = null;\\n    this._hoveredElement = null;\\n    this._activeModel = null;\\n    this._expectProgrammaticKeyUp = false;\\n    this._recorder = recorder;\\n    this._performingActions = /* @__PURE__ */ new Set();\\n  }\\n  cursor() {\\n    return \\\"pointer\\\";\\n  }\\n  cleanup() {\\n    this._hoveredModel = null;\\n    this._hoveredElement = null;\\n    this._activeModel = null;\\n    this._expectProgrammaticKeyUp = false;\\n  }\\n  onClick(event) {\\n    if (isRangeInput(this._hoveredElement))\\n      return;\\n    if (event.button === 2 && event.type === \\\"auxclick\\\")\\n      return;\\n    if (this._shouldIgnoreMouseEvent(event))\\n      return;\\n    if (this._actionInProgress(event))\\n      return;\\n    if (this._consumedDueToNoModel(event, this._hoveredModel))\\n      return;\\n    const checkbox = asCheckbox(this._recorder.deepEventTarget(event));\\n    if (checkbox) {\\n      this._performAction({\\n        name: checkbox.checked ? \\\"check\\\" : \\\"uncheck\\\",\\n        selector: this._hoveredModel.selector,\\n        signals: []\\n      });\\n      return;\\n    }\\n    this._cancelPendingClickAction();\\n    if (event.detail === 1) {\\n      this._pendingClickAction = {\\n        action: {\\n          name: \\\"click\\\",\\n          selector: this._hoveredModel.selector,\\n          position: positionForEvent(event),\\n          signals: [],\\n          button: buttonForEvent(event),\\n          modifiers: modifiersForEvent(event),\\n          clickCount: event.detail\\n        },\\n        timeout: this._recorder.injectedScript.utils.builtins.setTimeout(() => this._commitPendingClickAction(), 200)\\n      };\\n    }\\n  }\\n  onDblClick(event) {\\n    if (isRangeInput(this._hoveredElement))\\n      return;\\n    if (this._shouldIgnoreMouseEvent(event))\\n      return;\\n    if (this._actionInProgress(event))\\n      return;\\n    if (this._consumedDueToNoModel(event, this._hoveredModel))\\n      return;\\n    this._cancelPendingClickAction();\\n    this._performAction({\\n      name: \\\"click\\\",\\n      selector: this._hoveredModel.selector,\\n      position: positionForEvent(event),\\n      signals: [],\\n      button: buttonForEvent(event),\\n      modifiers: modifiersForEvent(event),\\n      clickCount: event.detail\\n    });\\n  }\\n  _commitPendingClickAction() {\\n    if (this._pendingClickAction)\\n      this._performAction(this._pendingClickAction.action);\\n    this._cancelPendingClickAction();\\n  }\\n  _cancelPendingClickAction() {\\n    if (this._pendingClickAction)\\n      this._recorder.injectedScript.utils.builtins.clearTimeout(this._pendingClickAction.timeout);\\n    this._pendingClickAction = void 0;\\n  }\\n  onContextMenu(event) {\\n    if (this._shouldIgnoreMouseEvent(event))\\n      return;\\n    if (this._actionInProgress(event))\\n      return;\\n    if (this._consumedDueToNoModel(event, this._hoveredModel))\\n      return;\\n    this._performAction({\\n      name: \\\"click\\\",\\n      selector: this._hoveredModel.selector,\\n      position: positionForEvent(event),\\n      signals: [],\\n      button: \\\"right\\\",\\n      modifiers: 0,\\n      clickCount: 0\\n    });\\n  }\\n  onPointerDown(event) {\\n    if (this._shouldIgnoreMouseEvent(event))\\n      return;\\n    if (!this._performingActions.size)\\n      consumeEvent(event);\\n  }\\n  onPointerUp(event) {\\n    if (this._shouldIgnoreMouseEvent(event))\\n      return;\\n    if (!this._performingActions.size)\\n      consumeEvent(event);\\n  }\\n  onMouseDown(event) {\\n    if (this._shouldIgnoreMouseEvent(event))\\n      return;\\n    if (!this._performingActions.size)\\n      consumeEvent(event);\\n    this._activeModel = this._hoveredModel;\\n  }\\n  onMouseUp(event) {\\n    if (this._shouldIgnoreMouseEvent(event))\\n      return;\\n    if (!this._performingActions.size)\\n      consumeEvent(event);\\n  }\\n  onMouseMove(event) {\\n    const target = this._recorder.deepEventTarget(event);\\n    if (this._hoveredElement === target)\\n      return;\\n    this._hoveredElement = target;\\n    this._updateModelForHoveredElement();\\n  }\\n  onMouseLeave(event) {\\n    const window = this._recorder.injectedScript.window;\\n    if (window.top !== window && this._recorder.deepEventTarget(event).nodeType === Node.DOCUMENT_NODE) {\\n      this._hoveredElement = null;\\n      this._updateModelForHoveredElement();\\n    }\\n  }\\n  onFocus(event) {\\n    this._onFocus(true);\\n  }\\n  onInput(event) {\\n    const target = this._recorder.deepEventTarget(event);\\n    if (target.nodeName === \\\"INPUT\\\" && target.type.toLowerCase() === \\\"file\\\") {\\n      this._recorder.recordAction({\\n        name: \\\"setInputFiles\\\",\\n        selector: this._activeModel.selector,\\n        signals: [],\\n        files: [...target.files || []].map((file) => file.name)\\n      });\\n      return;\\n    }\\n    if (isRangeInput(target)) {\\n      this._recorder.recordAction({\\n        name: \\\"fill\\\",\\n        // must use hoveredModel instead of activeModel for it to work in webkit\\n        selector: this._hoveredModel.selector,\\n        signals: [],\\n        text: target.value\\n      });\\n      return;\\n    }\\n    if ([\\\"INPUT\\\", \\\"TEXTAREA\\\"].includes(target.nodeName) || target.isContentEditable) {\\n      if (target.nodeName === \\\"INPUT\\\" && [\\\"checkbox\\\", \\\"radio\\\"].includes(target.type.toLowerCase())) {\\n        return;\\n      }\\n      if (this._consumedDueWrongTarget(event))\\n        return;\\n      this._recorder.recordAction({\\n        name: \\\"fill\\\",\\n        selector: this._activeModel.selector,\\n        signals: [],\\n        text: target.isContentEditable ? target.innerText : target.value\\n      });\\n    }\\n    if (target.nodeName === \\\"SELECT\\\") {\\n      const selectElement = target;\\n      if (this._actionInProgress(event))\\n        return;\\n      this._performAction({\\n        name: \\\"select\\\",\\n        selector: this._activeModel.selector,\\n        options: [...selectElement.selectedOptions].map((option) => option.value),\\n        signals: []\\n      });\\n    }\\n  }\\n  onKeyDown(event) {\\n    if (!this._shouldGenerateKeyPressFor(event))\\n      return;\\n    if (this._actionInProgress(event)) {\\n      this._expectProgrammaticKeyUp = true;\\n      return;\\n    }\\n    if (this._consumedDueWrongTarget(event))\\n      return;\\n    if (event.key === \\\" \\\") {\\n      const checkbox = asCheckbox(this._recorder.deepEventTarget(event));\\n      if (checkbox) {\\n        this._performAction({\\n          name: checkbox.checked ? \\\"uncheck\\\" : \\\"check\\\",\\n          selector: this._activeModel.selector,\\n          signals: []\\n        });\\n        return;\\n      }\\n    }\\n    this._performAction({\\n      name: \\\"press\\\",\\n      selector: this._activeModel.selector,\\n      signals: [],\\n      key: event.key,\\n      modifiers: modifiersForEvent(event)\\n    });\\n  }\\n  onKeyUp(event) {\\n    if (!this._shouldGenerateKeyPressFor(event))\\n      return;\\n    if (!this._expectProgrammaticKeyUp) {\\n      consumeEvent(event);\\n      return;\\n    }\\n    this._expectProgrammaticKeyUp = false;\\n  }\\n  onScroll(event) {\\n    this._hoveredModel = null;\\n    this._hoveredElement = null;\\n    this._recorder.updateHighlight(null, false);\\n  }\\n  _onFocus(userGesture) {\\n    const activeElement = deepActiveElement(this._recorder.document);\\n    if (userGesture && activeElement === this._recorder.document.body)\\n      return;\\n    const result = activeElement ? this._recorder.injectedScript.generateSelector(activeElement, { testIdAttributeName: this._recorder.state.testIdAttributeName }) : null;\\n    this._activeModel = result && result.selector ? { ...result, color: HighlightColors.action } : null;\\n    if (userGesture) {\\n      this._hoveredElement = activeElement;\\n      this._updateModelForHoveredElement();\\n    }\\n  }\\n  _shouldIgnoreMouseEvent(event) {\\n    const target = this._recorder.deepEventTarget(event);\\n    const nodeName = target.nodeName;\\n    if (nodeName === \\\"SELECT\\\" || nodeName === \\\"OPTION\\\")\\n      return true;\\n    if (nodeName === \\\"INPUT\\\" && [\\\"date\\\", \\\"range\\\"].includes(target.type))\\n      return true;\\n    return false;\\n  }\\n  _actionInProgress(event) {\\n    const isKeyEvent = event instanceof KeyboardEvent;\\n    const isMouseOrPointerEvent = event instanceof MouseEvent || event instanceof PointerEvent;\\n    for (const action of this._performingActions) {\\n      if (isKeyEvent && action.name === \\\"press\\\" && event.key === action.key)\\n        return true;\\n      if (isMouseOrPointerEvent && (action.name === \\\"click\\\" || action.name === \\\"check\\\" || action.name === \\\"uncheck\\\"))\\n        return true;\\n    }\\n    consumeEvent(event);\\n    return false;\\n  }\\n  _consumedDueToNoModel(event, model) {\\n    if (model)\\n      return false;\\n    consumeEvent(event);\\n    return true;\\n  }\\n  _consumedDueWrongTarget(event) {\\n    if (this._activeModel && this._activeModel.elements[0] === this._recorder.deepEventTarget(event))\\n      return false;\\n    consumeEvent(event);\\n    return true;\\n  }\\n  _performAction(action) {\\n    this._hoveredElement = null;\\n    this._hoveredModel = null;\\n    this._activeModel = null;\\n    this._recorder.updateHighlight(null, false);\\n    this._performingActions.add(action);\\n    void this._recorder.performAction(action).then(() => {\\n      this._performingActions.delete(action);\\n      this._onFocus(false);\\n      if (this._recorder.injectedScript.isUnderTest) {\\n        console.error(\\\"Action performed for test: \\\" + JSON.stringify({\\n          // eslint-disable-line no-console\\n          hovered: this._hoveredModel ? this._hoveredModel.selector : null,\\n          active: this._activeModel ? this._activeModel.selector : null\\n        }));\\n      }\\n    });\\n  }\\n  _shouldGenerateKeyPressFor(event) {\\n    if (typeof event.key !== \\\"string\\\")\\n      return false;\\n    if (event.key === \\\"Enter\\\" && (this._recorder.deepEventTarget(event).nodeName === \\\"TEXTAREA\\\" || this._recorder.deepEventTarget(event).isContentEditable))\\n      return false;\\n    if ([\\\"Backspace\\\", \\\"Delete\\\", \\\"AltGraph\\\"].includes(event.key))\\n      return false;\\n    if (event.key === \\\"@\\\" && event.code === \\\"KeyL\\\")\\n      return false;\\n    if (navigator.platform.includes(\\\"Mac\\\")) {\\n      if (event.key === \\\"v\\\" && event.metaKey)\\n        return false;\\n    } else {\\n      if (event.key === \\\"v\\\" && event.ctrlKey)\\n        return false;\\n      if (event.key === \\\"Insert\\\" && event.shiftKey)\\n        return false;\\n    }\\n    if ([\\\"Shift\\\", \\\"Control\\\", \\\"Meta\\\", \\\"Alt\\\", \\\"Process\\\"].includes(event.key))\\n      return false;\\n    const hasModifier = event.ctrlKey || event.altKey || event.metaKey;\\n    if (event.key.length === 1 && !hasModifier)\\n      return !!asCheckbox(this._recorder.deepEventTarget(event));\\n    return true;\\n  }\\n  _updateModelForHoveredElement() {\\n    if (this._performingActions.size)\\n      return;\\n    if (!this._hoveredElement || !this._hoveredElement.isConnected) {\\n      this._hoveredModel = null;\\n      this._hoveredElement = null;\\n      this._recorder.updateHighlight(null, true);\\n      return;\\n    }\\n    const { selector, elements } = this._recorder.injectedScript.generateSelector(this._hoveredElement, { testIdAttributeName: this._recorder.state.testIdAttributeName });\\n    if (this._hoveredModel && this._hoveredModel.selector === selector)\\n      return;\\n    this._hoveredModel = selector ? { selector, elements, color: HighlightColors.action } : null;\\n    this._recorder.updateHighlight(this._hoveredModel, true);\\n  }\\n};\\nvar TextAssertionTool = class {\\n  constructor(recorder, kind) {\\n    this._hoverHighlight = null;\\n    this._action = null;\\n    this._recorder = recorder;\\n    this._textCache = /* @__PURE__ */ new Map();\\n    this._kind = kind;\\n    this._dialog = new Dialog(recorder);\\n  }\\n  cursor() {\\n    return \\\"pointer\\\";\\n  }\\n  cleanup() {\\n    this._dialog.close();\\n    this._hoverHighlight = null;\\n  }\\n  onClick(event) {\\n    consumeEvent(event);\\n    if (this._kind === \\\"value\\\") {\\n      this._commitAssertValue();\\n    } else {\\n      if (!this._dialog.isShowing())\\n        this._showDialog();\\n    }\\n  }\\n  onMouseDown(event) {\\n    const target = this._recorder.deepEventTarget(event);\\n    if (this._elementHasValue(target))\\n      event.preventDefault();\\n  }\\n  onPointerUp(event) {\\n    var _a;\\n    const target = (_a = this._hoverHighlight) == null ? void 0 : _a.elements[0];\\n    if (this._kind === \\\"value\\\" && target && (target.nodeName === \\\"INPUT\\\" || target.nodeName === \\\"SELECT\\\") && target.disabled) {\\n      this._commitAssertValue();\\n    }\\n  }\\n  onMouseMove(event) {\\n    var _a;\\n    if (this._dialog.isShowing())\\n      return;\\n    const target = this._recorder.deepEventTarget(event);\\n    if (((_a = this._hoverHighlight) == null ? void 0 : _a.elements[0]) === target)\\n      return;\\n    if (this._kind === \\\"text\\\" || this._kind === \\\"snapshot\\\") {\\n      this._hoverHighlight = this._recorder.injectedScript.utils.elementText(this._textCache, target).full ? { elements: [target], selector: \\\"\\\", color: HighlightColors.assert } : null;\\n    } else if (this._elementHasValue(target)) {\\n      const generated = this._recorder.injectedScript.generateSelector(target, { testIdAttributeName: this._recorder.state.testIdAttributeName });\\n      this._hoverHighlight = { selector: generated.selector, elements: generated.elements, color: HighlightColors.assert };\\n    } else {\\n      this._hoverHighlight = null;\\n    }\\n    this._recorder.updateHighlight(this._hoverHighlight, true);\\n  }\\n  onKeyDown(event) {\\n    if (event.key === \\\"Escape\\\")\\n      this._recorder.setMode(\\\"recording\\\");\\n    consumeEvent(event);\\n  }\\n  onScroll(event) {\\n    this._recorder.updateHighlight(this._hoverHighlight, false);\\n  }\\n  _elementHasValue(element) {\\n    return element.nodeName === \\\"TEXTAREA\\\" || element.nodeName === \\\"SELECT\\\" || element.nodeName === \\\"INPUT\\\" && ![\\\"button\\\", \\\"image\\\", \\\"reset\\\", \\\"submit\\\"].includes(element.type);\\n  }\\n  _generateAction() {\\n    var _a;\\n    this._textCache.clear();\\n    const target = (_a = this._hoverHighlight) == null ? void 0 : _a.elements[0];\\n    if (!target)\\n      return null;\\n    if (this._kind === \\\"value\\\") {\\n      if (!this._elementHasValue(target))\\n        return null;\\n      const { selector } = this._recorder.injectedScript.generateSelector(target, { testIdAttributeName: this._recorder.state.testIdAttributeName });\\n      if (target.nodeName === \\\"INPUT\\\" && [\\\"checkbox\\\", \\\"radio\\\"].includes(target.type.toLowerCase())) {\\n        return {\\n          name: \\\"assertChecked\\\",\\n          selector,\\n          signals: [],\\n          // Interestingly, inputElement.checked is reversed inside this event handler.\\n          checked: !target.checked\\n        };\\n      } else {\\n        return {\\n          name: \\\"assertValue\\\",\\n          selector,\\n          signals: [],\\n          value: target.value\\n        };\\n      }\\n    } else if (this._kind === \\\"snapshot\\\") {\\n      const generated = this._recorder.injectedScript.generateSelector(target, { testIdAttributeName: this._recorder.state.testIdAttributeName, forTextExpect: true });\\n      this._hoverHighlight = { selector: generated.selector, elements: generated.elements, color: HighlightColors.assert };\\n      this._recorder.updateHighlight(this._hoverHighlight, true);\\n      return {\\n        name: \\\"assertSnapshot\\\",\\n        selector: this._hoverHighlight.selector,\\n        signals: [],\\n        snapshot: this._recorder.injectedScript.ariaSnapshot(target, { mode: \\\"regex\\\" })\\n      };\\n    } else {\\n      const generated = this._recorder.injectedScript.generateSelector(target, { testIdAttributeName: this._recorder.state.testIdAttributeName, forTextExpect: true });\\n      this._hoverHighlight = { selector: generated.selector, elements: generated.elements, color: HighlightColors.assert };\\n      this._recorder.updateHighlight(this._hoverHighlight, true);\\n      return {\\n        name: \\\"assertText\\\",\\n        selector: this._hoverHighlight.selector,\\n        signals: [],\\n        text: this._recorder.injectedScript.utils.elementText(this._textCache, target).normalized,\\n        substring: true\\n      };\\n    }\\n  }\\n  _renderValue(action) {\\n    if ((action == null ? void 0 : action.name) === \\\"assertText\\\")\\n      return this._recorder.injectedScript.utils.normalizeWhiteSpace(action.text);\\n    if ((action == null ? void 0 : action.name) === \\\"assertChecked\\\")\\n      return String(action.checked);\\n    if ((action == null ? void 0 : action.name) === \\\"assertValue\\\")\\n      return action.value;\\n    if ((action == null ? void 0 : action.name) === \\\"assertSnapshot\\\")\\n      return action.snapshot;\\n    return \\\"\\\";\\n  }\\n  _commit() {\\n    if (!this._action || !this._dialog.isShowing())\\n      return;\\n    this._dialog.close();\\n    this._recorder.recordAction(this._action);\\n    this._recorder.setMode(\\\"recording\\\");\\n  }\\n  _showDialog() {\\n    var _a, _b, _c, _d;\\n    if (!((_a = this._hoverHighlight) == null ? void 0 : _a.elements[0]))\\n      return;\\n    this._action = this._generateAction();\\n    if (((_b = this._action) == null ? void 0 : _b.name) === \\\"assertText\\\") {\\n      this._showTextDialog(this._action);\\n    } else if (((_c = this._action) == null ? void 0 : _c.name) === \\\"assertSnapshot\\\") {\\n      this._recorder.recordAction(this._action);\\n      this._recorder.setMode(\\\"recording\\\");\\n      (_d = this._recorder.overlay) == null ? void 0 : _d.flashToolSucceeded(\\\"assertingSnapshot\\\");\\n    }\\n  }\\n  _showTextDialog(action) {\\n    const textElement = this._recorder.document.createElement(\\\"textarea\\\");\\n    textElement.setAttribute(\\\"spellcheck\\\", \\\"false\\\");\\n    textElement.value = this._renderValue(action);\\n    textElement.classList.add(\\\"text-editor\\\");\\n    const updateAndValidate = () => {\\n      var _a;\\n      const newValue = this._recorder.injectedScript.utils.normalizeWhiteSpace(textElement.value);\\n      const target = (_a = this._hoverHighlight) == null ? void 0 : _a.elements[0];\\n      if (!target)\\n        return;\\n      action.text = newValue;\\n      const targetText = this._recorder.injectedScript.utils.elementText(this._textCache, target).normalized;\\n      const matches = newValue && targetText.includes(newValue);\\n      textElement.classList.toggle(\\\"does-not-match\\\", !matches);\\n    };\\n    textElement.addEventListener(\\\"input\\\", updateAndValidate);\\n    const label = \\\"Assert that element contains text\\\";\\n    const dialogElement = this._dialog.show({\\n      label,\\n      body: textElement,\\n      onCommit: () => this._commit()\\n    });\\n    const position = this._recorder.highlight.tooltipPosition(this._recorder.highlight.firstBox(), dialogElement);\\n    this._dialog.moveTo(position.anchorTop, position.anchorLeft);\\n    textElement.focus();\\n  }\\n  _commitAssertValue() {\\n    var _a;\\n    if (this._kind !== \\\"value\\\")\\n      return;\\n    const action = this._generateAction();\\n    if (!action)\\n      return;\\n    this._recorder.recordAction(action);\\n    this._recorder.setMode(\\\"recording\\\");\\n    (_a = this._recorder.overlay) == null ? void 0 : _a.flashToolSucceeded(\\\"assertingValue\\\");\\n  }\\n};\\nvar Overlay = class {\\n  constructor(recorder) {\\n    this._listeners = [];\\n    this._offsetX = 0;\\n    this._measure = { width: 0, height: 0 };\\n    this._recorder = recorder;\\n    const document = this._recorder.document;\\n    this._overlayElement = document.createElement(\\\"x-pw-overlay\\\");\\n    const toolsListElement = document.createElement(\\\"x-pw-tools-list\\\");\\n    this._overlayElement.appendChild(toolsListElement);\\n    this._dragHandle = document.createElement(\\\"x-pw-tool-gripper\\\");\\n    this._dragHandle.appendChild(document.createElement(\\\"x-div\\\"));\\n    toolsListElement.appendChild(this._dragHandle);\\n    this._recordToggle = this._recorder.document.createElement(\\\"x-pw-tool-item\\\");\\n    this._recordToggle.title = \\\"Record\\\";\\n    this._recordToggle.classList.add(\\\"record\\\");\\n    this._recordToggle.appendChild(this._recorder.document.createElement(\\\"x-div\\\"));\\n    toolsListElement.appendChild(this._recordToggle);\\n    this._pickLocatorToggle = this._recorder.document.createElement(\\\"x-pw-tool-item\\\");\\n    this._pickLocatorToggle.title = \\\"Pick locator\\\";\\n    this._pickLocatorToggle.classList.add(\\\"pick-locator\\\");\\n    this._pickLocatorToggle.appendChild(this._recorder.document.createElement(\\\"x-div\\\"));\\n    toolsListElement.appendChild(this._pickLocatorToggle);\\n    this._assertVisibilityToggle = this._recorder.document.createElement(\\\"x-pw-tool-item\\\");\\n    this._assertVisibilityToggle.title = \\\"Assert visibility\\\";\\n    this._assertVisibilityToggle.classList.add(\\\"visibility\\\");\\n    this._assertVisibilityToggle.appendChild(this._recorder.document.createElement(\\\"x-div\\\"));\\n    toolsListElement.appendChild(this._assertVisibilityToggle);\\n    this._assertTextToggle = this._recorder.document.createElement(\\\"x-pw-tool-item\\\");\\n    this._assertTextToggle.title = \\\"Assert text\\\";\\n    this._assertTextToggle.classList.add(\\\"text\\\");\\n    this._assertTextToggle.appendChild(this._recorder.document.createElement(\\\"x-div\\\"));\\n    toolsListElement.appendChild(this._assertTextToggle);\\n    this._assertValuesToggle = this._recorder.document.createElement(\\\"x-pw-tool-item\\\");\\n    this._assertValuesToggle.title = \\\"Assert value\\\";\\n    this._assertValuesToggle.classList.add(\\\"value\\\");\\n    this._assertValuesToggle.appendChild(this._recorder.document.createElement(\\\"x-div\\\"));\\n    toolsListElement.appendChild(this._assertValuesToggle);\\n    this._assertSnapshotToggle = this._recorder.document.createElement(\\\"x-pw-tool-item\\\");\\n    this._assertSnapshotToggle.title = \\\"Assert snapshot\\\";\\n    this._assertSnapshotToggle.classList.add(\\\"snapshot\\\");\\n    this._assertSnapshotToggle.appendChild(this._recorder.document.createElement(\\\"x-div\\\"));\\n    toolsListElement.appendChild(this._assertSnapshotToggle);\\n    this._updateVisualPosition();\\n    this._refreshListeners();\\n  }\\n  _refreshListeners() {\\n    removeEventListeners(this._listeners);\\n    this._listeners = [\\n      addEventListener(this._dragHandle, \\\"mousedown\\\", (event) => {\\n        this._dragState = { offsetX: this._offsetX, dragStart: { x: event.clientX, y: 0 } };\\n      }),\\n      addEventListener(this._recordToggle, \\\"click\\\", () => {\\n        if (this._recordToggle.classList.contains(\\\"disabled\\\"))\\n          return;\\n        this._recorder.setMode(this._recorder.state.mode === \\\"none\\\" || this._recorder.state.mode === \\\"standby\\\" || this._recorder.state.mode === \\\"inspecting\\\" ? \\\"recording\\\" : \\\"standby\\\");\\n      }),\\n      addEventListener(this._pickLocatorToggle, \\\"click\\\", () => {\\n        if (this._pickLocatorToggle.classList.contains(\\\"disabled\\\"))\\n          return;\\n        const newMode = {\\n          \\\"inspecting\\\": \\\"standby\\\",\\n          \\\"none\\\": \\\"inspecting\\\",\\n          \\\"standby\\\": \\\"inspecting\\\",\\n          \\\"recording\\\": \\\"recording-inspecting\\\",\\n          \\\"recording-inspecting\\\": \\\"recording\\\",\\n          \\\"assertingText\\\": \\\"recording-inspecting\\\",\\n          \\\"assertingVisibility\\\": \\\"recording-inspecting\\\",\\n          \\\"assertingValue\\\": \\\"recording-inspecting\\\",\\n          \\\"assertingSnapshot\\\": \\\"recording-inspecting\\\"\\n        };\\n        this._recorder.setMode(newMode[this._recorder.state.mode]);\\n      }),\\n      addEventListener(this._assertVisibilityToggle, \\\"click\\\", () => {\\n        if (!this._assertVisibilityToggle.classList.contains(\\\"disabled\\\"))\\n          this._recorder.setMode(this._recorder.state.mode === \\\"assertingVisibility\\\" ? \\\"recording\\\" : \\\"assertingVisibility\\\");\\n      }),\\n      addEventListener(this._assertTextToggle, \\\"click\\\", () => {\\n        if (!this._assertTextToggle.classList.contains(\\\"disabled\\\"))\\n          this._recorder.setMode(this._recorder.state.mode === \\\"assertingText\\\" ? \\\"recording\\\" : \\\"assertingText\\\");\\n      }),\\n      addEventListener(this._assertValuesToggle, \\\"click\\\", () => {\\n        if (!this._assertValuesToggle.classList.contains(\\\"disabled\\\"))\\n          this._recorder.setMode(this._recorder.state.mode === \\\"assertingValue\\\" ? \\\"recording\\\" : \\\"assertingValue\\\");\\n      }),\\n      addEventListener(this._assertSnapshotToggle, \\\"click\\\", () => {\\n        if (!this._assertSnapshotToggle.classList.contains(\\\"disabled\\\"))\\n          this._recorder.setMode(this._recorder.state.mode === \\\"assertingSnapshot\\\" ? \\\"recording\\\" : \\\"assertingSnapshot\\\");\\n      })\\n    ];\\n  }\\n  install() {\\n    this._recorder.highlight.appendChild(this._overlayElement);\\n    this._refreshListeners();\\n    this._updateVisualPosition();\\n  }\\n  contains(element) {\\n    return this._recorder.injectedScript.utils.isInsideScope(this._overlayElement, element);\\n  }\\n  setUIState(state) {\\n    this._recordToggle.classList.toggle(\\\"toggled\\\", state.mode === \\\"recording\\\" || state.mode === \\\"assertingText\\\" || state.mode === \\\"assertingVisibility\\\" || state.mode === \\\"assertingValue\\\" || state.mode === \\\"assertingSnapshot\\\" || state.mode === \\\"recording-inspecting\\\");\\n    this._pickLocatorToggle.classList.toggle(\\\"toggled\\\", state.mode === \\\"inspecting\\\" || state.mode === \\\"recording-inspecting\\\");\\n    this._assertVisibilityToggle.classList.toggle(\\\"toggled\\\", state.mode === \\\"assertingVisibility\\\");\\n    this._assertVisibilityToggle.classList.toggle(\\\"disabled\\\", state.mode === \\\"none\\\" || state.mode === \\\"standby\\\" || state.mode === \\\"inspecting\\\");\\n    this._assertTextToggle.classList.toggle(\\\"toggled\\\", state.mode === \\\"assertingText\\\");\\n    this._assertTextToggle.classList.toggle(\\\"disabled\\\", state.mode === \\\"none\\\" || state.mode === \\\"standby\\\" || state.mode === \\\"inspecting\\\");\\n    this._assertValuesToggle.classList.toggle(\\\"toggled\\\", state.mode === \\\"assertingValue\\\");\\n    this._assertValuesToggle.classList.toggle(\\\"disabled\\\", state.mode === \\\"none\\\" || state.mode === \\\"standby\\\" || state.mode === \\\"inspecting\\\");\\n    this._assertSnapshotToggle.classList.toggle(\\\"toggled\\\", state.mode === \\\"assertingSnapshot\\\");\\n    this._assertSnapshotToggle.classList.toggle(\\\"disabled\\\", state.mode === \\\"none\\\" || state.mode === \\\"standby\\\" || state.mode === \\\"inspecting\\\");\\n    if (this._offsetX !== state.overlay.offsetX) {\\n      this._offsetX = state.overlay.offsetX;\\n      this._updateVisualPosition();\\n    }\\n    if (state.mode === \\\"none\\\")\\n      this._hideOverlay();\\n    else\\n      this._showOverlay();\\n  }\\n  flashToolSucceeded(tool) {\\n    let element;\\n    if (tool === \\\"assertingVisibility\\\")\\n      element = this._assertVisibilityToggle;\\n    else if (tool === \\\"assertingSnapshot\\\")\\n      element = this._assertSnapshotToggle;\\n    else\\n      element = this._assertValuesToggle;\\n    element.classList.add(\\\"succeeded\\\");\\n    this._recorder.injectedScript.utils.builtins.setTimeout(() => element.classList.remove(\\\"succeeded\\\"), 2e3);\\n  }\\n  _hideOverlay() {\\n    this._overlayElement.setAttribute(\\\"hidden\\\", \\\"true\\\");\\n  }\\n  _showOverlay() {\\n    if (!this._overlayElement.hasAttribute(\\\"hidden\\\"))\\n      return;\\n    this._overlayElement.removeAttribute(\\\"hidden\\\");\\n    this._updateVisualPosition();\\n  }\\n  _updateVisualPosition() {\\n    this._measure = this._overlayElement.getBoundingClientRect();\\n    this._overlayElement.style.left = (this._recorder.injectedScript.window.innerWidth - this._measure.width) / 2 + this._offsetX + \\\"px\\\";\\n  }\\n  onMouseMove(event) {\\n    if (!event.buttons) {\\n      this._dragState = void 0;\\n      return false;\\n    }\\n    if (this._dragState) {\\n      this._offsetX = this._dragState.offsetX + event.clientX - this._dragState.dragStart.x;\\n      const halfGapSize = (this._recorder.injectedScript.window.innerWidth - this._measure.width) / 2 - 10;\\n      this._offsetX = Math.max(-halfGapSize, Math.min(halfGapSize, this._offsetX));\\n      this._updateVisualPosition();\\n      this._recorder.setOverlayState({ offsetX: this._offsetX });\\n      consumeEvent(event);\\n      return true;\\n    }\\n    return false;\\n  }\\n  onMouseUp(event) {\\n    if (this._dragState) {\\n      consumeEvent(event);\\n      return true;\\n    }\\n    return false;\\n  }\\n  onClick(event) {\\n    if (this._dragState) {\\n      this._dragState = void 0;\\n      consumeEvent(event);\\n      return true;\\n    }\\n    return false;\\n  }\\n  onDblClick(event) {\\n    return false;\\n  }\\n};\\nvar Recorder = class {\\n  constructor(injectedScript) {\\n    this._listeners = [];\\n    this._lastHighlightedSelector = void 0;\\n    this._lastHighlightedAriaTemplateJSON = \\\"undefined\\\";\\n    this.state = {\\n      mode: \\\"none\\\",\\n      testIdAttributeName: \\\"data-testid\\\",\\n      language: \\\"javascript\\\",\\n      overlay: { offsetX: 0 }\\n    };\\n    this._delegate = {};\\n    this.document = injectedScript.document;\\n    this.injectedScript = injectedScript;\\n    this.highlight = injectedScript.createHighlight();\\n    this._tools = {\\n      \\\"none\\\": new NoneTool(),\\n      \\\"standby\\\": new NoneTool(),\\n      \\\"inspecting\\\": new InspectTool(this, false),\\n      \\\"recording\\\": new RecordActionTool(this),\\n      \\\"recording-inspecting\\\": new InspectTool(this, false),\\n      \\\"assertingText\\\": new TextAssertionTool(this, \\\"text\\\"),\\n      \\\"assertingVisibility\\\": new InspectTool(this, true),\\n      \\\"assertingValue\\\": new TextAssertionTool(this, \\\"value\\\"),\\n      \\\"assertingSnapshot\\\": new TextAssertionTool(this, \\\"snapshot\\\")\\n    };\\n    this._currentTool = this._tools.none;\\n    if (injectedScript.window.top === injectedScript.window) {\\n      this.overlay = new Overlay(this);\\n      this.overlay.setUIState(this.state);\\n    }\\n    this._stylesheet = new injectedScript.window.CSSStyleSheet();\\n    this._stylesheet.replaceSync(`\\n      body[data-pw-cursor=pointer] *, body[data-pw-cursor=pointer] *::after { cursor: pointer !important; }\\n      body[data-pw-cursor=text] *, body[data-pw-cursor=text] *::after { cursor: text !important; }\\n    `);\\n    this.installListeners();\\n    injectedScript.utils.cacheNormalizedWhitespaces();\\n    if (injectedScript.isUnderTest)\\n      console.error(\\\"Recorder script ready for test\\\");\\n    injectedScript.consoleApi.install();\\n  }\\n  installListeners() {\\n    var _a;\\n    removeEventListeners(this._listeners);\\n    this._listeners = [\\n      addEventListener(this.document, \\\"click\\\", (event) => this._onClick(event), true),\\n      addEventListener(this.document, \\\"auxclick\\\", (event) => this._onClick(event), true),\\n      addEventListener(this.document, \\\"dblclick\\\", (event) => this._onDblClick(event), true),\\n      addEventListener(this.document, \\\"contextmenu\\\", (event) => this._onContextMenu(event), true),\\n      addEventListener(this.document, \\\"dragstart\\\", (event) => this._onDragStart(event), true),\\n      addEventListener(this.document, \\\"input\\\", (event) => this._onInput(event), true),\\n      addEventListener(this.document, \\\"keydown\\\", (event) => this._onKeyDown(event), true),\\n      addEventListener(this.document, \\\"keyup\\\", (event) => this._onKeyUp(event), true),\\n      addEventListener(this.document, \\\"pointerdown\\\", (event) => this._onPointerDown(event), true),\\n      addEventListener(this.document, \\\"pointerup\\\", (event) => this._onPointerUp(event), true),\\n      addEventListener(this.document, \\\"mousedown\\\", (event) => this._onMouseDown(event), true),\\n      addEventListener(this.document, \\\"mouseup\\\", (event) => this._onMouseUp(event), true),\\n      addEventListener(this.document, \\\"mousemove\\\", (event) => this._onMouseMove(event), true),\\n      addEventListener(this.document, \\\"mouseleave\\\", (event) => this._onMouseLeave(event), true),\\n      addEventListener(this.document, \\\"mouseenter\\\", (event) => this._onMouseEnter(event), true),\\n      addEventListener(this.document, \\\"focus\\\", (event) => this._onFocus(event), true),\\n      addEventListener(this.document, \\\"scroll\\\", (event) => this._onScroll(event), true)\\n    ];\\n    this.highlight.install();\\n    let recreationInterval;\\n    const recreate = () => {\\n      this.highlight.install();\\n      recreationInterval = this.injectedScript.utils.builtins.setTimeout(recreate, 500);\\n    };\\n    recreationInterval = this.injectedScript.utils.builtins.setTimeout(recreate, 500);\\n    this._listeners.push(() => this.injectedScript.utils.builtins.clearTimeout(recreationInterval));\\n    this.highlight.appendChild(createSvgElement(this.document, clipPaths_default));\\n    (_a = this.overlay) == null ? void 0 : _a.install();\\n    this.document.adoptedStyleSheets.push(this._stylesheet);\\n  }\\n  uninstall() {\\n    var _a, _b;\\n    (_b = (_a = this._currentTool).cleanup) == null ? void 0 : _b.call(_a);\\n    this.highlight.uninstall();\\n    removeEventListeners(this._listeners);\\n    const index = this.document.adoptedStyleSheets.indexOf(this._stylesheet);\\n    if (index !== -1)\\n      this.document.adoptedStyleSheets.splice(index, 1);\\n  }\\n  _switchCurrentTool() {\\n    var _a, _b, _c;\\n    const newTool = this._tools[this.state.mode];\\n    if (newTool === this._currentTool)\\n      return;\\n    (_b = (_a = this._currentTool).cleanup) == null ? void 0 : _b.call(_a);\\n    this.clearHighlight();\\n    this._currentTool = newTool;\\n    (_c = this.injectedScript.document.body) == null ? void 0 : _c.setAttribute(\\\"data-pw-cursor\\\", newTool.cursor());\\n  }\\n  setUIState(state, delegate) {\\n    var _a;\\n    this._delegate = delegate;\\n    if (state.actionPoint && this.state.actionPoint && state.actionPoint.x === this.state.actionPoint.x && state.actionPoint.y === this.state.actionPoint.y) {\\n    } else if (!state.actionPoint && !this.state.actionPoint) {\\n    } else {\\n      if (state.actionPoint)\\n        this.highlight.showActionPoint(state.actionPoint.x, state.actionPoint.y);\\n      else\\n        this.highlight.hideActionPoint();\\n    }\\n    this.state = state;\\n    this.highlight.setLanguage(state.language);\\n    this._switchCurrentTool();\\n    (_a = this.overlay) == null ? void 0 : _a.setUIState(state);\\n    let highlight = \\\"noop\\\";\\n    if (state.actionSelector !== this._lastHighlightedSelector) {\\n      const entries = state.actionSelector ? entriesForSelectorHighlight(this.injectedScript, state.language, state.actionSelector, this.document) : null;\\n      highlight = (entries == null ? void 0 : entries.length) ? entries : \\\"clear\\\";\\n      this._lastHighlightedSelector = (entries == null ? void 0 : entries.length) ? state.actionSelector : void 0;\\n    }\\n    const ariaTemplateJSON = JSON.stringify(state.ariaTemplate);\\n    if (this._lastHighlightedAriaTemplateJSON !== ariaTemplateJSON) {\\n      const elements = state.ariaTemplate ? this.injectedScript.getAllByAria(this.document, state.ariaTemplate) : [];\\n      if (elements.length) {\\n        const color = elements.length > 1 ? HighlightColors.multiple : HighlightColors.single;\\n        highlight = elements.map((element) => ({ element, color }));\\n        this._lastHighlightedAriaTemplateJSON = ariaTemplateJSON;\\n      } else {\\n        if (!this._lastHighlightedSelector)\\n          highlight = \\\"clear\\\";\\n        this._lastHighlightedAriaTemplateJSON = \\\"undefined\\\";\\n      }\\n    }\\n    if (highlight === \\\"clear\\\")\\n      this.highlight.clearHighlight();\\n    else if (highlight !== \\\"noop\\\")\\n      this.highlight.updateHighlight(highlight);\\n  }\\n  clearHighlight() {\\n    this.updateHighlight(null, false);\\n  }\\n  _onClick(event) {\\n    var _a, _b, _c;\\n    if (!event.isTrusted)\\n      return;\\n    if ((_a = this.overlay) == null ? void 0 : _a.onClick(event))\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_c = (_b = this._currentTool).onClick) == null ? void 0 : _c.call(_b, event);\\n  }\\n  _onDblClick(event) {\\n    var _a, _b, _c;\\n    if (!event.isTrusted)\\n      return;\\n    if ((_a = this.overlay) == null ? void 0 : _a.onDblClick(event))\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_c = (_b = this._currentTool).onDblClick) == null ? void 0 : _c.call(_b, event);\\n  }\\n  _onContextMenu(event) {\\n    var _a, _b;\\n    if (!event.isTrusted)\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_b = (_a = this._currentTool).onContextMenu) == null ? void 0 : _b.call(_a, event);\\n  }\\n  _onDragStart(event) {\\n    var _a, _b;\\n    if (!event.isTrusted)\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_b = (_a = this._currentTool).onDragStart) == null ? void 0 : _b.call(_a, event);\\n  }\\n  _onPointerDown(event) {\\n    var _a, _b;\\n    if (!event.isTrusted)\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_b = (_a = this._currentTool).onPointerDown) == null ? void 0 : _b.call(_a, event);\\n  }\\n  _onPointerUp(event) {\\n    var _a, _b;\\n    if (!event.isTrusted)\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_b = (_a = this._currentTool).onPointerUp) == null ? void 0 : _b.call(_a, event);\\n  }\\n  _onMouseDown(event) {\\n    var _a, _b;\\n    if (!event.isTrusted)\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_b = (_a = this._currentTool).onMouseDown) == null ? void 0 : _b.call(_a, event);\\n  }\\n  _onMouseUp(event) {\\n    var _a, _b, _c;\\n    if (!event.isTrusted)\\n      return;\\n    if ((_a = this.overlay) == null ? void 0 : _a.onMouseUp(event))\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_c = (_b = this._currentTool).onMouseUp) == null ? void 0 : _c.call(_b, event);\\n  }\\n  _onMouseMove(event) {\\n    var _a, _b, _c;\\n    if (!event.isTrusted)\\n      return;\\n    if ((_a = this.overlay) == null ? void 0 : _a.onMouseMove(event))\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_c = (_b = this._currentTool).onMouseMove) == null ? void 0 : _c.call(_b, event);\\n  }\\n  _onMouseEnter(event) {\\n    var _a, _b;\\n    if (!event.isTrusted)\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_b = (_a = this._currentTool).onMouseEnter) == null ? void 0 : _b.call(_a, event);\\n  }\\n  _onMouseLeave(event) {\\n    var _a, _b;\\n    if (!event.isTrusted)\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_b = (_a = this._currentTool).onMouseLeave) == null ? void 0 : _b.call(_a, event);\\n  }\\n  _onFocus(event) {\\n    var _a, _b;\\n    if (!event.isTrusted)\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_b = (_a = this._currentTool).onFocus) == null ? void 0 : _b.call(_a, event);\\n  }\\n  _onScroll(event) {\\n    var _a, _b;\\n    if (!event.isTrusted)\\n      return;\\n    this._lastHighlightedSelector = void 0;\\n    this._lastHighlightedAriaTemplateJSON = \\\"undefined\\\";\\n    this.highlight.hideActionPoint();\\n    (_b = (_a = this._currentTool).onScroll) == null ? void 0 : _b.call(_a, event);\\n  }\\n  _onInput(event) {\\n    var _a, _b;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_b = (_a = this._currentTool).onInput) == null ? void 0 : _b.call(_a, event);\\n  }\\n  _onKeyDown(event) {\\n    var _a, _b;\\n    if (!event.isTrusted)\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_b = (_a = this._currentTool).onKeyDown) == null ? void 0 : _b.call(_a, event);\\n  }\\n  _onKeyUp(event) {\\n    var _a, _b;\\n    if (!event.isTrusted)\\n      return;\\n    if (this._ignoreOverlayEvent(event))\\n      return;\\n    (_b = (_a = this._currentTool).onKeyUp) == null ? void 0 : _b.call(_a, event);\\n  }\\n  updateHighlight(model, userGesture) {\\n    this._lastHighlightedSelector = void 0;\\n    this._lastHighlightedAriaTemplateJSON = \\\"undefined\\\";\\n    this._updateHighlight(model, userGesture);\\n  }\\n  _updateHighlight(model, userGesture) {\\n    var _a, _b;\\n    let tooltipText = model == null ? void 0 : model.tooltipText;\\n    if (tooltipText === void 0 && (model == null ? void 0 : model.selector))\\n      tooltipText = this.injectedScript.utils.asLocator(this.state.language, model.selector);\\n    if (model)\\n      this.highlight.updateHighlight(model.elements.map((element) => ({ element, color: model.color, tooltipText })));\\n    else\\n      this.highlight.clearHighlight();\\n    if (userGesture)\\n      (_b = (_a = this._delegate).highlightUpdated) == null ? void 0 : _b.call(_a);\\n  }\\n  _ignoreOverlayEvent(event) {\\n    return event.composedPath().some((e) => {\\n      const nodeName = e.nodeName || \\\"\\\";\\n      return nodeName.toLowerCase() === \\\"x-pw-glass\\\";\\n    });\\n  }\\n  deepEventTarget(event) {\\n    var _a;\\n    for (const element of event.composedPath()) {\\n      if (!((_a = this.overlay) == null ? void 0 : _a.contains(element)))\\n        return element;\\n    }\\n    return event.composedPath()[0];\\n  }\\n  setMode(mode) {\\n    var _a, _b;\\n    void ((_b = (_a = this._delegate).setMode) == null ? void 0 : _b.call(_a, mode));\\n  }\\n  async performAction(action) {\\n    var _a, _b;\\n    await ((_b = (_a = this._delegate).performAction) == null ? void 0 : _b.call(_a, action).catch(() => {\\n    }));\\n  }\\n  recordAction(action) {\\n    var _a, _b;\\n    void ((_b = (_a = this._delegate).recordAction) == null ? void 0 : _b.call(_a, action));\\n  }\\n  setOverlayState(state) {\\n    var _a, _b;\\n    void ((_b = (_a = this._delegate).setOverlayState) == null ? void 0 : _b.call(_a, state));\\n  }\\n  elementPicked(selector, model) {\\n    var _a, _b;\\n    const ariaSnapshot = this.injectedScript.ariaSnapshot(model.elements[0]);\\n    void ((_b = (_a = this._delegate).elementPicked) == null ? void 0 : _b.call(_a, { selector, ariaSnapshot }));\\n  }\\n};\\nvar Dialog = class {\\n  constructor(recorder) {\\n    this._dialogElement = null;\\n    this._recorder = recorder;\\n  }\\n  isShowing() {\\n    return !!this._dialogElement;\\n  }\\n  show(options) {\\n    const acceptButton = this._recorder.document.createElement(\\\"x-pw-tool-item\\\");\\n    acceptButton.title = \\\"Accept\\\";\\n    acceptButton.classList.add(\\\"accept\\\");\\n    acceptButton.appendChild(this._recorder.document.createElement(\\\"x-div\\\"));\\n    acceptButton.addEventListener(\\\"click\\\", () => options.onCommit());\\n    const cancelButton = this._recorder.document.createElement(\\\"x-pw-tool-item\\\");\\n    cancelButton.title = \\\"Close\\\";\\n    cancelButton.classList.add(\\\"cancel\\\");\\n    cancelButton.appendChild(this._recorder.document.createElement(\\\"x-div\\\"));\\n    cancelButton.addEventListener(\\\"click\\\", () => {\\n      var _a;\\n      this.close();\\n      (_a = options.onCancel) == null ? void 0 : _a.call(options);\\n    });\\n    this._dialogElement = this._recorder.document.createElement(\\\"x-pw-dialog\\\");\\n    this._keyboardListener = (event) => {\\n      var _a;\\n      if (event.key === \\\"Escape\\\") {\\n        this.close();\\n        (_a = options.onCancel) == null ? void 0 : _a.call(options);\\n        return;\\n      }\\n      if (event.key === \\\"Enter\\\" && (event.ctrlKey || event.metaKey)) {\\n        if (this._dialogElement)\\n          options.onCommit();\\n        return;\\n      }\\n    };\\n    this._recorder.document.addEventListener(\\\"keydown\\\", this._keyboardListener, true);\\n    const toolbarElement = this._recorder.document.createElement(\\\"x-pw-tools-list\\\");\\n    const labelElement = this._recorder.document.createElement(\\\"label\\\");\\n    labelElement.textContent = options.label;\\n    toolbarElement.appendChild(labelElement);\\n    toolbarElement.appendChild(this._recorder.document.createElement(\\\"x-spacer\\\"));\\n    toolbarElement.appendChild(acceptButton);\\n    toolbarElement.appendChild(cancelButton);\\n    this._dialogElement.appendChild(toolbarElement);\\n    const bodyElement = this._recorder.document.createElement(\\\"x-pw-dialog-body\\\");\\n    bodyElement.appendChild(options.body);\\n    this._dialogElement.appendChild(bodyElement);\\n    this._recorder.highlight.appendChild(this._dialogElement);\\n    return this._dialogElement;\\n  }\\n  moveTo(top, left) {\\n    if (!this._dialogElement)\\n      return;\\n    this._dialogElement.style.top = top + \\\"px\\\";\\n    this._dialogElement.style.left = left + \\\"px\\\";\\n  }\\n  close() {\\n    if (!this._dialogElement)\\n      return;\\n    this._dialogElement.remove();\\n    this._recorder.document.removeEventListener(\\\"keydown\\\", this._keyboardListener);\\n    this._dialogElement = null;\\n  }\\n};\\nfunction deepActiveElement(document) {\\n  let activeElement = document.activeElement;\\n  while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\\n    activeElement = activeElement.shadowRoot.activeElement;\\n  return activeElement;\\n}\\nfunction modifiersForEvent(event) {\\n  return (event.altKey ? 1 : 0) | (event.ctrlKey ? 2 : 0) | (event.metaKey ? 4 : 0) | (event.shiftKey ? 8 : 0);\\n}\\nfunction buttonForEvent(event) {\\n  switch (event.which) {\\n    case 1:\\n      return \\\"left\\\";\\n    case 2:\\n      return \\\"middle\\\";\\n    case 3:\\n      return \\\"right\\\";\\n  }\\n  return \\\"left\\\";\\n}\\nfunction positionForEvent(event) {\\n  const targetElement = event.target;\\n  if (targetElement.nodeName !== \\\"CANVAS\\\")\\n    return;\\n  return {\\n    x: event.offsetX,\\n    y: event.offsetY\\n  };\\n}\\nfunction consumeEvent(e) {\\n  e.preventDefault();\\n  e.stopPropagation();\\n  e.stopImmediatePropagation();\\n}\\nfunction asCheckbox(node) {\\n  if (!node || node.nodeName !== \\\"INPUT\\\")\\n    return null;\\n  const inputElement = node;\\n  return [\\\"checkbox\\\", \\\"radio\\\"].includes(inputElement.type) ? inputElement : null;\\n}\\nfunction isRangeInput(node) {\\n  if (!node || node.nodeName !== \\\"INPUT\\\")\\n    return false;\\n  const inputElement = node;\\n  return inputElement.type.toLowerCase() === \\\"range\\\";\\n}\\nfunction addEventListener(target, eventName, listener, useCapture) {\\n  target.addEventListener(eventName, listener, useCapture);\\n  const remove = () => {\\n    target.removeEventListener(eventName, listener, useCapture);\\n  };\\n  return remove;\\n}\\nfunction removeEventListeners(listeners) {\\n  for (const listener of listeners)\\n    listener();\\n  listeners.splice(0, listeners.length);\\n}\\nfunction entriesForSelectorHighlight(injectedScript, language, selector, ownerDocument) {\\n  try {\\n    const parsedSelector = injectedScript.parseSelector(selector);\\n    const elements = injectedScript.querySelectorAll(parsedSelector, ownerDocument);\\n    const color = elements.length > 1 ? HighlightColors.multiple : HighlightColors.single;\\n    const locator = injectedScript.utils.asLocator(language, selector);\\n    return elements.map((element, index) => {\\n      const suffix = elements.length > 1 ? ` [${index + 1} of ${elements.length}]` : \\\"\\\";\\n      return { element, color, tooltipText: locator + suffix };\\n    });\\n  } catch (e) {\\n    return [];\\n  }\\n}\\nfunction createSvgElement(doc, { tagName, attrs, children }) {\\n  const elem = doc.createElementNS(\\\"http://www.w3.org/2000/svg\\\", tagName);\\n  if (attrs) {\\n    for (const [k, v] of Object.entries(attrs))\\n      elem.setAttribute(k, v);\\n  }\\n  if (children) {\\n    for (const c of children)\\n      elem.appendChild(createSvgElement(doc, c));\\n  }\\n  return elem;\\n}\\n\\n// packages/injected/src/recorder/pollingRecorder.ts\\nvar PollingRecorder = class {\\n  constructor(injectedScript) {\\n    this._recorder = new Recorder(injectedScript);\\n    this._embedder = injectedScript.window;\\n    injectedScript.onGlobalListenersRemoved.add(() => this._recorder.installListeners());\\n    const refreshOverlay = () => {\\n      this._lastStateJSON = void 0;\\n      this._pollRecorderMode().catch((e) => console.log(e));\\n    };\\n    const uninstall = () => {\\n      this._recorder.uninstall();\\n    };\\n    this._embedder.__pw_refreshOverlay = refreshOverlay;\\n    this._embedder.__pw_uninstall = uninstall;\\n    refreshOverlay();\\n  }\\n  async _pollRecorderMode() {\\n    const pollPeriod = 1e3;\\n    if (this._pollRecorderModeTimer)\\n      this._recorder.injectedScript.utils.builtins.clearTimeout(this._pollRecorderModeTimer);\\n    const state = await this._embedder.__pw_recorderState().catch(() => null);\\n    if (!state) {\\n      this._pollRecorderModeTimer = this._recorder.injectedScript.utils.builtins.setTimeout(() => this._pollRecorderMode(), pollPeriod);\\n      return;\\n    }\\n    const stringifiedState = JSON.stringify(state);\\n    if (this._lastStateJSON !== stringifiedState) {\\n      this._lastStateJSON = stringifiedState;\\n      const win = this._recorder.document.defaultView;\\n      if (win.top !== win) {\\n        state.actionPoint = void 0;\\n      }\\n      this._recorder.setUIState(state, this);\\n    }\\n    this._pollRecorderModeTimer = this._recorder.injectedScript.utils.builtins.setTimeout(() => this._pollRecorderMode(), pollPeriod);\\n  }\\n  async performAction(action) {\\n    await this._embedder.__pw_recorderPerformAction(action);\\n  }\\n  async recordAction(action) {\\n    await this._embedder.__pw_recorderRecordAction(action);\\n  }\\n  async elementPicked(elementInfo) {\\n    await this._embedder.__pw_recorderElementPicked(elementInfo);\\n  }\\n  async setMode(mode) {\\n    await this._embedder.__pw_recorderSetMode(mode);\\n  }\\n  async setOverlayState(state) {\\n    await this._embedder.__pw_recorderSetOverlayState(state);\\n  }\\n};\\nvar pollingRecorder_default = PollingRecorder;\\n\";","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport deviceDescriptorsSource from './deviceDescriptorsSource.json';\n\nimport type { Devices } from './types';\n\n\nexport const deviceDescriptors = deviceDescriptorsSource as Devices;\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { sanitizeDeviceOptions, toClickOptionsForSourceCode, toKeyboardModifiers, toSignalMap } from './language';\nimport { asLocator, escapeWithQuotes } from '../../utils';\nimport { deviceDescriptors } from '../deviceDescriptors';\n\nimport type { Language, LanguageGenerator, LanguageGeneratorOptions } from './types';\nimport type { BrowserContextOptions } from '../../../types/types';\nimport type * as actions from '@recorder/actions';\n\ntype CSharpLanguageMode = 'library' | 'mstest' | 'nunit';\n\nexport class CSharpLanguageGenerator implements LanguageGenerator {\n  id: string;\n  groupName = '.NET C#';\n  name: string;\n  highlighter = 'csharp' as Language;\n  _mode: CSharpLanguageMode;\n\n  constructor(mode: CSharpLanguageMode) {\n    if (mode === 'library') {\n      this.name = 'Library';\n      this.id = 'csharp';\n    } else if (mode === 'mstest') {\n      this.name = 'MSTest';\n      this.id = 'csharp-mstest';\n    } else if (mode === 'nunit') {\n      this.name = 'NUnit';\n      this.id = 'csharp-nunit';\n    } else {\n      throw new Error(`Unknown C# language mode: ${mode}`);\n    }\n    this._mode = mode;\n  }\n\n  generateAction(actionInContext: actions.ActionInContext): string {\n    const action = this._generateActionInner(actionInContext);\n    if (action)\n      return action;\n    return '';\n  }\n\n  _generateActionInner(actionInContext: actions.ActionInContext): string {\n    const action = actionInContext.action;\n    if (this._mode !== 'library' && (action.name === 'openPage' || action.name === 'closePage'))\n      return '';\n    let pageAlias = actionInContext.frame.pageAlias;\n    if (this._mode !== 'library')\n      pageAlias = pageAlias.replace('page', 'Page');\n    const formatter = new CSharpFormatter(this._mode === 'library' ? 0 : 8);\n\n    if (action.name === 'openPage') {\n      formatter.add(`var ${pageAlias} = await context.NewPageAsync();`);\n      if (action.url && action.url !== 'about:blank' && action.url !== 'chrome://newtab/')\n        formatter.add(`await ${pageAlias}.GotoAsync(${quote(action.url)});`);\n      return formatter.format();\n    }\n\n    const locators = actionInContext.frame.framePath.map(selector => `.${this._asLocator(selector)}.ContentFrame`);\n    const subject = `${pageAlias}${locators.join('')}`;\n    const signals = toSignalMap(action);\n\n    if (signals.dialog) {\n      formatter.add(`    void ${pageAlias}_Dialog${signals.dialog.dialogAlias}_EventHandler(object sender, IDialog dialog)\n      {\n          Console.WriteLine($\"Dialog message: {dialog.Message}\");\n          dialog.DismissAsync();\n          ${pageAlias}.Dialog -= ${pageAlias}_Dialog${signals.dialog.dialogAlias}_EventHandler;\n      }\n      ${pageAlias}.Dialog += ${pageAlias}_Dialog${signals.dialog.dialogAlias}_EventHandler;`);\n    }\n\n    const lines: string[] = [];\n    lines.push(this._generateActionCall(subject, actionInContext));\n\n    if (signals.download) {\n      lines.unshift(`var download${signals.download.downloadAlias} = await ${pageAlias}.RunAndWaitForDownloadAsync(async () =>\\n{`);\n      lines.push(`});`);\n    }\n\n    if (signals.popup) {\n      lines.unshift(`var ${signals.popup.popupAlias} = await ${pageAlias}.RunAndWaitForPopupAsync(async () =>\\n{`);\n      lines.push(`});`);\n    }\n\n    for (const line of lines)\n      formatter.add(line);\n\n    return formatter.format();\n  }\n\n  private _generateActionCall(subject: string, actionInContext: actions.ActionInContext): string {\n    const action = actionInContext.action;\n    switch (action.name) {\n      case 'openPage':\n        throw Error('Not reached');\n      case 'closePage':\n        return `await ${subject}.CloseAsync();`;\n      case 'click': {\n        let method = 'Click';\n        if (action.clickCount === 2)\n          method = 'DblClick';\n        const options = toClickOptionsForSourceCode(action);\n        if (!Object.entries(options).length)\n          return `await ${subject}.${this._asLocator(action.selector)}.${method}Async();`;\n        const optionsString = formatObject(options, '    ', 'Locator' + method + 'Options');\n        return `await ${subject}.${this._asLocator(action.selector)}.${method}Async(${optionsString});`;\n      }\n      case 'check':\n        return `await ${subject}.${this._asLocator(action.selector)}.CheckAsync();`;\n      case 'uncheck':\n        return `await ${subject}.${this._asLocator(action.selector)}.UncheckAsync();`;\n      case 'fill':\n        return `await ${subject}.${this._asLocator(action.selector)}.FillAsync(${quote(action.text)});`;\n      case 'setInputFiles':\n        return `await ${subject}.${this._asLocator(action.selector)}.SetInputFilesAsync(${formatObject(action.files)});`;\n      case 'press': {\n        const modifiers = toKeyboardModifiers(action.modifiers);\n        const shortcut = [...modifiers, action.key].join('+');\n        return `await ${subject}.${this._asLocator(action.selector)}.PressAsync(${quote(shortcut)});`;\n      }\n      case 'navigate':\n        return `await ${subject}.GotoAsync(${quote(action.url)});`;\n      case 'select':\n        return `await ${subject}.${this._asLocator(action.selector)}.SelectOptionAsync(${formatObject(action.options)});`;\n      case 'assertText':\n        return `await Expect(${subject}.${this._asLocator(action.selector)}).${action.substring ? 'ToContainTextAsync' : 'ToHaveTextAsync'}(${quote(action.text)});`;\n      case 'assertChecked':\n        return `await Expect(${subject}.${this._asLocator(action.selector)})${action.checked ? '' : '.Not'}.ToBeCheckedAsync();`;\n      case 'assertVisible':\n        return `await Expect(${subject}.${this._asLocator(action.selector)}).ToBeVisibleAsync();`;\n      case 'assertValue': {\n        const assertion = action.value ? `ToHaveValueAsync(${quote(action.value)})` : `ToBeEmptyAsync()`;\n        return `await Expect(${subject}.${this._asLocator(action.selector)}).${assertion};`;\n      }\n      case 'assertSnapshot':\n        return `await Expect(${subject}.${this._asLocator(action.selector)}).ToMatchAriaSnapshotAsync(${quote(action.snapshot)});`;\n    }\n  }\n\n  private _asLocator(selector: string) {\n    return asLocator('csharp', selector);\n  }\n\n  generateHeader(options: LanguageGeneratorOptions): string {\n    if (this._mode === 'library')\n      return this.generateStandaloneHeader(options);\n    return this.generateTestRunnerHeader(options);\n  }\n\n  generateStandaloneHeader(options: LanguageGeneratorOptions): string {\n    const formatter = new CSharpFormatter(0);\n    formatter.add(`\n      using Microsoft.Playwright;\n      using System;\n      using System.Threading.Tasks;\n\n      using var playwright = await Playwright.CreateAsync();\n      await using var browser = await playwright.${toPascal(options.browserName)}.LaunchAsync(${formatObject(options.launchOptions, '    ', 'BrowserTypeLaunchOptions')});\n      var context = await browser.NewContextAsync(${formatContextOptions(options.contextOptions, options.deviceName)});`);\n    if (options.contextOptions.recordHar) {\n      const url = options.contextOptions.recordHar.urlFilter;\n      formatter.add(`      await context.RouteFromHARAsync(${quote(options.contextOptions.recordHar.path)}${url ? `, ${formatObject({ url }, '    ', 'BrowserContextRouteFromHAROptions')}` : ''});`);\n    }\n    formatter.newLine();\n    return formatter.format();\n  }\n\n  generateTestRunnerHeader(options: LanguageGeneratorOptions): string {\n    const formatter = new CSharpFormatter(0);\n    formatter.add(`\n      using Microsoft.Playwright.${this._mode === 'nunit' ? 'NUnit' : 'MSTest'};\n      using Microsoft.Playwright;\n\n      ${this._mode === 'nunit' ? `[Parallelizable(ParallelScope.Self)]\n      [TestFixture]` : '[TestClass]'}\n      public class Tests : PageTest\n      {`);\n    const formattedContextOptions = formatContextOptions(options.contextOptions, options.deviceName);\n    if (formattedContextOptions) {\n      formatter.add(`public override BrowserNewContextOptions ContextOptions()\n      {\n          return ${formattedContextOptions};\n      }`);\n      formatter.newLine();\n    }\n    formatter.add(`    [${this._mode === 'nunit' ? 'Test' : 'TestMethod'}]\n    public async Task MyTest()\n    {`);\n    if (options.contextOptions.recordHar) {\n      const url = options.contextOptions.recordHar.urlFilter;\n      formatter.add(`    await Context.RouteFromHARAsync(${quote(options.contextOptions.recordHar.path)}${url ? `, ${formatObject({ url }, '    ', 'BrowserContextRouteFromHAROptions')}` : ''});`);\n    }\n    return formatter.format();\n  }\n\n  generateFooter(saveStorage: string | undefined): string {\n    const offset = this._mode === 'library' ? '' : '        ';\n    let storageStateLine = saveStorage ? `\\n${offset}await context.StorageStateAsync(new BrowserContextStorageStateOptions\\n${offset}{\\n${offset}    Path = ${quote(saveStorage)}\\n${offset}});\\n` : '';\n    if (this._mode !== 'library')\n      storageStateLine += `    }\\n}\\n`;\n    return storageStateLine;\n  }\n}\n\nfunction formatObject(value: any, indent = '    ', name = ''): string {\n  if (typeof value === 'string') {\n    if (['permissions', 'colorScheme', 'modifiers', 'button', 'recordHarContent', 'recordHarMode', 'serviceWorkers'].includes(name))\n      return `${getClassName(name)}.${toPascal(value)}`;\n    return quote(value);\n  }\n  if (Array.isArray(value))\n    return `new[] { ${value.map(o => formatObject(o, indent, name)).join(', ')} }`;\n  if (typeof value === 'object') {\n    const keys = Object.keys(value).filter(key => value[key] !== undefined).sort();\n    if (!keys.length)\n      return name ? `new ${getClassName(name)}` : '';\n    const tokens: string[] = [];\n    for (const key of keys) {\n      const property = getPropertyName(key);\n      tokens.push(`${property} = ${formatObject(value[key], indent, key)},`);\n    }\n    if (name)\n      return `new ${getClassName(name)}\\n{\\n${indent}${tokens.join(`\\n${indent}`)}\\n${indent}}`;\n    return `{\\n${indent}${tokens.join(`\\n${indent}`)}\\n${indent}}`;\n  }\n  if (name === 'latitude' || name === 'longitude')\n    return String(value) + 'm';\n\n  return String(value);\n}\n\nfunction getClassName(value: string): string {\n  switch (value) {\n    case 'viewport': return 'ViewportSize';\n    case 'proxy': return 'ProxySettings';\n    case 'permissions': return 'ContextPermission';\n    case 'modifiers': return 'KeyboardModifier';\n    case 'button': return 'MouseButton';\n    case 'recordHarMode': return 'HarMode';\n    case 'recordHarContent': return 'HarContentPolicy';\n    case 'serviceWorkers': return 'ServiceWorkerPolicy';\n    default: return toPascal(value);\n  }\n}\n\nfunction getPropertyName(key: string): string {\n  switch (key) {\n    case 'storageState': return 'StorageStatePath';\n    case 'viewport': return 'ViewportSize';\n    default: return toPascal(key);\n  }\n}\n\nfunction toPascal(value: string): string {\n  return value[0].toUpperCase() + value.slice(1);\n}\n\nfunction formatContextOptions(contextOptions: BrowserContextOptions, deviceName: string | undefined): string {\n  let options = { ...contextOptions };\n  // recordHAR is replaced with routeFromHAR in the generated code.\n  delete options.recordHar;\n  const device = deviceName && deviceDescriptors[deviceName];\n  if (!device) {\n    if (!Object.entries(options).length)\n      return '';\n    return formatObject(options, '    ', 'BrowserNewContextOptions');\n  }\n\n  options = sanitizeDeviceOptions(device, options);\n  if (!Object.entries(options).length)\n    return `playwright.Devices[${quote(deviceName!)}]`;\n\n  return formatObject(options, '    ', `BrowserNewContextOptions(playwright.Devices[${quote(deviceName!)}])`);\n}\n\nclass CSharpFormatter {\n  private _baseIndent: string;\n  private _baseOffset: string;\n  private _lines: string[] = [];\n\n  constructor(offset = 0) {\n    this._baseIndent = ' '.repeat(4);\n    this._baseOffset = ' '.repeat(offset);\n  }\n\n  prepend(text: string) {\n    this._lines = text.trim().split('\\n').map(line => line.trim()).concat(this._lines);\n  }\n\n  add(text: string) {\n    this._lines.push(...text.trim().split('\\n').map(line => line.trim()));\n  }\n\n  newLine() {\n    this._lines.push('');\n  }\n\n  format(): string {\n    let spaces = '';\n    let previousLine = '';\n    return this._lines.map((line: string) => {\n      if (line === '')\n        return line;\n      if (line.startsWith('}') || line.startsWith(']') || line.includes('});') || line === ');')\n        spaces = spaces.substring(this._baseIndent.length);\n\n      const extraSpaces = /^(for|while|if).*\\(.*\\)$/.test(previousLine) ? this._baseIndent : '';\n      previousLine = line;\n\n      line = spaces + extraSpaces + line;\n      if (line.endsWith('{') || line.endsWith('[') || line.endsWith('('))\n        spaces += this._baseIndent;\n      if (line.endsWith('));'))\n        spaces = spaces.substring(this._baseIndent.length);\n\n      return this._baseOffset + line;\n    }).join('\\n');\n  }\n}\n\nfunction quote(text: string) {\n  return escapeWithQuotes(text, '\\\"');\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { sanitizeDeviceOptions, toClickOptionsForSourceCode, toKeyboardModifiers, toSignalMap } from './language';\nimport { asLocator, escapeWithQuotes } from '../../utils';\nimport { deviceDescriptors } from '../deviceDescriptors';\n\nimport type { Language, LanguageGenerator, LanguageGeneratorOptions } from './types';\nimport type { BrowserContextOptions } from '../../../types/types';\nimport type * as actions from '@recorder/actions';\n\nexport class JavaScriptLanguageGenerator implements LanguageGenerator {\n  id: string;\n  groupName = 'Node.js';\n  name: string;\n  highlighter = 'javascript' as Language;\n  private _isTest: boolean;\n\n  constructor(isTest: boolean) {\n    this.id = isTest ? 'playwright-test' : 'javascript';\n    this.name = isTest ? 'Test Runner' : 'Library';\n    this._isTest = isTest;\n  }\n\n  generateAction(actionInContext: actions.ActionInContext): string {\n    const action = actionInContext.action;\n    if (this._isTest && actionInContext.frame.pageAlias === 'page' && (action.name === 'openPage' || action.name === 'closePage'))\n      return '';\n\n    const pageAlias = actionInContext.frame.pageAlias;\n    const formatter = new JavaScriptFormatter(2);\n\n    if (action.name === 'openPage') {\n      formatter.add(`const ${pageAlias} = await context.newPage();`);\n      if (action.url && action.url !== 'about:blank' && action.url !== 'chrome://newtab/')\n        formatter.add(`await ${pageAlias}.goto(${quote(action.url)});`);\n      return formatter.format();\n    }\n\n    const locators = actionInContext.frame.framePath.map(selector => `.${this._asLocator(selector)}.contentFrame()`);\n    const subject = `${pageAlias}${locators.join('')}`;\n    const signals = toSignalMap(action);\n\n    if (signals.dialog) {\n      formatter.add(`  ${pageAlias}.once('dialog', dialog => {\n    console.log(\\`Dialog message: $\\{dialog.message()}\\`);\n    dialog.dismiss().catch(() => {});\n  });`);\n    }\n\n    if (signals.popup)\n      formatter.add(`const ${signals.popup.popupAlias}Promise = ${pageAlias}.waitForEvent('popup');`);\n    if (signals.download)\n      formatter.add(`const download${signals.download.downloadAlias}Promise = ${pageAlias}.waitForEvent('download');`);\n\n    formatter.add(wrapWithStep(actionInContext.description, this._generateActionCall(subject, actionInContext)));\n\n    if (signals.popup)\n      formatter.add(`const ${signals.popup.popupAlias} = await ${signals.popup.popupAlias}Promise;`);\n    if (signals.download)\n      formatter.add(`const download${signals.download.downloadAlias} = await download${signals.download.downloadAlias}Promise;`);\n\n    return formatter.format();\n  }\n\n  private _generateActionCall(subject: string, actionInContext: actions.ActionInContext): string {\n    const action = actionInContext.action;\n    switch (action.name) {\n      case 'openPage':\n        throw Error('Not reached');\n      case 'closePage':\n        return `await ${subject}.close();`;\n      case 'click': {\n        let method = 'click';\n        if (action.clickCount === 2)\n          method = 'dblclick';\n        const options = toClickOptionsForSourceCode(action);\n        const optionsString = formatOptions(options, false);\n        return `await ${subject}.${this._asLocator(action.selector)}.${method}(${optionsString});`;\n      }\n      case 'check':\n        return `await ${subject}.${this._asLocator(action.selector)}.check();`;\n      case 'uncheck':\n        return `await ${subject}.${this._asLocator(action.selector)}.uncheck();`;\n      case 'fill':\n        return `await ${subject}.${this._asLocator(action.selector)}.fill(${quote(action.text)});`;\n      case 'setInputFiles':\n        return `await ${subject}.${this._asLocator(action.selector)}.setInputFiles(${formatObject(action.files.length === 1 ? action.files[0] : action.files)});`;\n      case 'press': {\n        const modifiers = toKeyboardModifiers(action.modifiers);\n        const shortcut = [...modifiers, action.key].join('+');\n        return `await ${subject}.${this._asLocator(action.selector)}.press(${quote(shortcut)});`;\n      }\n      case 'navigate':\n        return `await ${subject}.goto(${quote(action.url)});`;\n      case 'select':\n        return `await ${subject}.${this._asLocator(action.selector)}.selectOption(${formatObject(action.options.length === 1 ? action.options[0] : action.options)});`;\n      case 'assertText':\n        return `${this._isTest ? '' : '// '}await expect(${subject}.${this._asLocator(action.selector)}).${action.substring ? 'toContainText' : 'toHaveText'}(${quote(action.text)});`;\n      case 'assertChecked':\n        return `${this._isTest ? '' : '// '}await expect(${subject}.${this._asLocator(action.selector)})${action.checked ? '' : '.not'}.toBeChecked();`;\n      case 'assertVisible':\n        return `${this._isTest ? '' : '// '}await expect(${subject}.${this._asLocator(action.selector)}).toBeVisible();`;\n      case 'assertValue': {\n        const assertion = action.value ? `toHaveValue(${quote(action.value)})` : `toBeEmpty()`;\n        return `${this._isTest ? '' : '// '}await expect(${subject}.${this._asLocator(action.selector)}).${assertion};`;\n      }\n      case 'assertSnapshot':\n        return `${this._isTest ? '' : '// '}await expect(${subject}.${this._asLocator(action.selector)}).toMatchAriaSnapshot(${quoteMultiline(action.snapshot)});`;\n    }\n  }\n\n  private _asLocator(selector: string) {\n    return asLocator('javascript', selector);\n  }\n\n  generateHeader(options: LanguageGeneratorOptions, includeContext?: boolean): string {\n    if (this._isTest)\n      return this.generateTestHeader(options, includeContext);\n    return this.generateStandaloneHeader(options);\n  }\n\n  generateFooter(saveStorage: string | undefined): string {\n    if (this._isTest)\n      return this.generateTestFooter(saveStorage);\n    return this.generateStandaloneFooter(saveStorage);\n  }\n\n  generateTestHeader(options: LanguageGeneratorOptions, includeContext?: boolean): string {\n    const formatter = new JavaScriptFormatter();\n    const useText = formatContextOptions(options.contextOptions, options.deviceName, this._isTest);\n    formatter.add(`\n      import { test, expect${options.deviceName ? ', devices' : ''} } from '@playwright/test';\n${useText ? '\\ntest.use(' + useText + ');\\n' : ''}\n      test('test', async ({ page${includeContext ? ', context' : ''} }) => {`);\n    if (options.contextOptions.recordHar) {\n      const url = options.contextOptions.recordHar.urlFilter;\n      formatter.add(`  await page.routeFromHAR(${quote(options.contextOptions.recordHar.path)}${url ? `, ${formatOptions({ url }, false)}` : ''});`);\n    }\n    return formatter.format();\n  }\n\n  generateTestFooter(saveStorage: string | undefined): string {\n    return `});`;\n  }\n\n  generateStandaloneHeader(options: LanguageGeneratorOptions): string {\n    const formatter = new JavaScriptFormatter();\n    formatter.add(`\n      const { ${options.browserName}${options.deviceName ? ', devices' : ''} } = require('playwright');\n\n      (async () => {\n        const browser = await ${options.browserName}.launch(${formatObjectOrVoid(options.launchOptions)});\n        const context = await browser.newContext(${formatContextOptions(options.contextOptions, options.deviceName, false)});`);\n    if (options.contextOptions.recordHar)\n      formatter.add(`        await context.routeFromHAR(${quote(options.contextOptions.recordHar.path)});`);\n    return formatter.format();\n  }\n\n  generateStandaloneFooter(saveStorage: string | undefined): string {\n    const storageStateLine = saveStorage ? `\\n  await context.storageState({ path: ${quote(saveStorage)} });` : '';\n    return `\\n  // ---------------------${storageStateLine}\n  await context.close();\n  await browser.close();\n})();`;\n  }\n}\n\nfunction formatOptions(value: any, hasArguments: boolean): string {\n  const keys = Object.keys(value);\n  if (!keys.length)\n    return '';\n  return (hasArguments ? ', ' : '') + formatObject(value);\n}\n\nfunction formatObject(value: any, indent = '  '): string {\n  if (typeof value === 'string')\n    return quote(value);\n  if (Array.isArray(value))\n    return `[${value.map(o => formatObject(o)).join(', ')}]`;\n  if (typeof value === 'object') {\n    const keys = Object.keys(value).filter(key => value[key] !== undefined).sort();\n    if (!keys.length)\n      return '{}';\n    const tokens: string[] = [];\n    for (const key of keys)\n      tokens.push(`${key}: ${formatObject(value[key])}`);\n    return `{\\n${indent}${tokens.join(`,\\n${indent}`)}\\n}`;\n  }\n  return String(value);\n}\n\nfunction formatObjectOrVoid(value: any, indent = '  '): string {\n  const result = formatObject(value, indent);\n  return result === '{}' ? '' : result;\n}\n\nfunction formatContextOptions(options: BrowserContextOptions, deviceName: string | undefined, isTest: boolean): string {\n  const device = deviceName && deviceDescriptors[deviceName];\n  // recordHAR is replaced with routeFromHAR in the generated code.\n  options = { ...options, recordHar: undefined };\n  if (!device)\n    return formatObjectOrVoid(options);\n  // Filter out all the properties from the device descriptor.\n  let serializedObject = formatObjectOrVoid(sanitizeDeviceOptions(device, options));\n  // When there are no additional context options, we still want to spread the device inside.\n  if (!serializedObject)\n    serializedObject = '{\\n}';\n  const lines = serializedObject.split('\\n');\n  lines.splice(1, 0, `...devices[${quote(deviceName!)}],`);\n  return lines.join('\\n');\n}\n\nexport class JavaScriptFormatter {\n  private _baseIndent: string;\n  private _baseOffset: string;\n  private _lines: string[] = [];\n\n  constructor(offset = 0) {\n    this._baseIndent = ' '.repeat(2);\n    this._baseOffset = ' '.repeat(offset);\n  }\n\n  prepend(text: string) {\n    const trim = isMultilineString(text) ? (line: string) => line : (line: string) => line.trim();\n    this._lines = text.trim().split('\\n').map(trim).concat(this._lines);\n  }\n\n  add(text: string) {\n    const trim = isMultilineString(text) ? (line: string) => line : (line: string) => line.trim();\n    this._lines.push(...text.trim().split('\\n').map(trim));\n  }\n\n  newLine() {\n    this._lines.push('');\n  }\n\n  format(): string {\n    let spaces = '';\n    let previousLine = '';\n    return this._lines.map((line: string) => {\n      if (line === '')\n        return line;\n      if (line.startsWith('}') || line.startsWith(']'))\n        spaces = spaces.substring(this._baseIndent.length);\n\n      const extraSpaces = /^(for|while|if|try).*\\(.*\\)$/.test(previousLine) ? this._baseIndent : '';\n      previousLine = line;\n\n      const callCarryOver = line.startsWith('.set');\n      line = spaces + extraSpaces + (callCarryOver ? this._baseIndent : '') + line;\n      if (line.endsWith('{') || line.endsWith('['))\n        spaces += this._baseIndent;\n      return this._baseOffset + line;\n    }).join('\\n');\n  }\n}\n\nfunction quote(text: string) {\n  return escapeWithQuotes(text, '\\'');\n}\n\nfunction wrapWithStep(description: string | undefined, body: string) {\n  return description ? `await test.step(\\`${description}\\`, async () => {\n${body}\n});` : body;\n}\n\nexport function quoteMultiline(text: string, indent = '  ') {\n  const escape = (text: string) => text.replace(/\\\\/g, '\\\\\\\\')\n      .replace(/`/g, '\\\\`')\n      .replace(/\\$\\{/g, '\\\\${');\n  const lines = text.split('\\n');\n  if (lines.length === 1)\n    return '`' + escape(text) + '`';\n  return '`\\n' + lines.map(line => indent + escape(line).replace(/\\${/g, '\\\\${')).join('\\n') + `\\n${indent}\\``;\n}\n\nfunction isMultilineString(text: string) {\n  return text.match(/`[\\S\\s]*`/)?.[0].includes('\\n');\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { toClickOptionsForSourceCode, toKeyboardModifiers, toSignalMap } from './language';\nimport { deviceDescriptors } from '../deviceDescriptors';\nimport { JavaScriptFormatter } from './javascript';\nimport { asLocator, escapeWithQuotes } from '../../utils';\n\nimport type { BrowserContextOptions } from '../../../types/types';\nimport type * as types from '../types';\nimport type { Language, LanguageGenerator, LanguageGeneratorOptions } from './types';\nimport type * as actions from '@recorder/actions';\n\ntype JavaLanguageMode = 'library' | 'junit';\n\nexport class JavaLanguageGenerator implements LanguageGenerator {\n  id: string;\n  groupName = 'Java';\n  name: string;\n  highlighter = 'java' as Language;\n  _mode: JavaLanguageMode;\n\n  constructor(mode: JavaLanguageMode) {\n    if (mode === 'library') {\n      this.name = 'Library';\n      this.id = 'java';\n    } else if (mode === 'junit') {\n      this.name = 'JUnit';\n      this.id = 'java-junit';\n    } else {\n      throw new Error(`Unknown Java language mode: ${mode}`);\n    }\n    this._mode = mode;\n  }\n\n  generateAction(actionInContext: actions.ActionInContext): string {\n    const action = actionInContext.action;\n    const pageAlias = actionInContext.frame.pageAlias;\n    const offset = this._mode === 'junit' ? 4 : 6;\n    const formatter = new JavaScriptFormatter(offset);\n\n    if (this._mode !== 'library' && (action.name === 'openPage' || action.name === 'closePage'))\n      return '';\n\n    if (action.name === 'openPage') {\n      formatter.add(`Page ${pageAlias} = context.newPage();`);\n      if (action.url && action.url !== 'about:blank' && action.url !== 'chrome://newtab/')\n        formatter.add(`${pageAlias}.navigate(${quote(action.url)});`);\n      return formatter.format();\n    }\n\n    const locators = actionInContext.frame.framePath.map(selector => `.${this._asLocator(selector, false)}.contentFrame()`);\n    const subject = `${pageAlias}${locators.join('')}`;\n    const signals = toSignalMap(action);\n\n    if (signals.dialog) {\n      formatter.add(`  ${pageAlias}.onceDialog(dialog -> {\n        System.out.println(String.format(\"Dialog message: %s\", dialog.message()));\n        dialog.dismiss();\n      });`);\n    }\n\n    let code = this._generateActionCall(subject, actionInContext, !!actionInContext.frame.framePath.length);\n\n    if (signals.popup) {\n      code = `Page ${signals.popup.popupAlias} = ${pageAlias}.waitForPopup(() -> {\n        ${code}\n      });`;\n    }\n\n    if (signals.download) {\n      code = `Download download${signals.download.downloadAlias} = ${pageAlias}.waitForDownload(() -> {\n        ${code}\n      });`;\n    }\n\n    formatter.add(code);\n\n    return formatter.format();\n  }\n\n  private _generateActionCall(subject: string, actionInContext: actions.ActionInContext, inFrameLocator: boolean): string {\n    const action = actionInContext.action;\n    switch (action.name) {\n      case 'openPage':\n        throw Error('Not reached');\n      case 'closePage':\n        return `${subject}.close();`;\n      case 'click': {\n        let method = 'click';\n        if (action.clickCount === 2)\n          method = 'dblclick';\n        const options = toClickOptionsForSourceCode(action);\n        const optionsText = formatClickOptions(options);\n        return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.${method}(${optionsText});`;\n      }\n      case 'check':\n        return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.check();`;\n      case 'uncheck':\n        return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.uncheck();`;\n      case 'fill':\n        return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.fill(${quote(action.text)});`;\n      case 'setInputFiles':\n        return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.setInputFiles(${formatPath(action.files.length === 1 ? action.files[0] : action.files)});`;\n      case 'press': {\n        const modifiers = toKeyboardModifiers(action.modifiers);\n        const shortcut = [...modifiers, action.key].join('+');\n        return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.press(${quote(shortcut)});`;\n      }\n      case 'navigate':\n        return `${subject}.navigate(${quote(action.url)});`;\n      case 'select':\n        return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.selectOption(${formatSelectOption(action.options.length === 1 ? action.options[0] : action.options)});`;\n      case 'assertText':\n        return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)}).${action.substring ? 'containsText' : 'hasText'}(${quote(action.text)});`;\n      case 'assertChecked':\n        return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)})${action.checked ? '' : '.not()'}.isChecked();`;\n      case 'assertVisible':\n        return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)}).isVisible();`;\n      case 'assertValue': {\n        const assertion = action.value ? `hasValue(${quote(action.value)})` : `isEmpty()`;\n        return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)}).${assertion};`;\n      }\n      case 'assertSnapshot':\n        return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)}).matchesAriaSnapshot(${quote(action.snapshot)});`;\n    }\n  }\n\n  private _asLocator(selector: string, inFrameLocator: boolean) {\n    return asLocator('java', selector, inFrameLocator);\n  }\n\n  generateHeader(options: LanguageGeneratorOptions): string {\n    const formatter = new JavaScriptFormatter();\n    if (this._mode === 'junit') {\n      formatter.add(`\n      import com.microsoft.playwright.junit.UsePlaywright;\n      import com.microsoft.playwright.Page;\n      import com.microsoft.playwright.options.*;\n\n      ${options.contextOptions.recordHar ? `import java.nio.file.Paths;\\n` : ''}import org.junit.jupiter.api.*;\n      import static com.microsoft.playwright.assertions.PlaywrightAssertions.*;\n\n      @UsePlaywright\n      public class TestExample {\n        @Test\n        void test(Page page) {`);\n      if (options.contextOptions.recordHar) {\n        const url = options.contextOptions.recordHar.urlFilter;\n        const recordHarOptions = typeof url === 'string' ? `, new Page.RouteFromHAROptions()\n            .setUrl(${quote(url)})` : '';\n        formatter.add(`          page.routeFromHAR(Paths.get(${quote(options.contextOptions.recordHar.path)})${recordHarOptions});`);\n      }\n      return formatter.format();\n    }\n    formatter.add(`\n    import com.microsoft.playwright.*;\n    import com.microsoft.playwright.options.*;\n    import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;\n    ${options.contextOptions.recordHar ? `import java.nio.file.Paths;\\n` : ''}import java.util.*;\n\n    public class Example {\n      public static void main(String[] args) {\n        try (Playwright playwright = Playwright.create()) {\n          Browser browser = playwright.${options.browserName}().launch(${formatLaunchOptions(options.launchOptions)});\n          BrowserContext context = browser.newContext(${formatContextOptions(options.contextOptions, options.deviceName)});`);\n    if (options.contextOptions.recordHar) {\n      const url = options.contextOptions.recordHar.urlFilter;\n      const recordHarOptions = typeof url === 'string' ? `, new BrowserContext.RouteFromHAROptions()\n          .setUrl(${quote(url)})` : '';\n      formatter.add(`          context.routeFromHAR(Paths.get(${quote(options.contextOptions.recordHar.path)})${recordHarOptions});`);\n    }\n    return formatter.format();\n  }\n\n  generateFooter(saveStorage: string | undefined): string {\n    const storageStateLine = saveStorage ? `\\n      context.storageState(new BrowserContext.StorageStateOptions().setPath(${quote(saveStorage)}));\\n` : '';\n    if (this._mode === 'junit') {\n      return `${storageStateLine}  }\n}`;\n    }\n    return `${storageStateLine}    }\n  }\n}`;\n  }\n}\n\nfunction formatPath(files: string | string[]): string {\n  if (Array.isArray(files)) {\n    if (files.length === 0)\n      return 'new Path[0]';\n    return `new Path[] {${files.map(s => 'Paths.get(' + quote(s) + ')').join(', ')}}`;\n  }\n  return `Paths.get(${quote(files)})`;\n}\n\nfunction formatSelectOption(options: string | string[]): string {\n  if (Array.isArray(options)) {\n    if (options.length === 0)\n      return 'new String[0]';\n    return `new String[] {${options.map(s => quote(s)).join(', ')}}`;\n  }\n  return quote(options);\n}\n\nfunction formatLaunchOptions(options: any): string {\n  const lines = [];\n  if (!Object.keys(options).filter(key => options[key] !== undefined).length)\n    return '';\n  lines.push('new BrowserType.LaunchOptions()');\n  if (options.channel)\n    lines.push(`  .setChannel(${quote(options.channel)})`);\n  if (typeof options.headless === 'boolean')\n    lines.push(`  .setHeadless(false)`);\n  return lines.join('\\n');\n}\n\nfunction formatContextOptions(contextOptions: BrowserContextOptions, deviceName: string | undefined): string {\n  const lines = [];\n  if (!Object.keys(contextOptions).length && !deviceName)\n    return '';\n  const device = deviceName ? deviceDescriptors[deviceName] : {};\n  const options: BrowserContextOptions = { ...device, ...contextOptions };\n  lines.push('new Browser.NewContextOptions()');\n  if (options.acceptDownloads)\n    lines.push(`  .setAcceptDownloads(true)`);\n  if (options.bypassCSP)\n    lines.push(`  .setBypassCSP(true)`);\n  if (options.colorScheme)\n    lines.push(`  .setColorScheme(ColorScheme.${options.colorScheme.toUpperCase()})`);\n  if (options.deviceScaleFactor)\n    lines.push(`  .setDeviceScaleFactor(${options.deviceScaleFactor})`);\n  if (options.geolocation)\n    lines.push(`  .setGeolocation(${options.geolocation.latitude}, ${options.geolocation.longitude})`);\n  if (options.hasTouch)\n    lines.push(`  .setHasTouch(${options.hasTouch})`);\n  if (options.isMobile)\n    lines.push(`  .setIsMobile(${options.isMobile})`);\n  if (options.locale)\n    lines.push(`  .setLocale(${quote(options.locale)})`);\n  if (options.proxy)\n    lines.push(`  .setProxy(new Proxy(${quote(options.proxy.server)}))`);\n  if (options.serviceWorkers)\n    lines.push(`  .setServiceWorkers(ServiceWorkerPolicy.${options.serviceWorkers.toUpperCase()})`);\n  if (options.storageState)\n    lines.push(`  .setStorageStatePath(Paths.get(${quote(options.storageState as string)}))`);\n  if (options.timezoneId)\n    lines.push(`  .setTimezoneId(${quote(options.timezoneId)})`);\n  if (options.userAgent)\n    lines.push(`  .setUserAgent(${quote(options.userAgent)})`);\n  if (options.viewport)\n    lines.push(`  .setViewportSize(${options.viewport.width}, ${options.viewport.height})`);\n  return lines.join('\\n');\n}\n\nfunction formatClickOptions(options: types.MouseClickOptions) {\n  const lines = [];\n  if (options.button)\n    lines.push(`  .setButton(MouseButton.${options.button.toUpperCase()})`);\n  if (options.modifiers)\n    lines.push(`  .setModifiers(Arrays.asList(${options.modifiers.map(m => `KeyboardModifier.${m.toUpperCase()}`).join(', ')}))`);\n  if (options.clickCount)\n    lines.push(`  .setClickCount(${options.clickCount})`);\n  if (options.position)\n    lines.push(`  .setPosition(${options.position.x}, ${options.position.y})`);\n  if (!lines.length)\n    return '';\n  lines.unshift(`new Locator.ClickOptions()`);\n  return lines.join('\\n');\n}\n\nfunction quote(text: string) {\n  return escapeWithQuotes(text, '\\\"');\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { asLocator } from '../../utils';\n\nimport type { Language, LanguageGenerator, LanguageGeneratorOptions } from './types';\nimport type * as actions from '@recorder/actions';\n\nexport class JsonlLanguageGenerator implements LanguageGenerator {\n  id = 'jsonl';\n  groupName = '';\n  name = 'JSONL';\n  highlighter = 'javascript' as Language;\n\n  generateAction(actionInContext: actions.ActionInContext): string {\n    const locator = (actionInContext.action as any).selector ? JSON.parse(asLocator('jsonl', (actionInContext.action as any).selector)) : undefined;\n    const entry = {\n      ...actionInContext.action,\n      ...actionInContext.frame,\n      locator,\n    };\n    return JSON.stringify(entry);\n  }\n\n  generateHeader(options: LanguageGeneratorOptions): string {\n    return JSON.stringify(options);\n  }\n\n  generateFooter(saveStorage: string | undefined): string {\n    return '';\n  }\n}","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { sanitizeDeviceOptions, toClickOptionsForSourceCode, toKeyboardModifiers, toSignalMap } from './language';\nimport { asLocator, escapeWithQuotes, toSnakeCase } from '../../utils';\nimport { deviceDescriptors } from '../deviceDescriptors';\n\nimport type { Language, LanguageGenerator, LanguageGeneratorOptions } from './types';\nimport type { BrowserContextOptions } from '../../../types/types';\nimport type * as actions from '@recorder/actions';\n\nexport class PythonLanguageGenerator implements LanguageGenerator {\n  id: string;\n  groupName = 'Python';\n  name: string;\n  highlighter = 'python' as Language;\n\n  private _awaitPrefix: '' | 'await ';\n  private _asyncPrefix: '' | 'async ';\n  private _isAsync: boolean;\n  private _isPyTest: boolean;\n\n  constructor(isAsync: boolean, isPyTest: boolean) {\n    this.id = isPyTest ? 'python-pytest' : (isAsync ? 'python-async' : 'python');\n    this.name = isPyTest ? 'Pytest' : (isAsync ? 'Library Async' : 'Library');\n    this._isAsync = isAsync;\n    this._isPyTest = isPyTest;\n    this._awaitPrefix = isAsync ? 'await ' : '';\n    this._asyncPrefix = isAsync ? 'async ' : '';\n  }\n\n  generateAction(actionInContext: actions.ActionInContext): string {\n    const action = actionInContext.action;\n    if (this._isPyTest && (action.name === 'openPage' || action.name === 'closePage'))\n      return '';\n\n    const pageAlias = actionInContext.frame.pageAlias;\n    const formatter = new PythonFormatter(4);\n\n    if (action.name === 'openPage') {\n      formatter.add(`${pageAlias} = ${this._awaitPrefix}context.new_page()`);\n      if (action.url && action.url !== 'about:blank' && action.url !== 'chrome://newtab/')\n        formatter.add(`${this._awaitPrefix}${pageAlias}.goto(${quote(action.url)})`);\n      return formatter.format();\n    }\n\n    const locators = actionInContext.frame.framePath.map(selector => `.${this._asLocator(selector)}.content_frame`);\n    const subject = `${pageAlias}${locators.join('')}`;\n    const signals = toSignalMap(action);\n\n    if (signals.dialog)\n      formatter.add(`  ${pageAlias}.once(\"dialog\", lambda dialog: dialog.dismiss())`);\n\n    let code = `${this._awaitPrefix}${this._generateActionCall(subject, actionInContext)}`;\n\n    if (signals.popup) {\n      code = `${this._asyncPrefix}with ${pageAlias}.expect_popup() as ${signals.popup.popupAlias}_info {\n        ${code}\n      }\n      ${signals.popup.popupAlias} = ${this._awaitPrefix}${signals.popup.popupAlias}_info.value`;\n    }\n\n    if (signals.download) {\n      code = `${this._asyncPrefix}with ${pageAlias}.expect_download() as download${signals.download.downloadAlias}_info {\n        ${code}\n      }\n      download${signals.download.downloadAlias} = ${this._awaitPrefix}download${signals.download.downloadAlias}_info.value`;\n    }\n\n    formatter.add(code);\n\n    return formatter.format();\n  }\n\n  private _generateActionCall(subject: string, actionInContext: actions.ActionInContext): string {\n    const action = actionInContext.action;\n    switch (action.name) {\n      case 'openPage':\n        throw Error('Not reached');\n      case 'closePage':\n        return `${subject}.close()`;\n      case 'click': {\n        let method = 'click';\n        if (action.clickCount === 2)\n          method = 'dblclick';\n        const options = toClickOptionsForSourceCode(action);\n        const optionsString = formatOptions(options, false);\n        return `${subject}.${this._asLocator(action.selector)}.${method}(${optionsString})`;\n      }\n      case 'check':\n        return `${subject}.${this._asLocator(action.selector)}.check()`;\n      case 'uncheck':\n        return `${subject}.${this._asLocator(action.selector)}.uncheck()`;\n      case 'fill':\n        return `${subject}.${this._asLocator(action.selector)}.fill(${quote(action.text)})`;\n      case 'setInputFiles':\n        return `${subject}.${this._asLocator(action.selector)}.set_input_files(${formatValue(action.files.length === 1 ? action.files[0] : action.files)})`;\n      case 'press': {\n        const modifiers = toKeyboardModifiers(action.modifiers);\n        const shortcut = [...modifiers, action.key].join('+');\n        return `${subject}.${this._asLocator(action.selector)}.press(${quote(shortcut)})`;\n      }\n      case 'navigate':\n        return `${subject}.goto(${quote(action.url)})`;\n      case 'select':\n        return `${subject}.${this._asLocator(action.selector)}.select_option(${formatValue(action.options.length === 1 ? action.options[0] : action.options)})`;\n      case 'assertText':\n        return `expect(${subject}.${this._asLocator(action.selector)}).${action.substring ? 'to_contain_text' : 'to_have_text'}(${quote(action.text)})`;\n      case 'assertChecked':\n        return `expect(${subject}.${this._asLocator(action.selector)}).${action.checked ? 'to_be_checked()' : 'not_to_be_checked()'}`;\n      case 'assertVisible':\n        return `expect(${subject}.${this._asLocator(action.selector)}).to_be_visible()`;\n      case 'assertValue': {\n        const assertion = action.value ? `to_have_value(${quote(action.value)})` : `to_be_empty()`;\n        return `expect(${subject}.${this._asLocator(action.selector)}).${assertion};`;\n      }\n      case 'assertSnapshot':\n        return `expect(${subject}.${this._asLocator(action.selector)}).to_match_aria_snapshot(${quote(action.snapshot)})`;\n    }\n  }\n\n  private _asLocator(selector: string) {\n    return asLocator('python', selector);\n  }\n\n  generateHeader(options: LanguageGeneratorOptions): string {\n    const formatter = new PythonFormatter();\n    const recordHar = options.contextOptions.recordHar;\n    if (this._isPyTest) {\n      const contextOptions = formatContextOptions(options.contextOptions, options.deviceName, true /* asDict */);\n      const fixture = contextOptions ? `\n\n@pytest.fixture(scope=\"session\")\ndef browser_context_args(browser_context_args, playwright) {\n    return {${contextOptions}}\n}\n` : '';\n      formatter.add(`${options.deviceName || contextOptions ? 'import pytest\\n' : ''}import re\nfrom playwright.sync_api import Page, expect\n${fixture}\n\ndef test_example(page: Page) -> None {`);\n      if (recordHar)\n        formatter.add(`    page.route_from_har(${quote(recordHar.path)}${typeof recordHar.urlFilter === 'string' ? `, url=${quote(recordHar.urlFilter)}` : ''})`);\n    } else if (this._isAsync) {\n      formatter.add(`\nimport asyncio\nimport re\nfrom playwright.async_api import Playwright, async_playwright, expect\n\n\nasync def run(playwright: Playwright) -> None {\n    browser = await playwright.${options.browserName}.launch(${formatOptions(options.launchOptions, false)})\n    context = await browser.new_context(${formatContextOptions(options.contextOptions, options.deviceName)})`);\n      if (recordHar)\n        formatter.add(`    await context.route_from_har(${quote(recordHar.path)}${typeof recordHar.urlFilter === 'string' ? `, url=${quote(recordHar.urlFilter)}` : ''})`);\n    } else {\n      formatter.add(`\nimport re\nfrom playwright.sync_api import Playwright, sync_playwright, expect\n\n\ndef run(playwright: Playwright) -> None {\n    browser = playwright.${options.browserName}.launch(${formatOptions(options.launchOptions, false)})\n    context = browser.new_context(${formatContextOptions(options.contextOptions, options.deviceName)})`);\n      if (recordHar)\n        formatter.add(`    context.route_from_har(${quote(recordHar.path)}${typeof recordHar.urlFilter === 'string' ? `, url=${quote(recordHar.urlFilter)}` : ''})`);\n    }\n    return formatter.format();\n  }\n\n  generateFooter(saveStorage: string | undefined): string {\n    if (this._isPyTest) {\n      return '';\n    } else if (this._isAsync) {\n      const storageStateLine = saveStorage ? `\\n    await context.storage_state(path=${quote(saveStorage)})` : '';\n      return `\\n    # ---------------------${storageStateLine}\n    await context.close()\n    await browser.close()\n\n\nasync def main() -> None:\n    async with async_playwright() as playwright:\n        await run(playwright)\n\n\nasyncio.run(main())\n`;\n    } else {\n      const storageStateLine = saveStorage ? `\\n    context.storage_state(path=${quote(saveStorage)})` : '';\n      return `\\n    # ---------------------${storageStateLine}\n    context.close()\n    browser.close()\n\n\nwith sync_playwright() as playwright:\n    run(playwright)\n`;\n    }\n  }\n}\n\nfunction formatValue(value: any): string {\n  if (value === false)\n    return 'False';\n  if (value === true)\n    return 'True';\n  if (value === undefined)\n    return 'None';\n  if (Array.isArray(value))\n    return `[${value.map(formatValue).join(', ')}]`;\n  if (typeof value === 'string')\n    return quote(value);\n  if (typeof value === 'object')\n    return JSON.stringify(value);\n  return String(value);\n}\n\nfunction formatOptions(value: any, hasArguments: boolean, asDict?: boolean): string {\n  const keys = Object.keys(value).filter(key => value[key] !== undefined).sort();\n  if (!keys.length)\n    return '';\n  return (hasArguments ? ', ' : '') + keys.map(key => {\n    if (asDict)\n      return `\"${toSnakeCase(key)}\": ${formatValue(value[key])}`;\n    return `${toSnakeCase(key)}=${formatValue(value[key])}`;\n  }).join(', ');\n}\n\nfunction formatContextOptions(options: BrowserContextOptions, deviceName: string | undefined, asDict?: boolean): string {\n  // recordHAR is replaced with routeFromHAR in the generated code.\n  options = { ...options, recordHar: undefined };\n  const device = deviceName && deviceDescriptors[deviceName];\n  if (!device)\n    return formatOptions(options, false, asDict);\n  return `**playwright.devices[${quote(deviceName!)}]` + formatOptions(sanitizeDeviceOptions(device, options), true, asDict);\n}\n\nclass PythonFormatter {\n  private _baseIndent: string;\n  private _baseOffset: string;\n  private _lines: string[] = [];\n\n  constructor(offset = 0) {\n    this._baseIndent = ' '.repeat(4);\n    this._baseOffset = ' '.repeat(offset);\n  }\n\n  prepend(text: string) {\n    this._lines = text.trim().split('\\n').map(line => line.trim()).concat(this._lines);\n  }\n\n  add(text: string) {\n    this._lines.push(...text.trim().split('\\n').map(line => line.trim()));\n  }\n\n  newLine() {\n    this._lines.push('');\n  }\n\n  format(): string {\n    let spaces = '';\n    const lines: string[] = [];\n    this._lines.forEach((line: string) => {\n      if (line === '')\n        return lines.push(line);\n      if (line === '}') {\n        spaces = spaces.substring(this._baseIndent.length);\n        return;\n      }\n\n      line = spaces  + line;\n      if (line.endsWith('{')) {\n        spaces += this._baseIndent;\n        line = line.substring(0, line.length - 1).trimEnd() + ':';\n      }\n      return lines.push(this._baseOffset + line);\n    });\n    return lines.join('\\n');\n  }\n}\n\nfunction quote(text: string) {\n  return escapeWithQuotes(text, '\\\"');\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CSharpLanguageGenerator } from './csharp';\nimport { JavaLanguageGenerator } from './java';\nimport { JavaScriptLanguageGenerator } from './javascript';\nimport { JsonlLanguageGenerator } from './jsonl';\nimport { PythonLanguageGenerator } from './python';\n\nexport function languageSet() {\n  return new Set([\n    new JavaLanguageGenerator('junit'),\n    new JavaLanguageGenerator('library'),\n    new JavaScriptLanguageGenerator(/* isPlaywrightTest */false),\n    new JavaScriptLanguageGenerator(/* isPlaywrightTest */true),\n    new PythonLanguageGenerator(/* isAsync */false, /* isPytest */true),\n    new PythonLanguageGenerator(/* isAsync */false, /* isPytest */false),\n    new PythonLanguageGenerator(/* isAsync */true,  /* isPytest */false),\n    new CSharpLanguageGenerator('mstest'),\n    new CSharpLanguageGenerator('nunit'),\n    new CSharpLanguageGenerator('library'),\n    new JsonlLanguageGenerator(),\n  ]);\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\n\nexport class ThrottledFile {\n  private _file: string;\n  private _timer: NodeJS.Timeout | undefined;\n  private _text: string | undefined;\n\n  constructor(file: string) {\n    this._file = file;\n  }\n\n  setContent(text: string) {\n    this._text = text;\n    if (!this._timer)\n      this._timer = setTimeout(() => this.flush(), 250);\n  }\n\n  flush(): void {\n    if (this._timer) {\n      clearTimeout(this._timer);\n      this._timer = undefined;\n    }\n    if (this._text)\n      fs.writeFileSync(this._file, this._text);\n    this._text = undefined;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport { RecorderCollection } from './recorderCollection';\nimport * as rawRecorderSource from '../../generated/pollingRecorderSource';\nimport { eventsHelper, monotonicTime, quoteCSSAttributeValue  } from '../../utils';\nimport { raceAgainstDeadline } from '../../utils/isomorphic/timeoutRunner';\nimport { BrowserContext } from '../browserContext';\nimport { languageSet } from '../codegen/languages';\nimport { Frame } from '../frames';\nimport { Page } from '../page';\nimport { ThrottledFile } from './throttledFile';\nimport { generateCode } from '../codegen/language';\n\nimport type { RegisteredListener } from '../../utils';\nimport type { Language, LanguageGenerator, LanguageGeneratorOptions } from '../codegen/types';\nimport type * as channels from '@protocol/channels';\nimport type * as actions from '@recorder/actions';\nimport type { Source, SourceHighlight } from '@recorder/recorderTypes';\n\ntype BindingSource = { frame: Frame, page: Page };\n\nexport interface ContextRecorderDelegate {\n  rewriteActionInContext?(pageAliases: Map<Page, string>, actionInContext: actions.ActionInContext): Promise<void>;\n}\n\nexport class ContextRecorder extends EventEmitter {\n  static Events = {\n    Change: 'change'\n  };\n\n  private _collection: RecorderCollection;\n  private _pageAliases = new Map<Page, string>();\n  private _lastPopupOrdinal = 0;\n  private _lastDialogOrdinal = -1;\n  private _lastDownloadOrdinal = -1;\n  private _context: BrowserContext;\n  private _params: channels.BrowserContextEnableRecorderParams;\n  private _delegate: ContextRecorderDelegate;\n  private _recorderSources: Source[];\n  private _throttledOutputFile: ThrottledFile | null = null;\n  private _orderedLanguages: LanguageGenerator[] = [];\n  private _listeners: RegisteredListener[] = [];\n\n  constructor(context: BrowserContext, params: channels.BrowserContextEnableRecorderParams, delegate: ContextRecorderDelegate) {\n    super();\n    this._context = context;\n    this._params = params;\n    this._delegate = delegate;\n    this._recorderSources = [];\n    const language = params.language || context.attribution.playwright.options.sdkLanguage;\n    this.setOutput(language, params.outputFile);\n    \n    this._collection = new RecorderCollection(this._pageAliases);\n    this._collection.on('change', (actions: actions.ActionInContext[]) => {\n      const languageGeneratorOptions: LanguageGeneratorOptions = {\n        browserName: context._browser.options.name,\n        launchOptions: { headless: false, ...params.launchOptions, tracesDir: undefined },\n        contextOptions: { ...params.contextOptions },\n        deviceName: params.device,\n        saveStorage: params.saveStorage,\n      };\n\n      this._recorderSources = [];\n      for (const languageGenerator of this._orderedLanguages) {\n        const { header, footer, actionTexts, text } = generateCode(actions, languageGenerator, languageGeneratorOptions);\n        const source: Source = {\n          isRecorded: true,\n          label: languageGenerator.name,\n          group: languageGenerator.groupName,\n          id: languageGenerator.id,\n          text,\n          header,\n          footer,\n          actions: actionTexts,\n          language: languageGenerator.highlighter,\n          highlight: []\n        };\n        source.revealLine = text.split('\\n').length - 1;\n        this._recorderSources.push(source);\n        if (languageGenerator === this._orderedLanguages[0])\n          this._throttledOutputFile?.setContent(source.text);\n      }\n      this.emit(ContextRecorder.Events.Change, {\n        sources: this._recorderSources,\n        actions\n      });\n    });\n    context.on(BrowserContext.Events.BeforeClose, () => {\n      this._throttledOutputFile?.flush();\n    });\n    this._listeners.push(eventsHelper.addEventListener(process, 'exit', () => {\n      this._throttledOutputFile?.flush();\n    }));\n    this.setEnabled(params.mode === 'recording');\n  }\n\n  setOutput(codegenId: string, outputFile?: string) {\n    const languages = languageSet();\n    const primaryLanguage = [...languages].find(l => l.id === codegenId);\n    if (!primaryLanguage)\n      throw new Error(`\\n===============================\\nUnsupported language: '${codegenId}'\\n===============================\\n`);\n    languages.delete(primaryLanguage);\n    this._orderedLanguages = [primaryLanguage, ...languages];\n    this._throttledOutputFile = outputFile ? new ThrottledFile(outputFile) : null;\n    this._collection?.restart();\n  }\n\n  languageName(id?: string): Language {\n    for (const lang of this._orderedLanguages) {\n      if (!id || lang.id === id)\n        return lang.highlighter;\n    }\n    return 'javascript';\n  }\n\n  async install() {\n    this._context.on(BrowserContext.Events.Page, (page: Page) => this._onPage(page));\n    for (const page of this._context.pages())\n      this._onPage(page);\n    this._context.dialogManager.addDialogHandler(dialog => {\n      this._onDialog(dialog.page());\n      // Not handling the dialog, let it automatically close.\n      return false;\n    });\n\n    // Input actions that potentially lead to navigation are intercepted on the page and are\n    // performed by the Playwright.\n    await this._context.exposeBinding('__pw_recorderPerformAction', false,\n        (source: BindingSource, action: actions.PerformOnRecordAction) => this._performAction(source.frame, action));\n\n    // Other non-essential actions are simply being recorded.\n    await this._context.exposeBinding('__pw_recorderRecordAction', false,\n        (source: BindingSource, action: actions.Action) => this._recordAction(source.frame, action));\n\n    await this._context.extendInjectedScript(rawRecorderSource.source);\n  }\n\n  setEnabled(enabled: boolean) {\n    this._collection.setEnabled(enabled);\n  }\n\n  dispose() {\n    eventsHelper.removeEventListeners(this._listeners);\n  }\n\n  private async _onPage(page: Page) {\n    // First page is called page, others are called popup1, popup2, etc.\n    const frame = page.mainFrame();\n    page.on('close', () => {\n      this._collection.addRecordedAction({\n        frame: this._describeMainFrame(page),\n        action: {\n          name: 'closePage',\n          signals: [],\n        },\n        startTime: monotonicTime()\n      });\n      this._pageAliases.delete(page);\n    });\n    frame.on(Frame.Events.InternalNavigation, event => {\n      if (event.isPublic)\n        this._onFrameNavigated(frame, page);\n    });\n    page.on(Page.Events.Download, () => this._onDownload(page));\n    const suffix = this._pageAliases.size ? String(++this._lastPopupOrdinal) : '';\n    const pageAlias = 'page' + suffix;\n    this._pageAliases.set(page, pageAlias);\n\n    if (page.opener()) {\n      this._onPopup(page.opener()!, page);\n    } else {\n      this._collection.addRecordedAction({\n        frame: this._describeMainFrame(page),\n        action: {\n          name: 'openPage',\n          url: page.mainFrame().url(),\n          signals: [],\n        },\n        startTime: monotonicTime()\n      });\n    }\n  }\n\n  clearScript(): void {\n    this._collection.restart();\n    if (this._params.mode === 'recording') {\n      for (const page of this._context.pages())\n        this._onFrameNavigated(page.mainFrame(), page);\n    }\n  }\n\n  runTask(task: string): void {\n    // TODO: implement\n  }\n\n  loadScript({ actions, deviceName, contextOptions, text, highlight }: { actions: actions.ActionInContext[], deviceName: string, contextOptions: LanguageGeneratorOptions['contextOptions'], text: string, highlight?: SourceHighlight[] }): Source[] {\n    if (highlight) {\n      const index = this._recorderSources.findIndex(source => source.id === 'playwright-test');\n      const toReplace = this._recorderSources[index];\n      this._recorderSources[index] = {\n        ...toReplace,\n        text,\n        actions: [],\n        highlight,\n      };\n    } else {\n      this._params.contextOptions = contextOptions;\n      this._params.device = deviceName;\n\n      this._collection.loadActions(actions);\n      // it will update recorderSources both here in contextRecorder and in the recorder\n      this._collection.emit('change', actions);\n    }\n    return Array.from(this._recorderSources);\n  }\n\n  private _describeMainFrame(page: Page): actions.FrameDescription {\n    return {\n      pageAlias: this._pageAliases.get(page)!,\n      framePath: [],\n    };\n  }\n\n  private async _describeFrame(frame: Frame): Promise<actions.FrameDescription> {\n    return {\n      pageAlias: this._pageAliases.get(frame._page)!,\n      framePath: await generateFrameSelector(frame),\n    };\n  }\n\n  testIdAttributeName(): string {\n    return this._params.testIdAttributeName || this._context.selectors().testIdAttributeName() || 'data-testid';\n  }\n\n  private async _createActionInContext(frame: Frame, action: actions.Action): Promise<actions.ActionInContext> {\n    const frameDescription = await this._describeFrame(frame);\n    const actionInContext: actions.ActionInContext = {\n      frame: frameDescription,\n      action,\n      description: undefined,\n      startTime: monotonicTime()\n    };\n    await this._delegate.rewriteActionInContext?.(this._pageAliases, actionInContext);\n    return actionInContext;\n  }\n\n  private async _performAction(frame: Frame, action: actions.PerformOnRecordAction) {\n    await this._collection.performAction(await this._createActionInContext(frame, action));\n  }\n\n  private async _recordAction(frame: Frame, action: actions.Action) {\n    this._collection.addRecordedAction(await this._createActionInContext(frame, action));\n  }\n\n  private _onFrameNavigated(frame: Frame, page: Page) {\n    const pageAlias = this._pageAliases.get(page);\n    this._collection.signal(pageAlias!, frame, { name: 'navigation', url: frame.url() });\n  }\n\n  private _onPopup(page: Page, popup: Page) {\n    const pageAlias = this._pageAliases.get(page)!;\n    const popupAlias = this._pageAliases.get(popup)!;\n    this._collection.signal(pageAlias, page.mainFrame(), { name: 'popup', popupAlias });\n  }\n\n  private _onDownload(page: Page) {\n    const pageAlias = this._pageAliases.get(page)!;\n    ++this._lastDownloadOrdinal;\n    this._collection.signal(pageAlias, page.mainFrame(), { name: 'download', downloadAlias: this._lastDownloadOrdinal ? String(this._lastDownloadOrdinal) : '' });\n  }\n\n  private _onDialog(page: Page) {\n    const pageAlias = this._pageAliases.get(page)!;\n    ++this._lastDialogOrdinal;\n    this._collection.signal(pageAlias, page.mainFrame(), { name: 'dialog', dialogAlias: this._lastDialogOrdinal ? String(this._lastDialogOrdinal) : '' });\n  }\n}\n\nexport async function generateFrameSelector(frame: Frame): Promise<string[]> {\n  const selectorPromises: Promise<string>[] = [];\n  while (frame) {\n    const parent = frame.parentFrame();\n    if (!parent)\n      break;\n    selectorPromises.push(generateFrameSelectorInParent(parent, frame));\n    frame = parent;\n  }\n  const result = await Promise.all(selectorPromises);\n  return result.reverse();\n}\n\nasync function generateFrameSelectorInParent(parent: Frame, frame: Frame): Promise<string> {\n  const result = await raceAgainstDeadline(async () => {\n    try {\n      const frameElement = await frame.frameElement();\n      if (!frameElement || !parent)\n        return;\n      const utility = await parent._utilityContext();\n      const injected = await utility.injectedScript();\n      const selector = await injected.evaluate((injected, element) => {\n        return injected.generateSelectorSimple(element as Element);\n      }, frameElement);\n      return selector;\n    } catch (e) {\n    }\n  }, monotonicTime() + 2000);\n  if (!result.timedOut && result.result)\n    return result.result;\n\n  if (frame.name())\n    return `iframe[name=${quoteCSSAttributeValue(frame.name())}]`;\n  return `iframe[src=${quoteCSSAttributeValue(frame.url())}]`;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { asLocators } from './locatorGenerators';\nimport { parseSelector } from './selectorParser';\nimport { escapeForAttributeSelector, escapeForTextSelector } from './stringUtils';\n\nimport type { Language, Quote } from './locatorGenerators';\n\ntype TemplateParams = { quote: string, text: string }[];\nfunction parseLocator(locator: string, testIdAttributeName: string): { selector: string, preferredQuote: Quote | undefined } {\n  locator = locator\n      .replace(/AriaRole\\s*\\.\\s*([\\w]+)/g, (_, group) => group.toLowerCase())\n      .replace(/(get_by_role|getByRole)\\s*\\(\\s*(?:[\"'`])([^'\"`]+)['\"`]/g, (_, group1, group2) => `${group1}(${group2.toLowerCase()}`);\n  const params: TemplateParams = [];\n  let template = '';\n  for (let i = 0; i < locator.length; ++i) {\n    const quote = locator[i];\n    if (quote !== '\"' && quote !== '\\'' && quote !== '`' && quote !== '/') {\n      template += quote;\n      continue;\n    }\n    const isRegexEscaping = locator[i - 1] === 'r' || locator[i] === '/';\n    ++i;\n    let text = '';\n    while (i < locator.length) {\n      if (locator[i] === '\\\\') {\n        if (isRegexEscaping) {\n          if (locator[i + 1] !== quote)\n            text += locator[i];\n          ++i;\n          text += locator[i];\n        } else {\n          ++i;\n          if (locator[i] === 'n')\n            text += '\\n';\n          else if (locator[i] === 'r')\n            text += '\\r';\n          else if (locator[i] === 't')\n            text += '\\t';\n          else\n            text += locator[i];\n        }\n        ++i;\n        continue;\n      }\n      if (locator[i] !== quote) {\n        text += locator[i++];\n        continue;\n      }\n      break;\n    }\n    params.push({ quote, text });\n    template += (quote === '/' ? 'r' : '') + '$' + params.length;\n  }\n\n  // Equalize languages.\n  template = template.toLowerCase()\n      .replace(/get_by_alt_text/g, 'getbyalttext')\n      .replace(/get_by_test_id/g, 'getbytestid')\n      .replace(/get_by_([\\w]+)/g, 'getby$1')\n      .replace(/has_not_text/g, 'hasnottext')\n      .replace(/has_text/g, 'hastext')\n      .replace(/has_not/g, 'hasnot')\n      .replace(/frame_locator/g, 'framelocator')\n      .replace(/content_frame/g, 'contentframe')\n      .replace(/[{}\\s]/g, '')\n      .replace(/new\\(\\)/g, '')\n      .replace(/new[\\w]+\\.[\\w]+options\\(\\)/g, '')\n      .replace(/\\.set/g, ',set')\n      .replace(/\\.or_\\(/g, 'or(') // Python has \"or_\" instead of \"or\".\n      .replace(/\\.and_\\(/g, 'and(') // Python has \"and_\" instead of \"and\".\n      .replace(/:/g, '=')\n      .replace(/,re\\.ignorecase/g, 'i')\n      .replace(/,pattern.case_insensitive/g, 'i')\n      .replace(/,regexoptions.ignorecase/g, 'i')\n      .replace(/re.compile\\(([^)]+)\\)/g, '$1') // Python has regex strings as r\"foo\"\n      .replace(/pattern.compile\\(([^)]+)\\)/g, 'r$1')\n      .replace(/newregex\\(([^)]+)\\)/g, 'r$1')\n      .replace(/string=/g, '=')\n      .replace(/regex=/g, '=')\n      .replace(/,,/g, ',')\n      .replace(/,\\)/g, ')');\n\n  const preferredQuote = params.map(p => p.quote).filter(quote => '\\'\"`'.includes(quote))[0] as Quote | undefined;\n  return { selector: transform(template, params, testIdAttributeName), preferredQuote };\n}\n\nfunction countParams(template: string) {\n  return [...template.matchAll(/\\$\\d+/g)].length;\n}\n\nfunction shiftParams(template: string, sub: number) {\n  return template.replace(/\\$(\\d+)/g, (_, ordinal) => `$${ordinal - sub}`);\n}\n\nfunction transform(template: string, params: TemplateParams, testIdAttributeName: string): string {\n  // Recursively handle filter(has=, hasnot=, sethas(), sethasnot()).\n  // TODO: handle and(locator), or(locator), locator(locator), locator(has=, hasnot=, sethas(), sethasnot()).\n  while (true) {\n    const hasMatch = template.match(/filter\\(,?(has=|hasnot=|sethas\\(|sethasnot\\()/);\n    if (!hasMatch)\n      break;\n\n    // Extract inner locator based on balanced parens.\n    const start = hasMatch.index! + hasMatch[0].length;\n    let balance = 0;\n    let end = start;\n    for (; end < template.length; end++) {\n      if (template[end] === '(')\n        balance++;\n      else if (template[end] === ')')\n        balance--;\n      if (balance < 0)\n        break;\n    }\n\n    // Replace Java sethas(...) and sethasnot(...) with has=... and hasnot=...\n    let prefix = template.substring(0, start);\n    let extraSymbol = 0;\n    if (['sethas(', 'sethasnot('].includes(hasMatch[1])) {\n      // Eat extra ) symbol at the end of sethas(...)\n      extraSymbol = 1;\n      prefix = prefix.replace(/sethas\\($/, 'has=').replace(/sethasnot\\($/, 'hasnot=');\n    }\n\n    const paramsCountBeforeHas = countParams(template.substring(0, start));\n    const hasTemplate = shiftParams(template.substring(start, end), paramsCountBeforeHas);\n    const paramsCountInHas = countParams(hasTemplate);\n    const hasParams = params.slice(paramsCountBeforeHas, paramsCountBeforeHas + paramsCountInHas);\n    const hasSelector = JSON.stringify(transform(hasTemplate, hasParams, testIdAttributeName));\n\n    // Replace filter(has=...) with filter(has2=$5). Use has2 to avoid matching the same filter again.\n    // Replace filter(hasnot=...) with filter(hasnot2=$5). Use hasnot2 to avoid matching the same filter again.\n    template = prefix.replace(/=$/, '2=') + `$${paramsCountBeforeHas + 1}` + shiftParams(template.substring(end + extraSymbol), paramsCountInHas - 1);\n\n    // Replace inner params with $5 value.\n    const paramsBeforeHas = params.slice(0, paramsCountBeforeHas);\n    const paramsAfterHas = params.slice(paramsCountBeforeHas + paramsCountInHas);\n    params = paramsBeforeHas.concat([{ quote: '\"', text: hasSelector }]).concat(paramsAfterHas);\n  }\n\n  // Transform to selector engines.\n  template = template\n      .replace(/\\,set([\\w]+)\\(([^)]+)\\)/g, (_, group1, group2) => ',' + group1.toLowerCase() + '=' + group2.toLowerCase())\n      .replace(/framelocator\\(([^)]+)\\)/g, '$1.internal:control=enter-frame')\n      .replace(/contentframe(\\(\\))?/g, 'internal:control=enter-frame')\n      .replace(/locator\\(([^)]+),hastext=([^),]+)\\)/g, 'locator($1).internal:has-text=$2')\n      .replace(/locator\\(([^)]+),hasnottext=([^),]+)\\)/g, 'locator($1).internal:has-not-text=$2')\n      .replace(/locator\\(([^)]+),hastext=([^),]+)\\)/g, 'locator($1).internal:has-text=$2')\n      .replace(/locator\\(([^)]+)\\)/g, '$1')\n      .replace(/getbyrole\\(([^)]+)\\)/g, 'internal:role=$1')\n      .replace(/getbytext\\(([^)]+)\\)/g, 'internal:text=$1')\n      .replace(/getbylabel\\(([^)]+)\\)/g, 'internal:label=$1')\n      .replace(/getbytestid\\(([^)]+)\\)/g, `internal:testid=[${testIdAttributeName}=$1]`)\n      .replace(/getby(placeholder|alt|title)(?:text)?\\(([^)]+)\\)/g, 'internal:attr=[$1=$2]')\n      .replace(/first(\\(\\))?/g, 'nth=0')\n      .replace(/last(\\(\\))?/g, 'nth=-1')\n      .replace(/nth\\(([^)]+)\\)/g, 'nth=$1')\n      .replace(/filter\\(,?visible=true\\)/g, 'visible=true')\n      .replace(/filter\\(,?visible=false\\)/g, 'visible=false')\n      .replace(/filter\\(,?hastext=([^)]+)\\)/g, 'internal:has-text=$1')\n      .replace(/filter\\(,?hasnottext=([^)]+)\\)/g, 'internal:has-not-text=$1')\n      .replace(/filter\\(,?has2=([^)]+)\\)/g, 'internal:has=$1')\n      .replace(/filter\\(,?hasnot2=([^)]+)\\)/g, 'internal:has-not=$1')\n      .replace(/,exact=false/g, '')\n      .replace(/,exact=true/g, 's')\n      .replace(/,includehidden=/g, ',include-hidden=')\n      .replace(/\\,/g, '][');\n\n  const parts = template.split('.');\n  // Turn \"internal:control=enter-frame >> nth=0\" into \"nth=0 >> internal:control=enter-frame\"\n  // because these are swapped in locators vs selectors.\n  for (let index = 0; index < parts.length - 1; index++) {\n    if (parts[index] === 'internal:control=enter-frame' && parts[index + 1].startsWith('nth=')) {\n      // Swap nth and enter-frame.\n      const [nth] = parts.splice(index, 1);\n      parts.splice(index + 1, 0, nth);\n    }\n  }\n\n  // Substitute params.\n  return parts.map(t => {\n    if (!t.startsWith('internal:') || t === 'internal:control')\n      return t.replace(/\\$(\\d+)/g, (_, ordinal) => { const param = params[+ordinal - 1]; return param.text; });\n    t = t.includes('[') ? t.replace(/\\]/, '') + ']' : t;\n    t = t\n        .replace(/(?:r)\\$(\\d+)(i)?/g, (_, ordinal, suffix) => {\n          const param = params[+ordinal - 1];\n          if (t.startsWith('internal:attr') || t.startsWith('internal:testid') || t.startsWith('internal:role'))\n            return escapeForAttributeSelector(new RegExp(param.text), false) + (suffix || '');\n          return escapeForTextSelector(new RegExp(param.text, suffix), false);\n        })\n        .replace(/\\$(\\d+)(i|s)?/g, (_, ordinal, suffix) => {\n          const param = params[+ordinal - 1];\n          if (t.startsWith('internal:has=') || t.startsWith('internal:has-not='))\n            return param.text;\n          if (t.startsWith('internal:testid'))\n            return escapeForAttributeSelector(param.text, true);\n          if (t.startsWith('internal:attr') || t.startsWith('internal:role'))\n            return escapeForAttributeSelector(param.text, suffix === 's');\n          return escapeForTextSelector(param.text, suffix === 's');\n        });\n    return t;\n  }).join(' >> ');\n}\n\nexport function locatorOrSelectorAsSelector(language: Language, locator: string, testIdAttributeName: string): string {\n  try {\n    return unsafeLocatorOrSelectorAsSelector(language, locator, testIdAttributeName);\n  } catch (e) {\n    return '';\n  }\n}\n\nexport function unsafeLocatorOrSelectorAsSelector(language: Language, locator: string, testIdAttributeName: string): string {\n  try {\n    parseSelector(locator);\n    return locator;\n  } catch (e) {\n  }\n  const { selector, preferredQuote } = parseLocator(locator, testIdAttributeName);\n  const locators = asLocators(language, selector, undefined, undefined, preferredQuote);\n  const digest = digestForComparison(language, locator);\n  if (locators.some(candidate => digestForComparison(language, candidate) === digest))\n    return selector;\n  return '';\n}\n\nfunction digestForComparison(language: Language, locator: string) {\n  locator = locator.replace(/\\s/g, '');\n  if (language === 'javascript')\n    locator = locator.replace(/\\\\?[\"`]/g, '\\'').replace(/,{}/g, '');\n  return locator;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\n\nimport { isUnderTest } from '../utils';\nimport { BrowserContext } from './browserContext';\nimport { Debugger } from './debugger';\nimport { ContextRecorder, generateFrameSelector } from './recorder/contextRecorder';\nimport { buildFullSelector, metadataToCallLog } from './recorder/recorderUtils';\nimport { locatorOrSelectorAsSelector } from '../utils/isomorphic/locatorParser';\nimport { stringifySelector } from '../utils/isomorphic/selectorParser';\n\nimport type { Language } from './codegen/types';\nimport type { Frame } from './frames';\nimport type { CallMetadata, InstrumentationListener, SdkObject } from './instrumentation';\nimport type { Page } from './page';\nimport type { IRecorder, IRecorderApp, IRecorderAppFactory } from './recorder/recorderFrontend';\nimport type { Point } from '../utils/isomorphic/types';\nimport type { AriaTemplateNode } from '@isomorphic/ariaSnapshot';\nimport type * as channels from '@protocol/channels';\nimport type * as actions from '@recorder/actions';\nimport type { CallLog, CallLogStatus, ElementInfo, EventData, Mode, OverlayState, Source, UIState } from '@recorder/recorderTypes';\n\nconst recorderSymbol = Symbol('recorderSymbol');\n\nexport class Recorder implements InstrumentationListener, IRecorder {\n  readonly handleSIGINT: boolean | undefined;\n  readonly _context: BrowserContext;\n  private _mode: Mode;\n  private _highlightedElement: { selector?: string, ariaTemplate?: AriaTemplateNode } = {};\n  private _overlayState: OverlayState = { offsetX: 0 };\n  private _recorderApp: IRecorderApp | null = null;\n  private _currentCallsMetadata = new Map<CallMetadata, SdkObject>();\n  private _recorderSources: Source[] = [];\n  private _userSources = new Map<string, Source>();\n  private _debugger: Debugger;\n  private _contextRecorder: ContextRecorder;\n  private _omitCallTracking = false;\n  private _currentLanguage: Language;\n\n  static async showInspector(context: BrowserContext, params: channels.BrowserContextEnableRecorderParams, recorderAppFactory: IRecorderAppFactory) {\n    if (isUnderTest())\n      params.language = process.env.TEST_INSPECTOR_LANGUAGE;\n    return await Recorder.show(context, recorderAppFactory, params);\n  }\n\n  static showInspectorNoReply(context: BrowserContext, recorderAppFactory: IRecorderAppFactory) {\n    Recorder.showInspector(context, {}, recorderAppFactory).catch(() => {});\n  }\n\n  static show(context: BrowserContext, recorderAppFactory: IRecorderAppFactory, params: channels.BrowserContextEnableRecorderParams): Promise<Recorder> {\n    let recorderPromise = (context as any)[recorderSymbol] as Promise<Recorder>;\n    if (!recorderPromise) {\n      recorderPromise = Recorder._create(context, recorderAppFactory, params);\n      (context as any)[recorderSymbol] = recorderPromise;\n    }\n    return recorderPromise;\n  }\n\n  private static async _create(context: BrowserContext, recorderAppFactory: IRecorderAppFactory, params: channels.BrowserContextEnableRecorderParams = {}): Promise<Recorder> {\n    const recorder = new Recorder(context, params);\n    const recorderApp = await recorderAppFactory(recorder);\n    await recorder._install(recorderApp);\n    return recorder;\n  }\n\n  constructor(context: BrowserContext, params: channels.BrowserContextEnableRecorderParams) {\n    this._mode = params.mode || 'none';\n    this.handleSIGINT = params.handleSIGINT;\n    this._contextRecorder = new ContextRecorder(context, params, {});\n    this._context = context;\n    this._omitCallTracking = !!params.omitCallTracking;\n    this._debugger = context.debugger();\n    context.instrumentation.addListener(this, context);\n    this._currentLanguage = this._contextRecorder.languageName();\n\n    if (isUnderTest()) {\n      // Most of our tests put elements at the top left, so get out of the way.\n      this._overlayState.offsetX = 200;\n    }\n  }\n\n  private async _install(recorderApp: IRecorderApp) {\n    this._recorderApp = recorderApp;\n    recorderApp.once('close', () => {\n      this._debugger.resume(false);\n      this._recorderApp = null;\n    });\n    recorderApp.on('event', (data: EventData) => {\n      if (data.event === 'setMode') {\n        this.setMode(data.params.mode);\n        return;\n      }\n      if (data.event === 'highlightRequested') {\n        if (data.params.selector)\n          this.setHighlightedSelector(this._currentLanguage, data.params.selector);\n        if (data.params.ariaTemplate)\n          this.setHighlightedAriaTemplate(data.params.ariaTemplate);\n        return;\n      }\n      if (data.event === 'step') {\n        this._debugger.resume(true);\n        return;\n      }\n      if (data.event === 'fileChanged') {\n        this._currentLanguage = this._contextRecorder.languageName(data.params.file);\n        this._refreshOverlay();\n        return;\n      }\n      if (data.event === 'resume') {\n        this._debugger.resume(false);\n        return;\n      }\n      if (data.event === 'pause') {\n        this._debugger.pauseOnNextStatement();\n        return;\n      }\n      if (data.event === 'clear') {\n        this._contextRecorder.clearScript();\n        return;\n      }\n      if (data.event === 'runTask') {\n        this._contextRecorder.runTask(data.params.task);\n        return;\n      }\n    });\n\n    await Promise.all([\n      recorderApp.setMode(this._mode),\n      recorderApp.setPaused(this._debugger.isPaused()),\n      this._pushAllSources()\n    ]);\n\n    this._context.once(BrowserContext.Events.Close, () => {\n      this._contextRecorder.dispose();\n      this._context.instrumentation.removeListener(this);\n      this._recorderApp?.close().catch(() => {});\n    });\n\n    this._contextRecorder.on(ContextRecorder.Events.Change, (data: { sources: Source[], actions: actions.ActionInContext[] }) => {\n      this._recorderSources = data.sources;\n      recorderApp.setActions(data.actions, data.sources);\n      recorderApp.setRunningFile(undefined);\n      this._pushAllSources();\n    });\n\n    await this._context.exposeBinding('__pw_recorderState', false, async source => {\n      let actionSelector: string | undefined;\n      let actionPoint: Point | undefined;\n      const hasActiveScreenshotCommand = [...this._currentCallsMetadata.keys()].some(isScreenshotCommand);\n      if (!hasActiveScreenshotCommand) {\n        actionSelector = await this._scopeHighlightedSelectorToFrame(source.frame);\n        for (const [metadata, sdkObject] of this._currentCallsMetadata) {\n          if (source.page === sdkObject.attribution.page) {\n            actionPoint = metadata.point || actionPoint;\n            actionSelector = actionSelector || metadata.params.selector;\n          }\n        }\n      }\n      const uiState: UIState = {\n        mode: this._mode,\n        actionPoint,\n        actionSelector,\n        ariaTemplate: this._highlightedElement.ariaTemplate,\n        language: this._currentLanguage,\n        testIdAttributeName: this._contextRecorder.testIdAttributeName(),\n        overlay: this._overlayState,\n      };\n      return uiState;\n    });\n\n    await this._context.exposeBinding('__pw_recorderElementPicked', false, async ({ frame }, elementInfo: ElementInfo) => {\n      const selectorChain = await generateFrameSelector(frame);\n      await this._recorderApp?.elementPicked({ selector: buildFullSelector(selectorChain, elementInfo.selector), ariaSnapshot: elementInfo.ariaSnapshot }, true);\n    });\n\n    await this._context.exposeBinding('__pw_recorderSetMode', false, async ({ frame }, mode: Mode) => {\n      if (frame.parentFrame())\n        return;\n      this.setMode(mode);\n    });\n\n    await this._context.exposeBinding('__pw_recorderSetOverlayState', false, async ({ frame }, state: OverlayState) => {\n      if (frame.parentFrame())\n        return;\n      this._overlayState = state;\n    });\n\n    await this._context.exposeBinding('__pw_resume', false, () => {\n      this._debugger.resume(false);\n    });\n    await this._contextRecorder.install();\n\n    if (this._debugger.isPaused())\n      this._pausedStateChanged();\n    this._debugger.on(Debugger.Events.PausedStateChanged, () => this._pausedStateChanged());\n\n    (this._context as any).recorderAppForTest = this._recorderApp;\n  }\n\n  _pausedStateChanged() {\n    // If we are called upon page.pause, we don't have metadatas, populate them.\n    for (const { metadata, sdkObject } of this._debugger.pausedDetails()) {\n      if (!this._currentCallsMetadata.has(metadata))\n        this.onBeforeCall(sdkObject, metadata);\n    }\n    this._recorderApp?.setPaused(this._debugger.isPaused());\n    this._updateSources();\n    this.updateCallLog([...this._currentCallsMetadata.keys()]);\n  }\n\n  setMode(mode: Mode) {\n    if (this._mode === mode)\n      return;\n    this._highlightedElement = {};\n    this._mode = mode;\n    this._recorderApp?.setMode(this._mode);\n    this._contextRecorder.setEnabled(this._isRecording());\n    this._debugger.setMuted(this._isRecording());\n    if (this._mode !== 'none' && this._mode !== 'standby' && this._context.pages().length === 1)\n      this._context.pages()[0].bringToFront().catch(() => {});\n    this._refreshOverlay();\n  }\n  \n  loadScript(script: { actions: actions.ActionInContext[], deviceName: string, contextOptions: LanguageGeneratorOptions['contextOptions'], text: string, highlight?: SourceHighlight[] }) {\n    this._recorderSources = this._contextRecorder.loadScript(script);\n    this._pushAllSources();\n  }\n\n  resume() {\n    this._debugger.resume(false);\n  }\n\n  mode() {\n    return this._mode;\n  }\n\n  setHighlightedSelector(language: Language, selector: string) {\n    this._highlightedElement = { selector: locatorOrSelectorAsSelector(language, selector, this._context.selectors().testIdAttributeName()) };\n    this._refreshOverlay();\n  }\n\n  setHighlightedAriaTemplate(ariaTemplate: AriaTemplateNode) {\n    this._highlightedElement = { ariaTemplate };\n    this._refreshOverlay();\n  }\n\n  hideHighlightedSelector() {\n    this._highlightedElement = {};\n    this._refreshOverlay();\n  }\n\n  private async _scopeHighlightedSelectorToFrame(frame: Frame): Promise<string | undefined> {\n    if (!this._highlightedElement.selector)\n      return;\n    try {\n      const mainFrame = frame._page.mainFrame();\n      const resolved = await mainFrame.selectors.resolveFrameForSelector(this._highlightedElement.selector);\n      // selector couldn't be found, don't highlight anything\n      if (!resolved)\n        return '';\n\n      // selector points to no specific frame, highlight in all frames\n      if (resolved?.frame === mainFrame)\n        return stringifySelector(resolved.info.parsed);\n\n      // selector points to this frame, highlight it\n      if (resolved?.frame === frame)\n        return stringifySelector(resolved.info.parsed);\n\n      // selector points to a different frame, highlight nothing\n      return '';\n    } catch {\n      return '';\n    }\n  }\n\n  setOutput(codegenId: string, outputFile: string | undefined) {\n    this._contextRecorder.setOutput(codegenId, outputFile);\n  }\n\n  private _refreshOverlay() {\n    for (const page of this._context.pages()) {\n      for (const frame of page.frames())\n        frame.evaluateExpression('window.__pw_refreshOverlay()').catch(() => {});\n    }\n  }\n\n  async _uninstallInjectedRecorder(page: Page) {\n    await Promise.all(page.frames().map(f => f.evaluateExpression('window.__pw_uninstall()').catch(() => {})));\n  }\n\n  async onBeforeCall(sdkObject: SdkObject, metadata: CallMetadata) {\n    if (this._omitCallTracking || this._isRecording())\n      return;\n    this._currentCallsMetadata.set(metadata, sdkObject);\n    this._updateSources();\n    this.updateCallLog([metadata]);\n    if (isScreenshotCommand(metadata))\n      this.hideHighlightedSelector();\n    else if (metadata.params && metadata.params.selector)\n      this._highlightedElement = { selector: metadata.params.selector };\n  }\n\n  async onAfterCall(sdkObject: SdkObject, metadata: CallMetadata) {\n    if (this._omitCallTracking || this._isRecording())\n      return;\n    if (!metadata.error)\n      this._currentCallsMetadata.delete(metadata);\n    this._updateSources();\n    this.updateCallLog([metadata]);\n  }\n\n  clearErrors() {\n    const errors = [...this._currentCallsMetadata.keys()].filter(c => c.error);\n    for (const error of errors)\n      this._currentCallsMetadata.delete(error);\n\n    this._updateSources();\n  }\n\n  private _updateSources() {\n    // Remove old decorations.\n    for (const source of [...this._recorderSources, ...this._userSources.values()]) {\n      source.highlight = [];\n      source.revealLine = undefined;\n    }\n\n    // Apply new decorations.\n    let fileToSelect = undefined;\n    for (const metadata of this._currentCallsMetadata.keys()) {\n      if (!metadata.location)\n        continue;\n      const { file, line } = metadata.location;\n      let source = this._userSources.get(file) ?? this._recorderSources.find(rs => rs.id === file);\n      if (!source) {\n        source = { isRecorded: false, label: file, id: file, text: this._readSource(file), highlight: [], language: languageForFile(file) };\n        this._userSources.set(file, source);\n      }\n      if (line) {\n        const paused = this._debugger.isPaused(metadata);\n        source.highlight.push({ line, type: metadata.error ? 'error' : (paused ? 'paused' : 'running'), message: metadata.error?.error?.message });\n        source.revealLine = line;\n        fileToSelect = source.id;\n      }\n    }\n    this._pushAllSources();\n    if (fileToSelect)\n      this._recorderApp?.setRunningFile(fileToSelect);\n  }\n\n  private _pushAllSources() {\n    const primaryPage: Page | undefined = this._context.pages()[0];\n    this._recorderApp?.setSources([...this._recorderSources, ...this._userSources.values()], primaryPage?.mainFrame().url());\n  }\n\n  async onBeforeInputAction(sdkObject: SdkObject, metadata: CallMetadata) {\n  }\n\n  async onCallLog(sdkObject: SdkObject, metadata: CallMetadata, logName: string, message: string): Promise<void> {\n    this.updateCallLog([metadata]);\n  }\n\n  updateCallLog(metadatas: CallMetadata[]) {\n    if (this._isRecording())\n      return;\n    const logs: CallLog[] = [];\n    for (const metadata of metadatas) {\n      if (!metadata.method || metadata.internal)\n        continue;\n      let status: CallLogStatus = 'done';\n      if (this._currentCallsMetadata.has(metadata))\n        status = 'in-progress';\n      if (this._debugger.isPaused(metadata))\n        status = 'paused';\n      logs.push(metadataToCallLog(metadata, status));\n    }\n    this._recorderApp?.updateCallLogs(logs);\n  }\n\n  _isRecording() {\n    return ['recording', 'assertingText', 'assertingVisibility', 'assertingValue', 'assertingSnapshot'].includes(this._mode);\n  }\n\n  private _readSource(fileName: string): string {\n    try {\n      return fs.readFileSync(fileName, 'utf-8');\n    } catch (e) {\n      return '// No source available';\n    }\n  }\n}\n\nfunction isScreenshotCommand(metadata: CallMetadata) {\n  return metadata.method.toLowerCase().includes('screenshot');\n}\n\nfunction languageForFile(file: string) {\n  if (file.endsWith('.py'))\n    return 'python';\n  if (file.endsWith('.java'))\n    return 'java';\n  if (file.endsWith('.cs'))\n    return 'csharp';\n  return 'javascript';\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport { isUnderTest } from '../utils';\nimport { serverSideCallMetadata } from './instrumentation';\nimport { findChromiumChannel } from './registry';\nimport { registryDirectory } from './registry';\n\nimport type { BrowserType } from './browserType';\nimport type { CRPage } from './chromium/crPage';\nimport type { Page } from './page';\nimport type * as types from './types';\n\n\nexport async function launchApp(browserType: BrowserType, options: {\n  sdkLanguage: string,\n  windowSize: types.Size,\n  windowPosition?: types.Point,\n  persistentContextOptions?: Parameters<BrowserType['launchPersistentContext']>[2];\n}) {\n  const args = [...options.persistentContextOptions?.args ?? []];\n\n  let channel = options.persistentContextOptions?.channel;\n  if (browserType.name() === 'chromium') {\n    args.push(\n        '--app=data:text/html,',\n        `--window-size=${options.windowSize.width},${options.windowSize.height}`,\n        ...(options.windowPosition ? [`--window-position=${options.windowPosition.x},${options.windowPosition.y}`] : []),\n        '--test-type=',\n    );\n    if (!channel && !options.persistentContextOptions?.executablePath)\n      channel = findChromiumChannel(options.sdkLanguage);\n  }\n\n  const context = await browserType.launchPersistentContext(serverSideCallMetadata(), '', {\n    ignoreDefaultArgs: ['--enable-automation'],\n    ...options?.persistentContextOptions,\n    channel,\n    noDefaultViewport: options.persistentContextOptions?.noDefaultViewport ?? true,\n    acceptDownloads: options?.persistentContextOptions?.acceptDownloads ?? (isUnderTest() ? 'accept' : 'internal-browser-default'),\n    colorScheme: options?.persistentContextOptions?.colorScheme ?? 'no-override',\n    args,\n    timeout: 0, // Deliberately no timeout for our apps.\n  });\n  const [page] = context.pages();\n  // Chromium on macOS opens a new tab when clicking on the dock icon.\n  // See https://github.com/microsoft/playwright/issues/9434\n  if (browserType.name() === 'chromium' && process.platform === 'darwin') {\n    context.on('page', async (newPage: Page) => {\n      if (newPage.mainFrame().url() === 'chrome://new-tab-page/') {\n        await page.bringToFront();\n        await newPage.close(serverSideCallMetadata());\n      }\n    });\n  }\n  if (browserType.name() === 'chromium')\n    await installAppIcon(page);\n  return { context, page };\n}\n\nasync function installAppIcon(page: Page) {\n  const icon = await fs.promises.readFile(require.resolve('./chromium/appIcon.png'));\n  const crPage = page.delegate as CRPage;\n  await crPage._mainFrameSession._client.send('Browser.setDockTile', {\n    image: icon.toString('base64')\n  });\n}\n\nexport async function syncLocalStorageWithSettings(page: Page, appName: string) {\n  if (isUnderTest())\n    return;\n  const settingsFile = path.join(registryDirectory, '.settings', `${appName}.json`);\n  await page.exposeBinding('_saveSerializedSettings', false, (_, settings) => {\n    fs.mkdirSync(path.dirname(settingsFile), { recursive: true });\n    fs.writeFileSync(settingsFile, settings);\n  });\n\n  const settings = await fs.promises.readFile(settingsFile, 'utf-8').catch(() => ('{}'));\n  await page.addInitScript(\n      `(${String((settings: any) => {\n        // iframes w/ snapshots, etc.\n        if (location && location.protocol === 'data:')\n          return;\n        if (window.top !== window)\n          return;\n        Object.entries(settings).map(([k, v]) => localStorage[k] = v);\n        (window as any).saveSettings = () => {\n          (window as any)._saveSerializedSettings(JSON.stringify({ ...localStorage }));\n        };\n      })})(${settings});\n  `);\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { isUnderTest } from '../utils/debug';\nimport { mime } from '../../utilsBundle';\nimport { serverSideCallMetadata } from '../instrumentation';\nimport { syncLocalStorageWithSettings } from '../launchApp';\nimport { launchApp } from '../launchApp';\nimport { ProgressController } from '../progress';\n\nimport type { BrowserContext } from '../browserContext';\nimport type { Page } from '../page';\nimport type { IRecorder, IRecorderApp, IRecorderAppFactory } from './recorderFrontend';\nimport type * as actions from '@recorder/actions';\nimport type { CallLog, ElementInfo, Mode, Source } from '@recorder/recorderTypes';\n\nexport class EmptyRecorderApp extends EventEmitter implements IRecorderApp {\n  wsEndpointForTest: undefined;\n  async close(): Promise<void> {}\n  async setPaused(paused: boolean): Promise<void> {}\n  async setMode(mode: Mode): Promise<void> {}\n  async setRunningFile(file: string | undefined): Promise<void> {}\n  async elementPicked(elementInfo: ElementInfo, userGesture?: boolean): Promise<void> {}\n  async updateCallLogs(callLogs: CallLog[]): Promise<void> {}\n  async setSources(sources: Source[], primaryPageURL: string | undefined): Promise<void> {}\n  async setActions(actions: actions.ActionInContext[], sources: Source[]): Promise<void> {}\n}\n\nexport class RecorderApp extends EventEmitter implements IRecorderApp {\n  private _page: Page;\n  readonly wsEndpointForTest: string | undefined;\n  private _recorder: IRecorder;\n\n  constructor(recorder: IRecorder, page: Page, wsEndpoint: string | undefined) {\n    super();\n    this.setMaxListeners(0);\n    this._recorder = recorder;\n    this._page = page;\n    this.wsEndpointForTest = wsEndpoint;\n  }\n\n  async close() {\n    await this._page.browserContext.close({ reason: 'Recorder window closed' });\n  }\n\n  private async _init() {\n    await syncLocalStorageWithSettings(this._page, 'recorder');\n\n    await this._page.addRequestInterceptor(route => {\n      if (!route.request().url().startsWith('https://playwright/')) {\n        route.continue({ isFallback: true }).catch(() => {});\n        return;\n      }\n\n      const uri = route.request().url().substring('https://playwright/'.length);\n      const file = require.resolve('../../vite/recorder/' + uri);\n      fs.promises.readFile(file).then(buffer => {\n        route.fulfill({\n          status: 200,\n          headers: [\n            { name: 'Content-Type', value: mime.getType(path.extname(file)) || 'application/octet-stream' }\n          ],\n          body: buffer.toString('base64'),\n          isBase64: true\n        }).catch(() => {});\n      });\n    });\n\n    await this._page.exposeBinding('dispatch', false, (_, data: any) => this.emit('event', data));\n\n    this._page.once('close', () => {\n      this.emit('close');\n      this._page.browserContext.close({ reason: 'Recorder window closed' }).catch(() => {});\n    });\n\n    const mainFrame = this._page.mainFrame();\n    await mainFrame.goto(serverSideCallMetadata(), process.env.PW_HMR ? 'http://localhost:44225' : 'https://playwright/index.html', { timeout: 0 });\n  }\n\n  static factory(context: BrowserContext): IRecorderAppFactory {\n    return async recorder => {\n      if (process.env.PW_CODEGEN_NO_INSPECTOR)\n        return new EmptyRecorderApp();\n      return await RecorderApp._open(recorder, context);\n    };\n  }\n\n  private static async _open(recorder: IRecorder, inspectedContext: BrowserContext): Promise<IRecorderApp> {\n    const sdkLanguage = inspectedContext.attribution.playwright.options.sdkLanguage;\n    const headed = !!inspectedContext._browser.options.headful;\n    const recorderPlaywright = (require('../playwright').createPlaywright as typeof import('../playwright').createPlaywright)({ sdkLanguage: 'javascript', isInternalPlaywright: true });\n    const { context, page } = await launchApp(recorderPlaywright.chromium, {\n      sdkLanguage,\n      windowSize: { width: 600, height: 600 },\n      windowPosition: { x: 1020, y: 10 },\n      persistentContextOptions: {\n        noDefaultViewport: true,\n        headless: !!process.env.PWTEST_CLI_HEADLESS || (isUnderTest() && !headed),\n        cdpPort: isUnderTest() ? 0 : undefined,\n        handleSIGINT: recorder.handleSIGINT,\n        executablePath: inspectedContext._browser.options.isChromium ? inspectedContext._browser.options.customExecutablePath : undefined,\n        // Use the same channel as the inspected context to guarantee that the browser is installed.\n        channel: inspectedContext._browser.options.isChromium ? inspectedContext._browser.options.channel : undefined,\n        timeout: 0,\n      }\n    });\n    const controller = new ProgressController(serverSideCallMetadata(), context._browser);\n    await controller.run(async progress => {\n      await context._browser._defaultContext!._loadDefaultContextAsIs(progress);\n    });\n\n    const result = new RecorderApp(recorder, page, context._browser.options.wsEndpoint);\n    await result._init();\n    return result;\n  }\n\n  async setMode(mode: Mode): Promise<void> {\n    await this._page.mainFrame().evaluateExpression(((mode: Mode) => {\n      window.playwrightSetMode(mode);\n    }).toString(), { isFunction: true }, mode).catch(() => {});\n  }\n\n  async setRunningFile(file: string | undefined): Promise<void> {\n    await this._page.mainFrame().evaluateExpression(((file: string) => {\n      window.playwrightSetRunningFile(file);\n    }).toString(), { isFunction: true }, file).catch(() => {});\n  }\n\n  async setPaused(paused: boolean): Promise<void> {\n    await this._page.mainFrame().evaluateExpression(((paused: boolean) => {\n      window.playwrightSetPaused(paused);\n    }).toString(), { isFunction: true }, paused).catch(() => {});\n  }\n\n  async setSources(sources: Source[], primaryPageURL: string | undefined): Promise<void> {\n    await this._page.mainFrame().evaluateExpression((({ sources, primaryPageURL }: { sources: Source[], primaryPageURL: string | undefined }) => {\n      window.playwrightSetSources(sources, primaryPageURL);\n    }).toString(), { isFunction: true }, { sources, primaryPageURL }).catch(() => {});\n\n    // Testing harness for runCLI mode.\n    if (process.env.PWTEST_CLI_IS_UNDER_TEST && sources.length) {\n      if ((process as any)._didSetSourcesForTest(sources[0].text))\n        this.close();\n    }\n  }\n\n  async setActions(actions: actions.ActionInContext[], sources: Source[]): Promise<void> {\n  }\n\n  async elementPicked(elementInfo: ElementInfo, userGesture?: boolean): Promise<void> {\n    if (userGesture)\n      this._page.bringToFront();\n    await this._page.mainFrame().evaluateExpression(((param: { elementInfo: ElementInfo, userGesture?: boolean }) => {\n      window.playwrightElementPicked(param.elementInfo, param.userGesture);\n    }).toString(), { isFunction: true }, { elementInfo, userGesture }).catch(() => {});\n  }\n\n  async updateCallLogs(callLogs: CallLog[]): Promise<void> {\n    await this._page.mainFrame().evaluateExpression(((callLogs: CallLog[]) => {\n      window.playwrightUpdateLogs(callLogs);\n    }).toString(), { isFunction: true }, callLogs).catch(() => {});\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createGuid } from './utils/crypto';\nimport { InvalidSelectorError,  parseSelector, stringifySelector, visitAllSelectorParts } from '../utils/isomorphic/selectorParser';\n\nimport type { ParsedSelector } from '../utils/isomorphic/selectorParser';\nimport type * as channels from '@protocol/channels';\n\nexport class Selectors {\n  private readonly _builtinEngines: Set<string>;\n  private readonly _builtinEnginesInMainWorld: Set<string>;\n  readonly _engines: Map<string, channels.SelectorEngine>;\n  readonly guid = `selectors@${createGuid()}`;\n  private _testIdAttributeName: string;\n\n  constructor(engines: channels.SelectorEngine[], testIdAttributeName: string | undefined) {\n    // Note: keep in sync with InjectedScript class.\n    this._builtinEngines = new Set([\n      'css', 'css:light',\n      'xpath', 'xpath:light',\n      '_react', '_vue',\n      'text', 'text:light',\n      'id', 'id:light',\n      'data-testid', 'data-testid:light',\n      'data-test-id', 'data-test-id:light',\n      'data-test', 'data-test:light',\n      'nth', 'visible', 'internal:control',\n      'internal:has', 'internal:has-not',\n      'internal:has-text', 'internal:has-not-text',\n      'internal:and', 'internal:or', 'internal:chain',\n      'role', 'internal:attr', 'internal:label', 'internal:text',\n      'internal:role', 'internal:testid', 'internal:describe',\n      'aria-ref'\n    ]);\n    this._builtinEnginesInMainWorld = new Set([\n      '_react', '_vue',\n    ]);\n    this._engines = new Map();\n    this._testIdAttributeName = testIdAttributeName ?? 'data-testid';\n    for (const engine of engines)\n      this.register(engine);\n  }\n\n  register(engine: channels.SelectorEngine) {\n    if (!engine.name.match(/^[a-zA-Z_0-9-]+$/))\n      throw new Error('Selector engine name may only contain [a-zA-Z0-9_] characters');\n    // Note: we keep 'zs' for future use.\n    if (this._builtinEngines.has(engine.name) || engine.name === 'zs' || engine.name === 'zs:light')\n      throw new Error(`\"${engine.name}\" is a predefined selector engine`);\n    if (this._engines.has(engine.name))\n      throw new Error(`\"${engine.name}\" selector engine has been already registered`);\n    this._engines.set(engine.name, engine);\n  }\n\n  testIdAttributeName(): string {\n    return this._testIdAttributeName;\n  }\n\n  setTestIdAttributeName(testIdAttributeName: string) {\n    this._testIdAttributeName = testIdAttributeName;\n  }\n\n  parseSelector(selector: string | ParsedSelector, strict: boolean) {\n    const parsed = typeof selector === 'string' ? parseSelector(selector) : selector;\n    let needsMainWorld = false;\n    visitAllSelectorParts(parsed, part => {\n      const name = part.name;\n      const custom = this._engines.get(name);\n      if (!custom && !this._builtinEngines.has(name))\n        throw new InvalidSelectorError(`Unknown engine \"${name}\" while parsing selector ${stringifySelector(parsed)}`);\n      if (custom && !custom.contentScript)\n        needsMainWorld = true;\n      if (this._builtinEnginesInMainWorld.has(name))\n        needsMainWorld = true;\n    });\n    return {\n      parsed,\n      world: needsMainWorld ? 'main' as const : 'utility' as const,\n      strict,\n    };\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { NodeSnapshot } from '@trace/snapshot';\n\nexport type SnapshotData = {\n  doctype?: string,\n  html: NodeSnapshot,\n  resourceOverrides: {\n    url: string,\n    // String is the content. Number is \"x snapshots ago\", same url.\n    content: string | number,\n    contentType: 'text/css'\n  }[],\n  viewport: { width: number, height: number },\n  url: string,\n  wallTime: number,\n  collectionTime: number,\n};\n\nexport function frameSnapshotStreamer(snapshotStreamer: string, removeNoScript: boolean) {\n  // Communication with Playwright.\n  if ((window as any)[snapshotStreamer])\n    return;\n\n  // Attributes present in the snapshot.\n  const kShadowAttribute = '__playwright_shadow_root_';\n  const kValueAttribute = '__playwright_value_';\n  const kCheckedAttribute = '__playwright_checked_';\n  const kSelectedAttribute = '__playwright_selected_';\n  const kScrollTopAttribute = '__playwright_scroll_top_';\n  const kScrollLeftAttribute = '__playwright_scroll_left_';\n  const kStyleSheetAttribute = '__playwright_style_sheet_';\n  const kTargetAttribute = '__playwright_target__';\n  const kCustomElementsAttribute = '__playwright_custom_elements__';\n  const kCurrentSrcAttribute = '__playwright_current_src__';\n  const kBoundingRectAttribute = '__playwright_bounding_rect__';\n  const kPopoverOpenAttribute = '__playwright_popover_open_';\n  const kDialogOpenAttribute = '__playwright_dialog_open_';\n\n  // Symbols for our own info on Nodes/StyleSheets.\n  const kSnapshotFrameId = Symbol('__playwright_snapshot_frameid_');\n  const kCachedData = Symbol('__playwright_snapshot_cache_');\n  const kEndOfList = Symbol('__playwright_end_of_list_');\n  type CachedData = {\n    cached?: any[], // Cached values to determine whether the snapshot will be the same.\n    ref?: [number, number], // Previous snapshotNumber and nodeIndex.\n    attributesCached?: boolean, // Whether node attributes have not changed.\n    cssText?: string, // Text for stylesheets.\n    cssRef?: number, // Previous snapshotNumber for overridden stylesheets.\n  };\n\n  function resetCachedData(obj: any) {\n    delete obj[kCachedData];\n  }\n\n  function ensureCachedData(obj: any): CachedData {\n    if (!obj[kCachedData])\n      obj[kCachedData] = {};\n    return obj[kCachedData];\n  }\n\n  function removeHash(url: string) {\n    try {\n      const u = new URL(url);\n      u.hash = '';\n      return u.toString();\n    } catch (e) {\n      return url;\n    }\n  }\n\n  class Streamer {\n    private _lastSnapshotNumber = 0;\n    private _staleStyleSheets = new Set<CSSStyleSheet>();\n    private _readingStyleSheet = false;  // To avoid invalidating due to our own reads.\n    private _fakeBase: HTMLBaseElement;\n    private _observer: MutationObserver;\n\n    constructor() {\n      const invalidateCSSGroupingRule = (rule: CSSGroupingRule) => {\n        if (rule.parentStyleSheet)\n          this._invalidateStyleSheet(rule.parentStyleSheet);\n      };\n      this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'insertRule', (sheet: CSSStyleSheet) => this._invalidateStyleSheet(sheet));\n      this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'deleteRule', (sheet: CSSStyleSheet) => this._invalidateStyleSheet(sheet));\n      this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'addRule', (sheet: CSSStyleSheet) => this._invalidateStyleSheet(sheet));\n      this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'removeRule', (sheet: CSSStyleSheet) => this._invalidateStyleSheet(sheet));\n      this._interceptNativeGetter(window.CSSStyleSheet.prototype, 'rules', (sheet: CSSStyleSheet) => this._invalidateStyleSheet(sheet));\n      this._interceptNativeGetter(window.CSSStyleSheet.prototype, 'cssRules', (sheet: CSSStyleSheet) => this._invalidateStyleSheet(sheet));\n      this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'replaceSync', (sheet: CSSStyleSheet) => this._invalidateStyleSheet(sheet));\n      this._interceptNativeMethod(window.CSSGroupingRule.prototype, 'insertRule', invalidateCSSGroupingRule);\n      this._interceptNativeMethod(window.CSSGroupingRule.prototype, 'deleteRule', invalidateCSSGroupingRule);\n      this._interceptNativeGetter(window.CSSGroupingRule.prototype, 'cssRules', invalidateCSSGroupingRule);\n      this._interceptNativeAsyncMethod(window.CSSStyleSheet.prototype, 'replace', (sheet: CSSStyleSheet) => this._invalidateStyleSheet(sheet));\n\n      this._fakeBase = document.createElement('base');\n\n      this._observer = new MutationObserver(list => this._handleMutations(list));\n      const observerConfig = { attributes: true, subtree: true };\n      this._observer.observe(document, observerConfig);\n      this._refreshListenersWhenNeeded();\n    }\n\n    private _refreshListenersWhenNeeded() {\n      this._refreshListeners();\n\n      const customEventName = '__playwright_snapshotter_global_listeners_check__';\n\n      let seenEvent = false;\n      const handleCustomEvent = () => seenEvent = true;\n      window.addEventListener(customEventName, handleCustomEvent);\n\n      const observer = new MutationObserver(entries => {\n        // Check for new documentElement in case we need to reinstall document listeners.\n        const newDocumentElement = entries.some(entry => Array.from(entry.addedNodes).includes(document.documentElement));\n        if (newDocumentElement) {\n          // New documentElement - let's check whether listeners are still here.\n          seenEvent = false;\n          window.dispatchEvent(new CustomEvent(customEventName));\n          if (!seenEvent) {\n            // Listener did not fire. Reattach the listener and notify.\n            window.addEventListener(customEventName, handleCustomEvent);\n            this._refreshListeners();\n          }\n        }\n      });\n      observer.observe(document, { childList: true });\n    }\n\n    private _refreshListeners() {\n      (document as any).addEventListener('__playwright_mark_target__', (event: CustomEvent) => {\n        if (!event.detail)\n          return;\n        const callId = event.detail as string;\n        (event.composedPath()[0] as any).__playwright_target__ = callId;\n      });\n      (document as any).addEventListener('__playwright_unmark_target__', (event: CustomEvent) => {\n        if (!event.detail)\n          return;\n        const callId = event.detail as string;\n        if ((event.composedPath()[0] as any).__playwright_target__ === callId)\n          delete (event.composedPath()[0] as any).__playwright_target__;\n      });\n    }\n\n    private _interceptNativeMethod(obj: any, method: string, cb: (thisObj: any, result: any) => void) {\n      const native = obj[method] as Function;\n      if (!native)\n        return;\n      obj[method] = function(...args: any[]) {\n        const result = native.call(this, ...args);\n        cb(this, result);\n        return result;\n      };\n    }\n\n    private _interceptNativeAsyncMethod(obj: any, method: string, cb: (thisObj: any, result: any) => void) {\n      const native = obj[method] as Function;\n      if (!native)\n        return;\n      obj[method] = async function(...args: any[]) {\n        const result = await native.call(this, ...args);\n        cb(this, result);\n        return result;\n      };\n    }\n\n    private _interceptNativeGetter(obj: any, prop: string, cb: (thisObj: any, result: any) => void) {\n      const descriptor = Object.getOwnPropertyDescriptor(obj, prop)!;\n      Object.defineProperty(obj, prop, {\n        ...descriptor,\n        get: function() {\n          const result = descriptor.get!.call(this);\n          cb(this, result);\n          return result;\n        },\n      });\n    }\n\n    private _handleMutations(list: MutationRecord[]) {\n      for (const mutation of list)\n        ensureCachedData(mutation.target).attributesCached = undefined;\n    }\n\n    private _invalidateStyleSheet(sheet: CSSStyleSheet) {\n      if (this._readingStyleSheet)\n        return;\n      this._staleStyleSheets.add(sheet);\n    }\n\n    private _updateStyleElementStyleSheetTextIfNeeded(sheet: CSSStyleSheet, forceText?: boolean): string | undefined {\n      const data = ensureCachedData(sheet);\n      if (this._staleStyleSheets.has(sheet) || (forceText && data.cssText === undefined)) {\n        this._staleStyleSheets.delete(sheet);\n        try {\n          data.cssText = this._getSheetText(sheet);\n        } catch (e) {\n          // Sometimes we cannot access cross-origin stylesheets.\n          data.cssText = '';\n        }\n      }\n      return data.cssText;\n    }\n\n    // Returns either content, ref, or no override.\n    private _updateLinkStyleSheetTextIfNeeded(sheet: CSSStyleSheet, snapshotNumber: number): string | number | undefined {\n      const data = ensureCachedData(sheet);\n      if (this._staleStyleSheets.has(sheet)) {\n        this._staleStyleSheets.delete(sheet);\n        try {\n          data.cssText = this._getSheetText(sheet);\n          data.cssRef = snapshotNumber;\n          return data.cssText;\n        } catch (e) {\n          // Sometimes we cannot access cross-origin stylesheets.\n        }\n      }\n      return data.cssRef === undefined ? undefined : snapshotNumber - data.cssRef;\n    }\n\n    markIframe(iframeElement: HTMLIFrameElement | HTMLFrameElement, frameId: string) {\n      (iframeElement as any)[kSnapshotFrameId] = frameId;\n    }\n\n    reset() {\n      this._staleStyleSheets.clear();\n\n      const visitNode = (node: Node | ShadowRoot) => {\n        resetCachedData(node);\n        if (node.nodeType === Node.ELEMENT_NODE) {\n          const element = node as Element;\n          if (element.shadowRoot)\n            visitNode(element.shadowRoot);\n        }\n        for (let child = node.firstChild; child; child = child.nextSibling)\n          visitNode(child);\n      };\n      visitNode(document.documentElement);\n      visitNode(this._fakeBase);\n    }\n\n    private __sanitizeMetaAttribute(name: string, value: string, httpEquiv: string) {\n      if (name === 'charset')\n        return 'utf-8';\n\n      if (httpEquiv.toLowerCase() !== 'content-type' || name !== 'content')\n        return value;\n\n      const [type, ...params] = value.split(';');\n      if (type !== 'text/html' || params.length <= 0)\n        return value;\n\n      const charsetParamIdx = params.findIndex(param => param.trim().startsWith('charset='));\n      if (charsetParamIdx > -1)\n        params[charsetParamIdx] = 'charset=utf-8';\n\n      return `${type}; ${params.join('; ')}`;\n    }\n\n    private _sanitizeUrl(url: string): string {\n      if (url.startsWith('javascript:') || url.startsWith('vbscript:'))\n        return '';\n      return url;\n    }\n\n    private _sanitizeSrcSet(srcset: string): string {\n      return srcset.split(',').map(src => {\n        src = src.trim();\n        const spaceIndex = src.lastIndexOf(' ');\n        if (spaceIndex === -1)\n          return this._sanitizeUrl(src);\n        return this._sanitizeUrl(src.substring(0, spaceIndex).trim()) + src.substring(spaceIndex);\n      }).join(', ');\n    }\n\n    private _resolveUrl(base: string, url: string): string {\n      if (url === '')\n        return '';\n      try {\n        return new URL(url, base).href;\n      } catch (e) {\n        return url;\n      }\n    }\n\n    private _getSheetBase(sheet: CSSStyleSheet): string {\n      let rootSheet = sheet;\n      while (rootSheet.parentStyleSheet)\n        rootSheet = rootSheet.parentStyleSheet;\n      if (rootSheet.ownerNode)\n        return rootSheet.ownerNode.baseURI;\n      return document.baseURI;\n    }\n\n    private _getSheetText(sheet: CSSStyleSheet): string {\n      this._readingStyleSheet = true;\n      try {\n        const rules: string[] = [];\n        for (const rule of sheet.cssRules)\n          rules.push(rule.cssText);\n        return rules.join('\\n');\n      } finally {\n        this._readingStyleSheet = false;\n      }\n    }\n\n    captureSnapshot(): SnapshotData | undefined {\n      const timestamp = performance.now();\n      const snapshotNumber = ++this._lastSnapshotNumber;\n      let nodeCounter = 0;\n      let shadowDomNesting = 0;\n      let headNesting = 0;\n\n      // Ensure we are up to date.\n      this._handleMutations(this._observer.takeRecords());\n\n      const definedCustomElements = new Set<string>();\n\n      const visitNode = (node: Node | ShadowRoot): { equals: boolean, n: NodeSnapshot } | undefined => {\n        const nodeType = node.nodeType;\n        const nodeName = nodeType === Node.DOCUMENT_FRAGMENT_NODE ? 'template' : node.nodeName;\n\n        if (nodeType !== Node.ELEMENT_NODE &&\n            nodeType !== Node.DOCUMENT_FRAGMENT_NODE &&\n            nodeType !== Node.TEXT_NODE)\n          return;\n        if (nodeName === 'SCRIPT')\n          return;\n        // Don't preload resources.\n        if (nodeName === 'LINK' && nodeType === Node.ELEMENT_NODE) {\n          const rel = (node as Element).getAttribute('rel')?.toLowerCase();\n          if (rel === 'preload' || rel === 'prefetch')\n            return;\n        }\n        if (removeNoScript && nodeName === 'NOSCRIPT')\n          return;\n        if (nodeName === 'META' && (node as HTMLMetaElement).httpEquiv.toLowerCase() === 'content-security-policy')\n          return;\n        // Skip iframes which are inside document's head as they are not visible.\n        // See https://github.com/microsoft/playwright/issues/12005.\n        if ((nodeName === 'IFRAME' || nodeName === 'FRAME') && headNesting)\n          return;\n\n        const data = ensureCachedData(node);\n        const values: any[] = [];\n        let equals = !!data.cached;\n        let extraNodes = 0;\n\n        const expectValue = (value: any) => {\n          equals = equals && data.cached![values.length] === value;\n          values.push(value);\n        };\n\n        const checkAndReturn = (n: NodeSnapshot): { equals: boolean, n: NodeSnapshot } => {\n          data.attributesCached = true;\n          if (equals)\n            return { equals: true, n: [[snapshotNumber - data.ref![0], data.ref![1]]] };\n          nodeCounter += extraNodes;\n          data.ref = [snapshotNumber, nodeCounter++];\n          data.cached = values;\n          return { equals: false, n };\n        };\n\n        if (nodeType === Node.TEXT_NODE) {\n          const value = node.nodeValue || '';\n          expectValue(value);\n          return checkAndReturn(value);\n        }\n\n        if (nodeName === 'STYLE') {\n          const sheet = (node as HTMLStyleElement).sheet;\n          let cssText: string | undefined;\n          if (sheet)\n            cssText = this._updateStyleElementStyleSheetTextIfNeeded(sheet);\n          cssText = cssText || node.textContent || '';\n          expectValue(cssText);\n          // Compensate for the extra 'cssText' text node.\n          extraNodes++;\n          return checkAndReturn([nodeName, {}, cssText]);\n        }\n\n        const attrs: { [attr: string]: string } = {};\n        const result: NodeSnapshot = [nodeName, attrs];\n\n        const visitChild = (child: Node) => {\n          const snapshot = visitNode(child);\n          if (snapshot) {\n            result.push(snapshot.n);\n            expectValue(child);\n            equals = equals && snapshot.equals;\n          }\n        };\n\n        const visitChildStyleSheet = (child: CSSStyleSheet) => {\n          const snapshot = visitStyleSheet(child);\n          if (snapshot) {\n            result.push(snapshot.n);\n            expectValue(child);\n            equals = equals && snapshot.equals;\n          }\n        };\n\n        if (nodeType === Node.DOCUMENT_FRAGMENT_NODE)\n          attrs[kShadowAttribute] = 'open';\n\n        if (nodeType === Node.ELEMENT_NODE) {\n          const element = node as Element;\n          if (element.localName.includes('-') && window.customElements?.get(element.localName))\n            definedCustomElements.add(element.localName);\n          if (nodeName === 'INPUT' || nodeName === 'TEXTAREA') {\n            const value = (element as HTMLInputElement).value;\n            expectValue(kValueAttribute);\n            expectValue(value);\n            attrs[kValueAttribute] = value;\n          }\n          if (nodeName === 'INPUT' && ['checkbox', 'radio'].includes((element as HTMLInputElement).type)) {\n            const value = (element as HTMLInputElement).checked ? 'true' : 'false';\n            expectValue(kCheckedAttribute);\n            expectValue(value);\n            attrs[kCheckedAttribute] = value;\n          }\n          if (nodeName === 'OPTION') {\n            const value = (element as HTMLOptionElement).selected ? 'true' : 'false';\n            expectValue(kSelectedAttribute);\n            expectValue(value);\n            attrs[kSelectedAttribute] = value;\n          }\n          if (nodeName === 'CANVAS' || nodeName === 'IFRAME' || nodeName === 'FRAME') {\n            const boundingRect = (element as HTMLElement).getBoundingClientRect();\n            const value = JSON.stringify({\n              left: boundingRect.left,\n              top: boundingRect.top,\n              right: boundingRect.right,\n              bottom: boundingRect.bottom\n            });\n            expectValue(kBoundingRectAttribute);\n            expectValue(value);\n            attrs[kBoundingRectAttribute] = value;\n          }\n          if ((element as HTMLElement).popover && (element as HTMLElement).matches && (element as HTMLElement).matches(':popover-open')) {\n            const value = 'true';\n            expectValue(kPopoverOpenAttribute);\n            expectValue(value);\n            attrs[kPopoverOpenAttribute] = value;\n          }\n          if (nodeName === 'DIALOG' && (element as HTMLDialogElement).open) {\n            const value = (element as HTMLDialogElement).matches(':modal') ? 'modal' : 'true';\n            expectValue(kDialogOpenAttribute);\n            expectValue(value);\n            attrs[kDialogOpenAttribute] = value;\n          }\n          if (element.scrollTop) {\n            expectValue(kScrollTopAttribute);\n            expectValue(element.scrollTop);\n            attrs[kScrollTopAttribute] = '' + element.scrollTop;\n          }\n          if (element.scrollLeft) {\n            expectValue(kScrollLeftAttribute);\n            expectValue(element.scrollLeft);\n            attrs[kScrollLeftAttribute] = '' + element.scrollLeft;\n          }\n          if (element.shadowRoot) {\n            ++shadowDomNesting;\n            visitChild(element.shadowRoot);\n            --shadowDomNesting;\n          }\n          if ('__playwright_target__' in element) {\n            expectValue(kTargetAttribute);\n            expectValue(element['__playwright_target__']);\n            attrs[kTargetAttribute] = element['__playwright_target__'] as string;\n          }\n        }\n\n        if (nodeName === 'HEAD') {\n          ++headNesting;\n          // Insert fake <base> first, to ensure all <link> elements use the proper base uri.\n          this._fakeBase.setAttribute('href', document.baseURI);\n          visitChild(this._fakeBase);\n        }\n        for (let child = node.firstChild; child; child = child.nextSibling)\n          visitChild(child);\n        if (nodeName === 'HEAD')\n          --headNesting;\n        expectValue(kEndOfList);\n        let documentOrShadowRoot = null;\n        if (node.ownerDocument!.documentElement === node)\n          documentOrShadowRoot = node.ownerDocument;\n        else if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE)\n          documentOrShadowRoot = node;\n        if (documentOrShadowRoot) {\n          for (const sheet of (documentOrShadowRoot as any).adoptedStyleSheets || [])\n            visitChildStyleSheet(sheet);\n          expectValue(kEndOfList);\n        }\n\n        // Process iframe src attribute before bailing out since it depends on a symbol, not the DOM.\n        if (nodeName === 'IFRAME' || nodeName === 'FRAME') {\n          const element = node as Element;\n          const frameId = (element as any)[kSnapshotFrameId];\n          const name = 'src';\n          const value = frameId ? `/snapshot/${frameId}` : '';\n          expectValue(name);\n          expectValue(value);\n          attrs[name] = value;\n        }\n\n        // Process custom elements before bailing out since they depend on JS, not the DOM.\n        if (nodeName === 'BODY' && definedCustomElements.size) {\n          const value = [...definedCustomElements].join(',');\n          expectValue(kCustomElementsAttribute);\n          expectValue(value);\n          attrs[kCustomElementsAttribute] = value;\n        }\n\n        // Process currentSrc before bailing out since it depends on JS, not the DOM.\n        if (nodeName === 'IMG' || nodeName === 'PICTURE') {\n          const value = nodeName === 'PICTURE' ? '' : this._sanitizeUrl((node as HTMLImageElement).currentSrc);\n          expectValue(kCurrentSrcAttribute);\n          expectValue(value);\n          attrs[kCurrentSrcAttribute] = value;\n        }\n\n        // We can skip attributes comparison because nothing else has changed,\n        // and mutation observer didn't tell us about the attributes.\n        if (equals && data.attributesCached && !shadowDomNesting)\n          return checkAndReturn(result);\n\n        if (nodeType === Node.ELEMENT_NODE) {\n          const element = node as Element;\n          for (let i = 0; i < element.attributes.length; i++) {\n            const name = element.attributes[i].name;\n            if (nodeName === 'LINK' && name === 'integrity')\n              continue;\n            if (nodeName === 'IFRAME' && (name === 'src' || name === 'srcdoc' || name === 'sandbox'))\n              continue;\n            if (nodeName === 'FRAME' && name === 'src')\n              continue;\n            if (nodeName === 'DIALOG' && name === 'open')\n              continue;\n            let value = element.attributes[i].value;\n            if (nodeName === 'META')\n              value = this.__sanitizeMetaAttribute(name, value, (node as HTMLMetaElement).httpEquiv);\n            else if (name === 'src' && (nodeName === 'IMG'))\n              value = this._sanitizeUrl(value);\n            else if (name === 'srcset' && (nodeName === 'IMG'))\n              value = this._sanitizeSrcSet(value);\n            else if (name === 'srcset' && (nodeName === 'SOURCE'))\n              value = this._sanitizeSrcSet(value);\n            else if (name === 'href' && (nodeName === 'LINK'))\n              value = this._sanitizeUrl(value);\n            else if (name.startsWith('on'))\n              value = '';\n            expectValue(name);\n            expectValue(value);\n            attrs[name] = value;\n          }\n          expectValue(kEndOfList);\n        }\n\n        if (result.length === 2 && !Object.keys(attrs).length)\n          result.pop();  // Remove empty attrs when there are no children.\n        return checkAndReturn(result);\n      };\n\n      const visitStyleSheet = (sheet: CSSStyleSheet): { equals: boolean, n: NodeSnapshot } => {\n        const data = ensureCachedData(sheet);\n        const oldCSSText = data.cssText;\n        const cssText = this._updateStyleElementStyleSheetTextIfNeeded(sheet, true /* forceText */)!;\n        if (cssText === oldCSSText)\n          return { equals: true, n: [[snapshotNumber - data.ref![0], data.ref![1]]] };\n        data.ref = [snapshotNumber, nodeCounter++];\n        return {\n          equals: false,\n          n: ['template', {\n            [kStyleSheetAttribute]: cssText,\n          }]\n        };\n      };\n\n      let html: NodeSnapshot;\n      if (document.documentElement) {\n        const { n } = visitNode(document.documentElement)!;\n        html = n;\n      } else {\n        html = ['html'];\n      }\n\n      const result: SnapshotData = {\n        html,\n        doctype: document.doctype ? document.doctype.name : undefined,\n        resourceOverrides: [],\n        viewport: {\n          width: window.innerWidth,\n          height: window.innerHeight,\n        },\n        url: location.href,\n        wallTime: Date.now(),\n        collectionTime: 0,\n      };\n\n      for (const sheet of this._staleStyleSheets) {\n        if (sheet.href === null)\n          continue;\n        const content = this._updateLinkStyleSheetTextIfNeeded(sheet, snapshotNumber);\n        if (content === undefined) {\n          // Unable to capture stylesheet contents.\n          continue;\n        }\n        const base = this._getSheetBase(sheet);\n        const url = removeHash(this._resolveUrl(base, sheet.href!));\n        result.resourceOverrides.push({ url, content, contentType: 'text/css' },);\n      }\n\n      result.collectionTime = performance.now() - timestamp;\n      return result;\n    }\n  }\n\n  (window as any)[snapshotStreamer] = new Streamer();\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { frameSnapshotStreamer } from './snapshotterInjected';\nimport { monotonicTime } from '../../../utils/isomorphic/time';\nimport { calculateSha1, createGuid } from '../../utils/crypto';\nimport { debugLogger } from '../../utils/debugLogger';\nimport { eventsHelper } from '../../utils/eventsHelper';\nimport { mime } from '../../../utilsBundle';\nimport { BrowserContext } from '../../browserContext';\nimport { Page } from '../../page';\n\nimport type { SnapshotData } from './snapshotterInjected';\nimport type { RegisteredListener } from '../../utils/eventsHelper';\nimport type { Frame } from '../../frames';\nimport type { InitScript } from '../../page';\nimport type { FrameSnapshot } from '@trace/snapshot';\n\nexport type SnapshotterBlob = {\n  buffer: Buffer,\n  sha1: string,\n};\n\nexport interface SnapshotterDelegate {\n  onSnapshotterBlob(blob: SnapshotterBlob): void;\n  onFrameSnapshot(snapshot: FrameSnapshot): void;\n}\n\nexport class Snapshotter {\n  private _context: BrowserContext;\n  private _delegate: SnapshotterDelegate;\n  private _eventListeners: RegisteredListener[] = [];\n  private _snapshotStreamer: string;\n  private _initScript: InitScript | undefined;\n  private _started = false;\n\n  constructor(context: BrowserContext, delegate: SnapshotterDelegate) {\n    this._context = context;\n    this._delegate = delegate;\n    const guid = createGuid();\n    this._snapshotStreamer = '__playwright_snapshot_streamer_' + guid;\n  }\n\n  started(): boolean {\n    return this._started;\n  }\n\n  async start() {\n    this._started = true;\n    if (!this._initScript)\n      await this._initialize();\n    await this.reset();\n  }\n\n  async reset() {\n    if (this._started)\n      await this._context.safeNonStallingEvaluateInAllFrames(`window[\"${this._snapshotStreamer}\"].reset()`, 'main');\n  }\n\n  async stop() {\n    this._started = false;\n  }\n\n  async resetForReuse() {\n    // Next time we start recording, we will call addInitScript again.\n    if (this._initScript) {\n      await this._context.removeInitScripts([this._initScript]);\n      this._initScript = undefined;\n    }\n  }\n\n  async _initialize() {\n    for (const page of this._context.pages())\n      this._onPage(page);\n    this._eventListeners = [\n      eventsHelper.addEventListener(this._context, BrowserContext.Events.Page, this._onPage.bind(this)),\n    ];\n\n    const { javaScriptEnabled } = this._context._options;\n    const initScriptSource = `(${frameSnapshotStreamer})(\"${this._snapshotStreamer}\", ${javaScriptEnabled || javaScriptEnabled === undefined})`;\n    this._initScript = await this._context.addInitScript(initScriptSource);\n    await this._context.safeNonStallingEvaluateInAllFrames(initScriptSource, 'main');\n  }\n\n  dispose() {\n    eventsHelper.removeEventListeners(this._eventListeners);\n  }\n\n  async captureSnapshot(page: Page, callId: string, snapshotName: string): Promise<void> {\n    // Prepare expression synchronously.\n    const expression = `window[\"${this._snapshotStreamer}\"].captureSnapshot(${JSON.stringify(snapshotName)})`;\n\n    // In each frame, in a non-stalling manner, capture the snapshots.\n    const snapshots = page.frames().map(async frame => {\n      const data = await frame.nonStallingRawEvaluateInExistingMainContext(expression).catch(e => debugLogger.log('error', e)) as SnapshotData;\n      // Something went wrong -> bail out, our snapshots are best-efforty.\n      if (!data || !this._started)\n        return;\n\n      const snapshot: FrameSnapshot = {\n        callId,\n        snapshotName,\n        pageId: page.guid,\n        frameId: frame.guid,\n        frameUrl: data.url,\n        doctype: data.doctype,\n        html: data.html,\n        viewport: data.viewport,\n        timestamp: monotonicTime(),\n        wallTime: data.wallTime,\n        collectionTime: data.collectionTime,\n        resourceOverrides: [],\n        isMainFrame: page.mainFrame() === frame\n      };\n      for (const { url, content, contentType } of data.resourceOverrides) {\n        if (typeof content === 'string') {\n          const buffer = Buffer.from(content);\n          const sha1 = calculateSha1(buffer) + '.' + (mime.getExtension(contentType) || 'dat');\n          this._delegate.onSnapshotterBlob({ sha1, buffer });\n          snapshot.resourceOverrides.push({ url, sha1 });\n        } else {\n          snapshot.resourceOverrides.push({ url, ref: content });\n        }\n      }\n      this._delegate.onFrameSnapshot(snapshot);\n    });\n    await Promise.all(snapshots);\n  }\n\n  private _onPage(page: Page) {\n    // Annotate frame hierarchy so that snapshots could include frame ids.\n    for (const frame of page.frames())\n      this._annotateFrameHierarchy(frame);\n    this._eventListeners.push(eventsHelper.addEventListener(page, Page.Events.FrameAttached, frame => this._annotateFrameHierarchy(frame)));\n  }\n\n  private async _annotateFrameHierarchy(frame: Frame) {\n    try {\n      const frameElement = await frame.frameElement();\n      const parent = frame.parentFrame();\n      if (!parent)\n        return;\n      const context = await parent._mainContext();\n      await context?.evaluate(({ snapshotStreamer, frameElement, frameId }) => {\n        (window as any)[snapshotStreamer].markIframe(frameElement, frameId);\n      }, { snapshotStreamer: this._snapshotStreamer, frameElement, frameId: frame.guid });\n      frameElement.dispose();\n    } catch (e) {\n    }\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { Snapshotter } from './snapshotter';\nimport { methodMetainfo } from '../../../utils/isomorphic/protocolMetainfo';\nimport { assert } from '../../../utils/isomorphic/assert';\nimport { monotonicTime } from '../../../utils/isomorphic/time';\nimport { eventsHelper  } from '../../utils/eventsHelper';\nimport { createGuid  } from '../../utils/crypto';\nimport { Artifact } from '../../artifact';\nimport { BrowserContext } from '../../browserContext';\nimport { Dispatcher } from '../../dispatchers/dispatcher';\nimport { serializeError } from '../../errors';\nimport { SerializedFS, removeFolders  } from '../../utils/fileUtils';\nimport { HarTracer } from '../../har/harTracer';\nimport { SdkObject } from '../../instrumentation';\nimport { Page } from '../../page';\n\nimport type { SnapshotterBlob, SnapshotterDelegate } from './snapshotter';\nimport type { NameValue } from '../../../utils/isomorphic/types';\nimport type { RegisteredListener } from '../../../utils';\nimport type { ConsoleMessage } from '../../console';\nimport type { Dialog } from '../../dialog';\nimport type { Download } from '../../download';\nimport type { APIRequestContext } from '../../fetch';\nimport type { HarTracerDelegate } from '../../har/harTracer';\nimport type { CallMetadata, InstrumentationListener } from '../../instrumentation';\nimport type { StackFrame, TracingTracingStopChunkParams } from '@protocol/channels';\nimport type * as har from '@trace/har';\nimport type { FrameSnapshot } from '@trace/snapshot';\nimport type * as trace from '@trace/trace';\n\nconst version: trace.VERSION = 8;\n\nexport type TracerOptions = {\n  name?: string;\n  snapshots?: boolean;\n  screenshots?: boolean;\n  live?: boolean;\n};\n\ntype RecordingState = {\n  options: TracerOptions,\n  traceName: string,\n  networkFile: string,\n  traceFile: string,\n  tracesDir: string,\n  resourcesDir: string,\n  chunkOrdinal: number,\n  networkSha1s: Set<string>,\n  traceSha1s: Set<string>,\n  recording: boolean;\n  callIds: Set<string>;\n  groupStack: string[];\n};\n\nconst kScreencastOptions = { width: 800, height: 600, quality: 90 };\n\nexport class Tracing extends SdkObject implements InstrumentationListener, SnapshotterDelegate, HarTracerDelegate {\n  private _fs = new SerializedFS();\n  private _snapshotter?: Snapshotter;\n  private _harTracer: HarTracer;\n  private _screencastListeners: RegisteredListener[] = [];\n  private _eventListeners: RegisteredListener[] = [];\n  private _context: BrowserContext | APIRequestContext;\n  // Note: state should only be touched inside API methods, but not inside trace operations.\n  private _state: RecordingState | undefined;\n  private _isStopping = false;\n  private _precreatedTracesDir: string | undefined;\n  private _tracesTmpDir: string | undefined;\n  private _allResources = new Set<string>();\n  private _contextCreatedEvent: trace.ContextCreatedTraceEvent;\n  private _pendingHarEntries = new Set<har.Entry>();\n\n  constructor(context: BrowserContext | APIRequestContext, tracesDir: string | undefined) {\n    super(context, 'tracing');\n    this._context = context;\n    this._precreatedTracesDir = tracesDir;\n    this._harTracer = new HarTracer(context, null, this, {\n      content: 'attach',\n      includeTraceInfo: true,\n      recordRequestOverrides: false,\n      waitForContentOnStop: false,\n    });\n    const testIdAttributeName = ('selectors' in context) ? context.selectors().testIdAttributeName() : undefined;\n    this._contextCreatedEvent = {\n      version,\n      type: 'context-options',\n      origin: 'library',\n      browserName: '',\n      options: {},\n      platform: process.platform,\n      wallTime: 0,\n      monotonicTime: 0,\n      sdkLanguage: context.attribution.playwright.options.sdkLanguage,\n      testIdAttributeName,\n      contextId: context.guid,\n    };\n    if (context instanceof BrowserContext) {\n      this._snapshotter = new Snapshotter(context, this);\n      assert(tracesDir, 'tracesDir must be specified for BrowserContext');\n      this._contextCreatedEvent.browserName = context._browser.options.name;\n      this._contextCreatedEvent.channel = context._browser.options.channel;\n      this._contextCreatedEvent.options = context._options;\n    }\n  }\n\n  async resetForReuse() {\n    // Discard previous chunk if any and ignore any errors there.\n    await this.stopChunk({ mode: 'discard' }).catch(() => {});\n    await this.stop();\n    await this._snapshotter?.resetForReuse();\n  }\n\n  async start(options: TracerOptions) {\n    if (this._isStopping)\n      throw new Error('Cannot start tracing while stopping');\n    if (this._state)\n      throw new Error('Tracing has been already started');\n\n    // Re-write for testing.\n    this._contextCreatedEvent.sdkLanguage = this._context.attribution.playwright.options.sdkLanguage;\n\n    // TODO: passing the same name for two contexts makes them write into a single file\n    // and conflict.\n    const traceName = options.name || createGuid();\n\n    const tracesDir = this._createTracesDirIfNeeded();\n\n    // Init the state synchronously.\n    this._state = {\n      options,\n      traceName,\n      tracesDir,\n      traceFile: path.join(tracesDir, traceName + '.trace'),\n      networkFile: path.join(tracesDir, traceName + '.network'),\n      resourcesDir: path.join(tracesDir, 'resources'),\n      chunkOrdinal: 0,\n      traceSha1s: new Set(),\n      networkSha1s: new Set(),\n      recording: false,\n      callIds: new Set(),\n      groupStack: [],\n    };\n    this._fs.mkdir(this._state.resourcesDir);\n    this._fs.writeFile(this._state.networkFile, '');\n    // Tracing is 10x bigger if we include scripts in every trace.\n    if (options.snapshots)\n      this._harTracer.start({ omitScripts: !options.live });\n  }\n\n  async startChunk(options: { name?: string, title?: string } = {}): Promise<{ traceName: string }> {\n    if (this._state && this._state.recording)\n      await this.stopChunk({ mode: 'discard' });\n\n    if (!this._state)\n      throw new Error('Must start tracing before starting a new chunk');\n    if (this._isStopping)\n      throw new Error('Cannot start a trace chunk while stopping');\n\n    this._state.recording = true;\n    this._state.callIds.clear();\n\n    // - Browser context network trace is shared across chunks as it contains resources\n    // used to serve page snapshots, so make a copy with the new name.\n    // - APIRequestContext network traces are chunk-specific, always start from scratch.\n    const preserveNetworkResources = this._context instanceof BrowserContext;\n    if (options.name && options.name !== this._state.traceName)\n      this._changeTraceName(this._state, options.name, preserveNetworkResources);\n    else\n      this._allocateNewTraceFile(this._state);\n    if (!preserveNetworkResources)\n      this._fs.writeFile(this._state.networkFile, '');\n\n    this._fs.mkdir(path.dirname(this._state.traceFile));\n    const event: trace.TraceEvent = {\n      ...this._contextCreatedEvent,\n      title: options.title,\n      wallTime: Date.now(),\n      monotonicTime: monotonicTime()\n    };\n    this._appendTraceEvent(event);\n\n    this._context.instrumentation.addListener(this, this._context);\n    this._eventListeners.push(\n        eventsHelper.addEventListener(this._context, BrowserContext.Events.Console, this._onConsoleMessage.bind(this)),\n        eventsHelper.addEventListener(this._context, BrowserContext.Events.PageError, this._onPageError.bind(this)),\n    );\n    if (this._state.options.screenshots)\n      this._startScreencast();\n    if (this._state.options.snapshots)\n      await this._snapshotter?.start();\n    return { traceName: this._state.traceName };\n  }\n\n  private _currentGroupId(): string | undefined {\n    return this._state?.groupStack.length ? this._state.groupStack[this._state.groupStack.length - 1] : undefined;\n  }\n\n  async group(name: string, location: { file: string, line?: number, column?: number } | undefined, metadata: CallMetadata): Promise<void> {\n    if (!this._state)\n      return;\n    const stackFrames: StackFrame[] = [];\n    const { file, line, column } = location ?? metadata.location ?? {};\n    if (file) {\n      stackFrames.push({\n        file,\n        line: line ?? 0,\n        column: column ?? 0,\n      });\n    }\n    const event: trace.BeforeActionTraceEvent = {\n      type: 'before',\n      callId: metadata.id,\n      startTime: metadata.startTime,\n      title: name,\n      class: 'Tracing',\n      method: 'tracingGroup',\n      params: { },\n      stepId: metadata.stepId,\n      stack: stackFrames,\n    };\n    if (this._currentGroupId())\n      event.parentId = this._currentGroupId();\n    this._state.groupStack.push(event.callId);\n    this._appendTraceEvent(event);\n  }\n\n  groupEnd() {\n    if (!this._state)\n      return;\n    const callId = this._state.groupStack.pop();\n    if (!callId)\n      return;\n    const event: trace.AfterActionTraceEvent = {\n      type: 'after',\n      callId,\n      endTime: monotonicTime(),\n    };\n    this._appendTraceEvent(event);\n  }\n\n  private _startScreencast() {\n    if (!(this._context instanceof BrowserContext))\n      return;\n    for (const page of this._context.pages())\n      this._startScreencastInPage(page);\n    this._screencastListeners.push(\n        eventsHelper.addEventListener(this._context, BrowserContext.Events.Page, this._startScreencastInPage.bind(this)),\n    );\n  }\n\n  private _stopScreencast() {\n    eventsHelper.removeEventListeners(this._screencastListeners);\n    if (!(this._context instanceof BrowserContext))\n      return;\n    for (const page of this._context.pages())\n      page.setScreencastOptions(null);\n  }\n\n  private _allocateNewTraceFile(state: RecordingState) {\n    const suffix = state.chunkOrdinal ? `-chunk${state.chunkOrdinal}` : ``;\n    state.chunkOrdinal++;\n    state.traceFile = path.join(state.tracesDir, `${state.traceName}${suffix}.trace`);\n  }\n\n  private _changeTraceName(state: RecordingState, name: string, preserveNetworkResources: boolean) {\n    state.traceName = name;\n    state.chunkOrdinal = 0;  // Reset ordinal for the new name.\n    this._allocateNewTraceFile(state);\n\n    const newNetworkFile = path.join(state.tracesDir, name + '.network');\n    if (preserveNetworkResources)\n      this._fs.copyFile(state.networkFile, newNetworkFile);\n    state.networkFile = newNetworkFile;\n  }\n\n  async stop() {\n    if (!this._state)\n      return;\n    if (this._isStopping)\n      throw new Error(`Tracing is already stopping`);\n    if (this._state.recording)\n      throw new Error(`Must stop trace file before stopping tracing`);\n    this._closeAllGroups();\n    this._harTracer.stop();\n    this.flushHarEntries();\n    await this._fs.syncAndGetError();\n    this._state = undefined;\n  }\n\n  async deleteTmpTracesDir() {\n    if (this._tracesTmpDir)\n      await removeFolders([this._tracesTmpDir]);\n  }\n\n  private _createTracesDirIfNeeded() {\n    if (this._precreatedTracesDir)\n      return this._precreatedTracesDir;\n    this._tracesTmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'playwright-tracing-'));\n    return this._tracesTmpDir;\n  }\n\n  abort() {\n    this._snapshotter?.dispose();\n    this._harTracer.stop();\n  }\n\n  async flush() {\n    this.abort();\n    await this._fs.syncAndGetError();\n  }\n\n  private _closeAllGroups() {\n    while (this._currentGroupId())\n      this.groupEnd();\n  }\n\n  async stopChunk(params: TracingTracingStopChunkParams): Promise<{ artifact?: Artifact, entries?: NameValue[] }> {\n    if (this._isStopping)\n      throw new Error(`Tracing is already stopping`);\n    this._isStopping = true;\n\n    if (!this._state || !this._state.recording) {\n      this._isStopping = false;\n      if (params.mode !== 'discard')\n        throw new Error(`Must start tracing before stopping`);\n      return {};\n    }\n\n    this._closeAllGroups();\n\n    this._context.instrumentation.removeListener(this);\n    eventsHelper.removeEventListeners(this._eventListeners);\n    if (this._state.options.screenshots)\n      this._stopScreencast();\n\n    if (this._state.options.snapshots)\n      await this._snapshotter?.stop();\n\n    this.flushHarEntries();\n\n    // Network file survives across chunks, make a snapshot before returning the resulting entries.\n    // We should pick a name starting with \"traceName\" and ending with .network.\n    // Something like <traceName>someSuffixHere.network.\n    // However, this name must not clash with any other \"traceName\".network in the same tracesDir.\n    // We can use <traceName>-<guid>.network, but \"-pwnetcopy-0\" suffix is more readable\n    // and makes it easier to debug future issues.\n    const newNetworkFile = path.join(this._state.tracesDir, this._state.traceName + `-pwnetcopy-${this._state.chunkOrdinal}.network`);\n\n    const entries: NameValue[] = [];\n    entries.push({ name: 'trace.trace', value: this._state.traceFile });\n    entries.push({ name: 'trace.network', value: newNetworkFile });\n    for (const sha1 of new Set([...this._state.traceSha1s, ...this._state.networkSha1s]))\n      entries.push({ name: path.join('resources', sha1), value: path.join(this._state.resourcesDir, sha1) });\n\n    // Only reset trace sha1s, network resources are preserved between chunks.\n    this._state.traceSha1s = new Set();\n\n    if (params.mode === 'discard') {\n      this._isStopping = false;\n      this._state.recording = false;\n      return {};\n    }\n\n    this._fs.copyFile(this._state.networkFile, newNetworkFile);\n\n    const zipFileName = this._state.traceFile + '.zip';\n    if (params.mode === 'archive')\n      this._fs.zip(entries, zipFileName);\n\n    // Make sure all file operations complete.\n    const error = await this._fs.syncAndGetError();\n\n    this._isStopping = false;\n    if (this._state)\n      this._state.recording = false;\n\n    // IMPORTANT: no awaits after this point, to make sure recording state is correct.\n\n    if (error) {\n      // This check is here because closing the browser removes the tracesDir and tracing\n      // cannot access removed files. Clients are ready for the missing artifact.\n      if (this._context instanceof BrowserContext && !this._context._browser.isConnected())\n        return {};\n      throw error;\n    }\n\n    if (params.mode === 'entries')\n      return { entries };\n\n    const artifact = new Artifact(this._context, zipFileName);\n    artifact.reportFinished();\n    return { artifact };\n  }\n\n  async _captureSnapshot(snapshotName: string, sdkObject: SdkObject, metadata: CallMetadata): Promise<void> {\n    if (!this._snapshotter)\n      return;\n    if (!sdkObject.attribution.page)\n      return;\n    if (!this._snapshotter.started())\n      return;\n    if (!shouldCaptureSnapshot(metadata))\n      return;\n    await this._snapshotter.captureSnapshot(sdkObject.attribution.page, metadata.id, snapshotName).catch(() => {});\n  }\n\n  onBeforeCall(sdkObject: SdkObject, metadata: CallMetadata) {\n    // IMPORTANT: no awaits before this._appendTraceEvent in this method.\n    const event = createBeforeActionTraceEvent(metadata, this._currentGroupId());\n    if (!event)\n      return Promise.resolve();\n    sdkObject.attribution.page?.temporarilyDisableTracingScreencastThrottling();\n    event.beforeSnapshot = `before@${metadata.id}`;\n    this._state?.callIds.add(metadata.id);\n    this._appendTraceEvent(event);\n    return this._captureSnapshot(event.beforeSnapshot, sdkObject, metadata);\n  }\n\n  onBeforeInputAction(sdkObject: SdkObject, metadata: CallMetadata) {\n    if (!this._state?.callIds.has(metadata.id))\n      return Promise.resolve();\n    // IMPORTANT: no awaits before this._appendTraceEvent in this method.\n    const event = createInputActionTraceEvent(metadata);\n    if (!event)\n      return Promise.resolve();\n    sdkObject.attribution.page?.temporarilyDisableTracingScreencastThrottling();\n    event.inputSnapshot = `input@${metadata.id}`;\n    this._appendTraceEvent(event);\n    return this._captureSnapshot(event.inputSnapshot, sdkObject, metadata);\n  }\n\n  onCallLog(sdkObject: SdkObject, metadata: CallMetadata, logName: string, message: string) {\n    if (metadata.isServerSide || metadata.internal)\n      return;\n    if (logName !== 'api')\n      return;\n    const event = createActionLogTraceEvent(metadata, message);\n    if (event)\n      this._appendTraceEvent(event);\n  }\n\n  async onAfterCall(sdkObject: SdkObject, metadata: CallMetadata) {\n    if (!this._state?.callIds.has(metadata.id))\n      return;\n    this._state?.callIds.delete(metadata.id);\n    const event = createAfterActionTraceEvent(metadata);\n    if (!event)\n      return;\n    sdkObject.attribution.page?.temporarilyDisableTracingScreencastThrottling();\n    event.afterSnapshot = `after@${metadata.id}`;\n    this._appendTraceEvent(event);\n    return this._captureSnapshot(event.afterSnapshot, sdkObject, metadata);\n  }\n\n  onEntryStarted(entry: har.Entry) {\n    this._pendingHarEntries.add(entry);\n  }\n\n  onEntryFinished(entry: har.Entry) {\n    this._pendingHarEntries.delete(entry);\n    const event: trace.ResourceSnapshotTraceEvent = { type: 'resource-snapshot', snapshot: entry };\n    const visited = visitTraceEvent(event, this._state!.networkSha1s);\n    this._fs.appendFile(this._state!.networkFile, JSON.stringify(visited) + '\\n', true /* flush */);\n  }\n\n  flushHarEntries() {\n    const harLines: string[] = [];\n    for (const entry of this._pendingHarEntries) {\n      const event: trace.ResourceSnapshotTraceEvent = { type: 'resource-snapshot', snapshot: entry };\n      const visited = visitTraceEvent(event, this._state!.networkSha1s);\n      harLines.push(JSON.stringify(visited));\n    }\n    this._pendingHarEntries.clear();\n    if (harLines.length)\n      this._fs.appendFile(this._state!.networkFile, harLines.join('\\n') + '\\n', true /* flush */);\n  }\n\n  onContentBlob(sha1: string, buffer: Buffer) {\n    this._appendResource(sha1, buffer);\n  }\n\n  onSnapshotterBlob(blob: SnapshotterBlob): void {\n    this._appendResource(blob.sha1, blob.buffer);\n  }\n\n  onFrameSnapshot(snapshot: FrameSnapshot): void {\n    this._appendTraceEvent({ type: 'frame-snapshot', snapshot });\n  }\n\n  private _onConsoleMessage(message: ConsoleMessage) {\n    const event: trace.ConsoleMessageTraceEvent = {\n      type: 'console',\n      messageType: message.type(),\n      text: message.text(),\n      args: message.args().map(a => ({ preview: a.toString(), value: a.rawValue() })),\n      location: message.location(),\n      time: monotonicTime(),\n      pageId: message.page()?.guid,\n    };\n    this._appendTraceEvent(event);\n  }\n\n  onDialog(dialog: Dialog) {\n    const event: trace.EventTraceEvent = {\n      type: 'event',\n      time: monotonicTime(),\n      class: 'BrowserContext',\n      method: 'dialog',\n      params: { pageId: dialog.page().guid, type: dialog.type(), message: dialog.message(), defaultValue: dialog.defaultValue() },\n    };\n    this._appendTraceEvent(event);\n  }\n\n  onDownload(page: Page, download: Download) {\n    const event: trace.EventTraceEvent = {\n      type: 'event',\n      time: monotonicTime(),\n      class: 'BrowserContext',\n      method: 'download',\n      params: { pageId: page.guid, url: download.url, suggestedFilename: download.suggestedFilename() },\n    };\n    this._appendTraceEvent(event);\n  }\n\n  onPageOpen(page: Page) {\n    const event: trace.EventTraceEvent = {\n      type: 'event',\n      time: monotonicTime(),\n      class: 'BrowserContext',\n      method: 'page',\n      params: { pageId: page.guid, openerPageId: page.opener()?.guid },\n    };\n    this._appendTraceEvent(event);\n  }\n\n  onPageClose(page: Page) {\n    const event: trace.EventTraceEvent = {\n      type: 'event',\n      time: monotonicTime(),\n      class: 'BrowserContext',\n      method: 'pageClosed',\n      params: { pageId: page.guid },\n    };\n    this._appendTraceEvent(event);\n  }\n\n  private _onPageError(error: Error, page: Page) {\n    const event: trace.EventTraceEvent = {\n      type: 'event',\n      time: monotonicTime(),\n      class: 'BrowserContext',\n      method: 'pageError',\n      params: { error: serializeError(error) },\n      pageId: page.guid,\n    };\n    this._appendTraceEvent(event);\n  }\n\n  private _startScreencastInPage(page: Page) {\n    page.setScreencastOptions(kScreencastOptions);\n    const prefix = page.guid;\n    this._screencastListeners.push(\n        eventsHelper.addEventListener(page, Page.Events.ScreencastFrame, params => {\n          const suffix = params.timestamp || Date.now();\n          const sha1 = `${prefix}-${suffix}.jpeg`;\n          const event: trace.ScreencastFrameTraceEvent = {\n            type: 'screencast-frame',\n            pageId: page.guid,\n            sha1,\n            width: params.width,\n            height: params.height,\n            timestamp: monotonicTime(),\n            frameSwapWallTime: params.frameSwapWallTime,\n          };\n          // Make sure to write the screencast frame before adding a reference to it.\n          this._appendResource(sha1, params.buffer);\n          this._appendTraceEvent(event);\n        }),\n    );\n  }\n\n  private _appendTraceEvent(event: trace.TraceEvent) {\n    const visited = visitTraceEvent(event, this._state!.traceSha1s);\n    // Do not flush (console) events, they are too noisy, unless we are in ui mode (live).\n    const flush = this._state!.options.live || (event.type !== 'event' && event.type !== 'console' && event.type !== 'log');\n    this._fs.appendFile(this._state!.traceFile, JSON.stringify(visited) + '\\n', flush);\n  }\n\n  private _appendResource(sha1: string, buffer: Buffer) {\n    if (this._allResources.has(sha1))\n      return;\n    this._allResources.add(sha1);\n    const resourcePath = path.join(this._state!.resourcesDir, sha1);\n    this._fs.writeFile(resourcePath, buffer, true /* skipIfExists */);\n  }\n}\n\nfunction visitTraceEvent(object: any, sha1s: Set<string>): any {\n  if (Array.isArray(object))\n    return object.map(o => visitTraceEvent(o, sha1s));\n  if (object instanceof Dispatcher)\n    return `<${(object as Dispatcher<any, any, any>)._type}>`;\n  if (object instanceof Buffer)\n    return `<Buffer>`;\n  if (object instanceof Date)\n    return object;\n  if (typeof object === 'object') {\n    const result: any = {};\n    for (const key in object) {\n      if (key === 'sha1' || key === '_sha1' || key.endsWith('Sha1')) {\n        const sha1 = object[key];\n        if (sha1)\n          sha1s.add(sha1);\n      }\n      result[key] = visitTraceEvent(object[key], sha1s);\n    }\n    return result;\n  }\n  return object;\n}\n\nexport function shouldCaptureSnapshot(metadata: CallMetadata): boolean {\n  const metainfo = methodMetainfo.get(metadata.type + '.' + metadata.method);\n  return !!metainfo?.snapshot;\n}\n\nfunction createBeforeActionTraceEvent(metadata: CallMetadata, parentId?: string): trace.BeforeActionTraceEvent | null {\n  if (metadata.internal || metadata.method.startsWith('tracing'))\n    return null;\n  const event: trace.BeforeActionTraceEvent = {\n    type: 'before',\n    callId: metadata.id,\n    startTime: metadata.startTime,\n    title: metadata.title,\n    class: metadata.type,\n    method: metadata.method,\n    params: metadata.params,\n    stepId: metadata.stepId,\n    pageId: metadata.pageId,\n  };\n  if (parentId)\n    event.parentId = parentId;\n  return event;\n}\n\nfunction createInputActionTraceEvent(metadata: CallMetadata): trace.InputActionTraceEvent | null {\n  if (metadata.internal || metadata.method.startsWith('tracing'))\n    return null;\n  return {\n    type: 'input',\n    callId: metadata.id,\n    point: metadata.point,\n  };\n}\n\nfunction createActionLogTraceEvent(metadata: CallMetadata, message: string): trace.LogTraceEvent | null {\n  if (metadata.internal || metadata.method.startsWith('tracing'))\n    return null;\n  return {\n    type: 'log',\n    callId: metadata.id,\n    time: monotonicTime(),\n    message,\n  };\n}\n\nfunction createAfterActionTraceEvent(metadata: CallMetadata): trace.AfterActionTraceEvent | null {\n  if (metadata.internal || metadata.method.startsWith('tracing'))\n    return null;\n  return {\n    type: 'after',\n    callId: metadata.id,\n    endTime: metadata.endTime,\n    error: metadata.error?.error,\n    result: metadata.result,\n    point: metadata.point,\n  };\n}\n","export const source = \"\\nvar __commonJS = obj => {\\n  let required = false;\\n  let result;\\n  return function __require() {\\n    if (!required) {\\n      required = true;\\n      let fn;\\n      for (const name in obj) { fn = obj[name]; break; }\\n      const module = { exports: {} };\\n      fn(module.exports, module);\\n      result = module.exports;\\n    }\\n    return result;\\n  }\\n};\\nvar __export = (target, all) => {for (var name in all) target[name] = all[name];};\\nvar __toESM = mod => ({ ...mod, 'default': mod });\\nvar __toCommonJS = mod => ({ ...mod, __esModule: true });\\n\\n\\n// packages/injected/src/storageScript.ts\\nvar storageScript_exports = {};\\n__export(storageScript_exports, {\\n  StorageScript: () => StorageScript\\n});\\nmodule.exports = __toCommonJS(storageScript_exports);\\n\\n// packages/playwright-core/src/utils/isomorphic/utilityScriptSerializers.ts\\nfunction isRegExp(obj) {\\n  try {\\n    return obj instanceof RegExp || Object.prototype.toString.call(obj) === \\\"[object RegExp]\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isDate(obj) {\\n  try {\\n    return obj instanceof Date || Object.prototype.toString.call(obj) === \\\"[object Date]\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isURL(obj) {\\n  try {\\n    return obj instanceof URL || Object.prototype.toString.call(obj) === \\\"[object URL]\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isError(obj) {\\n  var _a;\\n  try {\\n    return obj instanceof Error || obj && ((_a = Object.getPrototypeOf(obj)) == null ? void 0 : _a.name) === \\\"Error\\\";\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nfunction isTypedArray(obj, constructor) {\\n  try {\\n    return obj instanceof constructor || Object.prototype.toString.call(obj) === `[object ${constructor.name}]`;\\n  } catch (error) {\\n    return false;\\n  }\\n}\\nvar typedArrayConstructors = {\\n  i8: Int8Array,\\n  ui8: Uint8Array,\\n  ui8c: Uint8ClampedArray,\\n  i16: Int16Array,\\n  ui16: Uint16Array,\\n  i32: Int32Array,\\n  ui32: Uint32Array,\\n  // TODO: add Float16Array once it's in baseline\\n  f32: Float32Array,\\n  f64: Float64Array,\\n  bi64: BigInt64Array,\\n  bui64: BigUint64Array\\n};\\nfunction typedArrayToBase64(array) {\\n  if (\\\"toBase64\\\" in array)\\n    return array.toBase64();\\n  const binary = Array.from(new Uint8Array(array.buffer, array.byteOffset, array.byteLength)).map((b) => String.fromCharCode(b)).join(\\\"\\\");\\n  return btoa(binary);\\n}\\nfunction base64ToTypedArray(base64, TypedArrayConstructor) {\\n  const binary = atob(base64);\\n  const bytes = new Uint8Array(binary.length);\\n  for (let i = 0; i < binary.length; i++)\\n    bytes[i] = binary.charCodeAt(i);\\n  return new TypedArrayConstructor(bytes.buffer);\\n}\\nfunction parseEvaluationResultValue(value, handles = [], refs = /* @__PURE__ */ new Map()) {\\n  if (Object.is(value, void 0))\\n    return void 0;\\n  if (typeof value === \\\"object\\\" && value) {\\n    if (\\\"ref\\\" in value)\\n      return refs.get(value.ref);\\n    if (\\\"v\\\" in value) {\\n      if (value.v === \\\"undefined\\\")\\n        return void 0;\\n      if (value.v === \\\"null\\\")\\n        return null;\\n      if (value.v === \\\"NaN\\\")\\n        return NaN;\\n      if (value.v === \\\"Infinity\\\")\\n        return Infinity;\\n      if (value.v === \\\"-Infinity\\\")\\n        return -Infinity;\\n      if (value.v === \\\"-0\\\")\\n        return -0;\\n      return void 0;\\n    }\\n    if (\\\"d\\\" in value) {\\n      return new Date(value.d);\\n    }\\n    if (\\\"u\\\" in value)\\n      return new URL(value.u);\\n    if (\\\"bi\\\" in value)\\n      return BigInt(value.bi);\\n    if (\\\"e\\\" in value) {\\n      const error = new Error(value.e.m);\\n      error.name = value.e.n;\\n      error.stack = value.e.s;\\n      return error;\\n    }\\n    if (\\\"r\\\" in value)\\n      return new RegExp(value.r.p, value.r.f);\\n    if (\\\"a\\\" in value) {\\n      const result = [];\\n      refs.set(value.id, result);\\n      for (const a of value.a)\\n        result.push(parseEvaluationResultValue(a, handles, refs));\\n      return result;\\n    }\\n    if (\\\"o\\\" in value) {\\n      const result = {};\\n      refs.set(value.id, result);\\n      for (const { k, v } of value.o) {\\n        if (k === \\\"__proto__\\\")\\n          continue;\\n        result[k] = parseEvaluationResultValue(v, handles, refs);\\n      }\\n      return result;\\n    }\\n    if (\\\"h\\\" in value)\\n      return handles[value.h];\\n    if (\\\"ta\\\" in value)\\n      return base64ToTypedArray(value.ta.b, typedArrayConstructors[value.ta.k]);\\n  }\\n  return value;\\n}\\nfunction serializeAsCallArgument(value, handleSerializer) {\\n  return serialize(value, handleSerializer, { visited: /* @__PURE__ */ new Map(), lastId: 0 });\\n}\\nfunction serialize(value, handleSerializer, visitorInfo) {\\n  if (value && typeof value === \\\"object\\\") {\\n    if (typeof globalThis.Window === \\\"function\\\" && value instanceof globalThis.Window)\\n      return \\\"ref: <Window>\\\";\\n    if (typeof globalThis.Document === \\\"function\\\" && value instanceof globalThis.Document)\\n      return \\\"ref: <Document>\\\";\\n    if (typeof globalThis.Node === \\\"function\\\" && value instanceof globalThis.Node)\\n      return \\\"ref: <Node>\\\";\\n  }\\n  return innerSerialize(value, handleSerializer, visitorInfo);\\n}\\nfunction innerSerialize(value, handleSerializer, visitorInfo) {\\n  var _a;\\n  const result = handleSerializer(value);\\n  if (\\\"fallThrough\\\" in result)\\n    value = result.fallThrough;\\n  else\\n    return result;\\n  if (typeof value === \\\"symbol\\\")\\n    return { v: \\\"undefined\\\" };\\n  if (Object.is(value, void 0))\\n    return { v: \\\"undefined\\\" };\\n  if (Object.is(value, null))\\n    return { v: \\\"null\\\" };\\n  if (Object.is(value, NaN))\\n    return { v: \\\"NaN\\\" };\\n  if (Object.is(value, Infinity))\\n    return { v: \\\"Infinity\\\" };\\n  if (Object.is(value, -Infinity))\\n    return { v: \\\"-Infinity\\\" };\\n  if (Object.is(value, -0))\\n    return { v: \\\"-0\\\" };\\n  if (typeof value === \\\"boolean\\\")\\n    return value;\\n  if (typeof value === \\\"number\\\")\\n    return value;\\n  if (typeof value === \\\"string\\\")\\n    return value;\\n  if (typeof value === \\\"bigint\\\")\\n    return { bi: value.toString() };\\n  if (isError(value)) {\\n    let stack;\\n    if ((_a = value.stack) == null ? void 0 : _a.startsWith(value.name + \\\": \\\" + value.message)) {\\n      stack = value.stack;\\n    } else {\\n      stack = `${value.name}: ${value.message}\\n${value.stack}`;\\n    }\\n    return { e: { n: value.name, m: value.message, s: stack } };\\n  }\\n  if (isDate(value))\\n    return { d: value.toJSON() };\\n  if (isURL(value))\\n    return { u: value.toJSON() };\\n  if (isRegExp(value))\\n    return { r: { p: value.source, f: value.flags } };\\n  for (const [k, ctor] of Object.entries(typedArrayConstructors)) {\\n    if (isTypedArray(value, ctor))\\n      return { ta: { b: typedArrayToBase64(value), k } };\\n  }\\n  const id = visitorInfo.visited.get(value);\\n  if (id)\\n    return { ref: id };\\n  if (Array.isArray(value)) {\\n    const a = [];\\n    const id2 = ++visitorInfo.lastId;\\n    visitorInfo.visited.set(value, id2);\\n    for (let i = 0; i < value.length; ++i)\\n      a.push(serialize(value[i], handleSerializer, visitorInfo));\\n    return { a, id: id2 };\\n  }\\n  if (typeof value === \\\"object\\\") {\\n    const o = [];\\n    const id2 = ++visitorInfo.lastId;\\n    visitorInfo.visited.set(value, id2);\\n    for (const name of Object.keys(value)) {\\n      let item;\\n      try {\\n        item = value[name];\\n      } catch (e) {\\n        continue;\\n      }\\n      if (name === \\\"toJSON\\\" && typeof item === \\\"function\\\")\\n        o.push({ k: name, v: { o: [], id: 0 } });\\n      else\\n        o.push({ k: name, v: serialize(item, handleSerializer, visitorInfo) });\\n    }\\n    let jsonWrapper;\\n    try {\\n      if (o.length === 0 && value.toJSON && typeof value.toJSON === \\\"function\\\")\\n        jsonWrapper = { value: value.toJSON() };\\n    } catch (e) {\\n    }\\n    if (jsonWrapper)\\n      return innerSerialize(jsonWrapper.value, handleSerializer, visitorInfo);\\n    return { o, id: id2 };\\n  }\\n}\\n\\n// packages/injected/src/storageScript.ts\\nvar StorageScript = class {\\n  constructor(isFirefox) {\\n    this._isFirefox = isFirefox;\\n    this._global = globalThis;\\n  }\\n  _idbRequestToPromise(request) {\\n    return new Promise((resolve, reject) => {\\n      request.addEventListener(\\\"success\\\", () => resolve(request.result));\\n      request.addEventListener(\\\"error\\\", () => reject(request.error));\\n    });\\n  }\\n  _isPlainObject(v) {\\n    const ctor = v == null ? void 0 : v.constructor;\\n    if (this._isFirefox) {\\n      const constructorImpl = ctor == null ? void 0 : ctor.toString();\\n      if ((constructorImpl == null ? void 0 : constructorImpl.startsWith(\\\"function Object() {\\\")) && (constructorImpl == null ? void 0 : constructorImpl.includes(\\\"[native code]\\\")))\\n        return true;\\n    }\\n    return ctor === Object;\\n  }\\n  _trySerialize(value) {\\n    let trivial = true;\\n    const encoded = serializeAsCallArgument(value, (v) => {\\n      const isTrivial = this._isPlainObject(v) || Array.isArray(v) || typeof v === \\\"string\\\" || typeof v === \\\"number\\\" || typeof v === \\\"boolean\\\" || Object.is(v, null);\\n      if (!isTrivial)\\n        trivial = false;\\n      return { fallThrough: v };\\n    });\\n    if (trivial)\\n      return { trivial: value };\\n    return { encoded };\\n  }\\n  async _collectDB(dbInfo) {\\n    if (!dbInfo.name)\\n      throw new Error(\\\"Database name is empty\\\");\\n    if (!dbInfo.version)\\n      throw new Error(\\\"Database version is unset\\\");\\n    const db = await this._idbRequestToPromise(indexedDB.open(dbInfo.name));\\n    if (db.objectStoreNames.length === 0)\\n      return { name: dbInfo.name, version: dbInfo.version, stores: [] };\\n    const transaction = db.transaction(db.objectStoreNames, \\\"readonly\\\");\\n    const stores = await Promise.all([...db.objectStoreNames].map(async (storeName) => {\\n      const objectStore = transaction.objectStore(storeName);\\n      const keys = await this._idbRequestToPromise(objectStore.getAllKeys());\\n      const records = await Promise.all(keys.map(async (key) => {\\n        const record = {};\\n        if (objectStore.keyPath === null) {\\n          const { encoded: encoded2, trivial: trivial2 } = this._trySerialize(key);\\n          if (trivial2)\\n            record.key = trivial2;\\n          else\\n            record.keyEncoded = encoded2;\\n        }\\n        const value = await this._idbRequestToPromise(objectStore.get(key));\\n        const { encoded, trivial } = this._trySerialize(value);\\n        if (trivial)\\n          record.value = trivial;\\n        else\\n          record.valueEncoded = encoded;\\n        return record;\\n      }));\\n      const indexes = [...objectStore.indexNames].map((indexName) => {\\n        const index = objectStore.index(indexName);\\n        return {\\n          name: index.name,\\n          keyPath: typeof index.keyPath === \\\"string\\\" ? index.keyPath : void 0,\\n          keyPathArray: Array.isArray(index.keyPath) ? index.keyPath : void 0,\\n          multiEntry: index.multiEntry,\\n          unique: index.unique\\n        };\\n      });\\n      return {\\n        name: storeName,\\n        records,\\n        indexes,\\n        autoIncrement: objectStore.autoIncrement,\\n        keyPath: typeof objectStore.keyPath === \\\"string\\\" ? objectStore.keyPath : void 0,\\n        keyPathArray: Array.isArray(objectStore.keyPath) ? objectStore.keyPath : void 0\\n      };\\n    }));\\n    return {\\n      name: dbInfo.name,\\n      version: dbInfo.version,\\n      stores\\n    };\\n  }\\n  async collect(recordIndexedDB) {\\n    const localStorage = Object.keys(this._global.localStorage).map((name) => ({ name, value: this._global.localStorage.getItem(name) }));\\n    if (!recordIndexedDB)\\n      return { localStorage };\\n    try {\\n      const databases = await this._global.indexedDB.databases();\\n      const indexedDB2 = await Promise.all(databases.map((db) => this._collectDB(db)));\\n      return { localStorage, indexedDB: indexedDB2 };\\n    } catch (e) {\\n      throw new Error(\\\"Unable to serialize IndexedDB: \\\" + e.message);\\n    }\\n  }\\n  async _restoreDB(dbInfo) {\\n    const openRequest = this._global.indexedDB.open(dbInfo.name, dbInfo.version);\\n    openRequest.addEventListener(\\\"upgradeneeded\\\", () => {\\n      var _a, _b;\\n      const db2 = openRequest.result;\\n      for (const store of dbInfo.stores) {\\n        const objectStore = db2.createObjectStore(store.name, { autoIncrement: store.autoIncrement, keyPath: (_a = store.keyPathArray) != null ? _a : store.keyPath });\\n        for (const index of store.indexes)\\n          objectStore.createIndex(index.name, (_b = index.keyPathArray) != null ? _b : index.keyPath, { unique: index.unique, multiEntry: index.multiEntry });\\n      }\\n    });\\n    const db = await this._idbRequestToPromise(openRequest);\\n    if (db.objectStoreNames.length === 0)\\n      return;\\n    const transaction = db.transaction(db.objectStoreNames, \\\"readwrite\\\");\\n    await Promise.all(dbInfo.stores.map(async (store) => {\\n      const objectStore = transaction.objectStore(store.name);\\n      await Promise.all(store.records.map(async (record) => {\\n        var _a, _b;\\n        await this._idbRequestToPromise(\\n          objectStore.add(\\n            (_a = record.value) != null ? _a : parseEvaluationResultValue(record.valueEncoded),\\n            (_b = record.key) != null ? _b : parseEvaluationResultValue(record.keyEncoded)\\n          )\\n        );\\n      }));\\n    }));\\n  }\\n  async restore(originState) {\\n    var _a;\\n    try {\\n      await Promise.all(((_a = originState.indexedDB) != null ? _a : []).map((dbInfo) => this._restoreDB(dbInfo)));\\n    } catch (e) {\\n      throw new Error(\\\"Unable to restore IndexedDB: \\\" + e.message);\\n    }\\n    for (const { name, value } of originState.localStorage || [])\\n      this._global.localStorage.setItem(name, value);\\n  }\\n};\\n\";","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport { createGuid } from './utils/crypto';\nimport { debugMode } from './utils/debug';\nimport { Clock } from './clock';\nimport { Debugger } from './debugger';\nimport { DialogManager } from './dialog';\nimport { BrowserContextAPIRequestContext } from './fetch';\nimport { mkdirIfNeeded } from './utils/fileUtils';\nimport { HarRecorder } from './har/harRecorder';\nimport { helper } from './helper';\nimport { SdkObject, serverSideCallMetadata } from './instrumentation';\nimport * as network from './network';\nimport { InitScript } from './page';\nimport { Page, PageBinding } from './page';\nimport { Recorder } from './recorder';\nimport { RecorderApp } from './recorder/recorderApp';\nimport { Selectors } from './selectors';\nimport { Tracing } from './trace/recorder/tracing';\nimport * as rawStorageSource from '../generated/storageScriptSource';\n\nimport type { Artifact } from './artifact';\nimport type { Browser, BrowserOptions } from './browser';\nimport type { Download } from './download';\nimport type * as frames from './frames';\nimport type { CallMetadata } from './instrumentation';\nimport type { Progress, ProgressController } from './progress';\nimport type { ClientCertificatesProxy } from './socksClientCertificatesInterceptor';\nimport type { SerializedStorage } from '@injected/storageScript';\nimport type * as types from './types';\nimport type * as channels from '@protocol/channels';\n\nexport abstract class BrowserContext extends SdkObject {\n  static Events = {\n    Console: 'console',\n    Close: 'close',\n    Page: 'page',\n    // Can't use just 'error' due to node.js special treatment of error events.\n    // @see https://nodejs.org/api/events.html#events_error_events\n    PageError: 'pageerror',\n    Request: 'request',\n    Response: 'response',\n    RequestFailed: 'requestfailed',\n    RequestFinished: 'requestfinished',\n    RequestAborted: 'requestaborted',\n    RequestFulfilled: 'requestfulfilled',\n    RequestContinued: 'requestcontinued',\n    BeforeClose: 'beforeclose',\n    VideoStarted: 'videostarted',\n  };\n\n  readonly _pageBindings = new Map<string, PageBinding>();\n  readonly _activeProgressControllers = new Set<ProgressController>();\n  readonly _options: types.BrowserContextOptions;\n  readonly requestInterceptors: network.RouteHandler[] = [];\n  private _isPersistentContext: boolean;\n  private _closedStatus: 'open' | 'closing' | 'closed' = 'open';\n  readonly _closePromise: Promise<Error>;\n  private _closePromiseFulfill: ((error: Error) => void) | undefined;\n  readonly _permissions = new Map<string, string[]>();\n  readonly _downloads = new Set<Download>();\n  readonly _browser: Browser;\n  readonly _browserContextId: string | undefined;\n  private _selectors: Selectors;\n  private _origins = new Set<string>();\n  readonly _harRecorders = new Map<string, HarRecorder>();\n  readonly tracing: Tracing;\n  readonly fetchRequest: BrowserContextAPIRequestContext;\n  private _customCloseHandler?: () => Promise<any>;\n  readonly _tempDirs: string[] = [];\n  private _settingStorageState = false;\n  bindingsInitScript?: InitScript;\n  initScripts: InitScript[] = [];\n  private _routesInFlight = new Set<network.Route>();\n  private _debugger!: Debugger;\n  _closeReason: string | undefined;\n  readonly clock: Clock;\n  _clientCertificatesProxy: ClientCertificatesProxy | undefined;\n  private _playwrightBindingExposed = false;\n  readonly dialogManager: DialogManager;\n\n  constructor(browser: Browser, options: types.BrowserContextOptions, browserContextId: string | undefined) {\n    super(browser, 'browser-context');\n    this.attribution.context = this;\n    this._browser = browser;\n    this._options = options;\n    this._browserContextId = browserContextId;\n    this._isPersistentContext = !browserContextId;\n    this._closePromise = new Promise(fulfill => this._closePromiseFulfill = fulfill);\n    this._selectors = new Selectors(options.selectorEngines || [], options.testIdAttributeName);\n\n    this.fetchRequest = new BrowserContextAPIRequestContext(this);\n    this.tracing = new Tracing(this, browser.options.tracesDir);\n    this.clock = new Clock(this);\n    this.dialogManager = new DialogManager(this.instrumentation);\n  }\n\n  isPersistentContext(): boolean {\n    return this._isPersistentContext;\n  }\n\n  selectors(): Selectors {\n    return this._selectors;\n  }\n\n  async _initialize() {\n    if (this.attribution.playwright.options.isInternalPlaywright)\n      return;\n    // Debugger will pause execution upon page.pause in headed mode.\n    this._debugger = new Debugger(this);\n\n    // When PWDEBUG=1, show inspector for each context.\n    if (debugMode() === 'inspector')\n      await Recorder.show(this, RecorderApp.factory(this), { pauseOnNextStatement: true });\n\n    // When paused, show inspector.\n    if (this._debugger.isPaused())\n      Recorder.showInspectorNoReply(this, RecorderApp.factory(this));\n\n    this._debugger.on(Debugger.Events.PausedStateChanged, () => {\n      if (this._debugger.isPaused())\n        Recorder.showInspectorNoReply(this, RecorderApp.factory(this));\n    });\n\n    if (debugMode() === 'console')\n      await this.extendInjectedScript('function Console(injectedScript) { injectedScript.consoleApi.install(); }');\n    if (this._options.serviceWorkers === 'block')\n      await this.addInitScript(`\\nif (navigator.serviceWorker) navigator.serviceWorker.register = async () => { console.warn('Service Worker registration blocked by Playwright'); };\\n`);\n\n    if (this._options.permissions)\n      await this.grantPermissions(this._options.permissions);\n  }\n\n  debugger(): Debugger {\n    return this._debugger;\n  }\n\n  async _ensureVideosPath() {\n    if (this._options.recordVideo)\n      await mkdirIfNeeded(path.join(this._options.recordVideo.dir, 'dummy'));\n  }\n\n  canResetForReuse(): boolean {\n    if (this._closedStatus !== 'open')\n      return false;\n    return true;\n  }\n\n  async stopPendingOperations(reason: string) {\n    // When using context reuse, stop pending operations to gracefully terminate all the actions\n    // with a user-friendly error message containing operation log.\n    for (const controller of this._activeProgressControllers)\n      controller.abort(new Error(reason));\n    // Let rejections in microtask generate events before returning.\n    await new Promise(f => setTimeout(f, 0));\n  }\n\n  static reusableContextHash(params: channels.BrowserNewContextForReuseParams): string {\n    const paramsCopy = { ...params };\n\n    if (paramsCopy.selectorEngines?.length === 0)\n      delete paramsCopy.selectorEngines;\n\n    for (const k of Object.keys(paramsCopy)) {\n      const key = k as keyof channels.BrowserNewContextForReuseParams;\n      if (paramsCopy[key] === defaultNewContextParamValues[key])\n        delete paramsCopy[key];\n    }\n\n    for (const key of paramsThatAllowContextReuse)\n      delete paramsCopy[key];\n    return JSON.stringify(paramsCopy);\n  }\n\n  async resetForReuse(metadata: CallMetadata, params: channels.BrowserNewContextForReuseParams | null) {\n    await this.tracing.resetForReuse();\n\n    if (params) {\n      for (const key of paramsThatAllowContextReuse)\n        (this._options as any)[key] = params[key];\n      if (params.testIdAttributeName)\n        this.selectors().setTestIdAttributeName(params.testIdAttributeName);\n    }\n\n    // Close extra pages early.\n    let page: Page | undefined = this.pages()[0];\n    const [, ...otherPages] = this.pages();\n    for (const p of otherPages)\n      await p.close(metadata);\n    if (page && page.hasCrashed()) {\n      await page.close(metadata);\n      page = undefined;\n    }\n\n    // Navigate to about:blank first to ensure no page scripts are running after this point.\n    await page?.mainFrame().goto(metadata, 'about:blank', { timeout: 0 });\n\n    await this._resetStorage();\n    await this.clock.resetForReuse();\n    // TODO: following can be optimized to not perform noops.\n    if (this._options.permissions)\n      await this.grantPermissions(this._options.permissions);\n    else\n      await this.clearPermissions();\n    await this.setExtraHTTPHeaders(this._options.extraHTTPHeaders || []);\n    await this.setGeolocation(this._options.geolocation);\n    await this.setOffline(!!this._options.offline);\n    await this.setUserAgent(this._options.userAgent);\n    await this.clearCache();\n    await this._resetCookies();\n\n    await page?.resetForReuse(metadata);\n  }\n\n  _browserClosed() {\n    for (const page of this.pages())\n      page._didClose();\n    this._didCloseInternal();\n  }\n\n  private _didCloseInternal() {\n    if (this._closedStatus === 'closed') {\n      // We can come here twice if we close browser context and browser\n      // at the same time.\n      return;\n    }\n    this._clientCertificatesProxy?.close().catch(() => {});\n    this.tracing.abort();\n    if (this._isPersistentContext)\n      this.onClosePersistent();\n    this._closePromiseFulfill!(new Error('Context closed'));\n    this.emit(BrowserContext.Events.Close);\n  }\n\n  pages(): Page[] {\n    return this.possiblyUninitializedPages().filter(page => page.initializedOrUndefined());\n  }\n\n  // BrowserContext methods.\n  abstract possiblyUninitializedPages(): Page[];\n  abstract doCreateNewPage(markAsServerSideOnly?: boolean): Promise<Page>;\n  abstract addCookies(cookies: channels.SetNetworkCookie[]): Promise<void>;\n  abstract setGeolocation(geolocation?: types.Geolocation): Promise<void>;\n  abstract setExtraHTTPHeaders(headers: types.HeadersArray): Promise<void>;\n  abstract setUserAgent(userAgent: string | undefined): Promise<void>;\n  abstract setOffline(offline: boolean): Promise<void>;\n  abstract cancelDownload(uuid: string): Promise<void>;\n  abstract clearCache(): Promise<void>;\n  protected abstract doGetCookies(urls: string[]): Promise<channels.NetworkCookie[]>;\n  protected abstract doClearCookies(): Promise<void>;\n  protected abstract doGrantPermissions(origin: string, permissions: string[]): Promise<void>;\n  protected abstract doClearPermissions(): Promise<void>;\n  protected abstract doSetHTTPCredentials(httpCredentials?: types.Credentials): Promise<void>;\n  protected abstract doAddInitScript(initScript: InitScript): Promise<void>;\n  protected abstract doRemoveInitScripts(initScripts: InitScript[]): Promise<void>;\n  protected abstract doUpdateRequestInterception(): Promise<void>;\n  protected abstract doExposePlaywrightBinding(): Promise<void>;\n  protected abstract doClose(reason: string | undefined): Promise<void>;\n  protected abstract onClosePersistent(): void;\n\n  async cookies(urls: string | string[] | undefined = []): Promise<channels.NetworkCookie[]> {\n    if (urls && !Array.isArray(urls))\n      urls = [urls];\n    return await this.doGetCookies(urls as string[]);\n  }\n\n  async clearCookies(options: {name?: string | RegExp, domain?: string | RegExp, path?: string | RegExp}): Promise<void> {\n    const currentCookies = await this.cookies();\n    await this.doClearCookies();\n\n    const matches = (cookie: channels.NetworkCookie, prop: 'name' | 'domain' | 'path', value: string | RegExp | undefined) => {\n      if (!value)\n        return true;\n      if (value instanceof RegExp) {\n        value.lastIndex = 0;\n        return value.test(cookie[prop]);\n      }\n      return cookie[prop] === value;\n    };\n\n    const cookiesToReadd = currentCookies.filter(cookie => {\n      return !matches(cookie, 'name', options.name)\n        || !matches(cookie, 'domain', options.domain)\n        || !matches(cookie, 'path', options.path);\n    });\n\n    await this.addCookies(cookiesToReadd);\n  }\n\n  setHTTPCredentials(httpCredentials?: types.Credentials): Promise<void> {\n    return this.doSetHTTPCredentials(httpCredentials);\n  }\n\n  hasBinding(name: string) {\n    return this._pageBindings.has(name);\n  }\n\n  async exposePlaywrightBindingIfNeeded() {\n    if (this._playwrightBindingExposed)\n      return;\n    this._playwrightBindingExposed = true;\n    await this.doExposePlaywrightBinding();\n\n    this.bindingsInitScript = PageBinding.createInitScript();\n    this.initScripts.push(this.bindingsInitScript);\n    await this.doAddInitScript(this.bindingsInitScript);\n    await this.safeNonStallingEvaluateInAllFrames(this.bindingsInitScript.source, 'main');\n  }\n\n  needsPlaywrightBinding() {\n    return this._playwrightBindingExposed;\n  }\n\n  async exposeBinding(name: string, needsHandle: boolean, playwrightBinding: frames.FunctionWithSource): Promise<PageBinding> {\n    if (this._pageBindings.has(name))\n      throw new Error(`Function \"${name}\" has been already registered`);\n    for (const page of this.pages()) {\n      if (page.getBinding(name))\n        throw new Error(`Function \"${name}\" has been already registered in one of the pages`);\n    }\n    await this.exposePlaywrightBindingIfNeeded();\n    const binding = new PageBinding(name, playwrightBinding, needsHandle);\n    this._pageBindings.set(name, binding);\n    await this.doAddInitScript(binding.initScript);\n    await this.safeNonStallingEvaluateInAllFrames(binding.initScript.source, 'main');\n    return binding;\n  }\n\n  async removeExposedBindings(bindings: PageBinding[]) {\n    bindings = bindings.filter(binding => this._pageBindings.get(binding.name) === binding);\n    for (const binding of bindings)\n      this._pageBindings.delete(binding.name);\n    await this.doRemoveInitScripts(bindings.map(binding => binding.initScript));\n    const cleanup = bindings.map(binding => `{ ${binding.cleanupScript} };\\n`).join('');\n    await this.safeNonStallingEvaluateInAllFrames(cleanup, 'main');\n  }\n\n  async grantPermissions(permissions: string[], origin?: string) {\n    let resolvedOrigin = '*';\n    if (origin) {\n      const url = new URL(origin);\n      resolvedOrigin = url.origin;\n    }\n    const existing = new Set(this._permissions.get(resolvedOrigin) || []);\n    permissions.forEach(p => existing.add(p));\n    const list = [...existing.values()];\n    this._permissions.set(resolvedOrigin, list);\n    await this.doGrantPermissions(resolvedOrigin, list);\n  }\n\n  async clearPermissions() {\n    this._permissions.clear();\n    await this.doClearPermissions();\n  }\n\n  async _loadDefaultContextAsIs(progress: Progress): Promise<Page | undefined> {\n    if (!this.possiblyUninitializedPages().length) {\n      const waitForEvent = helper.waitForEvent(progress, this, BrowserContext.Events.Page);\n      progress.cleanupWhenAborted(() => waitForEvent.dispose);\n      // Race against BrowserContext.close\n      await Promise.race([waitForEvent.promise, this._closePromise]);\n    }\n    const page = this.possiblyUninitializedPages()[0];\n    if (!page)\n      return;\n    const pageOrError = await page.waitForInitializedOrError();\n    if (pageOrError instanceof Error)\n      throw pageOrError;\n    await page.mainFrame()._waitForLoadState(progress, 'load');\n    return page;\n  }\n\n  async _loadDefaultContext(progress: Progress) {\n    const defaultPage = await this._loadDefaultContextAsIs(progress);\n    if (!defaultPage)\n      return;\n    const browserName = this._browser.options.name;\n    if ((this._options.isMobile && browserName === 'chromium') || (this._options.locale && browserName === 'webkit')) {\n      // Workaround for:\n      // - chromium fails to change isMobile for existing page;\n      // - webkit fails to change locale for existing page.\n      await this.newPage(progress.metadata);\n      await defaultPage.close(progress.metadata);\n    }\n  }\n\n  protected _authenticateProxyViaHeader() {\n    const proxy = this._options.proxy || this._browser.options.proxy || { username: undefined, password: undefined };\n    const { username, password } = proxy;\n    if (username) {\n      this._options.httpCredentials = { username, password: password! };\n      const token = Buffer.from(`${username}:${password}`).toString('base64');\n      this._options.extraHTTPHeaders = network.mergeHeaders([\n        this._options.extraHTTPHeaders,\n        network.singleHeader('Proxy-Authorization', `Basic ${token}`),\n      ]);\n    }\n  }\n\n  protected _authenticateProxyViaCredentials() {\n    const proxy = this._options.proxy || this._browser.options.proxy;\n    if (!proxy)\n      return;\n    const { username, password } = proxy;\n    if (username)\n      this._options.httpCredentials = { username, password: password || '' };\n  }\n\n  async addInitScript(source: string, name?: string) {\n    const initScript = new InitScript(source, name);\n    this.initScripts.push(initScript);\n    await this.doAddInitScript(initScript);\n    return initScript;\n  }\n\n  async removeInitScripts(initScripts: InitScript[]) {\n    const set = new Set(initScripts);\n    this.initScripts = this.initScripts.filter(script => !set.has(script));\n    await this.doRemoveInitScripts(initScripts);\n  }\n\n  async addRequestInterceptor(handler: network.RouteHandler): Promise<void> {\n    this.requestInterceptors.push(handler);\n    await this.doUpdateRequestInterception();\n  }\n\n  async removeRequestInterceptor(handler: network.RouteHandler): Promise<void> {\n    const index = this.requestInterceptors.indexOf(handler);\n    if (index === -1)\n      return;\n    this.requestInterceptors.splice(index, 1);\n    await this.notifyRoutesInFlightAboutRemovedHandler(handler);\n    await this.doUpdateRequestInterception();\n  }\n\n  isClosingOrClosed() {\n    return this._closedStatus !== 'open';\n  }\n\n  private async _deleteAllDownloads(): Promise<void> {\n    await Promise.all(Array.from(this._downloads).map(download => download.artifact.deleteOnContextClose()));\n  }\n\n  private async _deleteAllTempDirs(): Promise<void> {\n    await Promise.all(this._tempDirs.map(async dir => await fs.promises.unlink(dir).catch(e => {})));\n  }\n\n  setCustomCloseHandler(handler: (() => Promise<any>) | undefined) {\n    this._customCloseHandler = handler;\n  }\n\n  async close(options: { reason?: string }) {\n    if (this._closedStatus === 'open') {\n      if (options.reason)\n        this._closeReason = options.reason;\n      this.emit(BrowserContext.Events.BeforeClose);\n      this._closedStatus = 'closing';\n\n      for (const harRecorder of this._harRecorders.values())\n        await harRecorder.flush();\n      await this.tracing.flush();\n\n      // Cleanup.\n      const promises: Promise<void>[] = [];\n      for (const { context, artifact } of this._browser._idToVideo.values()) {\n        // Wait for the videos to finish.\n        if (context === this)\n          promises.push(artifact.finishedPromise());\n      }\n\n      if (this._customCloseHandler) {\n        await this._customCloseHandler();\n      } else {\n        // Close the context.\n        await this.doClose(options.reason);\n      }\n\n      // We delete downloads after context closure\n      // so that browser does not write to the download file anymore.\n      promises.push(this._deleteAllDownloads());\n      promises.push(this._deleteAllTempDirs());\n      await Promise.all(promises);\n\n      // Custom handler should trigger didCloseInternal itself.\n      if (!this._customCloseHandler)\n        this._didCloseInternal();\n    }\n    await this._closePromise;\n  }\n\n  async newPage(metadata: CallMetadata): Promise<Page> {\n    const page = await this.doCreateNewPage(metadata.isServerSide);\n    const pageOrError = await page.waitForInitializedOrError();\n    if (pageOrError instanceof Page) {\n      if (pageOrError.isClosed())\n        throw new Error('Page has been closed.');\n      return pageOrError;\n    }\n    throw pageOrError;\n  }\n\n  addVisitedOrigin(origin: string) {\n    this._origins.add(origin);\n  }\n\n  async storageState(indexedDB = false): Promise<channels.BrowserContextStorageStateResult> {\n    const result: channels.BrowserContextStorageStateResult = {\n      cookies: await this.cookies(),\n      origins: []\n    };\n    const originsToSave = new Set(this._origins);\n\n    const collectScript = `(() => {\n      const module = {};\n      ${rawStorageSource.source}\n      const script = new (module.exports.StorageScript())(${this._browser.options.name === 'firefox'});\n      return script.collect(${indexedDB});\n    })()`;\n\n    // First try collecting storage stage from existing pages.\n    for (const page of this.pages()) {\n      const origin = page.mainFrame().origin();\n      if (!origin || !originsToSave.has(origin))\n        continue;\n      try {\n        const storage: SerializedStorage = await page.mainFrame().nonStallingEvaluateInExistingContext(collectScript, 'utility');\n        if (storage.localStorage.length || storage.indexedDB?.length)\n          result.origins.push({ origin, localStorage: storage.localStorage, indexedDB: storage.indexedDB });\n        originsToSave.delete(origin);\n      } catch {\n        // When failed on the live page, we'll retry on the blank page below.\n      }\n    }\n\n    // If there are still origins to save, create a blank page to iterate over origins.\n    if (originsToSave.size)  {\n      const internalMetadata = serverSideCallMetadata();\n      const page = await this.newPage(internalMetadata);\n      page.addRequestInterceptor(route => {\n        route.fulfill({ body: '<html></html>' }).catch(() => {});\n      }, 'prepend');\n      for (const origin of originsToSave) {\n        const frame = page.mainFrame();\n        await frame.goto(internalMetadata, origin, { timeout: 0 });\n        const storage: SerializedStorage = await frame.evaluateExpression(collectScript, { world: 'utility' });\n        if (storage.localStorage.length || storage.indexedDB?.length)\n          result.origins.push({ origin, localStorage: storage.localStorage, indexedDB: storage.indexedDB });\n      }\n      await page.close(internalMetadata);\n    }\n    return result;\n  }\n\n  async _resetStorage() {\n    const oldOrigins = this._origins;\n    const newOrigins = new Map(this._options.storageState?.origins?.map(p => [p.origin, p]) || []);\n    if (!oldOrigins.size && !newOrigins.size)\n      return;\n    let page = this.pages()[0];\n\n    const internalMetadata = serverSideCallMetadata();\n    page = page || await this.newPage({\n      ...internalMetadata,\n      // Do not mark this page as internal, because we will leave it for later reuse\n      // as a user-visible page.\n      isServerSide: false,\n    });\n    const interceptor = (route: network.Route) => {\n      route.fulfill({ body: '<html></html>' }).catch(() => {});\n    };\n    await page.addRequestInterceptor(interceptor, 'prepend');\n\n    for (const origin of new Set([...oldOrigins, ...newOrigins.keys()])) {\n      const frame = page.mainFrame();\n      await frame.goto(internalMetadata, origin, { timeout: 0 });\n      await frame.resetStorageForCurrentOriginBestEffort(newOrigins.get(origin));\n    }\n\n    await page.removeRequestInterceptor(interceptor);\n\n    this._origins = new Set([...newOrigins.keys()]);\n    // It is safe to not restore the URL to about:blank since we are doing it in Page::resetForReuse.\n  }\n\n  async _resetCookies() {\n    await this.doClearCookies();\n    if (this._options.storageState?.cookies)\n      await this.addCookies(this._options.storageState?.cookies);\n  }\n\n  isSettingStorageState(): boolean {\n    return this._settingStorageState;\n  }\n\n  async setStorageState(metadata: CallMetadata, state: NonNullable<channels.BrowserNewContextParams['storageState']>) {\n    this._settingStorageState = true;\n    try {\n      if (state.cookies)\n        await this.addCookies(state.cookies);\n      if (state.origins && state.origins.length)  {\n        const internalMetadata = serverSideCallMetadata();\n        const page = await this.newPage(internalMetadata);\n        await page.addRequestInterceptor(route => {\n          route.fulfill({ body: '<html></html>' }).catch(() => {});\n        }, 'prepend');\n        for (const originState of state.origins) {\n          const frame = page.mainFrame();\n          await frame.goto(metadata, originState.origin, { timeout: 0 });\n          const restoreScript = `(() => {\n            const module = {};\n            ${rawStorageSource.source}\n            const script = new (module.exports.StorageScript())(${this._browser.options.name === 'firefox'});\n            return script.restore(${JSON.stringify(originState)});\n          })()`;\n          await frame.evaluateExpression(restoreScript, { world: 'utility' });\n        }\n        await page.close(internalMetadata);\n      }\n    } finally {\n      this._settingStorageState = false;\n    }\n  }\n\n  async extendInjectedScript(source: string, arg?: any) {\n    const installInFrame = (frame: frames.Frame) => frame.extendInjectedScript(source, arg).catch(() => {});\n    const installInPage = (page: Page) => {\n      page.on(Page.Events.InternalFrameNavigatedToNewDocument, installInFrame);\n      return Promise.all(page.frames().map(installInFrame));\n    };\n    this.on(BrowserContext.Events.Page, installInPage);\n    return Promise.all(this.pages().map(installInPage));\n  }\n\n  async safeNonStallingEvaluateInAllFrames(expression: string, world: types.World, options: { throwOnJSErrors?: boolean } = {}) {\n    await Promise.all(this.pages().map(page => page.safeNonStallingEvaluateInAllFrames(expression, world, options)));\n  }\n\n  async _harStart(page: Page | null, options: channels.RecordHarOptions): Promise<string> {\n    const harId = createGuid();\n    this._harRecorders.set(harId, new HarRecorder(this, page, options));\n    return harId;\n  }\n\n  async _harExport(harId: string | undefined): Promise<Artifact> {\n    const recorder = this._harRecorders.get(harId || '')!;\n    return recorder.export();\n  }\n\n  addRouteInFlight(route: network.Route) {\n    this._routesInFlight.add(route);\n  }\n\n  removeRouteInFlight(route: network.Route) {\n    this._routesInFlight.delete(route);\n  }\n\n  async notifyRoutesInFlightAboutRemovedHandler(handler: network.RouteHandler): Promise<void> {\n    await Promise.all([...this._routesInFlight].map(route => route.removeHandler(handler)));\n  }\n}\n\nexport function validateBrowserContextOptions(options: types.BrowserContextOptions, browserOptions: BrowserOptions) {\n  if (options.noDefaultViewport && options.deviceScaleFactor !== undefined)\n    throw new Error(`\"deviceScaleFactor\" option is not supported with null \"viewport\"`);\n  if (options.noDefaultViewport && !!options.isMobile)\n    throw new Error(`\"isMobile\" option is not supported with null \"viewport\"`);\n  if (options.acceptDownloads === undefined && browserOptions.name !== 'electron')\n    options.acceptDownloads = 'accept';\n  // Electron requires explicit acceptDownloads: true since we wait for\n  // https://github.com/electron/electron/pull/41718 to be widely shipped.\n  // In 6-12 months, we can remove this check.\n  else if (options.acceptDownloads === undefined && browserOptions.name === 'electron')\n    options.acceptDownloads = 'internal-browser-default';\n  if (!options.viewport && !options.noDefaultViewport)\n    options.viewport = { width: 1280, height: 720 };\n  if (options.recordVideo) {\n    if (!options.recordVideo.size) {\n      if (options.noDefaultViewport) {\n        options.recordVideo.size = { width: 800, height: 600 };\n      } else {\n        const size = options.viewport!;\n        const scale = Math.min(1, 800 / Math.max(size.width, size.height));\n        options.recordVideo.size = {\n          width: Math.floor(size.width * scale),\n          height: Math.floor(size.height * scale)\n        };\n      }\n    }\n    // Make sure both dimensions are odd, this is required for vp8\n    options.recordVideo.size!.width &= ~1;\n    options.recordVideo.size!.height &= ~1;\n  }\n  if (options.proxy)\n    options.proxy = normalizeProxySettings(options.proxy);\n  verifyGeolocation(options.geolocation);\n}\n\nexport function verifyGeolocation(geolocation?: types.Geolocation): asserts geolocation is types.Geolocation {\n  if (!geolocation)\n    return;\n  geolocation.accuracy = geolocation.accuracy || 0;\n  const { longitude, latitude, accuracy } = geolocation;\n  if (longitude < -180 || longitude > 180)\n    throw new Error(`geolocation.longitude: precondition -180 <= LONGITUDE <= 180 failed.`);\n  if (latitude < -90 || latitude > 90)\n    throw new Error(`geolocation.latitude: precondition -90 <= LATITUDE <= 90 failed.`);\n  if (accuracy < 0)\n    throw new Error(`geolocation.accuracy: precondition 0 <= ACCURACY failed.`);\n}\n\nexport function verifyClientCertificates(clientCertificates?: types.BrowserContextOptions['clientCertificates']) {\n  if (!clientCertificates)\n    return;\n  for (const cert of clientCertificates) {\n    if (!cert.origin)\n      throw new Error(`clientCertificates.origin is required`);\n    if (!cert.cert && !cert.key && !cert.passphrase && !cert.pfx)\n      throw new Error('None of cert, key, passphrase or pfx is specified');\n    if (cert.cert && !cert.key)\n      throw new Error('cert is specified without key');\n    if (!cert.cert && cert.key)\n      throw new Error('key is specified without cert');\n    if (cert.pfx && (cert.cert || cert.key))\n      throw new Error('pfx is specified together with cert, key or passphrase');\n  }\n}\n\nexport function normalizeProxySettings(proxy: types.ProxySettings): types.ProxySettings {\n  let { server, bypass } = proxy;\n  let url;\n  try {\n    // new URL('127.0.0.1:8080') throws\n    // new URL('localhost:8080') fails to parse host or protocol\n    // In both of these cases, we need to try re-parse URL with `http://` prefix.\n    url = new URL(server);\n    if (!url.host || !url.protocol)\n      url = new URL('http://' + server);\n  } catch (e) {\n    url = new URL('http://' + server);\n  }\n  if (url.protocol === 'socks4:' && (proxy.username || proxy.password))\n    throw new Error(`Socks4 proxy protocol does not support authentication`);\n  if (url.protocol === 'socks5:' && (proxy.username || proxy.password))\n    throw new Error(`Browser does not support socks5 proxy authentication`);\n  server = url.protocol + '//' + url.host;\n  if (bypass)\n    bypass = bypass.split(',').map(t => t.trim()).join(',');\n  return { ...proxy, server, bypass };\n}\n\nconst paramsThatAllowContextReuse: (keyof channels.BrowserNewContextForReuseParams)[] = [\n  'colorScheme',\n  'forcedColors',\n  'reducedMotion',\n  'contrast',\n  'screen',\n  'userAgent',\n  'viewport',\n  'testIdAttributeName',\n];\n\nconst defaultNewContextParamValues: channels.BrowserNewContextForReuseParams = {\n  noDefaultViewport: false,\n  ignoreHTTPSErrors: false,\n  javaScriptEnabled: true,\n  bypassCSP: false,\n  offline: false,\n  isMobile: false,\n  hasTouch: false,\n  acceptDownloads: 'accept',\n  strictSelectors: false,\n  serviceWorkers: 'allow',\n  locale: 'en-US',\n};\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { kMaxCookieExpiresDateInSeconds } from './network';\n\nimport type * as channels from '@protocol/channels';\n\nexport class Cookie {\n  private _raw: channels.NetworkCookie;\n  constructor(data: channels.NetworkCookie) {\n    this._raw = data;\n  }\n\n  name(): string {\n    return this._raw.name;\n  }\n\n  // https://datatracker.ietf.org/doc/html/rfc6265#section-5.4\n  matches(url: URL): boolean {\n    if (this._raw.secure && (url.protocol !== 'https:' && url.hostname !== 'localhost'))\n      return false;\n    if (!domainMatches(url.hostname, this._raw.domain))\n      return false;\n    if (!pathMatches(url.pathname, this._raw.path))\n      return false;\n    return true;\n  }\n\n  equals(other: Cookie) {\n    return this._raw.name === other._raw.name &&\n      this._raw.domain === other._raw.domain &&\n      this._raw.path === other._raw.path;\n  }\n\n  networkCookie(): channels.NetworkCookie {\n    return this._raw;\n  }\n\n  updateExpiresFrom(other: Cookie) {\n    this._raw.expires = other._raw.expires;\n  }\n\n  expired() {\n    if (this._raw.expires === -1)\n      return false;\n    return this._raw.expires * 1000 < Date.now();\n  }\n}\n\nexport class CookieStore {\n  private readonly _nameToCookies: Map<string, Set<Cookie>> = new Map();\n\n  addCookies(cookies: channels.NetworkCookie[]) {\n    for (const cookie of cookies)\n      this._addCookie(new Cookie(cookie));\n  }\n\n  cookies(url: URL): channels.NetworkCookie[] {\n    const result = [];\n    for (const cookie of this._cookiesIterator()) {\n      if (cookie.matches(url))\n        result.push(cookie.networkCookie());\n    }\n    return result;\n  }\n\n  allCookies(): channels.NetworkCookie[] {\n    const result = [];\n    for (const cookie of this._cookiesIterator())\n      result.push(cookie.networkCookie());\n    return result;\n  }\n\n  private _addCookie(cookie: Cookie) {\n    let set = this._nameToCookies.get(cookie.name());\n    if (!set) {\n      set = new Set();\n      this._nameToCookies.set(cookie.name(), set);\n    }\n    // https://datatracker.ietf.org/doc/html/rfc6265#section-5.3\n    for (const other of set) {\n      if (other.equals(cookie))\n        set.delete(other);\n    }\n    set.add(cookie);\n    CookieStore.pruneExpired(set);\n  }\n\n  private *_cookiesIterator(): IterableIterator<Cookie> {\n    for (const [name, cookies] of this._nameToCookies) {\n      CookieStore.pruneExpired(cookies);\n      for (const cookie of cookies)\n        yield cookie;\n      if (cookies.size === 0)\n        this._nameToCookies.delete(name);\n    }\n  }\n\n  private static pruneExpired(cookies: Set<Cookie>) {\n    for (const cookie of cookies) {\n      if (cookie.expired())\n        cookies.delete(cookie);\n    }\n  }\n}\n\ntype RawCookie = {\n  name: string,\n  value: string,\n  domain?: string,\n  path?: string,\n  expires?: number,\n  httpOnly?: boolean,\n  secure?: boolean,\n  sameSite?: 'Strict' | 'Lax' | 'None',\n};\n\nexport function parseRawCookie(header: string): RawCookie | null {\n  const pairs = header.split(';').filter(s => s.trim().length > 0).map(p => {\n    let key = '';\n    let value = '';\n    const separatorPos = p.indexOf('=');\n    if (separatorPos === -1) {\n      // If only a key is specified, the value is left undefined.\n      key = p.trim();\n    } else {\n      // Otherwise we assume that the key is the element before the first `=`\n      key = p.slice(0, separatorPos).trim();\n      // And the value is the rest of the string.\n      value = p.slice(separatorPos + 1).trim();\n    }\n    return [key, value];\n  });\n  if (!pairs.length)\n    return null;\n  const [name, value] = pairs[0];\n  const cookie: RawCookie = {\n    name,\n    value,\n  };\n  for (let i = 1; i < pairs.length; i++) {\n    const [name, value] = pairs[i];\n    switch (name.toLowerCase()) {\n      case 'expires':\n        const expiresMs = (+new Date(value));\n        // https://datatracker.ietf.org/doc/html/rfc6265#section-5.2.1\n        if (isFinite(expiresMs)) {\n          if (expiresMs <= 0)\n            cookie.expires = 0;\n          else\n            cookie.expires = Math.min(expiresMs / 1000, kMaxCookieExpiresDateInSeconds);\n        }\n        break;\n      case 'max-age':\n        const maxAgeSec = parseInt(value, 10);\n        if (isFinite(maxAgeSec)) {\n          // From https://datatracker.ietf.org/doc/html/rfc6265#section-5.2.2\n          // If delta-seconds is less than or equal to zero (0), let expiry-time\n          // be the earliest representable date and time.\n          if (maxAgeSec <= 0)\n            cookie.expires = 0;\n          else\n            cookie.expires = Math.min(Date.now() / 1000 + maxAgeSec, kMaxCookieExpiresDateInSeconds);\n        }\n        break;\n      case 'domain':\n        cookie.domain = value.toLocaleLowerCase() || '';\n        if (cookie.domain && !cookie.domain.startsWith('.') && cookie.domain.includes('.'))\n          cookie.domain = '.' + cookie.domain;\n        break;\n      case 'path':\n        cookie.path = value || '';\n        break;\n      case 'secure':\n        cookie.secure = true;\n        break;\n      case 'httponly':\n        cookie.httpOnly = true;\n        break;\n      case 'samesite':\n        switch (value.toLowerCase()) {\n          case 'none':\n            cookie.sameSite = 'None';\n            break;\n          case 'lax':\n            cookie.sameSite = 'Lax';\n            break;\n          case 'strict':\n            cookie.sameSite = 'Strict';\n            break;\n        }\n        break;\n    }\n  }\n  return cookie;\n}\n\nexport function domainMatches(value: string, domain: string): boolean {\n  if (value === domain)\n    return true;\n  // Only strict match is allowed if domain doesn't start with '.' (host-only-flag is true in the spec)\n  if (!domain.startsWith('.'))\n    return false;\n  value = '.' + value;\n  return value.endsWith(domain);\n}\n\nfunction pathMatches(value: string, path: string): boolean {\n  if (value === path)\n    return true;\n  if (!value.endsWith('/'))\n    value = value + '/';\n  if (!path.endsWith('/'))\n    path = path + '/';\n  return value.startsWith(path);\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { mime } from '../utilsBundle';\n\nimport type * as channels from '@protocol/channels';\n\nexport class MultipartFormData {\n  private readonly _boundary: string;\n  private readonly _chunks: Buffer[] = [];\n\n  constructor() {\n    this._boundary = generateUniqueBoundaryString();\n  }\n\n  contentTypeHeader() {\n    return `multipart/form-data; boundary=${this._boundary}`;\n  }\n\n  addField(name: string, value: string) {\n    this._beginMultiPartHeader(name);\n    this._finishMultiPartHeader();\n    this._chunks.push(Buffer.from(value));\n    this._finishMultiPartField();\n  }\n\n  addFileField(name: string, value: NonNullable<channels.FormField['file']>) {\n    this._beginMultiPartHeader(name);\n    this._chunks.push(Buffer.from(`; filename=\"${value.name}\"`));\n    this._chunks.push(Buffer.from(`\\r\\ncontent-type: ${value.mimeType || mime.getType(value.name) || 'application/octet-stream'}`));\n    this._finishMultiPartHeader();\n    this._chunks.push(value.buffer);\n    this._finishMultiPartField();\n  }\n\n  finish(): Buffer {\n    this._addBoundary(true);\n    return Buffer.concat(this._chunks);\n  }\n\n  private _beginMultiPartHeader(name: string) {\n    this._addBoundary();\n    this._chunks.push(Buffer.from(`content-disposition: form-data; name=\"${name}\"`));\n  }\n\n  private _finishMultiPartHeader() {\n    this._chunks.push(Buffer.from(`\\r\\n\\r\\n`));\n  }\n\n  private _finishMultiPartField() {\n    this._chunks.push(Buffer.from(`\\r\\n`));\n  }\n\n  private _addBoundary(isLastBoundary?: boolean) {\n    this._chunks.push(Buffer.from('--' + this._boundary));\n    if (isLastBoundary)\n      this._chunks.push(Buffer.from('--'));\n    this._chunks.push(Buffer.from('\\r\\n'));\n  }\n}\n\nconst alphaNumericEncodingMap = [\n  0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,\n  0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,\n  0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,\n  0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,\n  0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,\n  0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,\n  0x77, 0x78, 0x79, 0x7A, 0x30, 0x31, 0x32, 0x33,\n  0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42\n];\n\n// See generateUniqueBoundaryString() in WebKit\nfunction generateUniqueBoundaryString(): string {\n  const charCodes = [];\n  for (let i = 0; i < 16; i++)\n    charCodes.push(alphaNumericEncodingMap[Math.floor(Math.random() * alphaNumericEncodingMap.length)]);\n  return '----WebKitFormBoundary' + String.fromCharCode(...charCodes);\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\nimport http2 from 'http2';\nimport net from 'net';\nimport stream from 'stream';\nimport tls from 'tls';\n\nimport { SocksProxy } from './utils/socksProxy';\nimport { ManualPromise, escapeHTML, generateSelfSignedCertificate, rewriteErrorMessage } from '../utils';\nimport { verifyClientCertificates } from './browserContext';\nimport { createProxyAgent } from './utils/network';\nimport { debugLogger } from './utils/debugLogger';\nimport { createSocket, createTLSSocket } from './utils/happyEyeballs';\n\nimport type * as types from './types';\nimport type { SocksSocketClosedPayload, SocksSocketDataPayload, SocksSocketRequestedPayload } from './utils/socksProxy';\nimport type https from 'https';\n\nlet dummyServerTlsOptions: tls.TlsOptions | undefined = undefined;\nfunction loadDummyServerCertsIfNeeded() {\n  if (dummyServerTlsOptions)\n    return;\n  const { cert, key } = generateSelfSignedCertificate();\n  dummyServerTlsOptions = { key, cert };\n}\n\nclass ALPNCache {\n  private _cache = new Map<string, ManualPromise<string>>();\n\n  get(host: string, port: number, success: (protocol: string) => void) {\n    const cacheKey = `${host}:${port}`;\n    {\n      const result = this._cache.get(cacheKey);\n      if (result) {\n        result.then(success);\n        return;\n      }\n    }\n    const result = new ManualPromise<string>();\n    this._cache.set(cacheKey, result);\n    result.then(success);\n    createTLSSocket({\n      host,\n      port,\n      servername: net.isIP(host) ? undefined : host,\n      ALPNProtocols: ['h2', 'http/1.1'],\n      rejectUnauthorized: false,\n    }).then(socket => {\n      // The server may not respond with ALPN, in which case we default to http/1.1.\n      result.resolve(socket.alpnProtocol || 'http/1.1');\n      socket.end();\n    }).catch(error => {\n      debugLogger.log('client-certificates', `ALPN error: ${error.message}`);\n      result.resolve('http/1.1');\n    });\n  }\n}\n\nclass SocksProxyConnection {\n  private readonly socksProxy: ClientCertificatesProxy;\n  private readonly uid: string;\n  private readonly host: string;\n  private readonly port: number;\n  firstPackageReceived: boolean = false;\n  target!: net.Socket;\n  // In case of http, we just pipe data to the target socket and they are |undefined|.\n  internal: stream.Duplex | undefined;\n  internalTLS: tls.TLSSocket | undefined;\n  private _targetCloseEventListener: () => void;\n  private _dummyServer: tls.Server | undefined;\n  private _closed = false;\n\n  constructor(socksProxy: ClientCertificatesProxy, uid: string, host: string, port: number) {\n    this.socksProxy = socksProxy;\n    this.uid = uid;\n    this.host = host;\n    this.port = port;\n    this._targetCloseEventListener = () => {\n      // Close the other end and cleanup TLS resources.\n      this.socksProxy._socksProxy.sendSocketEnd({ uid: this.uid });\n      this.internalTLS?.destroy();\n      this._dummyServer?.close();\n    };\n  }\n\n  async connect() {\n    if (this.socksProxy.proxyAgentFromOptions)\n      this.target = await this.socksProxy.proxyAgentFromOptions.callback(new EventEmitter() as any, { host: rewriteToLocalhostIfNeeded(this.host), port: this.port, secureEndpoint: false });\n    else\n      this.target = await createSocket(rewriteToLocalhostIfNeeded(this.host), this.port);\n\n    this.target.once('close', this._targetCloseEventListener);\n    this.target.once('error', error => this.socksProxy._socksProxy.sendSocketError({ uid: this.uid, error: error.message }));\n    if (this._closed) {\n      this.target.destroy();\n      return;\n    }\n    this.socksProxy._socksProxy.socketConnected({\n      uid: this.uid,\n      host: this.target.localAddress!,\n      port: this.target.localPort!,\n    });\n  }\n\n  public onClose() {\n    // Close the other end and cleanup TLS resources.\n    this.target.destroy();\n    this.internalTLS?.destroy();\n    this._dummyServer?.close();\n    this._closed = true;\n  }\n\n  public onData(data: Buffer) {\n    // HTTP / TLS are client-hello based protocols. This allows us to detect\n    // the protocol on the first package and attach appropriate listeners.\n    if (!this.firstPackageReceived) {\n      this.firstPackageReceived = true;\n      // 0x16 is SSLv3/TLS \"handshake\" content type: https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_record\n      if (data[0] === 0x16)\n        this._attachTLSListeners();\n      else\n        this.target.on('data', data => this.socksProxy._socksProxy.sendSocketData({ uid: this.uid, data }));\n    }\n    if (this.internal)\n      this.internal.push(data);\n    else\n      this.target.write(data);\n  }\n\n  private _attachTLSListeners() {\n    this.internal = new stream.Duplex({\n      read: () => {},\n      write: (data, encoding, callback) => {\n        this.socksProxy._socksProxy.sendSocketData({ uid: this.uid, data });\n        callback();\n      }\n    });\n    this.socksProxy.alpnCache.get(rewriteToLocalhostIfNeeded(this.host), this.port, alpnProtocolChosenByServer => {\n      debugLogger.log('client-certificates', `Proxy->Target ${this.host}:${this.port} chooses ALPN ${alpnProtocolChosenByServer}`);\n      if (this._closed)\n        return;\n      this._dummyServer = tls.createServer({\n        ...dummyServerTlsOptions,\n        ALPNProtocols: alpnProtocolChosenByServer === 'h2' ? ['h2', 'http/1.1'] : ['http/1.1'],\n      });\n      this._dummyServer.emit('connection', this.internal);\n      this._dummyServer.once('secureConnection', internalTLS => {\n        this.internalTLS = internalTLS;\n        debugLogger.log('client-certificates', `Browser->Proxy ${this.host}:${this.port} chooses ALPN ${internalTLS.alpnProtocol}`);\n\n        let targetTLS: tls.TLSSocket | undefined = undefined;\n\n        const handleError = (error: Error) => {\n          debugLogger.log('client-certificates', `error when connecting to target: ${error.message.replaceAll('\\n', ' ')}`);\n          const responseBody = escapeHTML('Playwright client-certificate error: ' + error.message)\n              .replaceAll('\\n', ' <br>');\n          if (internalTLS?.alpnProtocol === 'h2') {\n            // This method is available only in Node.js 20+\n            if ('performServerHandshake' in http2) {\n              // In case of an 'error' event on the target connection, we still need to perform the http2 handshake on the browser side.\n              // This is an async operation, so we need to remove the listener to prevent the socket from being closed too early.\n              // This means we call this._targetCloseEventListener manually.\n              this.target.removeListener('close', this._targetCloseEventListener);\n              // @ts-expect-error\n              const session: http2.ServerHttp2Session = http2.performServerHandshake(internalTLS);\n              session.on('error', () => {\n                this.target.destroy();\n                this._targetCloseEventListener();\n              });\n              session.once('stream', (stream: http2.ServerHttp2Stream) => {\n                stream.respond({\n                  'content-type': 'text/html',\n                  [http2.constants.HTTP2_HEADER_STATUS]: 503,\n                });\n                const cleanup = () => {\n                  session.close();\n                  this.target.destroy();\n                  this._targetCloseEventListener();\n                };\n                stream.end(responseBody, cleanup);\n                stream.once('error', cleanup);\n              });\n            } else {\n              this.target.destroy();\n            }\n          } else {\n            internalTLS.end([\n              'HTTP/1.1 503 Internal Server Error',\n              'Content-Type: text/html; charset=utf-8',\n              'Content-Length: ' + Buffer.byteLength(responseBody),\n              '',\n              responseBody,\n            ].join('\\r\\n'));\n            this.target.destroy();\n          }\n        };\n\n        if (this._closed) {\n          internalTLS.destroy();\n          return;\n        }\n        targetTLS = tls.connect({\n          socket: this.target,\n          host: this.host,\n          port: this.port,\n          rejectUnauthorized: !this.socksProxy.ignoreHTTPSErrors,\n          ALPNProtocols: [internalTLS.alpnProtocol || 'http/1.1'],\n          servername: !net.isIP(this.host) ? this.host : undefined,\n          secureContext: this.socksProxy.secureContextMap.get(new URL(`https://${this.host}:${this.port}`).origin),\n        });\n\n        targetTLS.once('secureConnect', () => {\n          internalTLS.pipe(targetTLS);\n          targetTLS.pipe(internalTLS);\n        });\n\n        internalTLS.once('error', () => this.target.destroy());\n        targetTLS.once('error', handleError);\n      });\n    });\n  }\n}\n\nexport class ClientCertificatesProxy {\n  _socksProxy: SocksProxy;\n  private _connections: Map<string, SocksProxyConnection> = new Map();\n  ignoreHTTPSErrors: boolean | undefined;\n  secureContextMap: Map<string, tls.SecureContext> = new Map();\n  alpnCache: ALPNCache;\n  proxyAgentFromOptions: ReturnType<typeof createProxyAgent>;\n\n  constructor(\n    contextOptions: Pick<types.BrowserContextOptions, 'clientCertificates' | 'ignoreHTTPSErrors' | 'proxy'>\n  ) {\n    verifyClientCertificates(contextOptions.clientCertificates);\n    this.alpnCache = new ALPNCache();\n    this.ignoreHTTPSErrors = contextOptions.ignoreHTTPSErrors;\n    this.proxyAgentFromOptions = createProxyAgent(contextOptions.proxy);\n    this._initSecureContexts(contextOptions.clientCertificates);\n    this._socksProxy = new SocksProxy();\n    this._socksProxy.setPattern('*');\n    this._socksProxy.addListener(SocksProxy.Events.SocksRequested, async (payload: SocksSocketRequestedPayload) => {\n      try {\n        const connection = new SocksProxyConnection(this, payload.uid, payload.host, payload.port);\n        await connection.connect();\n        this._connections.set(payload.uid, connection);\n      } catch (error) {\n        this._socksProxy.socketFailed({ uid: payload.uid, errorCode: error.code });\n      }\n    });\n    this._socksProxy.addListener(SocksProxy.Events.SocksData, async (payload: SocksSocketDataPayload) => {\n      this._connections.get(payload.uid)?.onData(payload.data);\n    });\n    this._socksProxy.addListener(SocksProxy.Events.SocksClosed, (payload: SocksSocketClosedPayload) => {\n      this._connections.get(payload.uid)?.onClose();\n      this._connections.delete(payload.uid);\n    });\n    loadDummyServerCertsIfNeeded();\n  }\n\n  _initSecureContexts(clientCertificates: types.BrowserContextOptions['clientCertificates']) {\n    // Step 1. Group certificates by origin.\n    const origin2certs = new Map<string, types.BrowserContextOptions['clientCertificates']>();\n    for (const cert of clientCertificates || []) {\n      const origin = normalizeOrigin(cert.origin);\n      const certs = origin2certs.get(origin) || [];\n      certs.push(cert);\n      origin2certs.set(origin, certs);\n    }\n\n    // Step 2. Create secure contexts for each origin.\n    for (const [origin, certs] of origin2certs) {\n      try {\n        this.secureContextMap.set(origin, tls.createSecureContext(convertClientCertificatesToTLSOptions(certs)));\n      } catch (error) {\n        error = rewriteOpenSSLErrorIfNeeded(error);\n        throw rewriteErrorMessage(error, `Failed to load client certificate: ${error.message}`);\n      }\n    }\n  }\n\n  public async listen() {\n    const port = await this._socksProxy.listen(0, '127.0.0.1');\n    return { server: `socks5://127.0.0.1:${port}` };\n  }\n\n  public async close() {\n    await this._socksProxy.close();\n  }\n}\n\nfunction normalizeOrigin(origin: string): string {\n  try {\n    return new URL(origin).origin;\n  } catch (error) {\n    return origin;\n  }\n}\n\nfunction convertClientCertificatesToTLSOptions(\n  clientCertificates: types.BrowserContextOptions['clientCertificates']\n): Pick<https.RequestOptions, 'pfx' | 'key' | 'cert'> | undefined {\n  if (!clientCertificates || !clientCertificates.length)\n    return;\n  const tlsOptions = {\n    pfx: [] as { buf: Buffer, passphrase?: string }[],\n    key: [] as { pem: Buffer, passphrase?: string }[],\n    cert: [] as Buffer[],\n  };\n  for (const cert of clientCertificates) {\n    if (cert.cert)\n      tlsOptions.cert.push(cert.cert);\n    if (cert.key)\n      tlsOptions.key.push({ pem: cert.key, passphrase: cert.passphrase });\n    if (cert.pfx)\n      tlsOptions.pfx.push({ buf: cert.pfx, passphrase: cert.passphrase });\n  }\n  return tlsOptions;\n}\n\nexport function getMatchingTLSOptionsForOrigin(\n  clientCertificates: types.BrowserContextOptions['clientCertificates'],\n  origin: string\n): Pick<https.RequestOptions, 'pfx' | 'key' | 'cert'> | undefined {\n  const matchingCerts = clientCertificates?.filter(c =>\n    normalizeOrigin(c.origin) === origin\n  );\n  return convertClientCertificatesToTLSOptions(matchingCerts);\n}\n\nfunction rewriteToLocalhostIfNeeded(host: string): string {\n  return host === 'local.playwright' ? 'localhost' : host;\n}\n\nexport function rewriteOpenSSLErrorIfNeeded(error: Error): Error {\n  if (error.message !== 'unsupported' && (error as NodeJS.ErrnoException).code !== 'ERR_CRYPTO_UNSUPPORTED_OPERATION')\n    return error;\n  return rewriteErrorMessage(error, [\n    'Unsupported TLS certificate.',\n    'Most likely, the security algorithm of the given certificate was deprecated by OpenSSL.',\n    'For more details, see https://github.com/openssl/openssl/blob/master/README-PROVIDERS.md#the-legacy-provider',\n    'You could probably modernize the certificate by following the steps at https://github.com/nodejs/node/issues/40672#issuecomment-1243648223',\n  ].join('\\n'));\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport http from 'http';\nimport https from 'https';\nimport { Transform, pipeline } from 'stream';\nimport { TLSSocket } from 'tls';\nimport * as zlib from 'zlib';\n\nimport { assert, constructURLBasedOnBaseURL, createProxyAgent, eventsHelper, monotonicTime  } from '../utils';\nimport { createGuid } from './utils/crypto';\nimport { getUserAgent } from './utils/userAgent';\nimport { BrowserContext, verifyClientCertificates } from './browserContext';\nimport { Cookie, CookieStore, domainMatches, parseRawCookie } from './cookieStore';\nimport { MultipartFormData } from './formData';\nimport { SdkObject } from './instrumentation';\nimport { ProgressController } from './progress';\nimport { getMatchingTLSOptionsForOrigin, rewriteOpenSSLErrorIfNeeded } from './socksClientCertificatesInterceptor';\nimport { httpHappyEyeballsAgent, httpsHappyEyeballsAgent, timingForSocket } from './utils/happyEyeballs';\nimport { Tracing } from './trace/recorder/tracing';\n\nimport type { CallMetadata } from './instrumentation';\nimport type { Playwright } from './playwright';\nimport type { Progress } from './progress';\nimport type * as types from './types';\nimport type { HeadersArray, ProxySettings } from './types';\nimport type { HTTPCredentials } from '../../types/types';\nimport type { RegisteredListener } from '../utils';\nimport type * as channels from '@protocol/channels';\nimport type * as har from '@trace/har';\nimport type { LookupAddress } from 'dns';\nimport type { Readable, TransformCallback } from 'stream';\n\n\ntype FetchRequestOptions = {\n  userAgent: string;\n  extraHTTPHeaders?: HeadersArray;\n  failOnStatusCode?: boolean;\n  httpCredentials?: HTTPCredentials;\n  proxy?: ProxySettings;\n  ignoreHTTPSErrors?: boolean;\n  maxRedirects?: number;\n  baseURL?: string;\n  clientCertificates?: types.BrowserContextOptions['clientCertificates'];\n};\n\ntype HeadersObject = Readonly<{ [name: string]: string }>;\n\nexport type APIRequestEvent = {\n  url: URL,\n  method: string,\n  headers: HeadersObject,\n  cookies: channels.NameValue[],\n  postData?: Buffer\n};\n\nexport type APIRequestFinishedEvent = {\n  requestEvent: APIRequestEvent,\n  httpVersion: string;\n  headers: http.IncomingHttpHeaders;\n  cookies: channels.NetworkCookie[];\n  rawHeaders: string[];\n  statusCode: number;\n  statusMessage: string;\n  body?: Buffer;\n  timings: har.Timings;\n  serverIPAddress?: string;\n  serverPort?: number;\n  securityDetails?: har.SecurityDetails;\n};\n\ntype SendRequestOptions = https.RequestOptions & {\n  maxRedirects: number,\n  deadline: number,\n  headers: HeadersObject,\n  __testHookLookup?: (hostname: string) => LookupAddress[]\n};\n\nexport abstract class APIRequestContext extends SdkObject {\n  static Events = {\n    Dispose: 'dispose',\n\n    Request: 'request',\n    RequestFinished: 'requestfinished',\n  };\n\n  readonly fetchResponses: Map<string, Buffer> = new Map();\n  readonly fetchLog: Map<string, string[]> = new Map();\n  protected static allInstances: Set<APIRequestContext> = new Set();\n  readonly _activeProgressControllers = new Set<ProgressController>();\n  _closeReason: string | undefined;\n\n  static findResponseBody(guid: string): Buffer | undefined {\n    for (const request of APIRequestContext.allInstances) {\n      const body = request.fetchResponses.get(guid);\n      if (body)\n        return body;\n    }\n    return undefined;\n  }\n\n  constructor(parent: SdkObject) {\n    super(parent, 'request-context');\n    APIRequestContext.allInstances.add(this);\n  }\n\n  protected _disposeImpl() {\n    APIRequestContext.allInstances.delete(this);\n    this.fetchResponses.clear();\n    this.fetchLog.clear();\n    this.emit(APIRequestContext.Events.Dispose);\n  }\n\n  disposeResponse(fetchUid: string) {\n    this.fetchResponses.delete(fetchUid);\n    this.fetchLog.delete(fetchUid);\n  }\n\n  abstract tracing(): Tracing;\n\n  abstract dispose(options: { reason?: string }): Promise<void>;\n\n  abstract _defaultOptions(): FetchRequestOptions;\n  abstract _addCookies(cookies: channels.NetworkCookie[]): Promise<void>;\n  abstract _cookies(url: URL): Promise<channels.NetworkCookie[]>;\n  abstract storageState(indexedDB?: boolean): Promise<channels.APIRequestContextStorageStateResult>;\n\n  private _storeResponseBody(body: Buffer): string {\n    const uid = createGuid();\n    this.fetchResponses.set(uid, body);\n    return uid;\n  }\n\n  async fetch(params: channels.APIRequestContextFetchParams, metadata: CallMetadata): Promise<channels.APIResponse> {\n    const defaults = this._defaultOptions();\n    const headers: HeadersObject = {\n      'user-agent': defaults.userAgent,\n      'accept': '*/*',\n      'accept-encoding': 'gzip,deflate,br',\n    };\n\n    if (defaults.extraHTTPHeaders) {\n      for (const { name, value } of defaults.extraHTTPHeaders)\n        setHeader(headers, name, value);\n    }\n\n    if (params.headers) {\n      for (const { name, value } of params.headers)\n        setHeader(headers, name, value);\n    }\n\n    const requestUrl = new URL(constructURLBasedOnBaseURL(defaults.baseURL, params.url));\n    if (params.encodedParams) {\n      requestUrl.search = params.encodedParams;\n    } else if (params.params) {\n      for (const { name, value } of params.params)\n        requestUrl.searchParams.append(name, value);\n    }\n\n    const credentials = this._getHttpCredentials(requestUrl);\n    if (credentials?.send === 'always')\n      setBasicAuthorizationHeader(headers, credentials);\n\n    const method = params.method?.toUpperCase() || 'GET';\n    const proxy = defaults.proxy;\n    let agent;\n    // We skip 'per-context' in order to not break existing users. 'per-context' was previously used to\n    // workaround an upstream Chromium bug. Can be removed in the future.\n    if (proxy?.server !== 'per-context')\n      agent = createProxyAgent(proxy, requestUrl);\n\n    let maxRedirects = params.maxRedirects ?? (defaults.maxRedirects ?? 20);\n    maxRedirects = maxRedirects === 0 ? -1 : maxRedirects;\n\n    const timeout = params.timeout;\n    const deadline = timeout && (monotonicTime() + timeout);\n\n    const options: SendRequestOptions = {\n      method,\n      headers,\n      agent,\n      maxRedirects,\n      timeout,\n      deadline,\n      ...getMatchingTLSOptionsForOrigin(this._defaultOptions().clientCertificates, requestUrl.origin),\n      __testHookLookup: (params as any).__testHookLookup,\n    };\n    // rejectUnauthorized = undefined is treated as true in Node.js 12.\n    if (params.ignoreHTTPSErrors || defaults.ignoreHTTPSErrors)\n      options.rejectUnauthorized = false;\n\n    const postData = serializePostData(params, headers);\n    if (postData)\n      setHeader(headers, 'content-length', String(postData.byteLength));\n    const controller = new ProgressController(metadata, this);\n    const fetchResponse = await controller.run(progress => {\n      return this._sendRequestWithRetries(progress, requestUrl, options, postData, params.maxRetries);\n    });\n    const fetchUid = this._storeResponseBody(fetchResponse.body);\n    this.fetchLog.set(fetchUid, controller.metadata.log);\n    const failOnStatusCode = params.failOnStatusCode !== undefined ? params.failOnStatusCode : !!defaults.failOnStatusCode;\n    if (failOnStatusCode && (fetchResponse.status < 200 || fetchResponse.status >= 400)) {\n      let responseText = '';\n      if (fetchResponse.body.byteLength) {\n        let text = fetchResponse.body.toString('utf8');\n        if (text.length > 1000)\n          text = text.substring(0, 997) + '...';\n        responseText = `\\nResponse text:\\n${text}`;\n      }\n      throw new Error(`${fetchResponse.status} ${fetchResponse.statusText}${responseText}`);\n    }\n    return { ...fetchResponse, fetchUid };\n  }\n\n  private _parseSetCookieHeader(responseUrl: string, setCookie: string[] | undefined): channels.NetworkCookie[] {\n    if (!setCookie)\n      return [];\n    const url = new URL(responseUrl);\n    // https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.4\n    const defaultPath = '/' + url.pathname.substr(1).split('/').slice(0, -1).join('/');\n    const cookies: channels.NetworkCookie[] = [];\n    for (const header of setCookie) {\n      // Decode cookie value?\n      const cookie: channels.NetworkCookie | null = parseCookie(header);\n      if (!cookie)\n        continue;\n      // https://datatracker.ietf.org/doc/html/rfc6265#section-5.2.3\n      if (!cookie.domain)\n        cookie.domain = url.hostname;\n      else\n        assert(cookie.domain.startsWith('.') || !cookie.domain.includes('.'));\n      if (!domainMatches(url.hostname, cookie.domain!))\n        continue;\n      // https://datatracker.ietf.org/doc/html/rfc6265#section-5.2.4\n      if (!cookie.path || !cookie.path.startsWith('/'))\n        cookie.path = defaultPath;\n      cookies.push(cookie);\n    }\n    return cookies;\n  }\n\n  private async _updateRequestCookieHeader(url: URL, headers: HeadersObject) {\n    if (getHeader(headers, 'cookie') !== undefined)\n      return;\n    const contextCookies = await this._cookies(url);\n    // Browser context returns cookies with domain matching both .example.com and\n    // example.com. Those without leading dot are only sent when domain is strictly\n    // matching example.com, but not for sub.example.com.\n    const cookies = contextCookies.filter(c => new Cookie(c).matches(url));\n    if (cookies.length) {\n      const valueArray = cookies.map(c => `${c.name}=${c.value}`);\n      setHeader(headers, 'cookie', valueArray.join('; '));\n    }\n  }\n\n  private async _sendRequestWithRetries(progress: Progress, url: URL, options: SendRequestOptions, postData?: Buffer, maxRetries?: number): Promise<Omit<channels.APIResponse, 'fetchUid'> & { body: Buffer }>{\n    maxRetries ??= 0;\n    let backoff = 250;\n    for (let i = 0; i <= maxRetries; i++) {\n      try {\n        return await this._sendRequest(progress, url, options, postData);\n      } catch (e) {\n        e = rewriteOpenSSLErrorIfNeeded(e);\n        if (maxRetries === 0)\n          throw e;\n        if (i === maxRetries || (options.deadline && monotonicTime() + backoff > options.deadline))\n          throw new Error(`Failed after ${i + 1} attempt(s): ${e}`);\n        // Retry on connection reset only.\n        if (e.code !== 'ECONNRESET')\n          throw e;\n        progress.log(`  Received ECONNRESET, will retry after ${backoff}ms.`);\n        await new Promise(f => setTimeout(f, backoff));\n        backoff *= 2;\n      }\n    }\n    throw new Error('Unreachable');\n  }\n\n  private async _sendRequest(progress: Progress, url: URL, options: SendRequestOptions, postData?: Buffer): Promise<Omit<channels.APIResponse, 'fetchUid'> & { body: Buffer }>{\n    await this._updateRequestCookieHeader(url, options.headers);\n\n    const requestCookies = getHeader(options.headers, 'cookie')?.split(';').map(p => {\n      const [name, value] = p.split('=').map(v => v.trim());\n      return { name, value };\n    }) || [];\n    const requestEvent: APIRequestEvent = {\n      url,\n      method: options.method!,\n      headers: options.headers,\n      cookies: requestCookies,\n      postData\n    };\n    this.emit(APIRequestContext.Events.Request, requestEvent);\n\n    return new Promise((fulfill, reject) => {\n      const requestConstructor: ((url: URL, options: http.RequestOptions, callback?: (res: http.IncomingMessage) => void) => http.ClientRequest)\n        = (url.protocol === 'https:' ? https : http).request;\n      // If we have a proxy agent already, do not override it.\n      const agent = options.agent || (url.protocol === 'https:' ? httpsHappyEyeballsAgent : httpHappyEyeballsAgent);\n      const requestOptions = { ...options, agent };\n\n      const startAt = monotonicTime();\n      let reusedSocketAt: number | undefined;\n      let dnsLookupAt: number | undefined;\n      let tcpConnectionAt: number | undefined;\n      let tlsHandshakeAt: number | undefined;\n      let requestFinishAt: number | undefined;\n      let serverIPAddress: string | undefined;\n      let serverPort: number | undefined;\n\n      let securityDetails: har.SecurityDetails | undefined;\n\n      const listeners: RegisteredListener[] = [];\n\n      const request = requestConstructor(url, requestOptions as any, async response => {\n        const responseAt = monotonicTime();\n\n        const notifyRequestFinished = (body?: Buffer) => {\n          const endAt = monotonicTime();\n          // spec: http://www.softwareishard.com/blog/har-12-spec/#timings\n          const connectEnd = tlsHandshakeAt ?? tcpConnectionAt;\n          const timings: har.Timings = {\n            send: requestFinishAt! - startAt,\n            wait: responseAt - requestFinishAt!,\n            receive: endAt - responseAt,\n            dns: dnsLookupAt ? dnsLookupAt - startAt : -1,\n            connect: connectEnd ? connectEnd - startAt : -1, // \"If [ssl] is defined then the time is also included in the connect field \"\n            ssl: tlsHandshakeAt ? tlsHandshakeAt - tcpConnectionAt! : -1,\n            blocked: reusedSocketAt ? reusedSocketAt - startAt : -1,\n          };\n\n          const requestFinishedEvent: APIRequestFinishedEvent = {\n            requestEvent,\n            httpVersion: response.httpVersion,\n            statusCode: response.statusCode || 0,\n            statusMessage: response.statusMessage || '',\n            headers: response.headers,\n            rawHeaders: response.rawHeaders,\n            cookies,\n            body,\n            timings,\n            serverIPAddress,\n            serverPort,\n            securityDetails,\n          };\n          this.emit(APIRequestContext.Events.RequestFinished, requestFinishedEvent);\n        };\n        progress.log(`← ${response.statusCode} ${response.statusMessage}`);\n        for (const [name, value] of Object.entries(response.headers))\n          progress.log(`  ${name}: ${value}`);\n\n        const cookies = this._parseSetCookieHeader(response.url || url.toString(), response.headers['set-cookie']) ;\n        if (cookies.length) {\n          try {\n            await this._addCookies(cookies);\n          } catch (e) {\n            // Cookie value is limited by 4096 characters in the browsers. If setCookies failed,\n            // we try setting each cookie individually just in case only some of them are bad.\n            await Promise.all(cookies.map(c => this._addCookies([c]).catch(() => {})));\n          }\n        }\n\n        if (redirectStatus.includes(response.statusCode!) && options.maxRedirects >= 0) {\n          if (options.maxRedirects === 0) {\n            reject(new Error('Max redirect count exceeded'));\n            request.destroy();\n            return;\n          }\n          const headers = { ...options.headers };\n          removeHeader(headers, `cookie`);\n\n          // HTTP-redirect fetch step 13 (https://fetch.spec.whatwg.org/#http-redirect-fetch)\n          const status = response.statusCode!;\n          let method = options.method!;\n          if ((status === 301 || status === 302) && method === 'POST' ||\n              status === 303 && !['GET', 'HEAD'].includes(method)) {\n            method = 'GET';\n            postData = undefined;\n            removeHeader(headers, `content-encoding`);\n            removeHeader(headers, `content-language`);\n            removeHeader(headers, `content-length`);\n            removeHeader(headers, `content-location`);\n            removeHeader(headers, `content-type`);\n          }\n\n\n          const redirectOptions: SendRequestOptions = {\n            method,\n            headers,\n            agent: options.agent,\n            maxRedirects: options.maxRedirects - 1,\n            timeout: options.timeout,\n            deadline: options.deadline,\n            ...getMatchingTLSOptionsForOrigin(this._defaultOptions().clientCertificates, url.origin),\n            __testHookLookup: options.__testHookLookup,\n          };\n          // rejectUnauthorized = undefined is treated as true in node 12.\n          if (options.rejectUnauthorized === false)\n            redirectOptions.rejectUnauthorized = false;\n\n          // HTTP-redirect fetch step 4: If locationURL is null, then return response.\n          // Best-effort UTF-8 decoding, per spec it's US-ASCII only, but browsers are more lenient.\n          // Node.js parses it as Latin1 via std::v8::String, so we convert it to UTF-8.\n          const locationHeaderValue = Buffer.from(response.headers.location ?? '', 'latin1').toString('utf8');\n          if (locationHeaderValue) {\n            let locationURL;\n            try {\n              locationURL = new URL(locationHeaderValue, url);\n            } catch (error) {\n              reject(new Error(`uri requested responds with an invalid redirect URL: ${locationHeaderValue}`));\n              request.destroy();\n              return;\n            }\n\n            if (headers['host'])\n              headers['host'] = locationURL.host;\n\n            notifyRequestFinished();\n            fulfill(this._sendRequest(progress, locationURL, redirectOptions, postData));\n            request.destroy();\n            return;\n          }\n        }\n        if (response.statusCode === 401 && !getHeader(options.headers, 'authorization')) {\n          const auth = response.headers['www-authenticate'];\n          const credentials = this._getHttpCredentials(url);\n          if (auth?.trim().startsWith('Basic') && credentials) {\n            setBasicAuthorizationHeader(options.headers, credentials);\n            notifyRequestFinished();\n            fulfill(this._sendRequest(progress, url, options, postData));\n            request.destroy();\n            return;\n          }\n        }\n        response.on('aborted', () => reject(new Error('aborted')));\n\n        const chunks: Buffer[] = [];\n        const notifyBodyFinished = () => {\n          const body = Buffer.concat(chunks);\n          notifyRequestFinished(body);\n          fulfill({\n            url: response.url || url.toString(),\n            status: response.statusCode || 0,\n            statusText: response.statusMessage || '',\n            headers: toHeadersArray(response.rawHeaders),\n            body\n          });\n        };\n\n        let body: Readable = response;\n        let transform: Transform | undefined;\n        const encoding = response.headers['content-encoding'];\n        if (encoding === 'gzip' || encoding === 'x-gzip') {\n          transform = zlib.createGunzip({\n            flush: zlib.constants.Z_SYNC_FLUSH,\n            finishFlush: zlib.constants.Z_SYNC_FLUSH\n          });\n        } else if (encoding === 'br') {\n          transform = zlib.createBrotliDecompress({\n            flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n            finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH\n          });\n        } else if (encoding === 'deflate') {\n          transform = zlib.createInflate();\n        }\n        if (transform) {\n          // Brotli and deflate decompressors throw if the input stream is empty.\n          const emptyStreamTransform = new SafeEmptyStreamTransform(notifyBodyFinished);\n          body = pipeline(response, emptyStreamTransform, transform, e => {\n            if (e)\n              reject(new Error(`failed to decompress '${encoding}' encoding: ${e.message}`));\n          });\n          body.on('error', e => reject(new Error(`failed to decompress '${encoding}' encoding: ${e}`)));\n        } else {\n          body.on('error', reject);\n        }\n\n        body.on('data', chunk => chunks.push(chunk));\n        body.on('end', notifyBodyFinished);\n      });\n      request.on('error', reject);\n\n      listeners.push(\n          eventsHelper.addEventListener(this, APIRequestContext.Events.Dispose, () => {\n            reject(new Error('Request context disposed.'));\n            request.destroy();\n          })\n      );\n      request.on('close', () => eventsHelper.removeEventListeners(listeners));\n\n      request.on('socket', socket => {\n        if (request.reusedSocket) {\n          reusedSocketAt = monotonicTime();\n          return;\n        }\n\n        // happy eyeballs don't emit lookup and connect events, so we use our custom ones\n        const happyEyeBallsTimings = timingForSocket(socket);\n        dnsLookupAt = happyEyeBallsTimings.dnsLookupAt;\n        tcpConnectionAt = happyEyeBallsTimings.tcpConnectionAt;\n\n        // non-happy-eyeballs sockets\n        listeners.push(\n            eventsHelper.addEventListener(socket, 'lookup', () => { dnsLookupAt = monotonicTime(); }),\n            eventsHelper.addEventListener(socket, 'connect', () => { tcpConnectionAt = monotonicTime(); }),\n            eventsHelper.addEventListener(socket, 'secureConnect', () => {\n              tlsHandshakeAt = monotonicTime();\n\n              if (socket instanceof TLSSocket) {\n                const peerCertificate = socket.getPeerCertificate();\n                securityDetails = {\n                  protocol: socket.getProtocol() ?? undefined,\n                  subjectName: peerCertificate.subject.CN,\n                  validFrom: new Date(peerCertificate.valid_from).getTime() / 1000,\n                  validTo: new Date(peerCertificate.valid_to).getTime() / 1000,\n                  issuer: peerCertificate.issuer.CN\n                };\n              }\n            }),\n        );\n\n        serverIPAddress = socket.remoteAddress;\n        serverPort = socket.remotePort;\n      });\n      request.on('finish', () => { requestFinishAt = monotonicTime(); });\n\n      progress.log(`→ ${options.method} ${url.toString()}`);\n      if (options.headers) {\n        for (const [name, value] of Object.entries(options.headers))\n          progress.log(`  ${name}: ${value}`);\n      }\n\n      if (options.deadline) {\n        const rejectOnTimeout = () =>  {\n          reject(new Error(`Request timed out after ${options.timeout}ms`));\n          request.destroy();\n        };\n        const remaining = options.deadline - monotonicTime();\n        if (remaining <= 0) {\n          rejectOnTimeout();\n          return;\n        }\n        request.setTimeout(remaining, rejectOnTimeout);\n      }\n\n      if (postData)\n        request.write(postData);\n      request.end();\n    });\n  }\n\n  private _getHttpCredentials(url: URL) {\n    if (!this._defaultOptions().httpCredentials?.origin || url.origin.toLowerCase() === this._defaultOptions().httpCredentials?.origin?.toLowerCase())\n      return this._defaultOptions().httpCredentials;\n    return undefined;\n  }\n}\n\nclass SafeEmptyStreamTransform extends Transform {\n  private _receivedSomeData: boolean = false;\n  private _onEmptyStreamCallback: () => void;\n\n  constructor(onEmptyStreamCallback: () => void) {\n    super();\n    this._onEmptyStreamCallback = onEmptyStreamCallback;\n  }\n  override _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void {\n    this._receivedSomeData = true;\n    callback(null, chunk);\n  }\n  override _flush(callback: TransformCallback): void {\n    if (this._receivedSomeData)\n      callback(null);\n    else\n      this._onEmptyStreamCallback();\n  }\n}\n\nexport class BrowserContextAPIRequestContext extends APIRequestContext {\n  private readonly _context: BrowserContext;\n\n  constructor(context: BrowserContext) {\n    super(context);\n    this._context = context;\n    context.once(BrowserContext.Events.Close, () => this._disposeImpl());\n  }\n\n  override tracing() {\n    return this._context.tracing;\n  }\n\n  override async dispose(options: { reason?: string }) {\n    this._closeReason = options.reason;\n    this.fetchResponses.clear();\n  }\n\n  _defaultOptions(): FetchRequestOptions {\n    return {\n      userAgent: this._context._options.userAgent || this._context._browser.userAgent(),\n      extraHTTPHeaders: this._context._options.extraHTTPHeaders,\n      failOnStatusCode: undefined,\n      httpCredentials: this._context._options.httpCredentials,\n      proxy: this._context._options.proxy || this._context._browser.options.proxy,\n      ignoreHTTPSErrors: this._context._options.ignoreHTTPSErrors,\n      baseURL: this._context._options.baseURL,\n      clientCertificates: this._context._options.clientCertificates,\n    };\n  }\n\n  async _addCookies(cookies: channels.NetworkCookie[]): Promise<void> {\n    await this._context.addCookies(cookies);\n  }\n\n  async _cookies(url: URL): Promise<channels.NetworkCookie[]> {\n    return await this._context.cookies(url.toString());\n  }\n\n  override async storageState(indexedDB?: boolean): Promise<channels.APIRequestContextStorageStateResult> {\n    return this._context.storageState(indexedDB);\n  }\n}\n\n\nexport class GlobalAPIRequestContext extends APIRequestContext {\n  private readonly _cookieStore: CookieStore = new CookieStore();\n  private readonly _options: FetchRequestOptions;\n  private readonly _origins: channels.OriginStorage[] | undefined;\n  private readonly _tracing: Tracing;\n\n  constructor(playwright: Playwright, options: channels.PlaywrightNewRequestOptions) {\n    super(playwright);\n    this.attribution.context = this;\n    if (options.storageState) {\n      this._origins = options.storageState.origins?.map(origin => ({ indexedDB: [], ...origin }));\n      this._cookieStore.addCookies(options.storageState.cookies || []);\n    }\n    verifyClientCertificates(options.clientCertificates);\n    this._options = {\n      baseURL: options.baseURL,\n      userAgent: options.userAgent || getUserAgent(),\n      extraHTTPHeaders: options.extraHTTPHeaders,\n      failOnStatusCode: !!options.failOnStatusCode,\n      ignoreHTTPSErrors: !!options.ignoreHTTPSErrors,\n      maxRedirects: options.maxRedirects,\n      httpCredentials: options.httpCredentials,\n      clientCertificates: options.clientCertificates,\n      proxy: options.proxy,\n    };\n    this._tracing = new Tracing(this, options.tracesDir);\n  }\n\n  override tracing() {\n    return this._tracing;\n  }\n\n  override async dispose(options: { reason?: string }) {\n    this._closeReason = options.reason;\n    await this._tracing.flush();\n    await this._tracing.deleteTmpTracesDir();\n    this._disposeImpl();\n  }\n\n  _defaultOptions(): FetchRequestOptions {\n    return this._options;\n  }\n\n  async _addCookies(cookies: channels.NetworkCookie[]): Promise<void> {\n    this._cookieStore.addCookies(cookies);\n  }\n\n  async _cookies(url: URL): Promise<channels.NetworkCookie[]> {\n    return this._cookieStore.cookies(url);\n  }\n\n  override async storageState(indexedDB = false): Promise<channels.APIRequestContextStorageStateResult> {\n    return {\n      cookies: this._cookieStore.allCookies(),\n      origins: (this._origins || []).map(origin => ({ ...origin, indexedDB: indexedDB ? origin.indexedDB : [] })),\n    };\n  }\n}\n\nfunction toHeadersArray(rawHeaders: string[]): types.HeadersArray {\n  const result: types.HeadersArray = [];\n  for (let i = 0; i < rawHeaders.length; i += 2)\n    result.push({ name: rawHeaders[i], value: rawHeaders[i + 1] });\n  return result;\n}\n\nconst redirectStatus = [301, 302, 303, 307, 308];\n\nfunction parseCookie(header: string): channels.NetworkCookie | null {\n  const raw = parseRawCookie(header);\n  if (!raw)\n    return null;\n  const cookie: channels.NetworkCookie = {\n    domain: '',\n    path: '',\n    expires: -1,\n    httpOnly: false,\n    secure: false,\n    // From https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite\n    // The cookie-sending behavior if SameSite is not specified is SameSite=Lax.\n    sameSite: 'Lax',\n    ...raw\n  };\n  return cookie;\n}\n\nfunction serializePostData(params: channels.APIRequestContextFetchParams, headers: HeadersObject): Buffer | undefined {\n  assert((params.postData ? 1 : 0) + (params.jsonData ? 1 : 0) + (params.formData ? 1 : 0) + (params.multipartData ? 1 : 0) <= 1, `Only one of 'data', 'form' or 'multipart' can be specified`);\n  if (params.jsonData !== undefined) {\n    setHeader(headers, 'content-type', 'application/json', true);\n    return Buffer.from(params.jsonData, 'utf8');\n  } else if (params.formData) {\n    const searchParams = new URLSearchParams();\n    for (const { name, value } of params.formData)\n      searchParams.append(name, value);\n    setHeader(headers, 'content-type', 'application/x-www-form-urlencoded', true);\n    return Buffer.from(searchParams.toString(), 'utf8');\n  } else if (params.multipartData) {\n    const formData = new MultipartFormData();\n    for (const field of params.multipartData) {\n      if (field.file)\n        formData.addFileField(field.name, field.file);\n      else if (field.value)\n        formData.addField(field.name, field.value);\n    }\n    setHeader(headers, 'content-type', formData.contentTypeHeader(), true);\n    return formData.finish();\n  } else if (params.postData !== undefined) {\n    setHeader(headers, 'content-type', 'application/octet-stream', true);\n    return params.postData;\n  }\n  return undefined;\n}\n\nfunction setHeader(headers: { [name: string]: string }, name: string, value: string, keepExisting = false) {\n  const existing = Object.entries(headers).find(pair => pair[0].toLowerCase() === name.toLowerCase());\n  if (!existing)\n    headers[name] = value;\n  else if (!keepExisting)\n    headers[existing[0]] = value;\n}\n\nfunction getHeader(headers: HeadersObject, name: string) {\n  const existing = Object.entries(headers).find(pair => pair[0].toLowerCase() === name.toLowerCase());\n  return existing ? existing[1] : undefined;\n}\n\nfunction removeHeader(headers: { [name: string]: string }, name: string) {\n  delete headers[name];\n}\n\nfunction setBasicAuthorizationHeader(headers: { [name: string]: string }, credentials: HTTPCredentials) {\n  const { username, password } = credentials;\n  const encoded = Buffer.from(`${username || ''}:${password || ''}`).toString('base64');\n  setHeader(headers, 'authorization', `Basic ${encoded}`);\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Dispatcher } from './dispatcher';\nimport { ManualPromise } from '../../utils/isomorphic/manualPromise';\nimport { createGuid } from '../utils/crypto';\n\nimport type { ArtifactDispatcher } from './artifactDispatcher';\nimport type * as channels from '@protocol/channels';\nimport type * as stream from 'stream';\n\nexport class StreamDispatcher extends Dispatcher<{ guid: string, stream: stream.Readable }, channels.StreamChannel, ArtifactDispatcher> implements channels.StreamChannel {\n  _type_Stream = true;\n  private _ended: boolean = false;\n\n  constructor(scope: ArtifactDispatcher, stream: stream.Readable) {\n    super(scope, { guid: 'stream@' + createGuid(), stream }, 'Stream', {});\n    // In Node v12.9.0+ we can use readableEnded.\n    stream.once('end', () => this._ended =  true);\n    stream.once('error', () => this._ended =  true);\n  }\n\n  async read(params: channels.StreamReadParams): Promise<channels.StreamReadResult> {\n    const stream = this._object.stream;\n    if (this._ended)\n      return { binary: Buffer.from('') };\n    if (!stream.readableLength) {\n      const readyPromise = new ManualPromise<void>();\n      const done = () => readyPromise.resolve();\n      stream.on('readable', done);\n      stream.on('end', done);\n      stream.on('error', done);\n      await readyPromise;\n      stream.off('readable', done);\n      stream.off('end', done);\n      stream.off('error', done);\n    }\n    const buffer = stream.read(Math.min(stream.readableLength, params.size || stream.readableLength));\n    return { binary: buffer || Buffer.from('') };\n  }\n\n  async close() {\n    this._object.stream.destroy();\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\n\nimport { Dispatcher } from './dispatcher';\nimport { StreamDispatcher } from './streamDispatcher';\nimport { mkdirIfNeeded } from '../utils/fileUtils';\n\nimport type { DispatcherScope } from './dispatcher';\nimport type { Artifact } from '../artifact';\nimport type { CallMetadata } from '../instrumentation';\nimport type * as channels from '@protocol/channels';\n\nexport class ArtifactDispatcher extends Dispatcher<Artifact, channels.ArtifactChannel, DispatcherScope> implements channels.ArtifactChannel {\n  _type_Artifact = true;\n\n  static from(parentScope: DispatcherScope, artifact: Artifact): ArtifactDispatcher {\n    return ArtifactDispatcher.fromNullable(parentScope, artifact)!;\n  }\n\n  static fromNullable(parentScope: DispatcherScope, artifact: Artifact): ArtifactDispatcher | undefined {\n    if (!artifact)\n      return undefined;\n    const result = parentScope.connection.existingDispatcher<ArtifactDispatcher>(artifact);\n    return result || new ArtifactDispatcher(parentScope, artifact);\n  }\n\n  private constructor(scope: DispatcherScope, artifact: Artifact) {\n    super(scope, artifact, 'Artifact', {\n      absolutePath: artifact.localPath(),\n    });\n  }\n\n  async pathAfterFinished(): Promise<channels.ArtifactPathAfterFinishedResult> {\n    const path = await this._object.localPathAfterFinished();\n    return { value: path };\n  }\n\n  async saveAs(params: channels.ArtifactSaveAsParams): Promise<channels.ArtifactSaveAsResult> {\n    return await new Promise((resolve, reject) => {\n      this._object.saveAs(async (localPath, error) => {\n        if (error) {\n          reject(error);\n          return;\n        }\n        try {\n          await mkdirIfNeeded(params.path);\n          await fs.promises.copyFile(localPath, params.path);\n          resolve();\n        } catch (e) {\n          reject(e);\n        }\n      });\n    });\n  }\n\n  async saveAsStream(): Promise<channels.ArtifactSaveAsStreamResult> {\n    return await new Promise((resolve, reject) => {\n      this._object.saveAs(async (localPath, error) => {\n        if (error) {\n          reject(error);\n          return;\n        }\n        try {\n          const readable = fs.createReadStream(localPath, { highWaterMark: 1024 * 1024 });\n          const stream = new StreamDispatcher(this, readable);\n          // Resolve with a stream, so that client starts saving the data.\n          resolve({ stream });\n          // Block the Artifact until the stream is consumed.\n          await new Promise<void>(resolve => {\n            readable.on('close', resolve);\n            readable.on('end', resolve);\n            readable.on('error', resolve);\n          });\n        } catch (e) {\n          reject(e);\n        }\n      });\n    });\n  }\n\n  async stream(): Promise<channels.ArtifactStreamResult> {\n    const fileName = await this._object.localPathAfterFinished();\n    const readable = fs.createReadStream(fileName, { highWaterMark: 1024 * 1024 });\n    return { stream: new StreamDispatcher(this, readable) };\n  }\n\n  async failure(): Promise<channels.ArtifactFailureResult> {\n    const error = await this._object.failureError();\n    return { error: error || undefined };\n  }\n\n  async cancel(): Promise<void> {\n    await this._object.cancel();\n  }\n\n  async delete(_: any, metadata: CallMetadata): Promise<void> {\n    metadata.potentiallyClosesScope = true;\n    await this._object.delete();\n    this._dispose();\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport {  assert, eventsHelper } from '../../utils';\nimport { debugLogger } from '../utils/debugLogger';\nimport { helper } from '../helper';\nimport { ProtocolError } from '../protocolError';\n\nimport type { RegisteredListener } from '../../utils';\nimport type { ConnectionTransport, ProtocolRequest, ProtocolResponse } from '../transport';\nimport type { Protocol } from './protocol';\nimport type { RecentLogsCollector } from '../utils/debugLogger';\nimport type { ProtocolLogger } from '../types';\n\n\nexport const ConnectionEvents = {\n  Disconnected: Symbol('ConnectionEvents.Disconnected')\n};\n\n// CRPlaywright uses this special id to issue Browser.close command which we\n// should ignore.\nexport const kBrowserCloseMessageId = -9999;\n\nexport class CRConnection extends EventEmitter {\n  private _lastId = 0;\n  private readonly _transport: ConnectionTransport;\n  readonly _sessions = new Map<string, CRSession>();\n  private readonly _protocolLogger: ProtocolLogger;\n  private readonly _browserLogsCollector: RecentLogsCollector;\n  _browserDisconnectedLogs: string | undefined;\n  readonly rootSession: CRSession;\n  _closed = false;\n\n  constructor(transport: ConnectionTransport, protocolLogger: ProtocolLogger, browserLogsCollector: RecentLogsCollector) {\n    super();\n    this.setMaxListeners(0);\n    this._transport = transport;\n    this._protocolLogger = protocolLogger;\n    this._browserLogsCollector = browserLogsCollector;\n    this.rootSession = new CRSession(this, null, '');\n    this._sessions.set('', this.rootSession);\n    this._transport.onmessage = this._onMessage.bind(this);\n    // onclose should be set last, since it can be immediately called.\n    this._transport.onclose = this._onClose.bind(this);\n  }\n\n  _rawSend(sessionId: string, method: string, params: any): number {\n    const id = ++this._lastId;\n    const message: ProtocolRequest = { id, method, params };\n    if (sessionId)\n      message.sessionId = sessionId;\n    this._protocolLogger('send', message);\n    this._transport.send(message);\n    return id;\n  }\n\n  async _onMessage(message: ProtocolResponse) {\n    this._protocolLogger('receive', message);\n    if (message.id === kBrowserCloseMessageId)\n      return;\n    const session = this._sessions.get(message.sessionId || '');\n    if (session)\n      session._onMessage(message);\n  }\n\n  _onClose(reason?: string) {\n    this._closed = true;\n    this._transport.onmessage = undefined;\n    this._transport.onclose = undefined;\n    this._browserDisconnectedLogs = helper.formatBrowserLogs(this._browserLogsCollector.recentLogs(), reason);\n    this.rootSession.dispose();\n    Promise.resolve().then(() => this.emit(ConnectionEvents.Disconnected));\n  }\n\n  close() {\n    if (!this._closed)\n      this._transport.close();\n  }\n\n  async createBrowserSession(): Promise<CDPSession> {\n    const { sessionId } = await this.rootSession.send('Target.attachToBrowserTarget');\n    return new CDPSession(this.rootSession, sessionId);\n  }\n}\n\ntype SessionEventListener = (method: string, params?: Object) => void;\n\nexport class CRSession extends EventEmitter {\n  private readonly _connection: CRConnection;\n  private _eventListener?: SessionEventListener;\n  private readonly _callbacks = new Map<number, { resolve: (o: any) => void, reject: (e: ProtocolError) => void, error: ProtocolError }>();\n  private readonly _sessionId: string;\n  private readonly _parentSession: CRSession | null;\n  private _crashed: boolean = false;\n  private _closed = false;\n  override on: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n  override addListener: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n  override off: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n  override removeListener: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n  override once: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n\n  constructor(connection: CRConnection, parentSession: CRSession | null, sessionId: string, eventListener?: SessionEventListener) {\n    super();\n    this.setMaxListeners(0);\n    this._connection = connection;\n    this._parentSession = parentSession;\n    this._sessionId = sessionId;\n    this._eventListener = eventListener;\n\n    this.on = super.on;\n    this.addListener = super.addListener;\n    this.off = super.removeListener;\n    this.removeListener = super.removeListener;\n    this.once = super.once;\n  }\n\n  _markAsCrashed() {\n    this._crashed = true;\n  }\n\n  createChildSession(sessionId: string, eventListener?: SessionEventListener): CRSession {\n    const session = new CRSession(this._connection, this, sessionId, eventListener);\n    this._connection._sessions.set(sessionId, session);\n    return session;\n  }\n\n  async send<T extends keyof Protocol.CommandParameters>(\n    method: T,\n    params?: Protocol.CommandParameters[T]\n  ): Promise<Protocol.CommandReturnValues[T]> {\n    if (this._crashed || this._closed || this._connection._closed || this._connection._browserDisconnectedLogs)\n      throw new ProtocolError(this._crashed ? 'crashed' : 'closed', undefined, this._connection._browserDisconnectedLogs);\n    const id = this._connection._rawSend(this._sessionId, method, params);\n    return new Promise((resolve, reject) => {\n      this._callbacks.set(id, { resolve, reject, error: new ProtocolError('error', method) });\n    });\n  }\n\n  _sendMayFail<T extends keyof Protocol.CommandParameters>(method: T, params?: Protocol.CommandParameters[T]): Promise<Protocol.CommandReturnValues[T] | void> {\n    return this.send(method, params).catch((error: ProtocolError) => debugLogger.log('error', error));\n  }\n\n  _onMessage(object: ProtocolResponse) {\n    if (object.id && this._callbacks.has(object.id)) {\n      const callback = this._callbacks.get(object.id)!;\n      this._callbacks.delete(object.id);\n      if (object.error) {\n        callback.error.setMessage(object.error.message);\n        callback.reject(callback.error);\n      } else {\n        callback.resolve(object.result);\n      }\n    } else if (object.id && object.error?.code === -32001) {\n      // Message to a closed session, just ignore it.\n    } else {\n      assert(!object.id, object?.error?.message || undefined);\n      Promise.resolve().then(() => {\n        if (this._eventListener)\n          this._eventListener(object.method!, object.params);\n        this.emit(object.method!, object.params);\n      });\n    }\n  }\n\n  async detach() {\n    if (this._closed)\n      throw new Error(`Session already detached. Most likely the page has been closed.`);\n    if (!this._parentSession)\n      throw new Error('Root session cannot be closed');\n    // Ideally, detaching should resume any target, but there is a bug in the backend,\n    // so we must Runtime.runIfWaitingForDebugger first.\n    await this._sendMayFail('Runtime.runIfWaitingForDebugger');\n    await this._parentSession.send('Target.detachFromTarget', { sessionId: this._sessionId });\n    this.dispose();\n  }\n\n  dispose() {\n    this._closed = true;\n    this._connection._sessions.delete(this._sessionId);\n    for (const callback of this._callbacks.values()) {\n      callback.error.setMessage(`Internal server error, session closed.`);\n      callback.error.type = this._crashed ? 'crashed' : 'closed';\n      callback.error.logs = this._connection._browserDisconnectedLogs;\n      callback.reject(callback.error);\n    }\n    this._callbacks.clear();\n  }\n}\n\nexport class CDPSession extends EventEmitter {\n  static Events = {\n    Event: 'event',\n    Closed: 'close',\n  };\n\n  readonly guid: string;\n  private _session: CRSession;\n  private _listeners: RegisteredListener[] = [];\n\n  constructor(parentSession: CRSession, sessionId: string) {\n    super();\n    this.guid = `cdp-session@${sessionId}`;\n    this._session = parentSession.createChildSession(sessionId, (method, params) => this.emit(CDPSession.Events.Event, { method, params }));\n    this._listeners = [eventsHelper.addEventListener(parentSession, 'Target.detachedFromTarget', (event: Protocol.Target.detachedFromTargetPayload) => {\n      if (event.sessionId === sessionId)\n        this._onClose();\n    })];\n  }\n\n  async send(method: string, params?: any) {\n    return await this._session.send(method as any, params);\n  }\n\n  async detach() {\n    return await this._session.detach();\n  }\n\n  async attachToTarget(targetId: string) {\n    const { sessionId } = await this.send('Target.attachToTarget', { targetId, flatten: true });\n    return new CDPSession(this._session, sessionId);\n  }\n\n  private _onClose() {\n    eventsHelper.removeEventListeners(this._listeners);\n    this._session.dispose();\n    this.emit(CDPSession.Events.Closed);\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Dispatcher } from './dispatcher';\nimport { CDPSession } from '../chromium/crConnection';\n\nimport type { BrowserContextDispatcher } from './browserContextDispatcher';\nimport type { BrowserDispatcher } from './browserDispatcher';\nimport type { CallMetadata } from '../instrumentation';\nimport type * as channels from '@protocol/channels';\n\nexport class CDPSessionDispatcher extends Dispatcher<CDPSession, channels.CDPSessionChannel, BrowserDispatcher | BrowserContextDispatcher> implements channels.CDPSessionChannel {\n  _type_CDPSession = true;\n\n  constructor(scope: BrowserDispatcher | BrowserContextDispatcher, cdpSession: CDPSession) {\n    super(scope, cdpSession, 'CDPSession', {});\n    this.addObjectListener(CDPSession.Events.Event, ({ method, params }) => this._dispatchEvent('event', { method, params }));\n    this.addObjectListener(CDPSession.Events.Closed, () => this._dispose());\n  }\n\n  async send(params: channels.CDPSessionSendParams): Promise<channels.CDPSessionSendResult> {\n    return { result: await this._object.send(params.method as any, params.params) };\n  }\n\n  async detach(_: any, metadata: CallMetadata): Promise<void> {\n    metadata.potentiallyClosesScope = true;\n    await this._object.detach();\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Dispatcher } from './dispatcher';\nimport { ElementHandleDispatcher } from './elementHandlerDispatcher';\nimport { parseSerializedValue, serializeValue } from '../../protocol/serializers';\n\nimport type * as js from '../javascript';\nimport type { ElectronApplicationDispatcher } from './electronDispatcher';\nimport type { FrameDispatcher } from './frameDispatcher';\nimport type { PageDispatcher, WorkerDispatcher } from './pageDispatcher';\nimport type { CallMetadata } from '../instrumentation';\nimport type * as channels from '@protocol/channels';\n\nexport type JSHandleDispatcherParentScope = PageDispatcher | FrameDispatcher | WorkerDispatcher | ElectronApplicationDispatcher;\n\nexport class JSHandleDispatcher<ParentScope extends JSHandleDispatcherParentScope = JSHandleDispatcherParentScope> extends Dispatcher<js.JSHandle, channels.JSHandleChannel, ParentScope> implements channels.JSHandleChannel {\n  _type_JSHandle = true;\n\n  static fromJSHandle(scope: JSHandleDispatcherParentScope, handle: js.JSHandle): JSHandleDispatcher {\n    return scope.connection.existingDispatcher<JSHandleDispatcher>(handle) || new JSHandleDispatcher(scope, handle);\n  }\n\n  protected constructor(scope: ParentScope, jsHandle: js.JSHandle) {\n    // Do not call this directly, use createHandle() instead.\n    super(scope, jsHandle, jsHandle.asElement() ? 'ElementHandle' : 'JSHandle', {\n      preview: jsHandle.toString(),\n    });\n    jsHandle._setPreviewCallback(preview => this._dispatchEvent('previewUpdated', { preview }));\n  }\n\n  async evaluateExpression(params: channels.JSHandleEvaluateExpressionParams): Promise<channels.JSHandleEvaluateExpressionResult> {\n    return { value: serializeResult(await this._object.evaluateExpression(params.expression, { isFunction: params.isFunction }, parseArgument(params.arg))) };\n  }\n\n  async evaluateExpressionHandle(params: channels.JSHandleEvaluateExpressionHandleParams): Promise<channels.JSHandleEvaluateExpressionHandleResult> {\n    const jsHandle = await this._object.evaluateExpressionHandle(params.expression, { isFunction: params.isFunction }, parseArgument(params.arg));\n    // If \"jsHandle\" is an ElementHandle, it belongs to the same frame as \"this\".\n    return { handle: ElementHandleDispatcher.fromJSOrElementHandle(this.parentScope() as FrameDispatcher, jsHandle) };\n  }\n\n  async getProperty(params: channels.JSHandleGetPropertyParams): Promise<channels.JSHandleGetPropertyResult> {\n    const jsHandle = await this._object.getProperty(params.name);\n    // If \"jsHandle\" is an ElementHandle, it belongs to the same frame as \"this\".\n    return { handle: ElementHandleDispatcher.fromJSOrElementHandle(this.parentScope() as FrameDispatcher, jsHandle) };\n  }\n\n  async getPropertyList(): Promise<channels.JSHandleGetPropertyListResult> {\n    const map = await this._object.getProperties();\n    const properties = [];\n    for (const [name, value] of map) {\n      // If \"jsHandle\" is an ElementHandle, it belongs to the same frame as \"this\".\n      properties.push({ name, value: ElementHandleDispatcher.fromJSOrElementHandle(this.parentScope() as FrameDispatcher, value) });\n    }\n    return { properties };\n  }\n\n  async jsonValue(): Promise<channels.JSHandleJsonValueResult> {\n    return { value: serializeResult(await this._object.jsonValue()) };\n  }\n\n  async dispose(_: any, metadata: CallMetadata) {\n    metadata.potentiallyClosesScope = true;\n    this._object.dispose();\n    this._dispose();\n  }\n}\n\n// Generic channel parser converts guids to JSHandleDispatchers,\n// and this function takes care of converting them into underlying JSHandles.\nexport function parseArgument(arg: channels.SerializedArgument): any {\n  return parseSerializedValue(arg.value, arg.handles.map(a => (a as JSHandleDispatcher)._object));\n}\n\nexport function parseValue(v: channels.SerializedValue): any {\n  return parseSerializedValue(v, []);\n}\n\nexport function serializeResult(arg: any): channels.SerializedValue {\n  return serializeValue(arg, value => ({ fallThrough: value }));\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ArtifactDispatcher } from './artifactDispatcher';\nimport { Dispatcher } from './dispatcher';\n\nimport type { BrowserContextDispatcher } from './browserContextDispatcher';\nimport type { APIRequestContextDispatcher } from './networkDispatchers';\nimport type { Tracing } from '../trace/recorder/tracing';\nimport type { CallMetadata } from '@protocol/callMetadata';\nimport type * as channels from '@protocol/channels';\n\nexport class TracingDispatcher extends Dispatcher<Tracing, channels.TracingChannel, BrowserContextDispatcher | APIRequestContextDispatcher> implements channels.TracingChannel {\n  _type_Tracing = true;\n\n  static from(scope: BrowserContextDispatcher | APIRequestContextDispatcher, tracing: Tracing): TracingDispatcher {\n    const result = scope.connection.existingDispatcher<TracingDispatcher>(tracing);\n    return result || new TracingDispatcher(scope, tracing);\n  }\n\n  constructor(scope: BrowserContextDispatcher | APIRequestContextDispatcher, tracing: Tracing) {\n    super(scope, tracing, 'Tracing', {});\n  }\n\n  async tracingStart(params: channels.TracingTracingStartParams): Promise<channels.TracingTracingStartResult> {\n    await this._object.start(params);\n  }\n\n  async tracingStartChunk(params: channels.TracingTracingStartChunkParams): Promise<channels.TracingTracingStartChunkResult> {\n    return await this._object.startChunk(params);\n  }\n\n  async tracingGroup(params: channels.TracingTracingGroupParams, metadata: CallMetadata): Promise<channels.TracingTracingGroupResult> {\n    const { name, location } = params;\n    await this._object.group(name, location, metadata);\n  }\n\n  async tracingGroupEnd(params: channels.TracingTracingGroupEndParams): Promise<channels.TracingTracingGroupEndResult> {\n    await this._object.groupEnd();\n  }\n\n  async tracingStopChunk(params: channels.TracingTracingStopChunkParams): Promise<channels.TracingTracingStopChunkResult> {\n    const { artifact, entries } = await this._object.stopChunk(params);\n    return { artifact: artifact ? ArtifactDispatcher.from(this, artifact) : undefined, entries };\n  }\n\n  async tracingStop(params: channels.TracingTracingStopParams): Promise<channels.TracingTracingStopResult> {\n    await this._object.stop();\n  }\n\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WebSocket } from '../network';\nimport { Dispatcher } from './dispatcher';\nimport { FrameDispatcher } from './frameDispatcher';\nimport { WorkerDispatcher } from './pageDispatcher';\nimport { TracingDispatcher } from './tracingDispatcher';\n\nimport type { APIRequestContext } from '../fetch';\nimport type { CallMetadata } from '../instrumentation';\nimport type { Request, Response, Route } from '../network';\nimport type { BrowserContextDispatcher } from './browserContextDispatcher';\nimport type { RootDispatcher } from './dispatcher';\nimport type { PageDispatcher } from './pageDispatcher';\nimport type * as channels from '@protocol/channels';\n\n\nexport class RequestDispatcher extends Dispatcher<Request, channels.RequestChannel, BrowserContextDispatcher | PageDispatcher | FrameDispatcher> implements channels.RequestChannel {\n  _type_Request: boolean;\n  private _browserContextDispatcher: BrowserContextDispatcher;\n\n  static from(scope: BrowserContextDispatcher, request: Request): RequestDispatcher {\n    const result = scope.connection.existingDispatcher<RequestDispatcher>(request);\n    return result || new RequestDispatcher(scope, request);\n  }\n\n  static fromNullable(scope: BrowserContextDispatcher, request: Request | null): RequestDispatcher | undefined {\n    return request ? RequestDispatcher.from(scope, request) : undefined;\n  }\n\n  private constructor(scope: BrowserContextDispatcher, request: Request) {\n    const postData = request.postDataBuffer();\n    // Always try to attach request to the page, if not, frame.\n    const frame = request.frame();\n    const page = request.frame()?._page;\n    const pageDispatcher = page ? scope.connection.existingDispatcher<PageDispatcher>(page) : null;\n    const frameDispatcher = frame ? FrameDispatcher.from(scope, frame) : null;\n    super(pageDispatcher || frameDispatcher || scope, request, 'Request', {\n      frame: FrameDispatcher.fromNullable(scope, request.frame()),\n      serviceWorker: WorkerDispatcher.fromNullable(scope, request.serviceWorker()),\n      url: request.url(),\n      resourceType: request.resourceType(),\n      method: request.method(),\n      postData: postData === null ? undefined : postData,\n      headers: request.headers(),\n      isNavigationRequest: request.isNavigationRequest(),\n      redirectedFrom: RequestDispatcher.fromNullable(scope, request.redirectedFrom()),\n    });\n    this._type_Request = true;\n    this._browserContextDispatcher = scope;\n  }\n\n  async rawRequestHeaders(params?: channels.RequestRawRequestHeadersParams): Promise<channels.RequestRawRequestHeadersResult> {\n    return { headers: await this._object.rawRequestHeaders() };\n  }\n\n  async response(): Promise<channels.RequestResponseResult> {\n    return { response: ResponseDispatcher.fromNullable(this._browserContextDispatcher, await this._object.response()) };\n  }\n}\n\nexport class ResponseDispatcher extends Dispatcher<Response, channels.ResponseChannel, RequestDispatcher> implements channels.ResponseChannel {\n  _type_Response = true;\n\n  static from(scope: BrowserContextDispatcher, response: Response): ResponseDispatcher {\n    const result = scope.connection.existingDispatcher<ResponseDispatcher>(response);\n    const requestDispatcher = RequestDispatcher.from(scope, response.request());\n    return result || new ResponseDispatcher(requestDispatcher, response);\n  }\n\n  static fromNullable(scope: BrowserContextDispatcher, response: Response | null): ResponseDispatcher | undefined {\n    return response ? ResponseDispatcher.from(scope, response) : undefined;\n  }\n\n  private constructor(scope: RequestDispatcher, response: Response) {\n    super(scope, response, 'Response', {\n      // TODO: responses in popups can point to non-reported requests.\n      request: scope,\n      url: response.url(),\n      status: response.status(),\n      statusText: response.statusText(),\n      headers: response.headers(),\n      timing: response.timing(),\n      fromServiceWorker: response.fromServiceWorker(),\n    });\n  }\n\n  async body(): Promise<channels.ResponseBodyResult> {\n    return { binary: await this._object.body() };\n  }\n\n  async securityDetails(): Promise<channels.ResponseSecurityDetailsResult> {\n    return { value: await this._object.securityDetails() || undefined };\n  }\n\n  async serverAddr(): Promise<channels.ResponseServerAddrResult> {\n    return { value: await this._object.serverAddr() || undefined };\n  }\n\n  async rawResponseHeaders(params?: channels.ResponseRawResponseHeadersParams): Promise<channels.ResponseRawResponseHeadersResult> {\n    return { headers: await this._object.rawResponseHeaders() };\n  }\n\n  async sizes(params?: channels.ResponseSizesParams): Promise<channels.ResponseSizesResult> {\n    return { sizes: await this._object.sizes() };\n  }\n}\n\nexport class RouteDispatcher extends Dispatcher<Route, channels.RouteChannel, RequestDispatcher> implements channels.RouteChannel {\n  _type_Route = true;\n\n  private _handled = false;\n\n  constructor(scope: RequestDispatcher, route: Route) {\n    super(scope, route, 'Route', {\n      // Context route can point to a non-reported request, so we send the request in the initializer.\n      request: scope\n    });\n  }\n\n  private _checkNotHandled() {\n    if (this._handled)\n      throw new Error('Route is already handled!');\n    this._handled = true;\n  }\n\n  async continue(params: channels.RouteContinueParams, metadata: CallMetadata): Promise<channels.RouteContinueResult> {\n    this._checkNotHandled();\n    await this._object.continue({\n      url: params.url,\n      method: params.method,\n      headers: params.headers,\n      postData: params.postData,\n      isFallback: params.isFallback,\n    });\n  }\n\n  async fulfill(params: channels.RouteFulfillParams, metadata: CallMetadata): Promise<void> {\n    this._checkNotHandled();\n    await this._object.fulfill(params);\n  }\n\n  async abort(params: channels.RouteAbortParams, metadata: CallMetadata): Promise<void> {\n    this._checkNotHandled();\n    await this._object.abort(params.errorCode || 'failed');\n  }\n\n  async redirectNavigationRequest(params: channels.RouteRedirectNavigationRequestParams): Promise<void> {\n    this._checkNotHandled();\n    await this._object.redirectNavigationRequest(params.url);\n  }\n}\n\nexport class WebSocketDispatcher extends Dispatcher<WebSocket, channels.WebSocketChannel, PageDispatcher> implements channels.WebSocketChannel {\n  _type_EventTarget = true;\n  _type_WebSocket = true;\n\n  constructor(scope: PageDispatcher, webSocket: WebSocket) {\n    super(scope, webSocket, 'WebSocket', {\n      url: webSocket.url(),\n    });\n    this.addObjectListener(WebSocket.Events.FrameSent, (event: { opcode: number, data: string }) => this._dispatchEvent('frameSent', event));\n    this.addObjectListener(WebSocket.Events.FrameReceived, (event: { opcode: number, data: string }) => this._dispatchEvent('frameReceived', event));\n    this.addObjectListener(WebSocket.Events.SocketError, (error: string) => this._dispatchEvent('socketError', { error }));\n    this.addObjectListener(WebSocket.Events.Close, () => this._dispatchEvent('close', {}));\n  }\n}\n\nexport class APIRequestContextDispatcher extends Dispatcher<APIRequestContext, channels.APIRequestContextChannel, RootDispatcher | BrowserContextDispatcher> implements channels.APIRequestContextChannel {\n  _type_APIRequestContext = true;\n\n  static from(scope: RootDispatcher | BrowserContextDispatcher, request: APIRequestContext): APIRequestContextDispatcher {\n    const result = scope.connection.existingDispatcher<APIRequestContextDispatcher>(request);\n    return result || new APIRequestContextDispatcher(scope, request);\n  }\n\n  static fromNullable(scope: RootDispatcher | BrowserContextDispatcher, request: APIRequestContext | null): APIRequestContextDispatcher | undefined {\n    return request ? APIRequestContextDispatcher.from(scope, request) : undefined;\n  }\n\n  private constructor(parentScope: RootDispatcher | BrowserContextDispatcher, request: APIRequestContext) {\n    // We will reparent these to the context below.\n    const tracing = TracingDispatcher.from(parentScope as any as APIRequestContextDispatcher, request.tracing());\n\n    super(parentScope, request, 'APIRequestContext', {\n      tracing,\n    });\n\n    this.adopt(tracing);\n  }\n\n  async storageState(params: channels.APIRequestContextStorageStateParams): Promise<channels.APIRequestContextStorageStateResult> {\n    return this._object.storageState(params.indexedDB);\n  }\n\n  async dispose(params: channels.APIRequestContextDisposeParams, metadata: CallMetadata): Promise<void> {\n    metadata.potentiallyClosesScope = true;\n    await this._object.dispose(params);\n    this._dispose();\n  }\n\n  async fetch(params: channels.APIRequestContextFetchParams, metadata: CallMetadata): Promise<channels.APIRequestContextFetchResult> {\n    const fetchResponse = await this._object.fetch(params, metadata);\n    return {\n      response: {\n        url: fetchResponse.url,\n        status: fetchResponse.status,\n        statusText: fetchResponse.statusText,\n        headers: fetchResponse.headers,\n        fetchUid: fetchResponse.fetchUid\n      }\n    };\n  }\n\n  async fetchResponseBody(params: channels.APIRequestContextFetchResponseBodyParams): Promise<channels.APIRequestContextFetchResponseBodyResult> {\n    return { binary: this._object.fetchResponses.get(params.fetchUid) };\n  }\n\n  async fetchLog(params: channels.APIRequestContextFetchLogParams): Promise<channels.APIRequestContextFetchLogResult> {\n    const log = this._object.fetchLog.get(params.fetchUid) || [];\n    return { log };\n  }\n\n  async disposeAPIResponse(params: channels.APIRequestContextDisposeAPIResponseParams): Promise<void> {\n    this._object.disposeResponse(params.fetchUid);\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// https://www.w3.org/TR/wai-aria-1.2/#role_definitions\n\nexport type AriaRole = 'alert' | 'alertdialog' | 'application' | 'article' | 'banner' | 'blockquote' | 'button' | 'caption' | 'cell' | 'checkbox' | 'code' | 'columnheader' | 'combobox' |\n  'complementary' | 'contentinfo' | 'definition' | 'deletion' | 'dialog' | 'directory' | 'document' | 'emphasis' | 'feed' | 'figure' | 'form' | 'generic' | 'grid' |\n  'gridcell' | 'group' | 'heading' | 'img' | 'insertion' | 'link' | 'list' | 'listbox' | 'listitem' | 'log' | 'main' | 'mark' | 'marquee' | 'math' | 'meter' | 'menu' |\n  'menubar' | 'menuitem' | 'menuitemcheckbox' | 'menuitemradio' | 'navigation' | 'none' | 'note' | 'option' | 'paragraph' | 'presentation' | 'progressbar' | 'radio' | 'radiogroup' |\n  'region' | 'row' | 'rowgroup' | 'rowheader' | 'scrollbar' | 'search' | 'searchbox' | 'separator' | 'slider' |\n  'spinbutton' | 'status' | 'strong' | 'subscript' | 'superscript' | 'switch' | 'tab' | 'table' | 'tablist' | 'tabpanel' | 'term' | 'textbox' | 'time' | 'timer' |\n  'toolbar' | 'tooltip' | 'tree' | 'treegrid' | 'treeitem';\n\nexport type AriaProps = {\n  checked?: boolean | 'mixed';\n  disabled?: boolean;\n  expanded?: boolean;\n  level?: number;\n  pressed?: boolean | 'mixed';\n  selected?: boolean;\n};\n\n// We pass parsed template between worlds using JSON, make it easy.\nexport type AriaRegex = { pattern: string };\n\nexport type AriaTemplateTextNode = {\n  kind: 'text';\n  text: AriaRegex | string;\n};\n\nexport type AriaTemplateRoleNode = AriaProps & {\n  kind: 'role';\n  role: AriaRole | 'fragment';\n  name?: AriaRegex | string;\n  children?: AriaTemplateNode[];\n  props?: Record<string, string | AriaRegex>;\n  containerMode?: 'contain' | 'equal' | 'deep-equal';\n};\n\nexport type AriaTemplateNode = AriaTemplateRoleNode | AriaTemplateTextNode;\n\nimport type * as yamlTypes from 'yaml';\n\ntype YamlLibrary = {\n  parseDocument: typeof yamlTypes.parseDocument;\n  Scalar: typeof yamlTypes.Scalar;\n  YAMLMap: typeof yamlTypes.YAMLMap;\n  YAMLSeq: typeof yamlTypes.YAMLSeq;\n  LineCounter: typeof yamlTypes.LineCounter;\n};\n\ntype ParsedYamlPosition = { line: number; col: number; };\n\nexport type ParsedYamlError = {\n  message: string;\n  range: [ParsedYamlPosition, ParsedYamlPosition];\n};\n\nexport function parseAriaSnapshotUnsafe(yaml: YamlLibrary, text: string): AriaTemplateNode {\n  const result = parseAriaSnapshot(yaml, text);\n  if (result.errors.length)\n    throw new Error(result.errors[0].message);\n  return result.fragment;\n}\n\nexport function parseAriaSnapshot(yaml: YamlLibrary, text: string, options: yamlTypes.ParseOptions = {}): { fragment: AriaTemplateNode, errors: ParsedYamlError[] } {\n  const lineCounter = new yaml.LineCounter();\n  const parseOptions: yamlTypes.ParseOptions = {\n    keepSourceTokens: true,\n    lineCounter,\n    ...options,\n  };\n  const yamlDoc = yaml.parseDocument(text, parseOptions);\n  const errors: ParsedYamlError[] = [];\n\n  const convertRange = (range: [number, number] | yamlTypes.Range): [ParsedYamlPosition, ParsedYamlPosition] => {\n    return [lineCounter.linePos(range[0]), lineCounter.linePos(range[1])];\n  };\n\n  const addError = (error: yamlTypes.YAMLError) => {\n    errors.push({\n      message: error.message,\n      range: [lineCounter.linePos(error.pos[0]), lineCounter.linePos(error.pos[1])],\n    });\n  };\n\n  const convertSeq = (container: AriaTemplateRoleNode, seq: yamlTypes.YAMLSeq) => {\n    for (const item of seq.items) {\n      const itemIsString = item instanceof yaml.Scalar && typeof item.value === 'string';\n      if (itemIsString) {\n        const childNode = KeyParser.parse(item, parseOptions, errors);\n        if (childNode) {\n          container.children = container.children || [];\n          container.children.push(childNode);\n        }\n        continue;\n      }\n      const itemIsMap = item instanceof yaml.YAMLMap;\n      if (itemIsMap) {\n        convertMap(container, item);\n        continue;\n      }\n      errors.push({\n        message: 'Sequence items should be strings or maps',\n        range: convertRange((item as any).range || seq.range),\n      });\n    }\n  };\n\n  const convertMap = (container: AriaTemplateRoleNode, map: yamlTypes.YAMLMap) => {\n    for (const entry of map.items) {\n      container.children = container.children || [];\n      // Key must by a string\n      const keyIsString = entry.key instanceof yaml.Scalar && typeof entry.key.value === 'string';\n      if (!keyIsString) {\n        errors.push({\n          message: 'Only string keys are supported',\n          range: convertRange((entry.key as any).range || map.range),\n        });\n        continue;\n      }\n\n      const key: yamlTypes.Scalar<string> = entry.key as yamlTypes.Scalar<string>;\n      const value = entry.value;\n\n      // - text: \"text\"\n      if (key.value === 'text') {\n        const valueIsString = value instanceof yaml.Scalar && typeof value.value === 'string';\n        if (!valueIsString) {\n          errors.push({\n            message: 'Text value should be a string',\n            range: convertRange(((entry.value as any).range || map.range)),\n          });\n          continue;\n        }\n        container.children.push({\n          kind: 'text',\n          text: valueOrRegex(value.value)\n        });\n        continue;\n      }\n\n      // - /children: equal\n      if (key.value === '/children') {\n        const valueIsString = value instanceof yaml.Scalar && typeof value.value === 'string';\n        if (!valueIsString || (value.value !== 'contain' && value.value !== 'equal' && value.value !== 'deep-equal')) {\n          errors.push({\n            message: 'Strict value should be \"contain\", \"equal\" or \"deep-equal\"',\n            range: convertRange(((entry.value as any).range || map.range)),\n          });\n          continue;\n        }\n        container.containerMode = value.value;\n        continue;\n      }\n\n      // - /url: \"about:blank\"\n      if (key.value.startsWith('/')) {\n        const valueIsString = value instanceof yaml.Scalar && typeof value.value === 'string';\n        if (!valueIsString) {\n          errors.push({\n            message: 'Property value should be a string',\n            range: convertRange(((entry.value as any).range || map.range)),\n          });\n          continue;\n        }\n        container.props = container.props ?? {};\n        container.props[key.value.slice(1)] = valueOrRegex(value.value);\n        continue;\n      }\n\n      // role \"name\": ...\n      const childNode = KeyParser.parse(key, parseOptions, errors);\n      if (!childNode)\n        continue;\n\n      // - role \"name\": \"text\"\n      const valueIsScalar = value instanceof yaml.Scalar;\n      if (valueIsScalar) {\n        const type = typeof value.value;\n        if (type !== 'string' && type !== 'number' && type !== 'boolean') {\n          errors.push({\n            message: 'Node value should be a string or a sequence',\n            range: convertRange(((entry.value as any).range || map.range)),\n          });\n          continue;\n        }\n\n        container.children.push({\n          ...childNode,\n          children: [{\n            kind: 'text',\n            text: valueOrRegex(String(value.value))\n          }]\n        });\n        continue;\n      }\n\n      // - role \"name\":\n      //   - child\n      const valueIsSequence = value instanceof yaml.YAMLSeq;\n      if (valueIsSequence) {\n        container.children.push(childNode);\n        convertSeq(childNode, value as yamlTypes.YAMLSeq);\n        continue;\n      }\n\n      errors.push({\n        message: 'Map values should be strings or sequences',\n        range: convertRange((entry.value as any).range || map.range),\n      });\n    }\n  };\n\n  const fragment: AriaTemplateNode = { kind: 'role', role: 'fragment' };\n\n  yamlDoc.errors.forEach(addError);\n  if (errors.length)\n    return { errors, fragment };\n\n  if (!(yamlDoc.contents instanceof yaml.YAMLSeq)) {\n    errors.push({\n      message: 'Aria snapshot must be a YAML sequence, elements starting with \" -\"',\n      range: yamlDoc.contents ? convertRange(yamlDoc.contents!.range) : [{ line: 0, col: 0 }, { line: 0, col: 0 }],\n    });\n  }\n  if (errors.length)\n    return { errors, fragment };\n\n  convertSeq(fragment, yamlDoc.contents as yamlTypes.YAMLSeq);\n  if (errors.length)\n    return { errors, fragment: emptyFragment };\n  if (fragment.children?.length === 1)\n    return { fragment: fragment.children[0], errors };\n  return { fragment, errors };\n}\n\nconst emptyFragment: AriaTemplateRoleNode = { kind: 'role', role: 'fragment' };\n\nfunction normalizeWhitespace(text: string) {\n  // TODO: why is this different from normalizeWhitespace in stringUtils.ts?\n  return text.replace(/[\\u200b\\u00ad]/g, '').replace(/[\\r\\n\\s\\t]+/g, ' ').trim();\n}\n\nexport function valueOrRegex(value: string): string | AriaRegex {\n  return value.startsWith('/') && value.endsWith('/') && value.length > 1 ? { pattern: value.slice(1, -1) } : normalizeWhitespace(value);\n}\n\nexport class KeyParser {\n  private _input: string;\n  private _pos: number;\n  private _length: number;\n\n  static parse(text: yamlTypes.Scalar<string>, options: yamlTypes.ParseOptions, errors: ParsedYamlError[]): AriaTemplateRoleNode | null {\n    try {\n      return new KeyParser(text.value)._parse();\n    } catch (e) {\n      if (e instanceof ParserError) {\n        const message = options.prettyErrors === false ? e.message : e.message + ':\\n\\n' + text.value + '\\n' + ' '.repeat(e.pos) + '^\\n';\n        errors.push({\n          message,\n          range: [options.lineCounter!.linePos(text.range![0]), options.lineCounter!.linePos(text.range![0] + e.pos)],\n        });\n        return null;\n      }\n      throw e;\n    }\n  }\n\n  constructor(input: string) {\n    this._input = input;\n    this._pos = 0;\n    this._length = input.length;\n  }\n\n  private _peek() {\n    return this._input[this._pos] || '';\n  }\n\n  private _next() {\n    if (this._pos < this._length)\n      return this._input[this._pos++];\n    return null;\n  }\n\n  private _eof() {\n    return this._pos >= this._length;\n  }\n\n  private _isWhitespace() {\n    return !this._eof() && /\\s/.test(this._peek());\n  }\n\n  private _skipWhitespace() {\n    while (this._isWhitespace())\n      this._pos++;\n  }\n\n  private _readIdentifier(type: 'role' | 'attribute'): string {\n    if (this._eof())\n      this._throwError(`Unexpected end of input when expecting ${type}`);\n    const start = this._pos;\n    while (!this._eof() && /[a-zA-Z]/.test(this._peek()))\n      this._pos++;\n    return this._input.slice(start, this._pos);\n  }\n\n  private _readString(): string {\n    let result = '';\n    let escaped = false;\n    while (!this._eof()) {\n      const ch = this._next();\n      if (escaped) {\n        result += ch;\n        escaped = false;\n      } else if (ch === '\\\\') {\n        escaped = true;\n      } else if (ch === '\"') {\n        return result;\n      } else {\n        result += ch;\n      }\n    }\n    this._throwError('Unterminated string');\n  }\n\n  private _throwError(message: string, offset: number = 0): never {\n    throw new ParserError(message, offset || this._pos);\n  }\n\n  private _readRegex(): AriaRegex {\n    let result = '';\n    let escaped = false;\n    let insideClass = false;\n    while (!this._eof()) {\n      const ch = this._next();\n      if (escaped) {\n        result += ch;\n        escaped = false;\n      } else if (ch === '\\\\') {\n        escaped = true;\n        result += ch;\n      } else if (ch === '/' && !insideClass) {\n        return { pattern: result };\n      } else if (ch === '[') {\n        insideClass = true;\n        result += ch;\n      } else if (ch === ']' && insideClass) {\n        result += ch;\n        insideClass = false;\n      } else {\n        result += ch;\n      }\n    }\n    this._throwError('Unterminated regex');\n  }\n\n  private _readStringOrRegex(): string | AriaRegex | null {\n    const ch = this._peek();\n    if (ch === '\"') {\n      this._next();\n      return normalizeWhitespace(this._readString());\n    }\n\n    if (ch === '/') {\n      this._next();\n      return this._readRegex();\n    }\n\n    return null;\n  }\n\n  private _readAttributes(result: AriaTemplateRoleNode) {\n    let errorPos = this._pos;\n    while (true) {\n      this._skipWhitespace();\n      if (this._peek() === '[') {\n        this._next();\n        this._skipWhitespace();\n        errorPos = this._pos;\n        const flagName = this._readIdentifier('attribute');\n        this._skipWhitespace();\n        let flagValue = '';\n        if (this._peek() === '=') {\n          this._next();\n          this._skipWhitespace();\n          errorPos = this._pos;\n          while (this._peek() !== ']' && !this._isWhitespace() && !this._eof())\n            flagValue += this._next();\n        }\n        this._skipWhitespace();\n        if (this._peek() !== ']')\n          this._throwError('Expected ]');\n\n        this._next(); // Consume ']'\n        this._applyAttribute(result, flagName, flagValue || 'true', errorPos);\n      } else {\n        break;\n      }\n    }\n  }\n\n  _parse(): AriaTemplateRoleNode {\n    this._skipWhitespace();\n\n    const role = this._readIdentifier('role') as AriaTemplateRoleNode['role'];\n    this._skipWhitespace();\n    const name = this._readStringOrRegex() || '';\n    const result: AriaTemplateRoleNode = { kind: 'role', role, name };\n    this._readAttributes(result);\n    this._skipWhitespace();\n    if (!this._eof())\n      this._throwError('Unexpected input');\n    return result;\n  }\n\n  private _applyAttribute(node: AriaTemplateRoleNode, key: string, value: string, errorPos: number) {\n    if (key === 'checked') {\n      this._assert(value === 'true' || value === 'false' || value === 'mixed', 'Value of \"checked\\\" attribute must be a boolean or \"mixed\"', errorPos);\n      node.checked = value === 'true' ? true : value === 'false' ? false : 'mixed';\n      return;\n    }\n    if (key === 'disabled') {\n      this._assert(value === 'true' || value === 'false', 'Value of \"disabled\" attribute must be a boolean', errorPos);\n      node.disabled = value === 'true';\n      return;\n    }\n    if (key === 'expanded') {\n      this._assert(value === 'true' || value === 'false', 'Value of \"expanded\" attribute must be a boolean', errorPos);\n      node.expanded = value === 'true';\n      return;\n    }\n    if (key === 'level') {\n      this._assert(!isNaN(Number(value)), 'Value of \"level\" attribute must be a number', errorPos);\n      node.level = Number(value);\n      return;\n    }\n    if (key === 'pressed') {\n      this._assert(value === 'true' || value === 'false' || value === 'mixed', 'Value of \"pressed\" attribute must be a boolean or \"mixed\"', errorPos);\n      node.pressed = value === 'true' ? true : value === 'false' ? false : 'mixed';\n      return;\n    }\n    if (key === 'selected') {\n      this._assert(value === 'true' || value === 'false', 'Value of \"selected\" attribute must be a boolean', errorPos);\n      node.selected = value === 'true';\n      return;\n    }\n    this._assert(false, `Unsupported attribute [${key}]`, errorPos);\n  }\n\n  private _assert(value: any, message: string, valuePos: number): asserts value {\n    if (!value)\n      this._throwError(message || 'Assertion error', valuePos);\n  }\n}\n\nexport class ParserError extends Error {\n  readonly pos: number;\n\n  constructor(message: string, pos: number) {\n    super(message);\n    this.pos = pos;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Frame } from '../frames';\nimport { Dispatcher } from './dispatcher';\nimport { ElementHandleDispatcher } from './elementHandlerDispatcher';\nimport { parseArgument, serializeResult } from './jsHandleDispatcher';\nimport { ResponseDispatcher } from './networkDispatchers';\nimport { RequestDispatcher } from './networkDispatchers';\nimport { parseAriaSnapshotUnsafe } from '../../utils/isomorphic/ariaSnapshot';\nimport { yaml } from '../../utilsBundle';\n\nimport type { CallMetadata } from '../instrumentation';\nimport type { BrowserContextDispatcher } from './browserContextDispatcher';\nimport type { PageDispatcher } from './pageDispatcher';\nimport type { NavigationEvent } from '../frames';\nimport type * as channels from '@protocol/channels';\n\nexport class FrameDispatcher extends Dispatcher<Frame, channels.FrameChannel, BrowserContextDispatcher | PageDispatcher> implements channels.FrameChannel {\n  _type_Frame = true;\n  private _frame: Frame;\n  private _browserContextDispatcher: BrowserContextDispatcher;\n\n  static from(scope: BrowserContextDispatcher, frame: Frame): FrameDispatcher {\n    const result = scope.connection.existingDispatcher<FrameDispatcher>(frame);\n    return result || new FrameDispatcher(scope, frame);\n  }\n\n  static fromNullable(scope: BrowserContextDispatcher, frame: Frame | null): FrameDispatcher | undefined {\n    if (!frame)\n      return;\n    return FrameDispatcher.from(scope, frame);\n  }\n\n  private constructor(scope: BrowserContextDispatcher, frame: Frame) {\n    // Main frames are gc'ed separately from any other frames, so that\n    // methods on Page that redirect to the main frame remain operational.\n    // Note: we cannot check parentFrame() here because it may be null after the frame has been detached.\n    const gcBucket = frame._page.mainFrame() === frame ? 'MainFrame' : 'Frame';\n    const pageDispatcher = scope.connection.existingDispatcher<PageDispatcher>(frame._page);\n    super(pageDispatcher || scope, frame, 'Frame', {\n      url: frame.url(),\n      name: frame.name(),\n      parentFrame: FrameDispatcher.fromNullable(scope, frame.parentFrame()),\n      loadStates: Array.from(frame._firedLifecycleEvents),\n    }, gcBucket);\n    this._browserContextDispatcher = scope;\n    this._frame = frame;\n    this.addObjectListener(Frame.Events.AddLifecycle, lifecycleEvent => {\n      this._dispatchEvent('loadstate', { add: lifecycleEvent });\n    });\n    this.addObjectListener(Frame.Events.RemoveLifecycle, lifecycleEvent => {\n      this._dispatchEvent('loadstate', { remove: lifecycleEvent });\n    });\n    this.addObjectListener(Frame.Events.InternalNavigation, (event: NavigationEvent) => {\n      if (!event.isPublic)\n        return;\n      const params = { url: event.url, name: event.name, error: event.error ? event.error.message : undefined };\n      if (event.newDocument)\n        (params as any).newDocument = { request: RequestDispatcher.fromNullable(this._browserContextDispatcher, event.newDocument.request || null) };\n      this._dispatchEvent('navigated', params);\n    });\n  }\n\n  async goto(params: channels.FrameGotoParams, metadata: CallMetadata): Promise<channels.FrameGotoResult> {\n    return { response: ResponseDispatcher.fromNullable(this._browserContextDispatcher, await this._frame.goto(metadata, params.url, params)) };\n  }\n\n  async frameElement(): Promise<channels.FrameFrameElementResult> {\n    return { element: ElementHandleDispatcher.from(this, await this._frame.frameElement()) };\n  }\n\n  async evaluateExpression(params: channels.FrameEvaluateExpressionParams, metadata: CallMetadata): Promise<channels.FrameEvaluateExpressionResult> {\n    return { value: serializeResult(await this._frame.evaluateExpression(params.expression, { isFunction: params.isFunction }, parseArgument(params.arg))) };\n  }\n\n  async evaluateExpressionHandle(params: channels.FrameEvaluateExpressionHandleParams, metadata: CallMetadata): Promise<channels.FrameEvaluateExpressionHandleResult> {\n    return { handle: ElementHandleDispatcher.fromJSOrElementHandle(this, await this._frame.evaluateExpressionHandle(params.expression, { isFunction: params.isFunction }, parseArgument(params.arg))) };\n  }\n\n  async waitForSelector(params: channels.FrameWaitForSelectorParams, metadata: CallMetadata): Promise<channels.FrameWaitForSelectorResult> {\n    return { element: ElementHandleDispatcher.fromNullable(this, await this._frame.waitForSelector(metadata, params.selector, params)) };\n  }\n\n  async dispatchEvent(params: channels.FrameDispatchEventParams, metadata: CallMetadata): Promise<void> {\n    return this._frame.dispatchEvent(metadata, params.selector, params.type, parseArgument(params.eventInit), params);\n  }\n\n  async evalOnSelector(params: channels.FrameEvalOnSelectorParams, metadata: CallMetadata): Promise<channels.FrameEvalOnSelectorResult> {\n    return { value: serializeResult(await this._frame.evalOnSelector(params.selector, !!params.strict, params.expression, params.isFunction, parseArgument(params.arg))) };\n  }\n\n  async evalOnSelectorAll(params: channels.FrameEvalOnSelectorAllParams, metadata: CallMetadata): Promise<channels.FrameEvalOnSelectorAllResult> {\n    return { value: serializeResult(await this._frame.evalOnSelectorAll(params.selector, params.expression, params.isFunction, parseArgument(params.arg))) };\n  }\n\n  async querySelector(params: channels.FrameQuerySelectorParams, metadata: CallMetadata): Promise<channels.FrameQuerySelectorResult> {\n    return { element: ElementHandleDispatcher.fromNullable(this, await this._frame.querySelector(params.selector, params)) };\n  }\n\n  async querySelectorAll(params: channels.FrameQuerySelectorAllParams, metadata: CallMetadata): Promise<channels.FrameQuerySelectorAllResult> {\n    const elements = await this._frame.querySelectorAll(params.selector);\n    return { elements: elements.map(e => ElementHandleDispatcher.from(this, e)) };\n  }\n\n  async queryCount(params: channels.FrameQueryCountParams): Promise<channels.FrameQueryCountResult> {\n    return { value: await this._frame.queryCount(params.selector) };\n  }\n\n  async content(): Promise<channels.FrameContentResult> {\n    return { value: await this._frame.content() };\n  }\n\n  async setContent(params: channels.FrameSetContentParams, metadata: CallMetadata): Promise<void> {\n    return await this._frame.setContent(metadata, params.html, params);\n  }\n\n  async addScriptTag(params: channels.FrameAddScriptTagParams, metadata: CallMetadata): Promise<channels.FrameAddScriptTagResult> {\n    return { element: ElementHandleDispatcher.from(this, await this._frame.addScriptTag(params)) };\n  }\n\n  async addStyleTag(params: channels.FrameAddStyleTagParams, metadata: CallMetadata): Promise<channels.FrameAddStyleTagResult> {\n    return { element: ElementHandleDispatcher.from(this, await this._frame.addStyleTag(params)) };\n  }\n\n  async click(params: channels.FrameClickParams, metadata: CallMetadata): Promise<void> {\n    metadata.potentiallyClosesScope = true;\n    return await this._frame.click(metadata, params.selector, params);\n  }\n\n  async dblclick(params: channels.FrameDblclickParams, metadata: CallMetadata): Promise<void> {\n    return await this._frame.dblclick(metadata, params.selector, params);\n  }\n\n  async dragAndDrop(params: channels.FrameDragAndDropParams, metadata: CallMetadata): Promise<void> {\n    return await this._frame.dragAndDrop(metadata, params.source, params.target, params);\n  }\n\n  async tap(params: channels.FrameTapParams, metadata: CallMetadata): Promise<void> {\n    return await this._frame.tap(metadata, params.selector, params);\n  }\n\n  async fill(params: channels.FrameFillParams, metadata: CallMetadata): Promise<void> {\n    return await this._frame.fill(metadata, params.selector, params.value, params);\n  }\n\n  async focus(params: channels.FrameFocusParams, metadata: CallMetadata): Promise<void> {\n    await this._frame.focus(metadata, params.selector, params);\n  }\n\n  async blur(params: channels.FrameBlurParams, metadata: CallMetadata): Promise<void> {\n    await this._frame.blur(metadata, params.selector, params);\n  }\n\n  async textContent(params: channels.FrameTextContentParams, metadata: CallMetadata): Promise<channels.FrameTextContentResult> {\n    const value = await this._frame.textContent(metadata, params.selector, params);\n    return { value: value === null ? undefined : value };\n  }\n\n  async innerText(params: channels.FrameInnerTextParams, metadata: CallMetadata): Promise<channels.FrameInnerTextResult> {\n    return { value: await this._frame.innerText(metadata, params.selector, params) };\n  }\n\n  async innerHTML(params: channels.FrameInnerHTMLParams, metadata: CallMetadata): Promise<channels.FrameInnerHTMLResult> {\n    return { value: await this._frame.innerHTML(metadata, params.selector, params) };\n  }\n\n  async getAttribute(params: channels.FrameGetAttributeParams, metadata: CallMetadata): Promise<channels.FrameGetAttributeResult> {\n    const value = await this._frame.getAttribute(metadata, params.selector, params.name, params);\n    return { value: value === null ? undefined : value };\n  }\n\n  async inputValue(params: channels.FrameInputValueParams, metadata: CallMetadata): Promise<channels.FrameInputValueResult> {\n    const value = await this._frame.inputValue(metadata, params.selector, params);\n    return { value };\n  }\n\n  async isChecked(params: channels.FrameIsCheckedParams, metadata: CallMetadata): Promise<channels.FrameIsCheckedResult> {\n    return { value: await this._frame.isChecked(metadata, params.selector, params) };\n  }\n\n  async isDisabled(params: channels.FrameIsDisabledParams, metadata: CallMetadata): Promise<channels.FrameIsDisabledResult> {\n    return { value: await this._frame.isDisabled(metadata, params.selector, params) };\n  }\n\n  async isEditable(params: channels.FrameIsEditableParams, metadata: CallMetadata): Promise<channels.FrameIsEditableResult> {\n    return { value: await this._frame.isEditable(metadata, params.selector, params) };\n  }\n\n  async isEnabled(params: channels.FrameIsEnabledParams, metadata: CallMetadata): Promise<channels.FrameIsEnabledResult> {\n    return { value: await this._frame.isEnabled(metadata, params.selector, params) };\n  }\n\n  async isHidden(params: channels.FrameIsHiddenParams, metadata: CallMetadata): Promise<channels.FrameIsHiddenResult> {\n    return { value: await this._frame.isHidden(metadata, params.selector, params) };\n  }\n\n  async isVisible(params: channels.FrameIsVisibleParams, metadata: CallMetadata): Promise<channels.FrameIsVisibleResult> {\n    return { value: await this._frame.isVisible(metadata, params.selector, params) };\n  }\n\n  async hover(params: channels.FrameHoverParams, metadata: CallMetadata): Promise<void> {\n    return await this._frame.hover(metadata, params.selector, params);\n  }\n\n  async selectOption(params: channels.FrameSelectOptionParams, metadata: CallMetadata): Promise<channels.FrameSelectOptionResult> {\n    const elements = (params.elements || []).map(e => (e as ElementHandleDispatcher)._elementHandle);\n    return { values: await this._frame.selectOption(metadata, params.selector, elements, params.options || [], params) };\n  }\n\n  async setInputFiles(params: channels.FrameSetInputFilesParams, metadata: CallMetadata): Promise<channels.FrameSetInputFilesResult> {\n    return await this._frame.setInputFiles(metadata, params.selector, params);\n  }\n\n  async type(params: channels.FrameTypeParams, metadata: CallMetadata): Promise<void> {\n    return await this._frame.type(metadata, params.selector, params.text, params);\n  }\n\n  async press(params: channels.FramePressParams, metadata: CallMetadata): Promise<void> {\n    return await this._frame.press(metadata, params.selector, params.key, params);\n  }\n\n  async check(params: channels.FrameCheckParams, metadata: CallMetadata): Promise<void> {\n    return await this._frame.check(metadata, params.selector, params);\n  }\n\n  async uncheck(params: channels.FrameUncheckParams, metadata: CallMetadata): Promise<void> {\n    return await this._frame.uncheck(metadata, params.selector, params);\n  }\n\n  async waitForTimeout(params: channels.FrameWaitForTimeoutParams, metadata: CallMetadata): Promise<void> {\n    return await this._frame.waitForTimeout(metadata, params.timeout);\n  }\n\n  async waitForFunction(params: channels.FrameWaitForFunctionParams, metadata: CallMetadata): Promise<channels.FrameWaitForFunctionResult> {\n    return { handle: ElementHandleDispatcher.fromJSOrElementHandle(this, await this._frame._waitForFunctionExpression(metadata, params.expression, params.isFunction, parseArgument(params.arg), params)) };\n  }\n\n  async title(params: channels.FrameTitleParams, metadata: CallMetadata): Promise<channels.FrameTitleResult> {\n    return { value: await this._frame.title() };\n  }\n\n  async highlight(params: channels.FrameHighlightParams, metadata: CallMetadata): Promise<void> {\n    return await this._frame.highlight(params.selector);\n  }\n\n  async expect(params: channels.FrameExpectParams, metadata: CallMetadata): Promise<channels.FrameExpectResult> {\n    metadata.potentiallyClosesScope = true;\n    let expectedValue = params.expectedValue ? parseArgument(params.expectedValue) : undefined;\n    if (params.expression === 'to.match.aria' && expectedValue)\n      expectedValue = parseAriaSnapshotUnsafe(yaml, expectedValue);\n    const result = await this._frame.expect(metadata, params.selector, { ...params, expectedValue });\n    if (result.received !== undefined)\n      result.received = serializeResult(result.received);\n    return result;\n  }\n\n  async ariaSnapshot(params: channels.FrameAriaSnapshotParams, metadata: CallMetadata): Promise<channels.FrameAriaSnapshotResult> {\n    return { snapshot: await this._frame.ariaSnapshot(metadata, params.selector, params) };\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BrowserContextDispatcher } from './browserContextDispatcher';\nimport { FrameDispatcher } from './frameDispatcher';\nimport { JSHandleDispatcher, parseArgument, serializeResult } from './jsHandleDispatcher';\n\nimport type { ElementHandle } from '../dom';\nimport type { Frame } from '../frames';\nimport type { CallMetadata } from '../instrumentation';\nimport type * as js from '../javascript';\nimport type * as channels from '@protocol/channels';\n\n\nexport class ElementHandleDispatcher extends JSHandleDispatcher<FrameDispatcher> implements channels.ElementHandleChannel {\n  _type_ElementHandle = true;\n\n  readonly _elementHandle: ElementHandle;\n\n  static from(scope: FrameDispatcher, handle: ElementHandle): ElementHandleDispatcher {\n    return scope.connection.existingDispatcher<ElementHandleDispatcher>(handle) || new ElementHandleDispatcher(scope, handle);\n  }\n\n  static fromNullable(scope: FrameDispatcher, handle: ElementHandle | null): ElementHandleDispatcher | undefined {\n    if (!handle)\n      return undefined;\n    return scope.connection.existingDispatcher<ElementHandleDispatcher>(handle) || new ElementHandleDispatcher(scope, handle);\n  }\n\n  static fromJSOrElementHandle(scope: FrameDispatcher, handle: js.JSHandle): JSHandleDispatcher {\n    const result = scope.connection.existingDispatcher<JSHandleDispatcher>(handle);\n    if (result)\n      return result;\n    const elementHandle = handle.asElement();\n    if (!elementHandle)\n      return new JSHandleDispatcher(scope, handle);\n    return new ElementHandleDispatcher(scope, elementHandle);\n  }\n\n  private constructor(scope: FrameDispatcher, elementHandle: ElementHandle) {\n    super(scope, elementHandle);\n    this._elementHandle = elementHandle;\n  }\n\n  async ownerFrame(params: channels.ElementHandleOwnerFrameParams, metadata: CallMetadata): Promise<channels.ElementHandleOwnerFrameResult> {\n    const frame = await this._elementHandle.ownerFrame();\n    return { frame: frame ? FrameDispatcher.from(this._browserContextDispatcher(), frame) : undefined };\n  }\n\n  async contentFrame(params: channels.ElementHandleContentFrameParams, metadata: CallMetadata): Promise<channels.ElementHandleContentFrameResult> {\n    const frame = await this._elementHandle.contentFrame();\n    return { frame: frame ? FrameDispatcher.from(this._browserContextDispatcher(), frame) : undefined };\n  }\n\n  async generateLocatorString(params: channels.ElementHandleGenerateLocatorStringParams, metadata: CallMetadata): Promise<channels.ElementHandleGenerateLocatorStringResult> {\n    return { value: await this._elementHandle.generateLocatorString() };\n  }\n\n  async getAttribute(params: channels.ElementHandleGetAttributeParams, metadata: CallMetadata): Promise<channels.ElementHandleGetAttributeResult> {\n    const value = await this._elementHandle.getAttribute(metadata, params.name);\n    return { value: value === null ? undefined : value };\n  }\n\n  async inputValue(params: channels.ElementHandleInputValueParams, metadata: CallMetadata): Promise<channels.ElementHandleInputValueResult> {\n    const value = await this._elementHandle.inputValue(metadata);\n    return { value };\n  }\n\n  async textContent(params: channels.ElementHandleTextContentParams, metadata: CallMetadata): Promise<channels.ElementHandleTextContentResult> {\n    const value = await this._elementHandle.textContent(metadata);\n    return { value: value === null ? undefined : value };\n  }\n\n  async innerText(params: channels.ElementHandleInnerTextParams, metadata: CallMetadata): Promise<channels.ElementHandleInnerTextResult> {\n    return { value: await this._elementHandle.innerText(metadata) };\n  }\n\n  async innerHTML(params: channels.ElementHandleInnerHTMLParams, metadata: CallMetadata): Promise<channels.ElementHandleInnerHTMLResult> {\n    return { value: await this._elementHandle.innerHTML(metadata) };\n  }\n\n  async isChecked(params: channels.ElementHandleIsCheckedParams, metadata: CallMetadata): Promise<channels.ElementHandleIsCheckedResult> {\n    return { value: await this._elementHandle.isChecked(metadata) };\n  }\n\n  async isDisabled(params: channels.ElementHandleIsDisabledParams, metadata: CallMetadata): Promise<channels.ElementHandleIsDisabledResult> {\n    return { value: await this._elementHandle.isDisabled(metadata) };\n  }\n\n  async isEditable(params: channels.ElementHandleIsEditableParams, metadata: CallMetadata): Promise<channels.ElementHandleIsEditableResult> {\n    return { value: await this._elementHandle.isEditable(metadata) };\n  }\n\n  async isEnabled(params: channels.ElementHandleIsEnabledParams, metadata: CallMetadata): Promise<channels.ElementHandleIsEnabledResult> {\n    return { value: await this._elementHandle.isEnabled(metadata) };\n  }\n\n  async isHidden(params: channels.ElementHandleIsHiddenParams, metadata: CallMetadata): Promise<channels.ElementHandleIsHiddenResult> {\n    return { value: await this._elementHandle.isHidden(metadata) };\n  }\n\n  async isVisible(params: channels.ElementHandleIsVisibleParams, metadata: CallMetadata): Promise<channels.ElementHandleIsVisibleResult> {\n    return { value: await this._elementHandle.isVisible(metadata) };\n  }\n\n  async dispatchEvent(params: channels.ElementHandleDispatchEventParams, metadata: CallMetadata): Promise<void> {\n    await this._elementHandle.dispatchEvent(metadata, params.type, parseArgument(params.eventInit));\n  }\n\n  async scrollIntoViewIfNeeded(params: channels.ElementHandleScrollIntoViewIfNeededParams, metadata: CallMetadata): Promise<void> {\n    await this._elementHandle.scrollIntoViewIfNeeded(metadata, params);\n  }\n\n  async hover(params: channels.ElementHandleHoverParams, metadata: CallMetadata): Promise<void> {\n    return await this._elementHandle.hover(metadata, params);\n  }\n\n  async click(params: channels.ElementHandleClickParams, metadata: CallMetadata): Promise<void> {\n    return await this._elementHandle.click(metadata, params);\n  }\n\n  async dblclick(params: channels.ElementHandleDblclickParams, metadata: CallMetadata): Promise<void> {\n    return await this._elementHandle.dblclick(metadata, params);\n  }\n\n  async tap(params: channels.ElementHandleTapParams, metadata: CallMetadata): Promise<void> {\n    return await this._elementHandle.tap(metadata, params);\n  }\n\n  async selectOption(params: channels.ElementHandleSelectOptionParams, metadata: CallMetadata): Promise<channels.ElementHandleSelectOptionResult> {\n    const elements = (params.elements || []).map(e => (e as ElementHandleDispatcher)._elementHandle);\n    return { values: await this._elementHandle.selectOption(metadata, elements, params.options || [], params) };\n  }\n\n  async fill(params: channels.ElementHandleFillParams, metadata: CallMetadata): Promise<void> {\n    return await this._elementHandle.fill(metadata, params.value, params);\n  }\n\n  async selectText(params: channels.ElementHandleSelectTextParams, metadata: CallMetadata): Promise<void> {\n    await this._elementHandle.selectText(metadata, params);\n  }\n\n  async setInputFiles(params: channels.ElementHandleSetInputFilesParams, metadata: CallMetadata): Promise<void> {\n    return await this._elementHandle.setInputFiles(metadata, params);\n  }\n\n  async focus(params: channels.ElementHandleFocusParams, metadata: CallMetadata): Promise<void> {\n    await this._elementHandle.focus(metadata);\n  }\n\n  async type(params: channels.ElementHandleTypeParams, metadata: CallMetadata): Promise<void> {\n    return await this._elementHandle.type(metadata, params.text, params);\n  }\n\n  async press(params: channels.ElementHandlePressParams, metadata: CallMetadata): Promise<void> {\n    return await this._elementHandle.press(metadata, params.key, params);\n  }\n\n  async check(params: channels.ElementHandleCheckParams, metadata: CallMetadata): Promise<void> {\n    return await this._elementHandle.check(metadata, params);\n  }\n\n  async uncheck(params: channels.ElementHandleUncheckParams, metadata: CallMetadata): Promise<void> {\n    return await this._elementHandle.uncheck(metadata, params);\n  }\n\n  async boundingBox(params: channels.ElementHandleBoundingBoxParams, metadata: CallMetadata): Promise<channels.ElementHandleBoundingBoxResult> {\n    const value = await this._elementHandle.boundingBox();\n    return { value: value || undefined };\n  }\n\n  async screenshot(params: channels.ElementHandleScreenshotParams, metadata: CallMetadata): Promise<channels.ElementHandleScreenshotResult> {\n    const mask: { frame: Frame, selector: string }[] = (params.mask || []).map(({ frame, selector }) => ({\n      frame: (frame as FrameDispatcher)._object,\n      selector,\n    }));\n    return { binary: await this._elementHandle.screenshot(metadata, { ...params, mask }) };\n  }\n\n  async querySelector(params: channels.ElementHandleQuerySelectorParams, metadata: CallMetadata): Promise<channels.ElementHandleQuerySelectorResult> {\n    const handle = await this._elementHandle.querySelector(params.selector, params);\n    return { element: ElementHandleDispatcher.fromNullable(this.parentScope(), handle) };\n  }\n\n  async querySelectorAll(params: channels.ElementHandleQuerySelectorAllParams, metadata: CallMetadata): Promise<channels.ElementHandleQuerySelectorAllResult> {\n    const elements = await this._elementHandle.querySelectorAll(params.selector);\n    return { elements: elements.map(e => ElementHandleDispatcher.from(this.parentScope(), e)) };\n  }\n\n  async evalOnSelector(params: channels.ElementHandleEvalOnSelectorParams, metadata: CallMetadata): Promise<channels.ElementHandleEvalOnSelectorResult> {\n    return { value: serializeResult(await this._elementHandle.evalOnSelector(params.selector, !!params.strict, params.expression, params.isFunction, parseArgument(params.arg))) };\n  }\n\n  async evalOnSelectorAll(params: channels.ElementHandleEvalOnSelectorAllParams, metadata: CallMetadata): Promise<channels.ElementHandleEvalOnSelectorAllResult> {\n    return { value: serializeResult(await this._elementHandle.evalOnSelectorAll(params.selector, params.expression, params.isFunction, parseArgument(params.arg))) };\n  }\n\n  async waitForElementState(params: channels.ElementHandleWaitForElementStateParams, metadata: CallMetadata): Promise<void> {\n    await this._elementHandle.waitForElementState(metadata, params.state, params);\n  }\n\n  async waitForSelector(params: channels.ElementHandleWaitForSelectorParams, metadata: CallMetadata): Promise<channels.ElementHandleWaitForSelectorResult> {\n    return { element: ElementHandleDispatcher.fromNullable(this.parentScope(), await this._elementHandle.waitForSelector(metadata, params.selector, params)) };\n  }\n\n  private _browserContextDispatcher(): BrowserContextDispatcher {\n    const parentScope = this.parentScope().parentScope();\n    if (parentScope instanceof BrowserContextDispatcher)\n      return parentScope;\n    return parentScope.parentScope();\n  }\n\n}\n","export const source = \"\\nvar __commonJS = obj => {\\n  let required = false;\\n  let result;\\n  return function __require() {\\n    if (!required) {\\n      required = true;\\n      let fn;\\n      for (const name in obj) { fn = obj[name]; break; }\\n      const module = { exports: {} };\\n      fn(module.exports, module);\\n      result = module.exports;\\n    }\\n    return result;\\n  }\\n};\\nvar __export = (target, all) => {for (var name in all) target[name] = all[name];};\\nvar __toESM = mod => ({ ...mod, 'default': mod });\\nvar __toCommonJS = mod => ({ ...mod, __esModule: true });\\n\\n\\n// packages/injected/src/webSocketMock.ts\\nvar webSocketMock_exports = {};\\n__export(webSocketMock_exports, {\\n  inject: () => inject\\n});\\nmodule.exports = __toCommonJS(webSocketMock_exports);\\nfunction inject(globalThis) {\\n  if (globalThis.__pwWebSocketDispatch)\\n    return;\\n  function generateId() {\\n    const bytes = new Uint8Array(32);\\n    globalThis.crypto.getRandomValues(bytes);\\n    const hex = \\\"0123456789abcdef\\\";\\n    return [...bytes].map((value) => {\\n      const high = Math.floor(value / 16);\\n      const low = value % 16;\\n      return hex[high] + hex[low];\\n    }).join(\\\"\\\");\\n  }\\n  function bufferToData(b) {\\n    let s = \\\"\\\";\\n    for (let i = 0; i < b.length; i++)\\n      s += String.fromCharCode(b[i]);\\n    return { data: globalThis.btoa(s), isBase64: true };\\n  }\\n  function stringToBuffer(s) {\\n    s = globalThis.atob(s);\\n    const b = new Uint8Array(s.length);\\n    for (let i = 0; i < s.length; i++)\\n      b[i] = s.charCodeAt(i);\\n    return b.buffer;\\n  }\\n  function messageToData(message, cb) {\\n    if (message instanceof globalThis.Blob)\\n      return message.arrayBuffer().then((buffer) => cb(bufferToData(new Uint8Array(buffer))));\\n    if (typeof message === \\\"string\\\")\\n      return cb({ data: message, isBase64: false });\\n    if (ArrayBuffer.isView(message))\\n      return cb(bufferToData(new Uint8Array(message.buffer, message.byteOffset, message.byteLength)));\\n    return cb(bufferToData(new Uint8Array(message)));\\n  }\\n  function dataToMessage(data, binaryType) {\\n    if (!data.isBase64)\\n      return data.data;\\n    const buffer = stringToBuffer(data.data);\\n    return binaryType === \\\"arraybuffer\\\" ? buffer : new Blob([buffer]);\\n  }\\n  const binding = globalThis.__pwWebSocketBinding;\\n  const NativeWebSocket = globalThis.WebSocket;\\n  const idToWebSocket = /* @__PURE__ */ new Map();\\n  globalThis.__pwWebSocketDispatch = (request) => {\\n    const ws = idToWebSocket.get(request.id);\\n    if (!ws)\\n      return;\\n    if (request.type === \\\"connect\\\")\\n      ws._apiConnect();\\n    if (request.type === \\\"passthrough\\\")\\n      ws._apiPassThrough();\\n    if (request.type === \\\"ensureOpened\\\")\\n      ws._apiEnsureOpened();\\n    if (request.type === \\\"sendToPage\\\")\\n      ws._apiSendToPage(dataToMessage(request.data, ws.binaryType));\\n    if (request.type === \\\"closePage\\\")\\n      ws._apiClosePage(request.code, request.reason, request.wasClean);\\n    if (request.type === \\\"sendToServer\\\")\\n      ws._apiSendToServer(dataToMessage(request.data, ws.binaryType));\\n    if (request.type === \\\"closeServer\\\")\\n      ws._apiCloseServer(request.code, request.reason, request.wasClean);\\n  };\\n  const _WebSocketMock = class _WebSocketMock extends EventTarget {\\n    constructor(url, protocols) {\\n      var _a, _b;\\n      super();\\n      // WebSocket.CLOSED\\n      this.CONNECTING = 0;\\n      // WebSocket.CONNECTING\\n      this.OPEN = 1;\\n      // WebSocket.OPEN\\n      this.CLOSING = 2;\\n      // WebSocket.CLOSING\\n      this.CLOSED = 3;\\n      // WebSocket.CLOSED\\n      this._oncloseListener = null;\\n      this._onerrorListener = null;\\n      this._onmessageListener = null;\\n      this._onopenListener = null;\\n      this.bufferedAmount = 0;\\n      this.extensions = \\\"\\\";\\n      this.protocol = \\\"\\\";\\n      this.readyState = 0;\\n      this._origin = \\\"\\\";\\n      this._passthrough = false;\\n      this._wsBufferedMessages = [];\\n      this._binaryType = \\\"blob\\\";\\n      this.url = new URL(url, globalThis.window.document.baseURI).href.replace(/^http/, \\\"ws\\\");\\n      this._origin = (_b = (_a = URL.parse(this.url)) == null ? void 0 : _a.origin) != null ? _b : \\\"\\\";\\n      this._protocols = protocols;\\n      this._id = generateId();\\n      idToWebSocket.set(this._id, this);\\n      binding({ type: \\\"onCreate\\\", id: this._id, url: this.url });\\n    }\\n    // --- native WebSocket implementation ---\\n    get binaryType() {\\n      return this._binaryType;\\n    }\\n    set binaryType(type) {\\n      this._binaryType = type;\\n      if (this._ws)\\n        this._ws.binaryType = type;\\n    }\\n    get onclose() {\\n      return this._oncloseListener;\\n    }\\n    set onclose(listener) {\\n      if (this._oncloseListener)\\n        this.removeEventListener(\\\"close\\\", this._oncloseListener);\\n      this._oncloseListener = listener;\\n      if (this._oncloseListener)\\n        this.addEventListener(\\\"close\\\", this._oncloseListener);\\n    }\\n    get onerror() {\\n      return this._onerrorListener;\\n    }\\n    set onerror(listener) {\\n      if (this._onerrorListener)\\n        this.removeEventListener(\\\"error\\\", this._onerrorListener);\\n      this._onerrorListener = listener;\\n      if (this._onerrorListener)\\n        this.addEventListener(\\\"error\\\", this._onerrorListener);\\n    }\\n    get onopen() {\\n      return this._onopenListener;\\n    }\\n    set onopen(listener) {\\n      if (this._onopenListener)\\n        this.removeEventListener(\\\"open\\\", this._onopenListener);\\n      this._onopenListener = listener;\\n      if (this._onopenListener)\\n        this.addEventListener(\\\"open\\\", this._onopenListener);\\n    }\\n    get onmessage() {\\n      return this._onmessageListener;\\n    }\\n    set onmessage(listener) {\\n      if (this._onmessageListener)\\n        this.removeEventListener(\\\"message\\\", this._onmessageListener);\\n      this._onmessageListener = listener;\\n      if (this._onmessageListener)\\n        this.addEventListener(\\\"message\\\", this._onmessageListener);\\n    }\\n    send(message) {\\n      if (this.readyState === _WebSocketMock.CONNECTING)\\n        throw new DOMException(`Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.`);\\n      if (this.readyState !== _WebSocketMock.OPEN)\\n        throw new DOMException(`WebSocket is already in CLOSING or CLOSED state.`);\\n      if (this._passthrough) {\\n        if (this._ws)\\n          this._apiSendToServer(message);\\n      } else {\\n        messageToData(message, (data) => binding({ type: \\\"onMessageFromPage\\\", id: this._id, data }));\\n      }\\n    }\\n    close(code, reason) {\\n      if (code !== void 0 && code !== 1e3 && (code < 3e3 || code > 4999))\\n        throw new DOMException(`Failed to execute 'close' on 'WebSocket': The close code must be either 1000, or between 3000 and 4999. ${code} is neither.`);\\n      if (this.readyState === _WebSocketMock.OPEN || this.readyState === _WebSocketMock.CONNECTING)\\n        this.readyState = _WebSocketMock.CLOSING;\\n      if (this._passthrough)\\n        this._apiCloseServer(code, reason, true);\\n      else\\n        binding({ type: \\\"onClosePage\\\", id: this._id, code, reason, wasClean: true });\\n    }\\n    // --- methods called from the routing API ---\\n    _apiEnsureOpened() {\\n      if (!this._ws)\\n        this._ensureOpened();\\n    }\\n    _apiSendToPage(message) {\\n      this._ensureOpened();\\n      if (this.readyState !== _WebSocketMock.OPEN)\\n        throw new DOMException(`WebSocket is already in CLOSING or CLOSED state.`);\\n      this.dispatchEvent(new MessageEvent(\\\"message\\\", { data: message, origin: this._origin, cancelable: true }));\\n    }\\n    _apiSendToServer(message) {\\n      if (!this._ws)\\n        throw new Error(\\\"Cannot send a message before connecting to the server\\\");\\n      if (this._ws.readyState === _WebSocketMock.CONNECTING)\\n        this._wsBufferedMessages.push(message);\\n      else\\n        this._ws.send(message);\\n    }\\n    _apiConnect() {\\n      if (this._ws)\\n        throw new Error(\\\"Can only connect to the server once\\\");\\n      this._ws = new NativeWebSocket(this.url, this._protocols);\\n      this._ws.binaryType = this._binaryType;\\n      this._ws.onopen = () => {\\n        for (const message of this._wsBufferedMessages)\\n          this._ws.send(message);\\n        this._wsBufferedMessages = [];\\n        this._ensureOpened();\\n      };\\n      this._ws.onclose = (event) => {\\n        this._onWSClose(event.code, event.reason, event.wasClean);\\n      };\\n      this._ws.onmessage = (event) => {\\n        if (this._passthrough)\\n          this._apiSendToPage(event.data);\\n        else\\n          messageToData(event.data, (data) => binding({ type: \\\"onMessageFromServer\\\", id: this._id, data }));\\n      };\\n      this._ws.onerror = () => {\\n        const event = new Event(\\\"error\\\", { cancelable: true });\\n        this.dispatchEvent(event);\\n      };\\n    }\\n    // This method connects to the server, and passes all messages through,\\n    // as if WebSocketMock was not engaged.\\n    _apiPassThrough() {\\n      this._passthrough = true;\\n      this._apiConnect();\\n    }\\n    _apiCloseServer(code, reason, wasClean) {\\n      if (!this._ws) {\\n        this._onWSClose(code, reason, wasClean);\\n        return;\\n      }\\n      if (this._ws.readyState === _WebSocketMock.CONNECTING || this._ws.readyState === _WebSocketMock.OPEN)\\n        this._ws.close(code, reason);\\n    }\\n    _apiClosePage(code, reason, wasClean) {\\n      if (this.readyState === _WebSocketMock.CLOSED)\\n        return;\\n      this.readyState = _WebSocketMock.CLOSED;\\n      this.dispatchEvent(new CloseEvent(\\\"close\\\", { code, reason, wasClean, cancelable: true }));\\n      this._maybeCleanup();\\n      if (this._passthrough)\\n        this._apiCloseServer(code, reason, wasClean);\\n      else\\n        binding({ type: \\\"onClosePage\\\", id: this._id, code, reason, wasClean });\\n    }\\n    // --- internals ---\\n    _ensureOpened() {\\n      var _a;\\n      if (this.readyState !== _WebSocketMock.CONNECTING)\\n        return;\\n      this.extensions = ((_a = this._ws) == null ? void 0 : _a.extensions) || \\\"\\\";\\n      if (this._ws)\\n        this.protocol = this._ws.protocol;\\n      else if (Array.isArray(this._protocols))\\n        this.protocol = this._protocols[0] || \\\"\\\";\\n      else\\n        this.protocol = this._protocols || \\\"\\\";\\n      this.readyState = _WebSocketMock.OPEN;\\n      this.dispatchEvent(new Event(\\\"open\\\", { cancelable: true }));\\n    }\\n    _onWSClose(code, reason, wasClean) {\\n      if (this._passthrough)\\n        this._apiClosePage(code, reason, wasClean);\\n      else\\n        binding({ type: \\\"onCloseServer\\\", id: this._id, code, reason, wasClean });\\n      if (this._ws) {\\n        this._ws.onopen = null;\\n        this._ws.onclose = null;\\n        this._ws.onmessage = null;\\n        this._ws.onerror = null;\\n        this._ws = void 0;\\n        this._wsBufferedMessages = [];\\n      }\\n      this._maybeCleanup();\\n    }\\n    _maybeCleanup() {\\n      if (this.readyState === _WebSocketMock.CLOSED && !this._ws)\\n        idToWebSocket.delete(this._id);\\n    }\\n  };\\n  _WebSocketMock.CONNECTING = 0;\\n  // WebSocket.CONNECTING\\n  _WebSocketMock.OPEN = 1;\\n  // WebSocket.OPEN\\n  _WebSocketMock.CLOSING = 2;\\n  // WebSocket.CLOSING\\n  _WebSocketMock.CLOSED = 3;\\n  let WebSocketMock = _WebSocketMock;\\n  globalThis.WebSocket = class WebSocket extends WebSocketMock {\\n  };\\n}\\n\";","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Page } from '../page';\nimport { Dispatcher } from './dispatcher';\nimport { PageDispatcher } from './pageDispatcher';\nimport * as rawWebSocketMockSource from '../../generated/webSocketMockSource';\nimport { createGuid } from '../utils/crypto';\nimport { urlMatches } from '../../utils/isomorphic/urlMatch';\nimport { eventsHelper } from '../utils/eventsHelper';\n\nimport type { BrowserContextDispatcher } from './browserContextDispatcher';\nimport type { BrowserContext } from '../browserContext';\nimport type { DispatcherConnection } from './dispatcher';\nimport type { Frame } from '../frames';\nimport type * as ws from '@injected/webSocketMock';\nimport type * as channels from '@protocol/channels';\n\nexport class WebSocketRouteDispatcher extends Dispatcher<{ guid: string }, channels.WebSocketRouteChannel, PageDispatcher | BrowserContextDispatcher> implements channels.WebSocketRouteChannel {\n  _type_WebSocketRoute = true;\n  private _id: string;\n  private _frame: Frame;\n  private static _idToDispatcher = new Map<string, WebSocketRouteDispatcher>();\n\n  constructor(scope: PageDispatcher | BrowserContextDispatcher, id: string, url: string, frame: Frame) {\n    super(scope, { guid: 'webSocketRoute@' + createGuid() }, 'WebSocketRoute', { url });\n    this._id = id;\n    this._frame = frame;\n    this._eventListeners.push(\n        // When the frame navigates or detaches, there will be no more communication\n        // from the mock websocket, so pretend like it was closed.\n        eventsHelper.addEventListener(frame._page, Page.Events.InternalFrameNavigatedToNewDocument, (frame: Frame) => {\n          if (frame === this._frame)\n            this._executionContextGone();\n        }),\n        eventsHelper.addEventListener(frame._page, Page.Events.FrameDetached, (frame: Frame) => {\n          if (frame === this._frame)\n            this._executionContextGone();\n        }),\n        eventsHelper.addEventListener(frame._page, Page.Events.Close, () => this._executionContextGone()),\n        eventsHelper.addEventListener(frame._page, Page.Events.Crash, () => this._executionContextGone()),\n    );\n    WebSocketRouteDispatcher._idToDispatcher.set(this._id, this);\n    (scope as any)._dispatchEvent('webSocketRoute', { webSocketRoute: this });\n  }\n\n  static async installIfNeeded(connection: DispatcherConnection, target: Page | BrowserContext) {\n    const kBindingName = '__pwWebSocketBinding';\n    const context = target instanceof Page ? target.browserContext : target;\n    if (!context.hasBinding(kBindingName)) {\n      await context.exposeBinding(kBindingName, false, (source, payload: ws.BindingPayload) => {\n        if (payload.type === 'onCreate') {\n          const contextDispatcher = connection.existingDispatcher<BrowserContextDispatcher>(context);\n          const pageDispatcher = contextDispatcher ? PageDispatcher.fromNullable(contextDispatcher, source.page) : undefined;\n          let scope: PageDispatcher | BrowserContextDispatcher | undefined;\n          if (pageDispatcher && matchesPattern(pageDispatcher, context._options.baseURL, payload.url))\n            scope = pageDispatcher;\n          else if (contextDispatcher && matchesPattern(contextDispatcher, context._options.baseURL, payload.url))\n            scope = contextDispatcher;\n          if (scope) {\n            new WebSocketRouteDispatcher(scope, payload.id, payload.url, source.frame);\n          } else {\n            const request: ws.PassthroughRequest = { id: payload.id, type: 'passthrough' };\n            source.frame.evaluateExpression(`globalThis.__pwWebSocketDispatch(${JSON.stringify(request)})`).catch(() => {});\n          }\n          return;\n        }\n\n        const dispatcher = WebSocketRouteDispatcher._idToDispatcher.get(payload.id);\n        if (payload.type === 'onMessageFromPage')\n          dispatcher?._dispatchEvent('messageFromPage', { message: payload.data.data, isBase64: payload.data.isBase64 });\n        if (payload.type === 'onMessageFromServer')\n          dispatcher?._dispatchEvent('messageFromServer', { message: payload.data.data, isBase64: payload.data.isBase64 });\n        if (payload.type === 'onClosePage')\n          dispatcher?._dispatchEvent('closePage', { code: payload.code, reason: payload.reason, wasClean: payload.wasClean });\n        if (payload.type === 'onCloseServer')\n          dispatcher?._dispatchEvent('closeServer', { code: payload.code, reason: payload.reason, wasClean: payload.wasClean });\n      });\n    }\n\n    const kInitScriptName = 'webSocketMockSource';\n    if (!target.initScripts.find(s => s.name === kInitScriptName)) {\n      await target.addInitScript(`\n        (() => {\n          const module = {};\n          ${rawWebSocketMockSource.source}\n          (module.exports.inject())(globalThis);\n        })();\n      `, kInitScriptName);\n    }\n  }\n\n  async connect(params: channels.WebSocketRouteConnectParams) {\n    await this._evaluateAPIRequest({ id: this._id, type: 'connect' });\n  }\n\n  async ensureOpened(params: channels.WebSocketRouteEnsureOpenedParams) {\n    await this._evaluateAPIRequest({ id: this._id, type: 'ensureOpened' });\n  }\n\n  async sendToPage(params: channels.WebSocketRouteSendToPageParams) {\n    await this._evaluateAPIRequest({ id: this._id, type: 'sendToPage', data: { data: params.message, isBase64: params.isBase64 } });\n  }\n\n  async sendToServer(params: channels.WebSocketRouteSendToServerParams) {\n    await this._evaluateAPIRequest({ id: this._id, type: 'sendToServer', data: { data: params.message, isBase64: params.isBase64 } });\n  }\n\n  async closePage(params: channels.WebSocketRouteClosePageParams) {\n    await this._evaluateAPIRequest({ id: this._id, type: 'closePage', code: params.code, reason: params.reason, wasClean: params.wasClean });\n  }\n\n  async closeServer(params: channels.WebSocketRouteCloseServerParams) {\n    await this._evaluateAPIRequest({ id: this._id, type: 'closeServer', code: params.code, reason: params.reason, wasClean: params.wasClean });\n  }\n\n  private async _evaluateAPIRequest(request: ws.APIRequest) {\n    await this._frame.evaluateExpression(`globalThis.__pwWebSocketDispatch(${JSON.stringify(request)})`).catch(() => {});\n  }\n\n  override _onDispose() {\n    WebSocketRouteDispatcher._idToDispatcher.delete(this._id);\n  }\n\n  private _executionContextGone() {\n    // We could enter here after being disposed upon page closure:\n    // - first from the recursive dispose inintiated by PageDispatcher;\n    // - then from our own page.on('close') listener.\n    if (!this._disposed) {\n      this._dispatchEvent('closePage', { wasClean: true });\n      this._dispatchEvent('closeServer', { wasClean: true });\n    }\n  }\n}\n\nfunction matchesPattern(dispatcher: PageDispatcher | BrowserContextDispatcher, baseURL: string | undefined, url: string) {\n  for (const pattern of dispatcher._webSocketInterceptionPatterns || []) {\n    const urlMatch = pattern.regexSource ? new RegExp(pattern.regexSource, pattern.regexFlags) : pattern.glob;\n    if (urlMatches(baseURL, url, urlMatch, true))\n      return true;\n  }\n  return false;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Page, Worker } from '../page';\nimport { Dispatcher } from './dispatcher';\nimport { parseError } from '../errors';\nimport { ArtifactDispatcher } from './artifactDispatcher';\nimport { ElementHandleDispatcher } from './elementHandlerDispatcher';\nimport { FrameDispatcher } from './frameDispatcher';\nimport { JSHandleDispatcher, parseArgument, serializeResult } from './jsHandleDispatcher';\nimport { RequestDispatcher } from './networkDispatchers';\nimport { ResponseDispatcher } from './networkDispatchers';\nimport { RouteDispatcher, WebSocketDispatcher } from './networkDispatchers';\nimport { WebSocketRouteDispatcher } from './webSocketRouteDispatcher';\nimport { createGuid } from '../utils/crypto';\nimport { urlMatches } from '../../utils/isomorphic/urlMatch';\n\nimport type { Artifact } from '../artifact';\nimport type { BrowserContext } from '../browserContext';\nimport type { CRCoverage } from '../chromium/crCoverage';\nimport type { Download } from '../download';\nimport type { FileChooser } from '../fileChooser';\nimport type { CallMetadata } from '../instrumentation';\nimport type { JSHandle } from '../javascript';\nimport type { BrowserContextDispatcher } from './browserContextDispatcher';\nimport type { Frame } from '../frames';\nimport type { RouteHandler } from '../network';\nimport type { InitScript, PageBinding } from '../page';\nimport type * as channels from '@protocol/channels';\n\nexport class PageDispatcher extends Dispatcher<Page, channels.PageChannel, BrowserContextDispatcher> implements channels.PageChannel {\n  _type_EventTarget = true;\n  _type_Page = true;\n  private _page: Page;\n  _subscriptions = new Set<channels.PageUpdateSubscriptionParams['event']>();\n  _webSocketInterceptionPatterns: channels.PageSetWebSocketInterceptionPatternsParams['patterns'] = [];\n  private _bindings: PageBinding[] = [];\n  private _initScripts: InitScript[] = [];\n  private _requestInterceptor: RouteHandler;\n  private _interceptionUrlMatchers: (string | RegExp)[] = [];\n  private _locatorHandlers = new Set<number>();\n  private _jsCoverageActive = false;\n  private _cssCoverageActive = false;\n\n  static from(parentScope: BrowserContextDispatcher, page: Page): PageDispatcher {\n    return PageDispatcher.fromNullable(parentScope, page)!;\n  }\n\n  static fromNullable(parentScope: BrowserContextDispatcher, page: Page | undefined): PageDispatcher | undefined {\n    if (!page)\n      return undefined;\n    const result = parentScope.connection.existingDispatcher<PageDispatcher>(page);\n    return result || new PageDispatcher(parentScope, page);\n  }\n\n  private constructor(parentScope: BrowserContextDispatcher, page: Page) {\n    // TODO: theoretically, there could be more than one frame already.\n    // If we split pageCreated and pageReady, there should be no main frame during pageCreated.\n\n    // We will reparent it to the page below using adopt.\n    const mainFrame = FrameDispatcher.from(parentScope, page.mainFrame());\n\n    super(parentScope, page, 'Page', {\n      mainFrame,\n      viewportSize: page.emulatedSize()?.viewport,\n      isClosed: page.isClosed(),\n      opener: PageDispatcher.fromNullable(parentScope, page.opener())\n    });\n\n    this.adopt(mainFrame);\n\n    this._page = page;\n    this._requestInterceptor = (route, request) => {\n      const matchesSome = this._interceptionUrlMatchers.some(urlMatch => urlMatches(this._page.browserContext._options.baseURL, request.url(), urlMatch));\n      if (!matchesSome) {\n        route.continue({ isFallback: true }).catch(() => {});\n        return;\n      }\n      this._dispatchEvent('route', { route: new RouteDispatcher(RequestDispatcher.from(this.parentScope(), request), route) });\n    };\n\n    this.addObjectListener(Page.Events.Close, () => {\n      this._dispatchEvent('close');\n      this._dispose();\n    });\n    this.addObjectListener(Page.Events.Crash, () => this._dispatchEvent('crash'));\n    this.addObjectListener(Page.Events.Download, (download: Download) => {\n      // Artifact can outlive the page, so bind to the context scope.\n      this._dispatchEvent('download', { url: download.url, suggestedFilename: download.suggestedFilename(), artifact: ArtifactDispatcher.from(parentScope, download.artifact) });\n    });\n    this.addObjectListener(Page.Events.EmulatedSizeChanged, () => this._dispatchEvent('viewportSizeChanged', { viewportSize: page.emulatedSize()?.viewport }));\n    this.addObjectListener(Page.Events.FileChooser, (fileChooser: FileChooser) => this._dispatchEvent('fileChooser', {\n      element: ElementHandleDispatcher.from(mainFrame, fileChooser.element()),\n      isMultiple: fileChooser.isMultiple()\n    }));\n    this.addObjectListener(Page.Events.FrameAttached, frame => this._onFrameAttached(frame));\n    this.addObjectListener(Page.Events.FrameDetached, frame => this._onFrameDetached(frame));\n    this.addObjectListener(Page.Events.LocatorHandlerTriggered, (uid: number) => this._dispatchEvent('locatorHandlerTriggered', { uid }));\n    this.addObjectListener(Page.Events.WebSocket, webSocket => this._dispatchEvent('webSocket', { webSocket: new WebSocketDispatcher(this, webSocket) }));\n    this.addObjectListener(Page.Events.Worker, worker => this._dispatchEvent('worker', { worker: new WorkerDispatcher(this, worker) }));\n    this.addObjectListener(Page.Events.Video, (artifact: Artifact) => this._dispatchEvent('video', { artifact: ArtifactDispatcher.from(parentScope, artifact) }));\n    if (page.video)\n      this._dispatchEvent('video', { artifact: ArtifactDispatcher.from(this.parentScope(), page.video) });\n    // Ensure client knows about all frames.\n    const frames = page.frameManager.frames();\n    for (let i = 1; i < frames.length; i++)\n      this._onFrameAttached(frames[i]);\n  }\n\n  page(): Page {\n    return this._page;\n  }\n\n  async exposeBinding(params: channels.PageExposeBindingParams, metadata: CallMetadata): Promise<void> {\n    const binding = await this._page.exposeBinding(params.name, !!params.needsHandle, (source, ...args) => {\n      // When reusing the context, we might have some bindings called late enough,\n      // after context and page dispatchers have been disposed.\n      if (this._disposed)\n        return;\n      const binding = new BindingCallDispatcher(this, params.name, !!params.needsHandle, source, args);\n      this._dispatchEvent('bindingCall', { binding });\n      return binding.promise();\n    });\n    this._bindings.push(binding);\n  }\n\n  async setExtraHTTPHeaders(params: channels.PageSetExtraHTTPHeadersParams, metadata: CallMetadata): Promise<void> {\n    await this._page.setExtraHTTPHeaders(params.headers);\n  }\n\n  async reload(params: channels.PageReloadParams, metadata: CallMetadata): Promise<channels.PageReloadResult> {\n    return { response: ResponseDispatcher.fromNullable(this.parentScope(), await this._page.reload(metadata, params)) };\n  }\n\n  async goBack(params: channels.PageGoBackParams, metadata: CallMetadata): Promise<channels.PageGoBackResult> {\n    return { response: ResponseDispatcher.fromNullable(this.parentScope(), await this._page.goBack(metadata, params)) };\n  }\n\n  async goForward(params: channels.PageGoForwardParams, metadata: CallMetadata): Promise<channels.PageGoForwardResult> {\n    return { response: ResponseDispatcher.fromNullable(this.parentScope(), await this._page.goForward(metadata, params)) };\n  }\n\n  async requestGC(params: channels.PageRequestGCParams, metadata: CallMetadata): Promise<channels.PageRequestGCResult> {\n    await this._page.requestGC();\n  }\n\n  async registerLocatorHandler(params: channels.PageRegisterLocatorHandlerParams, metadata: CallMetadata): Promise<channels.PageRegisterLocatorHandlerResult> {\n    const uid = this._page.registerLocatorHandler(params.selector, params.noWaitAfter);\n    this._locatorHandlers.add(uid);\n    return { uid };\n  }\n\n  async resolveLocatorHandlerNoReply(params: channels.PageResolveLocatorHandlerNoReplyParams, metadata: CallMetadata): Promise<void> {\n    this._page.resolveLocatorHandler(params.uid, params.remove);\n  }\n\n  async unregisterLocatorHandler(params: channels.PageUnregisterLocatorHandlerParams, metadata: CallMetadata): Promise<void> {\n    this._page.unregisterLocatorHandler(params.uid);\n    this._locatorHandlers.delete(params.uid);\n  }\n\n  async emulateMedia(params: channels.PageEmulateMediaParams, metadata: CallMetadata): Promise<void> {\n    await this._page.emulateMedia({\n      media: params.media,\n      colorScheme: params.colorScheme,\n      reducedMotion: params.reducedMotion,\n      forcedColors: params.forcedColors,\n      contrast: params.contrast,\n    });\n  }\n\n  async setViewportSize(params: channels.PageSetViewportSizeParams, metadata: CallMetadata): Promise<void> {\n    await this._page.setViewportSize(params.viewportSize);\n  }\n\n  async addInitScript(params: channels.PageAddInitScriptParams, metadata: CallMetadata): Promise<void> {\n    this._initScripts.push(await this._page.addInitScript(params.source));\n  }\n\n  async setNetworkInterceptionPatterns(params: channels.PageSetNetworkInterceptionPatternsParams, metadata: CallMetadata): Promise<void> {\n    const hadMatchers = this._interceptionUrlMatchers.length > 0;\n    if (!params.patterns.length) {\n      // Note: it is important to remove the interceptor when there are no patterns,\n      // because that disables the slow-path interception in the browser itself.\n      if (hadMatchers)\n        await this._page.removeRequestInterceptor(this._requestInterceptor);\n      this._interceptionUrlMatchers = [];\n    } else {\n      this._interceptionUrlMatchers = params.patterns.map(pattern => pattern.regexSource ? new RegExp(pattern.regexSource, pattern.regexFlags!) : pattern.glob!);\n      if (!hadMatchers)\n        await this._page.addRequestInterceptor(this._requestInterceptor);\n    }\n  }\n\n  async setWebSocketInterceptionPatterns(params: channels.PageSetWebSocketInterceptionPatternsParams, metadata: CallMetadata): Promise<void> {\n    this._webSocketInterceptionPatterns = params.patterns;\n    if (params.patterns.length)\n      await WebSocketRouteDispatcher.installIfNeeded(this.connection, this._page);\n  }\n\n  async expectScreenshot(params: channels.PageExpectScreenshotParams, metadata: CallMetadata): Promise<channels.PageExpectScreenshotResult> {\n    const mask: { frame: Frame, selector: string }[] = (params.mask || []).map(({ frame, selector }) => ({\n      frame: (frame as FrameDispatcher)._object,\n      selector,\n    }));\n    const locator: { frame: Frame, selector: string } | undefined = params.locator ? {\n      frame: (params.locator.frame as FrameDispatcher)._object,\n      selector: params.locator.selector,\n    } : undefined;\n    return await this._page.expectScreenshot(metadata, {\n      ...params,\n      locator,\n      mask,\n    });\n  }\n\n  async screenshot(params: channels.PageScreenshotParams, metadata: CallMetadata): Promise<channels.PageScreenshotResult> {\n    const mask: { frame: Frame, selector: string }[] = (params.mask || []).map(({ frame, selector }) => ({\n      frame: (frame as FrameDispatcher)._object,\n      selector,\n    }));\n    return { binary: await this._page.screenshot(metadata, { ...params, mask }) };\n  }\n\n  async close(params: channels.PageCloseParams, metadata: CallMetadata): Promise<void> {\n    if (!params.runBeforeUnload)\n      metadata.potentiallyClosesScope = true;\n    await this._page.close(metadata, params);\n  }\n\n  async updateSubscription(params: channels.PageUpdateSubscriptionParams): Promise<void> {\n    if (params.event === 'fileChooser')\n      await this._page.setFileChooserInterceptedBy(params.enabled, this);\n    if (params.enabled)\n      this._subscriptions.add(params.event);\n    else\n      this._subscriptions.delete(params.event);\n  }\n\n  async keyboardDown(params: channels.PageKeyboardDownParams, metadata: CallMetadata): Promise<void> {\n    await this._page.keyboard.down(params.key);\n  }\n\n  async keyboardUp(params: channels.PageKeyboardUpParams, metadata: CallMetadata): Promise<void> {\n    await this._page.keyboard.up(params.key);\n  }\n\n  async keyboardInsertText(params: channels.PageKeyboardInsertTextParams, metadata: CallMetadata): Promise<void> {\n    await this._page.keyboard.insertText(params.text);\n  }\n\n  async keyboardType(params: channels.PageKeyboardTypeParams, metadata: CallMetadata): Promise<void> {\n    await this._page.keyboard.type(params.text, params);\n  }\n\n  async keyboardPress(params: channels.PageKeyboardPressParams, metadata: CallMetadata): Promise<void> {\n    await this._page.keyboard.press(params.key, params);\n  }\n\n  async mouseMove(params: channels.PageMouseMoveParams, metadata: CallMetadata): Promise<void> {\n    await this._page.mouse.move(params.x, params.y, params, metadata);\n  }\n\n  async mouseDown(params: channels.PageMouseDownParams, metadata: CallMetadata): Promise<void> {\n    await this._page.mouse.down(params, metadata);\n  }\n\n  async mouseUp(params: channels.PageMouseUpParams, metadata: CallMetadata): Promise<void> {\n    await this._page.mouse.up(params, metadata);\n  }\n\n  async mouseClick(params: channels.PageMouseClickParams, metadata: CallMetadata): Promise<void> {\n    await this._page.mouse.click(params.x, params.y, params, metadata);\n  }\n\n  async mouseWheel(params: channels.PageMouseWheelParams, metadata: CallMetadata): Promise<void> {\n    await this._page.mouse.wheel(params.deltaX, params.deltaY);\n  }\n\n  async touchscreenTap(params: channels.PageTouchscreenTapParams, metadata: CallMetadata): Promise<void> {\n    await this._page.touchscreen.tap(params.x, params.y, metadata);\n  }\n\n  async accessibilitySnapshot(params: channels.PageAccessibilitySnapshotParams, metadata: CallMetadata): Promise<channels.PageAccessibilitySnapshotResult> {\n    const rootAXNode = await this._page.accessibility.snapshot({\n      interestingOnly: params.interestingOnly,\n      root: params.root ? (params.root as ElementHandleDispatcher)._elementHandle : undefined\n    });\n    return { rootAXNode: rootAXNode || undefined };\n  }\n\n  async pdf(params: channels.PagePdfParams, metadata: CallMetadata): Promise<channels.PagePdfResult> {\n    if (!this._page.pdf)\n      throw new Error('PDF generation is only supported for Headless Chromium');\n    const buffer = await this._page.pdf(params);\n    return { pdf: buffer };\n  }\n\n  async snapshotForAI(params: channels.PageSnapshotForAIParams, metadata: CallMetadata): Promise<channels.PageSnapshotForAIResult> {\n    return { snapshot: await this._page.snapshotForAI(metadata) };\n  }\n\n  async bringToFront(params: channels.PageBringToFrontParams, metadata: CallMetadata): Promise<void> {\n    await this._page.bringToFront();\n  }\n\n  async startJSCoverage(params: channels.PageStartJSCoverageParams, metadata: CallMetadata): Promise<void> {\n    this._jsCoverageActive = true;\n    const coverage = this._page.coverage as CRCoverage;\n    await coverage.startJSCoverage(params);\n  }\n\n  async stopJSCoverage(params: channels.PageStopJSCoverageParams, metadata: CallMetadata): Promise<channels.PageStopJSCoverageResult> {\n    const coverage = this._page.coverage as CRCoverage;\n    const result = await coverage.stopJSCoverage();\n    this._jsCoverageActive = false;\n    return result;\n  }\n\n  async startCSSCoverage(params: channels.PageStartCSSCoverageParams, metadata: CallMetadata): Promise<void> {\n    this._cssCoverageActive = true;\n    const coverage = this._page.coverage as CRCoverage;\n    await coverage.startCSSCoverage(params);\n  }\n\n  async stopCSSCoverage(params: channels.PageStopCSSCoverageParams, metadata: CallMetadata): Promise<channels.PageStopCSSCoverageResult> {\n    const coverage = this._page.coverage as CRCoverage;\n    const result = await coverage.stopCSSCoverage();\n    this._cssCoverageActive = false;\n    return result;\n  }\n\n  _onFrameAttached(frame: Frame) {\n    this._dispatchEvent('frameAttached', { frame: FrameDispatcher.from(this.parentScope(), frame) });\n  }\n\n  _onFrameDetached(frame: Frame) {\n    this._dispatchEvent('frameDetached', { frame: FrameDispatcher.from(this.parentScope(), frame) });\n  }\n\n  override _onDispose() {\n    // Avoid protocol calls for the closed page.\n    if (this._page.isClosedOrClosingOrCrashed())\n      return;\n\n    // Cleanup properly and leave the page in a good state. Other clients may still connect and use it.\n    this._interceptionUrlMatchers = [];\n    this._page.removeRequestInterceptor(this._requestInterceptor).catch(() => {});\n    this._page.removeExposedBindings(this._bindings).catch(() => {});\n    this._bindings = [];\n    this._page.removeInitScripts(this._initScripts).catch(() => {});\n    this._initScripts = [];\n    for (const uid of this._locatorHandlers)\n      this._page.unregisterLocatorHandler(uid);\n    this._locatorHandlers.clear();\n    this._page.setFileChooserInterceptedBy(false, this).catch(() => {});\n    if (this._jsCoverageActive)\n      (this._page.coverage as CRCoverage).stopJSCoverage().catch(() => {});\n    this._jsCoverageActive = false;\n    if (this._cssCoverageActive)\n      (this._page.coverage as CRCoverage).stopCSSCoverage().catch(() => {});\n    this._cssCoverageActive = false;\n  }\n}\n\n\nexport class WorkerDispatcher extends Dispatcher<Worker, channels.WorkerChannel, PageDispatcher | BrowserContextDispatcher> implements channels.WorkerChannel {\n  _type_Worker = true;\n\n  static fromNullable(scope: PageDispatcher | BrowserContextDispatcher, worker: Worker | null): WorkerDispatcher | undefined {\n    if (!worker)\n      return undefined;\n    const result = scope.connection.existingDispatcher<WorkerDispatcher>(worker);\n    return result || new WorkerDispatcher(scope, worker);\n  }\n\n  constructor(scope: PageDispatcher | BrowserContextDispatcher, worker: Worker) {\n    super(scope, worker, 'Worker', {\n      url: worker.url\n    });\n    this.addObjectListener(Worker.Events.Close, () => this._dispatchEvent('close'));\n  }\n\n  async evaluateExpression(params: channels.WorkerEvaluateExpressionParams, metadata: CallMetadata): Promise<channels.WorkerEvaluateExpressionResult> {\n    return { value: serializeResult(await this._object.evaluateExpression(params.expression, params.isFunction, parseArgument(params.arg))) };\n  }\n\n  async evaluateExpressionHandle(params: channels.WorkerEvaluateExpressionHandleParams, metadata: CallMetadata): Promise<channels.WorkerEvaluateExpressionHandleResult> {\n    return { handle: JSHandleDispatcher.fromJSHandle(this, await this._object.evaluateExpressionHandle(params.expression, params.isFunction, parseArgument(params.arg))) };\n  }\n}\n\nexport class BindingCallDispatcher extends Dispatcher<{ guid: string }, channels.BindingCallChannel, PageDispatcher | BrowserContextDispatcher> implements channels.BindingCallChannel {\n  _type_BindingCall = true;\n  private _resolve: ((arg: any) => void) | undefined;\n  private _reject: ((error: any) => void) | undefined;\n  private _promise: Promise<any>;\n\n  constructor(scope: PageDispatcher, name: string, needsHandle: boolean, source: { context: BrowserContext, page: Page, frame: Frame }, args: any[]) {\n    const frameDispatcher = FrameDispatcher.from(scope.parentScope(), source.frame);\n    super(scope, { guid: 'bindingCall@' + createGuid() }, 'BindingCall', {\n      frame: frameDispatcher,\n      name,\n      args: needsHandle ? undefined : args.map(serializeResult),\n      handle: needsHandle ? ElementHandleDispatcher.fromJSOrElementHandle(frameDispatcher, args[0] as JSHandle) : undefined,\n    });\n    this._promise = new Promise((resolve, reject) => {\n      this._resolve = resolve;\n      this._reject = reject;\n    });\n  }\n\n  promise() {\n    return this._promise;\n  }\n\n  async resolve(params: channels.BindingCallResolveParams, metadata: CallMetadata): Promise<void> {\n    this._resolve!(parseArgument(params.result));\n    this._dispose();\n  }\n\n  async reject(params: channels.BindingCallRejectParams, metadata: CallMetadata): Promise<void> {\n    this._reject!(parseError(params.error));\n    this._dispose();\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Dispatcher } from './dispatcher';\nimport { PageDispatcher } from './pageDispatcher';\n\nimport type { Dialog } from '../dialog';\nimport type { BrowserContextDispatcher } from './browserContextDispatcher';\nimport type * as channels from '@protocol/channels';\n\nexport class DialogDispatcher extends Dispatcher<Dialog, channels.DialogChannel, BrowserContextDispatcher | PageDispatcher> implements channels.DialogChannel {\n  _type_Dialog = true;\n\n  constructor(scope: BrowserContextDispatcher, dialog: Dialog) {\n    const page = PageDispatcher.fromNullable(scope, dialog.page().initializedOrUndefined());\n    // Prefer scoping to the page, unless we don't have one.\n    super(page || scope, dialog, 'Dialog', {\n      page,\n      type: dialog.type(),\n      message: dialog.message(),\n      defaultValue: dialog.defaultValue(),\n    });\n  }\n\n  async accept(params: { promptText?: string }): Promise<void> {\n    await this._object.accept(params.promptText);\n  }\n\n  async dismiss(): Promise<void> {\n    await this._object.dismiss();\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport path from 'path';\n\nimport { Page } from './page';\nimport { assert } from '../utils';\nimport { Artifact } from './artifact';\n\nexport class Download {\n  readonly artifact: Artifact;\n  readonly url: string;\n  private _page: Page;\n  private _suggestedFilename: string | undefined;\n\n  constructor(page: Page, downloadsPath: string, uuid: string, url: string, suggestedFilename?: string) {\n    const unaccessibleErrorMessage = page.browserContext._options.acceptDownloads === 'deny' ? 'Pass { acceptDownloads: true } when you are creating your browser context.' : undefined;\n    this.artifact = new Artifact(page, path.join(downloadsPath, uuid), unaccessibleErrorMessage, () => {\n      return this._page.browserContext.cancelDownload(uuid);\n    });\n    this._page = page;\n    this.url = url;\n    this._suggestedFilename = suggestedFilename;\n    page.browserContext._downloads.add(this);\n    if (suggestedFilename !== undefined)\n      this._fireDownloadEvent();\n  }\n\n  page(): Page {\n    return this._page;\n  }\n\n  _filenameSuggested(suggestedFilename: string) {\n    assert(this._suggestedFilename === undefined);\n    this._suggestedFilename = suggestedFilename;\n    this._fireDownloadEvent();\n  }\n\n  suggestedFilename(): string {\n    return this._suggestedFilename!;\n  }\n\n  private _fireDownloadEvent() {\n    this._page.instrumentation.onDownload(this._page, this);\n    this._page.emit(Page.Events.Download, this);\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Artifact } from './artifact';\nimport { BrowserContext, validateBrowserContextOptions } from './browserContext';\nimport { Download } from './download';\nimport { SdkObject } from './instrumentation';\nimport { Page } from './page';\nimport { ClientCertificatesProxy } from './socksClientCertificatesInterceptor';\n\nimport type { CallMetadata } from './instrumentation';\nimport type * as types from './types';\nimport type { ProxySettings } from './types';\nimport type { RecentLogsCollector } from './utils/debugLogger';\nimport type * as channels from '@protocol/channels';\nimport type { ChildProcess } from 'child_process';\n\n\nexport interface BrowserProcess {\n  onclose?: ((exitCode: number | null, signal: string | null) => void);\n  process?: ChildProcess;\n  kill(): Promise<void>;\n  close(): Promise<void>;\n}\n\nexport type BrowserOptions = {\n  name: string,\n  isChromium: boolean,\n  channel?: string,\n  artifactsDir: string;\n  downloadsPath: string,\n  tracesDir: string,\n  headful?: boolean,\n  persistent?: types.BrowserContextOptions,  // Undefined means no persistent context.\n  browserProcess: BrowserProcess,\n  customExecutablePath?: string;\n  proxy?: ProxySettings,\n  protocolLogger: types.ProtocolLogger,\n  browserLogsCollector: RecentLogsCollector,\n  slowMo?: number;\n  wsEndpoint?: string;  // Only there when connected over web socket.\n  originalLaunchOptions: types.LaunchOptions;\n};\n\nexport abstract class Browser extends SdkObject {\n\n  static Events = {\n    Context: 'context',\n    Disconnected: 'disconnected',\n  };\n\n  readonly options: BrowserOptions;\n  private _downloads = new Map<string, Download>();\n  _defaultContext: BrowserContext | null = null;\n  private _startedClosing = false;\n  readonly _idToVideo = new Map<string, { context: BrowserContext, artifact: Artifact }>();\n  private _contextForReuse: { context: BrowserContext, hash: string } | undefined;\n  _closeReason: string | undefined;\n  _isCollocatedWithServer: boolean = true;\n\n  constructor(parent: SdkObject, options: BrowserOptions) {\n    super(parent, 'browser');\n    this.attribution.browser = this;\n    this.options = options;\n    this.instrumentation.onBrowserOpen(this);\n  }\n\n  abstract doCreateNewContext(options: types.BrowserContextOptions): Promise<BrowserContext>;\n  abstract contexts(): BrowserContext[];\n  abstract isConnected(): boolean;\n  abstract version(): string;\n  abstract userAgent(): string;\n\n  async newContext(metadata: CallMetadata, options: types.BrowserContextOptions): Promise<BrowserContext> {\n    validateBrowserContextOptions(options, this.options);\n    let clientCertificatesProxy: ClientCertificatesProxy | undefined;\n    if (options.clientCertificates?.length) {\n      clientCertificatesProxy = new ClientCertificatesProxy(options);\n      options = { ...options };\n      options.proxyOverride = await clientCertificatesProxy.listen();\n      options.internalIgnoreHTTPSErrors = true;\n    }\n    let context;\n    try {\n      context = await this.doCreateNewContext(options);\n    } catch (error) {\n      await clientCertificatesProxy?.close();\n      throw error;\n    }\n    context._clientCertificatesProxy = clientCertificatesProxy;\n    if (options.storageState)\n      await context.setStorageState(metadata, options.storageState);\n    this.emit(Browser.Events.Context, context);\n    return context;\n  }\n\n  async newContextForReuse(params: channels.BrowserNewContextForReuseParams, metadata: CallMetadata): Promise<{ context: BrowserContext, needsReset: boolean }> {\n    const hash = BrowserContext.reusableContextHash(params);\n    if (!this._contextForReuse || hash !== this._contextForReuse.hash || !this._contextForReuse.context.canResetForReuse()) {\n      if (this._contextForReuse)\n        await this._contextForReuse.context.close({ reason: 'Context reused' });\n      this._contextForReuse = { context: await this.newContext(metadata, params), hash };\n      return { context: this._contextForReuse.context, needsReset: false };\n    }\n    await this._contextForReuse.context.stopPendingOperations('Context recreated');\n    return { context: this._contextForReuse.context, needsReset: true };\n  }\n\n  async stopPendingOperations(reason: string) {\n    await this._contextForReuse?.context?.stopPendingOperations(reason);\n  }\n\n  _downloadCreated(page: Page, uuid: string, url: string, suggestedFilename?: string) {\n    const download = new Download(page, this.options.downloadsPath || '', uuid, url, suggestedFilename);\n    this._downloads.set(uuid, download);\n  }\n\n  _downloadFilenameSuggested(uuid: string, suggestedFilename: string) {\n    const download = this._downloads.get(uuid);\n    if (!download)\n      return;\n    download._filenameSuggested(suggestedFilename);\n  }\n\n  _downloadFinished(uuid: string, error?: string) {\n    const download = this._downloads.get(uuid);\n    if (!download)\n      return;\n    download.artifact.reportFinished(error ? new Error(error) : undefined);\n    this._downloads.delete(uuid);\n  }\n\n  _videoStarted(context: BrowserContext, videoId: string, path: string, pageOrError: Promise<Page | Error>) {\n    const artifact = new Artifact(context, path);\n    this._idToVideo.set(videoId, { context, artifact });\n    pageOrError.then(page => {\n      if (page instanceof Page) {\n        page.video = artifact;\n        page.emitOnContext(BrowserContext.Events.VideoStarted, artifact);\n        page.emit(Page.Events.Video, artifact);\n      }\n    });\n  }\n\n  _takeVideo(videoId: string): Artifact | undefined {\n    const video = this._idToVideo.get(videoId);\n    this._idToVideo.delete(videoId);\n    return video?.artifact;\n  }\n\n  _didClose() {\n    for (const context of this.contexts())\n      context._browserClosed();\n    if (this._defaultContext)\n      this._defaultContext._browserClosed();\n    this.emit(Browser.Events.Disconnected);\n    this.instrumentation.onBrowserClose(this);\n  }\n\n  async close(options: { reason?: string }) {\n    if (!this._startedClosing) {\n      if (options.reason)\n        this._closeReason = options.reason;\n      this._startedClosing = true;\n      await this.options.browserProcess.close();\n    }\n    if (this.isConnected())\n      await new Promise(x => this.once(Browser.Events.Disconnected, x));\n  }\n\n  async killForTests() {\n    await this.options.browserProcess.kill();\n  }\n}\n","/**\n * Copyright 2018 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { CRSession } from './crConnection';\nimport type { Protocol } from './protocol';\nimport type * as accessibility from '../accessibility';\nimport type * as dom from '../dom';\nimport type * as channels from '@protocol/channels';\n\nexport async function getAccessibilityTree(client: CRSession, needle?: dom.ElementHandle): Promise<{tree: accessibility.AXNode, needle: accessibility.AXNode | null}> {\n  const { nodes } = await client.send('Accessibility.getFullAXTree');\n  const tree = CRAXNode.createTree(client, nodes);\n  return {\n    tree,\n    needle: needle ? await tree._findElement(needle) : null\n  };\n}\n\nclass CRAXNode implements accessibility.AXNode {\n  _payload: Protocol.Accessibility.AXNode;\n  _children: CRAXNode[] = [];\n  private _richlyEditable = false;\n  private _editable = false;\n  private _focusable = false;\n  private _expanded = false;\n  private _hidden = false;\n  private _name: string;\n  private _role: string;\n  private _cachedHasFocusableChild: boolean | undefined;\n  private _client: CRSession;\n\n  constructor(client: CRSession, payload: Protocol.Accessibility.AXNode) {\n    this._client = client;\n    this._payload = payload;\n\n    this._name = this._payload.name ? this._payload.name.value : '';\n    this._role = this._payload.role ? this._payload.role.value : 'Unknown';\n\n    for (const property of this._payload.properties || []) {\n      if (property.name === 'editable') {\n        this._richlyEditable = property.value.value === 'richtext';\n        this._editable = true;\n      }\n      if (property.name === 'focusable')\n        this._focusable = property.value.value;\n      if (property.name === 'expanded')\n        this._expanded = property.value.value;\n      if (property.name === 'hidden')\n        this._hidden = property.value.value;\n    }\n  }\n\n  private _isPlainTextField(): boolean {\n    if (this._richlyEditable)\n      return false;\n    if (this._editable)\n      return true;\n    return this._role === 'textbox' || this._role === 'ComboBox' || this._role === 'searchbox';\n  }\n\n  private _isTextOnlyObject(): boolean {\n    const role = this._role;\n    return (role === 'LineBreak' || role === 'text' ||\n            role === 'InlineTextBox' || role === 'StaticText');\n  }\n\n  private _hasFocusableChild(): boolean {\n    if (this._cachedHasFocusableChild === undefined) {\n      this._cachedHasFocusableChild = false;\n      for (const child of this._children) {\n        if (child._focusable || child._hasFocusableChild()) {\n          this._cachedHasFocusableChild = true;\n          break;\n        }\n      }\n    }\n    return this._cachedHasFocusableChild;\n  }\n\n  children() {\n    return this._children;\n  }\n\n  async _findElement(element: dom.ElementHandle): Promise<CRAXNode | null> {\n    const objectId = element._objectId;\n    const { node: { backendNodeId } } = await this._client.send('DOM.describeNode', { objectId });\n    const needle = this.find(node => node._payload.backendDOMNodeId === backendNodeId);\n    return needle || null;\n  }\n\n  find(predicate: (arg0: CRAXNode) => boolean): CRAXNode | null {\n    if (predicate(this))\n      return this;\n    for (const child of this._children) {\n      const result = child.find(predicate);\n      if (result)\n        return result;\n    }\n    return null;\n  }\n\n  isLeafNode(): boolean {\n    if (!this._children.length)\n      return true;\n\n    // These types of objects may have children that we use as internal\n    // implementation details, but we want to expose them as leaves to platform\n    // accessibility APIs because screen readers might be confused if they find\n    // any children.\n    if (this._isPlainTextField() || this._isTextOnlyObject())\n      return true;\n\n    // Roles whose children are only presentational according to the ARIA and\n    // HTML5 Specs should be hidden from screen readers.\n    // (Note that whilst ARIA buttons can have only presentational children, HTML5\n    // buttons are allowed to have content.)\n    switch (this._role) {\n      case 'doc-cover':\n      case 'graphics-symbol':\n      case 'img':\n      case 'Meter':\n      case 'scrollbar':\n      case 'slider':\n      case 'separator':\n      case 'progressbar':\n        return true;\n      default:\n        break;\n    }\n\n    // Here and below: Android heuristics\n    if (this._hasFocusableChild())\n      return false;\n    if (this._focusable && this._role !== 'WebArea' && this._role !== 'RootWebArea' && this._name)\n      return true;\n    if (this._role === 'heading' && this._name)\n      return true;\n    return false;\n  }\n\n  isControl(): boolean {\n    switch (this._role) {\n      case 'button':\n      case 'checkbox':\n      case 'ColorWell':\n      case 'combobox':\n      case 'DisclosureTriangle':\n      case 'listbox':\n      case 'menu':\n      case 'menubar':\n      case 'menuitem':\n      case 'menuitemcheckbox':\n      case 'menuitemradio':\n      case 'radio':\n      case 'scrollbar':\n      case 'searchbox':\n      case 'slider':\n      case 'spinbutton':\n      case 'switch':\n      case 'tab':\n      case 'textbox':\n      case 'tree':\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  isInteresting(insideControl: boolean): boolean {\n    const role = this._role;\n    if (role === 'Ignored' || this._hidden)\n      return false;\n\n    if (this._focusable || this._richlyEditable)\n      return true;\n\n    // If it's not focusable but has a control role, then it's interesting.\n    if (this.isControl())\n      return true;\n\n    // A non focusable child of a control is not interesting\n    if (insideControl)\n      return false;\n\n    return this.isLeafNode() && !!this._name;\n  }\n\n  normalizedRole() {\n    switch (this._role) {\n      case 'RootWebArea':\n        return 'WebArea';\n      case 'StaticText':\n        return 'text';\n      default:\n        return this._role;\n    }\n  }\n\n  serialize(): channels.AXNode {\n    const properties: Map<string, number | string | boolean> = new Map();\n    for (const property of this._payload.properties || [])\n      properties.set(property.name.toLowerCase(), property.value.value);\n    if (this._payload.description)\n      properties.set('description', this._payload.description.value);\n\n    const node: {[x in keyof channels.AXNode]: any} = {\n      role: this.normalizedRole(),\n      name: this._payload.name ? (this._payload.name.value || '') : '',\n    };\n\n    const userStringProperties: Array<keyof channels.AXNode> = [\n      'description',\n      'keyshortcuts',\n      'roledescription',\n      'valuetext',\n    ];\n    for (const userStringProperty of userStringProperties) {\n      if (!properties.has(userStringProperty))\n        continue;\n      node[userStringProperty] = properties.get(userStringProperty);\n    }\n    const booleanProperties: Array<keyof channels.AXNode> = [\n      'disabled',\n      'expanded',\n      'focused',\n      'modal',\n      'multiline',\n      'multiselectable',\n      'readonly',\n      'required',\n      'selected',\n    ];\n    for (const booleanProperty of booleanProperties) {\n      // WebArea's treat focus differently than other nodes. They report whether their frame  has focus,\n      // not whether focus is specifically on the root node.\n      if (booleanProperty === 'focused' && (this._role === 'WebArea' || this._role === 'RootWebArea'))\n        continue;\n      const value = properties.get(booleanProperty);\n      if (!value)\n        continue;\n      node[booleanProperty] = value;\n    }\n    const numericalProperties: Array<keyof channels.AXNode> = [\n      'level',\n      'valuemax',\n      'valuemin',\n    ];\n    for (const numericalProperty of numericalProperties) {\n      if (!properties.has(numericalProperty))\n        continue;\n      node[numericalProperty] = properties.get(numericalProperty);\n    }\n    const tokenProperties: Array<keyof channels.AXNode> = [\n      'autocomplete',\n      'haspopup',\n      'invalid',\n      'orientation',\n    ];\n    for (const tokenProperty of tokenProperties) {\n      const value = properties.get(tokenProperty);\n      if (!value || value === 'false')\n        continue;\n      node[tokenProperty] = value;\n    }\n\n    const axNode = node as channels.AXNode;\n    if (this._payload.value) {\n      if (typeof this._payload.value.value === 'string')\n        axNode.valueString = this._payload.value.value;\n      if (typeof this._payload.value.value === 'number')\n        axNode.valueNumber = this._payload.value.value;\n    }\n    if (properties.has('checked'))\n      axNode.checked = properties.get('checked') === 'true' ? 'checked' : properties.get('checked') === 'false' ? 'unchecked' : 'mixed';\n    if (properties.has('pressed'))\n      axNode.pressed = properties.get('pressed') === 'true' ? 'pressed' : properties.get('pressed') === 'false' ? 'released' : 'mixed';\n    return axNode;\n  }\n\n  static createTree(client: CRSession, payloads: Protocol.Accessibility.AXNode[]): CRAXNode {\n    const nodeById: Map<string, CRAXNode> = new Map();\n    for (const payload of payloads)\n      nodeById.set(payload.nodeId, new CRAXNode(client, payload));\n    for (const node of nodeById.values()) {\n      for (const childId of node._payload.childIds || [])\n        node._children.push(nodeById.get(childId)!);\n    }\n    return nodeById.values().next().value!;\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '../../utils';\nimport { eventsHelper } from '../utils/eventsHelper';\n\nimport type { CRSession } from './crConnection';\nimport type { Protocol } from './protocol';\nimport type { RegisteredListener } from '../utils/eventsHelper';\nimport type * as channels from '@protocol/channels';\n\n\nexport class CRCoverage {\n  private _jsCoverage: JSCoverage;\n  private _cssCoverage: CSSCoverage;\n\n  constructor(client: CRSession) {\n    this._jsCoverage = new JSCoverage(client);\n    this._cssCoverage = new CSSCoverage(client);\n  }\n\n  async startJSCoverage(options: channels.PageStartJSCoverageParams) {\n    return await this._jsCoverage.start(options);\n  }\n\n  async stopJSCoverage(): Promise<channels.PageStopJSCoverageResult> {\n    return await this._jsCoverage.stop();\n  }\n\n  async startCSSCoverage(options: channels.PageStartCSSCoverageParams) {\n    return await this._cssCoverage.start(options);\n  }\n\n  async stopCSSCoverage(): Promise<channels.PageStopCSSCoverageResult> {\n    return await this._cssCoverage.stop();\n  }\n}\n\nclass JSCoverage {\n  _client: CRSession;\n  _enabled: boolean;\n  _scriptIds: Set<string>;\n  _scriptSources: Map<string, string>;\n  _eventListeners: RegisteredListener[];\n  _resetOnNavigation: boolean;\n  _reportAnonymousScripts = false;\n\n  constructor(client: CRSession) {\n    this._client = client;\n    this._enabled = false;\n    this._scriptIds = new Set();\n    this._scriptSources = new Map();\n    this._eventListeners = [];\n    this._resetOnNavigation = false;\n  }\n\n  async start(options: channels.PageStartJSCoverageParams) {\n    assert(!this._enabled, 'JSCoverage is already enabled');\n    const {\n      resetOnNavigation = true,\n      reportAnonymousScripts = false\n    } = options;\n    this._resetOnNavigation = resetOnNavigation;\n    this._reportAnonymousScripts = reportAnonymousScripts;\n    this._enabled = true;\n    this._scriptIds.clear();\n    this._scriptSources.clear();\n    this._eventListeners = [\n      eventsHelper.addEventListener(this._client, 'Debugger.scriptParsed', this._onScriptParsed.bind(this)),\n      eventsHelper.addEventListener(this._client, 'Runtime.executionContextsCleared', this._onExecutionContextsCleared.bind(this)),\n      eventsHelper.addEventListener(this._client, 'Debugger.paused', this._onDebuggerPaused.bind(this)),\n    ];\n    await Promise.all([\n      this._client.send('Profiler.enable'),\n      this._client.send('Profiler.startPreciseCoverage', { callCount: true, detailed: true }),\n      this._client.send('Debugger.enable'),\n      this._client.send('Debugger.setSkipAllPauses', { skip: true })\n    ]);\n  }\n\n  _onDebuggerPaused() {\n    this._client.send('Debugger.resume');\n  }\n\n  _onExecutionContextsCleared() {\n    if (!this._resetOnNavigation)\n      return;\n    this._scriptIds.clear();\n    this._scriptSources.clear();\n  }\n\n  async _onScriptParsed(event: Protocol.Debugger.scriptParsedPayload) {\n    this._scriptIds.add(event.scriptId);\n    // Ignore other anonymous scripts unless the reportAnonymousScripts option is true.\n    if (!event.url && !this._reportAnonymousScripts)\n      return;\n    // This might fail if the page has already navigated away.\n    const response = await this._client._sendMayFail('Debugger.getScriptSource', { scriptId: event.scriptId });\n    if (response)\n      this._scriptSources.set(event.scriptId, response.scriptSource);\n  }\n\n  async stop(): Promise<channels.PageStopJSCoverageResult> {\n    if (!this._enabled)\n      return { entries: [] };\n    const [profileResponse] = await Promise.all([\n      this._client.send('Profiler.takePreciseCoverage'),\n      this._client.send('Profiler.stopPreciseCoverage'),\n      this._client.send('Profiler.disable'),\n      this._client.send('Debugger.disable'),\n    ] as const);\n    eventsHelper.removeEventListeners(this._eventListeners);\n    this._enabled = false;\n\n    const coverage: channels.PageStopJSCoverageResult = { entries: [] };\n    for (const entry of profileResponse.result) {\n      if (!this._scriptIds.has(entry.scriptId))\n        continue;\n      if (!entry.url && !this._reportAnonymousScripts)\n        continue;\n      const source = this._scriptSources.get(entry.scriptId);\n      if (source)\n        coverage.entries.push({ ...entry, source });\n      else\n        coverage.entries.push(entry);\n    }\n    return coverage;\n  }\n}\n\nclass CSSCoverage {\n  _client: CRSession;\n  _enabled: boolean;\n  _stylesheetURLs: Map<string, string>;\n  _stylesheetSources: Map<string, string>;\n  _eventListeners: RegisteredListener[];\n  _resetOnNavigation: boolean;\n\n  constructor(client: CRSession) {\n    this._client = client;\n    this._enabled = false;\n    this._stylesheetURLs = new Map();\n    this._stylesheetSources = new Map();\n    this._eventListeners = [];\n    this._resetOnNavigation = false;\n  }\n\n  async start(options: channels.PageStartCSSCoverageParams) {\n    assert(!this._enabled, 'CSSCoverage is already enabled');\n    const { resetOnNavigation = true } = options;\n    this._resetOnNavigation = resetOnNavigation;\n    this._enabled = true;\n    this._stylesheetURLs.clear();\n    this._stylesheetSources.clear();\n    this._eventListeners = [\n      eventsHelper.addEventListener(this._client, 'CSS.styleSheetAdded', this._onStyleSheet.bind(this)),\n      eventsHelper.addEventListener(this._client, 'Runtime.executionContextsCleared', this._onExecutionContextsCleared.bind(this)),\n    ];\n    await Promise.all([\n      this._client.send('DOM.enable'),\n      this._client.send('CSS.enable'),\n      this._client.send('CSS.startRuleUsageTracking'),\n    ]);\n  }\n\n  _onExecutionContextsCleared() {\n    if (!this._resetOnNavigation)\n      return;\n    this._stylesheetURLs.clear();\n    this._stylesheetSources.clear();\n  }\n\n  async _onStyleSheet(event: Protocol.CSS.styleSheetAddedPayload) {\n    const header = event.header;\n    // Ignore anonymous scripts\n    if (!header.sourceURL)\n      return;\n    // This might fail if the page has already navigated away.\n    const response = await this._client._sendMayFail('CSS.getStyleSheetText', { styleSheetId: header.styleSheetId });\n    if (response) {\n      this._stylesheetURLs.set(header.styleSheetId, header.sourceURL);\n      this._stylesheetSources.set(header.styleSheetId, response.text);\n    }\n  }\n\n  async stop(): Promise<channels.PageStopCSSCoverageResult> {\n    if (!this._enabled)\n      return { entries: [] };\n    const ruleTrackingResponse = await this._client.send('CSS.stopRuleUsageTracking');\n    await Promise.all([\n      this._client.send('CSS.disable'),\n      this._client.send('DOM.disable'),\n    ]);\n    eventsHelper.removeEventListeners(this._eventListeners);\n    this._enabled = false;\n\n    // aggregate by styleSheetId\n    const styleSheetIdToCoverage = new Map();\n    for (const entry of ruleTrackingResponse.ruleUsage) {\n      let ranges = styleSheetIdToCoverage.get(entry.styleSheetId);\n      if (!ranges) {\n        ranges = [];\n        styleSheetIdToCoverage.set(entry.styleSheetId, ranges);\n      }\n      ranges.push({\n        startOffset: entry.startOffset,\n        endOffset: entry.endOffset,\n        count: entry.used ? 1 : 0,\n      });\n    }\n\n    const coverage: channels.PageStopCSSCoverageResult = { entries: [] };\n    for (const styleSheetId of this._stylesheetURLs.keys()) {\n      const url = this._stylesheetURLs.get(styleSheetId)!;\n      const text = this._stylesheetSources.get(styleSheetId)!;\n      const ranges = convertToDisjointRanges(styleSheetIdToCoverage.get(styleSheetId) || []);\n      coverage.entries.push({ url, ranges, text });\n    }\n\n    return coverage;\n  }\n}\n\nfunction convertToDisjointRanges(nestedRanges: {\n    startOffset: number;\n    endOffset: number;\n    count: number; }[]): { start: number; end: number; }[] {\n  const points = [];\n  for (const range of nestedRanges) {\n    points.push({ offset: range.startOffset, type: 0, range });\n    points.push({ offset: range.endOffset, type: 1, range });\n  }\n  // Sort points to form a valid parenthesis sequence.\n  points.sort((a, b) => {\n    // Sort with increasing offsets.\n    if (a.offset !== b.offset)\n      return a.offset - b.offset;\n    // All \"end\" points should go before \"start\" points.\n    if (a.type !== b.type)\n      return b.type - a.type;\n    const aLength = a.range.endOffset - a.range.startOffset;\n    const bLength = b.range.endOffset - b.range.startOffset;\n    // For two \"start\" points, the one with longer range goes first.\n    if (a.type === 0)\n      return bLength - aLength;\n    // For two \"end\" points, the one with shorter range goes first.\n    return aLength - bLength;\n  });\n\n  const hitCountStack = [];\n  const results: { start: number; end: number; }[] = [];\n  let lastOffset = 0;\n  // Run scanning line to intersect all ranges.\n  for (const point of points) {\n    if (hitCountStack.length && lastOffset < point.offset && hitCountStack[hitCountStack.length - 1] > 0) {\n      const lastResult = results.length ? results[results.length - 1] : null;\n      if (lastResult && lastResult.end === lastOffset)\n        lastResult.end = point.offset;\n      else\n        results.push({ start: lastOffset, end: point.offset });\n    }\n    lastOffset = point.offset;\n    if (point.type === 0)\n      hitCountStack.push(point.range.count);\n    else\n      hitCountStack.pop();\n  }\n  // Filter out empty ranges.\n  return results.filter(range => range.end - range.start > 1);\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\n\nimport { splitErrorMessage } from '../../utils/isomorphic/stackTrace';\nimport { mkdirIfNeeded } from '../utils/fileUtils';\n\nimport type { CRSession } from './crConnection';\nimport type { Protocol } from './protocol';\nimport type * as types from '../types';\n\n\nexport function getExceptionMessage(exceptionDetails: Protocol.Runtime.ExceptionDetails): string {\n  if (exceptionDetails.exception)\n    return exceptionDetails.exception.description || String(exceptionDetails.exception.value);\n  let message = exceptionDetails.text;\n  if (exceptionDetails.stackTrace) {\n    for (const callframe of exceptionDetails.stackTrace.callFrames) {\n      const location = callframe.url + ':' + callframe.lineNumber + ':' + callframe.columnNumber;\n      const functionName = callframe.functionName || '<anonymous>';\n      message += `\\n    at ${functionName} (${location})`;\n    }\n  }\n  return message;\n}\n\nexport async function releaseObject(client: CRSession, objectId: string) {\n  await client.send('Runtime.releaseObject', { objectId }).catch(error => { });\n}\n\nexport async function saveProtocolStream(client: CRSession, handle: string, path: string) {\n  let eof = false;\n  await mkdirIfNeeded(path);\n  const fd = await fs.promises.open(path, 'w');\n  while (!eof) {\n    const response = await client.send('IO.read', { handle });\n    eof = response.eof;\n    const buf = Buffer.from(response.data, response.base64Encoded ? 'base64' : undefined);\n    await fd.write(buf);\n  }\n  await fd.close();\n  await client.send('IO.close', { handle });\n}\n\nexport async function readProtocolStream(client: CRSession, handle: string): Promise<Buffer> {\n  let eof = false;\n  const chunks = [];\n  while (!eof) {\n    const response = await client.send('IO.read', { handle });\n    eof = response.eof;\n    const buf = Buffer.from(response.data, response.base64Encoded ? 'base64' : undefined);\n    chunks.push(buf);\n  }\n  await client.send('IO.close', { handle });\n  return Buffer.concat(chunks);\n}\n\nexport function toConsoleMessageLocation(stackTrace: Protocol.Runtime.StackTrace | undefined): types.ConsoleMessageLocation {\n  return stackTrace && stackTrace.callFrames.length ? {\n    url: stackTrace.callFrames[0].url,\n    lineNumber: stackTrace.callFrames[0].lineNumber,\n    columnNumber: stackTrace.callFrames[0].columnNumber,\n  } : { url: '', lineNumber: 0, columnNumber: 0 };\n}\n\nexport function exceptionToError(exceptionDetails: Protocol.Runtime.ExceptionDetails): Error {\n  const messageWithStack = getExceptionMessage(exceptionDetails);\n  const lines = messageWithStack.split('\\n');\n  const firstStackTraceLine = lines.findIndex(line => line.startsWith('    at'));\n  let messageWithName = '';\n  let stack = '';\n  if (firstStackTraceLine === -1) {\n    messageWithName = messageWithStack;\n  } else {\n    messageWithName = lines.slice(0, firstStackTraceLine).join('\\n');\n    stack = messageWithStack;\n  }\n  const { name, message } = splitErrorMessage(messageWithName);\n\n  const err = new Error(message);\n  err.stack = stack;\n  const nameOverride = exceptionDetails.exception?.preview?.properties.find(o => o.name === 'name');\n  err.name = nameOverride ? nameOverride.value ?? 'Error' : name;\n  return err;\n}\n\nexport function toModifiersMask(modifiers: Set<types.KeyboardModifier>): number {\n  let mask = 0;\n  if (modifiers.has('Alt'))\n    mask |= 1;\n  if (modifiers.has('Control'))\n    mask |= 2;\n  if (modifiers.has('Meta'))\n    mask |= 4;\n  if (modifiers.has('Shift'))\n    mask |= 8;\n  return mask;\n}\n\nexport function toButtonsMask(buttons: Set<types.MouseButton>): number {\n  let mask = 0;\n  if (buttons.has('left'))\n    mask |= 1;\n  if (buttons.has('right'))\n    mask |= 2;\n  if (buttons.has('middle'))\n    mask |= 4;\n  return mask;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n*/\nimport { toModifiersMask } from './crProtocolHelper';\nimport { assert } from '../../utils';\n\nimport type { CRPage } from './crPage';\nimport type * as types from '../types';\nimport type { Protocol } from './protocol';\n\n\ndeclare global {\n  interface Window {\n    __cleanupDrag?: () => Promise<boolean>;\n  }\n}\n\nexport class DragManager {\n  private _crPage: CRPage;\n  private _dragState: Protocol.Input.DragData | null = null;\n  private _lastPosition = { x: 0, y: 0 };\n  constructor(page: CRPage) {\n    this._crPage = page;\n  }\n\n  async cancelDrag() {\n    if (!this._dragState)\n      return false;\n    await this._crPage._mainFrameSession._client.send('Input.dispatchDragEvent', {\n      type: 'dragCancel',\n      x: this._lastPosition.x,\n      y: this._lastPosition.y,\n      data: {\n        items: [],\n        dragOperationsMask: 0xFFFF,\n      }\n    });\n    this._dragState = null;\n    return true;\n  }\n\n  async interceptDragCausedByMove(x: number, y: number, button: types.MouseButton | 'none', buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, moveCallback: () => Promise<void>): Promise<void> {\n    this._lastPosition = { x, y };\n    if (this._dragState) {\n      await this._crPage._mainFrameSession._client.send('Input.dispatchDragEvent', {\n        type: 'dragOver',\n        x,\n        y,\n        data: this._dragState,\n        modifiers: toModifiersMask(modifiers),\n      });\n      return;\n    }\n    if (button !== 'left')\n      return moveCallback();\n\n    const client = this._crPage._mainFrameSession._client;\n    let onDragIntercepted: (payload: Protocol.Input.dragInterceptedPayload) => void;\n    const dragInterceptedPromise = new Promise<Protocol.Input.dragInterceptedPayload>(x => onDragIntercepted = x);\n\n    function setupDragListeners() {\n      let didStartDrag = Promise.resolve(false);\n      let dragEvent: Event|null = null;\n      const dragListener = (event: Event) => dragEvent = event;\n      const mouseListener = () => {\n        didStartDrag = new Promise<boolean>(callback => {\n          window.addEventListener('dragstart', dragListener, { once: true, capture: true });\n          setTimeout(() => callback(dragEvent ? !dragEvent.defaultPrevented : false), 0);\n        });\n      };\n      window.addEventListener('mousemove', mouseListener, { once: true, capture: true });\n      window.__cleanupDrag = async () => {\n        const val = await didStartDrag;\n        window.removeEventListener('mousemove', mouseListener, { capture: true });\n        window.removeEventListener('dragstart', dragListener, { capture: true });\n        delete window.__cleanupDrag;\n        return val;\n      };\n    }\n\n    await this._crPage._page.safeNonStallingEvaluateInAllFrames(`(${setupDragListeners.toString()})()`, 'utility');\n\n    client.on('Input.dragIntercepted', onDragIntercepted!);\n    try {\n      await client.send('Input.setInterceptDrags', { enabled: true });\n    } catch {\n      // If Input.setInterceptDrags is not supported, just do a regular move.\n      // This can be removed once we stop supporting old Electron.\n      client.off('Input.dragIntercepted', onDragIntercepted!);\n      return moveCallback();\n    }\n    await moveCallback();\n\n    const expectingDrag = (await Promise.all(this._crPage._page.frames().map(async frame => {\n      return frame.nonStallingEvaluateInExistingContext('window.__cleanupDrag && window.__cleanupDrag()', 'utility').catch(() => false);\n    }))).some(x => x);\n    this._dragState = expectingDrag ? (await dragInterceptedPromise).data : null;\n    client.off('Input.dragIntercepted', onDragIntercepted!);\n    await client.send('Input.setInterceptDrags', { enabled: false });\n\n\n    if (this._dragState) {\n      await this._crPage._mainFrameSession._client.send('Input.dispatchDragEvent', {\n        type: 'dragEnter',\n        x,\n        y,\n        data: this._dragState,\n        modifiers: toModifiersMask(modifiers),\n      });\n    }\n  }\n\n  isDragging() {\n    return !!this._dragState;\n  }\n\n  async drop(x: number, y: number, modifiers: Set<types.KeyboardModifier>) {\n    assert(this._dragState, 'missing drag state');\n    await this._crPage._mainFrameSession._client.send('Input.dispatchDragEvent', {\n      type: 'drop',\n      x,\n      y,\n      data: this._dragState,\n      modifiers: toModifiersMask(modifiers),\n    });\n    this._dragState = null;\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '../../utils/isomorphic/assert';\nimport { getExceptionMessage, releaseObject } from './crProtocolHelper';\nimport { rewriteErrorMessage } from '../../utils/isomorphic/stackTrace';\nimport { parseEvaluationResultValue } from '../../utils/isomorphic/utilityScriptSerializers';\nimport * as js from '../javascript';\nimport * as dom from '../dom';\nimport { isSessionClosedError } from '../protocolError';\n\nimport type { CRSession } from './crConnection';\nimport type { Protocol } from './protocol';\n\nexport class CRExecutionContext implements js.ExecutionContextDelegate {\n  _client: CRSession;\n  _contextId: number;\n\n  constructor(client: CRSession, contextPayload: Protocol.Runtime.ExecutionContextDescription) {\n    this._client = client;\n    this._contextId = contextPayload.id;\n  }\n\n  async rawEvaluateJSON(expression: string): Promise<any> {\n    const { exceptionDetails, result: remoteObject } = await this._client.send('Runtime.evaluate', {\n      expression,\n      contextId: this._contextId,\n      returnByValue: true,\n    }).catch(rewriteError);\n    if (exceptionDetails)\n      throw new js.JavaScriptErrorInEvaluate(getExceptionMessage(exceptionDetails));\n    return remoteObject.value;\n  }\n\n  async rawEvaluateHandle(context: js.ExecutionContext, expression: string): Promise<js.JSHandle> {\n    const { exceptionDetails, result: remoteObject } = await this._client.send('Runtime.evaluate', {\n      expression,\n      contextId: this._contextId,\n    }).catch(rewriteError);\n    if (exceptionDetails)\n      throw new js.JavaScriptErrorInEvaluate(getExceptionMessage(exceptionDetails));\n    return createHandle(context, remoteObject);\n  }\n\n  async evaluateWithArguments(expression: string, returnByValue: boolean, utilityScript: js.JSHandle, values: any[], handles: js.JSHandle[]): Promise<any> {\n    const { exceptionDetails, result: remoteObject } = await this._client.send('Runtime.callFunctionOn', {\n      functionDeclaration: expression,\n      objectId: utilityScript._objectId,\n      arguments: [\n        { objectId: utilityScript._objectId },\n        ...values.map(value => ({ value })),\n        ...handles.map(handle => ({ objectId: handle._objectId! })),\n      ],\n      returnByValue,\n      awaitPromise: true,\n      userGesture: true\n    }).catch(rewriteError);\n    if (exceptionDetails)\n      throw new js.JavaScriptErrorInEvaluate(getExceptionMessage(exceptionDetails));\n    return returnByValue ? parseEvaluationResultValue(remoteObject.value) : createHandle(utilityScript._context, remoteObject);\n  }\n\n  async getProperties(object: js.JSHandle): Promise<Map<string, js.JSHandle>> {\n    const response = await this._client.send('Runtime.getProperties', {\n      objectId: object._objectId!,\n      ownProperties: true\n    });\n    const result = new Map();\n    for (const property of response.result) {\n      if (!property.enumerable || !property.value)\n        continue;\n      result.set(property.name, createHandle(object._context, property.value));\n    }\n    return result;\n  }\n\n  async releaseHandle(handle: js.JSHandle): Promise<void> {\n    if (!handle._objectId)\n      return;\n    await releaseObject(this._client, handle._objectId);\n  }\n}\n\nfunction rewriteError(error: Error): Protocol.Runtime.evaluateReturnValue {\n  if (error.message.includes('Object reference chain is too long'))\n    throw new Error('Cannot serialize result: object reference chain is too long.');\n  if (error.message.includes('Object couldn\\'t be returned by value'))\n    return { result: { type: 'undefined' } };\n\n  if (error instanceof TypeError && error.message.startsWith('Converting circular structure to JSON'))\n    rewriteErrorMessage(error, error.message + ' Are you passing a nested JSHandle?');\n  if (!js.isJavaScriptErrorInEvaluate(error) && !isSessionClosedError(error))\n    throw new Error('Execution context was destroyed, most likely because of a navigation.');\n  throw error;\n}\n\nfunction potentiallyUnserializableValue(remoteObject: Protocol.Runtime.RemoteObject): any {\n  const value = remoteObject.value;\n  const unserializableValue = remoteObject.unserializableValue;\n  return unserializableValue ? js.parseUnserializableValue(unserializableValue) : value;\n}\n\nfunction renderPreview(object: Protocol.Runtime.RemoteObject): string | undefined {\n  if (object.type === 'undefined')\n    return 'undefined';\n  if ('value' in object)\n    return String(object.value);\n  if (object.unserializableValue)\n    return String(object.unserializableValue);\n\n  if (object.description === 'Object' && object.preview) {\n    const tokens = [];\n    for (const { name, value } of object.preview.properties)\n      tokens.push(`${name}: ${value}`);\n    return `{${tokens.join(', ')}}`;\n  }\n  if (object.subtype === 'array' && object.preview)\n    return js.sparseArrayToString(object.preview.properties);\n  return object.description;\n}\n\nexport function createHandle(context: js.ExecutionContext, remoteObject: Protocol.Runtime.RemoteObject): js.JSHandle {\n  if (remoteObject.subtype === 'node') {\n    assert(context instanceof dom.FrameExecutionContext);\n    return new dom.ElementHandle(context, remoteObject.objectId!);\n  }\n  return new js.JSHandle(context, remoteObject.subtype || remoteObject.type, renderPreview(remoteObject), remoteObject.objectId, potentiallyUnserializableValue(remoteObject));\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const macEditingCommands: {[key: string]: string|string[]} = {\n  'Backspace': 'deleteBackward:',\n  'Enter': 'insertNewline:',\n  'NumpadEnter': 'insertNewline:',\n  'Escape': 'cancelOperation:',\n  'ArrowUp': 'moveUp:',\n  'ArrowDown': 'moveDown:',\n  'ArrowLeft': 'moveLeft:',\n  'ArrowRight': 'moveRight:',\n  'F5': 'complete:',\n  'Delete': 'deleteForward:',\n  'Home': 'scrollToBeginningOfDocument:',\n  'End': 'scrollToEndOfDocument:',\n  'PageUp': 'scrollPageUp:',\n  'PageDown': 'scrollPageDown:',\n  'Shift+Backspace': 'deleteBackward:',\n  'Shift+Enter': 'insertNewline:',\n  'Shift+NumpadEnter': 'insertNewline:',\n  'Shift+Escape': 'cancelOperation:',\n  'Shift+ArrowUp': 'moveUpAndModifySelection:',\n  'Shift+ArrowDown': 'moveDownAndModifySelection:',\n  'Shift+ArrowLeft': 'moveLeftAndModifySelection:',\n  'Shift+ArrowRight': 'moveRightAndModifySelection:',\n  'Shift+F5': 'complete:',\n  'Shift+Delete': 'deleteForward:',\n  'Shift+Home': 'moveToBeginningOfDocumentAndModifySelection:',\n  'Shift+End': 'moveToEndOfDocumentAndModifySelection:',\n  'Shift+PageUp': 'pageUpAndModifySelection:',\n  'Shift+PageDown': 'pageDownAndModifySelection:',\n  'Shift+Numpad5': 'delete:',\n  'Control+Tab': 'selectNextKeyView:',\n  'Control+Enter': 'insertLineBreak:',\n  'Control+NumpadEnter': 'insertLineBreak:',\n  'Control+Quote': 'insertSingleQuoteIgnoringSubstitution:',\n  'Control+KeyA': 'moveToBeginningOfParagraph:',\n  'Control+KeyB': 'moveBackward:',\n  'Control+KeyD': 'deleteForward:',\n  'Control+KeyE': 'moveToEndOfParagraph:',\n  'Control+KeyF': 'moveForward:',\n  'Control+KeyH': 'deleteBackward:',\n  'Control+KeyK': 'deleteToEndOfParagraph:',\n  'Control+KeyL': 'centerSelectionInVisibleArea:',\n  'Control+KeyN': 'moveDown:',\n  'Control+KeyO': ['insertNewlineIgnoringFieldEditor:', 'moveBackward:'],\n  'Control+KeyP': 'moveUp:',\n  'Control+KeyT': 'transpose:',\n  'Control+KeyV': 'pageDown:',\n  'Control+KeyY': 'yank:',\n  'Control+Backspace': 'deleteBackwardByDecomposingPreviousCharacter:',\n  'Control+ArrowUp': 'scrollPageUp:',\n  'Control+ArrowDown': 'scrollPageDown:',\n  'Control+ArrowLeft': 'moveToLeftEndOfLine:',\n  'Control+ArrowRight': 'moveToRightEndOfLine:',\n  'Shift+Control+Enter': 'insertLineBreak:',\n  'Shift+Control+NumpadEnter': 'insertLineBreak:',\n  'Shift+Control+Tab': 'selectPreviousKeyView:',\n  'Shift+Control+Quote': 'insertDoubleQuoteIgnoringSubstitution:',\n  'Shift+Control+KeyA': 'moveToBeginningOfParagraphAndModifySelection:',\n  'Shift+Control+KeyB': 'moveBackwardAndModifySelection:',\n  'Shift+Control+KeyE': 'moveToEndOfParagraphAndModifySelection:',\n  'Shift+Control+KeyF': 'moveForwardAndModifySelection:',\n  'Shift+Control+KeyN': 'moveDownAndModifySelection:',\n  'Shift+Control+KeyP': 'moveUpAndModifySelection:',\n  'Shift+Control+KeyV': 'pageDownAndModifySelection:',\n  'Shift+Control+Backspace': 'deleteBackwardByDecomposingPreviousCharacter:',\n  'Shift+Control+ArrowUp': 'scrollPageUp:',\n  'Shift+Control+ArrowDown': 'scrollPageDown:',\n  'Shift+Control+ArrowLeft': 'moveToLeftEndOfLineAndModifySelection:',\n  'Shift+Control+ArrowRight': 'moveToRightEndOfLineAndModifySelection:',\n  'Alt+Backspace': 'deleteWordBackward:',\n  'Alt+Enter': 'insertNewlineIgnoringFieldEditor:',\n  'Alt+NumpadEnter': 'insertNewlineIgnoringFieldEditor:',\n  'Alt+Escape': 'complete:',\n  'Alt+ArrowUp': ['moveBackward:', 'moveToBeginningOfParagraph:'],\n  'Alt+ArrowDown': ['moveForward:', 'moveToEndOfParagraph:'],\n  'Alt+ArrowLeft': 'moveWordLeft:',\n  'Alt+ArrowRight': 'moveWordRight:',\n  'Alt+Delete': 'deleteWordForward:',\n  'Alt+PageUp': 'pageUp:',\n  'Alt+PageDown': 'pageDown:',\n  'Shift+Alt+Backspace': 'deleteWordBackward:',\n  'Shift+Alt+Enter': 'insertNewlineIgnoringFieldEditor:',\n  'Shift+Alt+NumpadEnter': 'insertNewlineIgnoringFieldEditor:',\n  'Shift+Alt+Escape': 'complete:',\n  'Shift+Alt+ArrowUp': 'moveParagraphBackwardAndModifySelection:',\n  'Shift+Alt+ArrowDown': 'moveParagraphForwardAndModifySelection:',\n  'Shift+Alt+ArrowLeft': 'moveWordLeftAndModifySelection:',\n  'Shift+Alt+ArrowRight': 'moveWordRightAndModifySelection:',\n  'Shift+Alt+Delete': 'deleteWordForward:',\n  'Shift+Alt+PageUp': 'pageUp:',\n  'Shift+Alt+PageDown': 'pageDown:',\n  'Control+Alt+KeyB': 'moveWordBackward:',\n  'Control+Alt+KeyF': 'moveWordForward:',\n  'Control+Alt+Backspace': 'deleteWordBackward:',\n  'Shift+Control+Alt+KeyB': 'moveWordBackwardAndModifySelection:',\n  'Shift+Control+Alt+KeyF': 'moveWordForwardAndModifySelection:',\n  'Shift+Control+Alt+Backspace': 'deleteWordBackward:',\n  'Meta+NumpadSubtract': 'cancel:',\n  'Meta+Backspace': 'deleteToBeginningOfLine:',\n  'Meta+ArrowUp': 'moveToBeginningOfDocument:',\n  'Meta+ArrowDown': 'moveToEndOfDocument:',\n  'Meta+ArrowLeft': 'moveToLeftEndOfLine:',\n  'Meta+ArrowRight': 'moveToRightEndOfLine:',\n  'Shift+Meta+NumpadSubtract': 'cancel:',\n  'Shift+Meta+Backspace': 'deleteToBeginningOfLine:',\n  'Shift+Meta+ArrowUp': 'moveToBeginningOfDocumentAndModifySelection:',\n  'Shift+Meta+ArrowDown': 'moveToEndOfDocumentAndModifySelection:',\n  'Shift+Meta+ArrowLeft': 'moveToLeftEndOfLineAndModifySelection:',\n  'Shift+Meta+ArrowRight': 'moveToRightEndOfLineAndModifySelection:',\n\n  'Meta+KeyA': 'selectAll:',\n  'Meta+KeyC': 'copy:',\n  'Meta+KeyX': 'cut:',\n  'Meta+KeyV': 'paste:',\n  'Meta+KeyZ': 'undo:',\n  'Shift+Meta+KeyZ': 'redo:',\n};\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isString } from '../../utils';\nimport * as input from '../input';\nimport { macEditingCommands } from '../macEditingCommands';\nimport { toButtonsMask, toModifiersMask } from './crProtocolHelper';\n\nimport type * as types from '../types';\nimport type { CRSession } from './crConnection';\nimport type { DragManager } from './crDragDrop';\nimport type { CRPage } from './crPage';\n\n\nexport class RawKeyboardImpl implements input.RawKeyboard {\n  constructor(\n    private _client: CRSession,\n    private _isMac: boolean,\n    private _dragManger: DragManager,\n  ) { }\n\n  _commandsForCode(code: string, modifiers: Set<types.KeyboardModifier>) {\n    if (!this._isMac)\n      return [];\n    const parts = [];\n    for (const modifier of (['Shift', 'Control', 'Alt', 'Meta']) as types.KeyboardModifier[]) {\n      if (modifiers.has(modifier))\n        parts.push(modifier);\n    }\n    parts.push(code);\n    const shortcut = parts.join('+');\n    let commands = macEditingCommands[shortcut] || [];\n    if (isString(commands))\n      commands = [commands];\n    // Commands that insert text are not supported\n    commands = commands.filter(x => !x.startsWith('insert'));\n    // remove the trailing : to match the Chromium command names.\n    return commands.map(c => c.substring(0, c.length - 1));\n  }\n\n  async keydown(modifiers: Set<types.KeyboardModifier>, keyName: string, description: input.KeyDescription, autoRepeat: boolean): Promise<void> {\n    const { code, key, location, text } = description;\n    if (code === 'Escape' && await this._dragManger.cancelDrag())\n      return;\n    const commands = this._commandsForCode(code, modifiers);\n    await this._client.send('Input.dispatchKeyEvent', {\n      type: text ? 'keyDown' : 'rawKeyDown',\n      modifiers: toModifiersMask(modifiers),\n      windowsVirtualKeyCode: description.keyCodeWithoutLocation,\n      code,\n      commands,\n      key,\n      text,\n      unmodifiedText: text,\n      autoRepeat,\n      location,\n      isKeypad: location === input.keypadLocation\n    });\n  }\n\n  async keyup(modifiers: Set<types.KeyboardModifier>, keyName: string, description: input.KeyDescription): Promise<void> {\n    const { code, key, location } = description;\n    await this._client.send('Input.dispatchKeyEvent', {\n      type: 'keyUp',\n      modifiers: toModifiersMask(modifiers),\n      key,\n      windowsVirtualKeyCode: description.keyCodeWithoutLocation,\n      code,\n      location\n    });\n  }\n\n  async sendText(text: string): Promise<void> {\n    await this._client.send('Input.insertText', { text });\n  }\n}\n\nexport class RawMouseImpl implements input.RawMouse {\n  private _client: CRSession;\n  private _page: CRPage;\n  private _dragManager: DragManager;\n\n  constructor(page: CRPage, client: CRSession, dragManager: DragManager) {\n    this._page = page;\n    this._client = client;\n    this._dragManager = dragManager;\n  }\n\n  async move(x: number, y: number, button: types.MouseButton | 'none', buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, forClick: boolean): Promise<void> {\n    const actualMove = async () => {\n      await this._client.send('Input.dispatchMouseEvent', {\n        type: 'mouseMoved',\n        button,\n        buttons: toButtonsMask(buttons),\n        x,\n        y,\n        modifiers: toModifiersMask(modifiers),\n        force: buttons.size > 0 ? 0.5 : 0,\n      });\n    };\n    if (forClick) {\n      // Avoid extra protocol calls related to drag and drop, because click relies on\n      // move-down-up protocol commands being sent synchronously.\n      return actualMove();\n    }\n    await this._dragManager.interceptDragCausedByMove(x, y, button, buttons, modifiers, actualMove);\n  }\n\n  async down(x: number, y: number, button: types.MouseButton, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, clickCount: number): Promise<void> {\n    if (this._dragManager.isDragging())\n      return;\n    await this._client.send('Input.dispatchMouseEvent', {\n      type: 'mousePressed',\n      button,\n      buttons: toButtonsMask(buttons),\n      x,\n      y,\n      modifiers: toModifiersMask(modifiers),\n      clickCount,\n      force: buttons.size > 0 ? 0.5 : 0,\n    });\n  }\n\n  async up(x: number, y: number, button: types.MouseButton, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, clickCount: number): Promise<void> {\n    if (this._dragManager.isDragging()) {\n      await this._dragManager.drop(x, y, modifiers);\n      return;\n    }\n    await this._client.send('Input.dispatchMouseEvent', {\n      type: 'mouseReleased',\n      button,\n      buttons: toButtonsMask(buttons),\n      x,\n      y,\n      modifiers: toModifiersMask(modifiers),\n      clickCount\n    });\n  }\n\n  async wheel(x: number, y: number, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, deltaX: number, deltaY: number): Promise<void> {\n    await this._client.send('Input.dispatchMouseEvent', {\n      type: 'mouseWheel',\n      x,\n      y,\n      modifiers: toModifiersMask(modifiers),\n      deltaX,\n      deltaY,\n    });\n  }\n}\n\nexport class RawTouchscreenImpl implements input.RawTouchscreen {\n  private _client: CRSession;\n\n  constructor(client: CRSession) {\n    this._client = client;\n  }\n  async tap(x: number, y: number, modifiers: Set<types.KeyboardModifier>) {\n    await Promise.all([\n      this._client.send('Input.dispatchTouchEvent', {\n        type: 'touchStart',\n        modifiers: toModifiersMask(modifiers),\n        touchPoints: [{\n          x, y\n        }]\n      }),\n      this._client.send('Input.dispatchTouchEvent', {\n        type: 'touchEnd',\n        modifiers: toModifiersMask(modifiers),\n        touchPoints: []\n      }),\n    ]);\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, headersArrayToObject, headersObjectToArray } from '../../utils';\nimport { eventsHelper } from '../utils/eventsHelper';\nimport { helper } from '../helper';\nimport * as network from '../network';\nimport { isProtocolError, isSessionClosedError } from '../protocolError';\n\nimport type { CRSession } from './crConnection';\nimport type { Protocol } from './protocol';\nimport type { RegisteredListener } from '../utils/eventsHelper';\nimport type * as contexts from '../browserContext';\nimport type * as frames from '../frames';\nimport type { Page } from '../page';\nimport type * as types from '../types';\nimport type { CRPage } from './crPage';\nimport type { CRServiceWorker } from './crServiceWorker';\n\n\ntype SessionInfo = {\n  session: CRSession;\n  isMain?: boolean;\n  workerFrame?: frames.Frame;\n  eventListeners: RegisteredListener[];\n};\n\nexport class CRNetworkManager {\n  private _page: Page | null;\n  private _serviceWorker: CRServiceWorker | null;\n  private _requestIdToRequest = new Map<string, InterceptableRequest>();\n  private _requestIdToRequestWillBeSentEvent = new Map<string, { sessionInfo: SessionInfo, event: Protocol.Network.requestWillBeSentPayload }>();\n  private _credentials: {origin?: string, username: string, password: string} | null = null;\n  private _attemptedAuthentications = new Set<string>();\n  private _userRequestInterceptionEnabled = false;\n  private _protocolRequestInterceptionEnabled = false;\n  private _offline = false;\n  private _extraHTTPHeaders: types.HeadersArray = [];\n  private _requestIdToRequestPausedEvent = new Map<string, { sessionInfo: SessionInfo, event: Protocol.Fetch.requestPausedPayload }>();\n  private _responseExtraInfoTracker = new ResponseExtraInfoTracker();\n  private _sessions = new Map<CRSession, SessionInfo>();\n\n  constructor(page: Page | null, serviceWorker: CRServiceWorker | null) {\n    this._page = page;\n    this._serviceWorker = serviceWorker;\n  }\n\n  async addSession(session: CRSession, workerFrame?: frames.Frame, isMain?: boolean) {\n    const sessionInfo: SessionInfo = { session, isMain, workerFrame, eventListeners: [] };\n    sessionInfo.eventListeners = [\n      eventsHelper.addEventListener(session, 'Fetch.requestPaused', this._onRequestPaused.bind(this, sessionInfo)),\n      eventsHelper.addEventListener(session, 'Fetch.authRequired', this._onAuthRequired.bind(this, sessionInfo)),\n      eventsHelper.addEventListener(session, 'Network.requestWillBeSent', this._onRequestWillBeSent.bind(this, sessionInfo)),\n      eventsHelper.addEventListener(session, 'Network.requestWillBeSentExtraInfo', this._onRequestWillBeSentExtraInfo.bind(this)),\n      eventsHelper.addEventListener(session, 'Network.requestServedFromCache', this._onRequestServedFromCache.bind(this)),\n      eventsHelper.addEventListener(session, 'Network.responseReceived', this._onResponseReceived.bind(this, sessionInfo)),\n      eventsHelper.addEventListener(session, 'Network.responseReceivedExtraInfo', this._onResponseReceivedExtraInfo.bind(this)),\n      eventsHelper.addEventListener(session, 'Network.loadingFinished', this._onLoadingFinished.bind(this, sessionInfo)),\n      eventsHelper.addEventListener(session, 'Network.loadingFailed', this._onLoadingFailed.bind(this, sessionInfo)),\n    ];\n    if (this._page) {\n      sessionInfo.eventListeners.push(...[\n        eventsHelper.addEventListener(session, 'Network.webSocketCreated', e => this._page!.frameManager.onWebSocketCreated(e.requestId, e.url)),\n        eventsHelper.addEventListener(session, 'Network.webSocketWillSendHandshakeRequest', e => this._page!.frameManager.onWebSocketRequest(e.requestId)),\n        eventsHelper.addEventListener(session, 'Network.webSocketHandshakeResponseReceived', e => this._page!.frameManager.onWebSocketResponse(e.requestId, e.response.status, e.response.statusText)),\n        eventsHelper.addEventListener(session, 'Network.webSocketFrameSent', e => e.response.payloadData && this._page!.frameManager.onWebSocketFrameSent(e.requestId, e.response.opcode, e.response.payloadData)),\n        eventsHelper.addEventListener(session, 'Network.webSocketFrameReceived', e => e.response.payloadData && this._page!.frameManager.webSocketFrameReceived(e.requestId, e.response.opcode, e.response.payloadData)),\n        eventsHelper.addEventListener(session, 'Network.webSocketClosed', e => this._page!.frameManager.webSocketClosed(e.requestId)),\n        eventsHelper.addEventListener(session, 'Network.webSocketFrameError', e => this._page!.frameManager.webSocketError(e.requestId, e.errorMessage)),\n      ]);\n    }\n    this._sessions.set(session, sessionInfo);\n    await Promise.all([\n      session.send('Network.enable'),\n      this._updateProtocolRequestInterceptionForSession(sessionInfo, true /* initial */),\n      this._setOfflineForSession(sessionInfo, true /* initial */),\n      this._setExtraHTTPHeadersForSession(sessionInfo, true /* initial */),\n    ]);\n  }\n\n  removeSession(session: CRSession) {\n    const info = this._sessions.get(session);\n    if (info)\n      eventsHelper.removeEventListeners(info.eventListeners);\n    this._sessions.delete(session);\n  }\n\n  private async _forEachSession(cb: (sessionInfo: SessionInfo) => Promise<any>) {\n    await Promise.all([...this._sessions.values()].map(info => {\n      if (info.isMain)\n        return cb(info);\n      return cb(info).catch(e => {\n        // Broadcasting a message to the closed target should be a noop.\n        if (isSessionClosedError(e))\n          return;\n        throw e;\n      });\n    }));\n  }\n\n  async authenticate(credentials: types.Credentials | null) {\n    this._credentials = credentials;\n    await this._updateProtocolRequestInterception();\n  }\n\n  async setOffline(offline: boolean) {\n    if (offline === this._offline)\n      return;\n    this._offline = offline;\n    await this._forEachSession(info => this._setOfflineForSession(info));\n  }\n\n  private async _setOfflineForSession(info: SessionInfo, initial?: boolean) {\n    if (initial && !this._offline)\n      return;\n    // Workers are affected by the owner frame's Network.emulateNetworkConditions.\n    if (info.workerFrame)\n      return;\n    await info.session.send('Network.emulateNetworkConditions', {\n      offline: this._offline,\n      // values of 0 remove any active throttling. crbug.com/456324#c9\n      latency: 0,\n      downloadThroughput: -1,\n      uploadThroughput: -1\n    });\n  }\n\n  async setRequestInterception(value: boolean) {\n    this._userRequestInterceptionEnabled = value;\n    await this._updateProtocolRequestInterception();\n  }\n\n  async _updateProtocolRequestInterception() {\n    const enabled = this._userRequestInterceptionEnabled || !!this._credentials;\n    if (enabled === this._protocolRequestInterceptionEnabled)\n      return;\n    this._protocolRequestInterceptionEnabled = enabled;\n    await this._forEachSession(info => this._updateProtocolRequestInterceptionForSession(info));\n  }\n\n  private async _updateProtocolRequestInterceptionForSession(info: SessionInfo, initial?: boolean) {\n    const enabled = this._protocolRequestInterceptionEnabled;\n    if (initial && !enabled)\n      return;\n    const cachePromise = info.session.send('Network.setCacheDisabled', { cacheDisabled: enabled });\n    let fetchPromise = Promise.resolve<any>(undefined);\n    if (!info.workerFrame) {\n      if (enabled)\n        fetchPromise = info.session.send('Fetch.enable', { handleAuthRequests: true, patterns: [{ urlPattern: '*', requestStage: 'Request' }] });\n      else\n        fetchPromise = info.session.send('Fetch.disable');\n    }\n    await Promise.all([cachePromise, fetchPromise]);\n  }\n\n  async setExtraHTTPHeaders(extraHTTPHeaders: types.HeadersArray) {\n    if (!this._extraHTTPHeaders.length && !extraHTTPHeaders.length)\n      return;\n    this._extraHTTPHeaders = extraHTTPHeaders;\n    await this._forEachSession(info => this._setExtraHTTPHeadersForSession(info));\n  }\n\n  private async _setExtraHTTPHeadersForSession(info: SessionInfo, initial?: boolean) {\n    if (initial && !this._extraHTTPHeaders.length)\n      return;\n    await info.session.send('Network.setExtraHTTPHeaders', { headers: headersArrayToObject(this._extraHTTPHeaders, false /* lowerCase */) });\n  }\n\n  async clearCache() {\n    await this._forEachSession(async info => {\n      // Sending 'Network.setCacheDisabled' with 'cacheDisabled = true' will clear the MemoryCache.\n      await info.session.send('Network.setCacheDisabled', { cacheDisabled: true });\n      if (!this._protocolRequestInterceptionEnabled)\n        await info.session.send('Network.setCacheDisabled', { cacheDisabled: false });\n      if (!info.workerFrame)\n        await info.session.send('Network.clearBrowserCache');\n    });\n  }\n\n  _onRequestWillBeSent(sessionInfo: SessionInfo, event: Protocol.Network.requestWillBeSentPayload) {\n    // Request interception doesn't happen for data URLs with Network Service.\n    if (this._protocolRequestInterceptionEnabled && !event.request.url.startsWith('data:')) {\n      const requestId = event.requestId;\n      const requestPausedEvent = this._requestIdToRequestPausedEvent.get(requestId);\n      if (requestPausedEvent) {\n        this._onRequest(sessionInfo, event, requestPausedEvent.sessionInfo, requestPausedEvent.event);\n        this._requestIdToRequestPausedEvent.delete(requestId);\n      } else {\n        this._requestIdToRequestWillBeSentEvent.set(event.requestId, { sessionInfo, event });\n      }\n    } else {\n      this._onRequest(sessionInfo, event, undefined, undefined);\n    }\n  }\n\n  _onRequestServedFromCache(event: Protocol.Network.requestServedFromCachePayload) {\n    this._responseExtraInfoTracker.requestServedFromCache(event);\n  }\n\n  _onRequestWillBeSentExtraInfo(event: Protocol.Network.requestWillBeSentExtraInfoPayload) {\n    this._responseExtraInfoTracker.requestWillBeSentExtraInfo(event);\n  }\n\n  _onAuthRequired(sessionInfo: SessionInfo, event: Protocol.Fetch.authRequiredPayload) {\n    let response: 'Default' | 'CancelAuth' | 'ProvideCredentials' = 'Default';\n    const shouldProvideCredentials = this._shouldProvideCredentials(event.request.url);\n    if (this._attemptedAuthentications.has(event.requestId)) {\n      response = 'CancelAuth';\n    } else if (shouldProvideCredentials) {\n      response = 'ProvideCredentials';\n      this._attemptedAuthentications.add(event.requestId);\n    }\n    const { username, password } =  shouldProvideCredentials && this._credentials ? this._credentials : { username: undefined, password: undefined };\n    sessionInfo.session._sendMayFail('Fetch.continueWithAuth', {\n      requestId: event.requestId,\n      authChallengeResponse: { response, username, password },\n    });\n  }\n\n  _shouldProvideCredentials(url: string): boolean {\n    if (!this._credentials)\n      return false;\n    return !this._credentials.origin || new URL(url).origin.toLowerCase() === this._credentials.origin.toLowerCase();\n  }\n\n  _onRequestPaused(sessionInfo: SessionInfo, event: Protocol.Fetch.requestPausedPayload) {\n    if (!event.networkId) {\n      // Fetch without networkId means that request was not recognized by inspector, and\n      // it will never receive Network.requestWillBeSent. Continue the request to not affect it.\n      sessionInfo.session._sendMayFail('Fetch.continueRequest', { requestId: event.requestId });\n      return;\n    }\n    if (event.request.url.startsWith('data:'))\n      return;\n\n    const requestId = event.networkId;\n    const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(requestId);\n    if (requestWillBeSentEvent) {\n      this._onRequest(requestWillBeSentEvent.sessionInfo, requestWillBeSentEvent.event, sessionInfo, event);\n      this._requestIdToRequestWillBeSentEvent.delete(requestId);\n    } else {\n      const existingRequest = this._requestIdToRequest.get(requestId);\n      const alreadyContinuedParams = existingRequest?._route?._alreadyContinuedParams;\n      if (alreadyContinuedParams && !event.redirectedRequestId) {\n        // Sometimes Chromium network stack restarts the request internally.\n        // For example, when no-cors request hits a \"less public address space\", it should be resent with cors.\n        // There are some more examples here: https://source.chromium.org/chromium/chromium/src/+/main:services/network/url_loader.cc;l=1205-1234;drc=d5dd931e0ad3d9ffe74888ec62a3cc106efd7ea6\n        // There are probably even more cases deep inside the network stack.\n        //\n        // Anyway, in this case, continue the request in the same way as before, and it should go through.\n        //\n        // Note: make sure not to prematurely continue the redirect, which shares the\n        // `networkId` between the original request and the redirect.\n        sessionInfo.session._sendMayFail('Fetch.continueRequest', {\n          ...alreadyContinuedParams,\n          requestId: event.requestId,\n        });\n        return;\n      }\n      this._requestIdToRequestPausedEvent.set(requestId, { sessionInfo, event });\n    }\n  }\n\n  _onRequest(requestWillBeSentSessionInfo: SessionInfo, requestWillBeSentEvent: Protocol.Network.requestWillBeSentPayload, requestPausedSessionInfo: SessionInfo | undefined, requestPausedEvent: Protocol.Fetch.requestPausedPayload | undefined) {\n    if (requestWillBeSentEvent.request.url.startsWith('data:'))\n      return;\n    let redirectedFrom: InterceptableRequest | null = null;\n    if (requestWillBeSentEvent.redirectResponse) {\n      const request = this._requestIdToRequest.get(requestWillBeSentEvent.requestId);\n      // If we connect late to the target, we could have missed the requestWillBeSent event.\n      if (request) {\n        this._handleRequestRedirect(request, requestWillBeSentEvent.redirectResponse, requestWillBeSentEvent.timestamp, requestWillBeSentEvent.redirectHasExtraInfo);\n        redirectedFrom = request;\n      }\n    }\n    let frame = requestWillBeSentEvent.frameId ? this._page?.frameManager.frame(requestWillBeSentEvent.frameId) : requestWillBeSentSessionInfo.workerFrame;\n    // Requests from workers lack frameId, because we receive Network.requestWillBeSent\n    // on the worker target. However, we receive Fetch.requestPaused on the page target,\n    // and lack workerFrame there. Luckily, Fetch.requestPaused provides a frameId.\n    if (!frame && this._page && requestPausedEvent && requestPausedEvent.frameId)\n      frame = this._page.frameManager.frame(requestPausedEvent.frameId);\n\n    // Check if it's main resource request interception (targetId === main frame id).\n    if (!frame && this._page && requestWillBeSentEvent.frameId === (this._page?.delegate as CRPage)._targetId) {\n      // Main resource request for the page is being intercepted so the Frame is not created\n      // yet. Precreate it here for the purposes of request interception. It will be updated\n      // later as soon as the request continues and we receive frame tree from the page.\n      frame = this._page.frameManager.frameAttached(requestWillBeSentEvent.frameId, null);\n    }\n\n    // CORS options preflight request is generated by the network stack. If interception is enabled,\n    // we accept all CORS options, assuming that this was intended when setting route.\n    //\n    // Note: it would be better to match the URL against interception patterns.\n    const isInterceptedOptionsPreflight = !!requestPausedEvent && requestPausedEvent.request.method === 'OPTIONS' && requestWillBeSentEvent.initiator.type === 'preflight';\n    if (isInterceptedOptionsPreflight && (this._page || this._serviceWorker)!.needsRequestInterception()) {\n      const requestHeaders = requestPausedEvent.request.headers;\n      const responseHeaders: Protocol.Fetch.HeaderEntry[] = [\n        { name: 'Access-Control-Allow-Origin', value: requestHeaders['Origin'] || '*' },\n        { name: 'Access-Control-Allow-Methods', value: requestHeaders['Access-Control-Request-Method'] || 'GET, POST, OPTIONS, DELETE' },\n        { name: 'Access-Control-Allow-Credentials', value: 'true' }\n      ];\n      if (requestHeaders['Access-Control-Request-Headers'])\n        responseHeaders.push({ name: 'Access-Control-Allow-Headers', value: requestHeaders['Access-Control-Request-Headers'] });\n      requestPausedSessionInfo!.session._sendMayFail('Fetch.fulfillRequest', {\n        requestId: requestPausedEvent.requestId,\n        responseCode: 204,\n        responsePhrase: network.statusText(204),\n        responseHeaders,\n        body: '',\n      });\n      return;\n    }\n\n    // Non-service-worker requests MUST have a frame—if they don't, we pretend there was no request\n    if (!frame && !this._serviceWorker) {\n      if (requestPausedEvent)\n        requestPausedSessionInfo!.session._sendMayFail('Fetch.continueRequest', { requestId: requestPausedEvent.requestId });\n      return;\n    }\n\n    let route = null;\n    let headersOverride: types.HeadersArray | undefined;\n    if (requestPausedEvent) {\n      // We do not support intercepting redirects.\n      if (redirectedFrom || (!this._userRequestInterceptionEnabled && this._protocolRequestInterceptionEnabled)) {\n        // Chromium does not preserve header overrides between redirects, so we have to do it ourselves.\n        headersOverride = redirectedFrom?._originalRequestRoute?._alreadyContinuedParams?.headers;\n        requestPausedSessionInfo!.session._sendMayFail('Fetch.continueRequest', { requestId: requestPausedEvent.requestId, headers: headersOverride });\n      } else {\n        route = new RouteImpl(requestPausedSessionInfo!.session, requestPausedEvent.requestId);\n      }\n    }\n    const isNavigationRequest = requestWillBeSentEvent.requestId === requestWillBeSentEvent.loaderId && requestWillBeSentEvent.type === 'Document';\n    const documentId = isNavigationRequest ? requestWillBeSentEvent.loaderId : undefined;\n    const request = new InterceptableRequest({\n      session: requestWillBeSentSessionInfo.session,\n      context: (this._page || this._serviceWorker)!.browserContext,\n      frame: frame || null,\n      serviceWorker: this._serviceWorker || null,\n      documentId,\n      route,\n      requestWillBeSentEvent,\n      requestPausedEvent,\n      redirectedFrom,\n      headersOverride: headersOverride || null,\n    });\n    this._requestIdToRequest.set(requestWillBeSentEvent.requestId, request);\n\n    if (route) {\n      // We may not receive extra info when intercepting the request.\n      // Use the headers from the Fetch.requestPausedPayload and release the allHeaders()\n      // right away, so that client can call it from the route handler.\n      request.request.setRawRequestHeaders(headersObjectToArray(requestPausedEvent!.request.headers, '\\n'));\n    }\n    (this._page?.frameManager || this._serviceWorker)!.requestStarted(request.request, route || undefined);\n  }\n\n  _createResponse(request: InterceptableRequest, responsePayload: Protocol.Network.Response, hasExtraInfo: boolean): network.Response {\n    const getResponseBody = async () => {\n      const contentLengthHeader = Object.entries(responsePayload.headers).find(header => header[0].toLowerCase() === 'content-length');\n      const expectedLength = contentLengthHeader ? +contentLengthHeader[1] : undefined;\n\n      const session = request.session;\n      const response = await session.send('Network.getResponseBody', { requestId: request._requestId });\n      if (response.body || !expectedLength)\n        return Buffer.from(response.body, response.base64Encoded ? 'base64' : 'utf8');\n\n      // Make sure no network requests sent while reading the body for fulfilled requests.\n      if (request._route?._fulfilled)\n        return Buffer.from('');\n\n      // For <link prefetch we are going to receive empty body with non-empty content-length expectation. Reach out for the actual content.\n      const resource = await session.send('Network.loadNetworkResource', { url: request.request.url(), frameId: this._serviceWorker ? undefined : request.request.frame()!._id, options: { disableCache: false, includeCredentials: true } });\n      const chunks: Buffer[] = [];\n      while (resource.resource.stream) {\n        const chunk = await session.send('IO.read', { handle: resource.resource.stream });\n        chunks.push(Buffer.from(chunk.data, chunk.base64Encoded ? 'base64' : 'utf-8'));\n        if (chunk.eof) {\n          await session.send('IO.close', { handle: resource.resource.stream });\n          break;\n        }\n      }\n      return Buffer.concat(chunks);\n    };\n    const timingPayload = responsePayload.timing!;\n    let timing: network.ResourceTiming;\n    if (timingPayload && !this._responseExtraInfoTracker.servedFromCache(request._requestId)) {\n      timing = {\n        startTime: (timingPayload.requestTime - request._timestamp + request._wallTime) * 1000,\n        domainLookupStart: timingPayload.dnsStart,\n        domainLookupEnd: timingPayload.dnsEnd,\n        connectStart: timingPayload.connectStart,\n        secureConnectionStart: timingPayload.sslStart,\n        connectEnd: timingPayload.connectEnd,\n        requestStart: timingPayload.sendStart,\n        responseStart: timingPayload.receiveHeadersEnd,\n      };\n    } else {\n      timing = {\n        startTime: request._wallTime * 1000,\n        domainLookupStart: -1,\n        domainLookupEnd: -1,\n        connectStart: -1,\n        secureConnectionStart: -1,\n        connectEnd: -1,\n        requestStart: -1,\n        responseStart: -1,\n      };\n    }\n    const response = new network.Response(request.request, responsePayload.status, responsePayload.statusText, headersObjectToArray(responsePayload.headers), timing, getResponseBody, !!responsePayload.fromServiceWorker, responsePayload.protocol);\n    if (responsePayload?.remoteIPAddress && typeof responsePayload?.remotePort === 'number') {\n      response._serverAddrFinished({\n        ipAddress: responsePayload.remoteIPAddress,\n        port: responsePayload.remotePort,\n      });\n    } else {\n      response._serverAddrFinished();\n    }\n    response._securityDetailsFinished({\n      protocol: responsePayload?.securityDetails?.protocol,\n      subjectName: responsePayload?.securityDetails?.subjectName,\n      issuer: responsePayload?.securityDetails?.issuer,\n      validFrom: responsePayload?.securityDetails?.validFrom,\n      validTo: responsePayload?.securityDetails?.validTo,\n    });\n    this._responseExtraInfoTracker.processResponse(request._requestId, response, hasExtraInfo);\n    return response;\n  }\n\n  _deleteRequest(request: InterceptableRequest) {\n    this._requestIdToRequest.delete(request._requestId);\n    if (request._interceptionId)\n      this._attemptedAuthentications.delete(request._interceptionId);\n  }\n\n  _handleRequestRedirect(request: InterceptableRequest, responsePayload: Protocol.Network.Response, timestamp: number, hasExtraInfo: boolean) {\n    const response = this._createResponse(request, responsePayload, hasExtraInfo);\n    response.setTransferSize(null);\n    response.setEncodedBodySize(null);\n    response._requestFinished((timestamp - request._timestamp) * 1000);\n    this._deleteRequest(request);\n    (this._page?.frameManager || this._serviceWorker)!.requestReceivedResponse(response);\n    (this._page?.frameManager || this._serviceWorker)!.reportRequestFinished(request.request, response);\n  }\n\n  _onResponseReceivedExtraInfo(event: Protocol.Network.responseReceivedExtraInfoPayload) {\n    this._responseExtraInfoTracker.responseReceivedExtraInfo(event);\n  }\n\n  _onResponseReceived(sessionInfo: SessionInfo, event: Protocol.Network.responseReceivedPayload) {\n    let request = this._requestIdToRequest.get(event.requestId);\n    // For frame-level Requests that are handled by a Service Worker's fetch handler, we'll never get a requestPaused event, so we need to\n    // manually create the request. In an ideal world, crNetworkManager would be able to know this on Network.requestWillBeSent, but there\n    // is not enough metadata there.\n    if (!request && event.response.fromServiceWorker) {\n      const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(event.requestId);\n      if (requestWillBeSentEvent) {\n        this._requestIdToRequestWillBeSentEvent.delete(event.requestId);\n        this._onRequest(sessionInfo, requestWillBeSentEvent.event, undefined, undefined);\n        request = this._requestIdToRequest.get(event.requestId);\n      }\n    }\n    // FileUpload sends a response without a matching request.\n    if (!request)\n      return;\n    const response = this._createResponse(request, event.response, event.hasExtraInfo);\n    (this._page?.frameManager || this._serviceWorker)!.requestReceivedResponse(response);\n  }\n\n  _onLoadingFinished(sessionInfo: SessionInfo, event: Protocol.Network.loadingFinishedPayload) {\n    this._responseExtraInfoTracker.loadingFinished(event);\n\n    const request = this._requestIdToRequest.get(event.requestId);\n    // For certain requestIds we never receive requestWillBeSent event.\n    // @see https://crbug.com/750469\n    if (!request)\n      return;\n    this._maybeUpdateRequestSession(sessionInfo, request);\n\n    // Under certain conditions we never get the Network.responseReceived\n    // event from protocol. @see https://crbug.com/883475\n    const response = request.request._existingResponse();\n    if (response) {\n      response.setTransferSize(event.encodedDataLength);\n      response.responseHeadersSize().then(size => response.setEncodedBodySize(event.encodedDataLength - size));\n      response._requestFinished(helper.secondsToRoundishMillis(event.timestamp - request._timestamp));\n    }\n    this._deleteRequest(request);\n    (this._page?.frameManager || this._serviceWorker)!.reportRequestFinished(request.request, response);\n  }\n\n  _onLoadingFailed(sessionInfo: SessionInfo, event: Protocol.Network.loadingFailedPayload) {\n    this._responseExtraInfoTracker.loadingFailed(event);\n\n    let request = this._requestIdToRequest.get(event.requestId);\n\n    if (!request) {\n      const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(event.requestId);\n      if (requestWillBeSentEvent) {\n        // This is a case where request has failed before we had a chance to intercept it.\n        // We stop waiting for Fetch.requestPaused (it might never come), and dispatch request event\n        // right away, followed by requestfailed event.\n        this._requestIdToRequestWillBeSentEvent.delete(event.requestId);\n        this._onRequest(sessionInfo, requestWillBeSentEvent.event, undefined, undefined);\n        request = this._requestIdToRequest.get(event.requestId);\n      }\n    }\n\n    // For certain requestIds we never receive requestWillBeSent event.\n    // @see https://crbug.com/750469\n    if (!request)\n      return;\n    this._maybeUpdateRequestSession(sessionInfo, request);\n    const response = request.request._existingResponse();\n    if (response) {\n      response.setTransferSize(null);\n      response.setEncodedBodySize(null);\n      response._requestFinished(helper.secondsToRoundishMillis(event.timestamp - request._timestamp));\n    } else {\n      // Loading failed before response has arrived - there will be no extra info events.\n      request.request.setRawRequestHeaders(null);\n    }\n    this._deleteRequest(request);\n    request.request._setFailureText(event.errorText || event.blockedReason || '');\n    (this._page?.frameManager || this._serviceWorker)!.requestFailed(request.request, !!event.canceled);\n  }\n\n  private _maybeUpdateRequestSession(sessionInfo: SessionInfo, request: InterceptableRequest) {\n    // OOPIF has a main request that starts in the parent session but finishes in the child session.\n    // We check for the main request by matching loaderId and requestId, and if it now belongs to\n    // a child session, migrate it there.\n    //\n    // Same goes for the main worker script with PlzDedicatedWorker enabled, which is the default.\n    // Here we check the `workerFrame`.\n    //\n    // In theory, we can always update the session. However, we try to be conservative here\n    // to make sure we understand all the scenarios where the session should be updated.\n    if (request.session !== sessionInfo.session && !sessionInfo.isMain && (request._documentId === request._requestId || sessionInfo.workerFrame))\n      request.session = sessionInfo.session;\n  }\n}\n\nclass InterceptableRequest {\n  readonly request: network.Request;\n  readonly _requestId: string;\n  readonly _interceptionId: string | undefined;\n  readonly _documentId: string | undefined;\n  readonly _timestamp: number;\n  readonly _wallTime: number;\n  readonly _route: RouteImpl | null;\n  // Only first request in the chain can be intercepted, so this will\n  // store the first and only Route in the chain (if any).\n  readonly _originalRequestRoute: RouteImpl | undefined;\n  session: CRSession;\n\n  constructor(options: {\n    session: CRSession,\n    context: contexts.BrowserContext;\n    frame: frames.Frame | null;\n    serviceWorker: CRServiceWorker | null;\n    documentId?: string;\n    route: RouteImpl | null;\n    requestWillBeSentEvent: Protocol.Network.requestWillBeSentPayload;\n    requestPausedEvent: Protocol.Fetch.requestPausedPayload | undefined;\n    redirectedFrom: InterceptableRequest | null;\n    headersOverride: types.HeadersArray | null;\n  }) {\n    const { session, context, frame, documentId, route, requestWillBeSentEvent, requestPausedEvent, redirectedFrom, serviceWorker, headersOverride } = options;\n    this.session = session;\n    this._timestamp = requestWillBeSentEvent.timestamp;\n    this._wallTime = requestWillBeSentEvent.wallTime;\n    this._requestId = requestWillBeSentEvent.requestId;\n    this._interceptionId = requestPausedEvent && requestPausedEvent.requestId;\n    this._documentId = documentId;\n    this._route = route;\n    this._originalRequestRoute = route ?? redirectedFrom?._originalRequestRoute;\n\n    const {\n      headers,\n      method,\n      url,\n      postDataEntries = null,\n    } = requestPausedEvent ? requestPausedEvent.request : requestWillBeSentEvent.request;\n    const type = (requestWillBeSentEvent.type || '').toLowerCase();\n    let postDataBuffer = null;\n    const entries = postDataEntries?.filter(entry => entry.bytes);\n    if (entries && entries.length)\n      postDataBuffer = Buffer.concat(entries.map(entry => Buffer.from(entry.bytes!, 'base64')));\n\n    this.request = new network.Request(context, frame, serviceWorker, redirectedFrom?.request || null, documentId, url, type, method, postDataBuffer,  headersOverride || headersObjectToArray(headers));\n  }\n}\n\nclass RouteImpl implements network.RouteDelegate {\n  private readonly _session: CRSession;\n  private _interceptionId: string;\n  _alreadyContinuedParams: Protocol.Fetch.continueRequestParameters | undefined;\n  _fulfilled: boolean = false;\n\n  constructor(session: CRSession, interceptionId: string) {\n    this._session = session;\n    this._interceptionId = interceptionId;\n  }\n\n  async continue(overrides: types.NormalizedContinueOverrides): Promise<void> {\n    this._alreadyContinuedParams = {\n      requestId: this._interceptionId!,\n      url: overrides.url,\n      headers: overrides.headers,\n      method: overrides.method,\n      postData: overrides.postData ? overrides.postData.toString('base64') : undefined\n    };\n    await catchDisallowedErrors(async () => {\n      await this._session.send('Fetch.continueRequest', this._alreadyContinuedParams);\n    });\n  }\n\n  async fulfill(response: types.NormalizedFulfillResponse) {\n    this._fulfilled = true;\n    const body = response.isBase64 ? response.body : Buffer.from(response.body).toString('base64');\n\n    const responseHeaders = splitSetCookieHeader(response.headers);\n    await catchDisallowedErrors(async () => {\n      await this._session.send('Fetch.fulfillRequest', {\n        requestId: this._interceptionId!,\n        responseCode: response.status,\n        responsePhrase: network.statusText(response.status),\n        responseHeaders,\n        body,\n      });\n    });\n  }\n\n  async abort(errorCode: string = 'failed') {\n    const errorReason = errorReasons[errorCode];\n    assert(errorReason, 'Unknown error code: ' + errorCode);\n    await catchDisallowedErrors(async () => {\n      await this._session.send('Fetch.failRequest', {\n        requestId: this._interceptionId!,\n        errorReason\n      });\n    });\n  }\n}\n\n// In certain cases, protocol will return error if the request was already canceled\n// or the page was closed. We should tolerate these errors but propagate other.\nasync function catchDisallowedErrors(callback: () => Promise<void>) {\n  try {\n    return await callback();\n  } catch (e) {\n    if (isProtocolError(e) && e.message.includes('Invalid http status code or phrase'))\n      throw e;\n    if (isProtocolError(e) && e.message.includes('Unsafe header'))\n      throw e;\n  }\n}\n\n\nfunction splitSetCookieHeader(headers: types.HeadersArray): types.HeadersArray {\n  const index = headers.findIndex(({ name }) => name.toLowerCase() === 'set-cookie');\n  if (index === -1)\n    return headers;\n\n  const header = headers[index];\n  const values = header.value.split('\\n');\n  if (values.length === 1)\n    return headers;\n  const result = headers.slice();\n  result.splice(index, 1, ...values.map(value => ({ name: header.name, value })));\n  return result;\n}\n\nconst errorReasons: { [reason: string]: Protocol.Network.ErrorReason } = {\n  'aborted': 'Aborted',\n  'accessdenied': 'AccessDenied',\n  'addressunreachable': 'AddressUnreachable',\n  'blockedbyclient': 'BlockedByClient',\n  'blockedbyresponse': 'BlockedByResponse',\n  'connectionaborted': 'ConnectionAborted',\n  'connectionclosed': 'ConnectionClosed',\n  'connectionfailed': 'ConnectionFailed',\n  'connectionrefused': 'ConnectionRefused',\n  'connectionreset': 'ConnectionReset',\n  'internetdisconnected': 'InternetDisconnected',\n  'namenotresolved': 'NameNotResolved',\n  'timedout': 'TimedOut',\n  'failed': 'Failed',\n};\n\ntype RequestInfo = {\n  requestId: string,\n  // Events are replaced with \"undefined\" to avoid updating the same headers twice.\n  requestWillBeSentExtraInfo: (Protocol.Network.requestWillBeSentExtraInfoPayload | undefined)[],\n  responseReceivedExtraInfo: (Protocol.Network.responseReceivedExtraInfoPayload | undefined)[],\n  // Note: we only put the responses that expect extra info in this list.\n  // Since the order of responses and extraInfo events is the same, each response\n  // will get a pair of matching request/response extraInfo events in this list.\n  responses: network.Response[],\n  loadingFinished?: Protocol.Network.loadingFinishedPayload,\n  loadingFailed?: Protocol.Network.loadingFailedPayload,\n  servedFromCache?: boolean,\n};\n\n// This class aligns responses with response headers from extra info:\n//   - Network.requestWillBeSent, Network.responseReceived, Network.loadingFinished/loadingFailed are\n//     dispatched using one channel.\n//   - Network.requestWillBeSentExtraInfo and Network.responseReceivedExtraInfo are dispatched on\n//     another channel. Those channels are not associated, so events come in random order.\n//\n// This class will associate responses with the new headers. These extra info headers will become\n// available to client reliably upon requestfinished event only. It consumes CDP\n// signals on one end and processResponse(network.Response) signals on the other hands. It then makes\n// sure that responses have all the extra headers in place by the time request finishes.\n//\n// The shape of the instrumentation API is deliberately following the CDP, so that it\n// is clear what is called when and what this means to the tracker without extra\n// documentation.\nclass ResponseExtraInfoTracker {\n  private _requests = new Map<string, RequestInfo>();\n\n  requestWillBeSentExtraInfo(event: Protocol.Network.requestWillBeSentExtraInfoPayload) {\n    const info = this._getOrCreateEntry(event.requestId);\n    info.requestWillBeSentExtraInfo.push(event);\n    this._patchHeaders(info, info.requestWillBeSentExtraInfo.length - 1);\n    this._checkFinished(info);\n  }\n\n  requestServedFromCache(event: Protocol.Network.requestServedFromCachePayload) {\n    const info = this._getOrCreateEntry(event.requestId);\n    info.servedFromCache = true;\n  }\n\n  servedFromCache(requestId: string): boolean {\n    const info = this._requests.get(requestId);\n    return !!info?.servedFromCache;\n  }\n\n  responseReceivedExtraInfo(event: Protocol.Network.responseReceivedExtraInfoPayload) {\n    const info = this._getOrCreateEntry(event.requestId);\n    info.responseReceivedExtraInfo.push(event);\n    this._patchHeaders(info, info.responseReceivedExtraInfo.length - 1);\n    this._checkFinished(info);\n  }\n\n  processResponse(requestId: string, response: network.Response, hasExtraInfo: boolean) {\n    let info = this._requests.get(requestId);\n    // Cached responses have erroneous \"hasExtraInfo\" flag.\n    // https://bugs.chromium.org/p/chromium/issues/detail?id=1340398\n    if (!hasExtraInfo || info?.servedFromCache) {\n      // Use \"provisional\" headers as \"raw\" ones.\n      response.request().setRawRequestHeaders(null);\n      response.setResponseHeadersSize(null);\n      response.setRawResponseHeaders(null);\n      return;\n    }\n\n    info = this._getOrCreateEntry(requestId);\n    info.responses.push(response);\n    this._patchHeaders(info, info.responses.length - 1);\n  }\n\n  loadingFinished(event: Protocol.Network.loadingFinishedPayload) {\n    const info = this._requests.get(event.requestId);\n    if (!info)\n      return;\n    info.loadingFinished = event;\n    this._checkFinished(info);\n  }\n\n  loadingFailed(event: Protocol.Network.loadingFailedPayload) {\n    const info = this._requests.get(event.requestId);\n    if (!info)\n      return;\n    info.loadingFailed = event;\n    this._checkFinished(info);\n  }\n\n  _getOrCreateEntry(requestId: string): RequestInfo {\n    let info = this._requests.get(requestId);\n    if (!info) {\n      info = {\n        requestId: requestId,\n        requestWillBeSentExtraInfo: [],\n        responseReceivedExtraInfo: [],\n        responses: [],\n      };\n      this._requests.set(requestId, info);\n    }\n    return info;\n  }\n\n  private _patchHeaders(info: RequestInfo, index: number) {\n    const response = info.responses[index];\n    const requestExtraInfo = info.requestWillBeSentExtraInfo[index];\n    if (response && requestExtraInfo) {\n      response.request().setRawRequestHeaders(headersObjectToArray(requestExtraInfo.headers, '\\n'));\n      info.requestWillBeSentExtraInfo[index] = undefined;\n    }\n    const responseExtraInfo = info.responseReceivedExtraInfo[index];\n    if (response && responseExtraInfo) {\n      response.setResponseHeadersSize(responseExtraInfo.headersText?.length || 0);\n      response.setRawResponseHeaders(headersObjectToArray(responseExtraInfo.headers, '\\n'));\n      info.responseReceivedExtraInfo[index] = undefined;\n    }\n  }\n\n  private _checkFinished(info: RequestInfo) {\n    if (!info.loadingFinished && !info.loadingFailed)\n      return;\n\n    if (info.responses.length <= info.responseReceivedExtraInfo.length) {\n      // We have extra info for each response.\n      this._stopTracking(info.requestId);\n      return;\n    }\n\n    // We are not done yet.\n  }\n\n  private _stopTracking(requestId: string) {\n    this._requests.delete(requestId);\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { readProtocolStream } from './crProtocolHelper';\nimport { assert } from '../../utils';\n\nimport type { CRSession } from './crConnection';\nimport type * as channels from '@protocol/channels';\n\nconst PagePaperFormats: { [key: string]: { width: number, height: number }} = {\n  letter: { width: 8.5, height: 11 },\n  legal: { width: 8.5, height: 14 },\n  tabloid: { width: 11, height: 17 },\n  ledger: { width: 17, height: 11 },\n  a0: { width: 33.1, height: 46.8 },\n  a1: { width: 23.4, height: 33.1 },\n  a2: { width: 16.54, height: 23.4 },\n  a3: { width: 11.7, height: 16.54 },\n  a4: { width: 8.27, height: 11.7 },\n  a5: { width: 5.83, height: 8.27 },\n  a6: { width: 4.13, height: 5.83 },\n};\n\nconst unitToPixels: { [key: string]: number } = {\n  'px': 1,\n  'in': 96,\n  'cm': 37.8,\n  'mm': 3.78\n};\n\nfunction convertPrintParameterToInches(text: string | undefined): number | undefined {\n  if (text === undefined)\n    return undefined;\n  let unit = text.substring(text.length - 2).toLowerCase();\n  let valueText = '';\n  if (unitToPixels.hasOwnProperty(unit)) {\n    valueText = text.substring(0, text.length - 2);\n  } else {\n    // In case of unknown unit try to parse the whole parameter as number of pixels.\n    // This is consistent with phantom's paperSize behavior.\n    unit = 'px';\n    valueText = text;\n  }\n  const value = Number(valueText);\n  assert(!isNaN(value), 'Failed to parse parameter value: ' + text);\n  const pixels = value * unitToPixels[unit];\n  return pixels / 96;\n}\n\nexport class CRPDF {\n  private _client: CRSession;\n\n  constructor(client: CRSession) {\n    this._client = client;\n  }\n\n  async generate(options: channels.PagePdfParams): Promise<Buffer> {\n    const {\n      scale = 1,\n      displayHeaderFooter = false,\n      headerTemplate = '',\n      footerTemplate = '',\n      printBackground = false,\n      landscape = false,\n      pageRanges = '',\n      preferCSSPageSize = false,\n      margin = {},\n      tagged = false,\n      outline = false\n    } = options;\n\n    let paperWidth = 8.5;\n    let paperHeight = 11;\n    if (options.format) {\n      const format = PagePaperFormats[options.format.toLowerCase()];\n      assert(format, 'Unknown paper format: ' + options.format);\n      paperWidth = format.width;\n      paperHeight = format.height;\n    } else {\n      paperWidth = convertPrintParameterToInches(options.width) || paperWidth;\n      paperHeight = convertPrintParameterToInches(options.height) || paperHeight;\n    }\n\n    const marginTop = convertPrintParameterToInches(margin.top) || 0;\n    const marginLeft = convertPrintParameterToInches(margin.left) || 0;\n    const marginBottom = convertPrintParameterToInches(margin.bottom) || 0;\n    const marginRight = convertPrintParameterToInches(margin.right) || 0;\n    const generateDocumentOutline = outline;\n    const generateTaggedPDF = tagged;\n    const result = await this._client.send('Page.printToPDF', {\n      transferMode: 'ReturnAsStream',\n      landscape,\n      displayHeaderFooter,\n      headerTemplate,\n      footerTemplate,\n      printBackground,\n      scale,\n      paperWidth,\n      paperHeight,\n      marginTop,\n      marginBottom,\n      marginLeft,\n      marginRight,\n      pageRanges,\n      preferCSSPageSize,\n      generateTaggedPDF,\n      generateDocumentOutline\n    });\n    return await readProtocolStream(this._client, result.stream!);\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Protocol } from './protocol';\n\n// DO NOT EDIT: this map is generated from Chromium source code by utils/generate_chromium_default_font_families.js\nexport const platformToFontFamilies: { [key in 'linux'|'mac'|'win']: Protocol.Page.setFontFamiliesParameters } = {\n  'linux': {\n    'fontFamilies': {\n      'standard': 'Times New Roman',\n      'fixed': 'Monospace',\n      'serif': 'Times New Roman',\n      'sansSerif': 'Arial',\n      'cursive': 'Comic Sans MS',\n      'fantasy': 'Impact',\n    }\n  },\n  'mac': {\n    'fontFamilies': {\n      'standard': 'Times',\n      'fixed': 'Courier',\n      'serif': 'Times',\n      'sansSerif': 'Helvetica',\n      'cursive': 'Apple Chancery',\n      'fantasy': 'Papyrus',\n    },\n    'forScripts': [\n      {\n        'script': 'jpan',\n        'fontFamilies': {\n          'standard': 'Hiragino Kaku Gothic ProN',\n          'fixed': 'Osaka-Mono',\n          'serif': 'Hiragino Mincho ProN',\n          'sansSerif': 'Hiragino Kaku Gothic ProN'\n        }\n      },\n      {\n        'script': 'hang',\n        'fontFamilies': {\n          'standard': 'Apple SD Gothic Neo',\n          'serif': 'AppleMyungjo',\n          'sansSerif': 'Apple SD Gothic Neo'\n        }\n      },\n      {\n        'script': 'hans',\n        'fontFamilies': {\n          'standard': ',PingFang SC,STHeiti',\n          'serif': 'Songti SC',\n          'sansSerif': ',PingFang SC,STHeiti',\n          'cursive': 'Kaiti SC'\n        }\n      },\n      {\n        'script': 'hant',\n        'fontFamilies': {\n          'standard': ',PingFang TC,Heiti TC',\n          'serif': 'Songti TC',\n          'sansSerif': ',PingFang TC,Heiti TC',\n          'cursive': 'Kaiti TC'\n        }\n      }\n    ]\n  },\n  'win': {\n    'fontFamilies': {\n      'standard': 'Times New Roman',\n      'fixed': 'Consolas',\n      'serif': 'Times New Roman',\n      'sansSerif': 'Arial',\n      'cursive': 'Comic Sans MS',\n      'fantasy': 'Impact',\n    },\n    'forScripts': [\n      {\n        'script': 'cyrl',\n        'fontFamilies': {\n          'standard': 'Times New Roman',\n          'fixed': 'Courier New',\n          'serif': 'Times New Roman',\n          'sansSerif': 'Arial'\n        }\n      },\n      {\n        'script': 'arab',\n        'fontFamilies': {\n          'fixed': 'Courier New',\n          'sansSerif': 'Segoe UI'\n        }\n      },\n      {\n        'script': 'grek',\n        'fontFamilies': {\n          'standard': 'Times New Roman',\n          'fixed': 'Courier New',\n          'serif': 'Times New Roman',\n          'sansSerif': 'Arial'\n        }\n      },\n      {\n        'script': 'jpan',\n        'fontFamilies': {\n          'standard': ',Meiryo,Yu Gothic',\n          'fixed': 'MS Gothic',\n          'serif': ',Yu Mincho,MS PMincho',\n          'sansSerif': ',Meiryo,Yu Gothic'\n        }\n      },\n      {\n        'script': 'hang',\n        'fontFamilies': {\n          'standard': 'Malgun Gothic',\n          'fixed': 'Gulimche',\n          'serif': 'Batang',\n          'sansSerif': 'Malgun Gothic',\n          'cursive': 'Gungsuh'\n        }\n      },\n      {\n        'script': 'hans',\n        'fontFamilies': {\n          'standard': 'Microsoft YaHei',\n          'fixed': 'NSimsun',\n          'serif': 'Simsun',\n          'sansSerif': 'Microsoft YaHei',\n          'cursive': 'KaiTi'\n        }\n      },\n      {\n        'script': 'hant',\n        'fontFamilies': {\n          'standard': 'Microsoft JhengHei',\n          'fixed': 'MingLiU',\n          'serif': 'PMingLiU',\n          'sansSerif': 'Microsoft JhengHei',\n          'cursive': 'DFKai-SB'\n        }\n      }\n    ]\n  }\n};\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, monotonicTime } from '../../utils';\nimport { serverSideCallMetadata } from '../instrumentation';\nimport { Page } from '../page';\nimport { launchProcess } from '../utils/processLauncher';\nimport { ProgressController } from '../progress';\n\nimport type { Progress } from '../progress';\nimport type * as types from '../types';\nimport type { ChildProcess } from 'child_process';\n\nconst fps = 25;\n\nexport class VideoRecorder {\n  private _process: ChildProcess | null = null;\n  private _gracefullyClose: (() => Promise<void>) | null = null;\n  private _lastWritePromise: Promise<void> = Promise.resolve();\n  private _lastFrameTimestamp: number = 0;\n  private _lastFrameBuffer: Buffer | null = null;\n  private _lastWriteTimestamp: number = 0;\n  private readonly _progress: Progress;\n  private _frameQueue: Buffer[] = [];\n  private _isStopped = false;\n  private _ffmpegPath: string;\n\n  static async launch(page: Page, ffmpegPath: string, options: types.PageScreencastOptions): Promise<VideoRecorder> {\n    if (!options.outputFile.endsWith('.webm'))\n      throw new Error('File must have .webm extension');\n\n    const controller = new ProgressController(serverSideCallMetadata(), page);\n    controller.setLogName('browser');\n    return await controller.run(async progress => {\n      const recorder = new VideoRecorder(page, ffmpegPath, progress);\n      await recorder._launch(options);\n      return recorder;\n    });\n  }\n\n  private constructor(page: Page, ffmpegPath: string, progress: Progress) {\n    this._progress = progress;\n    this._ffmpegPath = ffmpegPath;\n    page.on(Page.Events.ScreencastFrame, frame => this.writeFrame(frame.buffer, frame.frameSwapWallTime / 1000));\n  }\n\n  private async _launch(options: types.PageScreencastOptions) {\n    // How to tune the codec:\n    // 1. Read vp8 documentation to figure out the options.\n    //   https://www.webmproject.org/docs/encoder-parameters/\n    // 2. Use the following command to map the options to ffmpeg arguments.\n    //   $ ./third_party/ffmpeg/ffmpeg-mac -h encoder=vp8\n    // 3. A bit more about passing vp8 options to ffmpeg.\n    //   https://trac.ffmpeg.org/wiki/Encode/VP8\n    // 4. Tuning for VP9:\n    //   https://developers.google.com/media/vp9/live-encoding\n    //\n    // How to stress-test video recording (runs 10 recorders in parallel to book all cpus available):\n    //   $ node ./utils/video_stress.js\n    //\n    // We use the following vp8 options:\n    //   \"-qmin 0 -qmax 50\" - quality variation from 0 to 50.\n    //     Suggested here: https://trac.ffmpeg.org/wiki/Encode/VP8\n    //   \"-crf 8\" - constant quality mode, 4-63, lower means better quality.\n    //   \"-deadline realtime -speed 8\" - do not use too much cpu to keep up with incoming frames.\n    //   \"-b:v 1M\" - video bitrate. Default value is too low for vp8\n    //     Suggested here: https://trac.ffmpeg.org/wiki/Encode/VP8\n    //   Note that we can switch to \"-qmin 20 -qmax 50 -crf 30\" for smaller video size but worse quality.\n    //\n    // We use \"pad\" and \"crop\" video filters (-vf option) to resize incoming frames\n    // that might be of the different size to the desired video size.\n    //   https://ffmpeg.org/ffmpeg-filters.html#pad-1\n    //   https://ffmpeg.org/ffmpeg-filters.html#crop\n    //\n    // We use \"image2pipe\" mode to pipe frames and get a single video - https://trac.ffmpeg.org/wiki/Slideshow\n    //   \"-f image2pipe -c:v mjpeg -i -\" forces input to be read from standard input, and forces\n    //     mjpeg input image format.\n    //   \"-avioflags direct\" reduces general buffering.\n    //   \"-fpsprobesize 0 -probesize 32 -analyzeduration 0\" reduces initial buffering\n    //     while analyzing input fps and other stats.\n    //\n    // \"-y\" means overwrite output.\n    // \"-an\" means no audio.\n    // \"-threads 1\" means using one thread. This drastically reduces stalling when\n    //   cpu is overbooked. By default vp8 tries to use all available threads?\n\n    const w = options.width;\n    const h = options.height;\n    const args = `-loglevel error -f image2pipe -avioflags direct -fpsprobesize 0 -probesize 32 -analyzeduration 0 -c:v mjpeg -i pipe:0 -y -an -r ${fps} -c:v vp8 -qmin 0 -qmax 50 -crf 8 -deadline realtime -speed 8 -b:v 1M -threads 1 -vf pad=${w}:${h}:0:0:gray,crop=${w}:${h}:0:0`.split(' ');\n    args.push(options.outputFile);\n    const progress = this._progress;\n\n    const { launchedProcess, gracefullyClose } = await launchProcess({\n      command: this._ffmpegPath,\n      args,\n      stdio: 'stdin',\n      log: (message: string) => progress.log(message),\n      tempDirectories: [],\n      attemptToGracefullyClose: async () => {\n        progress.log('Closing stdin...');\n        launchedProcess.stdin!.end();\n      },\n      onExit: (exitCode, signal) => {\n        progress.log(`ffmpeg onkill exitCode=${exitCode} signal=${signal}`);\n      },\n    });\n    launchedProcess.stdin!.on('finish', () => {\n      progress.log('ffmpeg finished input.');\n    });\n    launchedProcess.stdin!.on('error', () => {\n      progress.log('ffmpeg error.');\n    });\n    this._process = launchedProcess;\n    this._gracefullyClose = gracefullyClose;\n  }\n\n  writeFrame(frame: Buffer, timestamp: number) {\n    assert(this._process);\n    if (this._isStopped)\n      return;\n\n    if (this._lastFrameBuffer) {\n      const durationSec = timestamp - this._lastFrameTimestamp;\n      const repeatCount = Math.max(1, Math.round(fps * durationSec));\n      for (let i = 0; i < repeatCount; ++i)\n        this._frameQueue.push(this._lastFrameBuffer);\n      this._lastWritePromise = this._lastWritePromise.then(() => this._sendFrames());\n    }\n\n    this._lastFrameBuffer = frame;\n    this._lastFrameTimestamp = timestamp;\n    this._lastWriteTimestamp = monotonicTime();\n  }\n\n  private async _sendFrames() {\n    while (this._frameQueue.length)\n      await this._sendFrame(this._frameQueue.shift()!);\n  }\n\n  private async _sendFrame(frame: Buffer) {\n    return new Promise(f => this._process!.stdin!.write(frame, f)).then(error => {\n      if (error)\n        this._progress.log(`ffmpeg failed to write: ${String(error)}`);\n    });\n  }\n\n  async stop() {\n    if (this._isStopped)\n      return;\n    this.writeFrame(Buffer.from([]), this._lastFrameTimestamp + (monotonicTime() - this._lastWriteTimestamp) / 1000);\n    this._isStopped = true;\n    await this._lastWritePromise;\n    await this._gracefullyClose!();\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport path from 'path';\n\nimport { assert } from '../../utils/isomorphic/assert';\nimport { createGuid } from '../utils/crypto';\nimport { eventsHelper } from '../utils/eventsHelper';\nimport { rewriteErrorMessage } from '../../utils/isomorphic/stackTrace';\nimport * as dialog from '../dialog';\nimport * as dom from '../dom';\nimport * as frames from '../frames';\nimport { helper } from '../helper';\nimport * as network from '../network';\nimport { Page, PageBinding, Worker } from '../page';\nimport { registry } from '../registry';\nimport { getAccessibilityTree } from './crAccessibility';\nimport { CRBrowserContext } from './crBrowser';\nimport { CRCoverage } from './crCoverage';\nimport { DragManager } from './crDragDrop';\nimport { createHandle, CRExecutionContext } from './crExecutionContext';\nimport { RawKeyboardImpl, RawMouseImpl, RawTouchscreenImpl } from './crInput';\nimport { CRNetworkManager } from './crNetworkManager';\nimport { CRPDF } from './crPdf';\nimport { exceptionToError, releaseObject, toConsoleMessageLocation } from './crProtocolHelper';\nimport { platformToFontFamilies } from './defaultFontFamilies';\nimport { VideoRecorder } from './videoRecorder';\nimport { BrowserContext } from '../browserContext';\nimport { TargetClosedError } from '../errors';\nimport { isSessionClosedError } from '../protocolError';\n\nimport type { CRSession } from './crConnection';\nimport type { Protocol } from './protocol';\nimport type { RegisteredListener } from '../utils/eventsHelper';\nimport type { InitScript, PageDelegate } from '../page';\nimport type { Progress } from '../progress';\nimport type * as types from '../types';\nimport type * as channels from '@protocol/channels';\n\n\nexport type WindowBounds = { top?: number, left?: number, width?: number, height?: number };\n\nexport class CRPage implements PageDelegate {\n  readonly utilityWorldName: string;\n  readonly _mainFrameSession: FrameSession;\n  readonly _sessions = new Map<Protocol.Target.TargetID, FrameSession>();\n  readonly _page: Page;\n  readonly rawMouse: RawMouseImpl;\n  readonly rawKeyboard: RawKeyboardImpl;\n  readonly rawTouchscreen: RawTouchscreenImpl;\n  readonly _targetId: string;\n  readonly _opener: CRPage | null;\n  readonly _networkManager: CRNetworkManager;\n  private readonly _pdf: CRPDF;\n  private readonly _coverage: CRCoverage;\n  readonly _browserContext: CRBrowserContext;\n  private _isBackgroundPage: boolean;\n\n  // Holds window features for the next popup being opened via window.open,\n  // until the popup target arrives. This could be racy if two oopifs\n  // simultaneously call window.open with window features: the order\n  // of their Page.windowOpen events is not guaranteed to match the order\n  // of new popup targets.\n  readonly _nextWindowOpenPopupFeatures: string[][] = [];\n\n  static mainFrameSession(page: Page): FrameSession {\n    const crPage = page.delegate as CRPage;\n    return crPage._mainFrameSession;\n  }\n\n  constructor(client: CRSession, targetId: string, browserContext: CRBrowserContext, opener: CRPage | null, bits: { hasUIWindow: boolean, isBackgroundPage: boolean }) {\n    this._targetId = targetId;\n    this._opener = opener;\n    this._isBackgroundPage = bits.isBackgroundPage;\n    const dragManager = new DragManager(this);\n    this.rawKeyboard = new RawKeyboardImpl(client, browserContext._browser._platform() === 'mac', dragManager);\n    this.rawMouse = new RawMouseImpl(this, client, dragManager);\n    this.rawTouchscreen = new RawTouchscreenImpl(client);\n    this._pdf = new CRPDF(client);\n    this._coverage = new CRCoverage(client);\n    this._browserContext = browserContext;\n    this._page = new Page(this, browserContext);\n    // Create a unique utility world for this Playwright instance, just in case there\n    // are multiple instances of Playwright connected to the same browser page.\n    this.utilityWorldName = `__playwright_utility_world_${this._page.guid}`;\n    this._networkManager = new CRNetworkManager(this._page, null);\n    // Sync any browser context state to the network manager. This does not talk over CDP because\n    // we have not connected any sessions to the network manager yet.\n    this.updateOffline();\n    this.updateExtraHTTPHeaders();\n    this.updateHttpCredentials();\n    this.updateRequestInterception();\n    this._mainFrameSession = new FrameSession(this, client, targetId, null);\n    this._sessions.set(targetId, this._mainFrameSession);\n    if (opener && !browserContext._options.noDefaultViewport) {\n      const features = opener._nextWindowOpenPopupFeatures.shift() || [];\n      const viewportSize = helper.getViewportSizeFromWindowFeatures(features);\n      if (viewportSize)\n        this._page.setEmulatedSizeFromWindowOpen({ viewport: viewportSize, screen: viewportSize });\n    }\n\n    const createdEvent = this._isBackgroundPage ? CRBrowserContext.CREvents.BackgroundPage : BrowserContext.Events.Page;\n    this._mainFrameSession._initialize(bits.hasUIWindow).then(\n        () => this._page.reportAsNew(this._opener?._page, undefined, createdEvent),\n        error => this._page.reportAsNew(this._opener?._page, error, createdEvent));\n  }\n\n  private async _forAllFrameSessions(cb: (frame: FrameSession) => Promise<any>) {\n    const frameSessions = Array.from(this._sessions.values());\n    await Promise.all(frameSessions.map(frameSession => {\n      if (frameSession._isMainFrame())\n        return cb(frameSession);\n      return cb(frameSession).catch(e => {\n        // Broadcasting a message to the closed iframe should be a noop.\n        if (isSessionClosedError(e))\n          return;\n        throw e;\n      });\n    }));\n  }\n\n  _sessionForFrame(frame: frames.Frame): FrameSession {\n    // Frame id equals target id.\n    while (!this._sessions.has(frame._id)) {\n      const parent = frame.parentFrame();\n      if (!parent)\n        throw new Error(`Frame has been detached.`);\n      frame = parent;\n    }\n    return this._sessions.get(frame._id)!;\n  }\n\n  private _sessionForHandle(handle: dom.ElementHandle): FrameSession {\n    const frame = handle._context.frame;\n    return this._sessionForFrame(frame);\n  }\n\n  willBeginDownload() {\n    this._mainFrameSession._willBeginDownload();\n  }\n\n  didClose() {\n    for (const session of this._sessions.values())\n      session.dispose();\n    this._page._didClose();\n  }\n\n  async navigateFrame(frame: frames.Frame, url: string, referrer: string | undefined): Promise<frames.GotoResult> {\n    return this._sessionForFrame(frame)._navigate(frame, url, referrer);\n  }\n\n  async updateExtraHTTPHeaders(): Promise<void> {\n    const headers = network.mergeHeaders([\n      this._browserContext._options.extraHTTPHeaders,\n      this._page.extraHTTPHeaders()\n    ]);\n    await this._networkManager.setExtraHTTPHeaders(headers);\n  }\n\n  async updateGeolocation(): Promise<void> {\n    await this._forAllFrameSessions(frame => frame._updateGeolocation(false));\n  }\n\n  async updateOffline(): Promise<void> {\n    await this._networkManager.setOffline(!!this._browserContext._options.offline);\n  }\n\n  async updateHttpCredentials(): Promise<void> {\n    await this._networkManager.authenticate(this._browserContext._options.httpCredentials || null);\n  }\n\n  async updateEmulatedViewportSize(preserveWindowBoundaries?: boolean): Promise<void> {\n    await this._mainFrameSession._updateViewport(preserveWindowBoundaries);\n  }\n\n  async bringToFront(): Promise<void> {\n    await this._mainFrameSession._client.send('Page.bringToFront');\n  }\n\n  async updateEmulateMedia(): Promise<void> {\n    await this._forAllFrameSessions(frame => frame._updateEmulateMedia());\n  }\n\n  async updateUserAgent(): Promise<void> {\n    await this._forAllFrameSessions(frame => frame._updateUserAgent());\n  }\n\n  async updateRequestInterception(): Promise<void> {\n    await this._networkManager.setRequestInterception(this._page.needsRequestInterception());\n  }\n\n  async updateFileChooserInterception() {\n    await this._forAllFrameSessions(frame => frame._updateFileChooserInterception(false));\n  }\n\n  async reload(): Promise<void> {\n    await this._mainFrameSession._client.send('Page.reload');\n  }\n\n  private async _go(delta: number): Promise<boolean> {\n    const history = await this._mainFrameSession._client.send('Page.getNavigationHistory');\n    const entry = history.entries[history.currentIndex + delta];\n    if (!entry)\n      return false;\n    await this._mainFrameSession._client.send('Page.navigateToHistoryEntry', { entryId: entry.id });\n    return true;\n  }\n\n  goBack(): Promise<boolean> {\n    return this._go(-1);\n  }\n\n  goForward(): Promise<boolean> {\n    return this._go(+1);\n  }\n\n  async requestGC(): Promise<void> {\n    await this._mainFrameSession._client.send('HeapProfiler.collectGarbage');\n  }\n\n  async addInitScript(initScript: InitScript, world: types.World = 'main'): Promise<void> {\n    await this._forAllFrameSessions(frame => frame._evaluateOnNewDocument(initScript, world));\n  }\n\n  async exposePlaywrightBinding() {\n    await this._forAllFrameSessions(frame => frame.exposePlaywrightBinding());\n  }\n\n  async removeInitScripts(initScripts: InitScript[]): Promise<void> {\n    await this._forAllFrameSessions(frame => frame._removeEvaluatesOnNewDocument(initScripts));\n  }\n\n  async closePage(runBeforeUnload: boolean): Promise<void> {\n    if (runBeforeUnload)\n      await this._mainFrameSession._client.send('Page.close');\n    else\n      await this._browserContext._browser._closePage(this);\n  }\n\n  async setBackgroundColor(color?: { r: number; g: number; b: number; a: number; }): Promise<void> {\n    await this._mainFrameSession._client.send('Emulation.setDefaultBackgroundColorOverride', { color });\n  }\n\n  async takeScreenshot(progress: Progress, format: 'png' | 'jpeg', documentRect: types.Rect | undefined, viewportRect: types.Rect | undefined, quality: number | undefined, fitsViewport: boolean, scale: 'css' | 'device'): Promise<Buffer> {\n    const { visualViewport } = await this._mainFrameSession._client.send('Page.getLayoutMetrics');\n    if (!documentRect) {\n      documentRect = {\n        x: visualViewport.pageX + viewportRect!.x,\n        y: visualViewport.pageY + viewportRect!.y,\n        ...helper.enclosingIntSize({\n          width: viewportRect!.width / visualViewport.scale,\n          height: viewportRect!.height / visualViewport.scale,\n        })\n      };\n    }\n    // When taking screenshots with documentRect (based on the page content, not viewport),\n    // ignore current page scale.\n    const clip = { ...documentRect, scale: viewportRect ? visualViewport.scale : 1 };\n    if (scale === 'css') {\n      const deviceScaleFactor = this._browserContext._options.deviceScaleFactor || 1;\n      clip.scale /= deviceScaleFactor;\n    }\n    progress.throwIfAborted();\n    const result = await this._mainFrameSession._client.send('Page.captureScreenshot', { format, quality, clip, captureBeyondViewport: !fitsViewport });\n    return Buffer.from(result.data, 'base64');\n  }\n\n  async getContentFrame(handle: dom.ElementHandle): Promise<frames.Frame | null> {\n    return this._sessionForHandle(handle)._getContentFrame(handle);\n  }\n\n  async getOwnerFrame(handle: dom.ElementHandle): Promise<string | null> {\n    return this._sessionForHandle(handle)._getOwnerFrame(handle);\n  }\n\n  async getBoundingBox(handle: dom.ElementHandle): Promise<types.Rect | null> {\n    return this._sessionForHandle(handle)._getBoundingBox(handle);\n  }\n\n  async scrollRectIntoViewIfNeeded(handle: dom.ElementHandle, rect?: types.Rect): Promise<'error:notvisible' | 'error:notconnected' | 'done'> {\n    return this._sessionForHandle(handle)._scrollRectIntoViewIfNeeded(handle, rect);\n  }\n\n  async setScreencastOptions(options: { width: number, height: number, quality: number } | null): Promise<void> {\n    if (options) {\n      await this._mainFrameSession._startScreencast(this, {\n        format: 'jpeg',\n        quality: options.quality,\n        maxWidth: options.width,\n        maxHeight: options.height\n      });\n    } else {\n      await this._mainFrameSession._stopScreencast(this);\n    }\n  }\n\n  rafCountForStablePosition(): number {\n    return 1;\n  }\n\n  async getContentQuads(handle: dom.ElementHandle): Promise<types.Quad[] | null> {\n    return this._sessionForHandle(handle)._getContentQuads(handle);\n  }\n\n  async setInputFilePaths(handle: dom.ElementHandle<HTMLInputElement>, files: string[]): Promise<void> {\n    const frame = await handle.ownerFrame();\n    if (!frame)\n      throw new Error('Cannot set input files to detached input element');\n    const parentSession = this._sessionForFrame(frame);\n    await parentSession._client.send('DOM.setFileInputFiles', {\n      objectId: handle._objectId,\n      files\n    });\n  }\n\n  async adoptElementHandle<T extends Node>(handle: dom.ElementHandle<T>, to: dom.FrameExecutionContext): Promise<dom.ElementHandle<T>> {\n    return this._sessionForHandle(handle)._adoptElementHandle<T>(handle, to);\n  }\n\n  async getAccessibilityTree(needle?: dom.ElementHandle) {\n    return getAccessibilityTree(this._mainFrameSession._client, needle);\n  }\n\n  async inputActionEpilogue(): Promise<void> {\n    await this._mainFrameSession._client.send('Page.enable').catch(e => {});\n  }\n\n  async resetForReuse(): Promise<void> {\n    // See https://github.com/microsoft/playwright/issues/22432.\n    await this.rawMouse.move(-1, -1, 'none', new Set(), new Set(), true);\n  }\n\n  async pdf(options: channels.PagePdfParams): Promise<Buffer> {\n    return this._pdf.generate(options);\n  }\n\n  coverage(): CRCoverage {\n    return this._coverage;\n  }\n\n  async getFrameElement(frame: frames.Frame): Promise<dom.ElementHandle> {\n    let parent = frame.parentFrame();\n    if (!parent)\n      throw new Error('Frame has been detached.');\n    const parentSession = this._sessionForFrame(parent);\n    const { backendNodeId } = await parentSession._client.send('DOM.getFrameOwner', { frameId: frame._id }).catch(e => {\n      if (e instanceof Error && e.message.includes('Frame with the given id was not found.'))\n        rewriteErrorMessage(e, 'Frame has been detached.');\n      throw e;\n    });\n    parent = frame.parentFrame();\n    if (!parent)\n      throw new Error('Frame has been detached.');\n    return parentSession._adoptBackendNodeId(backendNodeId, await parent._mainContext());\n  }\n\n  shouldToggleStyleSheetToSyncAnimations(): boolean {\n    return false;\n  }\n}\n\nclass FrameSession {\n  readonly _client: CRSession;\n  readonly _crPage: CRPage;\n  readonly _page: Page;\n  private readonly _parentSession: FrameSession | null;\n  private readonly _childSessions = new Set<FrameSession>();\n  private readonly _contextIdToContext = new Map<number, dom.FrameExecutionContext>();\n  private _eventListeners: RegisteredListener[] = [];\n  readonly _targetId: string;\n  private _firstNonInitialNavigationCommittedPromise: Promise<void>;\n  private _firstNonInitialNavigationCommittedFulfill = () => {};\n  private _firstNonInitialNavigationCommittedReject = (e: Error) => {};\n  private _windowId: number | undefined;\n  // Marks the oopif session that remote -> local transition has happened in the parent.\n  // See Target.detachedFromTarget handler for details.\n  private _swappedIn = false;\n  private _videoRecorder: VideoRecorder | null = null;\n  private _screencastId: string | null = null;\n  private _screencastClients = new Set<any>();\n  private _metricsOverride: Protocol.Emulation.setDeviceMetricsOverrideParameters | undefined;\n  private _workerSessions = new Map<string, CRSession>();\n  private _initScriptIds = new Map<InitScript, string>();\n\n  constructor(crPage: CRPage, client: CRSession, targetId: string, parentSession: FrameSession | null) {\n    this._client = client;\n    this._crPage = crPage;\n    this._page = crPage._page;\n    this._targetId = targetId;\n    this._parentSession = parentSession;\n    if (parentSession)\n      parentSession._childSessions.add(this);\n    this._firstNonInitialNavigationCommittedPromise = new Promise((f, r) => {\n      this._firstNonInitialNavigationCommittedFulfill = f;\n      this._firstNonInitialNavigationCommittedReject = r;\n    });\n    // The Promise is not always awaited (e.g. FrameSession._initialize can throw)\n    // so we catch errors here to prevent unhandled promise rejection.\n    this._firstNonInitialNavigationCommittedPromise.catch(() => {});\n  }\n\n  _isMainFrame(): boolean {\n    return this._targetId === this._crPage._targetId;\n  }\n\n  private _addRendererListeners() {\n    this._eventListeners.push(...[\n      eventsHelper.addEventListener(this._client, 'Log.entryAdded', event => this._onLogEntryAdded(event)),\n      eventsHelper.addEventListener(this._client, 'Page.fileChooserOpened', event => this._onFileChooserOpened(event)),\n      eventsHelper.addEventListener(this._client, 'Page.frameAttached', event => this._onFrameAttached(event.frameId, event.parentFrameId)),\n      eventsHelper.addEventListener(this._client, 'Page.frameDetached', event => this._onFrameDetached(event.frameId, event.reason)),\n      eventsHelper.addEventListener(this._client, 'Page.frameNavigated', event => this._onFrameNavigated(event.frame, false)),\n      eventsHelper.addEventListener(this._client, 'Page.frameRequestedNavigation', event => this._onFrameRequestedNavigation(event)),\n      eventsHelper.addEventListener(this._client, 'Page.javascriptDialogOpening', event => this._onDialog(event)),\n      eventsHelper.addEventListener(this._client, 'Page.navigatedWithinDocument', event => this._onFrameNavigatedWithinDocument(event.frameId, event.url)),\n      eventsHelper.addEventListener(this._client, 'Runtime.bindingCalled', event => this._onBindingCalled(event)),\n      eventsHelper.addEventListener(this._client, 'Runtime.consoleAPICalled', event => this._onConsoleAPI(event)),\n      eventsHelper.addEventListener(this._client, 'Runtime.exceptionThrown', exception => this._handleException(exception.exceptionDetails)),\n      eventsHelper.addEventListener(this._client, 'Runtime.executionContextCreated', event => this._onExecutionContextCreated(event.context)),\n      eventsHelper.addEventListener(this._client, 'Runtime.executionContextDestroyed', event => this._onExecutionContextDestroyed(event.executionContextId)),\n      eventsHelper.addEventListener(this._client, 'Runtime.executionContextsCleared', event => this._onExecutionContextsCleared()),\n      eventsHelper.addEventListener(this._client, 'Target.attachedToTarget', event => this._onAttachedToTarget(event)),\n      eventsHelper.addEventListener(this._client, 'Target.detachedFromTarget', event => this._onDetachedFromTarget(event)),\n    ]);\n  }\n\n  private _addBrowserListeners() {\n    this._eventListeners.push(...[\n      eventsHelper.addEventListener(this._client, 'Inspector.targetCrashed', event => this._onTargetCrashed()),\n      eventsHelper.addEventListener(this._client, 'Page.screencastFrame', event => this._onScreencastFrame(event)),\n      eventsHelper.addEventListener(this._client, 'Page.windowOpen', event => this._onWindowOpen(event)),\n    ]);\n  }\n\n  async _initialize(hasUIWindow: boolean) {\n    const isSettingStorageState = this._page.browserContext.isSettingStorageState();\n    if (!isSettingStorageState && hasUIWindow &&\n      !this._crPage._browserContext._browser.isClank() &&\n      !this._crPage._browserContext._options.noDefaultViewport) {\n      const { windowId } = await this._client.send('Browser.getWindowForTarget');\n      this._windowId = windowId;\n    }\n\n    let screencastOptions: types.PageScreencastOptions | undefined;\n    if (!isSettingStorageState && this._isMainFrame() && this._crPage._browserContext._options.recordVideo && hasUIWindow) {\n      const screencastId = createGuid();\n      const outputFile = path.join(this._crPage._browserContext._options.recordVideo.dir, screencastId + '.webm');\n      screencastOptions = {\n        // validateBrowserContextOptions ensures correct video size.\n        ...this._crPage._browserContext._options.recordVideo.size!,\n        outputFile,\n      };\n      await this._crPage._browserContext._ensureVideosPath();\n      // Note: it is important to start video recorder before sending Page.startScreencast,\n      // and it is equally important to send Page.startScreencast before sending Runtime.runIfWaitingForDebugger.\n      await this._createVideoRecorder(screencastId, screencastOptions);\n      this._crPage._page.waitForInitializedOrError().then(p => {\n        if (p instanceof Error)\n          this._stopVideoRecording().catch(() => {});\n      });\n    }\n\n    let lifecycleEventsEnabled: Promise<any>;\n    if (!this._isMainFrame())\n      this._addRendererListeners();\n    this._addBrowserListeners();\n    const promises: Promise<any>[] = [\n      this._client.send('Page.enable'),\n      this._client.send('Page.getFrameTree').then(({ frameTree }) => {\n        if (this._isMainFrame()) {\n          this._handleFrameTree(frameTree);\n          this._addRendererListeners();\n        }\n\n        const localFrames = this._isMainFrame() ? this._page.frames() : [this._page.frameManager.frame(this._targetId)!];\n        for (const frame of localFrames) {\n          // Note: frames might be removed before we send these.\n          this._client._sendMayFail('Page.createIsolatedWorld', {\n            frameId: frame._id,\n            grantUniveralAccess: true,\n            worldName: this._crPage.utilityWorldName,\n          });\n        }\n\n        const isInitialEmptyPage = this._isMainFrame() && this._page.mainFrame().url() === ':';\n        if (isInitialEmptyPage) {\n          // Ignore lifecycle events, worlds and bindings for the initial empty page. It is never the final page\n          // hence we are going to get more lifecycle updates after the actual navigation has\n          // started (even if the target url is about:blank).\n          lifecycleEventsEnabled.catch(e => {}).then(() => {\n            this._eventListeners.push(eventsHelper.addEventListener(this._client, 'Page.lifecycleEvent', event => this._onLifecycleEvent(event)));\n          });\n        } else {\n          this._firstNonInitialNavigationCommittedFulfill();\n          this._eventListeners.push(eventsHelper.addEventListener(this._client, 'Page.lifecycleEvent', event => this._onLifecycleEvent(event)));\n        }\n      }),\n      this._client.send('Log.enable', {}),\n      lifecycleEventsEnabled = this._client.send('Page.setLifecycleEventsEnabled', { enabled: true }),\n      this._client.send('Runtime.enable', {}),\n      this._client.send('Page.addScriptToEvaluateOnNewDocument', {\n        source: '',\n        worldName: this._crPage.utilityWorldName,\n      }),\n      this._crPage._networkManager.addSession(this._client, undefined, this._isMainFrame()),\n      this._client.send('Target.setAutoAttach', { autoAttach: true, waitForDebuggerOnStart: true, flatten: true }),\n    ];\n    if (!isSettingStorageState) {\n      if (this._crPage._browserContext.needsPlaywrightBinding())\n        promises.push(this.exposePlaywrightBinding());\n      if (this._isMainFrame())\n        promises.push(this._client.send('Emulation.setFocusEmulationEnabled', { enabled: true }));\n      const options = this._crPage._browserContext._options;\n      if (options.bypassCSP)\n        promises.push(this._client.send('Page.setBypassCSP', { enabled: true }));\n      if (options.ignoreHTTPSErrors || options.internalIgnoreHTTPSErrors)\n        promises.push(this._client.send('Security.setIgnoreCertificateErrors', { ignore: true }));\n      if (this._isMainFrame())\n        promises.push(this._updateViewport());\n      if (options.hasTouch)\n        promises.push(this._client.send('Emulation.setTouchEmulationEnabled', { enabled: true }));\n      if (options.javaScriptEnabled === false)\n        promises.push(this._client.send('Emulation.setScriptExecutionDisabled', { value: true }));\n      if (options.userAgent || options.locale)\n        promises.push(this._updateUserAgent());\n      if (options.locale)\n        promises.push(emulateLocale(this._client, options.locale));\n      if (options.timezoneId)\n        promises.push(emulateTimezone(this._client, options.timezoneId));\n      if (!this._crPage._browserContext._browser.options.headful)\n        promises.push(this._setDefaultFontFamilies(this._client));\n      promises.push(this._updateGeolocation(true));\n      promises.push(this._updateEmulateMedia());\n      promises.push(this._updateFileChooserInterception(true));\n      for (const initScript of this._crPage._page.allInitScripts())\n        promises.push(this._evaluateOnNewDocument(initScript, 'main', true /* runImmediately */));\n      if (screencastOptions)\n        promises.push(this._startVideoRecording(screencastOptions));\n    }\n    promises.push(this._client.send('Runtime.runIfWaitingForDebugger'));\n    promises.push(this._firstNonInitialNavigationCommittedPromise);\n    await Promise.all(promises);\n  }\n\n  dispose() {\n    this._firstNonInitialNavigationCommittedReject(new TargetClosedError());\n    for (const childSession of this._childSessions)\n      childSession.dispose();\n    if (this._parentSession)\n      this._parentSession._childSessions.delete(this);\n    eventsHelper.removeEventListeners(this._eventListeners);\n    this._crPage._networkManager.removeSession(this._client);\n    this._crPage._sessions.delete(this._targetId);\n    this._client.dispose();\n  }\n\n  async _navigate(frame: frames.Frame, url: string, referrer: string | undefined): Promise<frames.GotoResult> {\n    const response = await this._client.send('Page.navigate', { url, referrer, frameId: frame._id, referrerPolicy: 'unsafeUrl' });\n    if (response.errorText)\n      throw new frames.NavigationAbortedError(response.loaderId, `${response.errorText} at ${url}`);\n    return { newDocumentId: response.loaderId };\n  }\n\n  _onLifecycleEvent(event: Protocol.Page.lifecycleEventPayload) {\n    if (this._eventBelongsToStaleFrame(event.frameId))\n      return;\n    if (event.name === 'load')\n      this._page.frameManager.frameLifecycleEvent(event.frameId, 'load');\n    else if (event.name === 'DOMContentLoaded')\n      this._page.frameManager.frameLifecycleEvent(event.frameId, 'domcontentloaded');\n  }\n\n  _handleFrameTree(frameTree: Protocol.Page.FrameTree) {\n    this._onFrameAttached(frameTree.frame.id, frameTree.frame.parentId || null);\n    this._onFrameNavigated(frameTree.frame, true);\n    if (!frameTree.childFrames)\n      return;\n\n    for (const child of frameTree.childFrames)\n      this._handleFrameTree(child);\n  }\n\n  private _eventBelongsToStaleFrame(frameId: string)  {\n    const frame = this._page.frameManager.frame(frameId);\n    // Subtree may be already gone because some ancestor navigation destroyed the oopif.\n    if (!frame)\n      return true;\n    // When frame goes remote, parent process may still send some events\n    // related to the local frame before it sends frameDetached.\n    // In this case, we already have a new session for this frame, so events\n    // in the old session should be ignored.\n    const session = this._crPage._sessionForFrame(frame);\n    return session && session !== this && !session._swappedIn;\n  }\n\n  _onFrameAttached(frameId: string, parentFrameId: string | null) {\n    const frameSession = this._crPage._sessions.get(frameId);\n    if (frameSession && frameId !== this._targetId) {\n      // This is a remote -> local frame transition.\n      frameSession._swappedIn = true;\n      const frame = this._page.frameManager.frame(frameId);\n      // Frame or even a whole subtree may be already gone, because some ancestor did navigate.\n      if (frame)\n        this._page.frameManager.removeChildFramesRecursively(frame);\n      return;\n    }\n    if (parentFrameId && !this._page.frameManager.frame(parentFrameId)) {\n      // Parent frame may be gone already because some ancestor frame navigated and\n      // destroyed the whole subtree of some oopif, while oopif's process is still sending us events.\n      // Be careful to not confuse this with \"main frame navigated cross-process\" scenario\n      // where parentFrameId is null.\n      return;\n    }\n    this._page.frameManager.frameAttached(frameId, parentFrameId);\n  }\n\n  _onFrameNavigated(framePayload: Protocol.Page.Frame, initial: boolean) {\n    if (this._eventBelongsToStaleFrame(framePayload.id))\n      return;\n    this._page.frameManager.frameCommittedNewDocumentNavigation(framePayload.id, framePayload.url + (framePayload.urlFragment || ''), framePayload.name || '', framePayload.loaderId, initial);\n    if (!initial)\n      this._firstNonInitialNavigationCommittedFulfill();\n  }\n\n  _onFrameRequestedNavigation(payload: Protocol.Page.frameRequestedNavigationPayload) {\n    if (this._eventBelongsToStaleFrame(payload.frameId))\n      return;\n    if (payload.disposition === 'currentTab')\n      this._page.frameManager.frameRequestedNavigation(payload.frameId);\n  }\n\n  _onFrameNavigatedWithinDocument(frameId: string, url: string) {\n    if (this._eventBelongsToStaleFrame(frameId))\n      return;\n    this._page.frameManager.frameCommittedSameDocumentNavigation(frameId, url);\n  }\n\n  _onFrameDetached(frameId: string, reason: 'remove' | 'swap') {\n    if (this._crPage._sessions.has(frameId)) {\n      // This is a local -> remote frame transition, where\n      // Page.frameDetached arrives after Target.attachedToTarget.\n      // We've already handled the new target and frame reattach - nothing to do here.\n      return;\n    }\n    if (reason === 'swap') {\n      // This is a local -> remote frame transition, where\n      // Page.frameDetached arrives before Target.attachedToTarget.\n      // We should keep the frame in the tree, and it will be used for the new target.\n      const frame = this._page.frameManager.frame(frameId);\n      if (frame)\n        this._page.frameManager.removeChildFramesRecursively(frame);\n      return;\n    }\n    // Just a regular frame detach.\n    this._page.frameManager.frameDetached(frameId);\n  }\n\n  _onExecutionContextCreated(contextPayload: Protocol.Runtime.ExecutionContextDescription) {\n    const frame = contextPayload.auxData ? this._page.frameManager.frame(contextPayload.auxData.frameId) : null;\n    if (!frame || this._eventBelongsToStaleFrame(frame._id))\n      return;\n    const delegate = new CRExecutionContext(this._client, contextPayload);\n    let worldName: types.World|null = null;\n    if (contextPayload.auxData && !!contextPayload.auxData.isDefault)\n      worldName = 'main';\n    else if (contextPayload.name === this._crPage.utilityWorldName)\n      worldName = 'utility';\n    const context = new dom.FrameExecutionContext(delegate, frame, worldName);\n    if (worldName)\n      frame._contextCreated(worldName, context);\n    this._contextIdToContext.set(contextPayload.id, context);\n  }\n\n  _onExecutionContextDestroyed(executionContextId: number) {\n    const context = this._contextIdToContext.get(executionContextId);\n    if (!context)\n      return;\n    this._contextIdToContext.delete(executionContextId);\n    context.frame._contextDestroyed(context);\n  }\n\n  _onExecutionContextsCleared() {\n    for (const contextId of Array.from(this._contextIdToContext.keys()))\n      this._onExecutionContextDestroyed(contextId);\n  }\n\n  _onAttachedToTarget(event: Protocol.Target.attachedToTargetPayload) {\n    const session = this._client.createChildSession(event.sessionId);\n\n    if (event.targetInfo.type === 'iframe') {\n      // Frame id equals target id.\n      const targetId = event.targetInfo.targetId;\n      const frame = this._page.frameManager.frame(targetId);\n      if (!frame)\n        return; // Subtree may be already gone due to renderer/browser race.\n      this._page.frameManager.removeChildFramesRecursively(frame);\n      for (const [contextId, context] of this._contextIdToContext) {\n        if (context.frame === frame)\n          this._onExecutionContextDestroyed(contextId);\n      }\n      const frameSession = new FrameSession(this._crPage, session, targetId, this);\n      this._crPage._sessions.set(targetId, frameSession);\n      frameSession._initialize(false).catch(e => e);\n      return;\n    }\n\n    if (event.targetInfo.type !== 'worker') {\n      session.detach().catch(() => {});\n      return;\n    }\n\n    const url = event.targetInfo.url;\n    const worker = new Worker(this._page, url);\n    this._page.addWorker(event.sessionId, worker);\n    this._workerSessions.set(event.sessionId, session);\n    session.once('Runtime.executionContextCreated', async event => {\n      worker.createExecutionContext(new CRExecutionContext(session, event.context));\n    });\n    // This might fail if the target is closed before we initialize.\n    session._sendMayFail('Runtime.enable');\n    // TODO: attribute workers to the right frame.\n    this._crPage._networkManager.addSession(session, this._page.frameManager.frame(this._targetId) ?? undefined).catch(() => {});\n    session._sendMayFail('Runtime.runIfWaitingForDebugger');\n    session._sendMayFail('Target.setAutoAttach', { autoAttach: true, waitForDebuggerOnStart: true, flatten: true });\n    session.on('Target.attachedToTarget', event => this._onAttachedToTarget(event));\n    session.on('Target.detachedFromTarget', event => this._onDetachedFromTarget(event));\n    session.on('Runtime.consoleAPICalled', event => {\n      const args = event.args.map(o => createHandle(worker.existingExecutionContext!, o));\n      this._page.addConsoleMessage(event.type, args, toConsoleMessageLocation(event.stackTrace));\n    });\n    session.on('Runtime.exceptionThrown', exception => this._page.emitOnContextOnceInitialized(BrowserContext.Events.PageError, exceptionToError(exception.exceptionDetails), this._page));\n  }\n\n  _onDetachedFromTarget(event: Protocol.Target.detachedFromTargetPayload) {\n    // This might be a worker...\n    const workerSession = this._workerSessions.get(event.sessionId);\n    if (workerSession) {\n      workerSession.dispose();\n      this._page.removeWorker(event.sessionId);\n      return;\n    }\n\n    // ... or an oopif.\n    const childFrameSession = this._crPage._sessions.get(event.targetId!);\n    if (!childFrameSession)\n      return;\n\n    // Usually, we get frameAttached in this session first and mark child as swappedIn.\n    if (childFrameSession._swappedIn) {\n      childFrameSession.dispose();\n      return;\n    }\n\n    // However, sometimes we get detachedFromTarget before frameAttached.\n    // In this case we don't know whether this is a remote frame detach,\n    // or just a remote -> local transition. In the latter case, frameAttached\n    // is already inflight, so let's make a safe roundtrip to ensure it arrives.\n    this._client.send('Page.enable').catch(e => null).then(() => {\n      // Child was not swapped in - that means frameAttached did not happen and\n      // this is remote detach rather than remote -> local swap.\n      if (!childFrameSession._swappedIn)\n        this._page.frameManager.frameDetached(event.targetId!);\n      childFrameSession.dispose();\n    });\n  }\n\n  _onWindowOpen(event: Protocol.Page.windowOpenPayload) {\n    this._crPage._nextWindowOpenPopupFeatures.push(event.windowFeatures);\n  }\n\n  async _onConsoleAPI(event: Protocol.Runtime.consoleAPICalledPayload) {\n    if (event.executionContextId === 0) {\n      // DevTools protocol stores the last 1000 console messages. These\n      // messages are always reported even for removed execution contexts. In\n      // this case, they are marked with executionContextId = 0 and are\n      // reported upon enabling Runtime agent.\n      //\n      // Ignore these messages since:\n      // - there's no execution context we can use to operate with message\n      //   arguments\n      // - these messages are reported before Playwright clients can subscribe\n      //   to the 'console'\n      //   page event.\n      //\n      // @see https://github.com/GoogleChrome/puppeteer/issues/3865\n      return;\n    }\n    const context = this._contextIdToContext.get(event.executionContextId);\n    if (!context)\n      return;\n    const values = event.args.map(arg => createHandle(context, arg));\n    this._page.addConsoleMessage(event.type, values, toConsoleMessageLocation(event.stackTrace));\n  }\n\n  async _onBindingCalled(event: Protocol.Runtime.bindingCalledPayload) {\n    const pageOrError = await this._crPage._page.waitForInitializedOrError();\n    if (!(pageOrError instanceof Error)) {\n      const context = this._contextIdToContext.get(event.executionContextId);\n      if (context)\n        await this._page.onBindingCalled(event.payload, context);\n    }\n  }\n\n  _onDialog(event: Protocol.Page.javascriptDialogOpeningPayload) {\n    if (!this._page.frameManager.frame(this._targetId))\n      return; // Our frame/subtree may be gone already.\n    this._page.browserContext.dialogManager.dialogDidOpen(new dialog.Dialog(\n        this._page,\n        event.type,\n        event.message,\n        async (accept: boolean, promptText?: string) => {\n          // TODO: this should actually be a CDP event that notifies about a cancelled navigation attempt.\n          if (this._isMainFrame() && event.type === 'beforeunload' && !accept)\n            this._page.frameManager.frameAbortedNavigation(this._page.mainFrame()._id, 'navigation cancelled by beforeunload dialog');\n          await this._client.send('Page.handleJavaScriptDialog', { accept, promptText });\n        },\n        event.defaultPrompt));\n  }\n\n  _handleException(exceptionDetails: Protocol.Runtime.ExceptionDetails) {\n    this._page.emitOnContextOnceInitialized(BrowserContext.Events.PageError, exceptionToError(exceptionDetails), this._page);\n  }\n\n  async _onTargetCrashed() {\n    this._client._markAsCrashed();\n    this._page._didCrash();\n  }\n\n  _onLogEntryAdded(event: Protocol.Log.entryAddedPayload) {\n    const { level, text, args, source, url, lineNumber } = event.entry;\n    if (args)\n      args.map(arg => releaseObject(this._client, arg.objectId!));\n    if (source !== 'worker') {\n      const location: types.ConsoleMessageLocation = {\n        url: url || '',\n        lineNumber: lineNumber || 0,\n        columnNumber: 0,\n      };\n      this._page.addConsoleMessage(level, [], location, text);\n    }\n  }\n\n  async _onFileChooserOpened(event: Protocol.Page.fileChooserOpenedPayload) {\n    if (!event.backendNodeId)\n      return;\n    const frame = this._page.frameManager.frame(event.frameId);\n    if (!frame)\n      return;\n    let handle;\n    try {\n      const utilityContext = await frame._utilityContext();\n      handle = await this._adoptBackendNodeId(event.backendNodeId, utilityContext);\n    } catch (e) {\n      // During async processing, frame/context may go away. We should not throw.\n      return;\n    }\n    await this._page._onFileChooserOpened(handle);\n  }\n\n  _willBeginDownload() {\n    if (!this._crPage._page.initializedOrUndefined()) {\n      // Resume the page creation with an error. The page will automatically close right\n      // after the download begins.\n      this._firstNonInitialNavigationCommittedReject(new Error('Starting new page download'));\n    }\n  }\n\n  _onScreencastFrame(payload: Protocol.Page.screencastFramePayload) {\n    this._page.throttleScreencastFrameAck(() => {\n      this._client.send('Page.screencastFrameAck', { sessionId: payload.sessionId }).catch(() => {});\n    });\n    const buffer = Buffer.from(payload.data, 'base64');\n    this._page.emit(Page.Events.ScreencastFrame, {\n      buffer,\n      frameSwapWallTime: payload.metadata.timestamp ? payload.metadata.timestamp * 1000 : undefined,\n      width: payload.metadata.deviceWidth,\n      height: payload.metadata.deviceHeight,\n    });\n  }\n\n  async _createVideoRecorder(screencastId: string, options: types.PageScreencastOptions): Promise<void> {\n    assert(!this._screencastId);\n    const ffmpegPath = registry.findExecutable('ffmpeg')!.executablePathOrDie(this._page.attribution.playwright.options.sdkLanguage);\n    this._videoRecorder = await VideoRecorder.launch(this._crPage._page, ffmpegPath, options);\n    this._screencastId = screencastId;\n  }\n\n  async _startVideoRecording(options: types.PageScreencastOptions) {\n    const screencastId = this._screencastId;\n    assert(screencastId);\n    this._page.once(Page.Events.Close, () => this._stopVideoRecording().catch(() => {}));\n    const gotFirstFrame = new Promise(f => this._client.once('Page.screencastFrame', f));\n    await this._startScreencast(this._videoRecorder, {\n      format: 'jpeg',\n      quality: 90,\n      maxWidth: options.width,\n      maxHeight: options.height,\n    });\n    // Wait for the first frame before reporting video to the client.\n    gotFirstFrame.then(() => {\n      this._crPage._browserContext._browser._videoStarted(this._crPage._browserContext, screencastId, options.outputFile, this._crPage._page.waitForInitializedOrError());\n    });\n  }\n\n  async _stopVideoRecording(): Promise<void> {\n    if (!this._screencastId)\n      return;\n    const screencastId = this._screencastId;\n    this._screencastId = null;\n    const recorder = this._videoRecorder!;\n    this._videoRecorder = null;\n    await this._stopScreencast(recorder);\n    await recorder.stop().catch(() => {});\n    // Keep the video artifact in the map until encoding is fully finished, if the context\n    // starts closing before the video is fully written to disk it will wait for it.\n    const video = this._crPage._browserContext._browser._takeVideo(screencastId);\n    video?.reportFinished();\n  }\n\n  async _startScreencast(client: any, options: Protocol.Page.startScreencastParameters = {}) {\n    this._screencastClients.add(client);\n    if (this._screencastClients.size === 1)\n      await this._client.send('Page.startScreencast', options);\n  }\n\n  async _stopScreencast(client: any) {\n    this._screencastClients.delete(client);\n    if (!this._screencastClients.size)\n      await this._client._sendMayFail('Page.stopScreencast');\n  }\n\n  async _updateGeolocation(initial: boolean): Promise<void> {\n    const geolocation = this._crPage._browserContext._options.geolocation;\n    if (!initial || geolocation)\n      await this._client.send('Emulation.setGeolocationOverride', geolocation || {});\n  }\n\n  async _updateViewport(preserveWindowBoundaries?: boolean): Promise<void> {\n    if (this._crPage._browserContext._browser.isClank())\n      return;\n    assert(this._isMainFrame());\n    const options = this._crPage._browserContext._options;\n    const emulatedSize = this._page.emulatedSize();\n    if (!emulatedSize)\n      return;\n    const viewportSize = emulatedSize.viewport;\n    const screenSize = emulatedSize.screen;\n    const isLandscape = screenSize.width > screenSize.height;\n    const metricsOverride: Protocol.Emulation.setDeviceMetricsOverrideParameters = {\n      mobile: !!options.isMobile,\n      width: viewportSize.width,\n      height: viewportSize.height,\n      screenWidth: screenSize.width,\n      screenHeight: screenSize.height,\n      deviceScaleFactor: options.deviceScaleFactor || 1,\n      screenOrientation: !!options.isMobile ? (\n        isLandscape ? { angle: 90, type: 'landscapePrimary' } : { angle: 0, type: 'portraitPrimary' }\n      ) : { angle: 0, type: 'landscapePrimary' },\n      dontSetVisibleSize: preserveWindowBoundaries\n    };\n    if (JSON.stringify(this._metricsOverride) === JSON.stringify(metricsOverride))\n      return;\n    const promises = [];\n    if (!preserveWindowBoundaries && this._windowId) {\n      let insets = { width: 0, height: 0 };\n      if (this._crPage._browserContext._browser.options.headful) {\n        // TODO: popup windows have their own insets.\n        insets = { width: 24, height: 88 };\n        if (process.platform === 'win32')\n          insets = { width: 16, height: 88 };\n        else if (process.platform === 'linux')\n          insets = { width: 8, height: 85 };\n        else if (process.platform === 'darwin')\n          insets = { width: 2, height: 80 };\n        if (this._crPage._browserContext.isPersistentContext()) {\n          // FIXME: Chrome bug: OOPIF router is confused when hit target is\n          // outside browser window.\n          // Account for the infobar here to work around the bug.\n          insets.height += 46;\n        }\n      }\n      promises.push(this.setWindowBounds({\n        width: viewportSize.width + insets.width,\n        height: viewportSize.height + insets.height\n      }));\n    }\n    // Make sure that the viewport emulationis set after the embedder window resize.\n    promises.push(this._client.send('Emulation.setDeviceMetricsOverride', metricsOverride));\n    await Promise.all(promises);\n    this._metricsOverride = metricsOverride;\n  }\n\n  async windowBounds(): Promise<WindowBounds> {\n    const { bounds } = await this._client.send('Browser.getWindowBounds', {\n      windowId: this._windowId!\n    });\n    return bounds;\n  }\n\n  async setWindowBounds(bounds: WindowBounds) {\n    return await this._client.send('Browser.setWindowBounds', {\n      windowId: this._windowId!,\n      bounds\n    });\n  }\n\n  async _updateEmulateMedia(): Promise<void> {\n    const emulatedMedia = this._page.emulatedMedia();\n    // Empty string disables the override.\n    const media = emulatedMedia.media === 'no-override' ? '' : emulatedMedia.media;\n    const colorScheme = emulatedMedia.colorScheme === 'no-override' ? '' : emulatedMedia.colorScheme;\n    const reducedMotion = emulatedMedia.reducedMotion === 'no-override' ? '' : emulatedMedia.reducedMotion;\n    const forcedColors = emulatedMedia.forcedColors === 'no-override' ? '' : emulatedMedia.forcedColors;\n    const contrast = emulatedMedia.contrast === 'no-override' ? '' : emulatedMedia.contrast;\n    const features = [\n      { name: 'prefers-color-scheme', value: colorScheme },\n      { name: 'prefers-reduced-motion', value: reducedMotion },\n      { name: 'forced-colors', value: forcedColors },\n      { name: 'prefers-contrast', value: contrast },\n    ];\n    await this._client.send('Emulation.setEmulatedMedia', { media, features });\n  }\n\n  async _updateUserAgent(): Promise<void> {\n    const options = this._crPage._browserContext._options;\n    await this._client.send('Emulation.setUserAgentOverride', {\n      userAgent: options.userAgent || '',\n      acceptLanguage: options.locale,\n      userAgentMetadata: calculateUserAgentMetadata(options),\n    });\n  }\n\n  private async _setDefaultFontFamilies(session: CRSession) {\n    const fontFamilies = platformToFontFamilies[this._crPage._browserContext._browser._platform()];\n    await session.send('Page.setFontFamilies', fontFamilies);\n  }\n\n  async _updateFileChooserInterception(initial: boolean) {\n    const enabled = this._page.fileChooserIntercepted();\n    if (initial && !enabled)\n      return;\n    await this._client.send('Page.setInterceptFileChooserDialog', { enabled }).catch(() => {}); // target can be closed.\n  }\n\n  async _evaluateOnNewDocument(initScript: InitScript, world: types.World, runImmediately?: boolean): Promise<void> {\n    const worldName = world === 'utility' ? this._crPage.utilityWorldName : undefined;\n    const { identifier } = await this._client.send('Page.addScriptToEvaluateOnNewDocument', { source: initScript.source, worldName, runImmediately });\n    this._initScriptIds.set(initScript, identifier);\n  }\n\n  async _removeEvaluatesOnNewDocument(initScripts: InitScript[]): Promise<void> {\n    const ids: string[] = [];\n    for (const script of initScripts) {\n      const id = this._initScriptIds.get(script);\n      if (id)\n        ids.push(id);\n      this._initScriptIds.delete(script);\n    }\n    await Promise.all(ids.map(identifier => this._client.send('Page.removeScriptToEvaluateOnNewDocument', { identifier }).catch(() => {}))); // target can be closed\n  }\n\n  async exposePlaywrightBinding() {\n    await this._client.send('Runtime.addBinding', { name: PageBinding.kBindingName });\n  }\n\n  async _getContentFrame(handle: dom.ElementHandle): Promise<frames.Frame | null> {\n    const nodeInfo = await this._client.send('DOM.describeNode', {\n      objectId: handle._objectId\n    });\n    if (!nodeInfo || typeof nodeInfo.node.frameId !== 'string')\n      return null;\n    return this._page.frameManager.frame(nodeInfo.node.frameId);\n  }\n\n  async _getOwnerFrame(handle: dom.ElementHandle): Promise<string | null> {\n    // document.documentElement has frameId of the owner frame.\n    const documentElement = await handle.evaluateHandle(node => {\n      const doc = node as Document;\n      if (doc.documentElement && doc.documentElement.ownerDocument === doc)\n        return doc.documentElement;\n      return node.ownerDocument ? node.ownerDocument.documentElement : null;\n    });\n    if (!documentElement)\n      return null;\n    if (!documentElement._objectId)\n      return null;\n    const nodeInfo = await this._client.send('DOM.describeNode', {\n      objectId: documentElement._objectId\n    });\n    const frameId = nodeInfo && typeof nodeInfo.node.frameId === 'string' ?\n      nodeInfo.node.frameId : null;\n    documentElement.dispose();\n    return frameId;\n  }\n\n  async _getBoundingBox(handle: dom.ElementHandle): Promise<types.Rect | null> {\n    const result = await this._client._sendMayFail('DOM.getBoxModel', {\n      objectId: handle._objectId\n    });\n    if (!result)\n      return null;\n    const quad = result.model.border;\n    const x = Math.min(quad[0], quad[2], quad[4], quad[6]);\n    const y = Math.min(quad[1], quad[3], quad[5], quad[7]);\n    const width = Math.max(quad[0], quad[2], quad[4], quad[6]) - x;\n    const height = Math.max(quad[1], quad[3], quad[5], quad[7]) - y;\n    const position = await this._framePosition();\n    if (!position)\n      return null;\n    return { x: x + position.x, y: y + position.y, width, height };\n  }\n\n  private async _framePosition(): Promise<types.Point | null> {\n    const frame = this._page.frameManager.frame(this._targetId);\n    if (!frame)\n      return null;\n    if (frame === this._page.mainFrame())\n      return { x: 0, y: 0 };\n    const element = await frame.frameElement();\n    const box = await element.boundingBox();\n    return box;\n  }\n\n  async _scrollRectIntoViewIfNeeded(handle: dom.ElementHandle, rect?: types.Rect): Promise<'error:notvisible' | 'error:notconnected' | 'done'> {\n    return await this._client.send('DOM.scrollIntoViewIfNeeded', {\n      objectId: handle._objectId,\n      rect,\n    }).then(() => 'done' as const).catch(e => {\n      if (e instanceof Error && e.message.includes('Node does not have a layout object'))\n        return 'error:notvisible';\n      if (e instanceof Error && e.message.includes('Node is detached from document'))\n        return 'error:notconnected';\n      throw e;\n    });\n  }\n\n  async _getContentQuads(handle: dom.ElementHandle): Promise<types.Quad[] | null> {\n    const result = await this._client._sendMayFail('DOM.getContentQuads', {\n      objectId: handle._objectId\n    });\n    if (!result)\n      return null;\n    const position = await this._framePosition();\n    if (!position)\n      return null;\n    return result.quads.map(quad => [\n      { x: quad[0] + position.x, y: quad[1] + position.y },\n      { x: quad[2] + position.x, y: quad[3] + position.y },\n      { x: quad[4] + position.x, y: quad[5] + position.y },\n      { x: quad[6] + position.x, y: quad[7] + position.y }\n    ]);\n  }\n\n  async _adoptElementHandle<T extends Node>(handle: dom.ElementHandle<T>, to: dom.FrameExecutionContext): Promise<dom.ElementHandle<T>> {\n    const nodeInfo = await this._client.send('DOM.describeNode', {\n      objectId: handle._objectId,\n    });\n    return this._adoptBackendNodeId(nodeInfo.node.backendNodeId, to) as Promise<dom.ElementHandle<T>>;\n  }\n\n  async _adoptBackendNodeId(backendNodeId: Protocol.DOM.BackendNodeId, to: dom.FrameExecutionContext): Promise<dom.ElementHandle> {\n    const result = await this._client._sendMayFail('DOM.resolveNode', {\n      backendNodeId,\n      executionContextId: (to.delegate as CRExecutionContext)._contextId,\n    });\n    if (!result || result.object.subtype === 'null')\n      throw new Error(dom.kUnableToAdoptErrorMessage);\n    return createHandle(to, result.object).asElement()!;\n  }\n}\n\nasync function emulateLocale(session: CRSession, locale: string) {\n  try {\n    await session.send('Emulation.setLocaleOverride', { locale });\n  } catch (exception) {\n    // All pages in the same renderer share locale. All such pages belong to the same\n    // context and if locale is overridden for one of them its value is the same as\n    // we are trying to set so it's not a problem.\n    if (exception.message.includes('Another locale override is already in effect'))\n      return;\n    throw exception;\n  }\n}\n\nasync function emulateTimezone(session: CRSession, timezoneId: string) {\n  try {\n    await session.send('Emulation.setTimezoneOverride', { timezoneId: timezoneId });\n  } catch (exception) {\n    if (exception.message.includes('Timezone override is already in effect'))\n      return;\n    if (exception.message.includes('Invalid timezone'))\n      throw new Error(`Invalid timezone ID: ${timezoneId}`);\n    throw exception;\n  }\n}\n\n// Chromium reference: https://source.chromium.org/chromium/chromium/src/+/main:components/embedder_support/user_agent_utils.cc;l=434;drc=70a6711e08e9f9e0d8e4c48e9ba5cab62eb010c2\nfunction calculateUserAgentMetadata(options: types.BrowserContextOptions) {\n  const ua = options.userAgent;\n  if (!ua)\n    return undefined;\n  const metadata: Protocol.Emulation.UserAgentMetadata = {\n    mobile: !!options.isMobile,\n    model: '',\n    architecture: 'x86',\n    platform: 'Windows',\n    platformVersion: '',\n  };\n  const androidMatch = ua.match(/Android (\\d+(\\.\\d+)?(\\.\\d+)?)/);\n  const iPhoneMatch = ua.match(/iPhone OS (\\d+(_\\d+)?)/);\n  const iPadMatch = ua.match(/iPad; CPU OS (\\d+(_\\d+)?)/);\n  const macOSMatch = ua.match(/Mac OS X (\\d+(_\\d+)?(_\\d+)?)/);\n  const windowsMatch = ua.match(/Windows\\D+(\\d+(\\.\\d+)?(\\.\\d+)?)/);\n  if (androidMatch) {\n    metadata.platform = 'Android';\n    metadata.platformVersion = androidMatch[1];\n    metadata.architecture = 'arm';\n  } else if (iPhoneMatch) {\n    metadata.platform = 'iOS';\n    metadata.platformVersion = iPhoneMatch[1];\n    metadata.architecture = 'arm';\n  } else if (iPadMatch) {\n    metadata.platform = 'iOS';\n    metadata.platformVersion = iPadMatch[1];\n    metadata.architecture = 'arm';\n  } else if (macOSMatch) {\n    metadata.platform = 'macOS';\n    metadata.platformVersion = macOSMatch[1];\n    if (!ua.includes('Intel'))\n      metadata.architecture = 'arm';\n  } else if (windowsMatch) {\n    metadata.platform = 'Windows';\n    metadata.platformVersion = windowsMatch[1];\n  } else if (ua.toLowerCase().includes('linux')) {\n    metadata.platform = 'Linux';\n  }\n  if (ua.includes('ARM'))\n    metadata.architecture = 'arm';\n  return metadata;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Worker } from '../page';\nimport { CRExecutionContext } from './crExecutionContext';\nimport { CRNetworkManager } from './crNetworkManager';\nimport { BrowserContext } from '../browserContext';\nimport * as network from '../network';\n\nimport type { CRBrowserContext } from './crBrowser';\nimport type { CRSession } from './crConnection';\n\nexport class CRServiceWorker extends Worker {\n  readonly browserContext: CRBrowserContext;\n  private readonly _networkManager?: CRNetworkManager;\n  private _session: CRSession;\n\n  constructor(browserContext: CRBrowserContext, session: CRSession, url: string) {\n    super(browserContext, url);\n    this._session = session;\n    this.browserContext = browserContext;\n    if (!!process.env.PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS)\n      this._networkManager = new CRNetworkManager(null, this);\n    session.once('Runtime.executionContextCreated', event => {\n      this.createExecutionContext(new CRExecutionContext(session, event.context));\n    });\n\n    if (this._networkManager && this._isNetworkInspectionEnabled()) {\n      this.updateRequestInterception();\n      this.updateExtraHTTPHeaders();\n      this.updateHttpCredentials();\n      this.updateOffline();\n      this._networkManager.addSession(session, undefined, true /* isMain */).catch(() => {});\n    }\n\n    session.send('Runtime.enable', {}).catch(e => { });\n    session.send('Runtime.runIfWaitingForDebugger').catch(e => { });\n    session.on('Inspector.targetReloadedAfterCrash', () => {\n      // Resume service worker after restart.\n      session._sendMayFail('Runtime.runIfWaitingForDebugger', {});\n    });\n  }\n\n  override didClose() {\n    this._networkManager?.removeSession(this._session);\n    this._session.dispose();\n    super.didClose();\n  }\n\n  async updateOffline(): Promise<void> {\n    if (!this._isNetworkInspectionEnabled())\n      return;\n    await this._networkManager?.setOffline(!!this.browserContext._options.offline).catch(() => {});\n  }\n\n  async updateHttpCredentials(): Promise<void> {\n    if (!this._isNetworkInspectionEnabled())\n      return;\n    await this._networkManager?.authenticate(this.browserContext._options.httpCredentials || null).catch(() => {});\n  }\n\n  async updateExtraHTTPHeaders(): Promise<void> {\n    if (!this._isNetworkInspectionEnabled())\n      return;\n    await this._networkManager?.setExtraHTTPHeaders(this.browserContext._options.extraHTTPHeaders || []).catch(() => {});\n  }\n\n  async updateRequestInterception(): Promise<void> {\n    if (!this._isNetworkInspectionEnabled())\n      return;\n    await this._networkManager?.setRequestInterception(this.needsRequestInterception()).catch(() => {});\n  }\n\n  needsRequestInterception(): boolean {\n    return this._isNetworkInspectionEnabled() && this.browserContext.requestInterceptors.length > 0;\n  }\n\n  reportRequestFinished(request: network.Request, response: network.Response | null) {\n    this.browserContext.emit(BrowserContext.Events.RequestFinished, { request, response });\n  }\n\n  requestFailed(request: network.Request, _canceled: boolean) {\n    this.browserContext.emit(BrowserContext.Events.RequestFailed, request);\n  }\n\n  requestReceivedResponse(response: network.Response) {\n    this.browserContext.emit(BrowserContext.Events.Response, response);\n  }\n\n  requestStarted(request: network.Request, route?: network.RouteDelegate) {\n    this.browserContext.emit(BrowserContext.Events.Request, request);\n    if (route)\n      new network.Route(request, route).handle(this.browserContext.requestInterceptors);\n  }\n\n  private _isNetworkInspectionEnabled(): boolean {\n    return this.browserContext._options.serviceWorkers !== 'block';\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport path from 'path';\n\nimport { assert } from '../../utils/isomorphic/assert';\nimport { createGuid } from '../utils/crypto';\nimport { Artifact } from '../artifact';\nimport { Browser } from '../browser';\nimport { BrowserContext, verifyGeolocation } from '../browserContext';\nimport { Frame } from '../frames';\nimport * as network from '../network';\nimport { Page } from '../page';\nimport { CRConnection, ConnectionEvents } from './crConnection';\nimport { CRPage } from './crPage';\nimport { saveProtocolStream } from './crProtocolHelper';\nimport { CRServiceWorker } from './crServiceWorker';\n\nimport type { InitScript, Worker } from '../page';\nimport type { ConnectionTransport } from '../transport';\nimport type * as types from '../types';\nimport type { CDPSession, CRSession } from './crConnection';\nimport type { CRDevTools } from './crDevTools';\nimport type { Protocol } from './protocol';\nimport type { BrowserOptions } from '../browser';\nimport type { SdkObject } from '../instrumentation';\nimport type * as channels from '@protocol/channels';\n\nexport class CRBrowser extends Browser {\n  readonly _connection: CRConnection;\n  _session: CRSession;\n  private _clientRootSessionPromise: Promise<CDPSession> | null = null;\n  readonly _contexts = new Map<string, CRBrowserContext>();\n  _crPages = new Map<string, CRPage>();\n  _backgroundPages = new Map<string, CRPage>();\n  _serviceWorkers = new Map<string, CRServiceWorker>();\n  _devtools?: CRDevTools;\n  private _version = '';\n\n  private _tracingRecording = false;\n  private _tracingClient: CRSession | undefined;\n  private _userAgent: string = '';\n\n  static async connect(parent: SdkObject, transport: ConnectionTransport, options: BrowserOptions, devtools?: CRDevTools): Promise<CRBrowser> {\n    // Make a copy in case we need to update `headful` property below.\n    options = { ...options };\n    const connection = new CRConnection(transport, options.protocolLogger, options.browserLogsCollector);\n    const browser = new CRBrowser(parent, connection, options);\n    browser._devtools = devtools;\n    if (browser.isClank())\n      browser._isCollocatedWithServer = false;\n    const session = connection.rootSession;\n    if ((options as any).__testHookOnConnectToBrowser)\n      await (options as any).__testHookOnConnectToBrowser();\n\n    const version = await session.send('Browser.getVersion');\n    browser._version = version.product.substring(version.product.indexOf('/') + 1);\n    browser._userAgent = version.userAgent;\n    // We don't trust the option as it may lie in case of connectOverCDP where remote browser\n    // may have been launched with different options.\n    browser.options.headful = !version.userAgent.includes('Headless');\n    if (!options.persistent) {\n      await session.send('Target.setAutoAttach', { autoAttach: true, waitForDebuggerOnStart: true, flatten: true });\n      return browser;\n    }\n    browser._defaultContext = new CRBrowserContext(browser, undefined, options.persistent);\n    await Promise.all([\n      session.send('Target.setAutoAttach', { autoAttach: true, waitForDebuggerOnStart: true, flatten: true }).then(async () => {\n        // Target.setAutoAttach has a bug where it does not wait for new Targets being attached.\n        // However making a dummy call afterwards fixes this.\n        // This can be removed after https://chromium-review.googlesource.com/c/chromium/src/+/2885888 lands in stable.\n        await session.send('Target.getTargetInfo');\n      }),\n      (browser._defaultContext as CRBrowserContext)._initialize(),\n    ]);\n    await browser._waitForAllPagesToBeInitialized();\n    return browser;\n  }\n\n  constructor(parent: SdkObject, connection: CRConnection, options: BrowserOptions) {\n    super(parent, options);\n    this._connection = connection;\n    this._session = this._connection.rootSession;\n    this._connection.on(ConnectionEvents.Disconnected, () => this._didDisconnect());\n    this._session.on('Target.attachedToTarget', this._onAttachedToTarget.bind(this));\n    this._session.on('Target.detachedFromTarget', this._onDetachedFromTarget.bind(this));\n    this._session.on('Browser.downloadWillBegin', this._onDownloadWillBegin.bind(this));\n    this._session.on('Browser.downloadProgress', this._onDownloadProgress.bind(this));\n  }\n\n  async doCreateNewContext(options: types.BrowserContextOptions): Promise<BrowserContext> {\n    const proxy = options.proxyOverride || options.proxy;\n    let proxyBypassList = undefined;\n    if (proxy) {\n      if (process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK)\n        proxyBypassList = proxy.bypass;\n      else\n        proxyBypassList = '<-loopback>' + (proxy.bypass ? `,${proxy.bypass}` : '');\n    }\n\n    const { browserContextId } = await this._session.send('Target.createBrowserContext', {\n      disposeOnDetach: true,\n      proxyServer: proxy ? proxy.server : undefined,\n      proxyBypassList,\n    });\n    const context = new CRBrowserContext(this, browserContextId, options);\n    await context._initialize();\n    this._contexts.set(browserContextId, context);\n    return context;\n  }\n\n  contexts(): BrowserContext[] {\n    return Array.from(this._contexts.values());\n  }\n\n  version(): string {\n    return this._version;\n  }\n\n  userAgent(): string {\n    return this._userAgent;\n  }\n\n  _platform(): 'mac' | 'linux' | 'win' {\n    if (this._userAgent.includes('Windows'))\n      return 'win';\n    if (this._userAgent.includes('Macintosh'))\n      return 'mac';\n    return 'linux';\n  }\n\n  isClank(): boolean {\n    return this.options.name === 'clank';\n  }\n\n  async _waitForAllPagesToBeInitialized() {\n    await Promise.all([...this._crPages.values()].map(crPage => crPage._page.waitForInitializedOrError()));\n  }\n\n  _onAttachedToTarget({ targetInfo, sessionId, waitingForDebugger }: Protocol.Target.attachedToTargetPayload) {\n    if (targetInfo.type === 'browser')\n      return;\n    const session = this._session.createChildSession(sessionId);\n    assert(targetInfo.browserContextId, 'targetInfo: ' + JSON.stringify(targetInfo, null, 2));\n    let context = this._contexts.get(targetInfo.browserContextId) || null;\n    if (!context) {\n      // TODO: auto attach only to pages from our contexts.\n      // assert(this._defaultContext);\n      context = this._defaultContext as CRBrowserContext;\n    }\n\n    if (targetInfo.type === 'other' && targetInfo.url.startsWith('devtools://devtools') && this._devtools) {\n      this._devtools.install(session);\n      return;\n    }\n\n    const treatOtherAsPage = targetInfo.type === 'other' && process.env.PW_CHROMIUM_ATTACH_TO_OTHER;\n\n    if (!context || (targetInfo.type === 'other' && !treatOtherAsPage)) {\n      session.detach().catch(() => {});\n      return;\n    }\n\n    assert(!this._crPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);\n    assert(!this._backgroundPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);\n    assert(!this._serviceWorkers.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);\n\n    if (targetInfo.type === 'background_page') {\n      const backgroundPage = new CRPage(session, targetInfo.targetId, context, null, { hasUIWindow: false, isBackgroundPage: true });\n      this._backgroundPages.set(targetInfo.targetId, backgroundPage);\n      return;\n    }\n\n    if (targetInfo.type === 'page' || treatOtherAsPage) {\n      const opener = targetInfo.openerId ? this._crPages.get(targetInfo.openerId) || null : null;\n      const crPage = new CRPage(session, targetInfo.targetId, context, opener, { hasUIWindow: targetInfo.type === 'page', isBackgroundPage: false });\n      this._crPages.set(targetInfo.targetId, crPage);\n      return;\n    }\n\n    if (targetInfo.type === 'service_worker') {\n      const serviceWorker = new CRServiceWorker(context, session, targetInfo.url);\n      this._serviceWorkers.set(targetInfo.targetId, serviceWorker);\n      context.emit(CRBrowserContext.CREvents.ServiceWorker, serviceWorker);\n      return;\n    }\n\n    // Detach from any targets we are not interested in, to avoid side-effects.\n    //\n    // One example of a side effect: upon shared worker restart, we receive\n    // Inspector.targetReloadedAfterCrash and backend waits for Runtime.runIfWaitingForDebugger\n    // from any attached client. If we do not resume, shared worker will stall.\n    session.detach().catch(() => {});\n  }\n\n  _onDetachedFromTarget(payload: Protocol.Target.detachedFromTargetPayload) {\n    const targetId = payload.targetId!;\n    const crPage = this._crPages.get(targetId);\n    if (crPage) {\n      this._crPages.delete(targetId);\n      crPage.didClose();\n      return;\n    }\n    const backgroundPage = this._backgroundPages.get(targetId);\n    if (backgroundPage) {\n      this._backgroundPages.delete(targetId);\n      backgroundPage.didClose();\n      return;\n    }\n    const serviceWorker = this._serviceWorkers.get(targetId);\n    if (serviceWorker) {\n      this._serviceWorkers.delete(targetId);\n      serviceWorker.didClose();\n      return;\n    }\n  }\n\n  private _didDisconnect() {\n    for (const crPage of this._crPages.values())\n      crPage.didClose();\n    this._crPages.clear();\n    for (const backgroundPage of this._backgroundPages.values())\n      backgroundPage.didClose();\n    this._backgroundPages.clear();\n    for (const serviceWorker of this._serviceWorkers.values())\n      serviceWorker.didClose();\n    this._serviceWorkers.clear();\n    this._didClose();\n  }\n\n  private _findOwningPage(frameId: string) {\n    for (const crPage of this._crPages.values()) {\n      const frame = crPage._page.frameManager.frame(frameId);\n      if (frame)\n        return crPage;\n    }\n    return null;\n  }\n\n  _onDownloadWillBegin(payload: Protocol.Browser.downloadWillBeginPayload) {\n    const page = this._findOwningPage(payload.frameId);\n    if (!page) {\n      // There might be no page when download originates from something unusual, like\n      // a DevTools window or maybe an extension page.\n      // See https://github.com/microsoft/playwright/issues/22551.\n      return;\n    }\n    page.willBeginDownload();\n\n    let originPage = page._page.initializedOrUndefined();\n    // If it's a new window download, report it on the opener page.\n    if (!originPage && page._opener)\n      originPage = page._opener._page.initializedOrUndefined();\n    if (!originPage)\n      return;\n    this._downloadCreated(originPage, payload.guid, payload.url, payload.suggestedFilename);\n  }\n\n  _onDownloadProgress(payload: any) {\n    if (payload.state === 'completed')\n      this._downloadFinished(payload.guid, '');\n    if (payload.state === 'canceled')\n      this._downloadFinished(payload.guid, this._closeReason || 'canceled');\n  }\n\n  async _closePage(crPage: CRPage) {\n    await this._session.send('Target.closeTarget', { targetId: crPage._targetId });\n  }\n\n  async newBrowserCDPSession(): Promise<CDPSession> {\n    return await this._connection.createBrowserSession();\n  }\n\n  async startTracing(page?: Page, options: { screenshots?: boolean; categories?: string[]; } = {}) {\n    assert(!this._tracingRecording, 'Cannot start recording trace while already recording trace.');\n    this._tracingClient = page ? (page.delegate as CRPage)._mainFrameSession._client : this._session;\n\n    const defaultCategories = [\n      '-*', 'devtools.timeline', 'v8.execute', 'disabled-by-default-devtools.timeline',\n      'disabled-by-default-devtools.timeline.frame', 'toplevel',\n      'blink.console', 'blink.user_timing', 'latencyInfo', 'disabled-by-default-devtools.timeline.stack',\n      'disabled-by-default-v8.cpu_profiler', 'disabled-by-default-v8.cpu_profiler.hires'\n    ];\n    const {\n      screenshots = false,\n      categories = defaultCategories,\n    } = options;\n\n    if (screenshots)\n      categories.push('disabled-by-default-devtools.screenshot');\n\n    this._tracingRecording = true;\n    await this._tracingClient.send('Tracing.start', {\n      transferMode: 'ReturnAsStream',\n      categories: categories.join(',')\n    });\n  }\n\n  async stopTracing(): Promise<Artifact> {\n    assert(this._tracingClient, 'Tracing was not started.');\n    const [event] = await Promise.all([\n      new Promise(f => this._tracingClient!.once('Tracing.tracingComplete', f)),\n      this._tracingClient.send('Tracing.end')\n    ]);\n    const tracingPath = path.join(this.options.artifactsDir, createGuid() + '.crtrace');\n    await saveProtocolStream(this._tracingClient, (event as any).stream!, tracingPath);\n    this._tracingRecording = false;\n    const artifact = new Artifact(this, tracingPath);\n    artifact.reportFinished();\n    return artifact;\n  }\n\n  isConnected(): boolean {\n    return !this._connection._closed;\n  }\n\n  async _clientRootSession(): Promise<CDPSession> {\n    if (!this._clientRootSessionPromise)\n      this._clientRootSessionPromise = this._connection.createBrowserSession();\n    return this._clientRootSessionPromise;\n  }\n}\n\nexport class CRBrowserContext extends BrowserContext {\n  static CREvents = {\n    BackgroundPage: 'backgroundpage',\n    ServiceWorker: 'serviceworker',\n  };\n\n  declare readonly _browser: CRBrowser;\n\n  constructor(browser: CRBrowser, browserContextId: string | undefined, options: types.BrowserContextOptions) {\n    super(browser, options, browserContextId);\n    this._authenticateProxyViaCredentials();\n  }\n\n  override async _initialize() {\n    assert(!Array.from(this._browser._crPages.values()).some(page => page._browserContext === this));\n    const promises: Promise<any>[] = [super._initialize()];\n    if (this._browser.options.name !== 'clank' && this._options.acceptDownloads !== 'internal-browser-default') {\n      promises.push(this._browser._session.send('Browser.setDownloadBehavior', {\n        behavior: this._options.acceptDownloads === 'accept' ? 'allowAndName' : 'deny',\n        browserContextId: this._browserContextId,\n        downloadPath: this._browser.options.downloadsPath,\n        eventsEnabled: true,\n      }));\n    }\n    await Promise.all(promises);\n  }\n\n  private _crPages() {\n    return [...this._browser._crPages.values()].filter(crPage => crPage._browserContext === this);\n  }\n\n  override possiblyUninitializedPages(): Page[] {\n    return this._crPages().map(crPage => crPage._page);\n  }\n\n  override async doCreateNewPage(markAsServerSideOnly?: boolean): Promise<Page> {\n    const { targetId } = await this._browser._session.send('Target.createTarget', { url: 'about:blank', browserContextId: this._browserContextId });\n    const page = this._browser._crPages.get(targetId)!._page;\n    if (markAsServerSideOnly)\n      page.markAsServerSideOnly();\n    return page;\n  }\n\n  async doGetCookies(urls: string[]): Promise<channels.NetworkCookie[]> {\n    const { cookies } = await this._browser._session.send('Storage.getCookies', { browserContextId: this._browserContextId });\n    return network.filterCookies(cookies.map(c => {\n      const copy: any = { sameSite: 'Lax', ...c };\n      delete copy.size;\n      delete copy.priority;\n      delete copy.session;\n      delete copy.sameParty;\n      delete copy.sourceScheme;\n      delete copy.sourcePort;\n      return copy as channels.NetworkCookie;\n    }), urls);\n  }\n\n  async addCookies(cookies: channels.SetNetworkCookie[]) {\n    await this._browser._session.send('Storage.setCookies', { cookies: network.rewriteCookies(cookies), browserContextId: this._browserContextId });\n  }\n\n  async doClearCookies() {\n    await this._browser._session.send('Storage.clearCookies', { browserContextId: this._browserContextId });\n  }\n\n  async doGrantPermissions(origin: string, permissions: string[]) {\n    const webPermissionToProtocol = new Map<string, Protocol.Browser.PermissionType>([\n      ['geolocation', 'geolocation'],\n      ['midi', 'midi'],\n      ['notifications', 'notifications'],\n      ['camera', 'videoCapture'],\n      ['microphone', 'audioCapture'],\n      ['background-sync', 'backgroundSync'],\n      ['ambient-light-sensor', 'sensors'],\n      ['accelerometer', 'sensors'],\n      ['gyroscope', 'sensors'],\n      ['magnetometer', 'sensors'],\n      ['clipboard-read', 'clipboardReadWrite'],\n      ['clipboard-write', 'clipboardSanitizedWrite'],\n      ['payment-handler', 'paymentHandler'],\n      // chrome-specific permissions we have.\n      ['midi-sysex', 'midiSysex'],\n      ['storage-access', 'storageAccess'],\n    ]);\n    const filtered = permissions.map(permission => {\n      const protocolPermission = webPermissionToProtocol.get(permission);\n      if (!protocolPermission)\n        throw new Error('Unknown permission: ' + permission);\n      return protocolPermission;\n    });\n    await this._browser._session.send('Browser.grantPermissions', { origin: origin === '*' ? undefined : origin, browserContextId: this._browserContextId, permissions: filtered });\n  }\n\n  async doClearPermissions() {\n    await this._browser._session.send('Browser.resetPermissions', { browserContextId: this._browserContextId });\n  }\n\n  async setGeolocation(geolocation?: types.Geolocation): Promise<void> {\n    verifyGeolocation(geolocation);\n    this._options.geolocation = geolocation;\n    for (const page of this.pages())\n      await (page.delegate as CRPage).updateGeolocation();\n  }\n\n  async setExtraHTTPHeaders(headers: types.HeadersArray): Promise<void> {\n    this._options.extraHTTPHeaders = headers;\n    for (const page of this.pages())\n      await (page.delegate as CRPage).updateExtraHTTPHeaders();\n    for (const sw of this.serviceWorkers())\n      await (sw as CRServiceWorker).updateExtraHTTPHeaders();\n  }\n\n  async setUserAgent(userAgent: string | undefined): Promise<void> {\n    this._options.userAgent = userAgent;\n    for (const page of this.pages())\n      await (page.delegate as CRPage).updateUserAgent();\n    // TODO: service workers don't have Emulation domain?\n  }\n\n  async setOffline(offline: boolean): Promise<void> {\n    this._options.offline = offline;\n    for (const page of this.pages())\n      await (page.delegate as CRPage).updateOffline();\n    for (const sw of this.serviceWorkers())\n      await (sw as CRServiceWorker).updateOffline();\n  }\n\n  async doSetHTTPCredentials(httpCredentials?: types.Credentials): Promise<void> {\n    this._options.httpCredentials = httpCredentials;\n    for (const page of this.pages())\n      await (page.delegate as CRPage).updateHttpCredentials();\n    for (const sw of this.serviceWorkers())\n      await (sw as CRServiceWorker).updateHttpCredentials();\n  }\n\n  async doAddInitScript(initScript: InitScript) {\n    for (const page of this.pages())\n      await (page.delegate as CRPage).addInitScript(initScript);\n  }\n\n  async doRemoveInitScripts(initScripts: InitScript[]) {\n    for (const page of this.pages())\n      await (page.delegate as CRPage).removeInitScripts(initScripts);\n  }\n\n  async doUpdateRequestInterception(): Promise<void> {\n    for (const page of this.pages())\n      await (page.delegate as CRPage).updateRequestInterception();\n    for (const sw of this.serviceWorkers())\n      await (sw as CRServiceWorker).updateRequestInterception();\n  }\n\n  override async doExposePlaywrightBinding() {\n    for (const page of this._crPages())\n      await page.exposePlaywrightBinding();\n  }\n\n  async doClose(reason: string | undefined) {\n    // Headful chrome cannot dispose browser context with opened 'beforeunload'\n    // dialogs, so we should close all that are currently opened.\n    // We also won't get new ones since `Target.disposeBrowserContext` does not trigger\n    // beforeunload.\n    await this.dialogManager.closeBeforeUnloadDialogs();\n\n    if (!this._browserContextId) {\n      await this.stopVideoRecording();\n      // Closing persistent context should close the browser.\n      await this._browser.close({ reason });\n      return;\n    }\n\n    await this._browser._session.send('Target.disposeBrowserContext', { browserContextId: this._browserContextId });\n    this._browser._contexts.delete(this._browserContextId);\n    for (const [targetId, serviceWorker] of this._browser._serviceWorkers) {\n      if (serviceWorker.browserContext !== this)\n        continue;\n      // When closing a browser context, service workers are shutdown\n      // asynchronously and we get detached from them later.\n      // To avoid the wrong order of notifications, we manually fire\n      // \"close\" event here and forget about the service worker.\n      serviceWorker.didClose();\n      this._browser._serviceWorkers.delete(targetId);\n    }\n  }\n\n  async stopVideoRecording() {\n    await Promise.all(this._crPages().map(crPage => crPage._mainFrameSession._stopVideoRecording()));\n  }\n\n  onClosePersistent() {\n    // When persistent context is closed, we do not necessary get Target.detachedFromTarget\n    // for all the background pages.\n    for (const [targetId, backgroundPage] of this._browser._backgroundPages.entries()) {\n      if (backgroundPage._browserContext === this && backgroundPage._page.initializedOrUndefined()) {\n        backgroundPage.didClose();\n        this._browser._backgroundPages.delete(targetId);\n      }\n    }\n  }\n\n  override async clearCache(): Promise<void> {\n    for (const page of this._crPages())\n      await page._networkManager.clearCache();\n  }\n\n  async cancelDownload(guid: string) {\n    // The upstream CDP method is implemented in a way that no explicit error would be given\n    // regarding the requested `guid`, even if the download is in a state not suitable for\n    // cancellation (finished, cancelled, etc.) or the guid is invalid at all.\n    await this._browser._session.send('Browser.cancelDownload', {\n      guid: guid,\n      browserContextId: this._browserContextId,\n    });\n  }\n\n  backgroundPages(): Page[] {\n    const result: Page[] = [];\n    for (const backgroundPage of this._browser._backgroundPages.values()) {\n      if (backgroundPage._browserContext === this && backgroundPage._page.initializedOrUndefined())\n        result.push(backgroundPage._page);\n    }\n    return result;\n  }\n\n  serviceWorkers(): Worker[] {\n    return Array.from(this._browser._serviceWorkers.values()).filter(serviceWorker => serviceWorker.browserContext === this);\n  }\n\n  async newCDPSession(page: Page | Frame): Promise<CDPSession> {\n    let targetId: string | null = null;\n    if (page instanceof Page) {\n      targetId = (page.delegate as CRPage)._targetId;\n    } else if (page instanceof Frame) {\n      const session = (page._page.delegate as CRPage)._sessions.get(page._id);\n      if (!session)\n        throw new Error(`This frame does not have a separate CDP session, it is a part of the parent frame's session`);\n      targetId = session._targetId;\n    } else {\n      throw new Error('page: expected Page or Frame');\n    }\n\n    const rootSession = await this._browser._clientRootSession();\n    return rootSession.attachToTarget(targetId);\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\n\nimport { Dispatcher } from './dispatcher';\nimport { createGuid } from '../utils/crypto';\n\nimport type { BrowserContextDispatcher } from './browserContextDispatcher';\nimport type * as channels from '@protocol/channels';\n\nexport class WritableStreamDispatcher extends Dispatcher<{ guid: string, streamOrDirectory: fs.WriteStream | string }, channels.WritableStreamChannel, BrowserContextDispatcher> implements channels.WritableStreamChannel {\n  _type_WritableStream = true;\n  private _lastModifiedMs: number | undefined;\n\n  constructor(scope: BrowserContextDispatcher, streamOrDirectory: fs.WriteStream | string, lastModifiedMs?: number) {\n    super(scope, { guid: 'writableStream@' + createGuid(), streamOrDirectory }, 'WritableStream', {});\n    this._lastModifiedMs = lastModifiedMs;\n  }\n\n  async write(params: channels.WritableStreamWriteParams): Promise<channels.WritableStreamWriteResult> {\n    if (typeof this._object.streamOrDirectory === 'string')\n      throw new Error('Cannot write to a directory');\n    const stream = this._object.streamOrDirectory;\n    await new Promise<void>((fulfill, reject) => {\n      stream.write(params.binary, error => {\n        if (error)\n          reject(error);\n        else\n          fulfill();\n      });\n    });\n  }\n\n  async close() {\n    if (typeof this._object.streamOrDirectory === 'string')\n      throw new Error('Cannot close a directory');\n    const stream = this._object.streamOrDirectory;\n    await new Promise<void>(fulfill => stream.end(fulfill));\n    if (this._lastModifiedMs)\n      await fs.promises.utimes(this.path(), new Date(this._lastModifiedMs), new Date(this._lastModifiedMs));\n  }\n\n  path(): string {\n    if (typeof this._object.streamOrDirectory === 'string')\n      return this._object.streamOrDirectory;\n    return this._object.streamOrDirectory.path as string;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport { BrowserContext } from '../browserContext';\nimport { ArtifactDispatcher } from './artifactDispatcher';\nimport { CDPSessionDispatcher } from './cdpSessionDispatcher';\nimport { DialogDispatcher } from './dialogDispatcher';\nimport { Dispatcher } from './dispatcher';\nimport { ElementHandleDispatcher } from './elementHandlerDispatcher';\nimport { FrameDispatcher } from './frameDispatcher';\nimport { JSHandleDispatcher } from './jsHandleDispatcher';\nimport { APIRequestContextDispatcher, RequestDispatcher, ResponseDispatcher, RouteDispatcher } from './networkDispatchers';\nimport { BindingCallDispatcher, PageDispatcher, WorkerDispatcher } from './pageDispatcher';\nimport { CRBrowserContext } from '../chromium/crBrowser';\nimport { serializeError } from '../errors';\nimport { Recorder } from '../recorder';\nimport { TracingDispatcher } from './tracingDispatcher';\nimport { WebSocketRouteDispatcher } from './webSocketRouteDispatcher';\nimport { WritableStreamDispatcher } from './writableStreamDispatcher';\nimport { createGuid } from '../utils/crypto';\nimport { urlMatches } from '../../utils/isomorphic/urlMatch';\nimport { RecorderApp } from '../recorder/recorderApp';\n\nimport type { Artifact } from '../artifact';\nimport type { ConsoleMessage } from '../console';\nimport type { Dialog } from '../dialog';\nimport type { CallMetadata } from '../instrumentation';\nimport type { Request, Response, RouteHandler } from '../network';\nimport type { InitScript, Page, PageBinding } from '../page';\nimport type { DispatcherScope } from './dispatcher';\nimport type * as channels from '@protocol/channels';\n\nexport class BrowserContextDispatcher extends Dispatcher<BrowserContext, channels.BrowserContextChannel, DispatcherScope> implements channels.BrowserContextChannel {\n  _type_EventTarget = true;\n  _type_BrowserContext = true;\n  private _context: BrowserContext;\n  private _subscriptions = new Set<channels.BrowserContextUpdateSubscriptionParams['event']>();\n  _webSocketInterceptionPatterns: channels.BrowserContextSetWebSocketInterceptionPatternsParams['patterns'] = [];\n  private _bindings: PageBinding[] = [];\n  private _initScritps: InitScript[] = [];\n  private _dialogHandler: (dialog: Dialog) => boolean;\n  private _clockPaused = false;\n  private _requestInterceptor: RouteHandler;\n  private _interceptionUrlMatchers: (string | RegExp)[] = [];\n\n  static from(parentScope: DispatcherScope, context: BrowserContext): BrowserContextDispatcher {\n    const result = parentScope.connection.existingDispatcher<BrowserContextDispatcher>(context);\n    return result || new BrowserContextDispatcher(parentScope, context);\n  }\n\n  private constructor(parentScope: DispatcherScope, context: BrowserContext) {\n    // We will reparent these to the context below.\n    const requestContext = APIRequestContextDispatcher.from(parentScope as BrowserContextDispatcher, context.fetchRequest);\n    const tracing = TracingDispatcher.from(parentScope as BrowserContextDispatcher, context.tracing);\n\n    super(parentScope, context, 'BrowserContext', {\n      isChromium: context._browser.options.isChromium,\n      requestContext,\n      tracing,\n      options: context._options,\n    });\n\n    this.adopt(requestContext);\n    this.adopt(tracing);\n\n    this._requestInterceptor = (route, request) => {\n      const matchesSome = this._interceptionUrlMatchers.some(urlMatch => urlMatches(this._context._options.baseURL, request.url(), urlMatch));\n      // If there is already a dispatcher, that means we've already routed this request through page.\n      // Client expects a single `route` event, either on the page or on the context, so we can just fallback here.\n      const routeDispatcher = this.connection.existingDispatcher<RouteDispatcher>(route);\n      if (!matchesSome || routeDispatcher) {\n        route.continue({ isFallback: true }).catch(() => {});\n        return;\n      }\n      this._dispatchEvent('route', { route: new RouteDispatcher(RequestDispatcher.from(this, request), route) });\n    };\n\n    this._context = context;\n    // Note: when launching persistent context, or connecting to an existing browser,\n    // dispatcher is created very late, so we can already have pages, videos and everything else.\n\n    const onVideo = (artifact: Artifact) => {\n      // Note: Video must outlive Page and BrowserContext, so that client can saveAs it\n      // after closing the context. We use |scope| for it.\n      const artifactDispatcher = ArtifactDispatcher.from(parentScope, artifact);\n      this._dispatchEvent('video', { artifact: artifactDispatcher });\n    };\n    this.addObjectListener(BrowserContext.Events.VideoStarted, onVideo);\n    for (const video of context._browser._idToVideo.values()) {\n      if (video.context === context)\n        onVideo(video.artifact);\n    }\n\n    for (const page of context.pages())\n      this._dispatchEvent('page', { page: PageDispatcher.from(this, page) });\n    this.addObjectListener(BrowserContext.Events.Page, page => {\n      this._dispatchEvent('page', { page: PageDispatcher.from(this, page) });\n    });\n    this.addObjectListener(BrowserContext.Events.Close, () => {\n      this._dispatchEvent('close');\n      this._dispose();\n    });\n    this.addObjectListener(BrowserContext.Events.PageError, (error: Error, page: Page) => {\n      this._dispatchEvent('pageError', { error: serializeError(error), page: PageDispatcher.from(this, page) });\n    });\n    this.addObjectListener(BrowserContext.Events.Console, (message: ConsoleMessage) => {\n      const page = message.page()!;\n      if (this._shouldDispatchEvent(page, 'console')) {\n        const pageDispatcher = PageDispatcher.from(this, page);\n        this._dispatchEvent('console', {\n          page: pageDispatcher,\n          type: message.type(),\n          text: message.text(),\n          args: message.args().map(a => {\n            const elementHandle = a.asElement();\n            if (elementHandle)\n              return ElementHandleDispatcher.from(FrameDispatcher.from(this, elementHandle._frame), elementHandle);\n            return JSHandleDispatcher.fromJSHandle(pageDispatcher, a);\n          }),\n          location: message.location(),\n        });\n      }\n    });\n    this._dialogHandler = dialog => {\n      if (!this._shouldDispatchEvent(dialog.page(), 'dialog'))\n        return false;\n      this._dispatchEvent('dialog', { dialog: new DialogDispatcher(this, dialog) });\n      return true;\n    };\n    context.dialogManager.addDialogHandler(this._dialogHandler);\n\n    if (context._browser.options.name === 'chromium') {\n      for (const page of (context as CRBrowserContext).backgroundPages())\n        this._dispatchEvent('backgroundPage', { page: PageDispatcher.from(this, page) });\n      this.addObjectListener(CRBrowserContext.CREvents.BackgroundPage, page => this._dispatchEvent('backgroundPage', { page: PageDispatcher.from(this, page) }));\n      for (const serviceWorker of (context as CRBrowserContext).serviceWorkers())\n        this._dispatchEvent('serviceWorker', { worker: new WorkerDispatcher(this, serviceWorker) });\n      this.addObjectListener(CRBrowserContext.CREvents.ServiceWorker, serviceWorker => this._dispatchEvent('serviceWorker', { worker: new WorkerDispatcher(this, serviceWorker) }));\n    }\n    this.addObjectListener(BrowserContext.Events.Request, (request: Request) =>  {\n      // Create dispatcher, if:\n      // - There are listeners to the requests.\n      // - We are redirected from a reported request so that redirectedTo was updated on client.\n      // - We are a navigation request and dispatcher will be reported as a part of the goto return value and newDocument param anyways.\n      //   By the time requestFinished is triggered to update the request, we should have a request on the client already.\n      const redirectFromDispatcher = request.redirectedFrom() && this.connection.existingDispatcher(request.redirectedFrom());\n      if (!redirectFromDispatcher && !this._shouldDispatchNetworkEvent(request, 'request') && !request.isNavigationRequest())\n        return;\n      const requestDispatcher = RequestDispatcher.from(this, request);\n      this._dispatchEvent('request', {\n        request: requestDispatcher,\n        page: PageDispatcher.fromNullable(this, request.frame()?._page.initializedOrUndefined())\n      });\n    });\n    this.addObjectListener(BrowserContext.Events.Response, (response: Response) => {\n      const requestDispatcher = this.connection.existingDispatcher<RequestDispatcher>(response.request());\n      if (!requestDispatcher && !this._shouldDispatchNetworkEvent(response.request(), 'response'))\n        return;\n      this._dispatchEvent('response', {\n        response: ResponseDispatcher.from(this, response),\n        page: PageDispatcher.fromNullable(this, response.frame()?._page.initializedOrUndefined())\n      });\n    });\n    this.addObjectListener(BrowserContext.Events.RequestFailed, (request: Request) => {\n      const requestDispatcher = this.connection.existingDispatcher<RequestDispatcher>(request);\n      if (!requestDispatcher && !this._shouldDispatchNetworkEvent(request, 'requestFailed'))\n        return;\n      this._dispatchEvent('requestFailed', {\n        request: RequestDispatcher.from(this, request),\n        failureText: request._failureText || undefined,\n        responseEndTiming: request._responseEndTiming,\n        page: PageDispatcher.fromNullable(this, request.frame()?._page.initializedOrUndefined())\n      });\n    });\n    this.addObjectListener(BrowserContext.Events.RequestFinished, ({ request, response }: { request: Request, response: Response | null }) => {\n      const requestDispatcher = this.connection.existingDispatcher<RequestDispatcher>(request);\n      if (!requestDispatcher && !this._shouldDispatchNetworkEvent(request, 'requestFinished'))\n        return;\n      this._dispatchEvent('requestFinished', {\n        request: RequestDispatcher.from(this, request),\n        response: ResponseDispatcher.fromNullable(this, response),\n        responseEndTiming: request._responseEndTiming,\n        page: PageDispatcher.fromNullable(this, request.frame()?._page.initializedOrUndefined()),\n      });\n    });\n  }\n\n  private _shouldDispatchNetworkEvent(request: Request, event: channels.BrowserContextUpdateSubscriptionParams['event'] & channels.PageUpdateSubscriptionParams['event']): boolean {\n    return this._shouldDispatchEvent(request.frame()?._page?.initializedOrUndefined(), event);\n  }\n\n  private _shouldDispatchEvent(page: Page | undefined, event: channels.BrowserContextUpdateSubscriptionParams['event'] & channels.PageUpdateSubscriptionParams['event']): boolean {\n    if (this._subscriptions.has(event))\n      return true;\n    const pageDispatcher = page ? this.connection.existingDispatcher<PageDispatcher>(page) : undefined;\n    if (pageDispatcher?._subscriptions.has(event))\n      return true;\n    return false;\n  }\n\n  async createTempFiles(params: channels.BrowserContextCreateTempFilesParams): Promise<channels.BrowserContextCreateTempFilesResult> {\n    const dir = this._context._browser.options.artifactsDir;\n    const tmpDir = path.join(dir, 'upload-' + createGuid());\n    const tempDirWithRootName = params.rootDirName ? path.join(tmpDir, path.basename(params.rootDirName)) : tmpDir;\n    await fs.promises.mkdir(tempDirWithRootName, { recursive: true });\n    this._context._tempDirs.push(tmpDir);\n    return {\n      rootDir: params.rootDirName ? new WritableStreamDispatcher(this, tempDirWithRootName) : undefined,\n      writableStreams: await Promise.all(params.items.map(async item => {\n        await fs.promises.mkdir(path.dirname(path.join(tempDirWithRootName, item.name)), { recursive: true });\n        const file = fs.createWriteStream(path.join(tempDirWithRootName, item.name));\n        return new WritableStreamDispatcher(this, file, item.lastModifiedMs);\n      }))\n    };\n  }\n\n  async exposeBinding(params: channels.BrowserContextExposeBindingParams): Promise<void> {\n    const binding = await this._context.exposeBinding(params.name, !!params.needsHandle, (source, ...args) => {\n      // When reusing the context, we might have some bindings called late enough,\n      // after context and page dispatchers have been disposed.\n      if (this._disposed)\n        return;\n      const pageDispatcher = PageDispatcher.from(this, source.page);\n      const binding = new BindingCallDispatcher(pageDispatcher, params.name, !!params.needsHandle, source, args);\n      this._dispatchEvent('bindingCall', { binding });\n      return binding.promise();\n    });\n    this._bindings.push(binding);\n  }\n\n  async newPage(params: channels.BrowserContextNewPageParams, metadata: CallMetadata): Promise<channels.BrowserContextNewPageResult> {\n    return { page: PageDispatcher.from(this, await this._context.newPage(metadata)) };\n  }\n\n  async cookies(params: channels.BrowserContextCookiesParams): Promise<channels.BrowserContextCookiesResult> {\n    return { cookies: await this._context.cookies(params.urls) };\n  }\n\n  async addCookies(params: channels.BrowserContextAddCookiesParams): Promise<void> {\n    await this._context.addCookies(params.cookies);\n  }\n\n  async clearCookies(params: channels.BrowserContextClearCookiesParams): Promise<void> {\n    const nameRe = params.nameRegexSource !== undefined && params.nameRegexFlags !== undefined ? new RegExp(params.nameRegexSource, params.nameRegexFlags) : undefined;\n    const domainRe = params.domainRegexSource !== undefined && params.domainRegexFlags !== undefined ? new RegExp(params.domainRegexSource, params.domainRegexFlags) : undefined;\n    const pathRe = params.pathRegexSource !== undefined && params.pathRegexFlags !== undefined ? new RegExp(params.pathRegexSource, params.pathRegexFlags) : undefined;\n    await this._context.clearCookies({\n      name: nameRe || params.name,\n      domain: domainRe || params.domain,\n      path: pathRe || params.path,\n    });\n  }\n\n  async grantPermissions(params: channels.BrowserContextGrantPermissionsParams): Promise<void> {\n    await this._context.grantPermissions(params.permissions, params.origin);\n  }\n\n  async clearPermissions(): Promise<void> {\n    await this._context.clearPermissions();\n  }\n\n  async setGeolocation(params: channels.BrowserContextSetGeolocationParams): Promise<void> {\n    await this._context.setGeolocation(params.geolocation);\n  }\n\n  async setExtraHTTPHeaders(params: channels.BrowserContextSetExtraHTTPHeadersParams): Promise<void> {\n    await this._context.setExtraHTTPHeaders(params.headers);\n  }\n\n  async setOffline(params: channels.BrowserContextSetOfflineParams): Promise<void> {\n    await this._context.setOffline(params.offline);\n  }\n\n  async setHTTPCredentials(params: channels.BrowserContextSetHTTPCredentialsParams): Promise<void> {\n    await this._context.setHTTPCredentials(params.httpCredentials);\n  }\n\n  async addInitScript(params: channels.BrowserContextAddInitScriptParams): Promise<void> {\n    this._initScritps.push(await this._context.addInitScript(params.source));\n  }\n\n  async setNetworkInterceptionPatterns(params: channels.BrowserContextSetNetworkInterceptionPatternsParams): Promise<void> {\n    const hadMatchers = this._interceptionUrlMatchers.length > 0;\n    if (!params.patterns.length) {\n      // Note: it is important to remove the interceptor when there are no patterns,\n      // because that disables the slow-path interception in the browser itself.\n      if (hadMatchers)\n        await this._context.removeRequestInterceptor(this._requestInterceptor);\n      this._interceptionUrlMatchers = [];\n    } else {\n      this._interceptionUrlMatchers = params.patterns.map(pattern => pattern.regexSource ? new RegExp(pattern.regexSource, pattern.regexFlags!) : pattern.glob!);\n      if (!hadMatchers)\n        await this._context.addRequestInterceptor(this._requestInterceptor);\n    }\n  }\n\n  async setWebSocketInterceptionPatterns(params: channels.PageSetWebSocketInterceptionPatternsParams, metadata: CallMetadata): Promise<void> {\n    this._webSocketInterceptionPatterns = params.patterns;\n    if (params.patterns.length)\n      await WebSocketRouteDispatcher.installIfNeeded(this.connection, this._context);\n  }\n\n  async storageState(params: channels.BrowserContextStorageStateParams, metadata: CallMetadata): Promise<channels.BrowserContextStorageStateResult> {\n    return await this._context.storageState(params.indexedDB);\n  }\n\n  async close(params: channels.BrowserContextCloseParams, metadata: CallMetadata): Promise<void> {\n    metadata.potentiallyClosesScope = true;\n    await this._context.close(params);\n  }\n\n  async enableRecorder(params: channels.BrowserContextEnableRecorderParams): Promise<void> {\n    await Recorder.show(this._context, RecorderApp.factory(this._context), params);\n  }\n\n  async pause(params: channels.BrowserContextPauseParams, metadata: CallMetadata) {\n    // Debugger will take care of this.\n  }\n\n  async newCDPSession(params: channels.BrowserContextNewCDPSessionParams): Promise<channels.BrowserContextNewCDPSessionResult> {\n    if (!this._object._browser.options.isChromium)\n      throw new Error(`CDP session is only available in Chromium`);\n    if (!params.page && !params.frame || params.page && params.frame)\n      throw new Error(`CDP session must be initiated with either Page or Frame, not none or both`);\n    const crBrowserContext = this._object as CRBrowserContext;\n    return { session: new CDPSessionDispatcher(this, await crBrowserContext.newCDPSession((params.page ? params.page as PageDispatcher : params.frame as FrameDispatcher)._object)) };\n  }\n\n  async harStart(params: channels.BrowserContextHarStartParams): Promise<channels.BrowserContextHarStartResult> {\n    const harId = await this._context._harStart(params.page ? (params.page as PageDispatcher)._object : null, params.options);\n    return { harId };\n  }\n\n  async harExport(params: channels.BrowserContextHarExportParams): Promise<channels.BrowserContextHarExportResult> {\n    const artifact = await this._context._harExport(params.harId);\n    if (!artifact)\n      throw new Error('No HAR artifact. Ensure record.harPath is set.');\n    return { artifact: ArtifactDispatcher.from(this, artifact) };\n  }\n\n  async clockFastForward(params: channels.BrowserContextClockFastForwardParams, metadata?: CallMetadata | undefined): Promise<channels.BrowserContextClockFastForwardResult> {\n    await this._context.clock.fastForward(params.ticksString ?? params.ticksNumber ?? 0);\n  }\n\n  async clockInstall(params: channels.BrowserContextClockInstallParams, metadata?: CallMetadata | undefined): Promise<channels.BrowserContextClockInstallResult> {\n    await this._context.clock.install(params.timeString ?? params.timeNumber ?? undefined);\n  }\n\n  async clockPauseAt(params: channels.BrowserContextClockPauseAtParams, metadata?: CallMetadata | undefined): Promise<channels.BrowserContextClockPauseAtResult> {\n    await this._context.clock.pauseAt(params.timeString ?? params.timeNumber ?? 0);\n    this._clockPaused = true;\n  }\n\n  async clockResume(params: channels.BrowserContextClockResumeParams, metadata?: CallMetadata | undefined): Promise<channels.BrowserContextClockResumeResult> {\n    await this._context.clock.resume();\n    this._clockPaused = false;\n  }\n\n  async clockRunFor(params: channels.BrowserContextClockRunForParams, metadata?: CallMetadata | undefined): Promise<channels.BrowserContextClockRunForResult> {\n    await this._context.clock.runFor(params.ticksString ?? params.ticksNumber ?? 0);\n  }\n\n  async clockSetFixedTime(params: channels.BrowserContextClockSetFixedTimeParams, metadata?: CallMetadata | undefined): Promise<channels.BrowserContextClockSetFixedTimeResult> {\n    await this._context.clock.setFixedTime(params.timeString ?? params.timeNumber ?? 0);\n  }\n\n  async clockSetSystemTime(params: channels.BrowserContextClockSetSystemTimeParams, metadata?: CallMetadata | undefined): Promise<channels.BrowserContextClockSetSystemTimeResult> {\n    await this._context.clock.setSystemTime(params.timeString ?? params.timeNumber ?? 0);\n  }\n\n  async updateSubscription(params: channels.BrowserContextUpdateSubscriptionParams): Promise<void> {\n    if (params.enabled)\n      this._subscriptions.add(params.event);\n    else\n      this._subscriptions.delete(params.event);\n  }\n\n  async registerSelectorEngine(params: channels.BrowserContextRegisterSelectorEngineParams): Promise<void> {\n    this._object.selectors().register(params.selectorEngine);\n  }\n\n  async setTestIdAttributeName(params: channels.BrowserContextSetTestIdAttributeNameParams): Promise<void> {\n    this._object.selectors().setTestIdAttributeName(params.testIdAttributeName);\n  }\n\n  override _onDispose() {\n    // Avoid protocol calls for the closed context.\n    if (this._context.isClosingOrClosed())\n      return;\n\n    // Cleanup properly and leave the page in a good state. Other clients may still connect and use it.\n    this._context.dialogManager.removeDialogHandler(this._dialogHandler);\n    this._interceptionUrlMatchers = [];\n    this._context.removeRequestInterceptor(this._requestInterceptor).catch(() => {});\n    this._context.removeExposedBindings(this._bindings).catch(() => {});\n    this._bindings = [];\n    this._context.removeInitScripts(this._initScritps).catch(() => {});\n    this._initScritps = [];\n    if (this._clockPaused)\n      this._context.clock.resume().catch(() => {});\n    this._clockPaused = false;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeWaitForNextTask } from './task';\n\ninterface WritableStream {\n  write(data: Buffer): void;\n}\n\ninterface ReadableStream {\n  on(event: 'data', callback: (b: Buffer) => void): void;\n  on(event: 'close', callback: () => void): void;\n}\n\ninterface ClosableStream {\n  close(): void;\n}\n\nexport class PipeTransport {\n  private _pipeWrite: WritableStream;\n  private _data = Buffer.from([]);\n  private _waitForNextTask = makeWaitForNextTask();\n  private _closed = false;\n  private _bytesLeft = 0;\n\n  onmessage?: (message: string) => void;\n  onclose?: () => void;\n\n  private _endian: 'be' | 'le';\n  private _closeableStream: ClosableStream | undefined;\n\n  constructor(pipeWrite: WritableStream, pipeRead: ReadableStream, closeable?: ClosableStream, endian: 'be' | 'le' = 'le') {\n    this._pipeWrite = pipeWrite;\n    this._endian = endian;\n    this._closeableStream = closeable;\n    pipeRead.on('data', buffer => this._dispatch(buffer));\n    pipeRead.on('close', () => {\n      this._closed = true;\n      if (this.onclose)\n        this.onclose();\n    });\n    this.onmessage = undefined;\n    this.onclose = undefined;\n  }\n\n  send(message: string) {\n    if (this._closed)\n      throw new Error('Pipe has been closed');\n    const data = Buffer.from(message, 'utf-8');\n    const dataLength = Buffer.alloc(4);\n    if (this._endian === 'be')\n      dataLength.writeUInt32BE(data.length, 0);\n    else\n      dataLength.writeUInt32LE(data.length, 0);\n    this._pipeWrite.write(dataLength);\n    this._pipeWrite.write(data);\n  }\n\n  close() {\n    // Let it throw.\n    this._closeableStream!.close();\n  }\n\n  _dispatch(buffer: Buffer) {\n    this._data = Buffer.concat([this._data, buffer]);\n    while (true) {\n      if (!this._bytesLeft && this._data.length < 4) {\n        // Need more data.\n        break;\n      }\n\n      if (!this._bytesLeft) {\n        this._bytesLeft = this._endian === 'be' ? this._data.readUInt32BE(0) : this._data.readUInt32LE(0);\n        this._data = this._data.slice(4);\n      }\n\n      if (!this._bytesLeft || this._data.length < this._bytesLeft) {\n        // Need more data.\n        break;\n      }\n\n      const message = this._data.slice(0, this._bytesLeft);\n      this._data = this._data.slice(this._bytesLeft);\n      this._bytesLeft = 0;\n      this._waitForNextTask(() => {\n        if (this.onmessage)\n          this.onmessage(message.toString('utf-8'));\n      });\n    }\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// No dependencies as it is used from the Electron loader.\n\nconst disabledFeatures = (assistantMode?: boolean) => [\n  // See https://github.com/microsoft/playwright/pull/10380\n  'AcceptCHFrame',\n  // See https://github.com/microsoft/playwright/pull/10679\n  'AutoExpandDetailsElement',\n  // See https://github.com/microsoft/playwright/issues/14047\n  'AvoidUnnecessaryBeforeUnloadCheckSync',\n  // See https://github.com/microsoft/playwright/pull/12992\n  'CertificateTransparencyComponentUpdater',\n  'DestroyProfileOnBrowserClose',\n  // See https://github.com/microsoft/playwright/pull/13854\n  'DialMediaRouteProvider',\n  // Chromium is disabling manifest version 2. Allow testing it as long as Chromium can actually run it.\n  // Disabled in https://chromium-review.googlesource.com/c/chromium/src/+/6265903.\n  'ExtensionManifestV2Disabled',\n  'GlobalMediaControls',\n  // See https://github.com/microsoft/playwright/pull/27605\n  'HttpsUpgrades',\n  'ImprovedCookieControls',\n  'LazyFrameLoading',\n  // Hides the Lens feature in the URL address bar. Its not working in unofficial builds.\n  'LensOverlay',\n  // See https://github.com/microsoft/playwright/pull/8162\n  'MediaRouter',\n  // See https://github.com/microsoft/playwright/issues/28023\n  'PaintHolding',\n  // See https://github.com/microsoft/playwright/issues/32230\n  'ThirdPartyStoragePartitioning',\n  // See https://github.com/microsoft/playwright/issues/16126\n  'Translate',\n  assistantMode ? 'AutomationControlled' : '',\n].filter(Boolean);\n\nexport const chromiumSwitches = (assistantMode?: boolean, channel?: string) => [\n  '--disable-field-trial-config', // https://source.chromium.org/chromium/chromium/src/+/main:testing/variations/README.md\n  '--disable-background-networking',\n  '--disable-background-timer-throttling',\n  '--disable-backgrounding-occluded-windows',\n  '--disable-back-forward-cache', // Avoids surprises like main request not being intercepted during page.goBack().\n  '--disable-breakpad',\n  '--disable-client-side-phishing-detection',\n  '--disable-component-extensions-with-background-pages',\n  '--disable-component-update', // Avoids unneeded network activity after startup.\n  '--no-default-browser-check',\n  '--disable-default-apps',\n  '--disable-dev-shm-usage',\n  '--disable-extensions',\n  '--disable-features=' + disabledFeatures(assistantMode).join(','),\n  channel === 'chromium-tip-of-tree' ? '--enable-features=CDPScreenshotNewSurface' : '',\n  '--allow-pre-commit-input',\n  '--disable-hang-monitor',\n  '--disable-ipc-flooding-protection',\n  '--disable-popup-blocking',\n  '--disable-prompt-on-repost',\n  '--disable-renderer-backgrounding',\n  '--force-color-profile=srgb',\n  '--metrics-recording-only',\n  '--no-first-run',\n  '--password-store=basic',\n  '--use-mock-keychain',\n  // See https://chromium-review.googlesource.com/c/chromium/src/+/2436773\n  '--no-service-autorun',\n  '--export-tagged-pdf',\n  // https://chromium-review.googlesource.com/c/chromium/src/+/4853540\n  '--disable-search-engine-choice-screen',\n  // https://issues.chromium.org/41491762\n  '--unsafely-disable-devtools-self-xss-warnings',\n  assistantMode ? '' : '--enable-automation',\n].filter(Boolean);\n","/**\n * Copyright Microsoft Corporation. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { PipeTransport } from '../utils/pipeTransport';\nimport { createGuid } from '../utils/crypto';\nimport { isUnderTest } from '../utils/debug';\nimport { getPackageManagerExecCommand } from '../utils/env';\nimport { makeWaitForNextTask } from '../utils/task';\nimport { RecentLogsCollector } from '../utils/debugLogger';\nimport { debug } from '../../utilsBundle';\nimport { wsReceiver, wsSender } from '../../utilsBundle';\nimport { validateBrowserContextOptions } from '../browserContext';\nimport { chromiumSwitches } from '../chromium/chromiumSwitches';\nimport { CRBrowser } from '../chromium/crBrowser';\nimport { removeFolders } from '../utils/fileUtils';\nimport { helper } from '../helper';\nimport { SdkObject, serverSideCallMetadata } from '../instrumentation';\nimport { gracefullyCloseSet } from '../utils/processLauncher';\nimport { ProgressController } from '../progress';\nimport { registry } from '../registry';\n\nimport type { BrowserOptions, BrowserProcess } from '../browser';\nimport type { BrowserContext } from '../browserContext';\nimport type * as types from '../types';\nimport type * as channels from '@protocol/channels';\nimport type * as stream from 'stream';\n\nconst ARTIFACTS_FOLDER = path.join(os.tmpdir(), 'playwright-artifacts-');\n\nexport interface Backend {\n  devices(options: channels.AndroidDevicesOptions): Promise<DeviceBackend[]>;\n}\n\nexport interface DeviceBackend {\n  serial: string;\n  status: string;\n  close(): Promise<void>;\n  init(): Promise<void>;\n  runCommand(command: string): Promise<Buffer>;\n  open(command: string): Promise<SocketBackend>;\n}\n\nexport interface SocketBackend extends EventEmitter {\n  guid: string;\n  write(data: Buffer): Promise<void>;\n  close(): void;\n}\n\nexport class Android extends SdkObject {\n  private _backend: Backend;\n  private _devices = new Map<string, AndroidDevice>();\n\n  constructor(parent: SdkObject, backend: Backend) {\n    super(parent, 'android');\n    this._backend = backend;\n  }\n\n  async devices(options: channels.AndroidDevicesOptions): Promise<AndroidDevice[]> {\n    const devices = (await this._backend.devices(options)).filter(d => d.status === 'device');\n    const newSerials = new Set<string>();\n    for (const d of devices) {\n      newSerials.add(d.serial);\n      if (this._devices.has(d.serial))\n        continue;\n      const device = await AndroidDevice.create(this, d, options);\n      this._devices.set(d.serial, device);\n    }\n    for (const d of this._devices.keys()) {\n      if (!newSerials.has(d))\n        this._devices.delete(d);\n    }\n    return [...this._devices.values()];\n  }\n\n  _deviceClosed(device: AndroidDevice) {\n    this._devices.delete(device.serial);\n  }\n}\n\nexport class AndroidDevice extends SdkObject {\n  readonly _backend: DeviceBackend;\n  readonly model: string;\n  readonly serial: string;\n  private _options: channels.AndroidDevicesOptions;\n  private _driverPromise: Promise<PipeTransport> | undefined;\n  private _lastId = 0;\n  private _callbacks = new Map<number, { fulfill: (result: any) => void, reject: (error: Error) => void }>();\n  private _pollingWebViews: NodeJS.Timeout | undefined;\n  private _webViews = new Map<string, channels.AndroidWebView>();\n\n  static Events = {\n    WebViewAdded: 'webViewAdded',\n    WebViewRemoved: 'webViewRemoved',\n    Close: 'close',\n  };\n\n  private _browserConnections = new Set<AndroidBrowser>();\n  readonly _android: Android;\n  private _isClosed = false;\n\n  constructor(android: Android, backend: DeviceBackend, model: string, options: channels.AndroidDevicesOptions) {\n    super(android, 'android-device');\n    this._android = android;\n    this._backend = backend;\n    this.model = model;\n    this.serial = backend.serial;\n    this._options = options;\n  }\n\n  static async create(android: Android, backend: DeviceBackend, options: channels.AndroidDevicesOptions): Promise<AndroidDevice> {\n    await backend.init();\n    const model = await backend.runCommand('shell:getprop ro.product.model');\n    const device = new AndroidDevice(android, backend, model.toString().trim(), options);\n    await device._init();\n    return device;\n  }\n\n  async _init() {\n    await this._refreshWebViews();\n    const poll = () => {\n      this._pollingWebViews = setTimeout(() => this._refreshWebViews()\n          .then(poll)\n          .catch(() => {\n            this.close().catch(() => {});\n          }), 500);\n    };\n    poll();\n  }\n\n  async shell(command: string): Promise<Buffer> {\n    const result = await this._backend.runCommand(`shell:${command}`);\n    await this._refreshWebViews();\n    return result;\n  }\n\n  async open(command: string): Promise<SocketBackend> {\n    return await this._backend.open(`${command}`);\n  }\n\n  async screenshot(): Promise<Buffer> {\n    return await this._backend.runCommand(`shell:screencap -p`);\n  }\n\n  private async _driver(): Promise<PipeTransport | undefined> {\n    if (this._isClosed)\n      return;\n    if (!this._driverPromise)\n      this._driverPromise = this._installDriver();\n    return this._driverPromise;\n  }\n\n  private async _installDriver(): Promise<PipeTransport> {\n    debug('pw:android')('Stopping the old driver');\n    await this.shell(`am force-stop com.microsoft.playwright.androiddriver`);\n\n    // uninstall and install driver on every execution\n    if (!this._options.omitDriverInstall) {\n      debug('pw:android')('Uninstalling the old driver');\n      await this.shell(`cmd package uninstall com.microsoft.playwright.androiddriver`);\n      await this.shell(`cmd package uninstall com.microsoft.playwright.androiddriver.test`);\n\n      debug('pw:android')('Installing the new driver');\n      const executable = registry.findExecutable('android')!;\n      const packageManagerCommand = getPackageManagerExecCommand();\n      for (const file of ['android-driver.apk', 'android-driver-target.apk']) {\n        const fullName = path.join(executable.directory!, file);\n        if (!fs.existsSync(fullName))\n          throw new Error(`Please install Android driver apk using '${packageManagerCommand} playwright install android'`);\n        await this.installApk(await fs.promises.readFile(fullName));\n      }\n    } else {\n      debug('pw:android')('Skipping the driver installation');\n    }\n\n    debug('pw:android')('Starting the new driver');\n    this.shell('am instrument -w com.microsoft.playwright.androiddriver.test/androidx.test.runner.AndroidJUnitRunner').catch(e => debug('pw:android')(e));\n    const socket = await this._waitForLocalAbstract('playwright_android_driver_socket');\n    const transport = new PipeTransport(socket, socket, socket, 'be');\n    transport.onmessage = message => {\n      const response = JSON.parse(message);\n      const { id, result, error } = response;\n      const callback = this._callbacks.get(id);\n      if (!callback)\n        return;\n      if (error)\n        callback.reject(new Error(error));\n      else\n        callback.fulfill(result);\n      this._callbacks.delete(id);\n    };\n    return transport;\n  }\n\n  private async _waitForLocalAbstract(socketName: string): Promise<SocketBackend> {\n    let socket: SocketBackend | undefined;\n    debug('pw:android')(`Polling the socket localabstract:${socketName}`);\n    while (!socket) {\n      try {\n        socket = await this._backend.open(`localabstract:${socketName}`);\n      } catch (e) {\n        await new Promise(f => setTimeout(f, 250));\n      }\n    }\n    debug('pw:android')(`Connected to localabstract:${socketName}`);\n    return socket;\n  }\n\n  async send(method: string, params: any = {}): Promise<any> {\n    params = {\n      ...params,\n      // Patch the timeout in, just in case it's missing in one of the commands.\n      timeout: params.timeout || 0,\n    };\n    if (params.androidSelector) {\n      params.selector = params.androidSelector;\n      delete params.androidSelector;\n    }\n    const driver = await this._driver();\n    if (!driver)\n      throw new Error('Device is closed');\n    const id = ++this._lastId;\n    const result = new Promise((fulfill, reject) => this._callbacks.set(id, { fulfill, reject }));\n    driver.send(JSON.stringify({ id, method, params }));\n    return result;\n  }\n\n  async close() {\n    if (this._isClosed)\n      return;\n    this._isClosed = true;\n    if (this._pollingWebViews)\n      clearTimeout(this._pollingWebViews);\n    for (const connection of this._browserConnections)\n      await connection.close();\n    if (this._driverPromise) {\n      const driver = await this._driver();\n      driver?.close();\n    }\n    await this._backend.close();\n    this._android._deviceClosed(this);\n    this.emit(AndroidDevice.Events.Close);\n  }\n\n  async launchBrowser(pkg: string = 'com.android.chrome', options: channels.AndroidDeviceLaunchBrowserParams): Promise<BrowserContext> {\n    debug('pw:android')('Force-stopping', pkg);\n    await this._backend.runCommand(`shell:am force-stop ${pkg}`);\n    const socketName = isUnderTest() ? 'webview_devtools_remote_playwright_test' : ('playwright_' + createGuid() + '_devtools_remote');\n    const commandLine = this._defaultArgs(options, socketName).join(' ');\n    debug('pw:android')('Starting', pkg, commandLine);\n    // encode commandLine to base64 to avoid issues (bash encoding) with special characters\n    await this._backend.runCommand(`shell:echo \"${Buffer.from(commandLine).toString('base64')}\" | base64 -d > /data/local/tmp/chrome-command-line`);\n    await this._backend.runCommand(`shell:am start -a android.intent.action.VIEW -d about:blank ${pkg}`);\n    const browserContext = await this._connectToBrowser(socketName, options);\n    await this._backend.runCommand(`shell:rm /data/local/tmp/chrome-command-line`);\n    return browserContext;\n  }\n\n  private _defaultArgs(options: channels.AndroidDeviceLaunchBrowserParams, socketName: string): string[] {\n    const chromeArguments = [\n      '_',\n      '--disable-fre',\n      '--no-default-browser-check',\n      `--remote-debugging-socket-name=${socketName}`,\n      ...chromiumSwitches(),\n      ...this._innerDefaultArgs(options)\n    ];\n    return chromeArguments;\n  }\n\n  private _innerDefaultArgs(options: channels.AndroidDeviceLaunchBrowserParams): string[] {\n    const { args = [], proxy } = options;\n    const chromeArguments = [];\n    if (proxy) {\n      chromeArguments.push(`--proxy-server=${proxy.server}`);\n      const proxyBypassRules = [];\n      if (proxy.bypass)\n        proxyBypassRules.push(...proxy.bypass.split(',').map(t => t.trim()).map(t => t.startsWith('.') ? '*' + t : t));\n      if (!process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK && !proxyBypassRules.includes('<-loopback>'))\n        proxyBypassRules.push('<-loopback>');\n      if (proxyBypassRules.length > 0)\n        chromeArguments.push(`--proxy-bypass-list=${proxyBypassRules.join(';')}`);\n    }\n    chromeArguments.push(...args);\n    return chromeArguments;\n  }\n\n  async connectToWebView(socketName: string): Promise<BrowserContext> {\n    const webView = this._webViews.get(socketName);\n    if (!webView)\n      throw new Error('WebView has been closed');\n    return await this._connectToBrowser(socketName);\n  }\n\n  private async _connectToBrowser(socketName: string, options: types.BrowserContextOptions = {}): Promise<BrowserContext> {\n    const socket = await this._waitForLocalAbstract(socketName);\n    const androidBrowser = new AndroidBrowser(this, socket);\n    await androidBrowser._init();\n    this._browserConnections.add(androidBrowser);\n\n    const artifactsDir = await fs.promises.mkdtemp(ARTIFACTS_FOLDER);\n    const cleanupArtifactsDir = async () => {\n      const errors = (await removeFolders([artifactsDir])).filter(Boolean);\n      for (let i = 0; i < (errors || []).length; ++i)\n        debug('pw:android')(`exception while removing ${artifactsDir}: ${errors[i]}`);\n    };\n    gracefullyCloseSet.add(cleanupArtifactsDir);\n    socket.on('close', async () => {\n      gracefullyCloseSet.delete(cleanupArtifactsDir);\n      cleanupArtifactsDir().catch(e => debug('pw:android')(`could not cleanup artifacts dir: ${e}`));\n    });\n    const browserOptions: BrowserOptions = {\n      name: 'clank',\n      isChromium: true,\n      slowMo: 0,\n      persistent: { ...options, noDefaultViewport: true },\n      artifactsDir,\n      downloadsPath: artifactsDir,\n      tracesDir: artifactsDir,\n      browserProcess: new ClankBrowserProcess(androidBrowser),\n      proxy: options.proxy,\n      protocolLogger: helper.debugProtocolLogger(),\n      browserLogsCollector: new RecentLogsCollector(),\n      originalLaunchOptions: { timeout: 0 },\n    };\n    validateBrowserContextOptions(options, browserOptions);\n\n    const browser = await CRBrowser.connect(this.attribution.playwright, androidBrowser, browserOptions);\n    const controller = new ProgressController(serverSideCallMetadata(), this);\n    const defaultContext = browser._defaultContext!;\n    await controller.run(async progress => {\n      await defaultContext._loadDefaultContextAsIs(progress);\n    });\n    return defaultContext;\n  }\n\n  webViews(): channels.AndroidWebView[] {\n    return [...this._webViews.values()];\n  }\n\n  async installApk(content: Buffer, options?: { args?: string[] }): Promise<void> {\n    const args = options && options.args ? options.args : ['-r', '-t', '-S'];\n    debug('pw:android')('Opening install socket');\n    const installSocket = await this._backend.open(`shell:cmd package install ${args.join(' ')} ${content.length}`);\n    debug('pw:android')('Writing driver bytes: ' + content.length);\n    await installSocket.write(content);\n    const success = await new Promise(f => installSocket.on('data', f));\n    debug('pw:android')('Written driver bytes: ' + success);\n    installSocket.close();\n  }\n\n  async push(content: Buffer, path: string, mode = 0o644): Promise<void> {\n    const socket = await this._backend.open(`sync:`);\n    const sendHeader = async (command: string, length: number) => {\n      const buffer = Buffer.alloc(command.length + 4);\n      buffer.write(command, 0);\n      buffer.writeUInt32LE(length, command.length);\n      await socket.write(buffer);\n    };\n    const send = async (command: string, data: Buffer) => {\n      await sendHeader(command, data.length);\n      await socket.write(data);\n    };\n    await send('SEND', Buffer.from(`${path},${mode}`));\n    const maxChunk = 65535;\n    for (let i = 0; i < content.length; i += maxChunk)\n      await send('DATA', content.slice(i, i + maxChunk));\n    await sendHeader('DONE', (Date.now() / 1000) | 0);\n    const result = await new Promise<Buffer>(f => socket.once('data', f));\n    const code = result.slice(0, 4).toString();\n    if (code !== 'OKAY')\n      throw new Error('Could not push: ' + code);\n    socket.close();\n  }\n\n  private async _refreshWebViews() {\n    // possible socketName, eg: webview_devtools_remote_32327, webview_devtools_remote_32327_zeus, webview_devtools_remote_zeus\n    const sockets = (await this._backend.runCommand(`shell:cat /proc/net/unix | grep webview_devtools_remote`)).toString().split('\\n');\n    if (this._isClosed)\n      return;\n\n    const socketNames = new Set<string>();\n    for (const line of sockets) {\n      const matchSocketName = line.match(/[^@]+@(.*?webview_devtools_remote_?.*)/);\n      if (!matchSocketName)\n        continue;\n\n      const socketName = matchSocketName[1];\n      socketNames.add(socketName);\n      if (this._webViews.has(socketName))\n        continue;\n\n      // possible line: 0000000000000000: 00000002 00000000 00010000 0001 01 5841881 @webview_devtools_remote_zeus\n      // the result: match[1] = ''\n      const match = line.match(/[^@]+@.*?webview_devtools_remote_?(\\d*)/);\n      let pid = -1;\n      if (match && match[1])\n        pid = +match[1];\n\n      const pkg = await this._extractPkg(pid);\n      if (this._isClosed)\n        return;\n\n      const webView = { pid, pkg, socketName };\n      this._webViews.set(socketName, webView);\n      this.emit(AndroidDevice.Events.WebViewAdded, webView);\n    }\n    for (const p of this._webViews.keys()) {\n      if (!socketNames.has(p)) {\n        this._webViews.delete(p);\n        this.emit(AndroidDevice.Events.WebViewRemoved, p);\n      }\n    }\n  }\n\n  private async _extractPkg(pid: number) {\n    let pkg = '';\n    if (pid === -1)\n      return pkg;\n\n    const procs = (await this._backend.runCommand(`shell:ps -A | grep ${pid}`)).toString().split('\\n');\n    for (const proc of procs) {\n      const match = proc.match(/[^\\s]+\\s+(\\d+).*$/);\n      if (!match)\n        continue;\n      pkg = proc.substring(proc.lastIndexOf(' ') + 1);\n    }\n    return pkg;\n  }\n}\n\nclass AndroidBrowser extends EventEmitter {\n  readonly device: AndroidDevice;\n  private _socket: SocketBackend;\n  private _receiver: stream.Writable;\n  private _waitForNextTask = makeWaitForNextTask();\n  onmessage?: (message: any) => void;\n  onclose?: () => void;\n\n  constructor(device: AndroidDevice, socket: SocketBackend) {\n    super();\n    this.setMaxListeners(0);\n    this.device = device;\n    this._socket = socket;\n    this._socket.on('close', () => {\n      this._waitForNextTask(() => {\n        if (this.onclose)\n          this.onclose();\n      });\n    });\n    this._receiver = new wsReceiver() as stream.Writable;\n    this._receiver.on('message', message => {\n      this._waitForNextTask(() => {\n        if (this.onmessage)\n          this.onmessage(JSON.parse(message));\n      });\n    });\n  }\n\n  async _init() {\n    await this._socket.write(Buffer.from(`GET /devtools/browser HTTP/1.1\\r\nUpgrade: WebSocket\\r\nConnection: Upgrade\\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\\r\nSec-WebSocket-Version: 13\\r\n\\r\n`));\n    // HTTP Upgrade response.\n    await new Promise(f => this._socket!.once('data', f));\n\n    // Start sending web frame to receiver.\n    this._socket.on('data', data => this._receiver._write(data, 'binary', () => {}));\n  }\n\n  async send(s: any) {\n    await this._socket!.write(encodeWebFrame(JSON.stringify(s)));\n  }\n\n  async close() {\n    this._socket!.close();\n  }\n}\n\nfunction encodeWebFrame(data: string): Buffer {\n  return wsSender.frame(Buffer.from(data), {\n    opcode: 1,\n    mask: true,\n    fin: true,\n    readOnly: true\n  })[0];\n}\n\nclass ClankBrowserProcess implements BrowserProcess {\n  private _browser: AndroidBrowser;\n\n  constructor(browser: AndroidBrowser) {\n    this._browser = browser;\n  }\n\n  onclose: ((exitCode: number | null, signal: string | null) => void) | undefined;\n\n  async kill(): Promise<void> {\n  }\n\n  async close(): Promise<void> {\n    await this._browser.close();\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BrowserContextDispatcher } from './browserContextDispatcher';\nimport { Dispatcher } from './dispatcher';\nimport { AndroidDevice } from '../android/android';\n\nimport type { RootDispatcher } from './dispatcher';\nimport type { Android, SocketBackend } from '../android/android';\nimport type { CallMetadata } from '../instrumentation';\nimport type * as channels from '@protocol/channels';\n\nexport class AndroidDispatcher extends Dispatcher<Android, channels.AndroidChannel, RootDispatcher> implements channels.AndroidChannel {\n  _type_Android = true;\n  constructor(scope: RootDispatcher, android: Android) {\n    super(scope, android, 'Android', {});\n  }\n\n  async devices(params: channels.AndroidDevicesParams): Promise<channels.AndroidDevicesResult> {\n    const devices = await this._object.devices(params);\n    return {\n      devices: devices.map(d => AndroidDeviceDispatcher.from(this, d))\n    };\n  }\n}\n\nexport class AndroidDeviceDispatcher extends Dispatcher<AndroidDevice, channels.AndroidDeviceChannel, AndroidDispatcher> implements channels.AndroidDeviceChannel {\n  _type_EventTarget = true;\n  _type_AndroidDevice = true;\n\n  static from(scope: AndroidDispatcher, device: AndroidDevice): AndroidDeviceDispatcher {\n    const result = scope.connection.existingDispatcher<AndroidDeviceDispatcher>(device);\n    return result || new AndroidDeviceDispatcher(scope, device);\n  }\n\n  constructor(scope: AndroidDispatcher, device: AndroidDevice) {\n    super(scope, device, 'AndroidDevice', {\n      model: device.model,\n      serial: device.serial,\n    });\n    for (const webView of device.webViews())\n      this._dispatchEvent('webViewAdded', { webView });\n    this.addObjectListener(AndroidDevice.Events.WebViewAdded, webView => this._dispatchEvent('webViewAdded', { webView }));\n    this.addObjectListener(AndroidDevice.Events.WebViewRemoved, socketName => this._dispatchEvent('webViewRemoved', { socketName }));\n    this.addObjectListener(AndroidDevice.Events.Close, socketName => this._dispatchEvent('close'));\n  }\n\n  async wait(params: channels.AndroidDeviceWaitParams) {\n    await this._object.send('wait', params);\n  }\n\n  async fill(params: channels.AndroidDeviceFillParams) {\n    await this._object.send('click', { selector: params.androidSelector });\n    await this._object.send('fill', params);\n  }\n\n  async tap(params: channels.AndroidDeviceTapParams) {\n    await this._object.send('click', params);\n  }\n\n  async drag(params: channels.AndroidDeviceDragParams) {\n    await this._object.send('drag', params);\n  }\n\n  async fling(params: channels.AndroidDeviceFlingParams) {\n    await this._object.send('fling', params);\n  }\n\n  async longTap(params: channels.AndroidDeviceLongTapParams) {\n    await this._object.send('longClick', params);\n  }\n\n  async pinchClose(params: channels.AndroidDevicePinchCloseParams) {\n    await this._object.send('pinchClose', params);\n  }\n\n  async pinchOpen(params: channels.AndroidDevicePinchOpenParams) {\n    await this._object.send('pinchOpen', params);\n  }\n\n  async scroll(params: channels.AndroidDeviceScrollParams) {\n    await this._object.send('scroll', params);\n  }\n\n  async swipe(params: channels.AndroidDeviceSwipeParams) {\n    await this._object.send('swipe', params);\n  }\n\n  async info(params: channels.AndroidDeviceTapParams): Promise<channels.AndroidDeviceInfoResult> {\n    const info = await this._object.send('info', params);\n    fixupAndroidElementInfo(info);\n    return { info };\n  }\n\n  async inputType(params: channels.AndroidDeviceInputTypeParams) {\n    const text = params.text;\n    const keyCodes: number[] = [];\n    for (let i = 0; i < text.length; ++i) {\n      const code = keyMap.get(text[i].toUpperCase());\n      if (code === undefined)\n        throw new Error('No mapping for ' + text[i] + ' found');\n      keyCodes.push(code);\n    }\n    await Promise.all(keyCodes.map(keyCode => this._object.send('inputPress', { keyCode })));\n  }\n\n  async inputPress(params: channels.AndroidDeviceInputPressParams) {\n    if (!keyMap.has(params.key))\n      throw new Error('Unknown key: ' + params.key);\n    await this._object.send('inputPress', { keyCode: keyMap.get(params.key) });\n  }\n\n  async inputTap(params: channels.AndroidDeviceInputTapParams) {\n    await this._object.send('inputClick', params);\n  }\n\n  async inputSwipe(params: channels.AndroidDeviceInputSwipeParams) {\n    await this._object.send('inputSwipe', params);\n  }\n\n  async inputDrag(params: channels.AndroidDeviceInputDragParams) {\n    await this._object.send('inputDrag', params);\n  }\n\n  async screenshot(params: channels.AndroidDeviceScreenshotParams): Promise<channels.AndroidDeviceScreenshotResult> {\n    return { binary: await this._object.screenshot() };\n  }\n\n  async shell(params: channels.AndroidDeviceShellParams): Promise<channels.AndroidDeviceShellResult> {\n    return { result: await this._object.shell(params.command) };\n  }\n\n  async open(params: channels.AndroidDeviceOpenParams, metadata: CallMetadata): Promise<channels.AndroidDeviceOpenResult> {\n    const socket = await this._object.open(params.command);\n    return { socket: new AndroidSocketDispatcher(this, socket) };\n  }\n\n  async installApk(params: channels.AndroidDeviceInstallApkParams) {\n    await this._object.installApk(params.file, { args: params.args });\n  }\n\n  async push(params: channels.AndroidDevicePushParams) {\n    await this._object.push(params.file, params.path, params.mode);\n  }\n\n  async launchBrowser(params: channels.AndroidDeviceLaunchBrowserParams): Promise<channels.AndroidDeviceLaunchBrowserResult> {\n    const context = await this._object.launchBrowser(params.pkg, params);\n    return { context: BrowserContextDispatcher.from(this, context) };\n  }\n\n  async close(params: channels.AndroidDeviceCloseParams) {\n    await this._object.close();\n  }\n\n  async connectToWebView(params: channels.AndroidDeviceConnectToWebViewParams): Promise<channels.AndroidDeviceConnectToWebViewResult> {\n    return { context: BrowserContextDispatcher.from(this, await this._object.connectToWebView(params.socketName)) };\n  }\n}\n\nexport class AndroidSocketDispatcher extends Dispatcher<SocketBackend, channels.AndroidSocketChannel, AndroidDeviceDispatcher> implements channels.AndroidSocketChannel {\n  _type_AndroidSocket = true;\n\n  constructor(scope: AndroidDeviceDispatcher, socket: SocketBackend) {\n    super(scope, socket, 'AndroidSocket', {});\n    this.addObjectListener('data', (data: Buffer) => this._dispatchEvent('data', { data }));\n    this.addObjectListener('close', () => {\n      this._dispatchEvent('close');\n      this._dispose();\n    });\n  }\n\n  async write(params: channels.AndroidSocketWriteParams, metadata: CallMetadata): Promise<void> {\n    await this._object.write(params.data);\n  }\n\n  async close(params: channels.AndroidSocketCloseParams, metadata: CallMetadata): Promise<void> {\n    this._object.close();\n  }\n}\n\nconst keyMap = new Map<string, number>([\n  ['Unknown', 0],\n  ['SoftLeft', 1],\n  ['SoftRight', 2],\n  ['Home', 3],\n  ['Back', 4],\n  ['Call', 5],\n  ['EndCall', 6],\n  ['0', 7],\n  ['1', 8],\n  ['2', 9],\n  ['3', 10],\n  ['4', 11],\n  ['5', 12],\n  ['6', 13],\n  ['7', 14],\n  ['8', 15],\n  ['9', 16],\n  ['Star', 17],\n  ['*', 17],\n  ['Pound', 18],\n  ['#', 18],\n  ['DialUp', 19],\n  ['DialDown', 20],\n  ['DialLeft', 21],\n  ['DialRight', 22],\n  ['DialCenter', 23],\n  ['VolumeUp', 24],\n  ['VolumeDown', 25],\n  ['Power', 26],\n  ['Camera', 27],\n  ['Clear', 28],\n  ['A', 29],\n  ['B', 30],\n  ['C', 31],\n  ['D', 32],\n  ['E', 33],\n  ['F', 34],\n  ['G', 35],\n  ['H', 36],\n  ['I', 37],\n  ['J', 38],\n  ['K', 39],\n  ['L', 40],\n  ['M', 41],\n  ['N', 42],\n  ['O', 43],\n  ['P', 44],\n  ['Q', 45],\n  ['R', 46],\n  ['S', 47],\n  ['T', 48],\n  ['U', 49],\n  ['V', 50],\n  ['W', 51],\n  ['X', 52],\n  ['Y', 53],\n  ['Z', 54],\n  ['Comma', 55],\n  [',', 55],\n  ['Period', 56],\n  ['.', 56],\n  ['AltLeft', 57],\n  ['AltRight', 58],\n  ['ShiftLeft', 59],\n  ['ShiftRight', 60],\n  ['Tab', 61],\n  ['\\t', 61],\n  ['Space', 62],\n  [' ', 62],\n  ['Sym', 63],\n  ['Explorer', 64],\n  ['Envelop', 65],\n  ['Enter', 66],\n  ['Del', 67],\n  ['Grave', 68],\n  ['Minus', 69],\n  ['-', 69],\n  ['Equals', 70],\n  ['=', 70],\n  ['LeftBracket', 71],\n  ['(', 71],\n  ['RightBracket', 72],\n  [')', 72],\n  ['Backslash', 73],\n  ['\\\\', 73],\n  ['Semicolon', 74],\n  [';', 74],\n  ['Apostrophe', 75],\n  ['`', 75],\n  ['Slash', 76],\n  ['/', 76],\n  ['At', 77],\n  ['@', 77],\n  ['Num', 78],\n  ['HeadsetHook', 79],\n  ['Focus', 80],\n  ['Plus', 81],\n  ['Menu', 82],\n  ['Notification', 83],\n  ['Search', 84],\n  ['ChannelUp', 166],\n  ['ChannelDown', 167],\n  ['AppSwitch', 187],\n  ['Assist', 219],\n  ['Cut', 277],\n  ['Copy', 278],\n  ['Paste', 279],\n]);\n\nfunction fixupAndroidElementInfo(info: channels.AndroidElementInfo) {\n  // Some of the properties are nullable, see https://developer.android.com/reference/androidx/test/uiautomator/UiObject2.\n  info.clazz = info.clazz || '';\n  info.pkg = info.pkg || '';\n  info.res = info.res || '';\n  info.desc = info.desc || '';\n  info.text = info.text || '';\n  for (const child of info.children || [])\n    fixupAndroidElementInfo(child);\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Browser } from '../browser';\nimport { BrowserContextDispatcher } from './browserContextDispatcher';\nimport { CDPSessionDispatcher } from './cdpSessionDispatcher';\nimport { Dispatcher } from './dispatcher';\nimport { BrowserContext } from '../browserContext';\nimport { ArtifactDispatcher } from './artifactDispatcher';\n\nimport type { BrowserTypeDispatcher } from './browserTypeDispatcher';\nimport type { PageDispatcher } from './pageDispatcher';\nimport type { CRBrowser } from '../chromium/crBrowser';\nimport type { CallMetadata } from '../instrumentation';\nimport type * as channels from '@protocol/channels';\n\ntype BrowserDispatcherOptions = {\n  // Do not allow to close this browser.\n  ignoreStopAndKill?: boolean,\n  // Only expose browser contexts created by this dispatcher. By default, all contexts are exposed.\n  isolateContexts?: boolean,\n};\n\nexport class BrowserDispatcher extends Dispatcher<Browser, channels.BrowserChannel, BrowserTypeDispatcher> implements channels.BrowserChannel {\n  _type_Browser = true;\n  private _options: BrowserDispatcherOptions;\n  private _isolatedContexts = new Set<BrowserContext>();\n\n  constructor(scope: BrowserTypeDispatcher, browser: Browser, options: BrowserDispatcherOptions = {}) {\n    super(scope, browser, 'Browser', { version: browser.version(), name: browser.options.name });\n    this._options = options;\n\n    if (!options.isolateContexts) {\n      this.addObjectListener(Browser.Events.Context, (context: BrowserContext) => this._dispatchEvent('context', { context: BrowserContextDispatcher.from(this, context) }));\n      this.addObjectListener(Browser.Events.Disconnected, () => this._didClose());\n      if (browser._defaultContext)\n        this._dispatchEvent('context', { context: BrowserContextDispatcher.from(this, browser._defaultContext) });\n      for (const context of browser.contexts())\n        this._dispatchEvent('context', { context: BrowserContextDispatcher.from(this, context) });\n    }\n  }\n\n  _didClose() {\n    this._dispatchEvent('close');\n    this._dispose();\n  }\n\n  async newContext(params: channels.BrowserNewContextParams, metadata: CallMetadata): Promise<channels.BrowserNewContextResult> {\n    if (!this._options.isolateContexts) {\n      const context = await this._object.newContext(metadata, params);\n      const contextDispatcher = BrowserContextDispatcher.from(this, context);\n      return { context: contextDispatcher };\n    }\n\n    if (params.recordVideo)\n      params.recordVideo.dir = this._object.options.artifactsDir;\n    const context = await this._object.newContext(metadata, params);\n    this._isolatedContexts.add(context);\n    context.on(BrowserContext.Events.Close, () => this._isolatedContexts.delete(context));\n    const contextDispatcher = BrowserContextDispatcher.from(this, context);\n    this._dispatchEvent('context', { context: contextDispatcher });\n    return { context: contextDispatcher };\n  }\n\n  async newContextForReuse(params: channels.BrowserNewContextForReuseParams, metadata: CallMetadata): Promise<channels.BrowserNewContextForReuseResult> {\n    const { context, needsReset } = await this._object.newContextForReuse(params, metadata);\n    if (needsReset) {\n      const oldContextDispatcher = this.connection.existingDispatcher<BrowserContextDispatcher>(context);\n      if (oldContextDispatcher)\n        oldContextDispatcher._dispose();\n      await context.resetForReuse(metadata, params);\n    }\n    const contextDispatcher = BrowserContextDispatcher.from(this, context);\n    this._dispatchEvent('context', { context: contextDispatcher });\n    return { context: contextDispatcher };\n  }\n\n  async stopPendingOperations(params: channels.BrowserStopPendingOperationsParams, metadata: CallMetadata): Promise<channels.BrowserStopPendingOperationsResult> {\n    await this._object.stopPendingOperations(params.reason);\n  }\n\n  async close(params: channels.BrowserCloseParams, metadata: CallMetadata): Promise<void> {\n    if (this._options.ignoreStopAndKill)\n      return;\n    metadata.potentiallyClosesScope = true;\n    await this._object.close(params);\n  }\n\n  async killForTests(_: any, metadata: CallMetadata): Promise<void> {\n    if (this._options.ignoreStopAndKill)\n      return;\n    metadata.potentiallyClosesScope = true;\n    await this._object.killForTests();\n  }\n\n  async defaultUserAgentForTest(): Promise<channels.BrowserDefaultUserAgentForTestResult> {\n    return { userAgent: this._object.userAgent() };\n  }\n\n  async newBrowserCDPSession(): Promise<channels.BrowserNewBrowserCDPSessionResult> {\n    if (!this._object.options.isChromium)\n      throw new Error(`CDP session is only available in Chromium`);\n    const crBrowser = this._object as CRBrowser;\n    return { session: new CDPSessionDispatcher(this, await crBrowser.newBrowserCDPSession()) };\n  }\n\n  async startTracing(params: channels.BrowserStartTracingParams): Promise<void> {\n    if (!this._object.options.isChromium)\n      throw new Error(`Tracing is only available in Chromium`);\n    const crBrowser = this._object as CRBrowser;\n    await crBrowser.startTracing(params.page ? (params.page as PageDispatcher)._object : undefined, params);\n  }\n\n  async stopTracing(): Promise<channels.BrowserStopTracingResult> {\n    if (!this._object.options.isChromium)\n      throw new Error(`Tracing is only available in Chromium`);\n    const crBrowser = this._object as CRBrowser;\n    return { artifact: ArtifactDispatcher.from(this, await crBrowser.stopTracing()) };\n  }\n\n  async cleanupContexts() {\n    await Promise.all(Array.from(this._isolatedContexts).map(context => context.close({ reason: 'Global context cleanup (connection terminated)' })));\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BrowserContextDispatcher } from './browserContextDispatcher';\nimport { BrowserDispatcher } from './browserDispatcher';\nimport { Dispatcher } from './dispatcher';\n\nimport type { BrowserType } from '../browserType';\nimport type { RootDispatcher } from './dispatcher';\nimport type { CallMetadata } from '../instrumentation';\nimport type * as channels from '@protocol/channels';\n\nexport class BrowserTypeDispatcher extends Dispatcher<BrowserType, channels.BrowserTypeChannel, RootDispatcher> implements channels.BrowserTypeChannel {\n  _type_BrowserType = true;\n  constructor(scope: RootDispatcher, browserType: BrowserType) {\n    super(scope, browserType, 'BrowserType', {\n      executablePath: browserType.executablePath(),\n      name: browserType.name()\n    });\n  }\n\n  async launch(params: channels.BrowserTypeLaunchParams, metadata: CallMetadata): Promise<channels.BrowserTypeLaunchResult> {\n    const browser = await this._object.launch(metadata, params);\n    return { browser: new BrowserDispatcher(this, browser) };\n  }\n\n  async launchPersistentContext(params: channels.BrowserTypeLaunchPersistentContextParams, metadata: CallMetadata): Promise<channels.BrowserTypeLaunchPersistentContextResult> {\n    const browserContext = await this._object.launchPersistentContext(metadata, params.userDataDir, params);\n    const browserDispatcher = new BrowserDispatcher(this, browserContext._browser);\n    const contextDispatcher = BrowserContextDispatcher.from(browserDispatcher, browserContext);\n    return { browser: browserDispatcher, context: contextDispatcher };\n  }\n\n  async connectOverCDP(params: channels.BrowserTypeConnectOverCDPParams, metadata: CallMetadata): Promise<channels.BrowserTypeConnectOverCDPResult> {\n    const browser = await this._object.connectOverCDP(metadata, params.endpointURL, params);\n    const browserDispatcher = new BrowserDispatcher(this, browser);\n    return {\n      browser: browserDispatcher,\n      defaultContext: browser._defaultContext ? BrowserContextDispatcher.from(browserDispatcher, browser._defaultContext) : undefined,\n    };\n  }\n}\n","/**\n * Copyright 2018 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DEFAULT_PLAYWRIGHT_TIMEOUT, makeWaitForNextTask } from '../utils';\nimport { httpHappyEyeballsAgent, httpsHappyEyeballsAgent } from './utils/happyEyeballs';\nimport { ws } from '../utilsBundle';\n\nimport type { WebSocket } from '../utilsBundle';\nimport type { Progress } from './progress';\nimport type { HeadersArray } from './types';\nimport type { ClientRequest, IncomingMessage } from 'http';\n\nexport const perMessageDeflate = {\n  clientNoContextTakeover: true,\n  zlibDeflateOptions: {\n    level: 3,\n  },\n  zlibInflateOptions: {\n    chunkSize: 10 * 1024\n  },\n  threshold: 10 * 1024,\n};\n\nexport type ProtocolRequest = {\n  id: number;\n  method: string;\n  params: any;\n  sessionId?: string;\n};\n\nexport type ProtocolResponse = {\n  id?: number;\n  method?: string;\n  sessionId?: string;\n  error?: { message: string; data: any; code?: number };\n  params?: any;\n  result?: any;\n  pageProxyId?: string;\n  browserContextId?: string;\n};\n\nexport interface ConnectionTransport {\n  send(s: ProtocolRequest): void;\n  close(): void;  // Note: calling close is expected to issue onclose at some point.\n  onmessage?: (message: ProtocolResponse) => void,\n  onclose?: (reason?: string) => void,\n}\n\ntype WebSocketTransportOptions = {\n  headers?: { [key: string]: string; };\n  followRedirects?: boolean;\n  debugLogHeader?: string;\n};\n\nexport class WebSocketTransport implements ConnectionTransport {\n  private _ws: WebSocket;\n  private _progress?: Progress;\n  private _logUrl: string;\n\n  onmessage?: (message: ProtocolResponse) => void;\n  onclose?: (reason?: string) => void;\n  readonly wsEndpoint: string;\n  readonly headers: HeadersArray = [];\n\n  static async connect(progress: (Progress|undefined), url: string, options: WebSocketTransportOptions = {}): Promise<WebSocketTransport> {\n    return await WebSocketTransport._connect(progress, url, options, false /* hadRedirects */);\n  }\n\n  static async _connect(progress: (Progress|undefined), url: string, options: WebSocketTransportOptions, hadRedirects: boolean): Promise<WebSocketTransport> {\n    const logUrl = stripQueryParams(url);\n    progress?.log(`<ws connecting> ${logUrl}`);\n    const transport = new WebSocketTransport(progress, url, logUrl, { ...options, followRedirects: !!options.followRedirects && hadRedirects });\n    let success = false;\n    progress?.cleanupWhenAborted(async () => {\n      if (!success)\n        await transport.closeAndWait().catch(e => null);\n    });\n    const result = await new Promise<{ transport?: WebSocketTransport, redirect?: IncomingMessage }>((fulfill, reject) => {\n      transport._ws.on('open', async () => {\n        progress?.log(`<ws connected> ${logUrl}`);\n        fulfill({ transport });\n      });\n      transport._ws.on('error', event => {\n        progress?.log(`<ws connect error> ${logUrl} ${event.message}`);\n        reject(new Error('WebSocket error: ' + event.message));\n        transport._ws.close();\n      });\n      transport._ws.on('unexpected-response', (request: ClientRequest, response: IncomingMessage) => {\n        if (options.followRedirects && !hadRedirects && (response.statusCode === 301 || response.statusCode === 302 || response.statusCode === 307 || response.statusCode === 308)) {\n          fulfill({ redirect: response });\n          transport._ws.close();\n          return;\n        }\n        for (let i = 0; i < response.rawHeaders.length; i += 2) {\n          if (options.debugLogHeader && response.rawHeaders[i] === options.debugLogHeader)\n            progress?.log(response.rawHeaders[i + 1]);\n        }\n        const chunks: Buffer[] = [];\n        const errorPrefix = `${logUrl} ${response.statusCode} ${response.statusMessage}`;\n        response.on('data', chunk => chunks.push(chunk));\n        response.on('close', () => {\n          const error = chunks.length ? `${errorPrefix}\\n${Buffer.concat(chunks)}` : errorPrefix;\n          progress?.log(`<ws unexpected response> ${error}`);\n          reject(new Error('WebSocket error: ' + error));\n          transport._ws.close();\n        });\n      });\n    });\n\n    if (result.redirect) {\n      // Strip authorization headers from the redirected request.\n      const newHeaders = Object.fromEntries(Object.entries(options.headers || {}).filter(([name]) => {\n        return !name.includes('access-key') && name.toLowerCase() !== 'authorization';\n      }));\n      return WebSocketTransport._connect(progress, result.redirect.headers.location!, { ...options, headers: newHeaders }, true /* hadRedirects */);\n    }\n\n    success = true;\n    return transport;\n  }\n\n  constructor(progress: Progress|undefined, url: string, logUrl: string, options: WebSocketTransportOptions) {\n    this.wsEndpoint = url;\n    this._logUrl = logUrl;\n    this._ws = new ws(url, [], {\n      maxPayload: 256 * 1024 * 1024, // 256Mb,\n      // Prevent internal http client error when passing negative timeout.\n      handshakeTimeout: Math.max(progress?.timeUntilDeadline() ?? DEFAULT_PLAYWRIGHT_TIMEOUT, 1),\n      headers: options.headers,\n      followRedirects: options.followRedirects,\n      agent: (/^(https|wss):\\/\\//.test(url)) ? httpsHappyEyeballsAgent : httpHappyEyeballsAgent,\n      perMessageDeflate,\n    });\n    this._ws.on('upgrade', response => {\n      for (let i = 0; i < response.rawHeaders.length; i += 2) {\n        this.headers.push({ name: response.rawHeaders[i], value: response.rawHeaders[i + 1] });\n        if (options.debugLogHeader && response.rawHeaders[i] === options.debugLogHeader)\n          progress?.log(response.rawHeaders[i + 1]);\n      }\n    });\n    this._progress = progress;\n    // The 'ws' module in node sometimes sends us multiple messages in a single task.\n    // In Web, all IO callbacks (e.g. WebSocket callbacks)\n    // are dispatched into separate tasks, so there's no need\n    // to do anything extra.\n    const messageWrap: (cb: () => void) => void = makeWaitForNextTask();\n\n    this._ws.addEventListener('message', event => {\n      messageWrap(() => {\n        const eventData = event.data as string;\n        let parsedJson;\n        try {\n          parsedJson = JSON.parse(eventData);\n        } catch (e) {\n          this._progress?.log(`<closing ws> Closing websocket due to malformed JSON. eventData=${eventData} e=${e?.message}`);\n          this._ws.close();\n          return;\n        }\n        try {\n          if (this.onmessage)\n            this.onmessage.call(null, parsedJson);\n        } catch (e) {\n          this._progress?.log(`<closing ws> Closing websocket due to failed onmessage callback. eventData=${eventData} e=${e?.message}`);\n          this._ws.close();\n        }\n      });\n    });\n\n    this._ws.addEventListener('close', event => {\n      this._progress?.log(`<ws disconnected> ${logUrl} code=${event.code} reason=${event.reason}`);\n      if (this.onclose)\n        this.onclose.call(null, event.reason);\n    });\n    // Prevent Error: read ECONNRESET.\n    this._ws.addEventListener('error', error => this._progress?.log(`<ws error> ${logUrl} ${error.type} ${error.message}`));\n  }\n\n  send(message: ProtocolRequest) {\n    this._ws.send(JSON.stringify(message));\n  }\n\n  close() {\n    this._progress?.log(`<ws disconnecting> ${this._logUrl}`);\n    this._ws.close();\n  }\n\n  async closeAndWait() {\n    if (this._ws.readyState === ws.CLOSED)\n      return;\n    const promise = new Promise(f => this._ws.once('close', f));\n    this.close();\n    await promise; // Make sure to await the actual disconnect.\n  }\n}\n\nfunction stripQueryParams(url: string): string {\n  try {\n    const u = new URL(url);\n    u.search = '';\n    u.hash = '';\n    return u.toString();\n  } catch {\n    return url;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport * as readline from 'readline';\n\nimport { ManualPromise } from '../../utils';\nimport { wrapInASCIIBox } from '../utils/ascii';\nimport { RecentLogsCollector } from '../utils/debugLogger';\nimport { eventsHelper } from '../utils/eventsHelper';\nimport { validateBrowserContextOptions } from '../browserContext';\nimport { CRBrowser } from '../chromium/crBrowser';\nimport { CRConnection } from '../chromium/crConnection';\nimport { createHandle, CRExecutionContext } from '../chromium/crExecutionContext';\nimport { toConsoleMessageLocation } from '../chromium/crProtocolHelper';\nimport { ConsoleMessage } from '../console';\nimport { helper } from '../helper';\nimport { SdkObject, serverSideCallMetadata } from '../instrumentation';\nimport * as js from '../javascript';\nimport { envArrayToObject, launchProcess } from '../utils/processLauncher';\nimport { ProgressController } from '../progress';\nimport { WebSocketTransport } from '../transport';\n\nimport type { BrowserOptions, BrowserProcess } from '../browser';\nimport type { BrowserContext } from '../browserContext';\nimport type { CRBrowserContext } from '../chromium/crBrowser';\nimport type { CRSession } from '../chromium/crConnection';\nimport type { CRPage } from '../chromium/crPage';\nimport type { Protocol } from '../chromium/protocol';\nimport type { Page } from '../page';\nimport type { Playwright } from '../playwright';\nimport type { Progress } from '../progress';\nimport type * as types from '../types';\nimport type * as channels from '@protocol/channels';\nimport type * as childProcess from 'child_process';\nimport type { BrowserWindow } from 'electron';\n\nconst ARTIFACTS_FOLDER = path.join(os.tmpdir(), 'playwright-artifacts-');\n\nexport class ElectronApplication extends SdkObject {\n  static Events = {\n    Close: 'close',\n    Console: 'console',\n  };\n\n  private _browserContext: CRBrowserContext;\n  private _nodeConnection: CRConnection;\n  private _nodeSession: CRSession;\n  private _nodeExecutionContext: js.ExecutionContext | undefined;\n  _nodeElectronHandlePromise: ManualPromise<js.JSHandle<typeof import('electron')>> = new ManualPromise();\n  private _process: childProcess.ChildProcess;\n\n  constructor(parent: SdkObject, browser: CRBrowser, nodeConnection: CRConnection, process: childProcess.ChildProcess) {\n    super(parent, 'electron-app');\n    this._process = process;\n    this._browserContext = browser._defaultContext as CRBrowserContext;\n    this._nodeConnection = nodeConnection;\n    this._nodeSession = nodeConnection.rootSession;\n    this._nodeSession.on('Runtime.executionContextCreated', async (event: Protocol.Runtime.executionContextCreatedPayload) => {\n      if (!event.context.auxData || !event.context.auxData.isDefault)\n        return;\n      const crExecutionContext = new CRExecutionContext(this._nodeSession, event.context);\n      this._nodeExecutionContext = new js.ExecutionContext(this, crExecutionContext, 'electron');\n      const { result: remoteObject } = await crExecutionContext._client.send('Runtime.evaluate', {\n        expression: `require('electron')`,\n        contextId: event.context.id,\n        // Needed after Electron 28 to get access to require: https://github.com/microsoft/playwright/issues/28048\n        includeCommandLineAPI: true,\n      });\n      this._nodeElectronHandlePromise.resolve(new js.JSHandle(this._nodeExecutionContext!, 'object', 'ElectronModule', remoteObject.objectId!));\n    });\n    this._nodeSession.on('Runtime.consoleAPICalled', event => this._onConsoleAPI(event));\n    const appClosePromise = new Promise(f => this.once(ElectronApplication.Events.Close, f));\n    this._browserContext.setCustomCloseHandler(async () => {\n      await this._browserContext.stopVideoRecording();\n      const electronHandle = await this._nodeElectronHandlePromise;\n      await electronHandle.evaluate(({ app }) => app.quit()).catch(() => {});\n      this._nodeConnection.close();\n      await appClosePromise;\n    });\n  }\n\n  async _onConsoleAPI(event: Protocol.Runtime.consoleAPICalledPayload) {\n    if (event.executionContextId === 0) {\n      // DevTools protocol stores the last 1000 console messages. These\n      // messages are always reported even for removed execution contexts. In\n      // this case, they are marked with executionContextId = 0 and are\n      // reported upon enabling Runtime agent.\n      //\n      // Ignore these messages since:\n      // - there's no execution context we can use to operate with message\n      //   arguments\n      // - these messages are reported before Playwright clients can subscribe\n      //   to the 'console'\n      //   page event.\n      //\n      // @see https://github.com/GoogleChrome/puppeteer/issues/3865\n      return;\n    }\n    if (!this._nodeExecutionContext)\n      return;\n    const args = event.args.map(arg => createHandle(this._nodeExecutionContext!, arg));\n    const message = new ConsoleMessage(null, event.type, undefined, args, toConsoleMessageLocation(event.stackTrace));\n    this.emit(ElectronApplication.Events.Console, message);\n  }\n\n  async initialize() {\n    await this._nodeSession.send('Runtime.enable', {});\n    // Delay loading the app until browser is started and the browser targets are configured to auto-attach.\n    await this._nodeSession.send('Runtime.evaluate', { expression: '__playwright_run()' });\n  }\n\n  process(): childProcess.ChildProcess {\n    return this._process;\n  }\n\n  context(): BrowserContext {\n    return this._browserContext;\n  }\n\n  async close() {\n    // This will call BrowserContext.setCustomCloseHandler.\n    await this._browserContext.close({ reason: 'Application exited' });\n  }\n\n  async browserWindow(page: Page): Promise<js.JSHandle<BrowserWindow>> {\n    // Assume CRPage as Electron is always Chromium.\n    const targetId = (page.delegate as CRPage)._targetId;\n    const electronHandle = await this._nodeElectronHandlePromise;\n    return await electronHandle.evaluateHandle(({ BrowserWindow, webContents }, targetId) => {\n      const wc = webContents.fromDevToolsTargetId(targetId);\n      return BrowserWindow.fromWebContents(wc!)!;\n    }, targetId);\n  }\n}\n\nexport class Electron extends SdkObject {\n  constructor(playwright: Playwright) {\n    super(playwright, 'electron');\n  }\n\n  async launch(options: channels.ElectronLaunchParams): Promise<ElectronApplication> {\n    const {\n      args = [],\n    } = options;\n    const controller = new ProgressController(serverSideCallMetadata(), this);\n    controller.setLogName('browser');\n    return controller.run(async progress => {\n      let app: ElectronApplication | undefined = undefined;\n      // --remote-debugging-port=0 must be the last playwright's argument, loader.ts relies on it.\n      let electronArguments = ['--inspect=0', '--remote-debugging-port=0', ...args];\n\n      if (os.platform() === 'linux') {\n        const runningAsRoot = process.geteuid && process.geteuid() === 0;\n        if (runningAsRoot && electronArguments.indexOf('--no-sandbox') === -1)\n          electronArguments.unshift('--no-sandbox');\n      }\n\n      const artifactsDir = await fs.promises.mkdtemp(ARTIFACTS_FOLDER);\n\n      const browserLogsCollector = new RecentLogsCollector();\n      const env = options.env ? envArrayToObject(options.env) : process.env;\n\n      let command: string;\n      if (options.executablePath) {\n        command = options.executablePath;\n      } else {\n        try {\n          // By default we fallback to the Electron App executable path.\n          // 'electron/index.js' resolves to the actual Electron App.\n          command = require('electron/index.js');\n        } catch (error: any) {\n          if ((error as NodeJS.ErrnoException)?.code === 'MODULE_NOT_FOUND') {\n            throw new Error('\\n' + wrapInASCIIBox([\n              'Electron executablePath not found!',\n              'Please install it using `npm install -D electron` or set the executablePath to your Electron executable.',\n            ].join('\\n'), 1));\n          }\n          throw error;\n        }\n        // Only use our own loader for non-packaged apps.\n        // Packaged apps might have their own command line handling.\n        electronArguments.unshift('-r', require.resolve('./loader'));\n      }\n      let shell = false;\n      if (process.platform === 'win32') {\n        // On Windows in order to run .cmd files, shell: true is required.\n        // https://github.com/nodejs/node/issues/52554\n        shell = true;\n        // On Windows, we need to quote the executable path due to shell: true.\n        command = `\"${command}\"`;\n        // On Windows, we need to quote the arguments due to shell: true.\n        electronArguments = electronArguments.map(arg => `\"${arg}\"`);\n      }\n\n      // When debugging Playwright test that runs Electron, NODE_OPTIONS\n      // will make the debugger attach to Electron's Node. But Playwright\n      // also needs to attach to drive the automation. Disable external debugging.\n      delete env.NODE_OPTIONS;\n      const { launchedProcess, gracefullyClose, kill } = await launchProcess({\n        command,\n        args: electronArguments,\n        env,\n        log: (message: string) => {\n          progress.log(message);\n          browserLogsCollector.log(message);\n        },\n        shell,\n        stdio: 'pipe',\n        cwd: options.cwd,\n        tempDirectories: [artifactsDir],\n        attemptToGracefullyClose: () => app!.close(),\n        handleSIGINT: true,\n        handleSIGTERM: true,\n        handleSIGHUP: true,\n        onExit: () => app?.emit(ElectronApplication.Events.Close),\n      });\n\n      // All waitForLines must be started immediately.\n      // Otherwise the lines might come before we are ready.\n      const waitForXserverError = new Promise(async (resolve, reject) => {\n        waitForLine(progress, launchedProcess, /Unable to open X display/).then(() => reject(new Error([\n          'Unable to open X display!',\n          `================================`,\n          'Most likely this is because there is no X server available.',\n          \"Use 'xvfb-run' on Linux to launch your tests with an emulated display server.\",\n          \"For example: 'xvfb-run npm run test:e2e'\",\n          `================================`,\n          progress.metadata.log\n        ].join('\\n')))).catch(() => {});\n      });\n      const nodeMatchPromise = waitForLine(progress, launchedProcess, /^Debugger listening on (ws:\\/\\/.*)$/);\n      const chromeMatchPromise = waitForLine(progress, launchedProcess, /^DevTools listening on (ws:\\/\\/.*)$/);\n      const debuggerDisconnectPromise = waitForLine(progress, launchedProcess, /Waiting for the debugger to disconnect\\.\\.\\./);\n\n      const nodeMatch = await nodeMatchPromise;\n      const nodeTransport = await WebSocketTransport.connect(progress, nodeMatch[1]);\n      const nodeConnection = new CRConnection(nodeTransport, helper.debugProtocolLogger(), browserLogsCollector);\n\n      // Immediately release exiting process under debug.\n      debuggerDisconnectPromise.then(() => {\n        nodeTransport.close();\n      }).catch(() => {});\n      const chromeMatch = await Promise.race([\n        chromeMatchPromise,\n        waitForXserverError,\n      ]) as RegExpMatchArray;\n      const chromeTransport = await WebSocketTransport.connect(progress, chromeMatch[1]);\n      const browserProcess: BrowserProcess = {\n        onclose: undefined,\n        process: launchedProcess,\n        close: gracefullyClose,\n        kill\n      };\n      const contextOptions: types.BrowserContextOptions = {\n        ...options,\n        noDefaultViewport: true,\n      };\n      const browserOptions: BrowserOptions = {\n        name: 'electron',\n        isChromium: true,\n        headful: true,\n        persistent: contextOptions,\n        browserProcess,\n        protocolLogger: helper.debugProtocolLogger(),\n        browserLogsCollector,\n        artifactsDir,\n        downloadsPath: artifactsDir,\n        tracesDir: options.tracesDir || artifactsDir,\n        originalLaunchOptions: { timeout: options.timeout },\n      };\n      validateBrowserContextOptions(contextOptions, browserOptions);\n      const browser = await CRBrowser.connect(this.attribution.playwright, chromeTransport, browserOptions);\n      app = new ElectronApplication(this, browser, nodeConnection, launchedProcess);\n      await app.initialize();\n      return app;\n    }, options.timeout);\n  }\n}\n\nfunction waitForLine(progress: Progress, process: childProcess.ChildProcess, regex: RegExp): Promise<RegExpMatchArray> {\n  return new Promise((resolve, reject) => {\n    const rl = readline.createInterface({ input: process.stderr! });\n    const failError = new Error('Process failed to launch!');\n    const listeners = [\n      eventsHelper.addEventListener(rl, 'line', onLine),\n      eventsHelper.addEventListener(rl, 'close', reject.bind(null, failError)),\n      eventsHelper.addEventListener(process, 'exit', reject.bind(null, failError)),\n      // It is Ok to remove error handler because we did not create process and there is another listener.\n      eventsHelper.addEventListener(process, 'error', reject.bind(null, failError))\n    ];\n\n    progress.cleanupWhenAborted(cleanup);\n\n    function onLine(line: string) {\n      const match = line.match(regex);\n      if (!match)\n        return;\n      cleanup();\n      resolve(match);\n    }\n\n    function cleanup() {\n      eventsHelper.removeEventListeners(listeners);\n    }\n  });\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BrowserContextDispatcher } from './browserContextDispatcher';\nimport { Dispatcher } from './dispatcher';\nimport { JSHandleDispatcher, parseArgument, serializeResult } from './jsHandleDispatcher';\nimport { ElectronApplication } from '../electron/electron';\n\nimport type { RootDispatcher } from './dispatcher';\nimport type { PageDispatcher } from './pageDispatcher';\nimport type { ConsoleMessage } from '../console';\nimport type { Electron } from '../electron/electron';\nimport type * as channels from '@protocol/channels';\n\n\nexport class ElectronDispatcher extends Dispatcher<Electron, channels.ElectronChannel, RootDispatcher> implements channels.ElectronChannel {\n  _type_Electron = true;\n\n  constructor(scope: RootDispatcher, electron: Electron) {\n    super(scope, electron, 'Electron', {});\n  }\n\n  async launch(params: channels.ElectronLaunchParams): Promise<channels.ElectronLaunchResult> {\n    const electronApplication = await this._object.launch(params);\n    return { electronApplication: new ElectronApplicationDispatcher(this, electronApplication) };\n  }\n}\n\nexport class ElectronApplicationDispatcher extends Dispatcher<ElectronApplication, channels.ElectronApplicationChannel, ElectronDispatcher> implements channels.ElectronApplicationChannel {\n  _type_EventTarget = true;\n  _type_ElectronApplication = true;\n  private readonly _subscriptions = new Set<channels.ElectronApplicationUpdateSubscriptionParams['event']>();\n\n  constructor(scope: ElectronDispatcher, electronApplication: ElectronApplication) {\n    super(scope, electronApplication, 'ElectronApplication', {\n      context: BrowserContextDispatcher.from(scope, electronApplication.context())\n    });\n    this.addObjectListener(ElectronApplication.Events.Close, () => {\n      this._dispatchEvent('close');\n      this._dispose();\n    });\n    this.addObjectListener(ElectronApplication.Events.Console, (message: ConsoleMessage) => {\n      if (!this._subscriptions.has('console'))\n        return;\n      this._dispatchEvent('console', {\n        type: message.type(),\n        text: message.text(),\n        args: message.args().map(a => JSHandleDispatcher.fromJSHandle(this, a)),\n        location: message.location()\n      });\n    });\n  }\n\n  async browserWindow(params: channels.ElectronApplicationBrowserWindowParams): Promise<channels.ElectronApplicationBrowserWindowResult> {\n    const handle = await this._object.browserWindow((params.page as PageDispatcher).page());\n    return { handle: JSHandleDispatcher.fromJSHandle(this, handle) };\n  }\n\n  async evaluateExpression(params: channels.ElectronApplicationEvaluateExpressionParams): Promise<channels.ElectronApplicationEvaluateExpressionResult> {\n    const handle = await this._object._nodeElectronHandlePromise;\n    return { value: serializeResult(await handle.evaluateExpression(params.expression, { isFunction: params.isFunction }, parseArgument(params.arg))) };\n  }\n\n  async evaluateExpressionHandle(params: channels.ElectronApplicationEvaluateExpressionHandleParams): Promise<channels.ElectronApplicationEvaluateExpressionHandleResult> {\n    const handle = await this._object._nodeElectronHandlePromise;\n    const result = await handle.evaluateExpressionHandle(params.expression, { isFunction: params.isFunction }, parseArgument(params.arg));\n    return { handle: JSHandleDispatcher.fromJSHandle(this, result) };\n  }\n\n  async updateSubscription(params: channels.ElectronApplicationUpdateSubscriptionParams): Promise<void> {\n    if (params.enabled)\n      this._subscriptions.add(params.event);\n    else\n      this._subscriptions.delete(params.event);\n  }\n\n  async close(): Promise<void> {\n    await this._object.close();\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport { createGuid } from './utils/crypto';\nimport { ZipFile } from './utils/zipFile';\n\nimport type { HeadersArray } from '../utils/isomorphic/types';\nimport type * as har from '@trace/har';\n\nconst redirectStatus = [301, 302, 303, 307, 308];\n\nexport class HarBackend {\n  readonly id: string;\n  private _harFile: har.HARFile;\n  private _zipFile: ZipFile | null;\n  private _baseDir: string | null;\n\n  constructor(harFile: har.HARFile, baseDir: string | null, zipFile: ZipFile | null) {\n    this.id = createGuid();\n    this._harFile = harFile;\n    this._baseDir = baseDir;\n    this._zipFile = zipFile;\n  }\n\n  async lookup(url: string, method: string, headers: HeadersArray, postData: Buffer | undefined, isNavigationRequest: boolean): Promise<{\n      action: 'error' | 'redirect' | 'fulfill' | 'noentry',\n      message?: string,\n      redirectURL?: string,\n      status?: number,\n      headers?: HeadersArray,\n      body?: Buffer }> {\n    let entry;\n    try {\n      entry = await this._harFindResponse(url, method, headers, postData);\n    } catch (e) {\n      return { action: 'error', message: 'HAR error: ' + e.message };\n    }\n\n    if (!entry)\n      return { action: 'noentry' };\n\n    // If navigation is being redirected, restart it with the final url to ensure the document's url changes.\n    if (entry.request.url !== url && isNavigationRequest)\n      return { action: 'redirect', redirectURL: entry.request.url };\n\n    const response = entry.response;\n    try {\n      const buffer = await this._loadContent(response.content);\n      return {\n        action: 'fulfill',\n        status: response.status,\n        headers: response.headers,\n        body: buffer,\n      };\n    } catch (e) {\n      return { action: 'error', message: e.message };\n    }\n  }\n\n  private async _loadContent(content: { text?: string, encoding?: string, _file?: string }): Promise<Buffer> {\n    const file = content._file;\n    let buffer: Buffer;\n    if (file) {\n      if (this._zipFile)\n        buffer = await this._zipFile.read(file);\n      else\n        buffer = await fs.promises.readFile(path.resolve(this._baseDir!, file));\n    } else {\n      buffer = Buffer.from(content.text || '', content.encoding === 'base64' ? 'base64' : 'utf-8');\n    }\n    return buffer;\n  }\n\n  private async _harFindResponse(url: string, method: string, headers: HeadersArray, postData: Buffer | undefined): Promise<har.Entry | undefined> {\n    const harLog = this._harFile.log;\n    const visited = new Set<har.Entry>();\n    while (true) {\n      const entries: har.Entry[] = [];\n      for (const candidate of harLog.entries) {\n        if (candidate.request.url !== url || candidate.request.method !== method)\n          continue;\n        if (method === 'POST' && postData && candidate.request.postData) {\n          const buffer = await this._loadContent(candidate.request.postData);\n          if (!buffer.equals(postData)) {\n            const boundary = multipartBoundary(headers);\n            if (!boundary)\n              continue;\n            const candidataBoundary = multipartBoundary(candidate.request.headers);\n            if (!candidataBoundary)\n              continue;\n            // Try to match multipart/form-data ignoring boundary as it changes between requests.\n            if (postData.toString().replaceAll(boundary, '') !== buffer.toString().replaceAll(candidataBoundary, ''))\n              continue;\n          }\n        }\n        entries.push(candidate);\n      }\n\n      if (!entries.length)\n        return;\n\n      let entry = entries[0];\n\n      // Disambiguate using headers - then one with most matching headers wins.\n      if (entries.length > 1) {\n        const list: { candidate: har.Entry, matchingHeaders: number }[] = [];\n        for (const candidate of entries) {\n          const matchingHeaders = countMatchingHeaders(candidate.request.headers, headers);\n          list.push({ candidate, matchingHeaders });\n        }\n        list.sort((a, b) => b.matchingHeaders - a.matchingHeaders);\n        entry = list[0].candidate;\n      }\n\n      if (visited.has(entry))\n        throw new Error(`Found redirect cycle for ${url}`);\n\n      visited.add(entry);\n\n      // Follow redirects.\n      const locationHeader = entry.response.headers.find(h => h.name.toLowerCase() === 'location');\n      if (redirectStatus.includes(entry.response.status) && locationHeader) {\n        const locationURL = new URL(locationHeader.value, url);\n        url = locationURL.toString();\n        if ((entry.response.status === 301 || entry.response.status === 302) && method === 'POST' ||\n          entry.response.status === 303 && !['GET', 'HEAD'].includes(method)) {\n          // HTTP-redirect fetch step 13 (https://fetch.spec.whatwg.org/#http-redirect-fetch)\n          method = 'GET';\n        }\n        continue;\n      }\n\n      return entry;\n    }\n  }\n\n  dispose() {\n    this._zipFile?.close();\n  }\n}\n\nfunction countMatchingHeaders(harHeaders: har.Header[], headers: HeadersArray): number {\n  const set = new Set(headers.map(h => h.name.toLowerCase() + ':' + h.value));\n  let matches = 0;\n  for (const h of harHeaders) {\n    if (set.has(h.name.toLowerCase() + ':' + h.value))\n      ++matches;\n  }\n  return matches;\n}\n\nfunction multipartBoundary(headers: HeadersArray) {\n  const contentType = headers.find(h => h.name.toLowerCase() === 'content-type');\n  if (!contentType?.value.includes('multipart/form-data'))\n    return undefined;\n  const boundary = contentType.value.match(/boundary=(\\S+)/);\n  if (boundary)\n    return boundary[1];\n  return undefined;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ClientSideCallMetadata, StackFrame } from '@protocol/channels';\n\nexport type SerializedStackFrame = [number, number, number, string];\nexport type SerializedStack = [number, SerializedStackFrame[]];\n\nexport type SerializedClientSideCallMetadata = {\n  files: string[];\n  stacks: SerializedStack[];\n};\n\nexport function parseClientSideCallMetadata(data: SerializedClientSideCallMetadata): Map<string, StackFrame[]> {\n  const result = new Map<string, StackFrame[]>();\n  const { files, stacks } = data;\n  for (const s of stacks) {\n    const [id, ff] = s;\n    result.set(`call@${id}`, ff.map(f => ({ file: files[f[0]], line: f[1], column: f[2], function: f[3] })));\n  }\n  return result;\n}\n\nexport function serializeClientSideCallMetadata(metadatas: ClientSideCallMetadata[]): SerializedClientSideCallMetadata {\n  const fileNames = new Map<string, number>();\n  const stacks: SerializedStack[] = [];\n  for (const m of metadatas) {\n    if (!m.stack || !m.stack.length)\n      continue;\n    const stack: SerializedStackFrame[] = [];\n    for (const frame of m.stack) {\n      let ordinal = fileNames.get(frame.file);\n      if (typeof ordinal !== 'number') {\n        ordinal = fileNames.size;\n        fileNames.set(frame.file, ordinal);\n      }\n      const stackFrame: SerializedStackFrame = [ordinal, frame.line || 0, frame.column || 0, frame.function || ''];\n      stack.push(stackFrame);\n    }\n    stacks.push([m.id, stack]);\n  }\n  return { files: [...fileNames.keys()], stacks };\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { calculateSha1 } from './utils/crypto';\nimport { HarBackend } from './harBackend';\nimport { ManualPromise } from '../utils/isomorphic/manualPromise';\nimport { ZipFile } from './utils/zipFile';\nimport { yauzl, yazl } from '../zipBundle';\nimport { serializeClientSideCallMetadata } from '../utils/isomorphic/traceUtils';\nimport { assert } from '../utils/isomorphic/assert';\nimport { removeFolders } from './utils/fileUtils';\n\nimport type * as channels from '@protocol/channels';\nimport type * as har from '@trace/har';\nimport type EventEmitter from 'events';\n\n\nexport type StackSession = {\n  file: string;\n  writer: Promise<void>;\n  tmpDir: string | undefined;\n  callStacks: channels.ClientSideCallMetadata[];\n};\n\nexport async function zip(stackSessions: Map<string, StackSession>, params: channels.LocalUtilsZipParams): Promise<void> {\n  const promise = new ManualPromise<void>();\n  const zipFile = new yazl.ZipFile();\n  (zipFile as any as EventEmitter).on('error', error => promise.reject(error));\n\n  const addFile = (file: string, name: string) => {\n    try {\n      if (fs.statSync(file).isFile())\n        zipFile.addFile(file, name);\n    } catch (e) {\n    }\n  };\n\n  for (const entry of params.entries)\n    addFile(entry.value, entry.name);\n\n  // Add stacks and the sources.\n  const stackSession = params.stacksId ? stackSessions.get(params.stacksId) : undefined;\n  if (stackSession?.callStacks.length) {\n    await stackSession.writer;\n    if (process.env.PW_LIVE_TRACE_STACKS) {\n      zipFile.addFile(stackSession.file, 'trace.stacks');\n    } else {\n      const buffer = Buffer.from(JSON.stringify(serializeClientSideCallMetadata(stackSession.callStacks)));\n      zipFile.addBuffer(buffer, 'trace.stacks');\n    }\n  }\n\n  // Collect sources from stacks.\n  if (params.includeSources) {\n    const sourceFiles = new Set<string>();\n    for (const { stack } of stackSession?.callStacks || []) {\n      if (!stack)\n        continue;\n      for (const { file } of stack)\n        sourceFiles.add(file);\n    }\n    for (const sourceFile of sourceFiles)\n      addFile(sourceFile, 'resources/src@' + await calculateSha1(sourceFile) + '.txt');\n  }\n\n  if (params.mode === 'write') {\n    // New file, just compress the entries.\n    await fs.promises.mkdir(path.dirname(params.zipFile), { recursive: true });\n    zipFile.end(undefined, () => {\n      zipFile.outputStream.pipe(fs.createWriteStream(params.zipFile))\n          .on('close', () => promise.resolve())\n          .on('error', error => promise.reject(error));\n    });\n    await promise;\n    await deleteStackSession(stackSessions, params.stacksId);\n    return;\n  }\n\n  // File already exists. Repack and add new entries.\n  const tempFile = params.zipFile + '.tmp';\n  await fs.promises.rename(params.zipFile, tempFile);\n\n  yauzl.open(tempFile, (err, inZipFile) => {\n    if (err) {\n      promise.reject(err);\n      return;\n    }\n    assert(inZipFile);\n    let pendingEntries = inZipFile.entryCount;\n    inZipFile.on('entry', entry => {\n      inZipFile.openReadStream(entry, (err, readStream) => {\n        if (err) {\n          promise.reject(err);\n          return;\n        }\n        zipFile.addReadStream(readStream!, entry.fileName);\n        if (--pendingEntries === 0) {\n          zipFile.end(undefined, () => {\n            zipFile.outputStream.pipe(fs.createWriteStream(params.zipFile)).on('close', () => {\n              fs.promises.unlink(tempFile).then(() => {\n                promise.resolve();\n              }).catch(error => promise.reject(error));\n            });\n          });\n        }\n      });\n    });\n  });\n  await promise;\n  await deleteStackSession(stackSessions, params.stacksId);\n}\n\nasync function deleteStackSession(stackSessions: Map<string, StackSession>, stacksId?: string) {\n  const session = stacksId ? stackSessions.get(stacksId) : undefined;\n  if (!session)\n    return;\n  await session.writer;\n  if (session.tmpDir)\n    await removeFolders([session.tmpDir]);\n  stackSessions.delete(stacksId!);\n}\n\nexport async function harOpen(harBackends: Map<string, HarBackend>, params: channels.LocalUtilsHarOpenParams): Promise<channels.LocalUtilsHarOpenResult> {\n  let harBackend: HarBackend;\n  if (params.file.endsWith('.zip')) {\n    const zipFile = new ZipFile(params.file);\n    const entryNames = await zipFile.entries();\n    const harEntryName = entryNames.find(e => e.endsWith('.har'));\n    if (!harEntryName)\n      return { error: 'Specified archive does not have a .har file' };\n    const har = await zipFile.read(harEntryName);\n    const harFile = JSON.parse(har.toString()) as har.HARFile;\n    harBackend = new HarBackend(harFile, null, zipFile);\n  } else {\n    const harFile = JSON.parse(await fs.promises.readFile(params.file, 'utf-8')) as har.HARFile;\n    harBackend = new HarBackend(harFile, path.dirname(params.file), null);\n  }\n  harBackends.set(harBackend.id, harBackend);\n  return { harId: harBackend.id };\n}\n\nexport async function harLookup(harBackends: Map<string, HarBackend>, params: channels.LocalUtilsHarLookupParams): Promise<channels.LocalUtilsHarLookupResult> {\n  const harBackend = harBackends.get(params.harId);\n  if (!harBackend)\n    return { action: 'error', message: `Internal error: har was not opened` };\n  return await harBackend.lookup(params.url, params.method, params.headers, params.postData, params.isNavigationRequest);\n}\n\nexport async function harClose(harBackends: Map<string, HarBackend>, params: channels.LocalUtilsHarCloseParams): Promise<void> {\n  const harBackend = harBackends.get(params.harId);\n  if (harBackend) {\n    harBackends.delete(harBackend.id);\n    harBackend.dispose();\n  }\n}\n\nexport async function harUnzip(params: channels.LocalUtilsHarUnzipParams): Promise<void> {\n  const dir = path.dirname(params.zipFile);\n  const zipFile = new ZipFile(params.zipFile);\n  for (const entry of await zipFile.entries()) {\n    const buffer = await zipFile.read(entry);\n    if (entry === 'har.har')\n      await fs.promises.writeFile(params.harFile, buffer);\n    else\n      await fs.promises.writeFile(path.join(dir, entry), buffer);\n  }\n  zipFile.close();\n  await fs.promises.unlink(params.zipFile);\n}\n\nexport async function tracingStarted(stackSessions: Map<string, StackSession>, params: channels.LocalUtilsTracingStartedParams): Promise<channels.LocalUtilsTracingStartedResult> {\n  let tmpDir = undefined;\n  if (!params.tracesDir)\n    tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'playwright-tracing-'));\n  const traceStacksFile = path.join(params.tracesDir || tmpDir!, params.traceName + '.stacks');\n  stackSessions.set(traceStacksFile, { callStacks: [], file: traceStacksFile, writer: Promise.resolve(), tmpDir });\n  return { stacksId: traceStacksFile };\n}\n\nexport async function traceDiscarded(stackSessions: Map<string, StackSession>, params: channels.LocalUtilsTraceDiscardedParams): Promise<void> {\n  await deleteStackSession(stackSessions, params.stacksId);\n}\n\nexport async function addStackToTracingNoReply(stackSessions: Map<string, StackSession>, params: channels.LocalUtilsAddStackToTracingNoReplyParams): Promise<void> {\n  for (const session of stackSessions.values()) {\n    session.callStacks.push(params.callData);\n    if (process.env.PW_LIVE_TRACE_STACKS) {\n      session.writer = session.writer.then(() => {\n        const buffer = Buffer.from(JSON.stringify(serializeClientSideCallMetadata(session.callStacks)));\n        return fs.promises.writeFile(session.file, buffer);\n      });\n    }\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Dispatcher } from './dispatcher';\nimport { createGuid } from '../utils/crypto';\n\nimport type { LocalUtilsDispatcher } from './localUtilsDispatcher';\nimport type * as channels from '@protocol/channels';\n\nexport class JsonPipeDispatcher extends Dispatcher<{ guid: string }, channels.JsonPipeChannel, LocalUtilsDispatcher> implements channels.JsonPipeChannel {\n  _type_JsonPipe = true;\n  constructor(scope: LocalUtilsDispatcher) {\n    super(scope, { guid: 'jsonPipe@' + createGuid() }, 'JsonPipe', {});\n  }\n\n  async send(params: channels.JsonPipeSendParams): Promise<channels.JsonPipeSendResult> {\n    this.emit('message', params.message);\n  }\n\n  async close(): Promise<void> {\n    this.emit('close');\n    if (!this._disposed) {\n      this._dispatchEvent('closed', {});\n      this._dispose();\n    }\n  }\n\n  dispatch(message: Object) {\n    if (!this._disposed)\n      this._dispatchEvent('message', { message });\n  }\n\n  wasClosed(reason?: string): void {\n    if (!this._disposed) {\n      this._dispatchEvent('closed', { reason });\n      this._dispose();\n    }\n  }\n\n  dispose() {\n    this._dispose();\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport EventEmitter from 'events';\n\nimport * as socks from './utils/socksProxy';\nimport { ValidationError, findValidator } from '../protocol/validator';\nimport { isUnderTest } from './utils/debug';\n\nimport type { WebSocketTransport } from './transport';\nimport type { ValidatorContext } from '../protocol/validator';\nimport type * as channels from '@protocol/channels';\n\nexport class SocksInterceptor {\n  private _handler: socks.SocksProxyHandler;\n  private _channel: channels.SocksSupportChannel & EventEmitter;\n  private _socksSupportObjectGuid?: string;\n  private _ids = new Set<number>();\n\n  constructor(transport: WebSocketTransport, pattern: string | undefined, redirectPortForTest: number | undefined) {\n    this._handler = new socks.SocksProxyHandler(pattern,  redirectPortForTest);\n\n    let lastId = -1;\n    this._channel = new Proxy(new EventEmitter(), {\n      get: (obj: any, prop: string | symbol) => {\n        if ((prop in obj) || obj[prop] !== undefined || typeof prop !== 'string')\n          return obj[prop];\n        return (params: any) => {\n          try {\n            const id = --lastId;\n            this._ids.add(id);\n            const validator = findValidator('SocksSupport', prop, 'Params');\n            params = validator(params, '', { tChannelImpl: tChannelForSocks, binary: 'toBase64', isUnderTest });\n            transport.send({ id, guid: this._socksSupportObjectGuid, method: prop, params, metadata: { stack: [], apiName: '', internal: true } } as any);\n          } catch (e) {\n          }\n        };\n      },\n    }) as channels.SocksSupportChannel & EventEmitter;\n    this._handler.on(socks.SocksProxyHandler.Events.SocksConnected, (payload: socks.SocksSocketConnectedPayload) => this._channel.socksConnected(payload));\n    this._handler.on(socks.SocksProxyHandler.Events.SocksData, (payload: socks.SocksSocketDataPayload) => this._channel.socksData(payload));\n    this._handler.on(socks.SocksProxyHandler.Events.SocksError, (payload: socks.SocksSocketErrorPayload) => this._channel.socksError(payload));\n    this._handler.on(socks.SocksProxyHandler.Events.SocksFailed, (payload: socks.SocksSocketFailedPayload) => this._channel.socksFailed(payload));\n    this._handler.on(socks.SocksProxyHandler.Events.SocksEnd, (payload: socks.SocksSocketEndPayload) => this._channel.socksEnd(payload));\n    this._channel.on('socksRequested', payload => this._handler.socketRequested(payload));\n    this._channel.on('socksClosed', payload => this._handler.socketClosed(payload));\n    this._channel.on('socksData', payload => this._handler.sendSocketData(payload));\n  }\n\n  cleanup() {\n    this._handler.cleanup();\n  }\n\n  interceptMessage(message: any): boolean {\n    if (this._ids.has(message.id)) {\n      this._ids.delete(message.id);\n      return true;\n    }\n    if (message.method === '__create__' && message.params.type === 'SocksSupport') {\n      this._socksSupportObjectGuid = message.params.guid;\n      return false;\n    }\n    if (this._socksSupportObjectGuid && message.guid === this._socksSupportObjectGuid) {\n      const validator = findValidator('SocksSupport', message.method, 'Event');\n      const params = validator(message.params, '', { tChannelImpl: tChannelForSocks, binary: 'fromBase64', isUnderTest });\n      this._channel.emit(message.method, params);\n      return true;\n    }\n    return false;\n  }\n}\n\nfunction tChannelForSocks(names: '*' | string[], arg: any, path: string, context: ValidatorContext) {\n  throw new ValidationError(`${path}: channels are not expected in SocksSupport`);\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Dispatcher } from './dispatcher';\nimport { SdkObject } from '../../server/instrumentation';\nimport * as localUtils from '../localUtils';\nimport { getUserAgent } from '../utils/userAgent';\nimport { deviceDescriptors as descriptors }  from '../deviceDescriptors';\nimport { JsonPipeDispatcher } from '../dispatchers/jsonPipeDispatcher';\nimport { Progress, ProgressController } from '../progress';\nimport { SocksInterceptor } from '../socksInterceptor';\nimport { WebSocketTransport } from '../transport';\nimport { fetchData } from '../utils/network';\nimport { resolveGlobToRegexPattern } from '../../utils/isomorphic/urlMatch';\n\nimport type { HarBackend } from '../harBackend';\nimport type { CallMetadata } from '../instrumentation';\nimport type { Playwright } from '../playwright';\nimport type { RootDispatcher } from './dispatcher';\nimport type * as channels from '@protocol/channels';\nimport type * as http from 'http';\nimport type { HTTPRequestParams } from '../utils/network';\n\nexport class LocalUtilsDispatcher extends Dispatcher<{ guid: string }, channels.LocalUtilsChannel, RootDispatcher> implements channels.LocalUtilsChannel {\n  _type_LocalUtils: boolean;\n  private _harBackends = new Map<string, HarBackend>();\n  private _stackSessions = new Map<string, localUtils.StackSession>();\n\n  constructor(scope: RootDispatcher, playwright: Playwright) {\n    const localUtils = new SdkObject(playwright, 'localUtils', 'localUtils');\n    const deviceDescriptors = Object.entries(descriptors)\n        .map(([name, descriptor]) => ({ name, descriptor }));\n    super(scope, localUtils, 'LocalUtils', {\n      deviceDescriptors,\n    });\n    this._type_LocalUtils = true;\n  }\n\n  async zip(params: channels.LocalUtilsZipParams): Promise<void> {\n    return await localUtils.zip(this._stackSessions, params);\n  }\n\n  async harOpen(params: channels.LocalUtilsHarOpenParams, metadata: CallMetadata): Promise<channels.LocalUtilsHarOpenResult> {\n    return await localUtils.harOpen(this._harBackends, params);\n  }\n\n  async harLookup(params: channels.LocalUtilsHarLookupParams, metadata: CallMetadata): Promise<channels.LocalUtilsHarLookupResult> {\n    return await localUtils.harLookup(this._harBackends, params);\n  }\n\n  async harClose(params: channels.LocalUtilsHarCloseParams, metadata: CallMetadata): Promise<void> {\n    return await localUtils.harClose(this._harBackends, params);\n  }\n\n  async harUnzip(params: channels.LocalUtilsHarUnzipParams, metadata: CallMetadata): Promise<void> {\n    return await localUtils.harUnzip(params);\n  }\n\n  async tracingStarted(params: channels.LocalUtilsTracingStartedParams, metadata?: CallMetadata | undefined): Promise<channels.LocalUtilsTracingStartedResult> {\n    return await localUtils.tracingStarted(this._stackSessions, params);\n  }\n\n  async traceDiscarded(params: channels.LocalUtilsTraceDiscardedParams, metadata?: CallMetadata | undefined): Promise<void> {\n    return await localUtils.traceDiscarded(this._stackSessions, params);\n  }\n\n  async addStackToTracingNoReply(params: channels.LocalUtilsAddStackToTracingNoReplyParams, metadata?: CallMetadata | undefined): Promise<void> {\n    return await localUtils.addStackToTracingNoReply(this._stackSessions, params);\n  }\n\n  async connect(params: channels.LocalUtilsConnectParams, metadata: CallMetadata): Promise<channels.LocalUtilsConnectResult> {\n    const controller = new ProgressController(metadata, this._object as SdkObject);\n    controller.setLogName('browser');\n    return await controller.run(async progress => {\n      const wsHeaders = {\n        'User-Agent': getUserAgent(),\n        'x-playwright-proxy': params.exposeNetwork ?? '',\n        ...params.headers,\n      };\n      const wsEndpoint = await urlToWSEndpoint(progress, params.wsEndpoint);\n\n      const transport = await WebSocketTransport.connect(progress, wsEndpoint, { headers: wsHeaders, followRedirects: true, debugLogHeader: 'x-playwright-debug-log' });\n      const socksInterceptor = new SocksInterceptor(transport, params.exposeNetwork, params.socksProxyRedirectPortForTest);\n      const pipe = new JsonPipeDispatcher(this);\n      transport.onmessage = json => {\n        if (socksInterceptor.interceptMessage(json))\n          return;\n        const cb = () => {\n          try {\n            pipe.dispatch(json);\n          } catch (e) {\n            transport.close();\n          }\n        };\n        if (params.slowMo)\n          setTimeout(cb, params.slowMo);\n        else\n          cb();\n      };\n      pipe.on('message', message => {\n        transport.send(message);\n      });\n      transport.onclose = (reason?: string) => {\n        socksInterceptor?.cleanup();\n        pipe.wasClosed(reason);\n      };\n      pipe.on('close', () => transport.close());\n      return { pipe, headers: transport.headers };\n    }, params.timeout);\n  }\n\n  async globToRegex(params: channels.LocalUtilsGlobToRegexParams, metadata?: CallMetadata): Promise<channels.LocalUtilsGlobToRegexResult> {\n    const regex = resolveGlobToRegexPattern(params.baseURL, params.glob, params.webSocketUrl);\n    return { regex };\n  }\n}\n\nasync function urlToWSEndpoint(progress: Progress, endpointURL: string): Promise<string> {\n  if (endpointURL.startsWith('ws'))\n    return endpointURL;\n\n  progress.log(`<ws preparing> retrieving websocket url from ${endpointURL}`);\n  const fetchUrl = new URL(endpointURL);\n  if (!fetchUrl.pathname.endsWith('/'))\n    fetchUrl.pathname += '/';\n  fetchUrl.pathname += 'json';\n  const json = await fetchData({\n    url: fetchUrl.toString(),\n    method: 'GET',\n    timeout: progress.timeUntilDeadline(),\n    headers: { 'User-Agent': getUserAgent() },\n  }, async (params: HTTPRequestParams, response: http.IncomingMessage) => {\n    return new Error(`Unexpected status ${response.statusCode} when connecting to ${fetchUrl.toString()}.\\n` +\n        `This does not look like a Playwright server, try connecting via ws://.`);\n  });\n  progress.throwIfAborted();\n\n  const wsUrl = new URL(endpointURL);\n  let wsEndpointPath = JSON.parse(json).wsEndpointPath;\n  if (wsEndpointPath.startsWith('/'))\n    wsEndpointPath = wsEndpointPath.substring(1);\n  if (!wsUrl.pathname.endsWith('/'))\n    wsUrl.pathname += '/';\n  wsUrl.pathname += wsEndpointPath;\n  wsUrl.protocol = wsUrl.protocol === 'https:' ? 'wss:' : 'ws:';\n  return wsUrl.toString();\n}\n","/**\n * Copyright Microsoft Corporation. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\nimport net from 'net';\n\nimport { assert } from '../../utils/isomorphic/assert';\nimport { createGuid } from '../utils/crypto';\nimport { debug } from '../../utilsBundle';\n\nimport type { Backend, DeviceBackend, SocketBackend } from './android';\nimport type * as channels from '@protocol/channels';\n\n\nexport class AdbBackend implements Backend {\n  async devices(options: channels.AndroidDevicesOptions = {}): Promise<DeviceBackend[]> {\n    const result = await runCommand('host:devices', options.host, options.port);\n    const lines = result.toString().trim().split('\\n');\n    return lines.map(line => {\n      const [serial, status] = line.trim().split('\\t');\n      return new AdbDevice(serial, status, options.host, options.port);\n    });\n  }\n}\n\nclass AdbDevice implements DeviceBackend {\n  serial: string;\n  status: string;\n  host: string | undefined;\n  port: number | undefined;\n  private _closed = false;\n\n  constructor(serial: string, status: string, host?: string, port?: number) {\n    this.serial = serial;\n    this.status = status;\n    this.host = host;\n    this.port = port;\n  }\n\n  async init() {\n  }\n\n  async close() {\n    this._closed = true;\n  }\n\n  runCommand(command: string): Promise<Buffer> {\n    if (this._closed)\n      throw new Error('Device is closed');\n    return runCommand(command, this.host, this.port, this.serial);\n  }\n\n  async open(command: string): Promise<SocketBackend> {\n    if (this._closed)\n      throw new Error('Device is closed');\n    const result = await open(command, this.host, this.port, this.serial);\n    result.becomeSocket();\n    return result;\n  }\n}\n\nasync function runCommand(command: string, host: string = '127.0.0.1', port: number = 5037, serial?: string): Promise<Buffer> {\n  debug('pw:adb:runCommand')(command, serial);\n  const socket = new BufferedSocketWrapper(command, net.createConnection({ host, port }));\n  try {\n    if (serial) {\n      await socket.write(encodeMessage(`host:transport:${serial}`));\n      const status = await socket.read(4);\n      assert(status.toString() === 'OKAY', status.toString());\n    }\n    await socket.write(encodeMessage(command));\n    const status = await socket.read(4);\n    assert(status.toString() === 'OKAY', status.toString());\n    let commandOutput: Buffer;\n    if (!command.startsWith('shell:')) {\n      const remainingLength = parseInt((await socket.read(4)).toString(), 16);\n      commandOutput = await socket.read(remainingLength);\n    } else {\n      commandOutput = await socket.readAll();\n    }\n    return commandOutput;\n  } finally {\n    socket.close();\n  }\n}\n\nasync function open(command: string, host: string = '127.0.0.1', port: number = 5037, serial?: string): Promise<BufferedSocketWrapper> {\n  const socket = new BufferedSocketWrapper(command, net.createConnection({ host, port }));\n  if (serial) {\n    await socket.write(encodeMessage(`host:transport:${serial}`));\n    const status = await socket.read(4);\n    assert(status.toString() === 'OKAY', status.toString());\n  }\n  await socket.write(encodeMessage(command));\n  const status = await socket.read(4);\n  assert(status.toString() === 'OKAY', status.toString());\n  return socket;\n}\n\nfunction encodeMessage(message: string): Buffer {\n  let lenHex = (message.length).toString(16);\n  lenHex = '0'.repeat(4 - lenHex.length) + lenHex;\n  return Buffer.from(lenHex + message);\n}\n\nclass BufferedSocketWrapper extends EventEmitter implements SocketBackend {\n  readonly guid = createGuid();\n  private _socket: net.Socket;\n  private _buffer = Buffer.from([]);\n  private _isSocket = false;\n  private _notifyReader: (() => void) | undefined;\n  private _connectPromise: Promise<void>;\n  private _isClosed = false;\n  private _command: string;\n\n  constructor(command: string, socket: net.Socket) {\n    super();\n    this._command = command;\n    this._socket = socket;\n    this._connectPromise = new Promise(f => this._socket.on('connect', f));\n    this._socket.on('data', data => {\n      debug('pw:adb:data')(data.toString());\n      if (this._isSocket) {\n        this.emit('data', data);\n        return;\n      }\n      this._buffer = Buffer.concat([this._buffer, data]);\n      if (this._notifyReader)\n        this._notifyReader();\n    });\n    this._socket.on('close', () => {\n      this._isClosed = true;\n      if (this._notifyReader)\n        this._notifyReader();\n      this.close();\n      this.emit('close');\n    });\n    this._socket.on('error', error => this.emit('error', error));\n  }\n\n  async write(data: Buffer) {\n    debug('pw:adb:send')(data.toString().substring(0, 100) + '...');\n    await this._connectPromise;\n    await new Promise(f => this._socket.write(data, f));\n  }\n\n  close() {\n    if (this._isClosed)\n      return;\n    debug('pw:adb')('Close ' + this._command);\n    this._socket.destroy();\n  }\n\n  async read(length: number): Promise<Buffer> {\n    await this._connectPromise;\n    assert(!this._isSocket, 'Can not read by length in socket mode');\n    while (this._buffer.length < length)\n      await new Promise<void>(f => this._notifyReader = f);\n    const result = this._buffer.slice(0, length);\n    this._buffer = this._buffer.slice(length);\n    debug('pw:adb:recv')(result.toString().substring(0, 100) + '...');\n    return result;\n  }\n\n  async readAll(): Promise<Buffer> {\n    while (!this._isClosed)\n      await new Promise<void>(f => this._notifyReader = f);\n    return this._buffer;\n  }\n\n  becomeSocket() {\n    assert(!this._buffer.length);\n    this._isSocket = true;\n  }\n}\n","/**\n * Copyright 2018 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeWaitForNextTask } from '../utils';\nimport { debugLogger } from './utils/debugLogger';\n\nimport type { ConnectionTransport, ProtocolRequest, ProtocolResponse } from './transport';\n\nexport class PipeTransport implements ConnectionTransport {\n  private _pipeRead: NodeJS.ReadableStream;\n  private _pipeWrite: NodeJS.WritableStream;\n  private _pendingBuffers: Buffer[] = [];\n  private _waitForNextTask = makeWaitForNextTask();\n  private _closed = false;\n  private _onclose?: (reason?: string) => void;\n\n  onmessage?: (message: ProtocolResponse) => void;\n\n  constructor(pipeWrite: NodeJS.WritableStream, pipeRead: NodeJS.ReadableStream) {\n    this._pipeRead = pipeRead;\n    this._pipeWrite = pipeWrite;\n    pipeRead.on('data', buffer => this._dispatch(buffer));\n    pipeRead.on('close', () => {\n      this._closed = true;\n      if (this._onclose)\n        this._onclose.call(null);\n    });\n    pipeRead.on('error', e => debugLogger.log('error', e));\n    pipeWrite.on('error', e => debugLogger.log('error', e));\n    this.onmessage = undefined;\n  }\n\n  get onclose() {\n    return this._onclose;\n  }\n\n  set onclose(onclose: undefined | ((reason?: string) => void)) {\n    this._onclose = onclose;\n    if (onclose && !this._pipeRead.readable)\n      onclose();\n  }\n\n  send(message: ProtocolRequest) {\n    if (this._closed)\n      throw new Error('Pipe has been closed');\n    this._pipeWrite.write(JSON.stringify(message));\n    this._pipeWrite.write('\\0');\n  }\n\n  close() {\n    throw new Error('unimplemented');\n  }\n\n  _dispatch(buffer: Buffer) {\n    let end = buffer.indexOf('\\0');\n    if (end === -1) {\n      this._pendingBuffers.push(buffer);\n      return;\n    }\n    this._pendingBuffers.push(buffer.slice(0, end));\n    const message = Buffer.concat(this._pendingBuffers).toString();\n    this._waitForNextTask(() => {\n      if (this.onmessage)\n        this.onmessage.call(null, JSON.parse(message));\n    });\n\n    let start = end + 1;\n    end = buffer.indexOf('\\0', start);\n    while (end !== -1) {\n      const message = buffer.toString(undefined, start, end);\n      this._waitForNextTask(() => {\n        if (this.onmessage)\n          this.onmessage.call(null, JSON.parse(message));\n      });\n      start = end + 1;\n      end = buffer.indexOf('\\0', start);\n    }\n    this._pendingBuffers = [buffer.slice(start)];\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { normalizeProxySettings, validateBrowserContextOptions } from './browserContext';\nimport { debugMode } from './utils/debug';\nimport { assert } from '../utils/isomorphic/assert';\nimport { ManualPromise } from '../utils/isomorphic/manualPromise';\nimport { DEFAULT_PLAYWRIGHT_TIMEOUT } from '../utils/isomorphic/time';\nimport { existsAsync } from './utils/fileUtils';\nimport { helper } from './helper';\nimport { SdkObject } from './instrumentation';\nimport { PipeTransport } from './pipeTransport';\nimport { envArrayToObject, launchProcess } from './utils/processLauncher';\nimport { ProgressController } from './progress';\nimport {  isProtocolError } from './protocolError';\nimport { registry } from './registry';\nimport { ClientCertificatesProxy } from './socksClientCertificatesInterceptor';\nimport { WebSocketTransport } from './transport';\nimport { RecentLogsCollector } from './utils/debugLogger';\n\nimport type { Browser, BrowserOptions, BrowserProcess } from './browser';\nimport type { BrowserContext } from './browserContext';\nimport type { CallMetadata } from './instrumentation';\nimport type { Env } from './utils/processLauncher';\nimport type { Progress } from './progress';\nimport type { ProtocolError } from './protocolError';\nimport type { BrowserName } from './registry';\nimport type { ConnectionTransport } from './transport';\nimport type * as types from './types';\nimport type * as channels from '@protocol/channels';\n\nexport const kNoXServerRunningError = 'Looks like you launched a headed browser without having a XServer running.\\n' +\n  'Set either \\'headless: true\\' or use \\'xvfb-run <your-playwright-app>\\' before running Playwright.\\n\\n<3 Playwright Team';\n\n\nexport abstract class BrowserReadyState {\n  protected readonly _wsEndpoint = new ManualPromise<string|undefined>();\n\n  onBrowserExit(): void {\n    // Unblock launch when browser prematurely exits.\n    this._wsEndpoint.resolve(undefined);\n  }\n  async waitUntilReady(): Promise<{ wsEndpoint?: string }> {\n    const wsEndpoint = await this._wsEndpoint;\n    return { wsEndpoint };\n  }\n\n  abstract onBrowserOutput(message: string): void;\n}\n\nexport abstract class BrowserType extends SdkObject {\n  private _name: BrowserName;\n\n  constructor(parent: SdkObject, browserName: BrowserName) {\n    super(parent, 'browser-type');\n    this.attribution.browserType = this;\n    this._name = browserName;\n  }\n\n  executablePath(): string {\n    return registry.findExecutable(this._name).executablePath(this.attribution.playwright.options.sdkLanguage) || '';\n  }\n\n  name(): string {\n    return this._name;\n  }\n\n  async launch(metadata: CallMetadata, options: types.LaunchOptions, protocolLogger?: types.ProtocolLogger): Promise<Browser> {\n    options = this._validateLaunchOptions(options);\n    const controller = new ProgressController(metadata, this);\n    controller.setLogName('browser');\n    const browser = await controller.run(progress => {\n      const seleniumHubUrl = (options as any).__testHookSeleniumRemoteURL || process.env.SELENIUM_REMOTE_URL;\n      if (seleniumHubUrl)\n        return this._launchWithSeleniumHub(progress, seleniumHubUrl, options);\n      return this._innerLaunchWithRetries(progress, options, undefined, helper.debugProtocolLogger(protocolLogger)).catch(e => { throw this._rewriteStartupLog(e); });\n    }, options.timeout);\n    return browser;\n  }\n\n  async launchPersistentContext(metadata: CallMetadata, userDataDir: string, options: channels.BrowserTypeLaunchPersistentContextOptions & { timeout: number, cdpPort?: number, internalIgnoreHTTPSErrors?: boolean }): Promise<BrowserContext> {\n    const launchOptions = this._validateLaunchOptions(options);\n    const controller = new ProgressController(metadata, this);\n    controller.setLogName('browser');\n    const browser = await controller.run(async progress => {\n      // Note: Any initial TLS requests will fail since we rely on the Page/Frames initialize which sets ignoreHTTPSErrors.\n      let clientCertificatesProxy: ClientCertificatesProxy | undefined;\n      if (options.clientCertificates?.length) {\n        clientCertificatesProxy = new ClientCertificatesProxy(options);\n        launchOptions.proxyOverride = await clientCertificatesProxy?.listen();\n        options = { ...options };\n        options.internalIgnoreHTTPSErrors = true;\n      }\n      progress.cleanupWhenAborted(() => clientCertificatesProxy?.close());\n      const browser = await this._innerLaunchWithRetries(progress, launchOptions, options, helper.debugProtocolLogger(), userDataDir).catch(e => { throw this._rewriteStartupLog(e); });\n      browser._defaultContext!._clientCertificatesProxy = clientCertificatesProxy;\n      return browser;\n    }, launchOptions.timeout);\n    return browser._defaultContext!;\n  }\n\n  async _innerLaunchWithRetries(progress: Progress, options: types.LaunchOptions, persistent: types.BrowserContextOptions | undefined, protocolLogger: types.ProtocolLogger, userDataDir?: string): Promise<Browser> {\n    try {\n      return await this._innerLaunch(progress, options, persistent, protocolLogger, userDataDir);\n    } catch (error) {\n      // @see https://github.com/microsoft/playwright/issues/5214\n      const errorMessage = typeof error === 'object' && typeof error.message === 'string' ? error.message : '';\n      if (errorMessage.includes('Inconsistency detected by ld.so')) {\n        progress.log(`<restarting browser due to hitting race condition in glibc>`);\n        return this._innerLaunch(progress, options, persistent, protocolLogger, userDataDir);\n      }\n      throw error;\n    }\n  }\n\n  async _innerLaunch(progress: Progress, options: types.LaunchOptions, persistent: types.BrowserContextOptions | undefined, protocolLogger: types.ProtocolLogger, maybeUserDataDir?: string): Promise<Browser> {\n    options.proxy = options.proxy ? normalizeProxySettings(options.proxy) : undefined;\n    const browserLogsCollector = new RecentLogsCollector();\n    const { browserProcess, userDataDir, artifactsDir, transport } = await this._launchProcess(progress, options, !!persistent, browserLogsCollector, maybeUserDataDir);\n    if ((options as any).__testHookBeforeCreateBrowser)\n      await (options as any).__testHookBeforeCreateBrowser();\n    const browserOptions: BrowserOptions = {\n      name: this._name,\n      isChromium: this._name === 'chromium',\n      channel: options.channel,\n      slowMo: options.slowMo,\n      persistent,\n      headful: !options.headless,\n      artifactsDir,\n      downloadsPath: (options.downloadsPath || artifactsDir)!,\n      tracesDir: (options.tracesDir || artifactsDir)!,\n      browserProcess,\n      customExecutablePath: options.executablePath,\n      proxy: options.proxy,\n      protocolLogger,\n      browserLogsCollector,\n      wsEndpoint: transport instanceof WebSocketTransport ? transport.wsEndpoint : undefined,\n      originalLaunchOptions: options,\n    };\n    if (persistent)\n      validateBrowserContextOptions(persistent, browserOptions);\n    copyTestHooks(options, browserOptions);\n    const browser = await this.connectToTransport(transport, browserOptions, browserLogsCollector);\n    (browser as any)._userDataDirForTest = userDataDir;\n    // We assume no control when using custom arguments, and do not prepare the default context in that case.\n    if (persistent && !options.ignoreAllDefaultArgs)\n      await browser._defaultContext!._loadDefaultContext(progress);\n    return browser;\n  }\n\n  private async _launchProcess(progress: Progress, options: types.LaunchOptions, isPersistent: boolean, browserLogsCollector: RecentLogsCollector, userDataDir?: string): Promise<{ browserProcess: BrowserProcess, artifactsDir: string, userDataDir: string, transport: ConnectionTransport }> {\n    const {\n      ignoreDefaultArgs,\n      ignoreAllDefaultArgs,\n      args = [],\n      executablePath = null,\n      handleSIGINT = true,\n      handleSIGTERM = true,\n      handleSIGHUP = true,\n    } = options;\n\n    const env = options.env ? envArrayToObject(options.env) : process.env;\n\n    await this._createArtifactDirs(options);\n\n    const tempDirectories = [];\n    const artifactsDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'playwright-artifacts-'));\n    tempDirectories.push(artifactsDir);\n\n    if (userDataDir) {\n      assert(path.isAbsolute(userDataDir), 'userDataDir must be an absolute path');\n      // Firefox bails if the profile directory does not exist, Chrome creates it. We ensure consistent behavior here.\n      if (!await existsAsync(userDataDir))\n        await fs.promises.mkdir(userDataDir, { recursive: true, mode: 0o700 });\n    } else {\n      userDataDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), `playwright_${this._name}dev_profile-`));\n      tempDirectories.push(userDataDir);\n    }\n    await this.prepareUserDataDir(options, userDataDir);\n\n    const browserArguments = [];\n    if (ignoreAllDefaultArgs)\n      browserArguments.push(...args);\n    else if (ignoreDefaultArgs)\n      browserArguments.push(...this.defaultArgs(options, isPersistent, userDataDir).filter(arg => ignoreDefaultArgs.indexOf(arg) === -1));\n    else\n      browserArguments.push(...this.defaultArgs(options, isPersistent, userDataDir));\n\n    let executable: string;\n    if (executablePath) {\n      if (!(await existsAsync(executablePath)))\n        throw new Error(`Failed to launch ${this._name} because executable doesn't exist at ${executablePath}`);\n      executable = executablePath;\n    } else {\n      const registryExecutable = registry.findExecutable(this.getExecutableName(options));\n      if (!registryExecutable || registryExecutable.browserName !== this._name)\n        throw new Error(`Unsupported ${this._name} channel \"${options.channel}\"`);\n      executable = registryExecutable.executablePathOrDie(this.attribution.playwright.options.sdkLanguage);\n      await registry.validateHostRequirementsForExecutablesIfNeeded([registryExecutable], this.attribution.playwright.options.sdkLanguage);\n    }\n\n    const readyState = this.readyState(options);\n    // Note: it is important to define these variables before launchProcess, so that we don't get\n    // \"Cannot access 'browserServer' before initialization\" if something went wrong.\n    let transport: ConnectionTransport | undefined = undefined;\n    let browserProcess: BrowserProcess | undefined = undefined;\n    const { launchedProcess, gracefullyClose, kill } = await launchProcess({\n      command: executable,\n      args: browserArguments,\n      env: this.amendEnvironment(env, userDataDir, executable, browserArguments),\n      handleSIGINT,\n      handleSIGTERM,\n      handleSIGHUP,\n      log: (message: string) => {\n        readyState?.onBrowserOutput(message);\n        progress.log(message);\n        browserLogsCollector.log(message);\n      },\n      stdio: 'pipe',\n      tempDirectories,\n      attemptToGracefullyClose: async () => {\n        if ((options as any).__testHookGracefullyClose)\n          await (options as any).__testHookGracefullyClose();\n        // We try to gracefully close to prevent crash reporting and core dumps.\n        // Note that it's fine to reuse the pipe transport, since\n        // our connection ignores kBrowserCloseMessageId.\n        this.attemptToGracefullyCloseBrowser(transport!);\n      },\n      onExit: (exitCode, signal) => {\n        // Unblock launch when browser prematurely exits.\n        readyState?.onBrowserExit();\n        if (browserProcess && browserProcess.onclose)\n          browserProcess.onclose(exitCode, signal);\n      },\n    });\n    async function closeOrKill(timeout: number): Promise<void> {\n      let timer: NodeJS.Timeout;\n      try {\n        await Promise.race([\n          gracefullyClose(),\n          new Promise((resolve, reject) => timer = setTimeout(reject, timeout)),\n        ]);\n      } catch (ignored) {\n        await kill().catch(ignored => {}); // Make sure to await actual process exit.\n      } finally {\n        clearTimeout(timer!);\n      }\n    }\n    browserProcess = {\n      onclose: undefined,\n      process: launchedProcess,\n      close: () => closeOrKill((options as any).__testHookBrowserCloseTimeout || DEFAULT_PLAYWRIGHT_TIMEOUT),\n      kill\n    };\n    progress.cleanupWhenAborted(() => closeOrKill(progress.timeUntilDeadline()));\n    const wsEndpoint = (await readyState?.waitUntilReady())?.wsEndpoint;\n    if (options.cdpPort !== undefined || !this.supportsPipeTransport()) {\n      transport = await WebSocketTransport.connect(progress, wsEndpoint!);\n    } else {\n      const stdio = launchedProcess.stdio as unknown as [NodeJS.ReadableStream, NodeJS.WritableStream, NodeJS.WritableStream, NodeJS.WritableStream, NodeJS.ReadableStream];\n      transport = new PipeTransport(stdio[3], stdio[4]);\n    }\n    return { browserProcess, artifactsDir, userDataDir, transport };\n  }\n\n  async _createArtifactDirs(options: types.LaunchOptions): Promise<void> {\n    if (options.downloadsPath)\n      await fs.promises.mkdir(options.downloadsPath, { recursive: true });\n    if (options.tracesDir)\n      await fs.promises.mkdir(options.tracesDir, { recursive: true });\n  }\n\n  async connectOverCDP(metadata: CallMetadata, endpointURL: string, options: { slowMo?: number, timeout?: number, headers?: types.HeadersArray }): Promise<Browser> {\n    throw new Error('CDP connections are only supported by Chromium');\n  }\n\n  async _launchWithSeleniumHub(progress: Progress, hubUrl: string, options: types.LaunchOptions): Promise<Browser> {\n    throw new Error('Connecting to SELENIUM_REMOTE_URL is only supported by Chromium');\n  }\n\n  private _validateLaunchOptions(options: types.LaunchOptions): types.LaunchOptions {\n    const { devtools = false } = options;\n    let { headless = !devtools, downloadsPath, proxy } = options;\n    if (debugMode())\n      headless = false;\n    if (downloadsPath && !path.isAbsolute(downloadsPath))\n      downloadsPath = path.join(process.cwd(), downloadsPath);\n    if (this.attribution.playwright.options.socksProxyPort)\n      proxy = { server: `socks5://127.0.0.1:${this.attribution.playwright.options.socksProxyPort}` };\n    return { ...options, devtools, headless, downloadsPath, proxy };\n  }\n\n  protected _createUserDataDirArgMisuseError(userDataDirArg: string): Error {\n    switch (this.attribution.playwright.options.sdkLanguage) {\n      case 'java':\n        return new Error(`Pass userDataDir parameter to 'BrowserType.launchPersistentContext(userDataDir, options)' instead of specifying '${userDataDirArg}' argument`);\n      case 'python':\n        return new Error(`Pass user_data_dir parameter to 'browser_type.launch_persistent_context(user_data_dir, **kwargs)' instead of specifying '${userDataDirArg}' argument`);\n      case 'csharp':\n        return new Error(`Pass userDataDir parameter to 'BrowserType.LaunchPersistentContextAsync(userDataDir, options)' instead of specifying '${userDataDirArg}' argument`);\n      default:\n        return new Error(`Pass userDataDir parameter to 'browserType.launchPersistentContext(userDataDir, options)' instead of specifying '${userDataDirArg}' argument`);\n    }\n  }\n\n  _rewriteStartupLog(error: Error): Error {\n    if (!isProtocolError(error))\n      return error;\n    return this.doRewriteStartupLog(error);\n  }\n\n  readyState(options: types.LaunchOptions): BrowserReadyState|undefined {\n    return undefined;\n  }\n\n  async prepareUserDataDir(options: types.LaunchOptions, userDataDir: string): Promise<void> {\n  }\n\n  supportsPipeTransport(): boolean {\n    return true;\n  }\n\n  getExecutableName(options: types.LaunchOptions): string {\n    return options.channel || this._name;\n  }\n\n  abstract defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[];\n  abstract connectToTransport(transport: ConnectionTransport, options: BrowserOptions, browserLogsCollector: RecentLogsCollector): Promise<Browser>;\n  abstract amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env;\n  abstract doRewriteStartupLog(error: ProtocolError): ProtocolError;\n  abstract attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void;\n}\n\nfunction copyTestHooks(from: object, to: object) {\n  for (const [key, value] of Object.entries(from)) {\n    if (key.startsWith('__testHook'))\n      (to as any)[key] = value;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport { debugLogger } from '../utils/debugLogger';\nimport { helper } from '../helper';\nimport { ProtocolError } from '../protocolError';\n\nimport type { RecentLogsCollector } from '../utils/debugLogger';\nimport type { ConnectionTransport, ProtocolRequest, ProtocolResponse } from '../transport';\nimport type { ProtocolLogger } from '../types';\nimport type * as bidiCommands from './third_party/bidiCommands';\nimport type * as bidi from './third_party/bidiProtocol';\n\n// BidiPlaywright uses this special id to issue Browser.close command which we\n// should ignore.\nexport const kBrowserCloseMessageId = 0;\n\nexport class BidiConnection {\n  private readonly _transport: ConnectionTransport;\n  private readonly _onDisconnect: () => void;\n  private readonly _protocolLogger: ProtocolLogger;\n  private readonly _browserLogsCollector: RecentLogsCollector;\n  _browserDisconnectedLogs: string | undefined;\n  private _lastId = 0;\n  private _closed = false;\n  readonly browserSession: BidiSession;\n  readonly _browsingContextToSession = new Map<string, BidiSession>();\n\n  constructor(transport: ConnectionTransport, onDisconnect: () => void, protocolLogger: ProtocolLogger, browserLogsCollector: RecentLogsCollector) {\n    this._transport = transport;\n    this._onDisconnect = onDisconnect;\n    this._protocolLogger = protocolLogger;\n    this._browserLogsCollector = browserLogsCollector;\n    this.browserSession = new BidiSession(this, '', (message: any) => {\n      this.rawSend(message);\n    });\n    this._transport.onmessage = this._dispatchMessage.bind(this);\n    // onclose should be set last, since it can be immediately called.\n    this._transport.onclose = this._onClose.bind(this);\n  }\n\n  nextMessageId(): number {\n    return ++this._lastId;\n  }\n\n  rawSend(message: ProtocolRequest) {\n    this._protocolLogger('send', message);\n    this._transport.send(message);\n  }\n\n  private _dispatchMessage(message: ProtocolResponse) {\n    this._protocolLogger('receive', message);\n    const object = message as bidi.Message;\n    // Bidi messages do not have a common session identifier, so we\n    // route them based on BrowsingContext.\n    if (object.type === 'event') {\n      // Route page events to the right session.\n      let context;\n      if ('context' in object.params)\n        context = object.params.context;\n      else if (object.method === 'log.entryAdded' || object.method === 'script.message')\n        context = object.params.source?.context;\n      if (context) {\n        const session = this._browsingContextToSession.get(context);\n        if (session) {\n          session.dispatchMessage(message);\n          return;\n        }\n      }\n    } else if (message.id) {\n      // Find caller session.\n      for (const session of this._browsingContextToSession.values()) {\n        if (session.hasCallback(message.id)) {\n          session.dispatchMessage(message);\n          return;\n        }\n      }\n    }\n    this.browserSession.dispatchMessage(message);\n  }\n\n  _onClose(reason?: string) {\n    this._closed = true;\n    this._transport.onmessage = undefined;\n    this._transport.onclose = undefined;\n    this._browserDisconnectedLogs = helper.formatBrowserLogs(this._browserLogsCollector.recentLogs(), reason);\n    this.browserSession.dispose();\n    this._onDisconnect();\n  }\n\n  isClosed() {\n    return this._closed;\n  }\n\n  close() {\n    if (!this._closed)\n      this._transport.close();\n  }\n\n  createMainFrameBrowsingContextSession(bowsingContextId: bidi.BrowsingContext.BrowsingContext): BidiSession {\n    const result = new BidiSession(this, bowsingContextId, message => this.rawSend(message));\n    this._browsingContextToSession.set(bowsingContextId, result);\n    return result;\n  }\n}\n\ntype BidiEvents = {\n  [K in bidi.Event['method']]: Extract<bidi.Event, {method: K}>;\n};\n\nexport class BidiSession extends EventEmitter {\n  readonly connection: BidiConnection;\n  readonly sessionId: string;\n\n  private _disposed = false;\n  private readonly _rawSend: (message: any) => void;\n  private readonly _callbacks = new Map<number, { resolve: (o: any) => void, reject: (e: ProtocolError) => void, error: ProtocolError }>();\n  private _crashed: boolean = false;\n  private readonly _browsingContexts = new Set<string>();\n\n  override on: <T extends keyof BidiEvents | symbol>(event: T, listener: (payload: T extends symbol ? any : BidiEvents[T extends keyof BidiEvents ? T : never]['params']) => void) => this;\n  override addListener: <T extends keyof BidiEvents | symbol>(event: T, listener: (payload: T extends symbol ? any : BidiEvents[T extends keyof BidiEvents ? T : never]['params']) => void) => this;\n  override off: <T extends keyof BidiEvents | symbol>(event: T, listener: (payload: T extends symbol ? any : BidiEvents[T extends keyof BidiEvents ? T : never]['params']) => void) => this;\n  override removeListener: <T extends keyof BidiEvents | symbol>(event: T, listener: (payload: T extends symbol ? any : BidiEvents[T extends keyof BidiEvents ? T : never]['params']) => void) => this;\n  override once: <T extends keyof BidiEvents | symbol>(event: T, listener: (payload: T extends symbol ? any : BidiEvents[T extends keyof BidiEvents ? T : never]['params']) => void) => this;\n\n  constructor(connection: BidiConnection, sessionId: string, rawSend: (message: any) => void) {\n    super();\n    this.setMaxListeners(0);\n    this.connection = connection;\n    this.sessionId = sessionId;\n    this._rawSend = rawSend;\n\n    this.on = super.on;\n    this.off = super.removeListener;\n    this.addListener = super.addListener;\n    this.removeListener = super.removeListener;\n    this.once = super.once;\n  }\n\n  addFrameBrowsingContext(context: string) {\n    this._browsingContexts.add(context);\n    this.connection._browsingContextToSession.set(context, this);\n  }\n\n  removeFrameBrowsingContext(context: string) {\n    this._browsingContexts.delete(context);\n    this.connection._browsingContextToSession.delete(context);\n  }\n\n  async send<T extends keyof bidiCommands.Commands>(\n    method: T,\n    params?: bidiCommands.Commands[T]['params']\n  ): Promise<bidiCommands.Commands[T]['returnType']> {\n    if (this._crashed || this._disposed || this.connection._browserDisconnectedLogs)\n      throw new ProtocolError(this._crashed ? 'crashed' : 'closed', undefined, this.connection._browserDisconnectedLogs);\n    const id = this.connection.nextMessageId();\n    const messageObj = { id, method, params };\n    this._rawSend(messageObj);\n    return new Promise<bidiCommands.Commands[T]['returnType']>((resolve, reject) => {\n      this._callbacks.set(id, { resolve, reject, error: new ProtocolError('error', method) });\n    });\n  }\n\n  sendMayFail<T extends keyof bidiCommands.Commands>(method: T, params?: bidiCommands.Commands[T]['params']): Promise<bidiCommands.Commands[T]['returnType'] | void> {\n    return this.send(method, params).catch(error => debugLogger.log('error', error));\n  }\n\n  markAsCrashed() {\n    this._crashed = true;\n  }\n\n  isDisposed(): boolean {\n    return this._disposed;\n  }\n\n  dispose() {\n    this._disposed = true;\n    this.connection._browsingContextToSession.delete(this.sessionId);\n    for (const context of this._browsingContexts)\n      this.connection._browsingContextToSession.delete(context);\n    this._browsingContexts.clear();\n    for (const callback of this._callbacks.values()) {\n      callback.error.type = this._crashed ? 'crashed' : 'closed';\n      callback.error.logs = this.connection._browserDisconnectedLogs;\n      callback.reject(callback.error);\n    }\n    this._callbacks.clear();\n  }\n\n  hasCallback(id: number): boolean {\n    return this._callbacks.has(id);\n  }\n\n  dispatchMessage(message: any) {\n    const object = message as bidi.Message;\n    if (object.id === kBrowserCloseMessageId)\n      return;\n    if (object.id && this._callbacks.has(object.id)) {\n      const callback = this._callbacks.get(object.id)!;\n      this._callbacks.delete(object.id);\n      if (object.type === 'error') {\n        callback.error.setMessage(object.error + '\\nMessage: ' + object.message);\n        callback.reject(callback.error);\n      } else if (object.type === 'success') {\n        callback.resolve(object.result);\n      } else {\n        callback.error.setMessage('Internal error, unexpected response type: ' + JSON.stringify(object));\n        callback.reject(callback.error);\n      }\n    } else if (object.id) {\n      // Response might come after session has been disposed and rejected all callbacks.\n    } else {\n      Promise.resolve().then(() => this.emit(object.method, object.params));\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * Modifications copyright (c) Microsoft Corporation.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Copied from upstream: https://github.com/GoogleChromeLabs/chromium-bidi/blob/main/src/protocol/generated/webdriver-bidi.ts\n\n/**\n * THIS FILE IS AUTOGENERATED by cddlconv 0.1.6.\n * Run `node tools/generate-bidi-types.mjs` to regenerate.\n * @see https://github.com/w3c/webdriver-bidi/blob/master/index.bs\n */\n\nexport type Event = {\n  type: 'event';\n} & EventData &\n  Extensible;\nexport type Command = {\n  id: JsUint;\n} & CommandData &\n  Extensible;\nexport type CommandResponse = {\n  type: 'success';\n  id: JsUint;\n  result: ResultData;\n} & Extensible;\nexport type EventData =\n  | BrowsingContextEvent\n  | InputEvent\n  | LogEvent\n  | NetworkEvent\n  | ScriptEvent;\nexport type CommandData =\n  | BrowserCommand\n  | BrowsingContextCommand\n  | EmulationCommand\n  | InputCommand\n  | NetworkCommand\n  | ScriptCommand\n  | SessionCommand\n  | StorageCommand\n  | WebExtensionCommand;\nexport type ResultData =\n  | BrowsingContextResult\n  | EmptyResult\n  | NetworkResult\n  | ScriptResult\n  | SessionResult\n  | StorageResult\n  | WebExtensionResult;\nexport type EmptyParams = Extensible;\nexport type Message = CommandResponse | ErrorResponse | Event;\nexport type ErrorResponse = {\n  type: 'error';\n  id: JsUint | null;\n  error: ErrorCode;\n  message: string;\n  stacktrace?: string;\n} & Extensible;\nexport type EmptyResult = Extensible;\nexport type Extensible = {\n  [key: string]: any;\n};\n\n/**\n * Must be between `-9007199254740991` and `9007199254740991`, inclusive.\n */\nexport type JsInt = number;\n\n/**\n * Must be between `0` and `9007199254740991`, inclusive.\n */\nexport type JsUint = number;\nexport const enum ErrorCode {\n  InvalidArgument = 'invalid argument',\n  InvalidSelector = 'invalid selector',\n  InvalidSessionId = 'invalid session id',\n  InvalidWebExtension = 'invalid web extension',\n  MoveTargetOutOfBounds = 'move target out of bounds',\n  NoSuchAlert = 'no such alert',\n  NoSuchElement = 'no such element',\n  NoSuchFrame = 'no such frame',\n  NoSuchHandle = 'no such handle',\n  NoSuchHistoryEntry = 'no such history entry',\n  NoSuchIntercept = 'no such intercept',\n  NoSuchNode = 'no such node',\n  NoSuchRequest = 'no such request',\n  NoSuchScript = 'no such script',\n  NoSuchStoragePartition = 'no such storage partition',\n  NoSuchUserContext = 'no such user context',\n  NoSuchWebExtension = 'no such web extension',\n  SessionNotCreated = 'session not created',\n  UnableToCaptureScreen = 'unable to capture screen',\n  UnableToCloseBrowser = 'unable to close browser',\n  UnableToSetCookie = 'unable to set cookie',\n  UnableToSetFileInput = 'unable to set file input',\n  UnderspecifiedStoragePartition = 'underspecified storage partition',\n  UnknownCommand = 'unknown command',\n  UnknownError = 'unknown error',\n  UnsupportedOperation = 'unsupported operation',\n}\nexport type SessionCommand =\n  | Session.End\n  | Session.New\n  | Session.Status\n  | Session.Subscribe\n  | Session.Unsubscribe;\nexport namespace Session {\n  export type ProxyConfiguration =\n    | Session.AutodetectProxyConfiguration\n    | Session.DirectProxyConfiguration\n    | Session.ManualProxyConfiguration\n    | Session.PacProxyConfiguration\n    | Session.SystemProxyConfiguration;\n}\nexport type SessionResult =\n  | Session.NewResult\n  | Session.StatusResult\n  | Session.SubscribeResult;\nexport namespace Session {\n  export type CapabilitiesRequest = {\n    alwaysMatch?: Session.CapabilityRequest;\n    firstMatch?: [...Session.CapabilityRequest[]];\n  };\n}\nexport namespace Session {\n  export type CapabilityRequest = {\n    acceptInsecureCerts?: boolean;\n    browserName?: string;\n    browserVersion?: string;\n    platformName?: string;\n    proxy?: Session.ProxyConfiguration;\n    unhandledPromptBehavior?: Session.UserPromptHandler;\n  } & Extensible;\n}\nexport namespace Session {\n  export type AutodetectProxyConfiguration = {\n    proxyType: 'autodetect';\n  } & Extensible;\n}\nexport namespace Session {\n  export type DirectProxyConfiguration = {\n    proxyType: 'direct';\n  } & Extensible;\n}\nexport namespace Session {\n  export type ManualProxyConfiguration = {\n    proxyType: 'manual';\n    ftpProxy?: string;\n    httpProxy?: string;\n    sslProxy?: string;\n  } & ({} | Session.SocksProxyConfiguration) & {\n      noProxy?: [...string[]];\n    } & Extensible;\n}\nexport namespace Session {\n  export type SocksProxyConfiguration = {\n    socksProxy: string;\n    /**\n     * Must be between `0` and `255`, inclusive.\n     */\n    socksVersion: number;\n  };\n}\nexport namespace Session {\n  export type PacProxyConfiguration = {\n    proxyType: 'pac';\n    proxyAutoconfigUrl: string;\n  } & Extensible;\n}\nexport namespace Session {\n  export type SystemProxyConfiguration = {\n    proxyType: 'system';\n  } & Extensible;\n}\nexport namespace Session {\n  export type UserPromptHandler = {\n    alert?: Session.UserPromptHandlerType;\n    beforeUnload?: Session.UserPromptHandlerType;\n    confirm?: Session.UserPromptHandlerType;\n    default?: Session.UserPromptHandlerType;\n    file?: Session.UserPromptHandlerType;\n    prompt?: Session.UserPromptHandlerType;\n  };\n}\nexport namespace Session {\n  export const enum UserPromptHandlerType {\n    Accept = 'accept',\n    Dismiss = 'dismiss',\n    Ignore = 'ignore',\n  }\n}\nexport namespace Session {\n  export type Subscription = string;\n}\nexport namespace Session {\n  export type SubscriptionRequest = {\n    events: [string, ...string[]];\n    contexts?: [\n      BrowsingContext.BrowsingContext,\n      ...BrowsingContext.BrowsingContext[],\n    ];\n    userContexts?: [Browser.UserContext, ...Browser.UserContext[]];\n  };\n}\nexport namespace Session {\n  export type UnsubscribeByIdRequest = {\n    subscriptions: [Session.Subscription, ...Session.Subscription[]];\n  };\n}\nexport namespace Session {\n  export type UnsubscribeByAttributesRequest = {\n    events: [string, ...string[]];\n    contexts?: [\n      BrowsingContext.BrowsingContext,\n      ...BrowsingContext.BrowsingContext[],\n    ];\n  };\n}\nexport namespace Session {\n  export type Status = {\n    method: 'session.status';\n    params: EmptyParams;\n  };\n}\nexport namespace Session {\n  export type StatusResult = {\n    ready: boolean;\n    message: string;\n  };\n}\nexport namespace Session {\n  export type New = {\n    method: 'session.new';\n    params: Session.NewParameters;\n  };\n}\nexport namespace Session {\n  export type NewParameters = {\n    capabilities: Session.CapabilitiesRequest;\n  };\n}\nexport namespace Session {\n  export type NewResult = {\n    sessionId: string;\n    capabilities: {\n      acceptInsecureCerts: boolean;\n      browserName: string;\n      browserVersion: string;\n      platformName: string;\n      setWindowRect: boolean;\n      userAgent: string;\n      proxy?: Session.ProxyConfiguration;\n      unhandledPromptBehavior?: Session.UserPromptHandler;\n      webSocketUrl?: string;\n    } & Extensible;\n  };\n}\nexport namespace Session {\n  export type End = {\n    method: 'session.end';\n    params: EmptyParams;\n  };\n}\nexport namespace Session {\n  export type Subscribe = {\n    method: 'session.subscribe';\n    params: Session.SubscriptionRequest;\n  };\n}\nexport namespace Session {\n  export type SubscribeResult = {\n    subscription: Session.Subscription;\n  };\n}\nexport namespace Session {\n  export type Unsubscribe = {\n    method: 'session.unsubscribe';\n    params: Session.UnsubscribeParameters;\n  };\n}\nexport namespace Session {\n  export type UnsubscribeParameters =\n    | Session.UnsubscribeByAttributesRequest\n    | Session.UnsubscribeByIdRequest;\n}\nexport type BrowserCommand =\n  | Browser.Close\n  | Browser.CreateUserContext\n  | Browser.GetClientWindows\n  | Browser.GetUserContexts\n  | Browser.RemoveUserContext\n  | Browser.SetClientWindowState;\nexport type BrowserResult =\n  | Browser.CreateUserContextResult\n  | Browser.GetUserContextsResult;\nexport namespace Browser {\n  export type ClientWindow = string;\n}\nexport namespace Browser {\n  export type ClientWindowInfo = {\n    active: boolean;\n    clientWindow: Browser.ClientWindow;\n    height: JsUint;\n    state: 'fullscreen' | 'maximized' | 'minimized' | 'normal';\n    width: JsUint;\n    x: JsInt;\n    y: JsInt;\n  };\n}\nexport namespace Browser {\n  export type UserContext = string;\n}\nexport namespace Browser {\n  export type UserContextInfo = {\n    userContext: Browser.UserContext;\n  };\n}\nexport namespace Browser {\n  export type Close = {\n    method: 'browser.close';\n    params: EmptyParams;\n  };\n}\nexport namespace Browser {\n  export type CreateUserContext = {\n    method: 'browser.createUserContext';\n    params: Browser.CreateUserContextParameters;\n  };\n}\nexport namespace Browser {\n  export type CreateUserContextParameters = {\n    acceptInsecureCerts?: boolean;\n    proxy?: Session.ProxyConfiguration;\n  };\n}\nexport namespace Browser {\n  export type CreateUserContextResult = Browser.UserContextInfo;\n}\nexport namespace Browser {\n  export type GetClientWindows = {\n    method: 'browser.getClientWindows';\n    params: EmptyParams;\n  };\n}\nexport namespace Browser {\n  export type GetClientWindowsResult = {\n    clientWindows: [...Browser.ClientWindowInfo[]];\n  };\n}\nexport namespace Browser {\n  export type GetUserContexts = {\n    method: 'browser.getUserContexts';\n    params: EmptyParams;\n  };\n}\nexport namespace Browser {\n  export type GetUserContextsResult = {\n    userContexts: [Browser.UserContextInfo, ...Browser.UserContextInfo[]];\n  };\n}\nexport namespace Browser {\n  export type RemoveUserContext = {\n    method: 'browser.removeUserContext';\n    params: Browser.RemoveUserContextParameters;\n  };\n}\nexport namespace Browser {\n  export type RemoveUserContextParameters = {\n    userContext: Browser.UserContext;\n  };\n}\nexport namespace Browser {\n  export type SetClientWindowState = {\n    method: 'browser.setClientWindowState';\n    params: Browser.SetClientWindowStateParameters;\n  };\n}\nexport namespace Browser {\n  export type SetClientWindowStateParameters = {\n    clientWindow: Browser.ClientWindow;\n  } & (Browser.ClientWindowNamedState | Browser.ClientWindowRectState);\n}\nexport namespace Browser {\n  export type ClientWindowNamedState = {\n    state: 'fullscreen' | 'maximized' | 'minimized';\n  };\n}\nexport namespace Browser {\n  export type ClientWindowRectState = {\n    state: 'normal';\n    width?: JsUint;\n    height?: JsUint;\n    x?: JsInt;\n    y?: JsInt;\n  };\n}\nexport type BrowsingContextCommand =\n  | BrowsingContext.Activate\n  | BrowsingContext.CaptureScreenshot\n  | BrowsingContext.Close\n  | BrowsingContext.Create\n  | BrowsingContext.GetTree\n  | BrowsingContext.HandleUserPrompt\n  | BrowsingContext.LocateNodes\n  | BrowsingContext.Navigate\n  | BrowsingContext.Print\n  | BrowsingContext.Reload\n  | BrowsingContext.SetViewport\n  | BrowsingContext.TraverseHistory;\nexport type BrowsingContextEvent =\n  | BrowsingContext.ContextCreated\n  | BrowsingContext.ContextDestroyed\n  | BrowsingContext.DomContentLoaded\n  | BrowsingContext.DownloadWillBegin\n  | BrowsingContext.FragmentNavigated\n  | BrowsingContext.HistoryUpdated\n  | BrowsingContext.Load\n  | BrowsingContext.NavigationAborted\n  | BrowsingContext.NavigationCommitted\n  | BrowsingContext.NavigationFailed\n  | BrowsingContext.NavigationStarted\n  | BrowsingContext.UserPromptClosed\n  | BrowsingContext.UserPromptOpened;\nexport type BrowsingContextResult =\n  | BrowsingContext.CaptureScreenshotResult\n  | BrowsingContext.CreateResult\n  | BrowsingContext.GetTreeResult\n  | BrowsingContext.LocateNodesResult\n  | BrowsingContext.NavigateResult\n  | BrowsingContext.PrintResult\n  | BrowsingContext.TraverseHistoryResult;\nexport namespace BrowsingContext {\n  export type BrowsingContext = string;\n}\nexport namespace BrowsingContext {\n  export type InfoList = [...BrowsingContext.Info[]];\n}\nexport namespace BrowsingContext {\n  export type Info = {\n    children: BrowsingContext.InfoList | null;\n    clientWindow: Browser.ClientWindow;\n    context: BrowsingContext.BrowsingContext;\n    originalOpener: BrowsingContext.BrowsingContext | null;\n    url: string;\n    userContext: Browser.UserContext;\n    parent?: BrowsingContext.BrowsingContext | null;\n  };\n}\nexport namespace BrowsingContext {\n  export type Locator =\n    | BrowsingContext.AccessibilityLocator\n    | BrowsingContext.CssLocator\n    | BrowsingContext.ContextLocator\n    | BrowsingContext.InnerTextLocator\n    | BrowsingContext.XPathLocator;\n}\nexport namespace BrowsingContext {\n  export type AccessibilityLocator = {\n    type: 'accessibility';\n    value: {\n      name?: string;\n      role?: string;\n    };\n  };\n}\nexport namespace BrowsingContext {\n  export type CssLocator = {\n    type: 'css';\n    value: string;\n  };\n}\nexport namespace BrowsingContext {\n  export type ContextLocator = {\n    type: 'context';\n    value: {\n      context: BrowsingContext.BrowsingContext;\n    };\n  };\n}\nexport namespace BrowsingContext {\n  export type InnerTextLocator = {\n    type: 'innerText';\n    value: string;\n    ignoreCase?: boolean;\n    matchType?: 'full' | 'partial';\n    maxDepth?: JsUint;\n  };\n}\nexport namespace BrowsingContext {\n  export type XPathLocator = {\n    type: 'xpath';\n    value: string;\n  };\n}\nexport namespace BrowsingContext {\n  export type Navigation = string;\n}\nexport namespace BrowsingContext {\n  export type BaseNavigationInfo = {\n    context: BrowsingContext.BrowsingContext;\n    navigation: BrowsingContext.Navigation | null;\n    timestamp: JsUint;\n    url: string;\n  };\n}\nexport namespace BrowsingContext {\n  export type NavigationInfo = BrowsingContext.BaseNavigationInfo;\n}\nexport namespace BrowsingContext {\n  export const enum ReadinessState {\n    None = 'none',\n    Interactive = 'interactive',\n    Complete = 'complete',\n  }\n}\nexport namespace BrowsingContext {\n  export const enum UserPromptType {\n    Alert = 'alert',\n    Beforeunload = 'beforeunload',\n    Confirm = 'confirm',\n    Prompt = 'prompt',\n  }\n}\nexport namespace BrowsingContext {\n  export type Activate = {\n    method: 'browsingContext.activate';\n    params: BrowsingContext.ActivateParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type ActivateParameters = {\n    context: BrowsingContext.BrowsingContext;\n  };\n}\nexport namespace BrowsingContext {\n  export type CaptureScreenshotParameters = {\n    context: BrowsingContext.BrowsingContext;\n    /**\n     * @defaultValue `\"viewport\"`\n     */\n    origin?: 'viewport' | 'document';\n    format?: BrowsingContext.ImageFormat;\n    clip?: BrowsingContext.ClipRectangle;\n  };\n}\nexport namespace BrowsingContext {\n  export type CaptureScreenshot = {\n    method: 'browsingContext.captureScreenshot';\n    params: BrowsingContext.CaptureScreenshotParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type ImageFormat = {\n    type: string;\n    /**\n     * Must be between `0` and `1`, inclusive.\n     */\n    quality?: number;\n  };\n}\nexport namespace BrowsingContext {\n  export type ClipRectangle =\n    | BrowsingContext.BoxClipRectangle\n    | BrowsingContext.ElementClipRectangle;\n}\nexport namespace BrowsingContext {\n  export type ElementClipRectangle = {\n    type: 'element';\n    element: Script.SharedReference;\n  };\n}\nexport namespace BrowsingContext {\n  export type BoxClipRectangle = {\n    type: 'box';\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n  };\n}\nexport namespace BrowsingContext {\n  export type CaptureScreenshotResult = {\n    data: string;\n  };\n}\nexport namespace BrowsingContext {\n  export type Close = {\n    method: 'browsingContext.close';\n    params: BrowsingContext.CloseParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type CloseParameters = {\n    context: BrowsingContext.BrowsingContext;\n    /**\n     * @defaultValue `false`\n     */\n    promptUnload?: boolean;\n  };\n}\nexport namespace BrowsingContext {\n  export type Create = {\n    method: 'browsingContext.create';\n    params: BrowsingContext.CreateParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export const enum CreateType {\n    Tab = 'tab',\n    Window = 'window',\n  }\n}\nexport namespace BrowsingContext {\n  export type CreateParameters = {\n    type: BrowsingContext.CreateType;\n    referenceContext?: BrowsingContext.BrowsingContext;\n    /**\n     * @defaultValue `false`\n     */\n    background?: boolean;\n    userContext?: Browser.UserContext;\n  };\n}\nexport namespace BrowsingContext {\n  export type CreateResult = {\n    context: BrowsingContext.BrowsingContext;\n  };\n}\nexport namespace BrowsingContext {\n  export type GetTree = {\n    method: 'browsingContext.getTree';\n    params: BrowsingContext.GetTreeParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type GetTreeParameters = {\n    maxDepth?: JsUint;\n    root?: BrowsingContext.BrowsingContext;\n  };\n}\nexport namespace BrowsingContext {\n  export type GetTreeResult = {\n    contexts: BrowsingContext.InfoList;\n  };\n}\nexport namespace BrowsingContext {\n  export type HandleUserPrompt = {\n    method: 'browsingContext.handleUserPrompt';\n    params: BrowsingContext.HandleUserPromptParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type HandleUserPromptParameters = {\n    context: BrowsingContext.BrowsingContext;\n    accept?: boolean;\n    userText?: string;\n  };\n}\nexport namespace BrowsingContext {\n  export type LocateNodesParameters = {\n    context: BrowsingContext.BrowsingContext;\n    locator: BrowsingContext.Locator;\n    /**\n     * Must be greater than or equal to `1`.\n     */\n    maxNodeCount?: JsUint;\n    serializationOptions?: Script.SerializationOptions;\n    startNodes?: [Script.SharedReference, ...Script.SharedReference[]];\n  };\n}\nexport namespace BrowsingContext {\n  export type LocateNodes = {\n    method: 'browsingContext.locateNodes';\n    params: BrowsingContext.LocateNodesParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type LocateNodesResult = {\n    nodes: [...Script.NodeRemoteValue[]];\n  };\n}\nexport namespace BrowsingContext {\n  export type Navigate = {\n    method: 'browsingContext.navigate';\n    params: BrowsingContext.NavigateParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type NavigateParameters = {\n    context: BrowsingContext.BrowsingContext;\n    url: string;\n    wait?: BrowsingContext.ReadinessState;\n  };\n}\nexport namespace BrowsingContext {\n  export type NavigateResult = {\n    navigation: BrowsingContext.Navigation | null;\n    url: string;\n  };\n}\nexport namespace BrowsingContext {\n  export type Print = {\n    method: 'browsingContext.print';\n    params: BrowsingContext.PrintParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type PrintParameters = {\n    context: BrowsingContext.BrowsingContext;\n    /**\n     * @defaultValue `false`\n     */\n    background?: boolean;\n    margin?: BrowsingContext.PrintMarginParameters;\n    /**\n     * @defaultValue `\"portrait\"`\n     */\n    orientation?: 'portrait' | 'landscape';\n    page?: BrowsingContext.PrintPageParameters;\n    pageRanges?: [...(JsUint | string)[]];\n    /**\n     * Must be between `0.1` and `2`, inclusive.\n     *\n     * @defaultValue `1`\n     */\n    scale?: number;\n    /**\n     * @defaultValue `true`\n     */\n    shrinkToFit?: boolean;\n  };\n}\nexport namespace BrowsingContext {\n  export type PrintMarginParameters = {\n    /**\n     * Must be greater than or equal to `0`.\n     *\n     * @defaultValue `1`\n     */\n    bottom?: number;\n    /**\n     * Must be greater than or equal to `0`.\n     *\n     * @defaultValue `1`\n     */\n    left?: number;\n    /**\n     * Must be greater than or equal to `0`.\n     *\n     * @defaultValue `1`\n     */\n    right?: number;\n    /**\n     * Must be greater than or equal to `0`.\n     *\n     * @defaultValue `1`\n     */\n    top?: number;\n  };\n}\nexport namespace BrowsingContext {\n  export type PrintPageParameters = {\n    /**\n     * Must be greater than or equal to `0.0352`.\n     *\n     * @defaultValue `27.94`\n     */\n    height?: number;\n    /**\n     * Must be greater than or equal to `0.0352`.\n     *\n     * @defaultValue `21.59`\n     */\n    width?: number;\n  };\n}\nexport namespace BrowsingContext {\n  export type PrintResult = {\n    data: string;\n  };\n}\nexport namespace BrowsingContext {\n  export type Reload = {\n    method: 'browsingContext.reload';\n    params: BrowsingContext.ReloadParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type ReloadParameters = {\n    context: BrowsingContext.BrowsingContext;\n    ignoreCache?: boolean;\n    wait?: BrowsingContext.ReadinessState;\n  };\n}\nexport namespace BrowsingContext {\n  export type SetViewport = {\n    method: 'browsingContext.setViewport';\n    params: BrowsingContext.SetViewportParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type SetViewportParameters = {\n    context?: BrowsingContext.BrowsingContext;\n    viewport?: BrowsingContext.Viewport | null;\n    /**\n     * Must be greater than `0`.\n     */\n    devicePixelRatio?: number | null;\n    userContexts?: [Browser.UserContext, ...Browser.UserContext[]];\n  };\n}\nexport namespace BrowsingContext {\n  export type Viewport = {\n    width: JsUint;\n    height: JsUint;\n  };\n}\nexport namespace BrowsingContext {\n  export type TraverseHistory = {\n    method: 'browsingContext.traverseHistory';\n    params: BrowsingContext.TraverseHistoryParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type TraverseHistoryParameters = {\n    context: BrowsingContext.BrowsingContext;\n    delta: JsInt;\n  };\n}\nexport namespace BrowsingContext {\n  export type TraverseHistoryResult = Record<string, never>;\n}\nexport namespace BrowsingContext {\n  export type ContextCreated = {\n    method: 'browsingContext.contextCreated';\n    params: BrowsingContext.Info;\n  };\n}\nexport namespace BrowsingContext {\n  export type ContextDestroyed = {\n    method: 'browsingContext.contextDestroyed';\n    params: BrowsingContext.Info;\n  };\n}\nexport namespace BrowsingContext {\n  export type NavigationStarted = {\n    method: 'browsingContext.navigationStarted';\n    params: BrowsingContext.NavigationInfo;\n  };\n}\nexport namespace BrowsingContext {\n  export type FragmentNavigated = {\n    method: 'browsingContext.fragmentNavigated';\n    params: BrowsingContext.NavigationInfo;\n  };\n}\nexport namespace BrowsingContext {\n  export type HistoryUpdated = {\n    method: 'browsingContext.historyUpdated';\n    params: BrowsingContext.HistoryUpdatedParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type HistoryUpdatedParameters = {\n    context: BrowsingContext.BrowsingContext;\n    url: string;\n  };\n}\nexport namespace BrowsingContext {\n  export type DomContentLoaded = {\n    method: 'browsingContext.domContentLoaded';\n    params: BrowsingContext.NavigationInfo;\n  };\n}\nexport namespace BrowsingContext {\n  export type Load = {\n    method: 'browsingContext.load';\n    params: BrowsingContext.NavigationInfo;\n  };\n}\nexport namespace BrowsingContext {\n  export type DownloadWillBegin = {\n    method: 'browsingContext.downloadWillBegin';\n    params: BrowsingContext.DownloadWillBeginParams;\n  };\n}\nexport namespace BrowsingContext {\n  export type DownloadWillBeginParams = {\n    suggestedFilename: string;\n  } & BrowsingContext.BaseNavigationInfo;\n}\nexport namespace BrowsingContext {\n  export type NavigationAborted = {\n    method: 'browsingContext.navigationAborted';\n    params: BrowsingContext.NavigationInfo;\n  };\n}\nexport namespace BrowsingContext {\n  export type NavigationCommitted = {\n    method: 'browsingContext.navigationCommitted';\n    params: BrowsingContext.NavigationInfo;\n  };\n}\nexport namespace BrowsingContext {\n  export type NavigationFailed = {\n    method: 'browsingContext.navigationFailed';\n    params: BrowsingContext.NavigationInfo;\n  };\n}\nexport namespace BrowsingContext {\n  export type UserPromptClosed = {\n    method: 'browsingContext.userPromptClosed';\n    params: BrowsingContext.UserPromptClosedParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type UserPromptClosedParameters = {\n    context: BrowsingContext.BrowsingContext;\n    accepted: boolean;\n    type: BrowsingContext.UserPromptType;\n    userText?: string;\n  };\n}\nexport namespace BrowsingContext {\n  export type UserPromptOpened = {\n    method: 'browsingContext.userPromptOpened';\n    params: BrowsingContext.UserPromptOpenedParameters;\n  };\n}\nexport namespace BrowsingContext {\n  export type UserPromptOpenedParameters = {\n    context: BrowsingContext.BrowsingContext;\n    handler: Session.UserPromptHandlerType;\n    message: string;\n    type: BrowsingContext.UserPromptType;\n    defaultValue?: string;\n  };\n}\nexport type EmulationCommand = Emulation.SetGeolocationOverride;\nexport namespace Emulation {\n  export type SetGeolocationOverride = {\n    method: 'emulation.setGeolocationOverride';\n    params: Emulation.SetGeolocationOverrideParameters;\n  };\n}\nexport namespace Emulation {\n  export type SetGeolocationOverrideParameters = (\n    | {\n        coordinates: Emulation.GeolocationCoordinates | null;\n      }\n    | {\n        error: Emulation.GeolocationPositionError;\n      }\n  ) & {\n    contexts?: [\n      BrowsingContext.BrowsingContext,\n      ...BrowsingContext.BrowsingContext[],\n    ];\n    userContexts?: [Browser.UserContext, ...Browser.UserContext[]];\n  };\n}\nexport namespace Emulation {\n  export type GeolocationCoordinates = {\n    /**\n     * Must be between `-90` and `90`, inclusive.\n     */\n    latitude: number;\n    /**\n     * Must be between `-180` and `180`, inclusive.\n     */\n    longitude: number;\n    /**\n     * Must be greater than or equal to `0`.\n     *\n     * @defaultValue `1`\n     */\n    accuracy?: number;\n    /**\n     * @defaultValue `null`\n     */\n    altitude?: number | null;\n    /**\n     * Must be greater than or equal to `0`.\n     *\n     * @defaultValue `null`\n     */\n    altitudeAccuracy?: number | null;\n    /**\n     * Must be between `0` and `360`.\n     *\n     * @defaultValue `null`\n     */\n    heading?: number | null;\n    /**\n     * Must be greater than or equal to `0`.\n     *\n     * @defaultValue `null`\n     */\n    speed?: number | null;\n  };\n}\nexport namespace Emulation {\n  export type GeolocationPositionError = {\n    type: 'positionUnavailable';\n  };\n}\nexport type NetworkCommand =\n  | Network.AddIntercept\n  | Network.ContinueRequest\n  | Network.ContinueResponse\n  | Network.ContinueWithAuth\n  | Network.FailRequest\n  | Network.ProvideResponse\n  | Network.RemoveIntercept\n  | Network.SetCacheBehavior;\nexport type NetworkEvent =\n  | Network.AuthRequired\n  | Network.BeforeRequestSent\n  | Network.FetchError\n  | Network.ResponseCompleted\n  | Network.ResponseStarted;\nexport type NetworkResult = Network.AddInterceptResult;\nexport namespace Network {\n  export type AuthChallenge = {\n    scheme: string;\n    realm: string;\n  };\n}\nexport namespace Network {\n  export type AuthCredentials = {\n    type: 'password';\n    username: string;\n    password: string;\n  };\n}\nexport namespace Network {\n  export type BaseParameters = {\n    context: BrowsingContext.BrowsingContext | null;\n    isBlocked: boolean;\n    navigation: BrowsingContext.Navigation | null;\n    redirectCount: JsUint;\n    request: Network.RequestData;\n    timestamp: JsUint;\n    intercepts?: [Network.Intercept, ...Network.Intercept[]];\n  };\n}\nexport namespace Network {\n  export type BytesValue = Network.StringValue | Network.Base64Value;\n}\nexport namespace Network {\n  export type StringValue = {\n    type: 'string';\n    value: string;\n  };\n}\nexport namespace Network {\n  export type Base64Value = {\n    type: 'base64';\n    value: string;\n  };\n}\nexport namespace Network {\n  export const enum SameSite {\n    Strict = 'strict',\n    Lax = 'lax',\n    None = 'none',\n  }\n}\nexport namespace Network {\n  export type Cookie = {\n    name: string;\n    value: Network.BytesValue;\n    domain: string;\n    path: string;\n    size: JsUint;\n    httpOnly: boolean;\n    secure: boolean;\n    sameSite: Network.SameSite;\n    expiry?: JsUint;\n  } & Extensible;\n}\nexport namespace Network {\n  export type CookieHeader = {\n    name: string;\n    value: Network.BytesValue;\n  };\n}\nexport namespace Network {\n  export type FetchTimingInfo = {\n    timeOrigin: number;\n    requestTime: number;\n    redirectStart: number;\n    redirectEnd: number;\n    fetchStart: number;\n    dnsStart: number;\n    dnsEnd: number;\n    connectStart: number;\n    connectEnd: number;\n    tlsStart: number;\n    requestStart: number;\n    responseStart: number;\n    responseEnd: number;\n  };\n}\nexport namespace Network {\n  export type Header = {\n    name: string;\n    value: Network.BytesValue;\n  };\n}\nexport namespace Network {\n  export type Initiator = {\n    columnNumber?: JsUint;\n    lineNumber?: JsUint;\n    request?: Network.Request;\n    stackTrace?: Script.StackTrace;\n    type?: 'parser' | 'script' | 'preflight' | 'other';\n  };\n}\nexport namespace Network {\n  export type Intercept = string;\n}\nexport namespace Network {\n  export type Request = string;\n}\nexport namespace Network {\n  export type RequestData = {\n    request: Network.Request;\n    url: string;\n    method: string;\n    headers: [...Network.Header[]];\n    cookies: [...Network.Cookie[]];\n    headersSize: JsUint;\n    bodySize: JsUint | null;\n    destination: string;\n    initiatorType: string | null;\n    timings: Network.FetchTimingInfo;\n  };\n}\nexport namespace Network {\n  export type ResponseContent = {\n    size: JsUint;\n  };\n}\nexport namespace Network {\n  export type ResponseData = {\n    url: string;\n    protocol: string;\n    status: JsUint;\n    statusText: string;\n    fromCache: boolean;\n    headers: [...Network.Header[]];\n    mimeType: string;\n    bytesReceived: JsUint;\n    headersSize: JsUint | null;\n    bodySize: JsUint | null;\n    content: Network.ResponseContent;\n    authChallenges?: [...Network.AuthChallenge[]];\n  };\n}\nexport namespace Network {\n  export type SetCookieHeader = {\n    name: string;\n    value: Network.BytesValue;\n    domain?: string;\n    httpOnly?: boolean;\n    expiry?: string;\n    maxAge?: JsInt;\n    path?: string;\n    sameSite?: Network.SameSite;\n    secure?: boolean;\n  };\n}\nexport namespace Network {\n  export type UrlPattern = Network.UrlPatternPattern | Network.UrlPatternString;\n}\nexport namespace Network {\n  export type UrlPatternPattern = {\n    type: 'pattern';\n    protocol?: string;\n    hostname?: string;\n    port?: string;\n    pathname?: string;\n    search?: string;\n  };\n}\nexport namespace Network {\n  export type UrlPatternString = {\n    type: 'string';\n    pattern: string;\n  };\n}\nexport namespace Network {\n  export type AddInterceptParameters = {\n    phases: [Network.InterceptPhase, ...Network.InterceptPhase[]];\n    contexts?: [\n      BrowsingContext.BrowsingContext,\n      ...BrowsingContext.BrowsingContext[],\n    ];\n    urlPatterns?: [...Network.UrlPattern[]];\n  };\n}\nexport namespace Network {\n  export type AddIntercept = {\n    method: 'network.addIntercept';\n    params: Network.AddInterceptParameters;\n  };\n}\nexport namespace Network {\n  export const enum InterceptPhase {\n    BeforeRequestSent = 'beforeRequestSent',\n    ResponseStarted = 'responseStarted',\n    AuthRequired = 'authRequired',\n  }\n}\nexport namespace Network {\n  export type AddInterceptResult = {\n    intercept: Network.Intercept;\n  };\n}\nexport namespace Network {\n  export type ContinueRequest = {\n    method: 'network.continueRequest';\n    params: Network.ContinueRequestParameters;\n  };\n}\nexport namespace Network {\n  export type ContinueRequestParameters = {\n    request: Network.Request;\n    body?: Network.BytesValue;\n    cookies?: [...Network.CookieHeader[]];\n    headers?: [...Network.Header[]];\n    method?: string;\n    url?: string;\n  };\n}\nexport namespace Network {\n  export type ContinueResponse = {\n    method: 'network.continueResponse';\n    params: Network.ContinueResponseParameters;\n  };\n}\nexport namespace Network {\n  export type ContinueResponseParameters = {\n    request: Network.Request;\n    cookies?: [...Network.SetCookieHeader[]];\n    credentials?: Network.AuthCredentials;\n    headers?: [...Network.Header[]];\n    reasonPhrase?: string;\n    statusCode?: JsUint;\n  };\n}\nexport namespace Network {\n  export type ContinueWithAuth = {\n    method: 'network.continueWithAuth';\n    params: Network.ContinueWithAuthParameters;\n  };\n}\nexport namespace Network {\n  export type ContinueWithAuthParameters = {\n    request: Network.Request;\n  } & (\n    | Network.ContinueWithAuthCredentials\n    | Network.ContinueWithAuthNoCredentials\n  );\n}\nexport namespace Network {\n  export type ContinueWithAuthCredentials = {\n    action: 'provideCredentials';\n    credentials: Network.AuthCredentials;\n  };\n}\nexport namespace Network {\n  export type ContinueWithAuthNoCredentials = {\n    action: 'default' | 'cancel';\n  };\n}\nexport namespace Network {\n  export type FailRequest = {\n    method: 'network.failRequest';\n    params: Network.FailRequestParameters;\n  };\n}\nexport namespace Network {\n  export type FailRequestParameters = {\n    request: Network.Request;\n  };\n}\nexport namespace Network {\n  export type ProvideResponse = {\n    method: 'network.provideResponse';\n    params: Network.ProvideResponseParameters;\n  };\n}\nexport namespace Network {\n  export type ProvideResponseParameters = {\n    request: Network.Request;\n    body?: Network.BytesValue;\n    cookies?: [...Network.SetCookieHeader[]];\n    headers?: [...Network.Header[]];\n    reasonPhrase?: string;\n    statusCode?: JsUint;\n  };\n}\nexport namespace Network {\n  export type RemoveIntercept = {\n    method: 'network.removeIntercept';\n    params: Network.RemoveInterceptParameters;\n  };\n}\nexport namespace Network {\n  export type RemoveInterceptParameters = {\n    intercept: Network.Intercept;\n  };\n}\nexport namespace Network {\n  export type SetCacheBehavior = {\n    method: 'network.setCacheBehavior';\n    params: Network.SetCacheBehaviorParameters;\n  };\n}\nexport namespace Network {\n  export type SetCacheBehaviorParameters = {\n    cacheBehavior: 'default' | 'bypass';\n    contexts?: [\n      BrowsingContext.BrowsingContext,\n      ...BrowsingContext.BrowsingContext[],\n    ];\n  };\n}\nexport type ScriptEvent =\n  | Script.Message\n  | Script.RealmCreated\n  | Script.RealmDestroyed;\nexport namespace Network {\n  export type AuthRequiredParameters = Network.BaseParameters & {\n    response: Network.ResponseData;\n  };\n}\nexport namespace Network {\n  export type BeforeRequestSentParameters = Network.BaseParameters & {\n    initiator?: Network.Initiator;\n  };\n}\nexport namespace Network {\n  export type FetchErrorParameters = Network.BaseParameters & {\n    errorText: string;\n  };\n}\nexport namespace Network {\n  export type ResponseCompletedParameters = Network.BaseParameters & {\n    response: Network.ResponseData;\n  };\n}\nexport namespace Network {\n  export type ResponseStartedParameters = Network.BaseParameters & {\n    response: Network.ResponseData;\n  };\n}\nexport type ScriptCommand =\n  | Script.AddPreloadScript\n  | Script.CallFunction\n  | Script.Disown\n  | Script.Evaluate\n  | Script.GetRealms\n  | Script.RemovePreloadScript;\nexport type ScriptResult =\n  | Script.AddPreloadScriptResult\n  | Script.EvaluateResult\n  | Script.GetRealmsResult;\nexport namespace Network {\n  export type AuthRequired = {\n    method: 'network.authRequired';\n    params: Network.AuthRequiredParameters;\n  };\n}\nexport namespace Network {\n  export type BeforeRequestSent = {\n    method: 'network.beforeRequestSent';\n    params: Network.BeforeRequestSentParameters;\n  };\n}\nexport namespace Network {\n  export type FetchError = {\n    method: 'network.fetchError';\n    params: Network.FetchErrorParameters;\n  };\n}\nexport namespace Network {\n  export type ResponseCompleted = {\n    method: 'network.responseCompleted';\n    params: Network.ResponseCompletedParameters;\n  };\n}\nexport namespace Network {\n  export type ResponseStarted = {\n    method: 'network.responseStarted';\n    params: Network.ResponseStartedParameters;\n  };\n}\nexport namespace Script {\n  export type Channel = string;\n}\nexport namespace Script {\n  export type EvaluateResultSuccess = {\n    type: 'success';\n    result: Script.RemoteValue;\n    realm: Script.Realm;\n  };\n}\nexport namespace Script {\n  export type ExceptionDetails = {\n    columnNumber: JsUint;\n    exception: Script.RemoteValue;\n    lineNumber: JsUint;\n    stackTrace: Script.StackTrace;\n    text: string;\n  };\n}\nexport namespace Script {\n  export type ChannelValue = {\n    type: 'channel';\n    value: Script.ChannelProperties;\n  };\n}\nexport namespace Script {\n  export type ChannelProperties = {\n    channel: Script.Channel;\n    serializationOptions?: Script.SerializationOptions;\n    ownership?: Script.ResultOwnership;\n  };\n}\nexport namespace Script {\n  export type EvaluateResult =\n    | Script.EvaluateResultSuccess\n    | Script.EvaluateResultException;\n}\nexport namespace Script {\n  export type EvaluateResultException = {\n    type: 'exception';\n    exceptionDetails: Script.ExceptionDetails;\n    realm: Script.Realm;\n  };\n}\nexport namespace Script {\n  export type Handle = string;\n}\nexport namespace Script {\n  export type InternalId = string;\n}\nexport namespace Script {\n  export type ListLocalValue = [...Script.LocalValue[]];\n}\nexport namespace Script {\n  export type LocalValue =\n    | Script.RemoteReference\n    | Script.PrimitiveProtocolValue\n    | Script.ChannelValue\n    | Script.ArrayLocalValue\n    | Script.DateLocalValue\n    | Script.MapLocalValue\n    | Script.ObjectLocalValue\n    | Script.RegExpLocalValue\n    | Script.SetLocalValue;\n}\nexport namespace Script {\n  export type ArrayLocalValue = {\n    type: 'array';\n    value: Script.ListLocalValue;\n  };\n}\nexport namespace Script {\n  export type DateLocalValue = {\n    type: 'date';\n    value: string;\n  };\n}\nexport namespace Script {\n  export type MappingLocalValue = [\n    ...[Script.LocalValue | string, Script.LocalValue][],\n  ];\n}\nexport namespace Script {\n  export type MapLocalValue = {\n    type: 'map';\n    value: Script.MappingLocalValue;\n  };\n}\nexport namespace Script {\n  export type ObjectLocalValue = {\n    type: 'object';\n    value: Script.MappingLocalValue;\n  };\n}\nexport namespace Script {\n  export type RegExpValue = {\n    pattern: string;\n    flags?: string;\n  };\n}\nexport namespace Script {\n  export type RegExpLocalValue = {\n    type: 'regexp';\n    value: Script.RegExpValue;\n  };\n}\nexport namespace Script {\n  export type SetLocalValue = {\n    type: 'set';\n    value: Script.ListLocalValue;\n  };\n}\nexport namespace Script {\n  export type PreloadScript = string;\n}\nexport namespace Script {\n  export type Realm = string;\n}\nexport namespace Script {\n  export type PrimitiveProtocolValue =\n    | Script.UndefinedValue\n    | Script.NullValue\n    | Script.StringValue\n    | Script.NumberValue\n    | Script.BooleanValue\n    | Script.BigIntValue;\n}\nexport namespace Script {\n  export type UndefinedValue = {\n    type: 'undefined';\n  };\n}\nexport namespace Script {\n  export type NullValue = {\n    type: 'null';\n  };\n}\nexport namespace Script {\n  export type StringValue = {\n    type: 'string';\n    value: string;\n  };\n}\nexport namespace Script {\n  export type SpecialNumber = 'NaN' | '-0' | 'Infinity' | '-Infinity';\n}\nexport namespace Script {\n  export type NumberValue = {\n    type: 'number';\n    value: number | Script.SpecialNumber;\n  };\n}\nexport namespace Script {\n  export type BooleanValue = {\n    type: 'boolean';\n    value: boolean;\n  };\n}\nexport namespace Script {\n  export type BigIntValue = {\n    type: 'bigint';\n    value: string;\n  };\n}\nexport namespace Script {\n  export type RealmInfo =\n    | Script.WindowRealmInfo\n    | Script.DedicatedWorkerRealmInfo\n    | Script.SharedWorkerRealmInfo\n    | Script.ServiceWorkerRealmInfo\n    | Script.WorkerRealmInfo\n    | Script.PaintWorkletRealmInfo\n    | Script.AudioWorkletRealmInfo\n    | Script.WorkletRealmInfo;\n}\nexport namespace Script {\n  export type BaseRealmInfo = {\n    realm: Script.Realm;\n    origin: string;\n  };\n}\nexport namespace Script {\n  export type WindowRealmInfo = Script.BaseRealmInfo & {\n    type: 'window';\n    context: BrowsingContext.BrowsingContext;\n    sandbox?: string;\n  };\n}\nexport namespace Script {\n  export type DedicatedWorkerRealmInfo = Script.BaseRealmInfo & {\n    type: 'dedicated-worker';\n    owners: [Script.Realm];\n  };\n}\nexport namespace Script {\n  export type SharedWorkerRealmInfo = Script.BaseRealmInfo & {\n    type: 'shared-worker';\n  };\n}\nexport namespace Script {\n  export type ServiceWorkerRealmInfo = Script.BaseRealmInfo & {\n    type: 'service-worker';\n  };\n}\nexport namespace Script {\n  export type WorkerRealmInfo = Script.BaseRealmInfo & {\n    type: 'worker';\n  };\n}\nexport namespace Script {\n  export type PaintWorkletRealmInfo = Script.BaseRealmInfo & {\n    type: 'paint-worklet';\n  };\n}\nexport namespace Script {\n  export type AudioWorkletRealmInfo = Script.BaseRealmInfo & {\n    type: 'audio-worklet';\n  };\n}\nexport namespace Script {\n  export type WorkletRealmInfo = Script.BaseRealmInfo & {\n    type: 'worklet';\n  };\n}\nexport namespace Script {\n  export type RealmType =\n    | 'window'\n    | 'dedicated-worker'\n    | 'shared-worker'\n    | 'service-worker'\n    | 'worker'\n    | 'paint-worklet'\n    | 'audio-worklet'\n    | 'worklet';\n}\nexport namespace Script {\n  export type ListRemoteValue = [...Script.RemoteValue[]];\n}\nexport namespace Script {\n  export type MappingRemoteValue = [\n    ...[Script.RemoteValue | string, Script.RemoteValue][],\n  ];\n}\nexport namespace Script {\n  export type RemoteValue =\n    | Script.PrimitiveProtocolValue\n    | Script.SymbolRemoteValue\n    | Script.ArrayRemoteValue\n    | Script.ObjectRemoteValue\n    | Script.FunctionRemoteValue\n    | Script.RegExpRemoteValue\n    | Script.DateRemoteValue\n    | Script.MapRemoteValue\n    | Script.SetRemoteValue\n    | Script.WeakMapRemoteValue\n    | Script.WeakSetRemoteValue\n    | Script.GeneratorRemoteValue\n    | Script.ErrorRemoteValue\n    | Script.ProxyRemoteValue\n    | Script.PromiseRemoteValue\n    | Script.TypedArrayRemoteValue\n    | Script.ArrayBufferRemoteValue\n    | Script.NodeListRemoteValue\n    | Script.HtmlCollectionRemoteValue\n    | Script.NodeRemoteValue\n    | Script.WindowProxyRemoteValue;\n}\nexport namespace Script {\n  export type RemoteReference =\n    | Script.SharedReference\n    | Script.RemoteObjectReference;\n}\nexport namespace Script {\n  export type SharedReference = {\n    sharedId: Script.SharedId;\n    handle?: Script.Handle;\n  } & Extensible;\n}\nexport namespace Script {\n  export type RemoteObjectReference = {\n    handle: Script.Handle;\n    sharedId?: Script.SharedId;\n  } & Extensible;\n}\nexport namespace Script {\n  export type SymbolRemoteValue = {\n    type: 'symbol';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n  };\n}\nexport namespace Script {\n  export type ArrayRemoteValue = {\n    type: 'array';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n    value?: Script.ListRemoteValue;\n  };\n}\nexport namespace Script {\n  export type ObjectRemoteValue = {\n    type: 'object';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n    value?: Script.MappingRemoteValue;\n  };\n}\nexport namespace Script {\n  export type FunctionRemoteValue = {\n    type: 'function';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n  };\n}\nexport namespace Script {\n  export type RegExpRemoteValue = Script.RegExpLocalValue & {\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n  };\n}\nexport namespace Script {\n  export type DateRemoteValue = Script.DateLocalValue & {\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n  };\n}\nexport namespace Script {\n  export type MapRemoteValue = {\n    type: 'map';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n    value?: Script.MappingRemoteValue;\n  };\n}\nexport namespace Script {\n  export type SetRemoteValue = {\n    type: 'set';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n    value?: Script.ListRemoteValue;\n  };\n}\nexport namespace Script {\n  export type WeakMapRemoteValue = {\n    type: 'weakmap';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n  };\n}\nexport namespace Script {\n  export type WeakSetRemoteValue = {\n    type: 'weakset';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n  };\n}\nexport namespace Script {\n  export type GeneratorRemoteValue = {\n    type: 'generator';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n  };\n}\nexport namespace Script {\n  export type ErrorRemoteValue = {\n    type: 'error';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n  };\n}\nexport namespace Script {\n  export type ProxyRemoteValue = {\n    type: 'proxy';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n  };\n}\nexport namespace Script {\n  export type PromiseRemoteValue = {\n    type: 'promise';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n  };\n}\nexport namespace Script {\n  export type TypedArrayRemoteValue = {\n    type: 'typedarray';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n  };\n}\nexport namespace Script {\n  export type ArrayBufferRemoteValue = {\n    type: 'arraybuffer';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n  };\n}\nexport namespace Script {\n  export type NodeListRemoteValue = {\n    type: 'nodelist';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n    value?: Script.ListRemoteValue;\n  };\n}\nexport namespace Script {\n  export type HtmlCollectionRemoteValue = {\n    type: 'htmlcollection';\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n    value?: Script.ListRemoteValue;\n  };\n}\nexport namespace Script {\n  export type NodeRemoteValue = {\n    type: 'node';\n    sharedId?: Script.SharedId;\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n    value?: Script.NodeProperties;\n  };\n}\nexport namespace Script {\n  export type NodeProperties = {\n    nodeType: JsUint;\n    childNodeCount: JsUint;\n    attributes?: {\n      [key: string]: string;\n    };\n    children?: [...Script.NodeRemoteValue[]];\n    localName?: string;\n    mode?: 'open' | 'closed';\n    namespaceURI?: string;\n    nodeValue?: string;\n    shadowRoot?: Script.NodeRemoteValue | null;\n  };\n}\nexport namespace Script {\n  export type WindowProxyRemoteValue = {\n    type: 'window';\n    value: Script.WindowProxyProperties;\n    handle?: Script.Handle;\n    internalId?: Script.InternalId;\n  };\n}\nexport namespace Script {\n  export type WindowProxyProperties = {\n    context: BrowsingContext.BrowsingContext;\n  };\n}\nexport namespace Script {\n  export const enum ResultOwnership {\n    Root = 'root',\n    None = 'none',\n  }\n}\nexport namespace Script {\n  export type SerializationOptions = {\n    /**\n     * @defaultValue `0`\n     */\n    maxDomDepth?: JsUint | null;\n    /**\n     * @defaultValue `null`\n     */\n    maxObjectDepth?: JsUint | null;\n    /**\n     * @defaultValue `\"none\"`\n     */\n    includeShadowTree?: 'none' | 'open' | 'all';\n  };\n}\nexport namespace Script {\n  export type SharedId = string;\n}\nexport namespace Script {\n  export type StackFrame = {\n    columnNumber: JsUint;\n    functionName: string;\n    lineNumber: JsUint;\n    url: string;\n  };\n}\nexport namespace Script {\n  export type StackTrace = {\n    callFrames: [...Script.StackFrame[]];\n  };\n}\nexport namespace Script {\n  export type Source = {\n    realm: Script.Realm;\n    context?: BrowsingContext.BrowsingContext;\n  };\n}\nexport namespace Script {\n  export type RealmTarget = {\n    realm: Script.Realm;\n  };\n}\nexport namespace Script {\n  export type ContextTarget = {\n    context: BrowsingContext.BrowsingContext;\n    sandbox?: string;\n  };\n}\nexport namespace Script {\n  export type Target = Script.ContextTarget | Script.RealmTarget;\n}\nexport namespace Script {\n  export type AddPreloadScript = {\n    method: 'script.addPreloadScript';\n    params: Script.AddPreloadScriptParameters;\n  };\n}\nexport namespace Script {\n  export type AddPreloadScriptParameters = {\n    functionDeclaration: string;\n    arguments?: [...Script.ChannelValue[]];\n    contexts?: [\n      BrowsingContext.BrowsingContext,\n      ...BrowsingContext.BrowsingContext[],\n    ];\n    userContexts?: [Browser.UserContext, ...Browser.UserContext[]];\n    sandbox?: string;\n  };\n}\nexport namespace Script {\n  export type AddPreloadScriptResult = {\n    script: Script.PreloadScript;\n  };\n}\nexport namespace Script {\n  export type Disown = {\n    method: 'script.disown';\n    params: Script.DisownParameters;\n  };\n}\nexport namespace Script {\n  export type DisownParameters = {\n    handles: [...Script.Handle[]];\n    target: Script.Target;\n  };\n}\nexport namespace Script {\n  export type CallFunctionParameters = {\n    functionDeclaration: string;\n    awaitPromise: boolean;\n    target: Script.Target;\n    arguments?: [...Script.LocalValue[]];\n    resultOwnership?: Script.ResultOwnership;\n    serializationOptions?: Script.SerializationOptions;\n    this?: Script.LocalValue;\n    /**\n     * @defaultValue `false`\n     */\n    userActivation?: boolean;\n  };\n}\nexport namespace Script {\n  export type CallFunction = {\n    method: 'script.callFunction';\n    params: Script.CallFunctionParameters;\n  };\n}\nexport namespace Script {\n  export type Evaluate = {\n    method: 'script.evaluate';\n    params: Script.EvaluateParameters;\n  };\n}\nexport namespace Script {\n  export type EvaluateParameters = {\n    expression: string;\n    target: Script.Target;\n    awaitPromise: boolean;\n    resultOwnership?: Script.ResultOwnership;\n    serializationOptions?: Script.SerializationOptions;\n    /**\n     * @defaultValue `false`\n     */\n    userActivation?: boolean;\n  };\n}\nexport namespace Script {\n  export type GetRealms = {\n    method: 'script.getRealms';\n    params: Script.GetRealmsParameters;\n  };\n}\nexport namespace Script {\n  export type GetRealmsParameters = {\n    context?: BrowsingContext.BrowsingContext;\n    type?: Script.RealmType;\n  };\n}\nexport namespace Script {\n  export type GetRealmsResult = {\n    realms: [...Script.RealmInfo[]];\n  };\n}\nexport namespace Script {\n  export type RemovePreloadScript = {\n    method: 'script.removePreloadScript';\n    params: Script.RemovePreloadScriptParameters;\n  };\n}\nexport namespace Script {\n  export type RemovePreloadScriptParameters = {\n    script: Script.PreloadScript;\n  };\n}\nexport namespace Script {\n  export type MessageParameters = {\n    channel: Script.Channel;\n    data: Script.RemoteValue;\n    source: Script.Source;\n  };\n}\nexport namespace Script {\n  export type RealmCreated = {\n    method: 'script.realmCreated';\n    params: Script.RealmInfo;\n  };\n}\nexport namespace Script {\n  export type Message = {\n    method: 'script.message';\n    params: Script.MessageParameters;\n  };\n}\nexport namespace Script {\n  export type RealmDestroyed = {\n    method: 'script.realmDestroyed';\n    params: Script.RealmDestroyedParameters;\n  };\n}\nexport namespace Script {\n  export type RealmDestroyedParameters = {\n    realm: Script.Realm;\n  };\n}\nexport type StorageCommand =\n  | Storage.DeleteCookies\n  | Storage.GetCookies\n  | Storage.SetCookie;\nexport type StorageResult =\n  | Storage.DeleteCookiesResult\n  | Storage.GetCookiesResult\n  | Storage.SetCookieResult;\nexport namespace Storage {\n  export type PartitionKey = {\n    userContext?: string;\n    sourceOrigin?: string;\n  } & Extensible;\n}\nexport namespace Storage {\n  export type GetCookies = {\n    method: 'storage.getCookies';\n    params: Storage.GetCookiesParameters;\n  };\n}\nexport namespace Storage {\n  export type CookieFilter = {\n    name?: string;\n    value?: Network.BytesValue;\n    domain?: string;\n    path?: string;\n    size?: JsUint;\n    httpOnly?: boolean;\n    secure?: boolean;\n    sameSite?: Network.SameSite;\n    expiry?: JsUint;\n  } & Extensible;\n}\nexport namespace Storage {\n  export type BrowsingContextPartitionDescriptor = {\n    type: 'context';\n    context: BrowsingContext.BrowsingContext;\n  };\n}\nexport namespace Storage {\n  export type StorageKeyPartitionDescriptor = {\n    type: 'storageKey';\n    userContext?: string;\n    sourceOrigin?: string;\n  } & Extensible;\n}\nexport namespace Storage {\n  export type PartitionDescriptor =\n    | Storage.BrowsingContextPartitionDescriptor\n    | Storage.StorageKeyPartitionDescriptor;\n}\nexport namespace Storage {\n  export type GetCookiesParameters = {\n    filter?: Storage.CookieFilter;\n    partition?: Storage.PartitionDescriptor;\n  };\n}\nexport namespace Storage {\n  export type GetCookiesResult = {\n    cookies: [...Network.Cookie[]];\n    partitionKey: Storage.PartitionKey;\n  };\n}\nexport namespace Storage {\n  export type SetCookie = {\n    method: 'storage.setCookie';\n    params: Storage.SetCookieParameters;\n  };\n}\nexport namespace Storage {\n  export type PartialCookie = {\n    name: string;\n    value: Network.BytesValue;\n    domain: string;\n    path?: string;\n    httpOnly?: boolean;\n    secure?: boolean;\n    sameSite?: Network.SameSite;\n    expiry?: JsUint;\n  } & Extensible;\n}\nexport namespace Storage {\n  export type SetCookieParameters = {\n    cookie: Storage.PartialCookie;\n    partition?: Storage.PartitionDescriptor;\n  };\n}\nexport namespace Storage {\n  export type SetCookieResult = {\n    partitionKey: Storage.PartitionKey;\n  };\n}\nexport namespace Storage {\n  export type DeleteCookies = {\n    method: 'storage.deleteCookies';\n    params: Storage.DeleteCookiesParameters;\n  };\n}\nexport namespace Storage {\n  export type DeleteCookiesParameters = {\n    filter?: Storage.CookieFilter;\n    partition?: Storage.PartitionDescriptor;\n  };\n}\nexport namespace Storage {\n  export type DeleteCookiesResult = {\n    partitionKey: Storage.PartitionKey;\n  };\n}\nexport type LogEvent = Log.EntryAdded;\nexport namespace Log {\n  export const enum Level {\n    Debug = 'debug',\n    Info = 'info',\n    Warn = 'warn',\n    Error = 'error',\n  }\n}\nexport namespace Log {\n  export type Entry =\n    | Log.GenericLogEntry\n    | Log.ConsoleLogEntry\n    | Log.JavascriptLogEntry;\n}\nexport namespace Log {\n  export type BaseLogEntry = {\n    level: Log.Level;\n    source: Script.Source;\n    text: string | null;\n    timestamp: JsUint;\n    stackTrace?: Script.StackTrace;\n  };\n}\nexport namespace Log {\n  export type GenericLogEntry = Log.BaseLogEntry & {\n    type: string;\n  };\n}\nexport namespace Log {\n  export type ConsoleLogEntry = Log.BaseLogEntry & {\n    type: 'console';\n    method: string;\n    args: [...Script.RemoteValue[]];\n  };\n}\nexport namespace Log {\n  export type JavascriptLogEntry = Log.BaseLogEntry & {\n    type: 'javascript';\n  };\n}\nexport namespace Log {\n  export type EntryAdded = {\n    method: 'log.entryAdded';\n    params: Log.Entry;\n  };\n}\nexport type InputCommand =\n  | Input.PerformActions\n  | Input.ReleaseActions\n  | Input.SetFiles;\nexport type InputEvent = Input.FileDialogOpened;\nexport namespace Input {\n  export type ElementOrigin = {\n    type: 'element';\n    element: Script.SharedReference;\n  };\n}\nexport namespace Input {\n  export type PerformActionsParameters = {\n    context: BrowsingContext.BrowsingContext;\n    actions: [...Input.SourceActions[]];\n  };\n}\nexport namespace Input {\n  export type NoneSourceActions = {\n    type: 'none';\n    id: string;\n    actions: [...Input.NoneSourceAction[]];\n  };\n}\nexport namespace Input {\n  export type KeySourceActions = {\n    type: 'key';\n    id: string;\n    actions: [...Input.KeySourceAction[]];\n  };\n}\nexport namespace Input {\n  export type PointerSourceActions = {\n    type: 'pointer';\n    id: string;\n    parameters?: Input.PointerParameters;\n    actions: [...Input.PointerSourceAction[]];\n  };\n}\nexport namespace Input {\n  export type PerformActions = {\n    method: 'input.performActions';\n    params: Input.PerformActionsParameters;\n  };\n}\nexport namespace Input {\n  export type SourceActions =\n    | Input.NoneSourceActions\n    | Input.KeySourceActions\n    | Input.PointerSourceActions\n    | Input.WheelSourceActions;\n}\nexport namespace Input {\n  export type NoneSourceAction = Input.PauseAction;\n}\nexport namespace Input {\n  export type KeySourceAction =\n    | Input.PauseAction\n    | Input.KeyDownAction\n    | Input.KeyUpAction;\n}\nexport namespace Input {\n  export const enum PointerType {\n    Mouse = 'mouse',\n    Pen = 'pen',\n    Touch = 'touch',\n  }\n}\nexport namespace Input {\n  export type PointerParameters = {\n    /**\n     * @defaultValue `\"mouse\"`\n     */\n    pointerType?: Input.PointerType;\n  };\n}\nexport namespace Input {\n  export type WheelSourceActions = {\n    type: 'wheel';\n    id: string;\n    actions: [...Input.WheelSourceAction[]];\n  };\n}\nexport namespace Input {\n  export type PointerSourceAction =\n    | Input.PauseAction\n    | Input.PointerDownAction\n    | Input.PointerUpAction\n    | Input.PointerMoveAction;\n}\nexport namespace Input {\n  export type WheelSourceAction = Input.PauseAction | Input.WheelScrollAction;\n}\nexport namespace Input {\n  export type PauseAction = {\n    type: 'pause';\n    duration?: JsUint;\n  };\n}\nexport namespace Input {\n  export type KeyDownAction = {\n    type: 'keyDown';\n    value: string;\n  };\n}\nexport namespace Input {\n  export type KeyUpAction = {\n    type: 'keyUp';\n    value: string;\n  };\n}\nexport namespace Input {\n  export type PointerUpAction = {\n    type: 'pointerUp';\n    button: JsUint;\n  };\n}\nexport namespace Input {\n  export type PointerDownAction = {\n    type: 'pointerDown';\n    button: JsUint;\n  } & Input.PointerCommonProperties;\n}\nexport namespace Input {\n  export type PointerMoveAction = {\n    type: 'pointerMove';\n    x: number;\n    y: number;\n    duration?: JsUint;\n    origin?: Input.Origin;\n  } & Input.PointerCommonProperties;\n}\nexport namespace Input {\n  export type WheelScrollAction = {\n    type: 'scroll';\n    x: JsInt;\n    y: JsInt;\n    deltaX: JsInt;\n    deltaY: JsInt;\n    duration?: JsUint;\n    /**\n     * @defaultValue `\"viewport\"`\n     */\n    origin?: Input.Origin;\n  };\n}\nexport namespace Input {\n  export type PointerCommonProperties = {\n    /**\n     * @defaultValue `1`\n     */\n    width?: JsUint;\n    /**\n     * @defaultValue `1`\n     */\n    height?: JsUint;\n    /**\n     * @defaultValue `0`\n     */\n    pressure?: number;\n    /**\n     * @defaultValue `0`\n     */\n    tangentialPressure?: number;\n    /**\n     * Must be between `0` and `359`, inclusive.\n     *\n     * @defaultValue `0`\n     */\n    twist?: number;\n    /**\n     * Must be between `0` and `1.5707963267948966`, inclusive.\n     *\n     * @defaultValue `0`\n     */\n    altitudeAngle?: number;\n    /**\n     * Must be between `0` and `6.283185307179586`, inclusive.\n     *\n     * @defaultValue `0`\n     */\n    azimuthAngle?: number;\n  };\n}\nexport namespace Input {\n  export type Origin = 'viewport' | 'pointer' | Input.ElementOrigin;\n}\nexport namespace Input {\n  export type ReleaseActions = {\n    method: 'input.releaseActions';\n    params: Input.ReleaseActionsParameters;\n  };\n}\nexport namespace Input {\n  export type ReleaseActionsParameters = {\n    context: BrowsingContext.BrowsingContext;\n  };\n}\nexport namespace Input {\n  export type SetFiles = {\n    method: 'input.setFiles';\n    params: Input.SetFilesParameters;\n  };\n}\nexport namespace Input {\n  export type SetFilesParameters = {\n    context: BrowsingContext.BrowsingContext;\n    element: Script.SharedReference;\n    files: [...string[]];\n  };\n}\nexport namespace Input {\n  export type FileDialogOpened = {\n    method: 'input.fileDialogOpened';\n    params: Input.FileDialogInfo;\n  };\n}\nexport namespace Input {\n  export type FileDialogInfo = {\n    context: BrowsingContext.BrowsingContext;\n    element?: Script.SharedReference;\n    multiple: boolean;\n  };\n}\nexport type WebExtensionCommand = WebExtension.Install | WebExtension.Uninstall;\nexport type WebExtensionResult = WebExtension.InstallResult;\nexport namespace WebExtension {\n  export type Extension = string;\n}\nexport namespace WebExtension {\n  export type InstallParameters = {\n    extensionData: WebExtension.ExtensionData;\n  };\n}\nexport namespace WebExtension {\n  export type Install = {\n    method: 'webExtension.install';\n    params: WebExtension.InstallParameters;\n  };\n}\nexport namespace WebExtension {\n  export type ExtensionData =\n    | WebExtension.ExtensionArchivePath\n    | WebExtension.ExtensionBase64Encoded\n    | WebExtension.ExtensionPath;\n}\nexport namespace WebExtension {\n  export type ExtensionPath = {\n    type: 'path';\n    path: string;\n  };\n}\nexport namespace WebExtension {\n  export type ExtensionArchivePath = {\n    type: 'archivePath';\n    path: string;\n  };\n}\nexport namespace WebExtension {\n  export type ExtensionBase64Encoded = {\n    type: 'base64';\n    value: string;\n  };\n}\nexport namespace WebExtension {\n  export type InstallResult = {\n    extension: WebExtension.Extension;\n  };\n}\nexport namespace WebExtension {\n  export type Uninstall = {\n    method: 'webExtension.uninstall';\n    params: WebExtension.UninstallParameters;\n  };\n}\nexport namespace WebExtension {\n  export type UninstallParameters = {\n    extension: WebExtension.Extension;\n  };\n}\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * Modifications copyright (c) Microsoft Corporation.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Copied from upstream: https://github.com/GoogleChromeLabs/chromium-bidi/blob/main/src/protocol/generated/webdriver-bidi-permissions.ts\n\n/**\n * THIS FILE IS AUTOGENERATED by cddlconv 0.1.6.\n * Run `node tools/generate-bidi-types.mjs` to regenerate.\n * @see https://github.com/w3c/webdriver-bidi/blob/master/index.bs\n */\n\nexport type PermissionsCommand = Permissions.SetPermission;\nexport namespace Permissions {\n  export type PermissionDescriptor = {\n    name: string;\n  };\n}\nexport namespace Permissions {\n  export const enum PermissionState {\n    Granted = 'granted',\n    Denied = 'denied',\n    Prompt = 'prompt',\n  }\n}\nexport namespace Permissions {\n  export type SetPermission = {\n    method: 'permissions.setPermission';\n    params: Permissions.SetPermissionParameters;\n  };\n}\nexport namespace Permissions {\n  export type SetPermissionParameters = {\n    descriptor: Permissions.PermissionDescriptor;\n    state: Permissions.PermissionState;\n    origin: string;\n    userContext?: string;\n  };\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { eventsHelper } from '../utils/eventsHelper';\nimport { parseRawCookie } from '../cookieStore';\nimport * as network from '../network';\nimport * as bidi from './third_party/bidiProtocol';\n\nimport type { RegisteredListener } from '../utils/eventsHelper';\nimport type * as frames from '../frames';\nimport type { Page } from '../page';\nimport type * as types from '../types';\nimport type { BidiSession } from './bidiConnection';\n\n\nexport class BidiNetworkManager {\n  private readonly _session: BidiSession;\n  private readonly _requests: Map<string, BidiRequest>;\n  private readonly _page: Page;\n  private readonly _eventListeners: RegisteredListener[];\n  private readonly _onNavigationResponseStarted: (params: bidi.Network.ResponseStartedParameters) => void;\n  private _userRequestInterceptionEnabled: boolean = false;\n  private _protocolRequestInterceptionEnabled: boolean = false;\n  private _credentials: types.Credentials | undefined;\n  private _intercepId: bidi.Network.Intercept | undefined;\n\n  constructor(bidiSession: BidiSession, page: Page, onNavigationResponseStarted: (params: bidi.Network.ResponseStartedParameters) => void) {\n    this._session = bidiSession;\n    this._requests = new Map();\n    this._page = page;\n    this._onNavigationResponseStarted = onNavigationResponseStarted;\n    this._eventListeners = [\n      eventsHelper.addEventListener(bidiSession, 'network.beforeRequestSent', this._onBeforeRequestSent.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'network.responseStarted', this._onResponseStarted.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'network.responseCompleted', this._onResponseCompleted.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'network.fetchError', this._onFetchError.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'network.authRequired', this._onAuthRequired.bind(this)),\n    ];\n  }\n\n  dispose() {\n    eventsHelper.removeEventListeners(this._eventListeners);\n  }\n\n  private _onBeforeRequestSent(param: bidi.Network.BeforeRequestSentParameters) {\n    if (param.request.url.startsWith('data:'))\n      return;\n    const redirectedFrom = param.redirectCount ? (this._requests.get(param.request.request) || null) : null;\n    const frame = redirectedFrom ? redirectedFrom.request.frame() : (param.context ? this._page.frameManager.frame(param.context) : null);\n    if (!frame)\n      return;\n    if (redirectedFrom)\n      this._requests.delete(redirectedFrom._id);\n    let route;\n    if (param.intercepts) {\n      // We do not support intercepting redirects.\n      if (redirectedFrom) {\n        let params = {};\n        if (redirectedFrom._originalRequestRoute?._alreadyContinuedHeaders)\n          params = toBidiRequestHeaders(redirectedFrom._originalRequestRoute._alreadyContinuedHeaders ?? []);\n\n        this._session.sendMayFail('network.continueRequest', {\n          request: param.request.request,\n          ...params,\n        });\n      } else {\n        route = new BidiRouteImpl(this._session, param.request.request);\n      }\n    }\n    const request = new BidiRequest(frame, redirectedFrom, param, route);\n    this._requests.set(request._id, request);\n    this._page.frameManager.requestStarted(request.request, route);\n  }\n\n  private _onResponseStarted(params: bidi.Network.ResponseStartedParameters) {\n    const request = this._requests.get(params.request.request);\n    if (!request)\n      return;\n    const getResponseBody = async () => {\n      throw new Error(`Response body is not available for requests in Bidi`);\n    };\n    const timings = params.request.timings;\n    const startTime = timings.requestTime;\n    function relativeToStart(time: number): number {\n      if (!time)\n        return -1;\n      return (time - startTime);\n    }\n    const timing: network.ResourceTiming = {\n      startTime: startTime,\n      requestStart: relativeToStart(timings.requestStart),\n      responseStart: relativeToStart(timings.responseStart),\n      domainLookupStart: relativeToStart(timings.dnsStart),\n      domainLookupEnd: relativeToStart(timings.dnsEnd),\n      connectStart: relativeToStart(timings.connectStart),\n      secureConnectionStart: relativeToStart(timings.tlsStart),\n      connectEnd: relativeToStart(timings.connectEnd),\n    };\n    const response = new network.Response(request.request, params.response.status, params.response.statusText, fromBidiHeaders(params.response.headers), timing, getResponseBody, false);\n    response._serverAddrFinished();\n    response._securityDetailsFinished();\n    // \"raw\" headers are the same as \"provisional\" headers in Bidi.\n    response.setRawResponseHeaders(null);\n    response.setResponseHeadersSize(params.response.headersSize);\n    this._page.frameManager.requestReceivedResponse(response);\n    if (params.navigation)\n      this._onNavigationResponseStarted(params);\n  }\n\n  private _onResponseCompleted(params: bidi.Network.ResponseCompletedParameters) {\n    const request = this._requests.get(params.request.request);\n    if (!request)\n      return;\n    const response = request.request._existingResponse()!;\n    // TODO: body size is the encoded size\n    response.setTransferSize(params.response.bodySize);\n    response.setEncodedBodySize(params.response.bodySize);\n\n    // Keep redirected requests in the map for future reference as redirectedFrom.\n    const isRedirected = response.status() >= 300 && response.status() <= 399;\n    const responseEndTime = params.request.timings.responseEnd - response.timing().startTime;\n    if (isRedirected) {\n      response._requestFinished(responseEndTime);\n    } else {\n      this._requests.delete(request._id);\n      response._requestFinished(responseEndTime);\n    }\n    response._setHttpVersion(params.response.protocol);\n    this._page.frameManager.reportRequestFinished(request.request, response);\n\n  }\n\n  private _onFetchError(params: bidi.Network.FetchErrorParameters) {\n    const request = this._requests.get(params.request.request);\n    if (!request)\n      return;\n    this._requests.delete(request._id);\n    const response = request.request._existingResponse();\n    if (response) {\n      response.setTransferSize(null);\n      response.setEncodedBodySize(null);\n      response._requestFinished(-1);\n    }\n    request.request._setFailureText(params.errorText);\n    // TODO: support canceled flag\n    this._page.frameManager.requestFailed(request.request, params.errorText === 'NS_BINDING_ABORTED');\n  }\n\n  private _onAuthRequired(params: bidi.Network.AuthRequiredParameters) {\n    const isBasic = params.response.authChallenges?.some(challenge => challenge.scheme.startsWith('Basic'));\n    const credentials = this._page.browserContext._options.httpCredentials;\n    if (isBasic && credentials) {\n      this._session.sendMayFail('network.continueWithAuth', {\n        request: params.request.request,\n        action: 'provideCredentials',\n        credentials: {\n          type: 'password',\n          username: credentials.username,\n          password: credentials.password,\n        }\n      });\n    } else {\n      this._session.sendMayFail('network.continueWithAuth', {\n        request: params.request.request,\n        action: 'default',\n      });\n    }\n  }\n\n  async setRequestInterception(value: boolean) {\n    this._userRequestInterceptionEnabled = value;\n    await this._updateProtocolRequestInterception();\n  }\n\n  async setCredentials(credentials: types.Credentials | undefined) {\n    this._credentials = credentials;\n    await this._updateProtocolRequestInterception();\n  }\n\n  async _updateProtocolRequestInterception(initial?: boolean) {\n    const enabled = this._userRequestInterceptionEnabled || !!this._credentials;\n    if (enabled === this._protocolRequestInterceptionEnabled)\n      return;\n    this._protocolRequestInterceptionEnabled = enabled;\n    if (initial && !enabled)\n      return;\n    const cachePromise = this._session.send('network.setCacheBehavior', { cacheBehavior: enabled ? 'bypass' : 'default' });\n    let interceptPromise = Promise.resolve<any>(undefined);\n    if (enabled) {\n      interceptPromise = this._session.send('network.addIntercept', {\n        phases: [bidi.Network.InterceptPhase.AuthRequired, bidi.Network.InterceptPhase.BeforeRequestSent],\n        urlPatterns: [{ type: 'pattern' }],\n        // urlPatterns: [{ type: 'string', pattern: '*' }],\n      }).then(r => {\n        this._intercepId = r.intercept;\n      });\n    } else if (this._intercepId) {\n      interceptPromise = this._session.send('network.removeIntercept', { intercept: this._intercepId });\n      this._intercepId = undefined;\n    }\n    await Promise.all([cachePromise, interceptPromise]);\n  }\n}\n\n\nclass BidiRequest {\n  readonly request: network.Request;\n  readonly _id: string;\n  private _redirectedTo: BidiRequest | undefined;\n  // Only first request in the chain can be intercepted, so this will\n  // store the first and only Route in the chain (if any).\n  _originalRequestRoute: BidiRouteImpl | undefined;\n\n  constructor(frame: frames.Frame, redirectedFrom: BidiRequest | null, payload: bidi.Network.BeforeRequestSentParameters, route: BidiRouteImpl | undefined) {\n    this._id = payload.request.request;\n    if (redirectedFrom)\n      redirectedFrom._redirectedTo = this;\n    // TODO: missing in the spec?\n    const postDataBuffer = null;\n    this.request = new network.Request(frame._page.browserContext, frame, null, redirectedFrom ? redirectedFrom.request : null, payload.navigation ?? undefined,\n        payload.request.url, 'other', payload.request.method, postDataBuffer, fromBidiHeaders(payload.request.headers));\n    // \"raw\" headers are the same as \"provisional\" headers in Bidi.\n    this.request.setRawRequestHeaders(null);\n    this.request._setBodySize(payload.request.bodySize || 0);\n    this._originalRequestRoute = route ?? redirectedFrom?._originalRequestRoute;\n    route?._setRequest(this.request);\n  }\n\n  _finalRequest(): BidiRequest {\n    let request: BidiRequest = this;\n    while (request._redirectedTo)\n      request = request._redirectedTo;\n    return request;\n  }\n}\n\nclass BidiRouteImpl implements network.RouteDelegate {\n  private _requestId: bidi.Network.Request;\n  private _session: BidiSession;\n  private _request!: network.Request;\n  _alreadyContinuedHeaders: types.HeadersArray | undefined;\n\n  constructor(session: BidiSession, requestId: bidi.Network.Request) {\n    this._session = session;\n    this._requestId = requestId;\n  }\n\n  _setRequest(request: network.Request) {\n    this._request = request;\n  }\n\n  async continue(overrides: types.NormalizedContinueOverrides) {\n    // Firefox does not update content-length header.\n    let headers = overrides.headers || this._request.headers();\n    if (overrides.postData && headers) {\n      headers = headers.map(header => {\n        if (header.name.toLowerCase() === 'content-length')\n          return { name: header.name, value: overrides.postData!.byteLength.toString() };\n        return header;\n      });\n    }\n    this._alreadyContinuedHeaders = headers;\n    await this._session.sendMayFail('network.continueRequest', {\n      request: this._requestId,\n      url: overrides.url,\n      method: overrides.method,\n      ...toBidiRequestHeaders(this._alreadyContinuedHeaders),\n      body: overrides.postData ? { type: 'base64', value: Buffer.from(overrides.postData).toString('base64') } : undefined,\n    });\n  }\n\n  async fulfill(response: types.NormalizedFulfillResponse) {\n    const base64body = response.isBase64 ? response.body : Buffer.from(response.body).toString('base64');\n    await this._session.sendMayFail('network.provideResponse', {\n      request: this._requestId,\n      statusCode: response.status,\n      reasonPhrase: network.statusText(response.status),\n      ...toBidiResponseHeaders(response.headers),\n      body: { type: 'base64', value: base64body },\n    });\n  }\n\n  async abort(errorCode: string) {\n    await this._session.sendMayFail('network.failRequest', {\n      request: this._requestId\n    });\n  }\n}\n\nfunction fromBidiHeaders(bidiHeaders: bidi.Network.Header[]): types.HeadersArray {\n  const result: types.HeadersArray = [];\n  for (const { name, value } of bidiHeaders)\n    result.push({ name, value: bidiBytesValueToString(value) });\n  return result;\n}\n\nfunction toBidiRequestHeaders(allHeaders: types.HeadersArray): { headers: bidi.Network.Header[] } {\n  const bidiHeaders = toBidiHeaders(allHeaders);\n  return { headers: bidiHeaders };\n}\n\nfunction toBidiResponseHeaders(headers: types.HeadersArray): { cookies: bidi.Network.SetCookieHeader[], headers: bidi.Network.Header[] } {\n  const setCookieHeaders = headers.filter(h => h.name.toLowerCase() === 'set-cookie');\n  const otherHeaders = headers.filter(h => h.name.toLowerCase() !== 'set-cookie');\n  const rawCookies = setCookieHeaders.map(h => parseRawCookie(h.value));\n  const cookies: bidi.Network.SetCookieHeader[] = rawCookies.filter(Boolean).map(c => {\n    return {\n      ...c!,\n      value: { type: 'string', value: c!.value },\n      sameSite: toBidiSameSite(c!.sameSite),\n    };\n  });\n  return { cookies, headers: toBidiHeaders(otherHeaders) };\n}\n\nfunction toBidiHeaders(headers: types.HeadersArray): bidi.Network.Header[] {\n  return headers.map(({ name, value }) => ({ name, value: { type: 'string', value } }));\n}\n\nexport function bidiBytesValueToString(value: bidi.Network.BytesValue): string {\n  if (value.type === 'string')\n    return value.value;\n  if (value.type === 'base64')\n    return Buffer.from(value.type, 'base64').toString('binary');\n  return 'unknown value type: ' + (value as any).type;\n\n}\n\nfunction toBidiSameSite(sameSite?: 'Strict' | 'Lax' | 'None'): bidi.Network.SameSite | undefined {\n  if (!sameSite)\n    return undefined;\n  if (sameSite === 'Strict')\n    return bidi.Network.SameSite.Strict;\n  if (sameSite === 'Lax')\n    return bidi.Network.SameSite.Lax;\n  return bidi.Network.SameSite.None;\n}\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * Modifications copyright (c) Microsoft Corporation.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Copied from upstream: https://github.com/puppeteer/puppeteer/blob/main/packages/puppeteer-core/src/bidi/Deserializer.ts\n\nimport type * as Bidi from './bidiProtocol';\n\n/* eslint-disable object-curly-spacing */\n\n/**\n * @internal\n */\nexport class BidiDeserializer {\n  static deserialize(result: Bidi.Script.RemoteValue): any {\n    if (!result)\n      return undefined;\n\n    switch (result.type) {\n      case 'array':\n        return result.value?.map(value => {\n          return BidiDeserializer.deserialize(value);\n        });\n      case 'set':\n        return result.value?.reduce((acc: Set<unknown>, value) => {\n          return acc.add(BidiDeserializer.deserialize(value));\n        }, new Set());\n      case 'object':\n        return result.value?.reduce((acc: Record<any, unknown>, tuple) => {\n          const {key, value} = BidiDeserializer._deserializeTuple(tuple);\n          acc[key as any] = value;\n          return acc;\n        }, {});\n      case 'map':\n        return result.value?.reduce((acc: Map<unknown, unknown>, tuple) => {\n          const {key, value} = BidiDeserializer._deserializeTuple(tuple);\n          return acc.set(key, value);\n        }, new Map());\n      case 'promise':\n        return {};\n      case 'regexp':\n        return new RegExp(result.value.pattern, result.value.flags);\n      case 'date':\n        return new Date(result.value);\n      case 'undefined':\n        return undefined;\n      case 'null':\n        return null;\n      case 'number':\n        return BidiDeserializer._deserializeNumber(result.value);\n      case 'bigint':\n        return BigInt(result.value);\n      case 'boolean':\n        return Boolean(result.value);\n      case 'string':\n        return result.value;\n    }\n\n    throw new Error(`Deserialization of type ${result.type} not supported.`);\n  }\n\n  static _deserializeNumber(value: Bidi.Script.SpecialNumber | number): number {\n    switch (value) {\n      case '-0':\n        return -0;\n      case 'NaN':\n        return NaN;\n      case 'Infinity':\n        return Infinity;\n      case '-Infinity':\n        return -Infinity;\n      default:\n        return value;\n    }\n  }\n\n  static _deserializeTuple([serializedKey, serializedValue]: [\n    Bidi.Script.RemoteValue | string,\n    Bidi.Script.RemoteValue,\n  ]): {key: unknown; value: unknown} {\n    const key =\n      typeof serializedKey === 'string'\n        ? serializedKey\n        : BidiDeserializer.deserialize(serializedKey);\n    const value = BidiDeserializer.deserialize(serializedValue);\n\n    return {key, value};\n  }\n}\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * Modifications copyright (c) Microsoft Corporation.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Copied from upstream: https://github.com/puppeteer/puppeteer/blob/main/packages/puppeteer-core/src/bidi/Serializer.ts\n\nimport type * as Bidi from './bidiProtocol';\n\n/* eslint-disable curly, indent */\n\n/**\n * @internal\n */\nclass UnserializableError extends Error {}\n\n/**\n * @internal\n */\nexport class BidiSerializer {\n  static serialize(arg: unknown): Bidi.Script.LocalValue {\n    switch (typeof arg) {\n      case 'symbol':\n      case 'function':\n        throw new UnserializableError(`Unable to serializable ${typeof arg}`);\n      case 'object':\n        return BidiSerializer._serializeObject(arg);\n\n      case 'undefined':\n        return {\n          type: 'undefined',\n        };\n      case 'number':\n        return BidiSerializer._serializeNumber(arg);\n      case 'bigint':\n        return {\n          type: 'bigint',\n          value: arg.toString(),\n        };\n      case 'string':\n        return {\n          type: 'string',\n          value: arg,\n        };\n      case 'boolean':\n        return {\n          type: 'boolean',\n          value: arg,\n        };\n    }\n  }\n\n  static _serializeNumber(arg: number): Bidi.Script.LocalValue {\n    let value: Bidi.Script.SpecialNumber | number;\n    if (Object.is(arg, -0)) {\n      value = '-0';\n    } else if (Object.is(arg, Infinity)) {\n      value = 'Infinity';\n    } else if (Object.is(arg, -Infinity)) {\n      value = '-Infinity';\n    } else if (Object.is(arg, NaN)) {\n      value = 'NaN';\n    } else {\n      value = arg;\n    }\n    return {\n      type: 'number',\n      value,\n    };\n  }\n\n  static _serializeObject(arg: object | null): Bidi.Script.LocalValue {\n    if (arg === null) {\n      return {\n        type: 'null',\n      };\n    } else if (Array.isArray(arg)) {\n      const parsedArray = arg.map(subArg => {\n        return BidiSerializer.serialize(subArg);\n      });\n\n      return {\n        type: 'array',\n        value: parsedArray,\n      };\n    } else if (isPlainObject(arg)) {\n      try {\n        JSON.stringify(arg);\n      } catch (error) {\n        if (\n          error instanceof TypeError &&\n          error.message.startsWith('Converting circular structure to JSON')\n        ) {\n          error.message += ' Recursive objects are not allowed.';\n        }\n        throw error;\n      }\n\n      const parsedObject: Bidi.Script.MappingLocalValue = [];\n      for (const key in arg) {\n        parsedObject.push([BidiSerializer.serialize(key), BidiSerializer.serialize(arg[key])]);\n      }\n\n      return {\n        type: 'object',\n        value: parsedObject,\n      };\n    } else if (isRegExp(arg)) {\n      return {\n        type: 'regexp',\n        value: {\n          pattern: arg.source,\n          flags: arg.flags,\n        },\n      };\n    } else if (isDate(arg)) {\n      return {\n        type: 'date',\n        value: arg.toISOString(),\n      };\n    }\n\n    throw new UnserializableError(\n      'Custom object serialization not possible. Use plain objects instead.'\n    );\n  }\n}\n\n/**\n * @internal\n */\nexport const isPlainObject = (obj: unknown): obj is Record<any, unknown> => {\n  return typeof obj === 'object' && obj?.constructor === Object;\n};\n\n/**\n * @internal\n */\nexport const isRegExp = (obj: unknown): obj is RegExp => {\n  return typeof obj === 'object' && obj?.constructor === RegExp;\n};\n\n/**\n * @internal\n */\nexport const isDate = (obj: unknown): obj is Date => {\n  return typeof obj === 'object' && obj?.constructor === Date;\n};\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '../../utils';\nimport { parseEvaluationResultValue } from '../../utils/isomorphic/utilityScriptSerializers';\nimport * as js from '../javascript';\nimport * as dom from '../dom';\nimport { BidiDeserializer } from './third_party/bidiDeserializer';\nimport * as bidi from './third_party/bidiProtocol';\nimport { BidiSerializer } from './third_party/bidiSerializer';\n\nimport type { BidiSession } from './bidiConnection';\n\nexport class BidiExecutionContext implements js.ExecutionContextDelegate {\n  private readonly _session: BidiSession;\n  readonly _target: bidi.Script.Target;\n\n  constructor(session: BidiSession, realmInfo: bidi.Script.RealmInfo) {\n    this._session = session;\n    if (realmInfo.type === 'window') {\n      // Simple realm does not seem to work for Window contexts.\n      this._target = {\n        context: realmInfo.context,\n        sandbox: realmInfo.sandbox,\n      };\n    } else {\n      this._target = {\n        realm: realmInfo.realm\n      };\n    }\n  }\n\n  async rawEvaluateJSON(expression: string): Promise<any> {\n    const response = await this._session.send('script.evaluate', {\n      expression,\n      target: this._target,\n      serializationOptions: {\n        maxObjectDepth: 10,\n        maxDomDepth: 10,\n      },\n      awaitPromise: true,\n      userActivation: true,\n    });\n    if (response.type === 'success')\n      return BidiDeserializer.deserialize(response.result);\n    if (response.type === 'exception')\n      throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\\nFull val: ' + JSON.stringify(response.exceptionDetails));\n    throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));\n  }\n\n  async rawEvaluateHandle(context: js.ExecutionContext, expression: string): Promise<js.JSHandle> {\n    const response = await this._session.send('script.evaluate', {\n      expression,\n      target: this._target,\n      resultOwnership: bidi.Script.ResultOwnership.Root, // Necessary for the handle to be returned.\n      serializationOptions: { maxObjectDepth: 0, maxDomDepth: 0 },\n      awaitPromise: true,\n      userActivation: true,\n    });\n    if (response.type === 'success') {\n      if ('handle' in response.result)\n        return createHandle(context, response.result);\n      throw new js.JavaScriptErrorInEvaluate('Cannot get handle: ' + JSON.stringify(response.result));\n    }\n    if (response.type === 'exception')\n      throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\\nFull val: ' + JSON.stringify(response.exceptionDetails));\n    throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));\n  }\n\n  async evaluateWithArguments(functionDeclaration: string, returnByValue: boolean, utilityScript: js.JSHandle, values: any[], handles: js.JSHandle[]): Promise<any> {\n    const response = await this._session.send('script.callFunction', {\n      functionDeclaration,\n      target: this._target,\n      arguments: [\n        { handle: utilityScript._objectId! },\n        ...values.map(BidiSerializer.serialize),\n        ...handles.map(handle => ({ handle: handle._objectId! })),\n      ],\n      resultOwnership: returnByValue ? undefined : bidi.Script.ResultOwnership.Root, // Necessary for the handle to be returned.\n      serializationOptions: returnByValue ? {} : { maxObjectDepth: 0, maxDomDepth: 0 },\n      awaitPromise: true,\n      userActivation: true,\n    });\n    if (response.type === 'exception')\n      throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\\nFull val: ' + JSON.stringify(response.exceptionDetails));\n    if (response.type === 'success') {\n      if (returnByValue)\n        return parseEvaluationResultValue(BidiDeserializer.deserialize(response.result));\n      return createHandle(utilityScript._context, response.result);\n    }\n    throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));\n  }\n\n  async getProperties(handle: js.JSHandle): Promise<Map<string, js.JSHandle>> {\n    const names = await handle.evaluate(object => {\n      const names = [];\n      const descriptors = Object.getOwnPropertyDescriptors(object);\n      for (const name in descriptors) {\n        if (descriptors[name]?.enumerable)\n          names.push(name);\n      }\n      return names;\n    });\n    const values = await Promise.all(names.map(name => handle.evaluateHandle((object, name) => object[name], name)));\n    const map = new Map<string, js.JSHandle>();\n    for (let i = 0; i < names.length; i++)\n      map.set(names[i], values[i]);\n    return map;\n  }\n\n  async releaseHandle(handle: js.JSHandle): Promise<void> {\n    if (!handle._objectId)\n      return;\n    await this._session.send('script.disown', {\n      target: this._target,\n      handles: [handle._objectId],\n    });\n  }\n\n\n  async nodeIdForElementHandle(handle: dom.ElementHandle): Promise<bidi.Script.SharedReference> {\n    const shared = await this._remoteValueForReference({ handle: handle._objectId });\n    // TODO: store sharedId in the handle.\n    if (!('sharedId' in shared))\n      throw new Error('Element is not a node');\n    return {\n      sharedId: shared.sharedId!,\n    };\n  }\n\n  async remoteObjectForNodeId(context: dom.FrameExecutionContext, nodeId: bidi.Script.SharedReference): Promise<js.JSHandle> {\n    const result = await this._remoteValueForReference(nodeId, true);\n    if (!('handle' in result))\n      throw new Error('Can\\'t get remote object for nodeId');\n    return createHandle(context, result);\n  }\n\n  async contentFrameIdForFrame(handle: dom.ElementHandle) {\n    const contentWindow = await this._rawCallFunction('e => e.contentWindow', { handle: handle._objectId });\n    if (contentWindow?.type === 'window')\n      return contentWindow.value.context;\n    return null;\n  }\n\n  async frameIdForWindowHandle(handle: js.JSHandle): Promise<string | null> {\n    if (!handle._objectId)\n      throw new Error('JSHandle is not a DOM node handle');\n    const contentWindow = await this._remoteValueForReference({ handle: handle._objectId });\n    if (contentWindow.type === 'window')\n      return contentWindow.value.context;\n    return null;\n  }\n\n  private async _remoteValueForReference(reference: bidi.Script.RemoteReference, createHandle?: boolean) {\n    return await this._rawCallFunction('e => e', reference, createHandle);\n  }\n\n  private async _rawCallFunction(functionDeclaration: string, arg: bidi.Script.LocalValue, createHandle?: boolean): Promise<bidi.Script.RemoteValue> {\n    const response = await this._session.send('script.callFunction', {\n      functionDeclaration,\n      target: this._target,\n      arguments: [arg],\n      // \"Root\" is necessary for the handle to be returned.\n      resultOwnership: createHandle ? bidi.Script.ResultOwnership.Root : bidi.Script.ResultOwnership.None,\n      serializationOptions: { maxObjectDepth: 0, maxDomDepth: 0 },\n      awaitPromise: true,\n      userActivation: true,\n    });\n    if (response.type === 'exception')\n      throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\\nFull val: ' + JSON.stringify(response.exceptionDetails));\n    if (response.type === 'success')\n      return response.result;\n    throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));\n  }\n}\n\nfunction renderPreview(remoteObject: bidi.Script.RemoteValue): string | undefined {\n  if (remoteObject.type === 'undefined')\n    return 'undefined';\n  if (remoteObject.type === 'null')\n    return 'null';\n  if ('value' in remoteObject)\n    return String(remoteObject.value);\n  return `<${remoteObject.type}>`;\n}\n\nfunction remoteObjectValue(remoteObject: bidi.Script.RemoteValue): any {\n  if (remoteObject.type === 'undefined')\n    return undefined;\n  if (remoteObject.type === 'null')\n    return null;\n  if (remoteObject.type === 'number' && typeof remoteObject.value === 'string')\n    return js.parseUnserializableValue(remoteObject.value);\n  if ('value' in remoteObject)\n    return remoteObject.value;\n  return undefined;\n}\n\nexport function createHandle(context: js.ExecutionContext, remoteObject: bidi.Script.RemoteValue): js.JSHandle {\n  if (remoteObject.type === 'node') {\n    assert(context instanceof dom.FrameExecutionContext);\n    return new dom.ElementHandle(context, remoteObject.handle!);\n  }\n  const objectId = 'handle' in remoteObject ? remoteObject.handle : undefined;\n  return new js.JSHandle(context, remoteObject.type, renderPreview(remoteObject), objectId, remoteObjectValue(remoteObject));\n}\n","/**\n * @license\n * Copyright 2024 Google Inc.\n * Modifications copyright (c) Microsoft Corporation.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Copied from upstream: https://github.com/puppeteer/puppeteer/blob/main/packages/puppeteer-core/src/bidi/Input.ts\n\n/* eslint-disable curly */\n\nexport const getBidiKeyValue = (keyName: string) => {\n  switch (keyName) {\n    case '\\r':\n    case '\\n':\n      keyName = 'Enter';\n      break;\n  }\n  // Measures the number of code points rather than UTF-16 code units.\n  if ([...keyName].length === 1) {\n    return keyName;\n  }\n  switch (keyName) {\n    case 'Cancel':\n      return '\\uE001';\n    case 'Help':\n      return '\\uE002';\n    case 'Backspace':\n      return '\\uE003';\n    case 'Tab':\n      return '\\uE004';\n    case 'Clear':\n      return '\\uE005';\n    case 'Enter':\n      return '\\uE007';\n    case 'Shift':\n    case 'ShiftLeft':\n      return '\\uE008';\n    case 'Control':\n    case 'ControlLeft':\n      return '\\uE009';\n    case 'Alt':\n    case 'AltLeft':\n      return '\\uE00A';\n    case 'Pause':\n      return '\\uE00B';\n    case 'Escape':\n      return '\\uE00C';\n    case 'PageUp':\n      return '\\uE00E';\n    case 'PageDown':\n      return '\\uE00F';\n    case 'End':\n      return '\\uE010';\n    case 'Home':\n      return '\\uE011';\n    case 'ArrowLeft':\n      return '\\uE012';\n    case 'ArrowUp':\n      return '\\uE013';\n    case 'ArrowRight':\n      return '\\uE014';\n    case 'ArrowDown':\n      return '\\uE015';\n    case 'Insert':\n      return '\\uE016';\n    case 'Delete':\n      return '\\uE017';\n    case 'NumpadEqual':\n      return '\\uE019';\n    case 'Numpad0':\n      return '\\uE01A';\n    case 'Numpad1':\n      return '\\uE01B';\n    case 'Numpad2':\n      return '\\uE01C';\n    case 'Numpad3':\n      return '\\uE01D';\n    case 'Numpad4':\n      return '\\uE01E';\n    case 'Numpad5':\n      return '\\uE01F';\n    case 'Numpad6':\n      return '\\uE020';\n    case 'Numpad7':\n      return '\\uE021';\n    case 'Numpad8':\n      return '\\uE022';\n    case 'Numpad9':\n      return '\\uE023';\n    case 'NumpadMultiply':\n      return '\\uE024';\n    case 'NumpadAdd':\n      return '\\uE025';\n    case 'NumpadSubtract':\n      return '\\uE027';\n    case 'NumpadDecimal':\n      return '\\uE028';\n    case 'NumpadDivide':\n      return '\\uE029';\n    case 'F1':\n      return '\\uE031';\n    case 'F2':\n      return '\\uE032';\n    case 'F3':\n      return '\\uE033';\n    case 'F4':\n      return '\\uE034';\n    case 'F5':\n      return '\\uE035';\n    case 'F6':\n      return '\\uE036';\n    case 'F7':\n      return '\\uE037';\n    case 'F8':\n      return '\\uE038';\n    case 'F9':\n      return '\\uE039';\n    case 'F10':\n      return '\\uE03A';\n    case 'F11':\n      return '\\uE03B';\n    case 'F12':\n      return '\\uE03C';\n    case 'Meta':\n    case 'MetaLeft':\n      return '\\uE03D';\n    case 'ShiftRight':\n      return '\\uE050';\n    case 'ControlRight':\n      return '\\uE051';\n    case 'AltRight':\n      return '\\uE052';\n    case 'MetaRight':\n      return '\\uE053';\n    case 'Space':\n      return ' ';\n    case 'Digit0':\n      return '0';\n    case 'Digit1':\n      return '1';\n    case 'Digit2':\n      return '2';\n    case 'Digit3':\n      return '3';\n    case 'Digit4':\n      return '4';\n    case 'Digit5':\n      return '5';\n    case 'Digit6':\n      return '6';\n    case 'Digit7':\n      return '7';\n    case 'Digit8':\n      return '8';\n    case 'Digit9':\n      return '9';\n    case 'KeyA':\n      return 'a';\n    case 'KeyB':\n      return 'b';\n    case 'KeyC':\n      return 'c';\n    case 'KeyD':\n      return 'd';\n    case 'KeyE':\n      return 'e';\n    case 'KeyF':\n      return 'f';\n    case 'KeyG':\n      return 'g';\n    case 'KeyH':\n      return 'h';\n    case 'KeyI':\n      return 'i';\n    case 'KeyJ':\n      return 'j';\n    case 'KeyK':\n      return 'k';\n    case 'KeyL':\n      return 'l';\n    case 'KeyM':\n      return 'm';\n    case 'KeyN':\n      return 'n';\n    case 'KeyO':\n      return 'o';\n    case 'KeyP':\n      return 'p';\n    case 'KeyQ':\n      return 'q';\n    case 'KeyR':\n      return 'r';\n    case 'KeyS':\n      return 's';\n    case 'KeyT':\n      return 't';\n    case 'KeyU':\n      return 'u';\n    case 'KeyV':\n      return 'v';\n    case 'KeyW':\n      return 'w';\n    case 'KeyX':\n      return 'x';\n    case 'KeyY':\n      return 'y';\n    case 'KeyZ':\n      return 'z';\n    case 'Semicolon':\n      return ';';\n    case 'Equal':\n      return '=';\n    case 'Comma':\n      return ',';\n    case 'Minus':\n      return '-';\n    case 'Period':\n      return '.';\n    case 'Slash':\n      return '/';\n    case 'Backquote':\n      return '`';\n    case 'BracketLeft':\n      return '[';\n    case 'Backslash':\n      return '\\\\';\n    case 'BracketRight':\n      return ']';\n    case 'Quote':\n      return '\"';\n    default:\n      throw new Error(`Unknown key: \"${keyName}\"`);\n  }\n};\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { resolveSmartModifierString } from '../input';\nimport { getBidiKeyValue } from './third_party/bidiKeyboard';\nimport * as bidi from './third_party/bidiProtocol';\n\nimport type * as input from '../input';\nimport type * as types from '../types';\nimport type { BidiSession } from './bidiConnection';\n\nexport class RawKeyboardImpl implements input.RawKeyboard {\n  private _session: BidiSession;\n\n  constructor(session: BidiSession) {\n    this._session = session;\n  }\n\n  setSession(session: BidiSession) {\n    this._session = session;\n  }\n\n  async keydown(modifiers: Set<types.KeyboardModifier>, keyName: string, description: input.KeyDescription, autoRepeat: boolean): Promise<void> {\n    keyName = resolveSmartModifierString(keyName);\n    const actions: bidi.Input.KeySourceAction[] = [];\n    actions.push({ type: 'keyDown', value: getBidiKeyValue(keyName) });\n    await this._performActions(actions);\n  }\n\n  async keyup(modifiers: Set<types.KeyboardModifier>, keyName: string, description: input.KeyDescription): Promise<void> {\n    keyName = resolveSmartModifierString(keyName);\n    const actions: bidi.Input.KeySourceAction[] = [];\n    actions.push({ type: 'keyUp', value: getBidiKeyValue(keyName) });\n    await this._performActions(actions);\n  }\n\n  async sendText(text: string): Promise<void> {\n    const actions: bidi.Input.KeySourceAction[] = [];\n    for (const char of text) {\n      const value = getBidiKeyValue(char);\n      actions.push({ type: 'keyDown', value });\n      actions.push({ type: 'keyUp', value });\n    }\n    await this._performActions(actions);\n  }\n\n  private async _performActions(actions: bidi.Input.KeySourceAction[]) {\n    await this._session.send('input.performActions', {\n      context: this._session.sessionId,\n      actions: [\n        {\n          type: 'key',\n          id: 'pw_keyboard',\n          actions,\n        }\n      ]\n    });\n  }\n}\n\nexport class RawMouseImpl implements input.RawMouse {\n  private readonly _session: BidiSession;\n\n  constructor(session: BidiSession) {\n    this._session = session;\n  }\n\n  async move(x: number, y: number, button: types.MouseButton | 'none', buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, forClick: boolean): Promise<void> {\n    await this._performActions([{ type: 'pointerMove', x, y }]);\n  }\n\n  async down(x: number, y: number, button: types.MouseButton, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, clickCount: number): Promise<void> {\n    await this._performActions([{ type: 'pointerDown', button: toBidiButton(button) }]);\n  }\n\n  async up(x: number, y: number, button: types.MouseButton, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, clickCount: number): Promise<void> {\n    await this._performActions([{ type: 'pointerUp', button: toBidiButton(button) }]);\n  }\n\n  async wheel(x: number, y: number, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, deltaX: number, deltaY: number): Promise<void> {\n    // Bidi throws when x/y are not integers.\n    x = Math.floor(x);\n    y = Math.floor(y);\n    await this._session.send('input.performActions', {\n      context: this._session.sessionId,\n      actions: [\n        {\n          type: 'wheel',\n          id: 'pw_mouse_wheel',\n          actions: [{ type: 'scroll', x, y, deltaX, deltaY }],\n        }\n      ]\n    });\n  }\n\n  private async _performActions(actions: bidi.Input.PointerSourceAction[]) {\n    await this._session.send('input.performActions', {\n      context: this._session.sessionId,\n      actions: [\n        {\n          type: 'pointer',\n          id: 'pw_mouse',\n          parameters: {\n            pointerType: bidi.Input.PointerType.Mouse,\n          },\n          actions,\n        }\n      ]\n    });\n  }\n}\n\nexport class RawTouchscreenImpl implements input.RawTouchscreen {\n  private readonly _session: BidiSession;\n\n  constructor(session: BidiSession) {\n    this._session = session;\n  }\n\n  async tap(x: number, y: number, modifiers: Set<types.KeyboardModifier>) {\n  }\n}\n\nfunction toBidiButton(button: string): number {\n  switch (button) {\n    case 'left': return 0;\n    case 'right': return 2;\n    case 'middle': return 1;\n  }\n  throw new Error('Unknown button: ' + button);\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '../../utils';\n\nimport type { BidiSession } from './bidiConnection';\nimport type * as channels from '@protocol/channels';\n\nconst PagePaperFormats: { [key: string]: { width: number, height: number }} = {\n  letter: { width: 8.5, height: 11 },\n  legal: { width: 8.5, height: 14 },\n  tabloid: { width: 11, height: 17 },\n  ledger: { width: 17, height: 11 },\n  a0: { width: 33.1, height: 46.8 },\n  a1: { width: 23.4, height: 33.1 },\n  a2: { width: 16.54, height: 23.4 },\n  a3: { width: 11.7, height: 16.54 },\n  a4: { width: 8.27, height: 11.7 },\n  a5: { width: 5.83, height: 8.27 },\n  a6: { width: 4.13, height: 5.83 },\n};\n\nconst unitToPixels: { [key: string]: number } = {\n  'px': 1,\n  'in': 96,\n  'cm': 37.8,\n  'mm': 3.78\n};\n\nfunction convertPrintParameterToInches(text: string | undefined): number | undefined {\n  if (text === undefined)\n    return undefined;\n  let unit = text.substring(text.length - 2).toLowerCase();\n  let valueText = '';\n  if (unitToPixels.hasOwnProperty(unit)) {\n    valueText = text.substring(0, text.length - 2);\n  } else {\n    // In case of unknown unit try to parse the whole parameter as number of pixels.\n    // This is consistent with phantom's paperSize behavior.\n    unit = 'px';\n    valueText = text;\n  }\n  const value = Number(valueText);\n  assert(!isNaN(value), 'Failed to parse parameter value: ' + text);\n  const pixels = value * unitToPixels[unit];\n  return pixels / 96;\n}\n\nexport class BidiPDF {\n  private _session: BidiSession;\n\n  constructor(session: BidiSession) {\n    this._session = session;\n  }\n\n  async generate(options: channels.PagePdfParams): Promise<Buffer> {\n    const {\n      scale = 1,\n      printBackground = false,\n      landscape = false,\n      pageRanges = '',\n      margin = {},\n    } = options;\n\n    let paperWidth = 8.5;\n    let paperHeight = 11;\n    if (options.format) {\n      const format = PagePaperFormats[options.format.toLowerCase()];\n      assert(format, 'Unknown paper format: ' + options.format);\n      paperWidth = format.width;\n      paperHeight = format.height;\n    } else {\n      paperWidth = convertPrintParameterToInches(options.width) || paperWidth;\n      paperHeight = convertPrintParameterToInches(options.height) || paperHeight;\n    }\n\n    const { data } = await this._session.send('browsingContext.print', {\n      context: this._session.sessionId,\n      background: printBackground,\n      margin: {\n        bottom: convertPrintParameterToInches(margin.bottom) || 0,\n        left: convertPrintParameterToInches(margin.left) || 0,\n        right: convertPrintParameterToInches(margin.right) || 0,\n        top: convertPrintParameterToInches(margin.top) || 0\n      },\n      orientation: landscape ? 'landscape' : 'portrait',\n      page: {\n        width: paperWidth,\n        height: paperHeight\n      },\n      pageRanges: pageRanges ? pageRanges.split(',').map(r => r.trim()) : undefined,\n      scale,\n    });\n    return Buffer.from(data, 'base64');\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '../../utils';\nimport { eventsHelper } from '../utils/eventsHelper';\nimport * as dialog from '../dialog';\nimport * as dom from '../dom';\nimport { Page } from '../page';\nimport { BidiExecutionContext, createHandle } from './bidiExecutionContext';\nimport { RawKeyboardImpl, RawMouseImpl, RawTouchscreenImpl } from './bidiInput';\nimport { BidiNetworkManager } from './bidiNetworkManager';\nimport { BidiPDF } from './bidiPdf';\nimport * as bidi from './third_party/bidiProtocol';\n\nimport type { RegisteredListener } from '../utils/eventsHelper';\nimport type * as accessibility from '../accessibility';\nimport type * as frames from '../frames';\nimport type { InitScript, PageDelegate } from '../page';\nimport type { Progress } from '../progress';\nimport type * as types from '../types';\nimport type { BidiBrowserContext } from './bidiBrowser';\nimport type { BidiSession } from './bidiConnection';\nimport type * as channels from '@protocol/channels';\n\nconst UTILITY_WORLD_NAME = '__playwright_utility_world__';\nexport const kPlaywrightBindingChannel = 'playwrightChannel';\n\nexport class BidiPage implements PageDelegate {\n  readonly rawMouse: RawMouseImpl;\n  readonly rawKeyboard: RawKeyboardImpl;\n  readonly rawTouchscreen: RawTouchscreenImpl;\n  readonly _page: Page;\n  readonly _session: BidiSession;\n  readonly _opener: BidiPage | null;\n  readonly _realmToContext: Map<string, dom.FrameExecutionContext>;\n  private _sessionListeners: RegisteredListener[] = [];\n  readonly _browserContext: BidiBrowserContext;\n  readonly _networkManager: BidiNetworkManager;\n  private readonly _pdf: BidiPDF;\n  private _initScriptIds = new Map<InitScript, string>();\n\n  constructor(browserContext: BidiBrowserContext, bidiSession: BidiSession, opener: BidiPage | null) {\n    this._session = bidiSession;\n    this._opener = opener;\n    this.rawKeyboard = new RawKeyboardImpl(bidiSession);\n    this.rawMouse = new RawMouseImpl(bidiSession);\n    this.rawTouchscreen = new RawTouchscreenImpl(bidiSession);\n    this._realmToContext = new Map();\n    this._page = new Page(this, browserContext);\n    this._browserContext = browserContext;\n    this._networkManager = new BidiNetworkManager(this._session, this._page, this._onNavigationResponseStarted.bind(this));\n    this._pdf = new BidiPDF(this._session);\n    this._page.on(Page.Events.FrameDetached, (frame: frames.Frame) => this._removeContextsForFrame(frame, false));\n    this._sessionListeners = [\n      eventsHelper.addEventListener(bidiSession, 'script.realmCreated', this._onRealmCreated.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'script.message', this._onScriptMessage.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'browsingContext.contextDestroyed', this._onBrowsingContextDestroyed.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'browsingContext.navigationStarted', this._onNavigationStarted.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'browsingContext.navigationAborted', this._onNavigationAborted.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'browsingContext.navigationFailed', this._onNavigationFailed.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'browsingContext.fragmentNavigated', this._onFragmentNavigated.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'browsingContext.domContentLoaded', this._onDomContentLoaded.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'browsingContext.load', this._onLoad.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'browsingContext.userPromptOpened', this._onUserPromptOpened.bind(this)),\n      eventsHelper.addEventListener(bidiSession, 'log.entryAdded', this._onLogEntryAdded.bind(this)),\n    ];\n\n    // Initialize main frame.\n    // TODO: Wait for first execution context to be created and maybe about:blank navigated.\n    this._initialize().then(\n        () => this._page.reportAsNew(this._opener?._page),\n        error => this._page.reportAsNew(this._opener?._page, error));\n  }\n\n  private async _initialize() {\n    // Initialize main frame.\n    this._onFrameAttached(this._session.sessionId, null);\n    await Promise.all([\n      this.updateHttpCredentials(),\n      this.updateRequestInterception(),\n      // If the page is created by the Playwright client's call, some initialization\n      // may be pending. Wait for it to complete before reporting the page as new.\n      //\n      // TODO: ideally we'd wait only for the commands that created this page, but currently\n      // there is no way in Bidi to track which command created this page.\n      this._browserContext.waitForBlockingPageCreations(),\n    ]);\n  }\n\n  didClose() {\n    this._session.dispose();\n    eventsHelper.removeEventListeners(this._sessionListeners);\n    this._page._didClose();\n  }\n\n  private _onFrameAttached(frameId: string, parentFrameId: string | null): frames.Frame {\n    return this._page.frameManager.frameAttached(frameId, parentFrameId);\n  }\n\n  private _removeContextsForFrame(frame: frames.Frame, notifyFrame: boolean) {\n    for (const [contextId, context] of this._realmToContext) {\n      if (context.frame === frame) {\n        this._realmToContext.delete(contextId);\n        if (notifyFrame)\n          frame._contextDestroyed(context);\n      }\n    }\n  }\n\n  private _onRealmCreated(realmInfo: bidi.Script.RealmInfo) {\n    if (this._realmToContext.has(realmInfo.realm))\n      return;\n    if (realmInfo.type !== 'window')\n      return;\n    const frame = this._page.frameManager.frame(realmInfo.context);\n    if (!frame)\n      return;\n    let worldName: types.World;\n    if (!realmInfo.sandbox) {\n      worldName = 'main';\n      // Force creating utility world every time the main world is created (e.g. due to navigation).\n      this._touchUtilityWorld(realmInfo.context);\n    } else if (realmInfo.sandbox === UTILITY_WORLD_NAME) {\n      worldName = 'utility';\n    } else {\n      return;\n    }\n    const delegate = new BidiExecutionContext(this._session, realmInfo);\n    const context = new dom.FrameExecutionContext(delegate, frame, worldName);\n    frame._contextCreated(worldName, context);\n    this._realmToContext.set(realmInfo.realm, context);\n  }\n\n  private async _touchUtilityWorld(context: bidi.BrowsingContext.BrowsingContext) {\n    await this._session.sendMayFail('script.evaluate', {\n      expression: '1 + 1',\n      target: {\n        context,\n        sandbox: UTILITY_WORLD_NAME,\n      },\n      serializationOptions: {\n        maxObjectDepth: 10,\n        maxDomDepth: 10,\n      },\n      awaitPromise: true,\n      userActivation: true,\n    });\n  }\n\n  _onRealmDestroyed(params: bidi.Script.RealmDestroyedParameters): boolean {\n    const context = this._realmToContext.get(params.realm);\n    if (!context)\n      return false;\n    this._realmToContext.delete(params.realm);\n    context.frame._contextDestroyed(context);\n    return true;\n  }\n\n  // TODO: route the message directly to the browser\n  private _onBrowsingContextDestroyed(params: bidi.BrowsingContext.Info) {\n    this._browserContext._browser._onBrowsingContextDestroyed(params);\n  }\n\n  private _onNavigationStarted(params: bidi.BrowsingContext.NavigationInfo) {\n    const frameId = params.context;\n    this._page.frameManager.frameRequestedNavigation(frameId, params.navigation!);\n\n    const url = params.url.toLowerCase();\n    if (url.startsWith('file:') || url.startsWith('data:') || url === 'about:blank') {\n      // Navigation to file urls doesn't emit network events, so we fire 'commit' event right when navigation is started.\n      // Doing it in domcontentload would be too late as we'd clear frame tree.\n      const frame = this._page.frameManager.frame(frameId)!;\n      if (frame)\n        this._page.frameManager.frameCommittedNewDocumentNavigation(frameId, params.url, '', params.navigation!, /* initial */ false);\n    }\n  }\n\n  // TODO: there is no separate event for committed navigation, so we approximate it with responseStarted.\n  private _onNavigationResponseStarted(params: bidi.Network.ResponseStartedParameters) {\n    const frameId = params.context!;\n    const frame = this._page.frameManager.frame(frameId);\n    assert(frame);\n    this._page.frameManager.frameCommittedNewDocumentNavigation(frameId, params.response.url, '', params.navigation!, /* initial */ false);\n    // if (!initial)\n    //   this._firstNonInitialNavigationCommittedFulfill();\n  }\n\n  private _onDomContentLoaded(params: bidi.BrowsingContext.NavigationInfo) {\n    const frameId = params.context;\n    this._page.frameManager.frameLifecycleEvent(frameId, 'domcontentloaded');\n  }\n\n  private _onLoad(params: bidi.BrowsingContext.NavigationInfo) {\n    this._page.frameManager.frameLifecycleEvent(params.context, 'load');\n  }\n\n  private _onNavigationAborted(params: bidi.BrowsingContext.NavigationInfo) {\n    this._page.frameManager.frameAbortedNavigation(params.context, 'Navigation aborted', params.navigation || undefined);\n  }\n\n  private _onNavigationFailed(params: bidi.BrowsingContext.NavigationInfo) {\n    this._page.frameManager.frameAbortedNavigation(params.context, 'Navigation failed', params.navigation || undefined);\n  }\n\n  private _onFragmentNavigated(params: bidi.BrowsingContext.NavigationInfo) {\n    this._page.frameManager.frameCommittedSameDocumentNavigation(params.context, params.url);\n  }\n\n  private _onUserPromptOpened(event: bidi.BrowsingContext.UserPromptOpenedParameters) {\n    this._page.browserContext.dialogManager.dialogDidOpen(new dialog.Dialog(\n        this._page,\n        event.type as dialog.DialogType,\n        event.message,\n        async (accept: boolean, userText?: string) => {\n          await this._session.send('browsingContext.handleUserPrompt', { context: event.context, accept, userText });\n        },\n        event.defaultValue));\n  }\n\n  private _onLogEntryAdded(params: bidi.Log.Entry) {\n    if (params.type !== 'console')\n      return;\n    const entry: bidi.Log.ConsoleLogEntry = params as bidi.Log.ConsoleLogEntry;\n    const context = this._realmToContext.get(params.source.realm);\n    if (!context)\n      return;\n    const callFrame = params.stackTrace?.callFrames[0];\n    const location = callFrame ?? { url: '', lineNumber: 1, columnNumber: 1 };\n    this._page.addConsoleMessage(entry.method, entry.args.map(arg => createHandle(context, arg)), location, params.text || undefined);\n  }\n\n  async navigateFrame(frame: frames.Frame, url: string, referrer: string | undefined): Promise<frames.GotoResult> {\n    const { navigation } = await this._session.send('browsingContext.navigate', {\n      context: frame._id,\n      url,\n    });\n    return { newDocumentId: navigation || undefined };\n  }\n\n  async updateExtraHTTPHeaders(): Promise<void> {\n  }\n\n  async updateEmulateMedia(): Promise<void> {\n  }\n\n  async updateUserAgent(): Promise<void> {\n  }\n\n  async bringToFront(): Promise<void> {\n    await this._session.send('browsingContext.activate', {\n      context: this._session.sessionId,\n    });\n  }\n\n  async updateEmulatedViewportSize(): Promise<void> {\n    const options = this._browserContext._options;\n    const emulatedSize = this._page.emulatedSize();\n    if (!emulatedSize)\n      return;\n    const viewportSize = emulatedSize.viewport;\n    await this._session.send('browsingContext.setViewport', {\n      context: this._session.sessionId,\n      viewport: {\n        width: viewportSize.width,\n        height: viewportSize.height,\n      },\n      devicePixelRatio: options.deviceScaleFactor || 1\n    });\n  }\n\n  async updateRequestInterception(): Promise<void> {\n    await this._networkManager.setRequestInterception(this._page.needsRequestInterception());\n  }\n\n  async updateOffline() {\n  }\n\n  async updateHttpCredentials() {\n    await this._networkManager.setCredentials(this._browserContext._options.httpCredentials);\n  }\n\n  async updateFileChooserInterception() {\n  }\n\n  async reload(): Promise<void> {\n    await this._session.send('browsingContext.reload', {\n      context: this._session.sessionId,\n      // ignoreCache: true,\n      wait: bidi.BrowsingContext.ReadinessState.Interactive,\n    });\n  }\n\n  async goBack(): Promise<boolean> {\n    return await this._session.send('browsingContext.traverseHistory', {\n      context: this._session.sessionId,\n      delta: -1,\n    }).then(() => true).catch(() => false);\n  }\n\n  async goForward(): Promise<boolean> {\n    return await this._session.send('browsingContext.traverseHistory', {\n      context: this._session.sessionId,\n      delta: +1,\n    }).then(() => true).catch(() => false);\n  }\n\n  async requestGC(): Promise<void> {\n    throw new Error('Method not implemented.');\n  }\n\n  private async _onScriptMessage(event: bidi.Script.MessageParameters) {\n    if (event.channel !== kPlaywrightBindingChannel)\n      return;\n    const pageOrError = await this._page.waitForInitializedOrError();\n    if (pageOrError instanceof Error)\n      return;\n    const context = this._realmToContext.get(event.source.realm);\n    if (!context)\n      return;\n    if (event.data.type !== 'string')\n      return;\n    await this._page.onBindingCalled(event.data.value, context);\n  }\n\n  async addInitScript(initScript: InitScript): Promise<void> {\n    const { script } = await this._session.send('script.addPreloadScript', {\n      // TODO: remove function call from the source.\n      functionDeclaration: `() => { return ${initScript.source} }`,\n      // TODO: push to iframes?\n      contexts: [this._session.sessionId],\n    });\n    this._initScriptIds.set(initScript, script);\n  }\n\n  async removeInitScripts(initScripts: InitScript[]): Promise<void> {\n    const ids: string[] = [];\n    for (const script of initScripts) {\n      const id = this._initScriptIds.get(script);\n      if (id)\n        ids.push(id);\n      this._initScriptIds.delete(script);\n    }\n    await Promise.all(ids.map(script => this._session.send('script.removePreloadScript', { script })));\n  }\n\n  async closePage(runBeforeUnload: boolean): Promise<void> {\n    await this._session.send('browsingContext.close', {\n      context: this._session.sessionId,\n      promptUnload: runBeforeUnload,\n    });\n  }\n\n  async setBackgroundColor(color?: { r: number; g: number; b: number; a: number; }): Promise<void> {\n  }\n\n  async takeScreenshot(progress: Progress, format: string, documentRect: types.Rect | undefined, viewportRect: types.Rect | undefined, quality: number | undefined, fitsViewport: boolean, scale: 'css' | 'device'): Promise<Buffer> {\n    const rect = (documentRect || viewportRect)!;\n    const { data } = await this._session.send('browsingContext.captureScreenshot', {\n      context: this._session.sessionId,\n      format: {\n        type: `image/${format === 'png' ? 'png' : 'jpeg'}`,\n        quality: quality ? quality / 100 : 0.8,\n      },\n      origin: documentRect ? 'document' : 'viewport',\n      clip: {\n        type: 'box',\n        ...rect,\n      }\n    });\n    return Buffer.from(data, 'base64');\n  }\n\n  async getContentFrame(handle: dom.ElementHandle): Promise<frames.Frame | null> {\n    const executionContext = toBidiExecutionContext(handle._context);\n    const frameId = await executionContext.contentFrameIdForFrame(handle);\n    if (!frameId)\n      return null;\n    return this._page.frameManager.frame(frameId);\n  }\n\n  async getOwnerFrame(handle: dom.ElementHandle): Promise<string | null> {\n    // TODO: switch to utility world?\n    const windowHandle = await handle.evaluateHandle(node => {\n      const doc = node.ownerDocument ?? node as Document;\n      return doc.defaultView;\n    });\n    if (!windowHandle)\n      return null;\n    const executionContext = toBidiExecutionContext(handle._context);\n    return executionContext.frameIdForWindowHandle(windowHandle);\n  }\n\n  async getBoundingBox(handle: dom.ElementHandle): Promise<types.Rect | null> {\n    const box = await handle.evaluate(element => {\n      if (!(element instanceof Element))\n        return null;\n      const rect = element.getBoundingClientRect();\n      return { x: rect.x, y: rect.y, width: rect.width, height: rect.height };\n    });\n    if (!box)\n      return null;\n    const position = await this._framePosition(handle._frame);\n    if (!position)\n      return null;\n    box.x += position.x;\n    box.y += position.y;\n    return box;\n  }\n\n  // TODO: move to Frame.\n  private async _framePosition(frame: frames.Frame): Promise<types.Point | null> {\n    if (frame === this._page.mainFrame())\n      return { x: 0, y: 0 };\n    const element = await frame.frameElement();\n    const box = await element.boundingBox();\n    if (!box)\n      return null;\n    const style = await element.evaluateInUtility(([injected, iframe]) => injected.describeIFrameStyle(iframe as Element), {}).catch(e => 'error:notconnected' as const);\n    if (style === 'error:notconnected' || style === 'transformed')\n      return null;\n    // Content box is offset by border and padding widths.\n    box.x += style.left;\n    box.y += style.top;\n    return box;\n  }\n\n  async scrollRectIntoViewIfNeeded(handle: dom.ElementHandle<Element>, rect?: types.Rect): Promise<'error:notvisible' | 'error:notconnected' | 'done'> {\n    return await handle.evaluateInUtility(([injected, node]) => {\n      node.scrollIntoView({\n        block: 'center',\n        inline: 'center',\n        behavior: 'instant',\n      });\n    }, null).then(() => 'done' as const).catch(e => {\n      if (e instanceof Error && e.message.includes('Node is detached from document'))\n        return 'error:notconnected';\n      if (e instanceof Error && e.message.includes('Node does not have a layout object'))\n        return 'error:notvisible';\n      throw e;\n    });\n  }\n\n  async setScreencastOptions(options: { width: number, height: number, quality: number } | null): Promise<void> {\n  }\n\n  rafCountForStablePosition(): number {\n    return 1;\n  }\n\n  async getContentQuads(handle: dom.ElementHandle<Element>): Promise<types.Quad[] | null | 'error:notconnected'> {\n    const quads = await handle.evaluateInUtility(([injected, node]) => {\n      if (!node.isConnected)\n        return 'error:notconnected';\n      const rects = node.getClientRects();\n      if (!rects)\n        return null;\n      return [...rects].map(rect => [\n        { x: rect.left, y: rect.top },\n        { x: rect.right, y: rect.top },\n        { x: rect.right, y: rect.bottom },\n        { x: rect.left, y: rect.bottom },\n      ]);\n    }, null);\n    if (!quads || quads === 'error:notconnected')\n      return quads;\n    // TODO: consider transforming quads to support clicks in iframes.\n    const position = await this._framePosition(handle._frame);\n    if (!position)\n      return null;\n    quads.forEach(quad => quad.forEach(point => {\n      point.x += position.x;\n      point.y += position.y;\n    }));\n    return quads as types.Quad[];\n  }\n\n  async setInputFilePaths(handle: dom.ElementHandle<HTMLInputElement>, paths: string[]): Promise<void> {\n    const fromContext = toBidiExecutionContext(handle._context);\n    await this._session.send('input.setFiles', {\n      context: this._session.sessionId,\n      element: await fromContext.nodeIdForElementHandle(handle),\n      files: paths,\n    });\n  }\n\n  async adoptElementHandle<T extends Node>(handle: dom.ElementHandle<T>, to: dom.FrameExecutionContext): Promise<dom.ElementHandle<T>> {\n    const fromContext = toBidiExecutionContext(handle._context);\n    const nodeId = await fromContext.nodeIdForElementHandle(handle);\n    const executionContext = toBidiExecutionContext(to);\n    return await executionContext.remoteObjectForNodeId(to, nodeId) as dom.ElementHandle<T>;\n  }\n\n  async getAccessibilityTree(needle?: dom.ElementHandle): Promise<{tree: accessibility.AXNode, needle: accessibility.AXNode | null}> {\n    throw new Error('Method not implemented.');\n  }\n\n  async inputActionEpilogue(): Promise<void> {\n  }\n\n  async resetForReuse(): Promise<void> {\n  }\n\n  async pdf(options: channels.PagePdfParams): Promise<Buffer> {\n    return this._pdf.generate(options);\n  }\n\n  async getFrameElement(frame: frames.Frame): Promise<dom.ElementHandle> {\n    const parent = frame.parentFrame();\n    if (!parent)\n      throw new Error('Frame has been detached.');\n    const parentContext = await parent._mainContext();\n    const list = await parentContext.evaluateHandle(() => { return [...document.querySelectorAll('iframe,frame')]; });\n    const length = await list.evaluate(list => list.length);\n    let foundElement = null;\n    for (let i = 0; i < length; i++) {\n      const element = await list.evaluateHandle((list, i) => list[i], i);\n      const candidate = await element.contentFrame();\n      if (frame === candidate) {\n        foundElement = element;\n        break;\n      } else {\n        element.dispose();\n      }\n    }\n    list.dispose();\n    if (!foundElement)\n      throw new Error('Frame has been detached.');\n    return foundElement;\n  }\n\n  shouldToggleStyleSheetToSyncAnimations(): boolean {\n    return true;\n  }\n}\n\nfunction toBidiExecutionContext(executionContext: dom.FrameExecutionContext): BidiExecutionContext {\n  return executionContext.delegate as BidiExecutionContext;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { eventsHelper } from '../utils/eventsHelper';\nimport { Browser } from '../browser';\nimport { BrowserContext, verifyGeolocation } from '../browserContext';\nimport * as network from '../network';\nimport { BidiConnection } from './bidiConnection';\nimport { bidiBytesValueToString } from './bidiNetworkManager';\nimport { BidiPage, kPlaywrightBindingChannel } from './bidiPage';\nimport { PageBinding } from '../page';\nimport * as bidi from './third_party/bidiProtocol';\n\nimport type { RegisteredListener } from '../utils/eventsHelper';\nimport type { BrowserOptions } from '../browser';\nimport type { SdkObject } from '../instrumentation';\nimport type { InitScript, Page } from '../page';\nimport type { ConnectionTransport } from '../transport';\nimport type * as types from '../types';\nimport type { BidiSession } from './bidiConnection';\nimport type * as channels from '@protocol/channels';\n\n\nexport class BidiBrowser extends Browser {\n  private readonly _connection: BidiConnection;\n  readonly _browserSession: BidiSession;\n  private _bidiSessionInfo!: bidi.Session.NewResult;\n  readonly _contexts = new Map<string, BidiBrowserContext>();\n  readonly _bidiPages = new Map<bidi.BrowsingContext.BrowsingContext, BidiPage>();\n  private readonly _eventListeners: RegisteredListener[];\n\n  static async connect(parent: SdkObject, transport: ConnectionTransport, options: BrowserOptions): Promise<BidiBrowser> {\n    const browser = new BidiBrowser(parent, transport, options);\n    if ((options as any).__testHookOnConnectToBrowser)\n      await (options as any).__testHookOnConnectToBrowser();\n\n    let proxy: bidi.Session.ManualProxyConfiguration | undefined;\n    if (options.proxy) {\n      proxy = {\n        proxyType: 'manual',\n      };\n      const url = new URL(options.proxy.server);  // Validate proxy server.\n      switch (url.protocol) {\n        case 'http:':\n          proxy.httpProxy = url.host;\n          break;\n        case 'https:':\n          proxy.httpsProxy = url.host;\n          break;\n        case 'socks4:':\n          proxy.socksProxy = url.host;\n          proxy.socksVersion = 4;\n          break;\n        case 'socks5:':\n          proxy.socksProxy = url.host;\n          proxy.socksVersion = 5;\n          break;\n        default:\n          throw new Error('Invalid proxy server protocol: ' + options.proxy.server);\n      }\n      if (options.proxy.bypass)\n        proxy.noProxy = options.proxy.bypass.split(',');\n      // TODO: support authentication.\n    }\n\n    browser._bidiSessionInfo = await browser._browserSession.send('session.new', {\n      capabilities: {\n        alwaysMatch: {\n          acceptInsecureCerts: false,\n          proxy,\n          unhandledPromptBehavior: {\n            default: bidi.Session.UserPromptHandlerType.Ignore,\n          },\n          webSocketUrl: true\n        },\n      }\n    });\n\n    await browser._browserSession.send('session.subscribe', {\n      events: [\n        'browsingContext',\n        'network',\n        'log',\n        'script',\n      ],\n    });\n\n    if (options.persistent) {\n      const context = new BidiBrowserContext(browser, undefined, options.persistent);\n      browser._defaultContext = context;\n      await context._initialize();\n      // Create default page as we cannot get access to the existing one.\n      const page = await browser._defaultContext.doCreateNewPage();\n      await page.waitForInitializedOrError();\n    }\n    return browser;\n  }\n\n  constructor(parent: SdkObject, transport: ConnectionTransport, options: BrowserOptions) {\n    super(parent, options);\n    this._connection = new BidiConnection(transport, this._onDisconnect.bind(this), options.protocolLogger, options.browserLogsCollector);\n    this._browserSession = this._connection.browserSession;\n    this._eventListeners = [\n      eventsHelper.addEventListener(this._browserSession, 'browsingContext.contextCreated', this._onBrowsingContextCreated.bind(this)),\n      eventsHelper.addEventListener(this._browserSession, 'script.realmDestroyed', this._onScriptRealmDestroyed.bind(this)),\n    ];\n  }\n\n  _onDisconnect() {\n    this._didClose();\n  }\n\n  async doCreateNewContext(options: types.BrowserContextOptions): Promise<BrowserContext> {\n    const { userContext } = await this._browserSession.send('browser.createUserContext', {\n      acceptInsecureCerts: options.ignoreHTTPSErrors,\n    });\n    const context = new BidiBrowserContext(this, userContext, options);\n    await context._initialize();\n    this._contexts.set(userContext, context);\n    return context;\n  }\n\n  contexts(): BrowserContext[] {\n    return Array.from(this._contexts.values());\n  }\n\n  version(): string {\n    return this._bidiSessionInfo.capabilities.browserVersion;\n  }\n\n  userAgent(): string {\n    return this._bidiSessionInfo.capabilities.userAgent;\n  }\n\n  isConnected(): boolean {\n    return !this._connection.isClosed();\n  }\n\n  private _onBrowsingContextCreated(event: bidi.BrowsingContext.Info) {\n    if (event.parent) {\n      const parentFrameId = event.parent;\n      for (const page of this._bidiPages.values()) {\n        const parentFrame = page._page.frameManager.frame(parentFrameId);\n        if (!parentFrame)\n          continue;\n        page._session.addFrameBrowsingContext(event.context);\n        page._page.frameManager.frameAttached(event.context, parentFrameId);\n        const frame = page._page.frameManager.frame(event.context);\n        if (frame)\n          frame._url = event.url;\n        return;\n      }\n      return;\n    }\n    let context = this._contexts.get(event.userContext);\n    if (!context)\n      context = this._defaultContext as BidiBrowserContext;\n    if (!context)\n      return;\n    const session = this._connection.createMainFrameBrowsingContextSession(event.context);\n    const opener = event.originalOpener && this._bidiPages.get(event.originalOpener);\n    const page = new BidiPage(context, session, opener || null);\n    page._page.mainFrame()._url = event.url;\n    this._bidiPages.set(event.context, page);\n  }\n\n  _onBrowsingContextDestroyed(event: bidi.BrowsingContext.Info) {\n    if (event.parent) {\n      this._browserSession.removeFrameBrowsingContext(event.context);\n      const parentFrameId = event.parent;\n      for (const page of this._bidiPages.values()) {\n        const parentFrame = page._page.frameManager.frame(parentFrameId);\n        if (!parentFrame)\n          continue;\n        page._page.frameManager.frameDetached(event.context);\n        return;\n      }\n      return;\n    }\n    const bidiPage = this._bidiPages.get(event.context);\n    if (!bidiPage)\n      return;\n    bidiPage.didClose();\n    this._bidiPages.delete(event.context);\n  }\n\n  private _onScriptRealmDestroyed(event: bidi.Script.RealmDestroyedParameters) {\n    for (const page of this._bidiPages.values()) {\n      if (page._onRealmDestroyed(event))\n        return;\n    }\n  }\n}\n\nexport class BidiBrowserContext extends BrowserContext {\n  declare readonly _browser: BidiBrowser;\n  private _originToPermissions = new Map<string, string[]>();\n  private _blockingPageCreations: Set<Promise<unknown>> = new Set();\n  private _initScriptIds = new Map<InitScript, string>();\n\n  constructor(browser: BidiBrowser, browserContextId: string | undefined, options: types.BrowserContextOptions) {\n    super(browser, options, browserContextId);\n    this._authenticateProxyViaHeader();\n  }\n\n  private _bidiPages() {\n    return [...this._browser._bidiPages.values()].filter(bidiPage => bidiPage._browserContext === this);\n  }\n\n  override async _initialize() {\n    const promises: Promise<any>[] = [\n      super._initialize(),\n    ];\n    if (this._options.viewport) {\n      promises.push(this._browser._browserSession.send('browsingContext.setViewport', {\n        viewport: {\n          width: this._options.viewport.width,\n          height: this._options.viewport.height\n        },\n        devicePixelRatio: this._options.deviceScaleFactor || 1,\n        userContexts: [this._userContextId()],\n      }));\n    }\n    if (this._options.geolocation)\n      promises.push(this.setGeolocation(this._options.geolocation));\n    await Promise.all(promises);\n  }\n\n  override possiblyUninitializedPages(): Page[] {\n    return this._bidiPages().map(bidiPage => bidiPage._page);\n  }\n\n  override async doCreateNewPage(markAsServerSideOnly?: boolean): Promise<Page> {\n    const promise = this._createNewPageImpl(markAsServerSideOnly);\n    if (markAsServerSideOnly)\n      this._blockingPageCreations.add(promise);\n    try {\n      return await promise;\n    } finally {\n      this._blockingPageCreations.delete(promise);\n    }\n  }\n\n  private async _createNewPageImpl(markAsServerSideOnly?: boolean): Promise<Page> {\n    const { context } = await this._browser._browserSession.send('browsingContext.create', {\n      type: bidi.BrowsingContext.CreateType.Window,\n      userContext: this._browserContextId,\n    });\n    const page = this._browser._bidiPages.get(context)!._page;\n    if (markAsServerSideOnly)\n      page.markAsServerSideOnly();\n    return page;\n  }\n\n  async waitForBlockingPageCreations() {\n    await Promise.all([...this._blockingPageCreations].map(command => command.catch(() => {})));\n  }\n\n  async doGetCookies(urls: string[]): Promise<channels.NetworkCookie[]> {\n    const { cookies } = await this._browser._browserSession.send('storage.getCookies',\n        { partition: { type: 'storageKey', userContext: this._browserContextId } });\n    return network.filterCookies(cookies.map((c: bidi.Network.Cookie) => {\n      const copy: channels.NetworkCookie = {\n        name: c.name,\n        value: bidiBytesValueToString(c.value),\n        domain: c.domain,\n        path: c.path,\n        httpOnly: c.httpOnly,\n        secure: c.secure,\n        expires: c.expiry ?? -1,\n        sameSite: c.sameSite ? fromBidiSameSite(c.sameSite) : 'None',\n      };\n      return copy;\n    }), urls);\n  }\n\n  async addCookies(cookies: channels.SetNetworkCookie[]) {\n    cookies = network.rewriteCookies(cookies);\n    const promises = cookies.map((c: channels.SetNetworkCookie) => {\n      const cookie: bidi.Storage.PartialCookie = {\n        name: c.name,\n        value: { type: 'string', value: c.value },\n        domain: c.domain!,\n        path: c.path,\n        httpOnly: c.httpOnly,\n        secure: c.secure,\n        sameSite: c.sameSite && toBidiSameSite(c.sameSite),\n        expiry: (c.expires === -1 || c.expires === undefined) ? undefined : Math.round(c.expires),\n      };\n      return this._browser._browserSession.send('storage.setCookie',\n          { cookie, partition: { type: 'storageKey', userContext: this._browserContextId } });\n    });\n    await Promise.all(promises);\n  }\n\n  async doClearCookies() {\n    await this._browser._browserSession.send('storage.deleteCookies',\n        { partition: { type: 'storageKey', userContext: this._browserContextId } });\n  }\n\n  async doGrantPermissions(origin: string, permissions: string[]) {\n    const currentPermissions = this._originToPermissions.get(origin) || [];\n    const toGrant = permissions.filter(permission => !currentPermissions.includes(permission));\n    this._originToPermissions.set(origin, [...currentPermissions, ...toGrant]);\n    await Promise.all(toGrant.map(permission => this._setPermission(origin, permission, bidi.Permissions.PermissionState.Granted)));\n  }\n\n  async doClearPermissions() {\n    const currentPermissions = [...this._originToPermissions.entries()];\n    this._originToPermissions = new Map();\n    await Promise.all(currentPermissions.map(([origin, permissions]) => permissions.map(\n        p => this._setPermission(origin, p, bidi.Permissions.PermissionState.Prompt))));\n  }\n\n  private async _setPermission(origin: string, permission: string, state: bidi.Permissions.PermissionState) {\n    await this._browser._browserSession.send('permissions.setPermission', {\n      descriptor: {\n        name: permission,\n      },\n      state,\n      origin,\n      userContext: this._browserContextId || 'default',\n    });\n  }\n\n  async setGeolocation(geolocation?: types.Geolocation): Promise<void> {\n    verifyGeolocation(geolocation);\n    this._options.geolocation = geolocation;\n    // Setting geolocation on the user context automatically applies it to all existing\n    // pages in the context in Bidi.\n    await this._browser._browserSession.send('emulation.setGeolocationOverride', {\n      coordinates: geolocation ? {\n        latitude: geolocation.latitude,\n        longitude: geolocation.longitude,\n        accuracy: geolocation.accuracy,\n      } : null,\n      userContexts: [this._browserContextId || 'default'],\n    });\n  }\n\n  async setExtraHTTPHeaders(headers: types.HeadersArray): Promise<void> {\n  }\n\n  async setUserAgent(userAgent: string | undefined): Promise<void> {\n  }\n\n  async setOffline(offline: boolean): Promise<void> {\n  }\n\n  async doSetHTTPCredentials(httpCredentials?: types.Credentials): Promise<void> {\n    this._options.httpCredentials = httpCredentials;\n    for (const page of this.pages())\n      await (page.delegate as BidiPage).updateHttpCredentials();\n  }\n\n  async doAddInitScript(initScript: InitScript) {\n    const { script } = await this._browser._browserSession.send('script.addPreloadScript', {\n      // TODO: remove function call from the source.\n      functionDeclaration: `() => { return ${initScript.source} }`,\n      userContexts: [this._browserContextId || 'default'],\n    });\n    this._initScriptIds.set(initScript, script);\n  }\n\n  async doRemoveInitScripts(initScripts: InitScript[]) {\n    const ids: string[] = [];\n    for (const script of initScripts) {\n      const id = this._initScriptIds.get(script);\n      if (id)\n        ids.push(id);\n      this._initScriptIds.delete(script);\n    }\n    await Promise.all(ids.map(script => this._browser._browserSession.send('script.removePreloadScript', { script })));\n  }\n\n  async doUpdateRequestInterception(): Promise<void> {\n  }\n\n  override async doExposePlaywrightBinding() {\n    const args: bidi.Script.ChannelValue[] = [{\n      type: 'channel',\n      value: {\n        channel: kPlaywrightBindingChannel,\n        ownership: bidi.Script.ResultOwnership.Root,\n      }\n    }];\n    const functionDeclaration = `function addMainBinding(callback) { globalThis['${PageBinding.kBindingName}'] = callback; }`;\n    const promises = [];\n    promises.push(this._browser._browserSession.send('script.addPreloadScript', {\n      functionDeclaration,\n      arguments: args,\n      userContexts: [this._userContextId()],\n    }));\n    promises.push(...this._bidiPages().map(page => {\n      const realms = [...page._realmToContext].filter(([realm, context]) => context.world === 'main').map(([realm, context]) => realm);\n      return Promise.all(realms.map(realm => {\n        return page._session.send('script.callFunction', {\n          functionDeclaration,\n          arguments: args,\n          target: { realm },\n          awaitPromise: false,\n          userActivation: false,\n        });\n      }));\n    }));\n    await Promise.all(promises);\n  }\n\n  onClosePersistent() {}\n\n  override async clearCache(): Promise<void> {\n  }\n\n  async doClose(reason: string | undefined) {\n    if (!this._browserContextId) {\n      // Closing persistent context should close the browser.\n      await this._browser.close({ reason });\n      return;\n    }\n    await this._browser._browserSession.send('browser.removeUserContext', {\n      userContext: this._browserContextId\n    });\n    this._browser._contexts.delete(this._browserContextId);\n  }\n\n  async cancelDownload(uuid: string) {\n  }\n\n  private _userContextId(): bidi.Browser.UserContext {\n    if (this._browserContextId)\n      return this._browserContextId;\n    // Default context always has same id, see\n    // https://w3c.github.io/webdriver-bidi/#default-user-context\n    return 'default';\n  }\n}\n\nfunction fromBidiSameSite(sameSite: bidi.Network.SameSite): channels.NetworkCookie['sameSite'] {\n  switch (sameSite) {\n    case 'strict': return 'Strict';\n    case 'lax': return 'Lax';\n    case 'none': return 'None';\n  }\n  return 'None';\n}\n\nfunction toBidiSameSite(sameSite: channels.SetNetworkCookie['sameSite']): bidi.Network.SameSite {\n  switch (sameSite) {\n    case 'Strict': return bidi.Network.SameSite.Strict;\n    case 'Lax': return bidi.Network.SameSite.Lax;\n    case 'None': return bidi.Network.SameSite.None;\n  }\n  return bidi.Network.SameSite.None;\n}\n\nexport namespace Network {\n  export const enum SameSite {\n    Strict = 'strict',\n    Lax = 'lax',\n    None = 'none',\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport os from 'os';\n\nimport { wrapInASCIIBox } from '../utils/ascii';\nimport { BrowserReadyState, BrowserType, kNoXServerRunningError } from '../browserType';\nimport { BidiBrowser } from './bidiBrowser';\nimport { kBrowserCloseMessageId } from './bidiConnection';\nimport { chromiumSwitches } from '../chromium/chromiumSwitches';\nimport { RecentLogsCollector } from '../utils/debugLogger';\n\nimport type { BrowserOptions } from '../browser';\nimport type { SdkObject } from '../instrumentation';\nimport type { Env } from '../utils/processLauncher';\nimport type { ProtocolError } from '../protocolError';\nimport type { ConnectionTransport } from '../transport';\nimport type * as types from '../types';\n\n\nexport class BidiChromium extends BrowserType {\n  constructor(parent: SdkObject) {\n    super(parent, 'bidi');\n  }\n\n  override async connectToTransport(transport: ConnectionTransport, options: BrowserOptions, browserLogsCollector: RecentLogsCollector): Promise<BidiBrowser> {\n    // Chrome doesn't support Bidi, we create Bidi over CDP which is used by Chrome driver.\n    // bidiOverCdp depends on chromium-bidi which we only have in devDependencies, so\n    // we load bidiOverCdp dynamically.\n    const bidiTransport = await require('./bidiOverCdp').connectBidiOverCdp(transport);\n    (transport as any)[kBidiOverCdpWrapper] = bidiTransport;\n    try {\n      return BidiBrowser.connect(this.attribution.playwright, bidiTransport, options);\n    } catch (e) {\n      if (browserLogsCollector.recentLogs().some(log => log.includes('Failed to create a ProcessSingleton for your profile directory.'))) {\n        throw new Error(\n            'Failed to create a ProcessSingleton for your profile directory. ' +\n            'This usually means that the profile is already in use by another instance of Chromium.'\n        );\n      }\n      throw e;\n    }\n  }\n\n  override doRewriteStartupLog(error: ProtocolError): ProtocolError {\n    if (!error.logs)\n      return error;\n    if (error.logs.includes('Missing X server'))\n      error.logs = '\\n' + wrapInASCIIBox(kNoXServerRunningError, 1);\n    // These error messages are taken from Chromium source code as of July, 2020:\n    // https://github.com/chromium/chromium/blob/70565f67e79f79e17663ad1337dc6e63ee207ce9/content/browser/zygote_host/zygote_host_impl_linux.cc\n    if (!error.logs.includes('crbug.com/357670') && !error.logs.includes('No usable sandbox!') && !error.logs.includes('crbug.com/638180'))\n      return error;\n    error.logs = [\n      `Chromium sandboxing failed!`,\n      `================================`,\n      `To avoid the sandboxing issue, do either of the following:`,\n      `  - (preferred): Configure your environment to support sandboxing`,\n      `  - (alternative): Launch Chromium without sandbox using 'chromiumSandbox: false' option`,\n      `================================`,\n      ``,\n    ].join('\\n');\n    return error;\n  }\n\n  override amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env {\n    return env;\n  }\n\n  override attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void {\n    const bidiTransport = (transport as any)[kBidiOverCdpWrapper];\n    if (bidiTransport)\n      transport = bidiTransport;\n    transport.send({ method: 'browser.close', params: {}, id: kBrowserCloseMessageId });\n  }\n\n  override supportsPipeTransport(): boolean {\n    return false;\n  }\n\n  override defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[] {\n    const chromeArguments = this._innerDefaultArgs(options);\n    chromeArguments.push(`--user-data-dir=${userDataDir}`);\n    chromeArguments.push('--remote-debugging-port=0');\n    if (isPersistent)\n      chromeArguments.push('about:blank');\n    else\n      chromeArguments.push('--no-startup-window');\n    return chromeArguments;\n  }\n\n  override readyState(options: types.LaunchOptions): BrowserReadyState | undefined {\n    return new ChromiumReadyState();\n  }\n\n  private _innerDefaultArgs(options: types.LaunchOptions): string[] {\n    const { args = [] } = options;\n    const userDataDirArg = args.find(arg => arg.startsWith('--user-data-dir'));\n    if (userDataDirArg)\n      throw this._createUserDataDirArgMisuseError('--user-data-dir');\n    if (args.find(arg => arg.startsWith('--remote-debugging-pipe')))\n      throw new Error('Playwright manages remote debugging connection itself.');\n    if (args.find(arg => !arg.startsWith('-')))\n      throw new Error('Arguments can not specify page to be opened');\n    const chromeArguments = [...chromiumSwitches(options.assistantMode)];\n\n    if (os.platform() === 'darwin') {\n      // See https://github.com/microsoft/playwright/issues/7362\n      chromeArguments.push('--enable-use-zoom-for-dsf=false');\n      // See https://bugs.chromium.org/p/chromium/issues/detail?id=1407025.\n      if (options.headless)\n        chromeArguments.push('--use-angle');\n    }\n\n    if (options.devtools)\n      chromeArguments.push('--auto-open-devtools-for-tabs');\n    if (options.headless) {\n      chromeArguments.push('--headless');\n\n      chromeArguments.push(\n          '--hide-scrollbars',\n          '--mute-audio',\n          '--blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4',\n      );\n    }\n    if (options.chromiumSandbox !== true)\n      chromeArguments.push('--no-sandbox');\n    const proxy = options.proxyOverride || options.proxy;\n    if (proxy) {\n      const proxyURL = new URL(proxy.server);\n      const isSocks = proxyURL.protocol === 'socks5:';\n      // https://www.chromium.org/developers/design-documents/network-settings\n      if (isSocks && !this.attribution.playwright.options.socksProxyPort) {\n        // https://www.chromium.org/developers/design-documents/network-stack/socks-proxy\n        chromeArguments.push(`--host-resolver-rules=\"MAP * ~NOTFOUND , EXCLUDE ${proxyURL.hostname}\"`);\n      }\n      chromeArguments.push(`--proxy-server=${proxy.server}`);\n      const proxyBypassRules = [];\n      // https://source.chromium.org/chromium/chromium/src/+/master:net/docs/proxy.md;l=548;drc=71698e610121078e0d1a811054dcf9fd89b49578\n      if (this.attribution.playwright.options.socksProxyPort)\n        proxyBypassRules.push('<-loopback>');\n      if (proxy.bypass)\n        proxyBypassRules.push(...proxy.bypass.split(',').map(t => t.trim()).map(t => t.startsWith('.') ? '*' + t : t));\n      if (!process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK && !proxyBypassRules.includes('<-loopback>'))\n        proxyBypassRules.push('<-loopback>');\n      if (proxyBypassRules.length > 0)\n        chromeArguments.push(`--proxy-bypass-list=${proxyBypassRules.join(';')}`);\n    }\n    chromeArguments.push(...args);\n    return chromeArguments;\n  }\n}\n\nclass ChromiumReadyState extends BrowserReadyState {\n  override onBrowserOutput(message: string): void {\n    if (message.includes('Failed to create a ProcessSingleton for your profile directory.')) {\n      this._wsEndpoint.reject(new Error('Failed to create a ProcessSingleton for your profile directory. ' +\n        'This usually means that the profile is already in use by another instance of Chromium.'));\n    }\n    const match = message.match(/DevTools listening on (.*)/);\n    if (match)\n      this._wsEndpoint.resolve(match[1]);\n  }\n}\n\nconst kBidiOverCdpWrapper = Symbol('kBidiConnectionWrapper');\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Copied from upstream: https://github.com/puppeteer/puppeteer/blob/main/packages/browsers/src/browser-data/firefox.ts\n\nimport fs from 'fs';\nimport path from 'path';\n\n/* eslint-disable curly, indent */\n\ninterface ProfileOptions {\n  preferences: Record<string, unknown>;\n  path: string;\n}\n\nexport async function createProfile(options: ProfileOptions): Promise<void> {\n  if (!fs.existsSync(options.path)) {\n    await fs.promises.mkdir(options.path, {\n      recursive: true,\n    });\n  }\n  await writePreferences({\n    preferences: {\n      ...defaultProfilePreferences(options.preferences),\n      ...options.preferences,\n    },\n    path: options.path,\n  });\n}\n\nfunction defaultProfilePreferences(\n  extraPrefs: Record<string, unknown>\n): Record<string, unknown> {\n  const server = 'dummy.test';\n\n  const defaultPrefs = {\n    // Make sure Shield doesn't hit the network.\n    'app.normandy.api_url': '',\n    // Disable Firefox old build background check\n    'app.update.checkInstallTime': false,\n    // Disable automatically upgrading Firefox\n    'app.update.disabledForTesting': true,\n\n    // Increase the APZ content response timeout to 1 minute\n    'apz.content_response_timeout': 60000,\n\n    // Prevent various error message on the console\n    // jest-puppeteer asserts that no error message is emitted by the console\n    'browser.contentblocking.features.standard':\n      '-tp,tpPrivate,cookieBehavior0,-cm,-fp',\n\n    // Enable the dump function: which sends messages to the system\n    // console\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1543115\n    'browser.dom.window.dump.enabled': true,\n\n    // Make sure newtab weather doesn't hit the network to retrieve weather data.\n    'browser.newtabpage.activity-stream.discoverystream.region-weather-config': '',\n\n    // Make sure newtab wallpapers don't hit the network to retrieve wallpaper data.\n    'browser.newtabpage.activity-stream.newtabWallpapers.enabled': false,\n    'browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled': false,\n\n    // Make sure Topsites doesn't hit the network to retrieve sponsored tiles.\n    'browser.newtabpage.activity-stream.showSponsoredTopSites': false,\n\n    // Disable topstories\n    'browser.newtabpage.activity-stream.feeds.system.topstories': false,\n\n    // Always display a blank page\n    'browser.newtabpage.enabled': false,\n\n    // Background thumbnails in particular cause grief: and disabling\n    // thumbnails in general cannot hurt\n    'browser.pagethumbnails.capturing_disabled': true,\n\n    // Disable safebrowsing components.\n    'browser.safebrowsing.blockedURIs.enabled': false,\n    'browser.safebrowsing.downloads.enabled': false,\n    'browser.safebrowsing.malware.enabled': false,\n    'browser.safebrowsing.phishing.enabled': false,\n\n    // Disable updates to search engines.\n    'browser.search.update': false,\n    // Do not restore the last open set of tabs if the browser has crashed\n    'browser.sessionstore.resume_from_crash': false,\n    // Skip check for default browser on startup\n    'browser.shell.checkDefaultBrowser': false,\n\n    // Disable newtabpage\n    'browser.startup.homepage': 'about:blank',\n    // Do not redirect user when a milstone upgrade of Firefox is detected\n    'browser.startup.homepage_override.mstone': 'ignore',\n    // Start with a blank page about:blank\n    'browser.startup.page': 0,\n\n    // Do not allow background tabs to be zombified on Android: otherwise for\n    // tests that open additional tabs: the test harness tab itself might get\n    // unloaded\n    'browser.tabs.disableBackgroundZombification': false,\n    // Do not warn when closing all other open tabs\n    'browser.tabs.warnOnCloseOtherTabs': false,\n    // Do not warn when multiple tabs will be opened\n    'browser.tabs.warnOnOpen': false,\n\n    // Do not automatically offer translations, as tests do not expect this.\n    'browser.translations.automaticallyPopup': false,\n\n    // Disable the UI tour.\n    'browser.uitour.enabled': false,\n    // Turn off search suggestions in the location bar so as not to trigger\n    // network connections.\n    'browser.urlbar.suggest.searches': false,\n    // Disable first run splash page on Windows 10\n    'browser.usedOnWindows10.introURL': '',\n    // Do not warn on quitting Firefox\n    'browser.warnOnQuit': false,\n\n    // Defensively disable data reporting systems\n    'datareporting.healthreport.documentServerURI': `http://${server}/dummy/healthreport/`,\n    'datareporting.healthreport.logging.consoleEnabled': false,\n    'datareporting.healthreport.service.enabled': false,\n    'datareporting.healthreport.service.firstRun': false,\n    'datareporting.healthreport.uploadEnabled': false,\n\n    // Do not show datareporting policy notifications which can interfere with tests\n    'datareporting.policy.dataSubmissionEnabled': false,\n    'datareporting.policy.dataSubmissionPolicyBypassNotification': true,\n\n    // DevTools JSONViewer sometimes fails to load dependencies with its require.js.\n    // This doesn't affect Puppeteer but spams console (Bug 1424372)\n    'devtools.jsonview.enabled': false,\n\n    // Disable popup-blocker\n    'dom.disable_open_during_load': false,\n\n    // Enable the support for File object creation in the content process\n    // Required for |Page.setFileInputFiles| protocol method.\n    'dom.file.createInChild': true,\n\n    // Disable the ProcessHangMonitor\n    'dom.ipc.reportProcessHangs': false,\n\n    // Disable slow script dialogues\n    'dom.max_chrome_script_run_time': 0,\n    'dom.max_script_run_time': 0,\n\n    // Disable background timer throttling to allow tests to run in parallel\n    // without a decrease in performance.\n    'dom.min_background_timeout_value': 0,\n    'dom.min_background_timeout_value_without_budget_throttling': 0,\n    'dom.timeout.enable_budget_timer_throttling': false,\n\n    // Disable HTTPS-First upgrades\n    'dom.security.https_first': false,\n\n    // Only load extensions from the application and user profile\n    // AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_APPLICATION\n    'extensions.autoDisableScopes': 0,\n    'extensions.enabledScopes': 5,\n\n    // Disable metadata caching for installed add-ons by default\n    'extensions.getAddons.cache.enabled': false,\n\n    // Disable installing any distribution extensions or add-ons.\n    'extensions.installDistroAddons': false,\n\n    // Disabled screenshots extension\n    'extensions.screenshots.disabled': true,\n\n    // Turn off extension updates so they do not bother tests\n    'extensions.update.enabled': false,\n\n    // Turn off extension updates so they do not bother tests\n    'extensions.update.notifyUser': false,\n\n    // Make sure opening about:addons will not hit the network\n    'extensions.webservice.discoverURL': `http://${server}/dummy/discoveryURL`,\n\n    // Allow the application to have focus even it runs in the background\n    'focusmanager.testmode': true,\n\n    // Disable useragent updates\n    'general.useragent.updates.enabled': false,\n\n    // Always use network provider for geolocation tests so we bypass the\n    // macOS dialog raised by the corelocation provider\n    'geo.provider.testing': true,\n\n    // Do not scan Wifi\n    'geo.wifi.scan': false,\n\n    // No hang monitor\n    'hangmonitor.timeout': 0,\n\n    // Show chrome errors and warnings in the error console\n    'javascript.options.showInConsole': true,\n\n    // Do not throttle rendering (requestAnimationFrame) in background tabs\n    'layout.testing.top-level-always-active': true,\n\n    // Disable download and usage of OpenH264: and Widevine plugins\n    'media.gmp-manager.updateEnabled': false,\n\n    // Disable the GFX sanity window\n    'media.sanity-test.disabled': true,\n\n    // Disable connectivity service pings\n    'network.connectivity-service.enabled': false,\n\n    // Disable experimental feature that is only available in Nightly\n    'network.cookie.sameSite.laxByDefault': false,\n\n    // Do not prompt for temporary redirects\n    'network.http.prompt-temp-redirect': false,\n\n    // Disable speculative connections so they are not reported as leaking\n    // when they are hanging around\n    'network.http.speculative-parallel-limit': 0,\n\n    // Do not automatically switch between offline and online\n    'network.manage-offline-status': false,\n\n    // Make sure SNTP requests do not hit the network\n    'network.sntp.pools': server,\n\n    // Disable Flash.\n    'plugin.state.flash': 0,\n\n    'privacy.trackingprotection.enabled': false,\n\n    // Can be removed once Firefox 89 is no longer supported\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1710839\n    'remote.enabled': true,\n\n    // Don't do network connections for mitm priming\n    'security.certerrors.mitm.priming.enabled': false,\n\n    // Local documents have access to all other local documents,\n    // including directory listings\n    'security.fileuri.strict_origin_policy': false,\n\n    // Do not wait for the notification button security delay\n    'security.notification_enable_delay': 0,\n\n    // Do not automatically fill sign-in forms with known usernames and\n    // passwords\n    'signon.autofillForms': false,\n\n    // Disable password capture, so that tests that include forms are not\n    // influenced by the presence of the persistent doorhanger notification\n    'signon.rememberSignons': false,\n\n    // Disable first-run welcome page\n    'startup.homepage_welcome_url': 'about:blank',\n\n    // Disable first-run welcome page\n    'startup.homepage_welcome_url.additional': '',\n\n    // Disable browser animations (tabs, fullscreen, sliding alerts)\n    'toolkit.cosmeticAnimations.enabled': false,\n\n    // Prevent starting into safe mode after application crashes\n    'toolkit.startup.max_resumed_crashes': -1,\n  };\n\n  return Object.assign(defaultPrefs, extraPrefs);\n}\n\n/**\n * Populates the user.js file with custom preferences as needed to allow\n * Firefox's CDP support to properly function. These preferences will be\n * automatically copied over to prefs.js during startup of Firefox. To be\n * able to restore the original values of preferences a backup of prefs.js\n * will be created.\n *\n * @param prefs - List of preferences to add.\n * @param profilePath - Firefox profile to write the preferences to.\n */\nasync function writePreferences(options: ProfileOptions): Promise<void> {\n  const prefsPath = path.join(options.path, 'prefs.js');\n  const lines = Object.entries(options.preferences).map(([key, value]) => {\n    return `user_pref(${JSON.stringify(key)}, ${JSON.stringify(value)});`;\n  });\n\n  // Use allSettled to prevent corruption\n  const result = await Promise.allSettled([\n    fs.promises.writeFile(path.join(options.path, 'user.js'), lines.join('\\n')),\n    // Create a backup of the preferences file if it already exitsts.\n    fs.promises.access(prefsPath, fs.constants.F_OK).then(\n      async () => {\n        await fs.promises.copyFile(\n          prefsPath,\n          path.join(options.path, 'prefs.js.playwright')\n        );\n      },\n      // Swallow only if file does not exist\n      () => {}\n    ),\n  ]);\n  for (const command of result) {\n    if (command.status === 'rejected') {\n      throw command.reason;\n    }\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport os from 'os';\nimport path from 'path';\n\nimport { wrapInASCIIBox } from '../utils/ascii';\nimport { BrowserReadyState, BrowserType, kNoXServerRunningError } from '../browserType';\nimport { BidiBrowser } from './bidiBrowser';\nimport { kBrowserCloseMessageId } from './bidiConnection';\nimport { createProfile } from './third_party/firefoxPrefs';\n\nimport type { BrowserOptions } from '../browser';\nimport type { SdkObject } from '../instrumentation';\nimport type { Env } from '../utils/processLauncher';\nimport type { ProtocolError } from '../protocolError';\nimport type { ConnectionTransport } from '../transport';\nimport type * as types from '../types';\n\n\nexport class BidiFirefox extends BrowserType {\n  constructor(parent: SdkObject) {\n    super(parent, 'bidi');\n  }\n\n  override async connectToTransport(transport: ConnectionTransport, options: BrowserOptions): Promise<BidiBrowser> {\n    return BidiBrowser.connect(this.attribution.playwright, transport, options);\n  }\n\n  override doRewriteStartupLog(error: ProtocolError): ProtocolError {\n    if (!error.logs)\n      return error;\n    // https://github.com/microsoft/playwright/issues/6500\n    if (error.logs.includes(`as root in a regular user's session is not supported.`))\n      error.logs = '\\n' + wrapInASCIIBox(`Firefox is unable to launch if the $HOME folder isn't owned by the current user.\\nWorkaround: Set the HOME=/root environment variable${process.env.GITHUB_ACTION ? ' in your GitHub Actions workflow file' : ''} when running Playwright.`, 1);\n    if (error.logs.includes('no DISPLAY environment variable specified'))\n      error.logs = '\\n' + wrapInASCIIBox(kNoXServerRunningError, 1);\n    return error;\n  }\n\n  override amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env {\n    if (!path.isAbsolute(os.homedir()))\n      throw new Error(`Cannot launch Firefox with relative home directory. Did you set ${os.platform() === 'win32' ? 'USERPROFILE' : 'HOME'} to a relative path?`);\n\n    env = {\n      ...env,\n      'MOZ_CRASHREPORTER': '1',\n      'MOZ_CRASHREPORTER_NO_REPORT': '1',\n      'MOZ_CRASHREPORTER_SHUTDOWN': '1',\n    };\n\n    if (os.platform() === 'linux') {\n      // Always remove SNAP_NAME and SNAP_INSTANCE_NAME env variables since they\n      // confuse Firefox: in our case, builds never come from SNAP.\n      // See https://github.com/microsoft/playwright/issues/20555\n      return { ...env, SNAP_NAME: undefined, SNAP_INSTANCE_NAME: undefined };\n    }\n    return env;\n  }\n\n  override attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void {\n    transport.send({ method: 'browser.close', params: {}, id: kBrowserCloseMessageId });\n  }\n\n  override supportsPipeTransport(): boolean {\n    return false;\n  }\n\n  override async prepareUserDataDir(options: types.LaunchOptions, userDataDir: string): Promise<void> {\n    await createProfile({\n      path: userDataDir,\n      preferences: options.firefoxUserPrefs || {},\n    });\n  }\n\n  override defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[] {\n    const { args = [], headless } = options;\n    const userDataDirArg = args.find(arg => arg.startsWith('-profile') || arg.startsWith('--profile'));\n    if (userDataDirArg)\n      throw this._createUserDataDirArgMisuseError('--profile');\n    const firefoxArguments = ['--remote-debugging-port=0'];\n    if (headless)\n      firefoxArguments.push('--headless');\n    else\n      firefoxArguments.push('--foreground');\n    firefoxArguments.push(`--profile`, userDataDir);\n    firefoxArguments.push(...args);\n    return firefoxArguments;\n  }\n\n  override readyState(options: types.LaunchOptions): BrowserReadyState | undefined {\n    return new FirefoxReadyState();\n  }\n}\n\nclass FirefoxReadyState extends BrowserReadyState {\n  override onBrowserOutput(message: string): void {\n    // Bidi WebSocket in Firefox.\n    const match = message.match(/WebDriver BiDi listening on (ws:\\/\\/.*)$/);\n    if (match)\n      this._wsEndpoint.resolve(match[1] + '/session');\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\n\nimport type { CRSession } from './crConnection';\n\nconst kBindingName = '__pw_devtools__';\n\n// This class intercepts preferences-related DevTools embedder methods\n// and stores preferences as a json file in the browser installation directory.\nexport class CRDevTools {\n  private _preferencesPath: string;\n  private _prefs: any;\n  private _savePromise: Promise<any>;\n  __testHookOnBinding?: (parsed: any) => any;\n\n  constructor(preferencesPath: string) {\n    this._preferencesPath = preferencesPath;\n    this._savePromise = Promise.resolve();\n  }\n\n  install(session: CRSession) {\n    session.on('Runtime.bindingCalled', async event => {\n      if (event.name !== kBindingName)\n        return;\n      const parsed = JSON.parse(event.payload);\n      let result = undefined;\n      if (this.__testHookOnBinding)\n        this.__testHookOnBinding(parsed);\n      if (parsed.method === 'getPreferences') {\n        if (this._prefs === undefined) {\n          try {\n            const json = await fs.promises.readFile(this._preferencesPath, 'utf8');\n            this._prefs = JSON.parse(json);\n          } catch (e) {\n            this._prefs = {};\n          }\n        }\n        result = this._prefs;\n      } else if (parsed.method === 'setPreference') {\n        this._prefs[parsed.params[0]] = parsed.params[1];\n        this._save();\n      } else if (parsed.method === 'removePreference') {\n        delete this._prefs[parsed.params[0]];\n        this._save();\n      } else if (parsed.method === 'clearPreferences') {\n        this._prefs = {};\n        this._save();\n      }\n      session.send('Runtime.evaluate', {\n        expression: `window.DevToolsAPI.embedderMessageAck(${parsed.id}, ${JSON.stringify(result)})`,\n        contextId: event.executionContextId\n      }).catch(e => null);\n    });\n    Promise.all([\n      session.send('Runtime.enable'),\n      session.send('Runtime.addBinding', { name: kBindingName }),\n      session.send('Page.enable'),\n      session.send('Page.addScriptToEvaluateOnNewDocument', { source: `\n        (() => {\n          const init = () => {\n            // Lazy init happens when InspectorFrontendHost is initialized.\n            // At this point DevToolsHost is ready to be used.\n            const host = window.DevToolsHost;\n            const old = host.sendMessageToEmbedder.bind(host);\n            host.sendMessageToEmbedder = message => {\n              if (['getPreferences', 'setPreference', 'removePreference', 'clearPreferences'].includes(JSON.parse(message).method))\n                window.${kBindingName}(message);\n              else\n                old(message);\n            };\n          };\n          let value;\n          Object.defineProperty(window, 'InspectorFrontendHost', {\n            configurable: true,\n            enumerable: true,\n            get() { return value; },\n            set(v) { value = v; init(); },\n          });\n        })()\n      ` }),\n      session.send('Runtime.runIfWaitingForDebugger'),\n    ]).catch(e => null);\n  }\n\n  _save() {\n    // Serialize saves to avoid corruption.\n    this._savePromise = this._savePromise.then(async () => {\n      await fs.promises.writeFile(this._preferencesPath, JSON.stringify(this._prefs)).catch(e => null);\n    });\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { chromiumSwitches } from './chromiumSwitches';\nimport { CRBrowser } from './crBrowser';\nimport { kBrowserCloseMessageId } from './crConnection';\nimport { debugMode, headersArrayToObject, headersObjectToArray, } from '../../utils';\nimport { wrapInASCIIBox } from '../utils/ascii';\nimport { RecentLogsCollector } from '../utils/debugLogger';\nimport { ManualPromise } from '../../utils/isomorphic/manualPromise';\nimport { fetchData } from '../utils/network';\nimport { getUserAgent } from '../utils/userAgent';\nimport { validateBrowserContextOptions } from '../browserContext';\nimport { BrowserType, kNoXServerRunningError } from '../browserType';\nimport { BrowserReadyState } from '../browserType';\nimport { helper } from '../helper';\nimport { registry } from '../registry';\nimport { WebSocketTransport } from '../transport';\nimport { CRDevTools } from './crDevTools';\nimport { Browser } from '../browser';\nimport { removeFolders } from '../utils/fileUtils';\nimport { gracefullyCloseSet } from '../utils/processLauncher';\nimport { ProgressController } from '../progress';\n\nimport type { HTTPRequestParams } from '../utils/network';\nimport type { BrowserOptions, BrowserProcess } from '../browser';\nimport type { CallMetadata, SdkObject } from '../instrumentation';\nimport type { Env } from '../utils/processLauncher';\nimport type { Progress } from '../progress';\nimport type { ProtocolError } from '../protocolError';\nimport type { ConnectionTransport, ProtocolRequest } from '../transport';\nimport type * as types from '../types';\nimport type http from 'http';\nimport type stream from 'stream';\n\nconst ARTIFACTS_FOLDER = path.join(os.tmpdir(), 'playwright-artifacts-');\n\nexport class Chromium extends BrowserType {\n  private _devtools: CRDevTools | undefined;\n\n  constructor(parent: SdkObject) {\n    super(parent, 'chromium');\n\n    if (debugMode())\n      this._devtools = this._createDevTools();\n  }\n\n  override async connectOverCDP(metadata: CallMetadata, endpointURL: string, options: { slowMo?: number, headers?: types.HeadersArray, timeout: number }) {\n    const controller = new ProgressController(metadata, this);\n    controller.setLogName('browser');\n    return controller.run(async progress => {\n      return await this._connectOverCDPInternal(progress, endpointURL, options);\n    }, options.timeout);\n  }\n\n  async _connectOverCDPInternal(progress: Progress, endpointURL: string, options: types.LaunchOptions & { headers?: types.HeadersArray }, onClose?: () => Promise<void>) {\n    let headersMap: { [key: string]: string; } | undefined;\n    if (options.headers)\n      headersMap = headersArrayToObject(options.headers, false);\n\n    if (!headersMap)\n      headersMap = { 'User-Agent': getUserAgent() };\n    else if (headersMap && !Object.keys(headersMap).some(key => key.toLowerCase() === 'user-agent'))\n      headersMap['User-Agent'] = getUserAgent();\n\n    const artifactsDir = await fs.promises.mkdtemp(ARTIFACTS_FOLDER);\n\n    const wsEndpoint = await urlToWSEndpoint(progress, endpointURL, headersMap);\n    progress.throwIfAborted();\n\n    const chromeTransport = await WebSocketTransport.connect(progress, wsEndpoint, { headers: headersMap });\n    const cleanedUp = new ManualPromise<void>();\n    const doCleanup = async () => {\n      await removeFolders([artifactsDir]);\n      await onClose?.();\n      cleanedUp.resolve();\n    };\n    const doClose = async () => {\n      await chromeTransport.closeAndWait();\n      await cleanedUp;\n    };\n    const browserProcess: BrowserProcess = { close: doClose, kill: doClose };\n    const persistent: types.BrowserContextOptions = { noDefaultViewport: true };\n    const browserOptions: BrowserOptions = {\n      slowMo: options.slowMo,\n      name: 'chromium',\n      isChromium: true,\n      persistent,\n      browserProcess,\n      protocolLogger: helper.debugProtocolLogger(),\n      browserLogsCollector: new RecentLogsCollector(),\n      artifactsDir,\n      downloadsPath: options.downloadsPath || artifactsDir,\n      tracesDir: options.tracesDir || artifactsDir,\n      originalLaunchOptions: { timeout: options.timeout },\n    };\n    validateBrowserContextOptions(persistent, browserOptions);\n    progress.throwIfAborted();\n    const browser = await CRBrowser.connect(this.attribution.playwright, chromeTransport, browserOptions);\n    browser._isCollocatedWithServer = false;\n    browser.on(Browser.Events.Disconnected, doCleanup);\n    return browser;\n  }\n\n  private _createDevTools() {\n    // TODO: this is totally wrong when using channels.\n    const directory = registry.findExecutable('chromium').directory;\n    return directory ? new CRDevTools(path.join(directory, 'devtools-preferences.json')) : undefined;\n  }\n\n  override async connectToTransport(transport: ConnectionTransport, options: BrowserOptions, browserLogsCollector: RecentLogsCollector): Promise<CRBrowser> {\n    let devtools = this._devtools;\n    if ((options as any).__testHookForDevTools) {\n      devtools = this._createDevTools();\n      await (options as any).__testHookForDevTools(devtools);\n    }\n    try {\n      return await CRBrowser.connect(this.attribution.playwright, transport, options, devtools);\n    } catch (e) {\n      if (browserLogsCollector.recentLogs().some(log => log.includes('Failed to create a ProcessSingleton for your profile directory.'))) {\n        throw new Error(\n            'Failed to create a ProcessSingleton for your profile directory. ' +\n            'This usually means that the profile is already in use by another instance of Chromium.'\n        );\n      }\n      throw e;\n    }\n  }\n\n  override doRewriteStartupLog(error: ProtocolError): ProtocolError {\n    if (!error.logs)\n      return error;\n    if (error.logs.includes('Missing X server'))\n      error.logs = '\\n' + wrapInASCIIBox(kNoXServerRunningError, 1);\n    // These error messages are taken from Chromium source code as of July, 2020:\n    // https://github.com/chromium/chromium/blob/70565f67e79f79e17663ad1337dc6e63ee207ce9/content/browser/zygote_host/zygote_host_impl_linux.cc\n    if (!error.logs.includes('crbug.com/357670') && !error.logs.includes('No usable sandbox!') && !error.logs.includes('crbug.com/638180'))\n      return error;\n    error.logs = [\n      `Chromium sandboxing failed!`,\n      `================================`,\n      `To avoid the sandboxing issue, do either of the following:`,\n      `  - (preferred): Configure your environment to support sandboxing`,\n      `  - (alternative): Launch Chromium without sandbox using 'chromiumSandbox: false' option`,\n      `================================`,\n      ``,\n    ].join('\\n');\n    return error;\n  }\n\n  override amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env {\n    return env;\n  }\n\n  override attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void {\n    const message: ProtocolRequest = { method: 'Browser.close', id: kBrowserCloseMessageId, params: {} };\n    transport.send(message);\n  }\n\n  override async _launchWithSeleniumHub(progress: Progress, hubUrl: string, options: types.LaunchOptions): Promise<CRBrowser> {\n    await this._createArtifactDirs(options);\n\n    if (!hubUrl.endsWith('/'))\n      hubUrl = hubUrl + '/';\n\n    const args = this._innerDefaultArgs(options);\n    args.push('--remote-debugging-port=0');\n    const isEdge = options.channel && options.channel.startsWith('msedge');\n    let desiredCapabilities = {\n      'browserName': isEdge ? 'MicrosoftEdge' : 'chrome',\n      [isEdge ? 'ms:edgeOptions' : 'goog:chromeOptions']: { args }\n    };\n\n    if (process.env.SELENIUM_REMOTE_CAPABILITIES) {\n      const remoteCapabilities = parseSeleniumRemoteParams({ name: 'capabilities', value: process.env.SELENIUM_REMOTE_CAPABILITIES }, progress);\n      if (remoteCapabilities)\n        desiredCapabilities = { ...desiredCapabilities, ...remoteCapabilities };\n    }\n\n    let headers: { [key: string]: string } = {};\n    if (process.env.SELENIUM_REMOTE_HEADERS) {\n      const remoteHeaders = parseSeleniumRemoteParams({ name: 'headers', value: process.env.SELENIUM_REMOTE_HEADERS }, progress);\n      if (remoteHeaders)\n        headers = remoteHeaders;\n    }\n\n    progress.log(`<selenium> connecting to ${hubUrl}`);\n    const response = await fetchData({\n      url: hubUrl + 'session',\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json; charset=utf-8',\n        ...headers,\n      },\n      data: JSON.stringify({\n        capabilities: { alwaysMatch: desiredCapabilities }\n      }),\n      timeout: progress.timeUntilDeadline(),\n    }, seleniumErrorHandler);\n    const value = JSON.parse(response).value;\n    const sessionId = value.sessionId;\n    progress.log(`<selenium> connected to sessionId=${sessionId}`);\n\n    const disconnectFromSelenium = async () => {\n      progress.log(`<selenium> disconnecting from sessionId=${sessionId}`);\n      await fetchData({\n        url: hubUrl + 'session/' + sessionId,\n        method: 'DELETE',\n        headers,\n      }).catch(error => progress.log(`<error disconnecting from selenium>: ${error}`));\n      progress.log(`<selenium> disconnected from sessionId=${sessionId}`);\n      gracefullyCloseSet.delete(disconnectFromSelenium);\n    };\n    gracefullyCloseSet.add(disconnectFromSelenium);\n\n    try {\n      const capabilities = value.capabilities;\n      let endpointURL: URL;\n\n      if (capabilities['se:cdp']) {\n        // Selenium 4 - use built-in CDP websocket proxy.\n        progress.log(`<selenium> using selenium v4`);\n        const endpointURLString = addProtocol(capabilities['se:cdp']);\n        endpointURL = new URL(endpointURLString);\n        if (endpointURL.hostname === 'localhost' || endpointURL.hostname === '127.0.0.1')\n          endpointURL.hostname = new URL(hubUrl).hostname;\n        progress.log(`<selenium> retrieved endpoint ${endpointURL.toString()} for sessionId=${sessionId}`);\n      } else {\n        // Selenium 3 - resolve target node IP to use instead of localhost ws url.\n        progress.log(`<selenium> using selenium v3`);\n        const maybeChromeOptions = capabilities['goog:chromeOptions'];\n        const chromeOptions = maybeChromeOptions && typeof maybeChromeOptions === 'object' ? maybeChromeOptions : undefined;\n        const debuggerAddress = chromeOptions && typeof chromeOptions.debuggerAddress === 'string' ? chromeOptions.debuggerAddress : undefined;\n        const chromeOptionsURL = typeof maybeChromeOptions === 'string' ? maybeChromeOptions : undefined;\n        // TODO(dgozman): figure out if we can make ChromeDriver to return 127.0.0.1 instead of localhost.\n        const endpointURLString = addProtocol(debuggerAddress || chromeOptionsURL).replace('localhost', '127.0.0.1');\n        progress.log(`<selenium> retrieved endpoint ${endpointURLString} for sessionId=${sessionId}`);\n        endpointURL = new URL(endpointURLString);\n        if (endpointURL.hostname === 'localhost' || endpointURL.hostname === '127.0.0.1') {\n          const sessionInfoUrl = new URL(hubUrl).origin + '/grid/api/testsession?session=' + sessionId;\n          try {\n            const sessionResponse = await fetchData({\n              url: sessionInfoUrl,\n              method: 'GET',\n              timeout: progress.timeUntilDeadline(),\n              headers,\n            }, seleniumErrorHandler);\n            const proxyId = JSON.parse(sessionResponse).proxyId;\n            endpointURL.hostname = new URL(proxyId).hostname;\n            progress.log(`<selenium> resolved endpoint ip ${endpointURL.toString()} for sessionId=${sessionId}`);\n          } catch (e) {\n            progress.log(`<selenium> unable to resolve endpoint ip for sessionId=${sessionId}, running in standalone?`);\n          }\n        }\n      }\n\n      return await this._connectOverCDPInternal(progress, endpointURL.toString(), {\n        ...options,\n        headers: headersObjectToArray(headers),\n      }, disconnectFromSelenium);\n    } catch (e) {\n      await disconnectFromSelenium();\n      throw e;\n    }\n  }\n\n  override defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[] {\n    const chromeArguments = this._innerDefaultArgs(options);\n    chromeArguments.push(`--user-data-dir=${userDataDir}`);\n    if (options.cdpPort !== undefined)\n      chromeArguments.push(`--remote-debugging-port=${options.cdpPort}`);\n    else\n      chromeArguments.push('--remote-debugging-pipe');\n    if (isPersistent)\n      chromeArguments.push('about:blank');\n    else\n      chromeArguments.push('--no-startup-window');\n    return chromeArguments;\n  }\n\n  private _innerDefaultArgs(options: types.LaunchOptions): string[] {\n    const { args = [] } = options;\n    const userDataDirArg = args.find(arg => arg.startsWith('--user-data-dir'));\n    if (userDataDirArg)\n      throw this._createUserDataDirArgMisuseError('--user-data-dir');\n    if (args.find(arg => arg.startsWith('--remote-debugging-pipe')))\n      throw new Error('Playwright manages remote debugging connection itself.');\n    if (args.find(arg => !arg.startsWith('-')))\n      throw new Error('Arguments can not specify page to be opened');\n    const chromeArguments = [...chromiumSwitches(options.assistantMode, options.channel)];\n\n    if (os.platform() === 'darwin') {\n      // See https://github.com/microsoft/playwright/issues/7362\n      chromeArguments.push('--enable-use-zoom-for-dsf=false');\n      // See https://bugs.chromium.org/p/chromium/issues/detail?id=1407025.\n      if (options.headless && (!options.channel || options.channel === 'chromium-headless-shell'))\n        chromeArguments.push('--use-angle');\n    }\n\n    if (options.devtools)\n      chromeArguments.push('--auto-open-devtools-for-tabs');\n    if (options.headless) {\n      chromeArguments.push('--headless');\n\n      chromeArguments.push(\n          '--hide-scrollbars',\n          '--mute-audio',\n          '--blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4',\n      );\n    }\n    if (options.chromiumSandbox !== true)\n      chromeArguments.push('--no-sandbox');\n    const proxy = options.proxyOverride || options.proxy;\n    if (proxy) {\n      const proxyURL = new URL(proxy.server);\n      const isSocks = proxyURL.protocol === 'socks5:';\n      // https://www.chromium.org/developers/design-documents/network-settings\n      if (isSocks && !this.attribution.playwright.options.socksProxyPort) {\n        // https://www.chromium.org/developers/design-documents/network-stack/socks-proxy\n        chromeArguments.push(`--host-resolver-rules=\"MAP * ~NOTFOUND , EXCLUDE ${proxyURL.hostname}\"`);\n      }\n      chromeArguments.push(`--proxy-server=${proxy.server}`);\n      const proxyBypassRules = [];\n      // https://source.chromium.org/chromium/chromium/src/+/master:net/docs/proxy.md;l=548;drc=71698e610121078e0d1a811054dcf9fd89b49578\n      if (this.attribution.playwright.options.socksProxyPort)\n        proxyBypassRules.push('<-loopback>');\n      if (proxy.bypass)\n        proxyBypassRules.push(...proxy.bypass.split(',').map(t => t.trim()).map(t => t.startsWith('.') ? '*' + t : t));\n      if (!process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK && !proxyBypassRules.includes('<-loopback>'))\n        proxyBypassRules.push('<-loopback>');\n      if (proxyBypassRules.length > 0)\n        chromeArguments.push(`--proxy-bypass-list=${proxyBypassRules.join(';')}`);\n    }\n    chromeArguments.push(...args);\n    return chromeArguments;\n  }\n\n  override readyState(options: types.LaunchOptions): BrowserReadyState | undefined {\n    if (options.cdpPort !== undefined || options.args?.some(a => a.startsWith('--remote-debugging-port')))\n      return new ChromiumReadyState();\n    return undefined;\n  }\n\n  override getExecutableName(options: types.LaunchOptions): string {\n    if (options.channel)\n      return options.channel;\n    return options.headless ? 'chromium-headless-shell' : 'chromium';\n  }\n}\n\nclass ChromiumReadyState extends BrowserReadyState {\n  override onBrowserOutput(message: string): void {\n    if (message.includes('Failed to create a ProcessSingleton for your profile directory.')) {\n      this._wsEndpoint.reject(new Error('Failed to create a ProcessSingleton for your profile directory. ' +\n        'This usually means that the profile is already in use by another instance of Chromium.'));\n    }\n    const match = message.match(/DevTools listening on (.*)/);\n    if (match)\n      this._wsEndpoint.resolve(match[1]);\n  }\n}\n\nasync function urlToWSEndpoint(progress: Progress, endpointURL: string, headers: { [key: string]: string; }) {\n  if (endpointURL.startsWith('ws'))\n    return endpointURL;\n  progress.log(`<ws preparing> retrieving websocket url from ${endpointURL}`);\n  const url = new URL(endpointURL);\n  url.pathname += 'json/version/';\n  const httpURL = url.toString();\n\n  const json = await fetchData({\n    url: httpURL,\n    headers,\n  }, async (_, resp) => new Error(`Unexpected status ${resp.statusCode} when connecting to ${httpURL}.\\n` +\n    `This does not look like a DevTools server, try connecting via ws://.`)\n  );\n  return JSON.parse(json).webSocketDebuggerUrl;\n}\n\nasync function seleniumErrorHandler(params: HTTPRequestParams, response: http.IncomingMessage) {\n  const body = await streamToString(response);\n  let message = body;\n  try {\n    const json = JSON.parse(body);\n    message = json.value.localizedMessage || json.value.message;\n  } catch (e) {\n  }\n  return new Error(`Error connecting to Selenium at ${params.url}: ${message}`);\n}\n\nfunction addProtocol(url: string) {\n  if (!['ws://', 'wss://', 'http://', 'https://'].some(protocol => url.startsWith(protocol)))\n    return 'http://' + url;\n  return url;\n}\n\nfunction streamToString(stream: stream.Readable): Promise<string> {\n  return new Promise<string>((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    stream.on('data', chunk => chunks.push(Buffer.from(chunk)));\n    stream.on('error', reject);\n    stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));\n  });\n}\n\nfunction parseSeleniumRemoteParams(env: {name: string, value: string}, progress: Progress) {\n  try {\n    const parsed = JSON.parse(env.value);\n    progress.log(`<selenium> using additional ${env.name} \"${env.value}\"`);\n    return parsed;\n  } catch (e) {\n    progress.log(`<selenium> ignoring additional ${env.name} \"${env.value}\": ${e}`);\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SdkObject, createInstrumentation, serverSideCallMetadata } from './instrumentation';\nimport { gracefullyProcessExitDoNotHang } from './utils/processLauncher';\nimport { Recorder } from './recorder';\nimport { asLocator, DEFAULT_PLAYWRIGHT_LAUNCH_TIMEOUT, DEFAULT_PLAYWRIGHT_TIMEOUT  } from '../utils';\nimport { parseAriaSnapshotUnsafe } from '../utils/isomorphic/ariaSnapshot';\nimport { yaml } from '../utilsBundle';\nimport { EmptyRecorderApp } from './recorder/recorderApp';\nimport { unsafeLocatorOrSelectorAsSelector } from '../utils/isomorphic/locatorParser';\n\nimport type { Language } from '../utils';\nimport type { Browser } from './browser';\nimport type { BrowserContext } from './browserContext';\nimport type { InstrumentationListener } from './instrumentation';\nimport type { Playwright } from './playwright';\nimport type { ElementInfo, Mode, Source } from '@recorder/recorderTypes';\n\nconst internalMetadata = serverSideCallMetadata();\n\nexport class DebugController extends SdkObject {\n  static Events = {\n    StateChanged: 'stateChanged',\n    InspectRequested: 'inspectRequested',\n    SourceChanged: 'sourceChanged',\n    Paused: 'paused',\n    SetModeRequested: 'setModeRequested',\n  };\n\n  private _trackHierarchyListener: InstrumentationListener | undefined;\n  private _playwright: Playwright;\n  _sdkLanguage: Language = 'javascript';\n  _codegenId: string = 'playwright-test';\n\n  constructor(playwright: Playwright) {\n    super({ attribution: { isInternalPlaywright: true }, instrumentation: createInstrumentation() } as any, undefined, 'DebugController');\n    this._playwright = playwright;\n  }\n\n  initialize(codegenId: string, sdkLanguage: Language) {\n    this._codegenId = codegenId;\n    this._sdkLanguage = sdkLanguage;\n  }\n\n  dispose() {\n    this.setReportStateChanged(false);\n  }\n\n  setReportStateChanged(enabled: boolean) {\n    if (enabled && !this._trackHierarchyListener) {\n      this._trackHierarchyListener = {\n        onPageOpen: () => this._emitSnapshot(false),\n        onPageClose: () => this._emitSnapshot(false),\n      };\n      this._playwright.instrumentation.addListener(this._trackHierarchyListener, null);\n      this._emitSnapshot(true);\n    } else if (!enabled && this._trackHierarchyListener) {\n      this._playwright.instrumentation.removeListener(this._trackHierarchyListener);\n      this._trackHierarchyListener = undefined;\n    }\n  }\n\n  async resetForReuse() {\n    const contexts = new Set<BrowserContext>();\n    for (const page of this._playwright.allPages())\n      contexts.add(page.browserContext);\n    for (const context of contexts)\n      await context.resetForReuse(internalMetadata, null);\n  }\n\n  async navigate(url: string) {\n    for (const p of this._playwright.allPages())\n      await p.mainFrame().goto(internalMetadata, url, { timeout: DEFAULT_PLAYWRIGHT_TIMEOUT });\n  }\n\n  async setRecorderMode(params: { mode: Mode, file?: string, testIdAttributeName?: string }) {\n    // TODO: |file| is only used in the legacy mode.\n    await this._closeBrowsersWithoutPages();\n\n    if (params.mode === 'none') {\n      for (const recorder of await this._allRecorders()) {\n        recorder.hideHighlightedSelector();\n        recorder.setMode('none');\n      }\n      return;\n    }\n\n    if (!this._playwright.allBrowsers().length)\n      await this._playwright.chromium.launch(internalMetadata, { headless: !!process.env.PW_DEBUG_CONTROLLER_HEADLESS, timeout: DEFAULT_PLAYWRIGHT_LAUNCH_TIMEOUT });\n    // Create page if none.\n    const pages = this._playwright.allPages();\n    if (!pages.length) {\n      const [browser] = this._playwright.allBrowsers();\n      const { context } = await browser.newContextForReuse({}, internalMetadata);\n      await context.newPage(internalMetadata);\n    }\n    // Update test id attribute.\n    if (params.testIdAttributeName) {\n      for (const page of this._playwright.allPages())\n        page.browserContext.selectors().setTestIdAttributeName(params.testIdAttributeName);\n    }\n    // Toggle the mode.\n    for (const recorder of await this._allRecorders()) {\n      recorder.hideHighlightedSelector();\n      if (params.mode !== 'inspecting')\n        recorder.setOutput(this._codegenId, params.file);\n      recorder.setMode(params.mode);\n    }\n  }\n\n  async highlight(params: { selector?: string, ariaTemplate?: string }) {\n    // Assert parameters validity.\n    if (params.selector)\n      unsafeLocatorOrSelectorAsSelector(this._sdkLanguage, params.selector, 'data-testid');\n    const ariaTemplate = params.ariaTemplate ? parseAriaSnapshotUnsafe(yaml, params.ariaTemplate) : undefined;\n    for (const recorder of await this._allRecorders()) {\n      if (ariaTemplate)\n        recorder.setHighlightedAriaTemplate(ariaTemplate);\n      else if (params.selector)\n        recorder.setHighlightedSelector(this._sdkLanguage, params.selector);\n    }\n  }\n\n  async hideHighlight() {\n    // Hide all active recorder highlights.\n    for (const recorder of await this._allRecorders())\n      recorder.hideHighlightedSelector();\n    // Hide all locator.highlight highlights.\n    await this._playwright.hideHighlight();\n  }\n\n  allBrowsers(): Browser[] {\n    return [...this._playwright.allBrowsers()];\n  }\n\n  async resume() {\n    for (const recorder of await this._allRecorders())\n      recorder.resume();\n  }\n\n  async kill() {\n    gracefullyProcessExitDoNotHang(0);\n  }\n\n  async closeAllBrowsers() {\n    await Promise.all(this.allBrowsers().map(browser => browser.close({ reason: 'Close all browsers requested' })));\n  }\n\n  private _emitSnapshot(initial: boolean) {\n    const pageCount = this._playwright.allPages().length;\n    if (initial && !pageCount)\n      return;\n    this.emit(DebugController.Events.StateChanged, { pageCount });\n  }\n\n  private async _allRecorders(): Promise<Recorder[]> {\n    const contexts = new Set<BrowserContext>();\n    for (const page of this._playwright.allPages())\n      contexts.add(page.browserContext);\n    const result = await Promise.all([...contexts].map(c => Recorder.showInspector(c, { omitCallTracking: true }, () => Promise.resolve(new InspectingRecorderApp(this)))));\n    return result.filter(Boolean) as Recorder[];\n  }\n\n  private async _closeBrowsersWithoutPages() {\n    for (const browser of this._playwright.allBrowsers()) {\n      for (const context of browser.contexts()) {\n        if (!context.pages().length)\n          await context.close({ reason: 'Browser collected' });\n      }\n      if (!browser.contexts())\n        await browser.close({ reason: 'Browser collected' });\n    }\n  }\n}\n\nclass InspectingRecorderApp extends EmptyRecorderApp {\n  private _debugController: DebugController;\n\n  constructor(debugController: DebugController) {\n    super();\n    this._debugController = debugController;\n  }\n\n  override async elementPicked(elementInfo: ElementInfo): Promise<void> {\n    const locator: string = asLocator(this._debugController._sdkLanguage, elementInfo.selector);\n    this._debugController.emit(DebugController.Events.InspectRequested, { selector: elementInfo.selector, locator, ariaSnapshot: elementInfo.ariaSnapshot });\n  }\n\n  override async setSources(sources: Source[]): Promise<void> {\n    const source = sources.find(s => s.id === this._debugController._codegenId);\n    const { text, header, footer, actions } = source || { text: '' };\n    this._debugController.emit(DebugController.Events.SourceChanged, { text, header, footer, actions });\n  }\n\n  override async setPaused(paused: boolean) {\n    this._debugController.emit(DebugController.Events.Paused, { paused });\n  }\n\n  override async setMode(mode: Mode) {\n    this._debugController.emit(DebugController.Events.SetModeRequested, { mode });\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport { debugLogger } from '../utils/debugLogger';\nimport { helper } from '../helper';\nimport { ProtocolError } from '../protocolError';\n\nimport type { ConnectionTransport, ProtocolRequest, ProtocolResponse } from '../transport';\nimport type { Protocol } from './protocol';\nimport type { RecentLogsCollector } from '../utils/debugLogger';\nimport type { ProtocolLogger } from '../types';\n\n\nexport const ConnectionEvents = {\n  Disconnected: Symbol('Disconnected'),\n};\n\n// FFPlaywright uses this special id to issue Browser.close command which we\n// should ignore.\nexport const kBrowserCloseMessageId = -9999;\n\nexport class FFConnection extends EventEmitter {\n  private _lastId: number;\n  private _transport: ConnectionTransport;\n  private readonly _protocolLogger: ProtocolLogger;\n  private readonly _browserLogsCollector: RecentLogsCollector;\n  _browserDisconnectedLogs: string | undefined;\n  readonly rootSession: FFSession;\n  readonly _sessions: Map<string, FFSession>;\n  _closed: boolean;\n\n  constructor(transport: ConnectionTransport, protocolLogger: ProtocolLogger, browserLogsCollector: RecentLogsCollector) {\n    super();\n    this.setMaxListeners(0);\n    this._transport = transport;\n    this._protocolLogger = protocolLogger;\n    this._browserLogsCollector = browserLogsCollector;\n    this._lastId = 0;\n    this._sessions = new Map();\n    this._closed = false;\n    this.rootSession = new FFSession(this, '', message => this._rawSend(message));\n    this._sessions.set('', this.rootSession);\n\n    this._transport.onmessage = this._onMessage.bind(this);\n    // onclose should be set last, since it can be immediately called.\n    this._transport.onclose = this._onClose.bind(this);\n  }\n\n  nextMessageId(): number {\n    return ++this._lastId;\n  }\n\n  _rawSend(message: ProtocolRequest) {\n    this._protocolLogger('send', message);\n    this._transport.send(message);\n  }\n\n  async _onMessage(message: ProtocolResponse) {\n    this._protocolLogger('receive', message);\n    if (message.id === kBrowserCloseMessageId)\n      return;\n    const session = this._sessions.get(message.sessionId || '');\n    if (session)\n      session.dispatchMessage(message);\n  }\n\n  _onClose(reason?: string) {\n    this._closed = true;\n    this._transport.onmessage = undefined;\n    this._transport.onclose = undefined;\n    this._browserDisconnectedLogs = helper.formatBrowserLogs(this._browserLogsCollector.recentLogs(), reason);\n    this.rootSession.dispose();\n    Promise.resolve().then(() => this.emit(ConnectionEvents.Disconnected));\n  }\n\n  close() {\n    if (!this._closed)\n      this._transport.close();\n  }\n\n  createSession(sessionId: string): FFSession {\n    const session = new FFSession(this, sessionId, message => this._rawSend({ ...message, sessionId }));\n    this._sessions.set(sessionId, session);\n    return session;\n  }\n}\n\nexport class FFSession extends EventEmitter {\n  _connection: FFConnection;\n  _disposed = false;\n  private _callbacks: Map<number, { resolve: Function, reject: Function, error: ProtocolError }>;\n  private _sessionId: string;\n  private _rawSend: (message: any) => void;\n  private _crashed: boolean = false;\n  override on: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n  override addListener: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n  override off: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n  override removeListener: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n  override once: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n\n  constructor(connection: FFConnection, sessionId: string, rawSend: (message: any) => void) {\n    super();\n    this.setMaxListeners(0);\n    this._callbacks = new Map();\n    this._connection = connection;\n    this._sessionId = sessionId;\n    this._rawSend = rawSend;\n\n    this.on = super.on;\n    this.addListener = super.addListener;\n    this.off = super.removeListener;\n    this.removeListener = super.removeListener;\n    this.once = super.once;\n  }\n\n  markAsCrashed() {\n    this._crashed = true;\n  }\n\n  async send<T extends keyof Protocol.CommandParameters>(\n    method: T,\n    params?: Protocol.CommandParameters[T]\n  ): Promise<Protocol.CommandReturnValues[T]> {\n    if (this._crashed || this._disposed || this._connection._closed || this._connection._browserDisconnectedLogs)\n      throw new ProtocolError(this._crashed ? 'crashed' : 'closed', undefined, this._connection._browserDisconnectedLogs);\n    const id = this._connection.nextMessageId();\n    this._rawSend({ method, params, id });\n    return new Promise((resolve, reject) => {\n      this._callbacks.set(id, { resolve, reject, error: new ProtocolError('error', method) });\n    });\n  }\n\n  sendMayFail<T extends keyof Protocol.CommandParameters>(method: T, params?: Protocol.CommandParameters[T]): Promise<Protocol.CommandReturnValues[T] | void> {\n    return this.send(method, params).catch(error => debugLogger.log('error', error));\n  }\n\n  dispatchMessage(object: ProtocolResponse) {\n    if (object.id) {\n      const callback = this._callbacks.get(object.id);\n      // Callbacks could be all rejected if someone has called `.dispose()`.\n      if (callback) {\n        this._callbacks.delete(object.id);\n        if (object.error) {\n          callback.error.setMessage(object.error.message);\n          callback.reject(callback.error);\n        } else {\n          callback.resolve(object.result);\n        }\n      }\n    } else {\n      Promise.resolve().then(() => this.emit(object.method!, object.params));\n    }\n  }\n\n  dispose() {\n    this._disposed = true;\n    this._connection._sessions.delete(this._sessionId);\n    for (const callback of this._callbacks.values()) {\n      callback.error.type = this._crashed ? 'crashed' : 'closed';\n      callback.error.logs = this._connection._browserDisconnectedLogs;\n      callback.reject(callback.error);\n    }\n    this._callbacks.clear();\n  }\n}\n","/**\n * Copyright 2018 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type * as accessibility from '../accessibility';\nimport type { FFSession } from './ffConnection';\nimport type { Protocol } from './protocol';\nimport type * as dom from '../dom';\nimport type * as channels from '@protocol/channels';\n\nexport async function getAccessibilityTree(session: FFSession, needle?: dom.ElementHandle): Promise<{tree: accessibility.AXNode, needle: accessibility.AXNode | null}> {\n  const objectId = needle ? needle._objectId : undefined;\n  const { tree } = await session.send('Accessibility.getFullAXTree', { objectId });\n  const axNode = new FFAXNode(tree);\n  return {\n    tree: axNode,\n    needle: needle ? axNode._findNeedle() : null\n  };\n}\n\nconst FFRoleToARIARole = new Map(Object.entries({\n  'pushbutton': 'button',\n  'checkbutton': 'checkbox',\n  'editcombobox': 'combobox',\n  'content deletion': 'deletion',\n  'footnote': 'doc-footnote',\n  'non-native document': 'document',\n  'grouping': 'group',\n  'graphic': 'img',\n  'content insertion': 'insertion',\n  'animation': 'marquee',\n  'flat equation': 'math',\n  'menupopup': 'menu',\n  'check menu item': 'menuitemcheckbox',\n  'radio menu item': 'menuitemradio',\n  'listbox option': 'option',\n  'radiobutton': 'radio',\n  'statusbar': 'status',\n  'pagetab': 'tab',\n  'pagetablist': 'tablist',\n  'propertypage': 'tabpanel',\n  'entry': 'textbox',\n  'outline': 'tree',\n  'tree table': 'treegrid',\n  'outlineitem': 'treeitem',\n}));\n\nclass FFAXNode implements accessibility.AXNode {\n  _children: FFAXNode[];\n  private _payload: Protocol.Accessibility.AXTree;\n  private _editable: boolean;\n  private _richlyEditable: boolean;\n  private _focusable: boolean;\n  private _expanded: boolean;\n  private _name: string;\n  private _role: string;\n  private _cachedHasFocusableChild: boolean|undefined;\n\n  constructor(payload: Protocol.Accessibility.AXTree) {\n    this._payload = payload;\n    this._children = (payload.children || []).map(x => new FFAXNode(x));\n    this._editable = !!payload.editable;\n    this._richlyEditable = this._editable && (payload.tag !== 'textarea' && payload.tag !== 'input');\n    this._focusable = !!payload.focusable;\n    this._expanded = !!payload.expanded;\n    this._name = this._payload.name;\n    this._role = this._payload.role;\n  }\n\n  _isPlainTextField(): boolean {\n    if (this._richlyEditable)\n      return false;\n    if (this._editable)\n      return true;\n    return this._role === 'entry';\n  }\n\n  _isTextOnlyObject(): boolean {\n    const role = this._role;\n    return (role === 'text leaf' || role === 'text' || role === 'statictext');\n  }\n\n  _hasFocusableChild(): boolean {\n    if (this._cachedHasFocusableChild === undefined) {\n      this._cachedHasFocusableChild = false;\n      for (const child of this._children) {\n        if (child._focusable || child._hasFocusableChild()) {\n          this._cachedHasFocusableChild = true;\n          break;\n        }\n      }\n    }\n    return this._cachedHasFocusableChild;\n  }\n\n  children() {\n    return this._children;\n  }\n\n  _findNeedle(): FFAXNode | null {\n    if (this._payload.foundObject)\n      return this;\n    for (const child of this._children) {\n      const found = child._findNeedle();\n      if (found)\n        return found;\n    }\n    return null;\n  }\n\n  isLeafNode(): boolean {\n    if (!this._children.length)\n      return true;\n      // These types of objects may have children that we use as internal\n      // implementation details, but we want to expose them as leaves to platform\n      // accessibility APIs because screen readers might be confused if they find\n      // any children.\n    if (this._isPlainTextField() || this._isTextOnlyObject())\n      return true;\n      // Roles whose children are only presentational according to the ARIA and\n      // HTML5 Specs should be hidden from screen readers.\n      // (Note that whilst ARIA buttons can have only presentational children, HTML5\n      // buttons are allowed to have content.)\n    switch (this._role) {\n      case 'graphic':\n      case 'scrollbar':\n      case 'slider':\n      case 'separator':\n      case 'progressbar':\n        return true;\n      default:\n        break;\n    }\n    // Here and below: Android heuristics\n    if (this._hasFocusableChild())\n      return false;\n    if (this._focusable && this._role !== 'document' && this._name)\n      return true;\n    if (this._role === 'heading' && this._name)\n      return true;\n    return false;\n  }\n\n  isControl(): boolean {\n    switch (this._role) {\n      case 'checkbutton':\n      case 'check menu item':\n      case 'check rich option':\n      case 'combobox':\n      case 'combobox option':\n      case 'color chooser':\n      case 'listbox':\n      case 'listbox option':\n      case 'listbox rich option':\n      case 'popup menu':\n      case 'menupopup':\n      case 'menuitem':\n      case 'menubar':\n      case 'button':\n      case 'pushbutton':\n      case 'radiobutton':\n      case 'radio menuitem':\n      case 'scrollbar':\n      case 'slider':\n      case 'spinbutton':\n      case 'switch':\n      case 'pagetab':\n      case 'entry':\n      case 'tree table':\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  isInteresting(insideControl: boolean): boolean {\n    if (this._focusable || this._richlyEditable)\n      return true;\n      // If it's not focusable but has a control role, then it's interesting.\n    if (this.isControl())\n      return true;\n      // A non focusable child of a control is not interesting\n    if (insideControl)\n      return false;\n    return this.isLeafNode() && !!this._name.trim();\n  }\n\n  serialize(): channels.AXNode {\n    const node: {[x in keyof channels.AXNode]: any} = {\n      role: FFRoleToARIARole.get(this._role) || this._role,\n      name: this._name || '',\n    };\n    const userStringProperties: Array<keyof channels.AXNode & keyof Protocol.Accessibility.AXTree> = [\n      'name',\n      'description',\n      'roledescription',\n      'valuetext',\n      'keyshortcuts',\n    ];\n    for (const userStringProperty of userStringProperties) {\n      if (!(userStringProperty in this._payload))\n        continue;\n      node[userStringProperty] = this._payload[userStringProperty];\n    }\n    const booleanProperties: Array<keyof channels.AXNode & keyof Protocol.Accessibility.AXTree> = [\n      'disabled',\n      'expanded',\n      'focused',\n      'modal',\n      'multiline',\n      'multiselectable',\n      'readonly',\n      'required',\n      'selected',\n    ];\n    for (const booleanProperty of booleanProperties) {\n      if (this._role === 'document' && booleanProperty === 'focused')\n        continue; // document focusing is strange\n      const value = this._payload[booleanProperty];\n      if (!value)\n        continue;\n      node[booleanProperty] = value;\n    }\n    const numericalProperties: Array<keyof channels.AXNode & keyof Protocol.Accessibility.AXTree> = [\n      'level'\n    ];\n    for (const numericalProperty of numericalProperties) {\n      if (!(numericalProperty in this._payload))\n        continue;\n      node[numericalProperty] = this._payload[numericalProperty];\n    }\n    const tokenProperties: Array<keyof channels.AXNode & keyof Protocol.Accessibility.AXTree> = [\n      'autocomplete',\n      'haspopup',\n      'orientation',\n    ];\n    for (const tokenProperty of tokenProperties) {\n      const value = this._payload[tokenProperty];\n      if (!value || value === 'false')\n        continue;\n      node[tokenProperty] = value;\n    }\n\n    const axNode = node as channels.AXNode;\n    axNode.valueString = this._payload.value;\n    if ('checked' in this._payload)\n      axNode.checked = this._payload.checked === true ? 'checked' : this._payload.checked === 'mixed' ? 'mixed' : 'unchecked';\n    if ('pressed' in this._payload)\n      axNode.pressed = this._payload.pressed === true ? 'pressed' : 'released';\n    if ('invalid' in this._payload)\n      axNode.invalid = this._payload.invalid === true ? 'true' : 'false';\n    return axNode;\n  }\n}\n","/**\n * Copyright 2019 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '../../utils/isomorphic/assert';\nimport { rewriteErrorMessage } from '../../utils/isomorphic/stackTrace';\nimport { parseEvaluationResultValue } from '../../utils/isomorphic/utilityScriptSerializers';\nimport * as js from '../javascript';\nimport * as dom from '../dom';\nimport { isSessionClosedError } from '../protocolError';\n\nimport type { FFSession } from './ffConnection';\nimport type { Protocol } from './protocol';\n\nexport class FFExecutionContext implements js.ExecutionContextDelegate {\n  _session: FFSession;\n  _executionContextId: string;\n\n  constructor(session: FFSession, executionContextId: string) {\n    this._session = session;\n    this._executionContextId = executionContextId;\n  }\n\n  async rawEvaluateJSON(expression: string): Promise<any> {\n    const payload = await this._session.send('Runtime.evaluate', {\n      expression,\n      returnByValue: true,\n      executionContextId: this._executionContextId,\n    }).catch(rewriteError);\n    checkException(payload.exceptionDetails);\n    return payload.result!.value;\n  }\n\n  async rawEvaluateHandle(context: js.ExecutionContext, expression: string): Promise<js.JSHandle> {\n    const payload = await this._session.send('Runtime.evaluate', {\n      expression,\n      returnByValue: false,\n      executionContextId: this._executionContextId,\n    }).catch(rewriteError);\n    checkException(payload.exceptionDetails);\n    return createHandle(context, payload.result!);\n  }\n\n  async evaluateWithArguments(expression: string, returnByValue: boolean, utilityScript: js.JSHandle, values: any[], handles: js.JSHandle[]): Promise<any> {\n    const payload = await this._session.send('Runtime.callFunction', {\n      functionDeclaration: expression,\n      args: [\n        { objectId: utilityScript._objectId, value: undefined },\n        ...values.map(value => ({ value })),\n        ...handles.map(handle => ({ objectId: handle._objectId!, value: undefined })),\n      ],\n      returnByValue,\n      executionContextId: this._executionContextId\n    }).catch(rewriteError);\n    checkException(payload.exceptionDetails);\n    if (returnByValue)\n      return parseEvaluationResultValue(payload.result!.value);\n    return createHandle(utilityScript._context, payload.result!);\n  }\n\n  async getProperties(object: js.JSHandle): Promise<Map<string, js.JSHandle>> {\n    const response = await this._session.send('Runtime.getObjectProperties', {\n      executionContextId: this._executionContextId,\n      objectId: object._objectId!,\n    });\n    const result = new Map();\n    for (const property of response.properties)\n      result.set(property.name, createHandle(object._context, property.value));\n    return result;\n  }\n\n  async releaseHandle(handle: js.JSHandle): Promise<void> {\n    if (!handle._objectId)\n      return;\n    await this._session.send('Runtime.disposeObject', {\n      executionContextId: this._executionContextId,\n      objectId: handle._objectId,\n    });\n  }\n}\n\nfunction checkException(exceptionDetails?: Protocol.Runtime.ExceptionDetails) {\n  if (!exceptionDetails)\n    return;\n  if (exceptionDetails.value)\n    throw new js.JavaScriptErrorInEvaluate(JSON.stringify(exceptionDetails.value));\n  else\n    throw new js.JavaScriptErrorInEvaluate(exceptionDetails.text + (exceptionDetails.stack ? '\\n' + exceptionDetails.stack : ''));\n}\n\nfunction rewriteError(error: Error): (Protocol.Runtime.evaluateReturnValue | Protocol.Runtime.callFunctionReturnValue) {\n  if (error.message.includes('cyclic object value') || error.message.includes('Object is not serializable'))\n    return { result: { type: 'undefined', value: undefined } };\n  if (error instanceof TypeError && error.message.startsWith('Converting circular structure to JSON'))\n    rewriteErrorMessage(error, error.message + ' Are you passing a nested JSHandle?');\n  if (!js.isJavaScriptErrorInEvaluate(error) && !isSessionClosedError(error))\n    throw new Error('Execution context was destroyed, most likely because of a navigation.');\n  throw error;\n}\n\nfunction potentiallyUnserializableValue(remoteObject: Protocol.Runtime.RemoteObject): any {\n  const value = remoteObject.value;\n  const unserializableValue = remoteObject.unserializableValue;\n  return unserializableValue ? js.parseUnserializableValue(unserializableValue) : value;\n}\n\nfunction renderPreview(object: Protocol.Runtime.RemoteObject): string | undefined {\n  if (object.type === 'undefined')\n    return 'undefined';\n  if (object.unserializableValue)\n    return String(object.unserializableValue);\n  if (object.type === 'symbol')\n    return 'Symbol()';\n  if (object.subtype === 'regexp')\n    return 'RegExp';\n  if (object.subtype === 'weakmap')\n    return 'WeakMap';\n  if (object.subtype === 'weakset')\n    return 'WeakSet';\n  if (object.subtype)\n    return object.subtype[0].toUpperCase() + object.subtype.slice(1);\n  if ('value' in object)\n    return String(object.value);\n}\n\nexport function createHandle(context: js.ExecutionContext, remoteObject: Protocol.Runtime.RemoteObject): js.JSHandle {\n  if (remoteObject.subtype === 'node') {\n    assert(context instanceof dom.FrameExecutionContext);\n    return new dom.ElementHandle(context, remoteObject.objectId!);\n  }\n  return new js.JSHandle(context, remoteObject.subtype || remoteObject.type || '', renderPreview(remoteObject), remoteObject.objectId, potentiallyUnserializableValue(remoteObject));\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type * as input from '../input';\nimport type { Page } from '../page';\nimport type * as types from '../types';\nimport type { FFSession } from './ffConnection';\n\nfunction toModifiersMask(modifiers: Set<types.KeyboardModifier>): number {\n  let mask = 0;\n  if (modifiers.has('Alt'))\n    mask |= 1;\n  if (modifiers.has('Control'))\n    mask |= 2;\n  if (modifiers.has('Shift'))\n    mask |= 4;\n  if (modifiers.has('Meta'))\n    mask |= 8;\n  return mask;\n}\n\nfunction toButtonNumber(button: types.MouseButton): number {\n  if (button === 'left')\n    return 0;\n  if (button === 'middle')\n    return 1;\n  if (button === 'right')\n    return 2;\n  return 0;\n}\n\nfunction toButtonsMask(buttons: Set<types.MouseButton>): number {\n  let mask = 0;\n  if (buttons.has('left'))\n    mask |= 1;\n  if (buttons.has('right'))\n    mask |= 2;\n  if (buttons.has('middle'))\n    mask |= 4;\n  return mask;\n}\n\nexport class RawKeyboardImpl implements input.RawKeyboard {\n  private _client: FFSession;\n\n  constructor(client: FFSession) {\n    this._client = client;\n  }\n\n  async keydown(modifiers: Set<types.KeyboardModifier>, keyName: string, description: input.KeyDescription, autoRepeat: boolean): Promise<void> {\n    let text = description.text;\n    // Firefox will figure out Enter by itself\n    if (text === '\\r')\n      text = '';\n    const { code, key, location } = description;\n    await this._client.send('Page.dispatchKeyEvent', {\n      type: 'keydown',\n      keyCode: description.keyCodeWithoutLocation,\n      code,\n      key,\n      repeat: autoRepeat,\n      location,\n      text,\n    });\n  }\n\n  async keyup(modifiers: Set<types.KeyboardModifier>, keyName: string, description: input.KeyDescription): Promise<void> {\n    const { code, key, location } = description;\n    await this._client.send('Page.dispatchKeyEvent', {\n      type: 'keyup',\n      key,\n      keyCode: description.keyCodeWithoutLocation,\n      code,\n      location,\n      repeat: false\n    });\n  }\n\n  async sendText(text: string): Promise<void> {\n    await this._client.send('Page.insertText', { text });\n  }\n}\n\nexport class RawMouseImpl implements input.RawMouse {\n  private _client: FFSession;\n  private _page?: Page;\n\n  constructor(client: FFSession) {\n    this._client = client;\n  }\n\n  async move(x: number, y: number, button: types.MouseButton | 'none', buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, forClick: boolean): Promise<void> {\n    await this._client.send('Page.dispatchMouseEvent', {\n      type: 'mousemove',\n      button: 0,\n      buttons: toButtonsMask(buttons),\n      x: Math.floor(x),\n      y: Math.floor(y),\n      modifiers: toModifiersMask(modifiers)\n    });\n  }\n\n  async down(x: number, y: number, button: types.MouseButton, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, clickCount: number): Promise<void> {\n    await this._client.send('Page.dispatchMouseEvent', {\n      type: 'mousedown',\n      button: toButtonNumber(button),\n      buttons: toButtonsMask(buttons),\n      x: Math.floor(x),\n      y: Math.floor(y),\n      modifiers: toModifiersMask(modifiers),\n      clickCount\n    });\n  }\n\n  async up(x: number, y: number, button: types.MouseButton, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, clickCount: number): Promise<void> {\n    await this._client.send('Page.dispatchMouseEvent', {\n      type: 'mouseup',\n      button: toButtonNumber(button),\n      buttons: toButtonsMask(buttons),\n      x: Math.floor(x),\n      y: Math.floor(y),\n      modifiers: toModifiersMask(modifiers),\n      clickCount\n    });\n  }\n\n  async wheel(x: number, y: number, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, deltaX: number, deltaY: number): Promise<void> {\n    // Wheel events hit the compositor first, so wait one frame for it to be synced.\n    await this._page!.mainFrame().evaluateExpression(`new Promise(requestAnimationFrame)`, { world: 'utility' });\n    await this._client.send('Page.dispatchWheelEvent', {\n      deltaX,\n      deltaY,\n      x: Math.floor(x),\n      y: Math.floor(y),\n      deltaZ: 0,\n      modifiers: toModifiersMask(modifiers)\n    });\n  }\n\n  setPage(page: Page) {\n    this._page = page;\n  }\n}\n\nexport class RawTouchscreenImpl implements input.RawTouchscreen {\n  private _client: FFSession;\n\n  constructor(client: FFSession) {\n    this._client = client;\n  }\n  async tap(x: number, y: number, modifiers: Set<types.KeyboardModifier>) {\n    await this._client.send('Page.dispatchTapEvent', {\n      x,\n      y,\n      modifiers: toModifiersMask(modifiers),\n    });\n  }\n}\n","/**\n * Copyright 2019 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { eventsHelper } from '../utils/eventsHelper';\nimport * as network from '../network';\n\nimport type { FFSession } from './ffConnection';\nimport type { HeadersArray } from '../../server/types';\nimport type { RegisteredListener } from '../utils/eventsHelper';\nimport type * as frames from '../frames';\nimport type { Page } from '../page';\nimport type * as types from '../types';\nimport type { Protocol } from './protocol';\n\nexport class FFNetworkManager {\n  private _session: FFSession;\n  private _requests: Map<string, InterceptableRequest>;\n  private _page: Page;\n  private _eventListeners: RegisteredListener[];\n\n  constructor(session: FFSession, page: Page) {\n    this._session = session;\n\n    this._requests = new Map();\n    this._page = page;\n\n    this._eventListeners = [\n      eventsHelper.addEventListener(session, 'Network.requestWillBeSent', this._onRequestWillBeSent.bind(this)),\n      eventsHelper.addEventListener(session, 'Network.responseReceived', this._onResponseReceived.bind(this)),\n      eventsHelper.addEventListener(session, 'Network.requestFinished', this._onRequestFinished.bind(this)),\n      eventsHelper.addEventListener(session, 'Network.requestFailed', this._onRequestFailed.bind(this)),\n    ];\n  }\n\n  dispose() {\n    eventsHelper.removeEventListeners(this._eventListeners);\n  }\n\n  async setRequestInterception(enabled: boolean) {\n    await Promise.all([\n      this._session.send('Network.setRequestInterception', { enabled }),\n      this._session.send('Page.setCacheDisabled', { cacheDisabled: enabled }),\n    ]);\n  }\n\n  _onRequestWillBeSent(event: Protocol.Network.requestWillBeSentPayload) {\n    const redirectedFrom = event.redirectedFrom ? (this._requests.get(event.redirectedFrom) || null) : null;\n    const frame = redirectedFrom ? redirectedFrom.request.frame() : (event.frameId ? this._page.frameManager.frame(event.frameId) : null);\n    if (!frame)\n      return;\n    if (redirectedFrom)\n      this._requests.delete(redirectedFrom._id);\n    const request = new InterceptableRequest(frame, redirectedFrom, event);\n    let route;\n    if (event.isIntercepted)\n      route = new FFRouteImpl(this._session, request);\n    this._requests.set(request._id, request);\n    this._page.frameManager.requestStarted(request.request, route);\n  }\n\n  _onResponseReceived(event: Protocol.Network.responseReceivedPayload) {\n    const request = this._requests.get(event.requestId);\n    if (!request)\n      return;\n    const getResponseBody = async () => {\n      const response = await this._session.send('Network.getResponseBody', {\n        requestId: request._id\n      });\n      if (response.evicted)\n        throw new Error(`Response body for ${request.request.method()} ${request.request.url()} was evicted!`);\n      return Buffer.from(response.base64body, 'base64');\n    };\n\n    const startTime = event.timing.startTime;\n    function relativeToStart(time: number): number {\n      if (!time)\n        return -1;\n      return (time - startTime) / 1000;\n    }\n    const timing = {\n      startTime: startTime / 1000,\n      domainLookupStart: relativeToStart(event.timing.domainLookupStart),\n      domainLookupEnd: relativeToStart(event.timing.domainLookupEnd),\n      connectStart: relativeToStart(event.timing.connectStart),\n      secureConnectionStart: relativeToStart(event.timing.secureConnectionStart),\n      connectEnd: relativeToStart(event.timing.connectEnd),\n      requestStart: relativeToStart(event.timing.requestStart),\n      responseStart: relativeToStart(event.timing.responseStart),\n    };\n    const response = new network.Response(request.request, event.status, event.statusText, parseMultivalueHeaders(event.headers), timing, getResponseBody, event.fromServiceWorker);\n    if (event?.remoteIPAddress && typeof event?.remotePort === 'number') {\n      response._serverAddrFinished({\n        ipAddress: event.remoteIPAddress,\n        port: event.remotePort,\n      });\n    } else {\n      response._serverAddrFinished();\n    }\n    response._securityDetailsFinished({\n      protocol: event?.securityDetails?.protocol,\n      subjectName: event?.securityDetails?.subjectName,\n      issuer: event?.securityDetails?.issuer,\n      validFrom: event?.securityDetails?.validFrom,\n      validTo: event?.securityDetails?.validTo,\n    });\n    // \"raw\" headers are the same as \"provisional\" headers in Firefox.\n    response.setRawResponseHeaders(null);\n    // Headers size are not available in Firefox.\n    response.setResponseHeadersSize(null);\n    this._page.frameManager.requestReceivedResponse(response);\n  }\n\n  _onRequestFinished(event: Protocol.Network.requestFinishedPayload) {\n    const request = this._requests.get(event.requestId);\n    if (!request)\n      return;\n    const response = request.request._existingResponse()!;\n    response.setTransferSize(event.transferSize);\n    response.setEncodedBodySize(event.encodedBodySize);\n\n    // Keep redirected requests in the map for future reference as redirectedFrom.\n    const isRedirected = response.status() >= 300 && response.status() <= 399;\n    const responseEndTime = event.responseEndTime ? event.responseEndTime / 1000 - response.timing().startTime : -1;\n    if (isRedirected) {\n      response._requestFinished(responseEndTime);\n    } else {\n      this._requests.delete(request._id);\n      response._requestFinished(responseEndTime);\n    }\n    if (event.protocolVersion)\n      response._setHttpVersion(event.protocolVersion);\n    this._page.frameManager.reportRequestFinished(request.request, response);\n  }\n\n  _onRequestFailed(event: Protocol.Network.requestFailedPayload) {\n    const request = this._requests.get(event.requestId);\n    if (!request)\n      return;\n    this._requests.delete(request._id);\n    const response = request.request._existingResponse();\n    if (response) {\n      response.setTransferSize(null);\n      response.setEncodedBodySize(null);\n      response._requestFinished(-1);\n    }\n    request.request._setFailureText(event.errorCode);\n    this._page.frameManager.requestFailed(request.request, event.errorCode === 'NS_BINDING_ABORTED');\n  }\n}\n\nconst causeToResourceType: {[key: string]: string} = {\n  TYPE_INVALID: 'other',\n  TYPE_OTHER: 'other',\n  TYPE_SCRIPT: 'script',\n  TYPE_IMAGE: 'image',\n  TYPE_STYLESHEET: 'stylesheet',\n  TYPE_OBJECT: 'other',\n  TYPE_DOCUMENT: 'document',\n  TYPE_SUBDOCUMENT: 'document',\n  TYPE_REFRESH: 'document',\n  TYPE_XBL: 'other',\n  TYPE_PING: 'other',\n  TYPE_XMLHTTPREQUEST: 'xhr',\n  TYPE_OBJECT_SUBREQUEST: 'other',\n  TYPE_DTD: 'other',\n  TYPE_FONT: 'font',\n  TYPE_MEDIA: 'media',\n  TYPE_WEBSOCKET: 'websocket',\n  TYPE_CSP_REPORT: 'other',\n  TYPE_XSLT: 'other',\n  TYPE_BEACON: 'other',\n  TYPE_FETCH: 'fetch',\n  TYPE_IMAGESET: 'image',\n  TYPE_WEB_MANIFEST: 'manifest',\n};\n\nconst internalCauseToResourceType: {[key: string]: string} = {\n  TYPE_INTERNAL_EVENTSOURCE: 'eventsource',\n};\n\nclass InterceptableRequest {\n  readonly request: network.Request;\n  readonly _id: string;\n  private _redirectedTo: InterceptableRequest | undefined;\n\n  constructor(frame: frames.Frame, redirectedFrom: InterceptableRequest | null, payload: Protocol.Network.requestWillBeSentPayload) {\n    this._id = payload.requestId;\n    if (redirectedFrom)\n      redirectedFrom._redirectedTo = this;\n    let postDataBuffer = null;\n    if (payload.postData)\n      postDataBuffer = Buffer.from(payload.postData, 'base64');\n    this.request = new network.Request(frame._page.browserContext, frame, null, redirectedFrom ? redirectedFrom.request : null, payload.navigationId,\n        payload.url, internalCauseToResourceType[payload.internalCause] || causeToResourceType[payload.cause] || 'other', payload.method, postDataBuffer, payload.headers);\n    // \"raw\" headers are the same as \"provisional\" headers in Firefox.\n    this.request.setRawRequestHeaders(null);\n  }\n\n  _finalRequest(): InterceptableRequest {\n    let request: InterceptableRequest = this;\n    while (request._redirectedTo)\n      request = request._redirectedTo;\n    return request;\n  }\n}\n\nclass FFRouteImpl implements network.RouteDelegate {\n  private _request: InterceptableRequest;\n  private _session: FFSession;\n\n  constructor(session: FFSession, request: InterceptableRequest) {\n    this._session = session;\n    this._request = request;\n  }\n\n  async continue(overrides: types.NormalizedContinueOverrides) {\n    await this._session.sendMayFail('Network.resumeInterceptedRequest', {\n      requestId: this._request._id,\n      url: overrides.url,\n      method: overrides.method,\n      headers: overrides.headers,\n      postData: overrides.postData ? Buffer.from(overrides.postData).toString('base64') : undefined,\n    });\n  }\n\n  async fulfill(response: types.NormalizedFulfillResponse) {\n    const base64body = response.isBase64 ? response.body : Buffer.from(response.body).toString('base64');\n\n    await this._session.sendMayFail('Network.fulfillInterceptedRequest', {\n      requestId: this._request._id,\n      status: response.status,\n      statusText: network.statusText(response.status),\n      headers: response.headers,\n      base64body,\n    });\n  }\n\n  async abort(errorCode: string) {\n    await this._session.sendMayFail('Network.abortInterceptedRequest', {\n      requestId: this._request._id,\n      errorCode,\n    });\n  }\n}\n\nfunction parseMultivalueHeaders(headers: HeadersArray) {\n  const result: HeadersArray = [];\n  for (const header of headers) {\n    const separator = header.name.toLowerCase() === 'set-cookie' ? '\\n' : ',';\n    const tokens = header.value.split(separator).map(s => s.trim());\n    for (const token of tokens)\n      result.push({ name: header.name, value: token });\n  }\n  return result;\n}\n","/**\n * Copyright 2019 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { eventsHelper } from '../utils/eventsHelper';\nimport * as dialog from '../dialog';\nimport * as dom from '../dom';\nimport { InitScript } from '../page';\nimport { Page, Worker } from '../page';\nimport { getAccessibilityTree } from './ffAccessibility';\nimport { FFSession } from './ffConnection';\nimport { createHandle, FFExecutionContext } from './ffExecutionContext';\nimport { RawKeyboardImpl, RawMouseImpl, RawTouchscreenImpl } from './ffInput';\nimport { FFNetworkManager } from './ffNetworkManager';\nimport { debugLogger } from '../utils/debugLogger';\nimport { splitErrorMessage } from '../../utils/isomorphic/stackTrace';\nimport { BrowserContext } from '../browserContext';\nimport { TargetClosedError } from '../errors';\n\nimport type { Progress } from '../progress';\nimport type { FFBrowserContext } from './ffBrowser';\nimport type { Protocol } from './protocol';\nimport type { RegisteredListener } from '../utils/eventsHelper';\nimport type * as frames from '../frames';\nimport type { PageDelegate } from '../page';\nimport type * as types from '../types';\n\nexport const UTILITY_WORLD_NAME = '__playwright_utility_world__';\n\nexport class FFPage implements PageDelegate {\n  readonly cspErrorsAsynchronousForInlineScripts = true;\n  readonly rawMouse: RawMouseImpl;\n  readonly rawKeyboard: RawKeyboardImpl;\n  readonly rawTouchscreen: RawTouchscreenImpl;\n  readonly _session: FFSession;\n  readonly _page: Page;\n  readonly _networkManager: FFNetworkManager;\n  readonly _browserContext: FFBrowserContext;\n  private _reportedAsNew = false;\n  readonly _opener: FFPage | null;\n  private readonly _contextIdToContext: Map<string, dom.FrameExecutionContext>;\n  private _eventListeners: RegisteredListener[];\n  private _workers = new Map<string, { frameId: string, session: FFSession }>();\n  private _screencastId: string | undefined;\n  private _initScripts: { initScript: InitScript, worldName?: string }[] = [];\n\n  constructor(session: FFSession, browserContext: FFBrowserContext, opener: FFPage | null) {\n    this._session = session;\n    this._opener = opener;\n    this.rawKeyboard = new RawKeyboardImpl(session);\n    this.rawMouse = new RawMouseImpl(session);\n    this.rawTouchscreen = new RawTouchscreenImpl(session);\n    this._contextIdToContext = new Map();\n    this._browserContext = browserContext;\n    this._page = new Page(this, browserContext);\n    this.rawMouse.setPage(this._page);\n    this._networkManager = new FFNetworkManager(session, this._page);\n    this._page.on(Page.Events.FrameDetached, frame => this._removeContextsForFrame(frame));\n    // TODO: remove Page.willOpenNewWindowAsynchronously from the protocol.\n    this._eventListeners = [\n      eventsHelper.addEventListener(this._session, 'Page.eventFired', this._onEventFired.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.frameAttached', this._onFrameAttached.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.frameDetached', this._onFrameDetached.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.navigationAborted', this._onNavigationAborted.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.navigationCommitted', this._onNavigationCommitted.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.navigationStarted', this._onNavigationStarted.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.sameDocumentNavigation', this._onSameDocumentNavigation.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Runtime.executionContextCreated', this._onExecutionContextCreated.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Runtime.executionContextDestroyed', this._onExecutionContextDestroyed.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Runtime.executionContextsCleared', this._onExecutionContextsCleared.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.linkClicked', event => this._onLinkClicked(event.phase)),\n      eventsHelper.addEventListener(this._session, 'Page.uncaughtError', this._onUncaughtError.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Runtime.console', this._onConsole.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.dialogOpened', this._onDialogOpened.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.bindingCalled', this._onBindingCalled.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.fileChooserOpened', this._onFileChooserOpened.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.workerCreated', this._onWorkerCreated.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.workerDestroyed', this._onWorkerDestroyed.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.dispatchMessageFromWorker', this._onDispatchMessageFromWorker.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.crashed', this._onCrashed.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.videoRecordingStarted', this._onVideoRecordingStarted.bind(this)),\n\n      eventsHelper.addEventListener(this._session, 'Page.webSocketCreated', this._onWebSocketCreated.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.webSocketClosed', this._onWebSocketClosed.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.webSocketFrameReceived', this._onWebSocketFrameReceived.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.webSocketFrameSent', this._onWebSocketFrameSent.bind(this)),\n      eventsHelper.addEventListener(this._session, 'Page.screencastFrame', this._onScreencastFrame.bind(this)),\n\n    ];\n    this._session.once('Page.ready', () => {\n      if (this._reportedAsNew)\n        return;\n      this._reportedAsNew = true;\n      this._page.reportAsNew(this._opener?._page);\n    });\n    // Ideally, we somehow ensure that utility world is created before Page.ready arrives, but currently it is racy.\n    // Therefore, we can end up with an initialized page without utility world, although very unlikely.\n    this.addInitScript(new InitScript(''), UTILITY_WORLD_NAME).catch(e => this._markAsError(e));\n  }\n\n  async _markAsError(error: Error) {\n    // Same error may be reported twice: channel disconnected and session.send fails.\n    if (this._reportedAsNew)\n      return;\n    this._reportedAsNew = true;\n    this._page.reportAsNew(this._opener?._page, error);\n  }\n\n  _onWebSocketCreated(event: Protocol.Page.webSocketCreatedPayload) {\n    this._page.frameManager.onWebSocketCreated(webSocketId(event.frameId, event.wsid), event.requestURL);\n    this._page.frameManager.onWebSocketRequest(webSocketId(event.frameId, event.wsid));\n  }\n\n  _onWebSocketClosed(event: Protocol.Page.webSocketClosedPayload) {\n    if (event.error)\n      this._page.frameManager.webSocketError(webSocketId(event.frameId, event.wsid), event.error);\n    this._page.frameManager.webSocketClosed(webSocketId(event.frameId, event.wsid));\n  }\n\n  _onWebSocketFrameReceived(event: Protocol.Page.webSocketFrameReceivedPayload) {\n    this._page.frameManager.webSocketFrameReceived(webSocketId(event.frameId, event.wsid), event.opcode, event.data);\n  }\n\n  _onWebSocketFrameSent(event: Protocol.Page.webSocketFrameSentPayload) {\n    this._page.frameManager.onWebSocketFrameSent(webSocketId(event.frameId, event.wsid), event.opcode, event.data);\n  }\n\n  _onExecutionContextCreated(payload: Protocol.Runtime.executionContextCreatedPayload) {\n    const { executionContextId, auxData } = payload;\n    const frame = this._page.frameManager.frame(auxData.frameId!);\n    if (!frame)\n      return;\n    const delegate = new FFExecutionContext(this._session, executionContextId);\n    let worldName: types.World|null = null;\n    if (auxData.name === UTILITY_WORLD_NAME)\n      worldName = 'utility';\n    else if (!auxData.name)\n      worldName = 'main';\n    const context = new dom.FrameExecutionContext(delegate, frame, worldName);\n    if (worldName)\n      frame._contextCreated(worldName, context);\n    this._contextIdToContext.set(executionContextId, context);\n  }\n\n  _onExecutionContextDestroyed(payload: Protocol.Runtime.executionContextDestroyedPayload) {\n    const { executionContextId } = payload;\n    const context = this._contextIdToContext.get(executionContextId);\n    if (!context)\n      return;\n    this._contextIdToContext.delete(executionContextId);\n    context.frame._contextDestroyed(context);\n  }\n\n  _onExecutionContextsCleared() {\n    for (const executionContextId of Array.from(this._contextIdToContext.keys()))\n      this._onExecutionContextDestroyed({ executionContextId });\n  }\n\n  private _removeContextsForFrame(frame: frames.Frame) {\n    for (const [contextId, context] of this._contextIdToContext) {\n      if (context.frame === frame)\n        this._contextIdToContext.delete(contextId);\n    }\n  }\n\n  _onLinkClicked(phase: 'before' | 'after') {\n    if (phase === 'before')\n      this._page.frameManager.frameWillPotentiallyRequestNavigation();\n    else\n      this._page.frameManager.frameDidPotentiallyRequestNavigation();\n  }\n\n  _onNavigationStarted(params: Protocol.Page.navigationStartedPayload) {\n    this._page.frameManager.frameRequestedNavigation(params.frameId, params.navigationId);\n  }\n\n  _onNavigationAborted(params: Protocol.Page.navigationAbortedPayload) {\n    this._page.frameManager.frameAbortedNavigation(params.frameId, params.errorText, params.navigationId);\n  }\n\n  _onNavigationCommitted(params: Protocol.Page.navigationCommittedPayload) {\n    for (const [workerId, worker] of this._workers) {\n      if (worker.frameId === params.frameId)\n        this._onWorkerDestroyed({ workerId });\n    }\n    this._page.frameManager.frameCommittedNewDocumentNavigation(params.frameId, params.url, params.name || '', params.navigationId || '', false);\n  }\n\n  _onSameDocumentNavigation(params: Protocol.Page.sameDocumentNavigationPayload) {\n    this._page.frameManager.frameCommittedSameDocumentNavigation(params.frameId, params.url);\n  }\n\n  _onFrameAttached(params: Protocol.Page.frameAttachedPayload) {\n    this._page.frameManager.frameAttached(params.frameId, params.parentFrameId);\n  }\n\n  _onFrameDetached(params: Protocol.Page.frameDetachedPayload) {\n    this._page.frameManager.frameDetached(params.frameId);\n  }\n\n  _onEventFired(payload: Protocol.Page.eventFiredPayload) {\n    const { frameId, name } = payload;\n    if (name === 'load')\n      this._page.frameManager.frameLifecycleEvent(frameId, 'load');\n    if (name === 'DOMContentLoaded')\n      this._page.frameManager.frameLifecycleEvent(frameId, 'domcontentloaded');\n  }\n\n  _onUncaughtError(params: Protocol.Page.uncaughtErrorPayload) {\n    const { name, message } = splitErrorMessage(params.message);\n    const error = new Error(message);\n    error.stack = params.message + '\\n' + params.stack.split('\\n').filter(Boolean).map(a => a.replace(/([^@]*)@(.*)/, '    at $1 ($2)')).join('\\n');\n    error.name = name;\n    this._page.emitOnContextOnceInitialized(BrowserContext.Events.PageError, error, this._page);\n  }\n\n  _onConsole(payload: Protocol.Runtime.consolePayload) {\n    const { type, args, executionContextId, location } = payload;\n    const context = this._contextIdToContext.get(executionContextId);\n    if (!context)\n      return;\n    // Juggler reports 'warn' for some internal messages generated by the browser.\n    this._page.addConsoleMessage(type === 'warn' ? 'warning' : type, args.map(arg => createHandle(context, arg)), location);\n  }\n\n  _onDialogOpened(params: Protocol.Page.dialogOpenedPayload) {\n    this._page.browserContext.dialogManager.dialogDidOpen(new dialog.Dialog(\n        this._page,\n        params.type,\n        params.message,\n        async (accept: boolean, promptText?: string) => {\n          await this._session.sendMayFail('Page.handleDialog', { dialogId: params.dialogId, accept, promptText });\n        },\n        params.defaultValue));\n  }\n\n  async _onBindingCalled(event: Protocol.Page.bindingCalledPayload) {\n    const pageOrError = await this._page.waitForInitializedOrError();\n    if (!(pageOrError instanceof Error)) {\n      const context = this._contextIdToContext.get(event.executionContextId);\n      if (context)\n        await this._page.onBindingCalled(event.payload, context);\n    }\n  }\n\n  async _onFileChooserOpened(payload: Protocol.Page.fileChooserOpenedPayload) {\n    const { executionContextId, element } = payload;\n    const context = this._contextIdToContext.get(executionContextId);\n    if (!context)\n      return;\n    const handle = createHandle(context, element).asElement()!;\n    await this._page._onFileChooserOpened(handle);\n  }\n\n  async _onWorkerCreated(event: Protocol.Page.workerCreatedPayload) {\n    const workerId = event.workerId;\n    const worker = new Worker(this._page, event.url);\n    const workerSession = new FFSession(this._session._connection, workerId, (message: any) => {\n      this._session.send('Page.sendMessageToWorker', {\n        frameId: event.frameId,\n        workerId: workerId,\n        message: JSON.stringify(message)\n      }).catch(e => {\n        workerSession.dispatchMessage({ id: message.id, method: '', params: {}, error: { message: e.message, data: undefined } });\n      });\n    });\n    this._workers.set(workerId, { session: workerSession, frameId: event.frameId });\n    this._page.addWorker(workerId, worker);\n    workerSession.once('Runtime.executionContextCreated', event => {\n      worker.createExecutionContext(new FFExecutionContext(workerSession, event.executionContextId));\n    });\n    workerSession.on('Runtime.console', event => {\n      const { type, args, location } = event;\n      const context = worker.existingExecutionContext!;\n      this._page.addConsoleMessage(type, args.map(arg => createHandle(context, arg)), location);\n    });\n    // Note: we receive worker exceptions directly from the page.\n  }\n\n  _onWorkerDestroyed(event: Protocol.Page.workerDestroyedPayload) {\n    const workerId = event.workerId;\n    const worker = this._workers.get(workerId);\n    if (!worker)\n      return;\n    worker.session.dispose();\n    this._workers.delete(workerId);\n    this._page.removeWorker(workerId);\n  }\n\n  async _onDispatchMessageFromWorker(event: Protocol.Page.dispatchMessageFromWorkerPayload) {\n    const worker = this._workers.get(event.workerId);\n    if (!worker)\n      return;\n    worker.session.dispatchMessage(JSON.parse(event.message));\n  }\n\n  async _onCrashed(event: Protocol.Page.crashedPayload) {\n    this._session.markAsCrashed();\n    this._page._didCrash();\n  }\n\n  _onVideoRecordingStarted(event: Protocol.Page.videoRecordingStartedPayload) {\n    this._browserContext._browser._videoStarted(this._browserContext, event.screencastId, event.file, this._page.waitForInitializedOrError());\n  }\n\n  didClose() {\n    this._markAsError(new TargetClosedError());\n    this._session.dispose();\n    eventsHelper.removeEventListeners(this._eventListeners);\n    this._networkManager.dispose();\n    this._page._didClose();\n  }\n\n  async navigateFrame(frame: frames.Frame, url: string, referer: string | undefined): Promise<frames.GotoResult> {\n    const response = await this._session.send('Page.navigate', { url, referer, frameId: frame._id });\n    return { newDocumentId: response.navigationId || undefined };\n  }\n\n  async updateExtraHTTPHeaders(): Promise<void> {\n    await this._session.send('Network.setExtraHTTPHeaders', { headers: this._page.extraHTTPHeaders() || [] });\n  }\n\n  async updateEmulatedViewportSize(): Promise<void> {\n    const viewportSize = this._page.emulatedSize()?.viewport ?? null;\n    await this._session.send('Page.setViewportSize', { viewportSize });\n  }\n\n  async bringToFront(): Promise<void> {\n    await this._session.send('Page.bringToFront', {});\n  }\n\n  async updateEmulateMedia(): Promise<void> {\n    const emulatedMedia = this._page.emulatedMedia();\n    const colorScheme = emulatedMedia.colorScheme === 'no-override' ? undefined : emulatedMedia.colorScheme;\n    const reducedMotion = emulatedMedia.reducedMotion === 'no-override' ? undefined : emulatedMedia.reducedMotion;\n    const forcedColors = emulatedMedia.forcedColors === 'no-override' ? undefined : emulatedMedia.forcedColors;\n    const contrast = emulatedMedia.contrast === 'no-override' ? undefined : emulatedMedia.contrast;\n    await this._session.send('Page.setEmulatedMedia', {\n      // Empty string means reset.\n      type: emulatedMedia.media === 'no-override' ? '' : emulatedMedia.media,\n      colorScheme,\n      reducedMotion,\n      forcedColors,\n      contrast,\n    });\n  }\n\n  async updateRequestInterception(): Promise<void> {\n    await this._networkManager.setRequestInterception(this._page.needsRequestInterception());\n  }\n\n  async updateFileChooserInterception() {\n    const enabled = this._page.fileChooserIntercepted();\n    await this._session.send('Page.setInterceptFileChooserDialog', { enabled }).catch(() => {}); // target can be closed.\n  }\n\n  async reload(): Promise<void> {\n    await this._session.send('Page.reload');\n  }\n\n  async goBack(): Promise<boolean> {\n    const { success } = await this._session.send('Page.goBack', { frameId: this._page.mainFrame()._id });\n    return success;\n  }\n\n  async goForward(): Promise<boolean> {\n    const { success } = await this._session.send('Page.goForward', { frameId: this._page.mainFrame()._id });\n    return success;\n  }\n\n  async requestGC(): Promise<void> {\n    await this._session.send('Heap.collectGarbage');\n  }\n\n  async addInitScript(initScript: InitScript, worldName?: string): Promise<void> {\n    this._initScripts.push({ initScript, worldName });\n    await this._updateInitScripts();\n  }\n\n  async removeInitScripts(initScripts: InitScript[]): Promise<void> {\n    const set = new Set(initScripts);\n    this._initScripts = this._initScripts.filter(s => !set.has(s.initScript));\n    await this._updateInitScripts();\n  }\n\n  private async _updateInitScripts() {\n    await this._session.send('Page.setInitScripts', { scripts: this._initScripts.map(s => ({ script: s.initScript.source, worldName: s.worldName })) });\n  }\n\n  async closePage(runBeforeUnload: boolean): Promise<void> {\n    await this._session.send('Page.close', { runBeforeUnload });\n  }\n\n  async setBackgroundColor(color?: { r: number; g: number; b: number; a: number; }): Promise<void> {\n    if (color)\n      throw new Error('Not implemented');\n  }\n\n  async takeScreenshot(progress: Progress, format: 'png' | 'jpeg', documentRect: types.Rect | undefined, viewportRect: types.Rect | undefined, quality: number | undefined, fitsViewport: boolean, scale: 'css' | 'device'): Promise<Buffer> {\n    if (!documentRect) {\n      const scrollOffset = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({ x: window.scrollX, y: window.scrollY }));\n      documentRect = {\n        x: viewportRect!.x + scrollOffset.x,\n        y: viewportRect!.y + scrollOffset.y,\n        width: viewportRect!.width,\n        height: viewportRect!.height,\n      };\n    }\n    progress.throwIfAborted();\n    const { data } = await this._session.send('Page.screenshot', {\n      mimeType: ('image/' + format) as ('image/png' | 'image/jpeg'),\n      clip: documentRect,\n      quality,\n      omitDeviceScaleFactor: scale === 'css',\n    });\n    return Buffer.from(data, 'base64');\n  }\n\n  async getContentFrame(handle: dom.ElementHandle): Promise<frames.Frame | null> {\n    const { contentFrameId } = await this._session.send('Page.describeNode', {\n      frameId: handle._context.frame._id,\n      objectId: handle._objectId,\n    });\n    if (!contentFrameId)\n      return null;\n    return this._page.frameManager.frame(contentFrameId);\n  }\n\n  async getOwnerFrame(handle: dom.ElementHandle): Promise<string | null> {\n    const { ownerFrameId } = await this._session.send('Page.describeNode', {\n      frameId: handle._context.frame._id,\n      objectId: handle._objectId\n    });\n    return ownerFrameId || null;\n  }\n\n  async getBoundingBox(handle: dom.ElementHandle): Promise<types.Rect | null> {\n    const quads = await this.getContentQuads(handle);\n    if (!quads || !quads.length)\n      return null;\n    let minX = Infinity;\n    let maxX = -Infinity;\n    let minY = Infinity;\n    let maxY = -Infinity;\n    for (const quad of quads) {\n      for (const point of quad) {\n        minX = Math.min(minX, point.x);\n        maxX = Math.max(maxX, point.x);\n        minY = Math.min(minY, point.y);\n        maxY = Math.max(maxY, point.y);\n      }\n    }\n    return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n  }\n\n  async scrollRectIntoViewIfNeeded(handle: dom.ElementHandle, rect?: types.Rect): Promise<'error:notvisible' | 'error:notconnected' | 'done'> {\n    return await this._session.send('Page.scrollIntoViewIfNeeded', {\n      frameId: handle._context.frame._id,\n      objectId: handle._objectId,\n      rect,\n    }).then(() => 'done' as const).catch(e => {\n      if (e instanceof Error && e.message.includes('Node is detached from document'))\n        return 'error:notconnected';\n      if (e instanceof Error && e.message.includes('Node does not have a layout object'))\n        return 'error:notvisible';\n      throw e;\n    });\n  }\n\n  async setScreencastOptions(options: { width: number, height: number, quality: number } | null): Promise<void> {\n    if (options) {\n      const { screencastId } = await this._session.send('Page.startScreencast', options);\n      this._screencastId = screencastId;\n    } else {\n      await this._session.send('Page.stopScreencast');\n    }\n  }\n\n  private _onScreencastFrame(event: Protocol.Page.screencastFramePayload) {\n    if (!this._screencastId)\n      return;\n    const screencastId = this._screencastId;\n    this._page.throttleScreencastFrameAck(() => {\n      this._session.send('Page.screencastFrameAck', { screencastId }).catch(e => debugLogger.log('error', e));\n    });\n\n    const buffer = Buffer.from(event.data, 'base64');\n    this._page.emit(Page.Events.ScreencastFrame, {\n      buffer,\n      width: event.deviceWidth,\n      height: event.deviceHeight,\n    });\n  }\n\n  rafCountForStablePosition(): number {\n    return 1;\n  }\n\n  async getContentQuads(handle: dom.ElementHandle): Promise<types.Quad[] | null> {\n    const result = await this._session.sendMayFail('Page.getContentQuads', {\n      frameId: handle._context.frame._id,\n      objectId: handle._objectId,\n    });\n    if (!result)\n      return null;\n    return result.quads.map(quad => [quad.p1, quad.p2, quad.p3, quad.p4]);\n  }\n\n  async setInputFilePaths(handle: dom.ElementHandle<HTMLInputElement>, files: string[]): Promise<void> {\n    await this._session.send('Page.setFileInputFiles', {\n      frameId: handle._context.frame._id,\n      objectId: handle._objectId,\n      files\n    });\n  }\n\n  async adoptElementHandle<T extends Node>(handle: dom.ElementHandle<T>, to: dom.FrameExecutionContext): Promise<dom.ElementHandle<T>> {\n    const result = await this._session.send('Page.adoptNode', {\n      frameId: handle._context.frame._id,\n      objectId: handle._objectId,\n      executionContextId: (to.delegate as FFExecutionContext)._executionContextId\n    });\n    if (!result.remoteObject)\n      throw new Error(dom.kUnableToAdoptErrorMessage);\n    return createHandle(to, result.remoteObject) as dom.ElementHandle<T>;\n  }\n\n  async getAccessibilityTree(needle?: dom.ElementHandle) {\n    return getAccessibilityTree(this._session, needle);\n  }\n\n  async inputActionEpilogue(): Promise<void> {\n  }\n\n  async resetForReuse(): Promise<void> {\n    // Firefox sometimes keeps the last mouse position in the page,\n    // which affects things like hovered state.\n    // See https://github.com/microsoft/playwright/issues/22432.\n    // Move mouse to (-1, -1) to avoid anything being hovered.\n    await this.rawMouse.move(-1, -1, 'none', new Set(), new Set(), false);\n  }\n\n  async getFrameElement(frame: frames.Frame): Promise<dom.ElementHandle> {\n    const parent = frame.parentFrame();\n    if (!parent)\n      throw new Error('Frame has been detached.');\n    const context = await parent._mainContext();\n    const result = await this._session.send('Page.adoptNode', {\n      frameId: frame._id,\n      executionContextId: (context.delegate as FFExecutionContext)._executionContextId\n    });\n    if (!result.remoteObject)\n      throw new Error('Frame has been detached.');\n    return createHandle(context, result.remoteObject) as dom.ElementHandle;\n  }\n\n  shouldToggleStyleSheetToSyncAnimations(): boolean {\n    return false;\n  }\n}\n\nfunction webSocketId(frameId: string, wsid: string): string {\n  return `${frameId}---${wsid}`;\n}\n","/**\n * Copyright 2018 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '../../utils';\nimport { Browser } from '../browser';\nimport { BrowserContext, verifyGeolocation } from '../browserContext';\nimport { TargetClosedError } from '../errors';\nimport * as network from '../network';\nimport { ConnectionEvents, FFConnection  } from './ffConnection';\nimport { FFPage } from './ffPage';\nimport { PageBinding } from '../page';\n\nimport type { BrowserOptions } from '../browser';\nimport type { SdkObject } from '../instrumentation';\nimport type { InitScript, Page } from '../page';\nimport type { ConnectionTransport } from '../transport';\nimport type * as types from '../types';\nimport type { FFSession } from './ffConnection';\nimport type { Protocol } from './protocol';\nimport type * as channels from '@protocol/channels';\n\nexport class FFBrowser extends Browser {\n  private _connection: FFConnection;\n  readonly session: FFSession;\n  readonly _ffPages: Map<string, FFPage>;\n  readonly _contexts: Map<string, FFBrowserContext>;\n  private _version = '';\n  private _userAgent: string = '';\n\n  static async connect(parent: SdkObject, transport: ConnectionTransport, options: BrowserOptions): Promise<FFBrowser> {\n    const connection = new FFConnection(transport, options.protocolLogger, options.browserLogsCollector);\n    const browser = new FFBrowser(parent, connection, options);\n    if ((options as any).__testHookOnConnectToBrowser)\n      await (options as any).__testHookOnConnectToBrowser();\n    let firefoxUserPrefs = options.originalLaunchOptions.firefoxUserPrefs ?? {};\n    if (Object.keys(kBandaidFirefoxUserPrefs).length)\n      firefoxUserPrefs = { ...kBandaidFirefoxUserPrefs, ...firefoxUserPrefs };\n    const promises: Promise<any>[] = [\n      browser.session.send('Browser.enable', {\n        attachToDefaultContext: !!options.persistent,\n        userPrefs: Object.entries(firefoxUserPrefs).map(([name, value]) => ({ name, value })),\n      }),\n      browser._initVersion(),\n    ];\n    if (options.persistent) {\n      browser._defaultContext = new FFBrowserContext(browser, undefined, options.persistent);\n      promises.push((browser._defaultContext as FFBrowserContext)._initialize());\n    }\n    const proxy = options.originalLaunchOptions.proxyOverride || options.proxy;\n    if (proxy)\n      promises.push(browser.session.send('Browser.setBrowserProxy', toJugglerProxyOptions(proxy)));\n    await Promise.all(promises);\n    return browser;\n  }\n\n  constructor(parent: SdkObject, connection: FFConnection, options: BrowserOptions) {\n    super(parent, options);\n    this._connection = connection;\n    this.session = connection.rootSession;\n    this._ffPages = new Map();\n    this._contexts = new Map();\n    this._connection.on(ConnectionEvents.Disconnected, () => this._onDisconnect());\n    this.session.on('Browser.attachedToTarget', this._onAttachedToTarget.bind(this));\n    this.session.on('Browser.detachedFromTarget', this._onDetachedFromTarget.bind(this));\n    this.session.on('Browser.downloadCreated', this._onDownloadCreated.bind(this));\n    this.session.on('Browser.downloadFinished', this._onDownloadFinished.bind(this));\n    this.session.on('Browser.videoRecordingFinished', this._onVideoRecordingFinished.bind(this));\n  }\n\n  async _initVersion() {\n    const result = await this.session.send('Browser.getInfo');\n    this._version = result.version.substring(result.version.indexOf('/') + 1);\n    this._userAgent = result.userAgent;\n  }\n\n  isConnected(): boolean {\n    return !this._connection._closed;\n  }\n\n  async doCreateNewContext(options: types.BrowserContextOptions): Promise<BrowserContext> {\n    if (options.isMobile)\n      throw new Error('options.isMobile is not supported in Firefox');\n    const { browserContextId } = await this.session.send('Browser.createBrowserContext', { removeOnDetach: true });\n    const context = new FFBrowserContext(this, browserContextId, options);\n    await context._initialize();\n    this._contexts.set(browserContextId, context);\n    return context;\n  }\n\n  contexts(): BrowserContext[] {\n    return Array.from(this._contexts.values());\n  }\n\n  version(): string {\n    return this._version;\n  }\n\n  userAgent(): string {\n    return this._userAgent;\n  }\n\n  _onDetachedFromTarget(payload: Protocol.Browser.detachedFromTargetPayload) {\n    const ffPage = this._ffPages.get(payload.targetId)!;\n    this._ffPages.delete(payload.targetId);\n    ffPage.didClose();\n  }\n\n  _onAttachedToTarget(payload: Protocol.Browser.attachedToTargetPayload) {\n    const { targetId, browserContextId, openerId, type } = payload.targetInfo;\n    assert(type === 'page');\n    const context = browserContextId ? this._contexts.get(browserContextId)! : this._defaultContext as FFBrowserContext;\n    assert(context, `Unknown context id:${browserContextId}, _defaultContext: ${this._defaultContext}`);\n    const session = this._connection.createSession(payload.sessionId);\n    const opener = openerId ? this._ffPages.get(openerId)! : null;\n    const ffPage = new FFPage(session, context, opener);\n    this._ffPages.set(targetId, ffPage);\n  }\n\n  _onDownloadCreated(payload: Protocol.Browser.downloadCreatedPayload) {\n    const ffPage = this._ffPages.get(payload.pageTargetId);\n    if (!ffPage)\n      return;\n\n    // Abort the navigation that turned into download.\n    ffPage._page.frameManager.frameAbortedNavigation(payload.frameId, 'Download is starting');\n\n    let originPage = ffPage._page.initializedOrUndefined();\n    // If it's a new window download, report it on the opener page.\n    if (!originPage) {\n      // Resume the page creation with an error. The page will automatically close right\n      // after the download begins.\n      ffPage._markAsError(new Error('Starting new page download'));\n      if (ffPage._opener)\n        originPage = ffPage._opener._page.initializedOrUndefined();\n    }\n    if (!originPage)\n      return;\n    this._downloadCreated(originPage, payload.uuid, payload.url, payload.suggestedFileName);\n  }\n\n  _onDownloadFinished(payload: Protocol.Browser.downloadFinishedPayload) {\n    const error = payload.canceled ? 'canceled' : payload.error;\n    this._downloadFinished(payload.uuid, error);\n  }\n\n  _onVideoRecordingFinished(payload: Protocol.Browser.videoRecordingFinishedPayload) {\n    this._takeVideo(payload.screencastId)?.reportFinished();\n  }\n\n  _onDisconnect() {\n    for (const video of this._idToVideo.values())\n      video.artifact.reportFinished(new TargetClosedError());\n    this._idToVideo.clear();\n    for (const ffPage of this._ffPages.values())\n      ffPage.didClose();\n    this._ffPages.clear();\n    this._didClose();\n  }\n}\n\nexport class FFBrowserContext extends BrowserContext {\n  declare readonly _browser: FFBrowser;\n\n  constructor(browser: FFBrowser, browserContextId: string | undefined, options: types.BrowserContextOptions) {\n    super(browser, options, browserContextId);\n  }\n\n  override async _initialize() {\n    assert(!this._ffPages().length);\n    const browserContextId = this._browserContextId;\n    const promises: Promise<any>[] = [\n      super._initialize(),\n      this._updateInitScripts(),\n    ];\n    if (this._options.acceptDownloads !== 'internal-browser-default') {\n      promises.push(this._browser.session.send('Browser.setDownloadOptions', {\n        browserContextId,\n        downloadOptions: {\n          behavior: this._options.acceptDownloads === 'accept' ? 'saveToDisk' : 'cancel',\n          downloadsDir: this._browser.options.downloadsPath,\n        },\n      }));\n    }\n    if (this._options.viewport) {\n      const viewport = {\n        viewportSize: { width: this._options.viewport.width, height: this._options.viewport.height },\n        deviceScaleFactor: this._options.deviceScaleFactor || 1,\n      };\n      promises.push(this._browser.session.send('Browser.setDefaultViewport', { browserContextId, viewport }));\n    }\n    if (this._options.hasTouch)\n      promises.push(this._browser.session.send('Browser.setTouchOverride', { browserContextId, hasTouch: true }));\n    if (this._options.userAgent)\n      promises.push(this._browser.session.send('Browser.setUserAgentOverride', { browserContextId, userAgent: this._options.userAgent }));\n    if (this._options.bypassCSP)\n      promises.push(this._browser.session.send('Browser.setBypassCSP', { browserContextId, bypassCSP: true }));\n    if (this._options.ignoreHTTPSErrors || this._options.internalIgnoreHTTPSErrors)\n      promises.push(this._browser.session.send('Browser.setIgnoreHTTPSErrors', { browserContextId, ignoreHTTPSErrors: true }));\n    if (this._options.javaScriptEnabled === false)\n      promises.push(this._browser.session.send('Browser.setJavaScriptDisabled', { browserContextId, javaScriptDisabled: true }));\n    if (this._options.locale)\n      promises.push(this._browser.session.send('Browser.setLocaleOverride', { browserContextId, locale: this._options.locale }));\n    if (this._options.timezoneId)\n      promises.push(this._browser.session.send('Browser.setTimezoneOverride', { browserContextId, timezoneId: this._options.timezoneId }));\n    if (this._options.extraHTTPHeaders || this._options.locale)\n      promises.push(this.setExtraHTTPHeaders(this._options.extraHTTPHeaders || []));\n    if (this._options.httpCredentials)\n      promises.push(this.setHTTPCredentials(this._options.httpCredentials));\n    if (this._options.geolocation)\n      promises.push(this.setGeolocation(this._options.geolocation));\n    if (this._options.offline)\n      promises.push(this.setOffline(this._options.offline));\n    if (this._options.colorScheme !== 'no-override') {\n      promises.push(this._browser.session.send('Browser.setColorScheme', {\n        browserContextId,\n        colorScheme: this._options.colorScheme !== undefined  ? this._options.colorScheme : 'light',\n      }));\n    }\n    if (this._options.reducedMotion !== 'no-override') {\n      promises.push(this._browser.session.send('Browser.setReducedMotion', {\n        browserContextId,\n        reducedMotion: this._options.reducedMotion !== undefined  ? this._options.reducedMotion : 'no-preference',\n      }));\n    }\n    if (this._options.forcedColors !== 'no-override') {\n      promises.push(this._browser.session.send('Browser.setForcedColors', {\n        browserContextId,\n        forcedColors: this._options.forcedColors !== undefined  ? this._options.forcedColors : 'none',\n      }));\n    }\n    if (this._options.contrast !== 'no-override') {\n      promises.push(this._browser.session.send('Browser.setContrast', {\n        browserContextId,\n        contrast: this._options.contrast !== undefined  ? this._options.contrast : 'no-preference',\n      }));\n    }\n    if (this._options.recordVideo) {\n      promises.push(this._ensureVideosPath().then(() => {\n        return this._browser.session.send('Browser.setVideoRecordingOptions', {\n          // validateBrowserContextOptions ensures correct video size.\n          options: {\n            ...this._options.recordVideo!.size!,\n            dir: this._options.recordVideo!.dir,\n          },\n          browserContextId: this._browserContextId\n        });\n      }));\n    }\n    const proxy = this._options.proxyOverride || this._options.proxy;\n    if (proxy) {\n      promises.push(this._browser.session.send('Browser.setContextProxy', {\n        browserContextId: this._browserContextId,\n        ...toJugglerProxyOptions(proxy)\n      }));\n    }\n\n    await Promise.all(promises);\n  }\n\n  _ffPages(): FFPage[] {\n    return Array.from(this._browser._ffPages.values()).filter(ffPage => ffPage._browserContext === this);\n  }\n\n  override possiblyUninitializedPages(): Page[] {\n    return this._ffPages().map(ffPage => ffPage._page);\n  }\n\n  override async doCreateNewPage(markAsServerSideOnly?: boolean): Promise<Page> {\n    const { targetId } = await this._browser.session.send('Browser.newPage', {\n      browserContextId: this._browserContextId\n    }).catch(e =>  {\n      if (e.message.includes('Failed to override timezone'))\n        throw new Error(`Invalid timezone ID: ${this._options.timezoneId}`);\n      throw e;\n    });\n    const page = this._browser._ffPages.get(targetId)!._page;\n    if (markAsServerSideOnly)\n      page.markAsServerSideOnly();\n    return page;\n\n  }\n\n  async doGetCookies(urls: string[]): Promise<channels.NetworkCookie[]> {\n    const { cookies } = await this._browser.session.send('Browser.getCookies', { browserContextId: this._browserContextId });\n    return network.filterCookies(cookies.map(c => {\n      const copy: any = { ... c };\n      delete copy.size;\n      delete copy.session;\n      return copy as channels.NetworkCookie;\n    }), urls);\n  }\n\n  async addCookies(cookies: channels.SetNetworkCookie[]) {\n    const cc = network.rewriteCookies(cookies).map(c => ({\n      ...c,\n      expires: c.expires === -1 ? undefined : c.expires,\n    }));\n    await this._browser.session.send('Browser.setCookies', { browserContextId: this._browserContextId, cookies: cc });\n  }\n\n  async doClearCookies() {\n    await this._browser.session.send('Browser.clearCookies', { browserContextId: this._browserContextId });\n  }\n\n  async doGrantPermissions(origin: string, permissions: string[]) {\n    const webPermissionToProtocol = new Map<string, 'geo' | 'desktop-notification' | 'persistent-storage' | 'push'>([\n      ['geolocation', 'geo'],\n      ['persistent-storage', 'persistent-storage'],\n      ['push', 'push'],\n      ['notifications', 'desktop-notification'],\n    ]);\n    const filtered = permissions.map(permission => {\n      const protocolPermission = webPermissionToProtocol.get(permission);\n      if (!protocolPermission)\n        throw new Error('Unknown permission: ' + permission);\n      return protocolPermission;\n    });\n    await this._browser.session.send('Browser.grantPermissions', { origin: origin, browserContextId: this._browserContextId, permissions: filtered });\n  }\n\n  async doClearPermissions() {\n    await this._browser.session.send('Browser.resetPermissions', { browserContextId: this._browserContextId });\n  }\n\n  async setGeolocation(geolocation?: types.Geolocation): Promise<void> {\n    verifyGeolocation(geolocation);\n    this._options.geolocation = geolocation;\n    await this._browser.session.send('Browser.setGeolocationOverride', { browserContextId: this._browserContextId, geolocation: geolocation || null });\n  }\n\n  async setExtraHTTPHeaders(headers: types.HeadersArray): Promise<void> {\n    this._options.extraHTTPHeaders = headers;\n    let allHeaders = this._options.extraHTTPHeaders;\n    if (this._options.locale)\n      allHeaders = network.mergeHeaders([allHeaders, network.singleHeader('Accept-Language', this._options.locale)]);\n    await this._browser.session.send('Browser.setExtraHTTPHeaders', { browserContextId: this._browserContextId, headers: allHeaders });\n  }\n\n  async setUserAgent(userAgent: string | undefined): Promise<void> {\n    await this._browser.session.send('Browser.setUserAgentOverride', { browserContextId: this._browserContextId, userAgent: userAgent || null });\n  }\n\n  async setOffline(offline: boolean): Promise<void> {\n    this._options.offline = offline;\n    await this._browser.session.send('Browser.setOnlineOverride', { browserContextId: this._browserContextId, override: offline ? 'offline' : 'online' });\n  }\n\n  async doSetHTTPCredentials(httpCredentials?: types.Credentials): Promise<void> {\n    this._options.httpCredentials = httpCredentials;\n    let credentials = null;\n    if (httpCredentials) {\n      const { username, password, origin } = httpCredentials;\n      credentials = { username, password, origin };\n    }\n    await this._browser.session.send('Browser.setHTTPCredentials', { browserContextId: this._browserContextId, credentials });\n  }\n\n  async doAddInitScript(initScript: InitScript) {\n    await this._updateInitScripts();\n  }\n\n  async doRemoveInitScripts(initScripts: InitScript[]) {\n    await this._updateInitScripts();\n  }\n\n  private async _updateInitScripts() {\n    const bindingScripts = [...this._pageBindings.values()].map(binding => binding.initScript.source);\n    if (this.bindingsInitScript)\n      bindingScripts.unshift(this.bindingsInitScript.source);\n    const initScripts = this.initScripts.map(script => script.source);\n    await this._browser.session.send('Browser.setInitScripts', { browserContextId: this._browserContextId, scripts: [...bindingScripts, ...initScripts].map(script => ({ script })) });\n  }\n\n  async doUpdateRequestInterception(): Promise<void> {\n    await Promise.all([\n      this._browser.session.send('Browser.setRequestInterception', { browserContextId: this._browserContextId, enabled: this.requestInterceptors.length > 0 }),\n      this._browser.session.send('Browser.setCacheDisabled', { browserContextId: this._browserContextId, cacheDisabled: this.requestInterceptors.length > 0 }),\n    ]);\n  }\n\n  override async doExposePlaywrightBinding() {\n    this._browser.session.send('Browser.addBinding', { browserContextId: this._browserContextId, name: PageBinding.kBindingName, script: '' });\n  }\n\n  onClosePersistent() {}\n\n  override async clearCache(): Promise<void> {\n    // Clearing only the context cache does not work: https://bugzilla.mozilla.org/show_bug.cgi?id=1819147\n    await this._browser.session.send('Browser.clearCache');\n  }\n\n  async doClose(reason: string | undefined) {\n    if (!this._browserContextId) {\n      if (this._options.recordVideo) {\n        await this._browser.session.send('Browser.setVideoRecordingOptions', {\n          options: undefined,\n          browserContextId: this._browserContextId\n        });\n      }\n      // Closing persistent context should close the browser.\n      await this._browser.close({ reason });\n    } else {\n      await this._browser.session.send('Browser.removeBrowserContext', { browserContextId: this._browserContextId });\n      this._browser._contexts.delete(this._browserContextId);\n    }\n  }\n\n  async cancelDownload(uuid: string) {\n    await this._browser.session.send('Browser.cancelDownload', { uuid });\n  }\n}\n\nfunction toJugglerProxyOptions(proxy: types.ProxySettings) {\n  const proxyServer = new URL(proxy.server);\n  let port = parseInt(proxyServer.port, 10);\n  let type: 'http' | 'https' | 'socks' | 'socks4' = 'http';\n  if (proxyServer.protocol === 'socks5:')\n    type = 'socks';\n  else if (proxyServer.protocol === 'socks4:')\n    type = 'socks4';\n  else if (proxyServer.protocol === 'https:')\n    type = 'https';\n  if (proxyServer.port === '') {\n    if (proxyServer.protocol === 'http:')\n      port = 80;\n    else if (proxyServer.protocol === 'https:')\n      port = 443;\n  }\n  return {\n    type,\n    bypass: proxy.bypass ? proxy.bypass.split(',').map(domain => domain.trim()) : [],\n    host: proxyServer.hostname,\n    port,\n    username: proxy.username,\n    password: proxy.password\n  };\n}\n\n// Prefs for quick fixes that didn't make it to the build.\n// Should all be moved to `playwright.cfg`.\nconst kBandaidFirefoxUserPrefs = {\n};\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport os from 'os';\nimport path from 'path';\n\nimport { FFBrowser } from './ffBrowser';\nimport { kBrowserCloseMessageId } from './ffConnection';\nimport { wrapInASCIIBox } from '../utils/ascii';\nimport { BrowserType, kNoXServerRunningError } from '../browserType';\nimport { BrowserReadyState } from '../browserType';\n\nimport type { BrowserOptions } from '../browser';\nimport type { SdkObject } from '../instrumentation';\nimport type { Env } from '../utils/processLauncher';\nimport type { ProtocolError } from '../protocolError';\nimport type { ConnectionTransport } from '../transport';\nimport type * as types from '../types';\n\nexport class Firefox extends BrowserType {\n  constructor(parent: SdkObject) {\n    super(parent, 'firefox');\n  }\n\n  override connectToTransport(transport: ConnectionTransport, options: BrowserOptions): Promise<FFBrowser> {\n    return FFBrowser.connect(this.attribution.playwright, transport, options);\n  }\n\n  override doRewriteStartupLog(error: ProtocolError): ProtocolError {\n    if (!error.logs)\n      return error;\n    // https://github.com/microsoft/playwright/issues/6500\n    if (error.logs.includes(`as root in a regular user's session is not supported.`))\n      error.logs = '\\n' + wrapInASCIIBox(`Firefox is unable to launch if the $HOME folder isn't owned by the current user.\\nWorkaround: Set the HOME=/root environment variable${process.env.GITHUB_ACTION ? ' in your GitHub Actions workflow file' : ''} when running Playwright.`, 1);\n    if (error.logs.includes('no DISPLAY environment variable specified'))\n      error.logs = '\\n' + wrapInASCIIBox(kNoXServerRunningError, 1);\n    return error;\n  }\n\n  override amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env {\n    if (!path.isAbsolute(os.homedir()))\n      throw new Error(`Cannot launch Firefox with relative home directory. Did you set ${os.platform() === 'win32' ? 'USERPROFILE' : 'HOME'} to a relative path?`);\n    if (os.platform() === 'linux') {\n      // Always remove SNAP_NAME and SNAP_INSTANCE_NAME env variables since they\n      // confuse Firefox: in our case, builds never come from SNAP.\n      // See https://github.com/microsoft/playwright/issues/20555\n      return { ...env, SNAP_NAME: undefined, SNAP_INSTANCE_NAME: undefined };\n    }\n    return env;\n  }\n\n  override attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void {\n    const message = { method: 'Browser.close', params: {}, id: kBrowserCloseMessageId };\n    transport.send(message);\n  }\n\n  override defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[] {\n    const { args = [], headless } = options;\n    const userDataDirArg = args.find(arg => arg.startsWith('-profile') || arg.startsWith('--profile'));\n    if (userDataDirArg)\n      throw this._createUserDataDirArgMisuseError('--profile');\n    if (args.find(arg => arg.startsWith('-juggler')))\n      throw new Error('Use the port parameter instead of -juggler argument');\n    const firefoxArguments = ['-no-remote'];\n    if (headless) {\n      firefoxArguments.push('-headless');\n    } else {\n      firefoxArguments.push('-wait-for-browser');\n      firefoxArguments.push('-foreground');\n    }\n    firefoxArguments.push(`-profile`, userDataDir);\n    firefoxArguments.push('-juggler-pipe');\n    firefoxArguments.push(...args);\n    if (isPersistent)\n      firefoxArguments.push('about:blank');\n    else\n      firefoxArguments.push('-silent');\n    return firefoxArguments;\n  }\n\n  override readyState(options: types.LaunchOptions): BrowserReadyState | undefined {\n    return new JugglerReadyState();\n  }\n}\n\nclass JugglerReadyState extends BrowserReadyState {\n  override onBrowserOutput(message: string): void {\n    if (message.includes('Juggler listening to the pipe'))\n      this._wsEndpoint.resolve(undefined);\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport { assert } from '../../utils';\nimport { debugLogger } from '../utils/debugLogger';\nimport { helper } from '../helper';\nimport { ProtocolError } from '../protocolError';\n\nimport type { ConnectionTransport, ProtocolRequest, ProtocolResponse } from '../transport';\nimport type { Protocol } from './protocol';\nimport type { RecentLogsCollector } from '../utils/debugLogger';\nimport type { ProtocolLogger } from '../types';\n\n\n// WKPlaywright uses this special id to issue Browser.close command which we\n// should ignore.\nexport const kBrowserCloseMessageId = -9999;\n\n// We emulate kPageProxyMessageReceived message to unify it with Browser.pageProxyCreated\n// and Browser.pageProxyDestroyed for easier management.\nexport const kPageProxyMessageReceived = Symbol('kPageProxyMessageReceived');\nexport type PageProxyMessageReceivedPayload = { pageProxyId: string, message: any };\n\nexport class WKConnection {\n  private readonly _transport: ConnectionTransport;\n  private readonly _onDisconnect: () => void;\n  private readonly _protocolLogger: ProtocolLogger;\n  private readonly _browserLogsCollector: RecentLogsCollector;\n  _browserDisconnectedLogs: string | undefined;\n  private _lastId = 0;\n  private _closed = false;\n  readonly browserSession: WKSession;\n\n  constructor(transport: ConnectionTransport, onDisconnect: () => void, protocolLogger: ProtocolLogger, browserLogsCollector: RecentLogsCollector) {\n    this._transport = transport;\n    this._onDisconnect = onDisconnect;\n    this._protocolLogger = protocolLogger;\n    this._browserLogsCollector = browserLogsCollector;\n    this.browserSession = new WKSession(this, '', (message: any) => {\n      this.rawSend(message);\n    });\n    this._transport.onmessage = this._dispatchMessage.bind(this);\n    // onclose should be set last, since it can be immediately called.\n    this._transport.onclose = this._onClose.bind(this);\n  }\n\n  nextMessageId(): number {\n    return ++this._lastId;\n  }\n\n  rawSend(message: ProtocolRequest) {\n    this._protocolLogger('send', message);\n    this._transport.send(message);\n  }\n\n  private _dispatchMessage(message: ProtocolResponse) {\n    this._protocolLogger('receive', message);\n    if (message.id === kBrowserCloseMessageId)\n      return;\n    if (message.pageProxyId) {\n      const payload: PageProxyMessageReceivedPayload = { message: message, pageProxyId: message.pageProxyId };\n      this.browserSession.dispatchMessage({ method: kPageProxyMessageReceived, params: payload });\n      return;\n    }\n    this.browserSession.dispatchMessage(message);\n  }\n\n  _onClose(reason?: string) {\n    this._closed = true;\n    this._transport.onmessage = undefined;\n    this._transport.onclose = undefined;\n    this._browserDisconnectedLogs = helper.formatBrowserLogs(this._browserLogsCollector.recentLogs(), reason);\n    this.browserSession.dispose();\n    this._onDisconnect();\n  }\n\n  isClosed() {\n    return this._closed;\n  }\n\n  close() {\n    if (!this._closed)\n      this._transport.close();\n  }\n}\n\nexport class WKSession extends EventEmitter {\n  connection: WKConnection;\n  readonly sessionId: string;\n\n  private _disposed = false;\n  private readonly _rawSend: (message: any) => void;\n  private readonly _callbacks = new Map<number, { resolve: (o: any) => void, reject: (e: ProtocolError) => void, error: ProtocolError }>();\n  private _crashed: boolean = false;\n\n  override on: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n  override addListener: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n  override off: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n  override removeListener: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n  override once: <T extends keyof Protocol.Events | symbol>(event: T, listener: (payload: T extends symbol ? any : Protocol.Events[T extends keyof Protocol.Events ? T : never]) => void) => this;\n\n  constructor(connection: WKConnection, sessionId: string, rawSend: (message: any) => void) {\n    super();\n    this.setMaxListeners(0);\n    this.connection = connection;\n    this.sessionId = sessionId;\n    this._rawSend = rawSend;\n\n    this.on = super.on;\n    this.off = super.removeListener;\n    this.addListener = super.addListener;\n    this.removeListener = super.removeListener;\n    this.once = super.once;\n  }\n\n  async send<T extends keyof Protocol.CommandParameters>(\n    method: T,\n    params?: Protocol.CommandParameters[T]\n  ): Promise<Protocol.CommandReturnValues[T]> {\n    if (this._crashed || this._disposed || this.connection._browserDisconnectedLogs)\n      throw new ProtocolError(this._crashed ? 'crashed' : 'closed', undefined, this.connection._browserDisconnectedLogs);\n    const id = this.connection.nextMessageId();\n    const messageObj = { id, method, params };\n    this._rawSend(messageObj);\n    return new Promise<Protocol.CommandReturnValues[T]>((resolve, reject) => {\n      this._callbacks.set(id, { resolve, reject, error: new ProtocolError('error', method) });\n    });\n  }\n\n  sendMayFail<T extends keyof Protocol.CommandParameters>(method: T, params?: Protocol.CommandParameters[T]): Promise<Protocol.CommandReturnValues[T] | void> {\n    return this.send(method, params).catch(error => debugLogger.log('error', error));\n  }\n\n  markAsCrashed() {\n    this._crashed = true;\n  }\n\n  isDisposed(): boolean {\n    return this._disposed;\n  }\n\n  dispose() {\n    for (const callback of this._callbacks.values()) {\n      callback.error.type = this._crashed ? 'crashed' : 'closed';\n      callback.error.logs = this.connection._browserDisconnectedLogs;\n      callback.reject(callback.error);\n    }\n    this._callbacks.clear();\n    this._disposed = true;\n  }\n\n  dispatchMessage(object: any) {\n    if (object.id && this._callbacks.has(object.id)) {\n      const callback = this._callbacks.get(object.id)!;\n      this._callbacks.delete(object.id);\n      if (object.error) {\n        callback.error.setMessage(object.error.message);\n        callback.reject(callback.error);\n      } else {\n        callback.resolve(object.result);\n      }\n    } else if (object.id && !object.error) {\n      // Response might come after session has been disposed and rejected all callbacks.\n      assert(this.isDisposed());\n    } else {\n      Promise.resolve().then(() => this.emit(object.method, object.params));\n    }\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type * as accessibility from '../accessibility';\nimport type { Protocol } from './protocol';\nimport type { WKSession } from './wkConnection';\nimport type * as dom from '../dom';\nimport type * as channels from '@protocol/channels';\n\nexport async function getAccessibilityTree(session: WKSession, needle?: dom.ElementHandle) {\n  const objectId = needle ? needle._objectId : undefined;\n  const { axNode } = await session.send('Page.accessibilitySnapshot', { objectId });\n  const tree = new WKAXNode(axNode);\n  return {\n    tree,\n    needle: needle ? tree._findNeedle() : null\n  };\n}\n\nconst WKRoleToARIARole = new Map(Object.entries({\n  'TextField': 'textbox',\n}));\n\n// WebKit localizes role descriptions on mac, but the english versions only add noise.\nconst WKUnhelpfulRoleDescriptions = new Map(Object.entries({\n  'WebArea': 'HTML content',\n  'Summary': 'summary',\n  'DescriptionList': 'description list',\n  'ImageMap': 'image map',\n  'ListMarker': 'list marker',\n  'Video': 'video playback',\n  'Mark': 'highlighted',\n  'contentinfo': 'content information',\n  'Details': 'details',\n  'DescriptionListDetail': 'description',\n  'DescriptionListTerm': 'term',\n  'alertdialog': 'web alert dialog',\n  'dialog': 'web dialog',\n  'status': 'application status',\n  'tabpanel': 'tab panel',\n  'application': 'web application',\n}));\n\nclass WKAXNode implements accessibility.AXNode {\n  private _payload: Protocol.Page.AXNode;\n  private _children: WKAXNode[];\n\n  constructor(payload: Protocol.Page.AXNode) {\n    this._payload = payload;\n\n    this._children = [];\n    for (const payload of this._payload.children || [])\n      this._children.push(new WKAXNode(payload));\n  }\n\n  children() {\n    return this._children;\n  }\n\n  _findNeedle(): WKAXNode | null {\n    if (this._payload.found)\n      return this;\n    for (const child of this._children) {\n      const found = child._findNeedle();\n      if (found)\n        return found;\n    }\n    return null;\n  }\n\n  isControl(): boolean {\n    switch (this._payload.role) {\n      case 'button':\n      case 'checkbox':\n      case 'ColorWell':\n      case 'combobox':\n      case 'DisclosureTriangle':\n      case 'listbox':\n      case 'menu':\n      case 'menubar':\n      case 'menuitem':\n      case 'menuitemcheckbox':\n      case 'menuitemradio':\n      case 'radio':\n      case 'scrollbar':\n      case 'searchbox':\n      case 'slider':\n      case 'spinbutton':\n      case 'switch':\n      case 'tab':\n      case 'textbox':\n      case 'TextField':\n      case 'tree':\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  _isTextControl(): boolean {\n    switch (this._payload.role) {\n      case 'combobox':\n      case 'searchfield':\n      case 'textbox':\n      case 'TextField':\n        return true;\n    }\n    return false;\n  }\n\n  _name(): string {\n    if (this._payload.role === 'text')\n      return this._payload.value || '';\n    return this._payload.name || '';\n  }\n\n  isInteresting(insideControl: boolean): boolean {\n    const { role, focusable } = this._payload;\n    const name = this._name();\n    if (role === 'ScrollArea')\n      return false;\n    if (role === 'WebArea')\n      return true;\n\n    if (focusable || role === 'MenuListOption')\n      return true;\n\n    // If it's not focusable but has a control role, then it's interesting.\n    if (this.isControl())\n      return true;\n\n    // A non focusable child of a control is not interesting\n    if (insideControl)\n      return false;\n\n    return this.isLeafNode() && !!name;\n  }\n\n  _hasRedundantTextChild() {\n    if (this._children.length !== 1)\n      return false;\n    const child = this._children[0];\n    return child._payload.role === 'text' && this._payload.name === child._payload.value;\n  }\n\n  isLeafNode(): boolean {\n    if (!this._children.length)\n      return true;\n      // WebKit on Linux ignores everything inside text controls, normalize this behavior\n    if (this._isTextControl())\n      return true;\n      // WebKit for mac has text nodes inside heading, li, menuitem, a, and p nodes\n    if (this._hasRedundantTextChild())\n      return true;\n    return false;\n  }\n\n  serialize(): channels.AXNode {\n    const node: channels.AXNode = {\n      role: WKRoleToARIARole.get(this._payload.role) || this._payload.role,\n      name: this._name(),\n    };\n\n    if ('description' in this._payload && this._payload.description !== node.name)\n      node.description = this._payload.description;\n\n    if ('roledescription' in this._payload) {\n      const roledescription = this._payload.roledescription;\n      if (roledescription !== this._payload.role && WKUnhelpfulRoleDescriptions.get(this._payload.role) !== roledescription)\n        node.roledescription = roledescription;\n    }\n\n    if ('value' in this._payload && this._payload.role !== 'text') {\n      if (typeof this._payload.value === 'string')\n        node.valueString = this._payload.value;\n      else if (typeof this._payload.value === 'number')\n        node.valueNumber = this._payload.value;\n    }\n\n    if ('checked' in this._payload)\n      node.checked = this._payload.checked === 'true' ? 'checked' : this._payload.checked === 'false' ? 'unchecked' : 'mixed';\n\n    if ('pressed' in this._payload)\n      node.pressed = this._payload.pressed === 'true' ? 'pressed' : this._payload.pressed === 'false' ? 'released' : 'mixed';\n\n    const userStringProperties: Array<keyof channels.AXNode & keyof Protocol.Page.AXNode> = [\n      'keyshortcuts',\n      'valuetext'\n    ];\n    for (const userStringProperty of userStringProperties) {\n      if (!(userStringProperty in this._payload))\n        continue;\n      (node as any)[userStringProperty] = this._payload[userStringProperty];\n    }\n\n    const booleanProperties: Array<keyof channels.AXNode & keyof Protocol.Page.AXNode> = [\n      'disabled',\n      'expanded',\n      'focused',\n      'modal',\n      'multiselectable',\n      'readonly',\n      'required',\n      'selected',\n    ];\n    for (const booleanProperty of booleanProperties) {\n      // WebArea and ScrollArea treat focus differently than other nodes. They report whether their frame  has focus,\n      // not whether focus is specifically on the root node.\n      if (booleanProperty === 'focused' && (this._payload.role === 'WebArea' || this._payload.role === 'ScrollArea'))\n        continue;\n      const value = this._payload[booleanProperty];\n      if (!value)\n        continue;\n      (node as any)[booleanProperty] = value;\n    }\n\n    const numericalProperties: Array<keyof channels.AXNode & keyof Protocol.Page.AXNode> = [\n      'level',\n      'valuemax',\n      'valuemin',\n    ];\n    for (const numericalProperty of numericalProperties) {\n      if (!(numericalProperty in this._payload))\n        continue;\n      (node as any)[numericalProperty] = (this._payload as any)[numericalProperty];\n    }\n    const tokenProperties: Array<keyof channels.AXNode & keyof Protocol.Page.AXNode> = [\n      'autocomplete',\n      'haspopup',\n      'invalid',\n    ];\n    for (const tokenProperty of tokenProperties) {\n      const value = (this._payload as any)[tokenProperty];\n      if (!value || value === 'false')\n        continue;\n      (node as any)[tokenProperty] = value;\n    }\n\n    const orientationIsApplicable = new Set([\n      'ScrollArea',\n      'scrollbar',\n      'listbox',\n      'combobox',\n      'menu',\n      'tree',\n      'separator',\n      'slider',\n      'tablist',\n      'toolbar',\n    ]);\n    if (this._payload.orientation && orientationIsApplicable.has(this._payload.role))\n      node.orientation = this._payload.orientation;\n\n    return node;\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as js from '../javascript';\nimport * as dom from '../dom';\nimport { isSessionClosedError } from '../protocolError';\nimport { assert } from '../../utils/isomorphic/assert';\nimport { parseEvaluationResultValue } from '../../utils/isomorphic/utilityScriptSerializers';\n\nimport type { Protocol } from './protocol';\nimport type { WKSession } from './wkConnection';\n\nexport class WKExecutionContext implements js.ExecutionContextDelegate {\n  private readonly _session: WKSession;\n  readonly _contextId: number | undefined;\n\n  constructor(session: WKSession, contextId: number | undefined) {\n    this._session = session;\n    this._contextId = contextId;\n  }\n\n  async rawEvaluateJSON(expression: string): Promise<any> {\n    try {\n      const response = await this._session.send('Runtime.evaluate', {\n        expression,\n        contextId: this._contextId,\n        returnByValue: true\n      });\n      if (response.wasThrown)\n        throw new js.JavaScriptErrorInEvaluate(response.result.description);\n      return response.result.value;\n    } catch (error) {\n      throw rewriteError(error);\n    }\n  }\n\n  async rawEvaluateHandle(context: js.ExecutionContext, expression: string): Promise<js.JSHandle> {\n    try {\n      const response = await this._session.send('Runtime.evaluate', {\n        expression,\n        contextId: this._contextId,\n        returnByValue: false\n      });\n      if (response.wasThrown)\n        throw new js.JavaScriptErrorInEvaluate(response.result.description);\n      return createHandle(context, response.result);\n    } catch (error) {\n      throw rewriteError(error);\n    }\n  }\n\n  async evaluateWithArguments(expression: string, returnByValue: boolean, utilityScript: js.JSHandle<any>, values: any[], handles: js.JSHandle[]): Promise<any> {\n    try {\n      const response = await this._session.send('Runtime.callFunctionOn', {\n        functionDeclaration: expression,\n        objectId: utilityScript._objectId!,\n        arguments: [\n          { objectId: utilityScript._objectId },\n          ...values.map(value => ({ value })),\n          ...handles.map(handle => ({ objectId: handle._objectId! })),\n        ],\n        returnByValue,\n        emulateUserGesture: true,\n        awaitPromise: true\n      });\n      if (response.wasThrown)\n        throw new js.JavaScriptErrorInEvaluate(response.result.description);\n      if (returnByValue)\n        return parseEvaluationResultValue(response.result.value);\n      return createHandle(utilityScript._context, response.result);\n    } catch (error) {\n      throw rewriteError(error);\n    }\n  }\n\n  async getProperties(object: js.JSHandle): Promise<Map<string, js.JSHandle>> {\n    const response = await this._session.send('Runtime.getProperties', {\n      objectId: object._objectId!,\n      ownProperties: true\n    });\n    const result = new Map();\n    for (const property of response.properties) {\n      if (!property.enumerable || !property.value)\n        continue;\n      result.set(property.name, createHandle(object._context, property.value));\n    }\n    return result;\n  }\n\n  async releaseHandle(handle: js.JSHandle): Promise<void> {\n    if (!handle._objectId)\n      return;\n    await this._session.send('Runtime.releaseObject', { objectId: handle._objectId });\n  }\n}\n\nfunction potentiallyUnserializableValue(remoteObject: Protocol.Runtime.RemoteObject): any {\n  const value = remoteObject.value;\n  const isUnserializable = remoteObject.type === 'number' && ['NaN', '-Infinity', 'Infinity', '-0'].includes(remoteObject.description!);\n  return isUnserializable ? js.parseUnserializableValue(remoteObject.description!) : value;\n}\n\nfunction rewriteError(error: Error): Error {\n  if (error.message.includes('Object has too long reference chain'))\n    throw new Error('Cannot serialize result: object reference chain is too long.');\n  if (!js.isJavaScriptErrorInEvaluate(error) && !isSessionClosedError(error))\n    return new Error('Execution context was destroyed, most likely because of a navigation.');\n  return error;\n}\n\nfunction renderPreview(object: Protocol.Runtime.RemoteObject): string | undefined {\n  if (object.type === 'undefined')\n    return 'undefined';\n  if ('value' in object)\n    return String(object.value);\n\n  if (object.description === 'Object' && object.preview) {\n    const tokens = [];\n    for (const { name, value } of object.preview.properties!)\n      tokens.push(`${name}: ${value}`);\n    return `{${tokens.join(', ')}}`;\n  }\n  if (object.subtype === 'array' && object.preview)\n    return js.sparseArrayToString(object.preview.properties!);\n  return object.description;\n}\n\nexport function createHandle(context: js.ExecutionContext, remoteObject: Protocol.Runtime.RemoteObject): js.JSHandle {\n  if (remoteObject.subtype === 'node') {\n    assert(context instanceof dom.FrameExecutionContext);\n    return new dom.ElementHandle(context as dom.FrameExecutionContext, remoteObject.objectId!);\n  }\n  const isPromise = remoteObject.className === 'Promise';\n  return new js.JSHandle(context, isPromise ? 'promise' : remoteObject.subtype || remoteObject.type, renderPreview(remoteObject), remoteObject.objectId, potentiallyUnserializableValue(remoteObject));\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isString } from '../../utils';\nimport * as input from '../input';\nimport { macEditingCommands } from '../macEditingCommands';\n\nimport type * as types from '../types';\nimport type { WKSession } from './wkConnection';\nimport type { Page } from '../page';\n\nfunction toModifiersMask(modifiers: Set<types.KeyboardModifier>): number {\n  // From Source/WebKit/Shared/WebEvent.h\n  let mask = 0;\n  if (modifiers.has('Shift'))\n    mask |= 1;\n  if (modifiers.has('Control'))\n    mask |= 2;\n  if (modifiers.has('Alt'))\n    mask |= 4;\n  if (modifiers.has('Meta'))\n    mask |= 8;\n  return mask;\n}\n\nfunction toButtonsMask(buttons: Set<types.MouseButton>): number {\n  let mask = 0;\n  if (buttons.has('left'))\n    mask |= 1;\n  if (buttons.has('right'))\n    mask |= 2;\n  if (buttons.has('middle'))\n    mask |= 4;\n  return mask;\n}\n\nexport class RawKeyboardImpl implements input.RawKeyboard {\n  private readonly _pageProxySession: WKSession;\n  private _session?: WKSession;\n\n  constructor(session: WKSession) {\n    this._pageProxySession = session;\n  }\n\n  setSession(session: WKSession) {\n    this._session = session;\n  }\n\n  async keydown(modifiers: Set<types.KeyboardModifier>, keyName: string, description: input.KeyDescription, autoRepeat: boolean): Promise<void> {\n    const parts = [];\n    for (const modifier of (['Shift', 'Control', 'Alt', 'Meta']) as types.KeyboardModifier[]) {\n      if (modifiers.has(modifier))\n        parts.push(modifier);\n    }\n    const { code, keyCode, key, text } = description;\n    parts.push(code);\n    const shortcut = parts.join('+');\n    let commands = macEditingCommands[shortcut];\n    if (isString(commands))\n      commands = [commands];\n    await this._pageProxySession.send('Input.dispatchKeyEvent', {\n      type: 'keyDown',\n      modifiers: toModifiersMask(modifiers),\n      windowsVirtualKeyCode: keyCode,\n      code,\n      key,\n      text,\n      unmodifiedText: text,\n      autoRepeat,\n      macCommands: commands,\n      isKeypad: description.location === input.keypadLocation\n    });\n  }\n\n  async keyup(modifiers: Set<types.KeyboardModifier>, keyName: string, description: input.KeyDescription): Promise<void> {\n    const { code, key } = description;\n    await this._pageProxySession.send('Input.dispatchKeyEvent', {\n      type: 'keyUp',\n      modifiers: toModifiersMask(modifiers),\n      key,\n      windowsVirtualKeyCode: description.keyCode,\n      code,\n      isKeypad: description.location === input.keypadLocation\n    });\n  }\n\n  async sendText(text: string): Promise<void> {\n    await this._session!.send('Page.insertText', { text });\n  }\n}\n\nexport class RawMouseImpl implements input.RawMouse {\n  private readonly _pageProxySession: WKSession;\n  private _session?: WKSession;\n  private _page?: Page;\n\n  constructor(session: WKSession) {\n    this._pageProxySession = session;\n  }\n\n  setSession(session: WKSession) {\n    this._session = session;\n  }\n\n  async move(x: number, y: number, button: types.MouseButton | 'none', buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, forClick: boolean): Promise<void> {\n    await this._pageProxySession.send('Input.dispatchMouseEvent', {\n      type: 'move',\n      button,\n      buttons: toButtonsMask(buttons),\n      x,\n      y,\n      modifiers: toModifiersMask(modifiers)\n    });\n  }\n\n  async down(x: number, y: number, button: types.MouseButton, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, clickCount: number): Promise<void> {\n    await this._pageProxySession.send('Input.dispatchMouseEvent', {\n      type: 'down',\n      button,\n      buttons: toButtonsMask(buttons),\n      x,\n      y,\n      modifiers: toModifiersMask(modifiers),\n      clickCount\n    });\n  }\n\n  async up(x: number, y: number, button: types.MouseButton, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, clickCount: number): Promise<void> {\n    await this._pageProxySession.send('Input.dispatchMouseEvent', {\n      type: 'up',\n      button,\n      buttons: toButtonsMask(buttons),\n      x,\n      y,\n      modifiers: toModifiersMask(modifiers),\n      clickCount\n    });\n  }\n\n  async wheel(x: number, y: number, buttons: Set<types.MouseButton>, modifiers: Set<types.KeyboardModifier>, deltaX: number, deltaY: number): Promise<void> {\n    if (this._page?.browserContext._options.isMobile)\n      throw new Error('Mouse wheel is not supported in mobile WebKit');\n    await this._session!.send('Page.updateScrollingState');\n    // Wheel events hit the compositor first, so wait one frame for it to be synced.\n    await this._page!.mainFrame().evaluateExpression(`new Promise(requestAnimationFrame)`, { world: 'utility' });\n    await this._pageProxySession.send('Input.dispatchWheelEvent', {\n      x,\n      y,\n      deltaX,\n      deltaY,\n      modifiers: toModifiersMask(modifiers),\n    });\n  }\n\n  setPage(page: Page) {\n    this._page = page;\n  }\n}\n\nexport class RawTouchscreenImpl implements input.RawTouchscreen {\n  private readonly _pageProxySession: WKSession;\n\n  constructor(session: WKSession) {\n    this._pageProxySession = session;\n  }\n\n  async tap(x: number, y: number, modifiers: Set<types.KeyboardModifier>) {\n    await this._pageProxySession.send('Input.dispatchTapEvent', {\n      x,\n      y,\n      modifiers: toModifiersMask(modifiers),\n    });\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, headersArrayToObject, headersObjectToArray } from '../../utils';\nimport * as network from '../network';\n\nimport type * as frames from '../frames';\nimport type * as types from '../types';\nimport type { Protocol } from './protocol';\nimport type { WKSession } from './wkConnection';\n\n\nconst errorReasons: { [reason: string]: Protocol.Network.ResourceErrorType } = {\n  'aborted': 'Cancellation',\n  'accessdenied': 'AccessControl',\n  'addressunreachable': 'General',\n  'blockedbyclient': 'Cancellation',\n  'blockedbyresponse': 'General',\n  'connectionaborted': 'General',\n  'connectionclosed': 'General',\n  'connectionfailed': 'General',\n  'connectionrefused': 'General',\n  'connectionreset': 'General',\n  'internetdisconnected': 'General',\n  'namenotresolved': 'General',\n  'timedout': 'Timeout',\n  'failed': 'General',\n};\n\nexport class WKInterceptableRequest {\n  private _session: WKSession;\n  private _requestId: string;\n  readonly request: network.Request;\n  _timestamp: number;\n  _wallTime: number;\n\n  constructor(session: WKSession, frame: frames.Frame, event: Protocol.Network.requestWillBeSentPayload, redirectedFrom: WKInterceptableRequest | null, documentId: string | undefined) {\n    this._session = session;\n    this._requestId = event.requestId;\n    const resourceType = event.type ? event.type.toLowerCase() : (redirectedFrom ? redirectedFrom.request.resourceType() : 'other');\n    let postDataBuffer = null;\n    this._timestamp = event.timestamp;\n    this._wallTime = event.walltime * 1000;\n    if (event.request.postData)\n      postDataBuffer = Buffer.from(event.request.postData, 'base64');\n    this.request = new network.Request(frame._page.browserContext, frame, null, redirectedFrom?.request || null, documentId, event.request.url,\n        resourceType, event.request.method, postDataBuffer, headersObjectToArray(event.request.headers));\n  }\n\n  adoptRequestFromNewProcess(newSession: WKSession, requestId: string) {\n    this._session = newSession;\n    this._requestId = requestId;\n  }\n\n  createResponse(responsePayload: Protocol.Network.Response): network.Response {\n    const getResponseBody = async () => {\n      const response = await this._session.send('Network.getResponseBody', { requestId: this._requestId });\n      return Buffer.from(response.body, response.base64Encoded ? 'base64' : 'utf8');\n    };\n    const timingPayload = responsePayload.timing;\n    const timing: network.ResourceTiming = {\n      startTime: this._wallTime,\n      domainLookupStart: timingPayload ? wkMillisToRoundishMillis(timingPayload.domainLookupStart) : -1,\n      domainLookupEnd: timingPayload ? wkMillisToRoundishMillis(timingPayload.domainLookupEnd) : -1,\n      connectStart: timingPayload ? wkMillisToRoundishMillis(timingPayload.connectStart) : -1,\n      secureConnectionStart: timingPayload ? wkMillisToRoundishMillis(timingPayload.secureConnectionStart) : -1,\n      connectEnd: timingPayload ? wkMillisToRoundishMillis(timingPayload.connectEnd) : -1,\n      requestStart: timingPayload ? wkMillisToRoundishMillis(timingPayload.requestStart) : -1,\n      responseStart: timingPayload ? wkMillisToRoundishMillis(timingPayload.responseStart) : -1,\n    };\n    const setCookieSeparator = process.platform === 'darwin' ? ',' : 'playwright-set-cookie-separator';\n    const response = new network.Response(this.request, responsePayload.status, responsePayload.statusText, headersObjectToArray(responsePayload.headers, ',', setCookieSeparator), timing, getResponseBody, responsePayload.source === 'service-worker');\n\n    // No raw response headers in WebKit, use \"provisional\" ones.\n    response.setRawResponseHeaders(null);\n    // Transfer size is not available in WebKit.\n    response.setTransferSize(null);\n\n    if (responsePayload.requestHeaders && Object.keys(responsePayload.requestHeaders).length) {\n      const headers = { ...responsePayload.requestHeaders };\n      if (!headers['host'])\n        headers['Host'] = new URL(this.request.url()).host;\n      this.request.setRawRequestHeaders(headersObjectToArray(headers));\n    } else {\n      // No raw headers available, use provisional ones.\n      this.request.setRawRequestHeaders(null);\n    }\n    return response;\n  }\n}\n\nexport class WKRouteImpl implements network.RouteDelegate {\n  private readonly _session: WKSession;\n  private readonly _requestId: string;\n\n  constructor(session: WKSession, requestId: string) {\n    this._session = session;\n    this._requestId = requestId;\n  }\n\n  async abort(errorCode: string) {\n    const errorType = errorReasons[errorCode];\n    assert(errorType, 'Unknown error code: ' + errorCode);\n    // In certain cases, protocol will return error if the request was already canceled\n    // or the page was closed. We should tolerate these errors.\n    await this._session.sendMayFail('Network.interceptRequestWithError', { requestId: this._requestId, errorType });\n  }\n\n  async fulfill(response: types.NormalizedFulfillResponse) {\n    if (300 <= response.status && response.status < 400)\n      throw new Error('Cannot fulfill with redirect status: ' + response.status);\n\n    // In certain cases, protocol will return error if the request was already canceled\n    // or the page was closed. We should tolerate these errors.\n    let mimeType = response.isBase64 ? 'application/octet-stream' : 'text/plain';\n    const headers = headersArrayToObject(response.headers, true /* lowerCase */);\n    const contentType = headers['content-type'];\n    if (contentType)\n      mimeType = contentType.split(';')[0].trim();\n\n    await this._session.sendMayFail('Network.interceptRequestWithResponse', {\n      requestId: this._requestId,\n      status: response.status,\n      statusText: network.statusText(response.status),\n      mimeType,\n      headers,\n      base64Encoded: response.isBase64,\n      content: response.body\n    });\n  }\n\n  async continue(overrides: types.NormalizedContinueOverrides) {\n    // In certain cases, protocol will return error if the request was already canceled\n    // or the page was closed. We should tolerate these errors.\n    await this._session.sendMayFail('Network.interceptWithRequest', {\n      requestId: this._requestId,\n      url: overrides.url,\n      method: overrides.method,\n      headers: overrides.headers ? headersArrayToObject(overrides.headers, false /* lowerCase */) : undefined,\n      postData: overrides.postData ? Buffer.from(overrides.postData).toString('base64') : undefined\n    });\n  }\n}\n\nfunction wkMillisToRoundishMillis(value: number): number {\n  // WebKit uses -1000 for unavailable.\n  if (value === -1000)\n    return -1;\n\n  // WebKit has a bug, instead of -1 it sends -1000 to be in ms.\n  if (value <= 0) {\n    // DNS can start before request start on Mac Network Stack\n    return -1;\n  }\n\n  return ((value * 1000) | 0) / 1000;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '../../utils';\nimport { eventsHelper } from '../utils/eventsHelper';\n\nimport type { Protocol } from './protocol';\nimport type { WKSession } from './wkConnection';\nimport type { WKPage } from './wkPage';\nimport type { RegisteredListener } from '../utils/eventsHelper';\nimport type * as network from '../network';\n\nexport class WKProvisionalPage {\n  readonly _session: WKSession;\n  private readonly _wkPage: WKPage;\n  private _coopNavigationRequest: network.Request | undefined;\n  private _sessionListeners: RegisteredListener[] = [];\n  private _mainFrameId: string | null = null;\n  readonly initializationPromise: Promise<void>;\n\n  constructor(session: WKSession, page: WKPage) {\n    this._session = session;\n    this._wkPage = page;\n    // Cross-Origin-Opener-Policy (COOP) request starts in one process and once response headers\n    // have been received, continues in another.\n    //\n    // Network.requestWillBeSent and requestIntercepted (if intercepting) from the original web process\n    // will always come before a provisional page is created based on the response COOP headers.\n    // Thereafter we'll receive targetCreated (provisional) and later on in some order loadingFailed from the\n    // original process and requestWillBeSent from the provisional one. We should ignore loadingFailed\n    // as the original request continues in the provisional process. But if the provisional load is later\n    // canceled we should dispatch loadingFailed to the client.\n    this._coopNavigationRequest = page._page.mainFrame().pendingDocument()?.request;\n\n    const overrideFrameId = (handler: (p: any) => void) => {\n      return (payload: any) => {\n        // Pretend that the events happened in the same process.\n        if (payload.frameId)\n          payload.frameId = this._wkPage._page.frameManager.mainFrame()._id;\n        handler(payload);\n      };\n    };\n    const wkPage = this._wkPage;\n\n    this._sessionListeners = [\n      eventsHelper.addEventListener(session, 'Network.requestWillBeSent', overrideFrameId(e => this._onRequestWillBeSent(e))),\n      eventsHelper.addEventListener(session, 'Network.requestIntercepted', overrideFrameId(e => wkPage._onRequestIntercepted(session, e))),\n      eventsHelper.addEventListener(session, 'Network.responseReceived', overrideFrameId(e => wkPage._onResponseReceived(session, e))),\n      eventsHelper.addEventListener(session, 'Network.loadingFinished', overrideFrameId(e => this._onLoadingFinished(e))),\n      eventsHelper.addEventListener(session, 'Network.loadingFailed', overrideFrameId(e => this._onLoadingFailed(e))),\n    ];\n\n    this.initializationPromise = this._wkPage._initializeSession(session, true, ({ frameTree }) => this._handleFrameTree(frameTree));\n  }\n\n  coopNavigationRequest(): network.Request | undefined {\n    return this._coopNavigationRequest;\n  }\n\n  dispose() {\n    eventsHelper.removeEventListeners(this._sessionListeners);\n  }\n\n  commit() {\n    assert(this._mainFrameId);\n    this._wkPage._onFrameAttached(this._mainFrameId, null);\n  }\n\n  private _onRequestWillBeSent(event: Protocol.Network.requestWillBeSentPayload) {\n    if (this._coopNavigationRequest && this._coopNavigationRequest.url() === event.request.url) {\n      // If it's a continuation of the main frame navigation request after COOP headers were received,\n      // take over original request, and replace its request id with the new one.\n      this._wkPage._adoptRequestFromNewProcess(this._coopNavigationRequest, this._session, event.requestId);\n      // Simply ignore this event as it has already been dispatched from the original process\n      // and there will ne no requestIntercepted event from the provisional process as it resumes\n      // existing network load (that has already received response headers).\n      return;\n    }\n    this._wkPage._onRequestWillBeSent(this._session, event);\n  }\n\n  private _onLoadingFinished(event: Protocol.Network.loadingFinishedPayload): void {\n    this._coopNavigationRequest = undefined;\n    this._wkPage._onLoadingFinished(event);\n  }\n\n  private _onLoadingFailed(event: Protocol.Network.loadingFailedPayload) {\n    this._coopNavigationRequest = undefined;\n    this._wkPage._onLoadingFailed(this._session, event);\n  }\n\n  private _handleFrameTree(frameTree: Protocol.Page.FrameResourceTree) {\n    assert(!frameTree.frame.parentId);\n    this._mainFrameId = frameTree.frame.id;\n  }\n}\n","/**\n * Copyright 2019 Microsoft Corporation All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { eventsHelper } from '../utils/eventsHelper';\nimport { Worker } from '../page';\nimport { WKSession } from './wkConnection';\nimport { createHandle, WKExecutionContext } from './wkExecutionContext';\n\nimport type { Protocol } from './protocol';\nimport type { RegisteredListener } from '../utils/eventsHelper';\nimport type { Page } from '../page';\nimport type * as types from '../types';\n\nexport class WKWorkers {\n  private _sessionListeners: RegisteredListener[] = [];\n  private _page: Page;\n  private _workerSessions = new Map<string, WKSession>();\n\n  constructor(page: Page) {\n    this._page = page;\n  }\n\n  setSession(session: WKSession) {\n    eventsHelper.removeEventListeners(this._sessionListeners);\n    this.clear();\n    this._sessionListeners = [\n      eventsHelper.addEventListener(session, 'Worker.workerCreated', (event: Protocol.Worker.workerCreatedPayload) => {\n        const worker = new Worker(this._page, event.url);\n        const workerSession = new WKSession(session.connection, event.workerId, (message: any) => {\n          session.send('Worker.sendMessageToWorker', {\n            workerId: event.workerId,\n            message: JSON.stringify(message)\n          }).catch(e => {\n            workerSession.dispatchMessage({ id: message.id, error: { message: e.message } });\n          });\n        });\n        this._workerSessions.set(event.workerId, workerSession);\n        worker.createExecutionContext(new WKExecutionContext(workerSession, undefined));\n        this._page.addWorker(event.workerId, worker);\n        workerSession.on('Console.messageAdded', event => this._onConsoleMessage(worker, event));\n        Promise.all([\n          workerSession.send('Runtime.enable'),\n          workerSession.send('Console.enable'),\n          session.send('Worker.initialized', { workerId: event.workerId })\n        ]).catch(e => {\n          // Worker can go as we are initializing it.\n          this._page.removeWorker(event.workerId);\n        });\n      }),\n      eventsHelper.addEventListener(session, 'Worker.dispatchMessageFromWorker', (event: Protocol.Worker.dispatchMessageFromWorkerPayload) => {\n        const workerSession = this._workerSessions.get(event.workerId)!;\n        if (!workerSession)\n          return;\n        workerSession.dispatchMessage(JSON.parse(event.message));\n      }),\n      eventsHelper.addEventListener(session, 'Worker.workerTerminated', (event: Protocol.Worker.workerTerminatedPayload) => {\n        const workerSession = this._workerSessions.get(event.workerId)!;\n        if (!workerSession)\n          return;\n        workerSession.dispose();\n        this._workerSessions.delete(event.workerId);\n        this._page.removeWorker(event.workerId);\n      })\n    ];\n  }\n\n  clear() {\n    this._page.clearWorkers();\n    this._workerSessions.clear();\n  }\n\n  async initializeSession(session: WKSession) {\n    await session.send('Worker.enable');\n  }\n\n  async _onConsoleMessage(worker: Worker, event: Protocol.Console.messageAddedPayload) {\n    const { type, level, text, parameters, url, line: lineNumber, column: columnNumber } = event.message;\n    let derivedType: string = type || '';\n    if (type === 'log')\n      derivedType = level;\n    else if (type === 'timing')\n      derivedType = 'timeEnd';\n\n    const handles = (parameters || []).map(p => {\n      return createHandle(worker.existingExecutionContext!, p);\n    });\n    const location: types.ConsoleMessageLocation = {\n      url: url || '',\n      lineNumber: (lineNumber || 1) - 1,\n      columnNumber: (columnNumber || 1) - 1\n    };\n    this._page.addConsoleMessage(derivedType, handles, location, handles.length ? undefined : text);\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport path from 'path';\n\nimport { assert } from '../../utils';\nimport { headersArrayToObject } from '../../utils/isomorphic/headers';\nimport { createGuid } from '../utils/crypto';\nimport { eventsHelper } from '../utils/eventsHelper';\nimport { hostPlatform } from '../utils/hostPlatform';\nimport { splitErrorMessage } from '../../utils/isomorphic/stackTrace';\nimport { PNG, jpegjs } from '../../utilsBundle';\nimport { BrowserContext } from '../browserContext';\nimport * as dialog from '../dialog';\nimport * as dom from '../dom';\nimport { TargetClosedError } from '../errors';\nimport { helper } from '../helper';\nimport * as network from '../network';\nimport { Page, PageBinding } from '../page';\nimport { getAccessibilityTree } from './wkAccessibility';\nimport { WKSession } from './wkConnection';\nimport { createHandle, WKExecutionContext } from './wkExecutionContext';\nimport { RawKeyboardImpl, RawMouseImpl, RawTouchscreenImpl } from './wkInput';\nimport { WKInterceptableRequest, WKRouteImpl } from './wkInterceptableRequest';\nimport { WKProvisionalPage } from './wkProvisionalPage';\nimport { WKWorkers } from './wkWorkers';\nimport { debugLogger } from '../utils/debugLogger';\n\nimport type { Protocol } from './protocol';\nimport type { WKBrowserContext } from './wkBrowser';\nimport type { RegisteredListener } from '../utils/eventsHelper';\nimport type * as accessibility from '../accessibility';\nimport type * as frames from '../frames';\nimport type { JSHandle } from '../javascript';\nimport type { InitScript, PageDelegate } from '../page';\nimport type { Progress } from '../progress';\nimport type * as types from '../types';\n\nconst UTILITY_WORLD_NAME = '__playwright_utility_world__';\n\nexport class WKPage implements PageDelegate {\n  readonly rawMouse: RawMouseImpl;\n  readonly rawKeyboard: RawKeyboardImpl;\n  readonly rawTouchscreen: RawTouchscreenImpl;\n  _session: WKSession;\n  private _provisionalPage: WKProvisionalPage | null = null;\n  readonly _page: Page;\n  private readonly _pageProxySession: WKSession;\n  readonly _opener: WKPage | null;\n  private readonly _requestIdToRequest = new Map<string, WKInterceptableRequest>();\n  private readonly _requestIdToRequestWillBeSentEvent = new Map<string, Protocol.Network.requestWillBeSentPayload>();\n  private readonly _workers: WKWorkers;\n  private readonly _contextIdToContext: Map<number, dom.FrameExecutionContext>;\n  private _sessionListeners: RegisteredListener[] = [];\n  private _eventListeners: RegisteredListener[];\n  readonly _browserContext: WKBrowserContext;\n  private _firstNonInitialNavigationCommittedPromise: Promise<void>;\n  private _firstNonInitialNavigationCommittedFulfill = () => {};\n  _firstNonInitialNavigationCommittedReject = (e: Error) => {};\n  private _lastConsoleMessage: { derivedType: string, text: string, handles: JSHandle[]; count: number, location: types.ConsoleMessageLocation; } | null = null;\n\n  private readonly _requestIdToResponseReceivedPayloadEvent = new Map<string, Protocol.Network.responseReceivedPayload>();\n  // Holds window features for the next popup being opened via window.open,\n  // until the popup page proxy arrives.\n  private _nextWindowOpenPopupFeatures?: string[];\n  private _recordingVideoFile: string | null = null;\n  private _screencastGeneration: number = 0;\n\n  constructor(browserContext: WKBrowserContext, pageProxySession: WKSession, opener: WKPage | null) {\n    this._pageProxySession = pageProxySession;\n    this._opener = opener;\n    this.rawKeyboard = new RawKeyboardImpl(pageProxySession);\n    this.rawMouse = new RawMouseImpl(pageProxySession);\n    this.rawTouchscreen = new RawTouchscreenImpl(pageProxySession);\n    this._contextIdToContext = new Map();\n    this._page = new Page(this, browserContext);\n    this.rawMouse.setPage(this._page);\n    this._workers = new WKWorkers(this._page);\n    this._session = undefined as any as WKSession;\n    this._browserContext = browserContext;\n    this._page.on(Page.Events.FrameDetached, (frame: frames.Frame) => this._removeContextsForFrame(frame, false));\n    this._eventListeners = [\n      eventsHelper.addEventListener(this._pageProxySession, 'Target.targetCreated', this._onTargetCreated.bind(this)),\n      eventsHelper.addEventListener(this._pageProxySession, 'Target.targetDestroyed', this._onTargetDestroyed.bind(this)),\n      eventsHelper.addEventListener(this._pageProxySession, 'Target.dispatchMessageFromTarget', this._onDispatchMessageFromTarget.bind(this)),\n      eventsHelper.addEventListener(this._pageProxySession, 'Target.didCommitProvisionalTarget', this._onDidCommitProvisionalTarget.bind(this)),\n      eventsHelper.addEventListener(this._pageProxySession, 'Screencast.screencastFrame', this._onScreencastFrame.bind(this)),\n    ];\n    this._firstNonInitialNavigationCommittedPromise = new Promise((f, r) => {\n      this._firstNonInitialNavigationCommittedFulfill = f;\n      this._firstNonInitialNavigationCommittedReject = r;\n    });\n    if (opener && !browserContext._options.noDefaultViewport && opener._nextWindowOpenPopupFeatures) {\n      const viewportSize = helper.getViewportSizeFromWindowFeatures(opener._nextWindowOpenPopupFeatures);\n      opener._nextWindowOpenPopupFeatures = undefined;\n      if (viewportSize)\n        this._page.setEmulatedSizeFromWindowOpen({ viewport: viewportSize, screen: viewportSize });\n    }\n  }\n\n  private async _initializePageProxySession() {\n    if (this._page.browserContext.isSettingStorageState())\n      return;\n    const promises: Promise<any>[] = [\n      this._pageProxySession.send('Dialog.enable'),\n      this._pageProxySession.send('Emulation.setActiveAndFocused', { active: true }),\n    ];\n    const contextOptions = this._browserContext._options;\n    if (contextOptions.javaScriptEnabled === false)\n      promises.push(this._pageProxySession.send('Emulation.setJavaScriptEnabled', { enabled: false }));\n    promises.push(this._updateViewport());\n    promises.push(this.updateHttpCredentials());\n    if (this._browserContext._permissions.size) {\n      for (const [key, value] of this._browserContext._permissions)\n        promises.push(this._grantPermissions(key, value));\n    }\n    if (this._browserContext._options.recordVideo) {\n      const outputFile = path.join(this._browserContext._options.recordVideo.dir, createGuid() + '.webm');\n      promises.push(this._browserContext._ensureVideosPath().then(() => {\n        return this._startVideo({\n          // validateBrowserContextOptions ensures correct video size.\n          ...this._browserContext._options.recordVideo!.size!,\n          outputFile,\n        });\n      }));\n    }\n    await Promise.all(promises);\n  }\n\n  private _setSession(session: WKSession) {\n    eventsHelper.removeEventListeners(this._sessionListeners);\n    this._session = session;\n    this.rawKeyboard.setSession(session);\n    this.rawMouse.setSession(session);\n    this._addSessionListeners();\n    this._workers.setSession(session);\n  }\n\n  // This method is called for provisional targets as well. The session passed as the parameter\n  // may be different from the current session and may be destroyed without becoming current.\n  async _initializeSession(session: WKSession, provisional: boolean, resourceTreeHandler: (r: Protocol.Page.getResourceTreeReturnValue) => void) {\n    await this._initializeSessionMayThrow(session, resourceTreeHandler).catch(e => {\n      // Provisional session can be disposed at any time, for example due to new navigation initiating\n      // a new provisional page.\n      if (provisional && session.isDisposed())\n        return;\n      // Swallow initialization errors due to newer target swap in,\n      // since we will reinitialize again.\n      if (this._session === session)\n        throw e;\n    });\n  }\n\n  private async _initializeSessionMayThrow(session: WKSession, resourceTreeHandler: (r: Protocol.Page.getResourceTreeReturnValue) => void) {\n    const [, frameTree] = await Promise.all([\n      // Page agent must be enabled before Runtime.\n      session.send('Page.enable'),\n      session.send('Page.getResourceTree'),\n    ] as const);\n    resourceTreeHandler(frameTree);\n    const promises: Promise<any>[] = [\n      // Resource tree should be received before first execution context.\n      session.send('Runtime.enable'),\n      session.send('Page.createUserWorld', { name: UTILITY_WORLD_NAME }).catch(_ => {}),  // Worlds are per-process\n      session.send('Console.enable'),\n      session.send('Network.enable'),\n      this._workers.initializeSession(session)\n    ];\n    if (this._page.browserContext.needsPlaywrightBinding())\n      promises.push(session.send('Runtime.addBinding', { name: PageBinding.kBindingName }));\n    if (this._page.needsRequestInterception()) {\n      promises.push(session.send('Network.setInterceptionEnabled', { enabled: true }));\n      promises.push(session.send('Network.setResourceCachingDisabled', { disabled: true }));\n      promises.push(session.send('Network.addInterception', { url: '.*', stage: 'request', isRegex: true }));\n    }\n    if (this._page.browserContext.isSettingStorageState()) {\n      await Promise.all(promises);\n      return;\n    }\n\n    const contextOptions = this._browserContext._options;\n    if (contextOptions.userAgent)\n      promises.push(this.updateUserAgent());\n    const emulatedMedia = this._page.emulatedMedia();\n    if (emulatedMedia.media || emulatedMedia.colorScheme || emulatedMedia.reducedMotion || emulatedMedia.forcedColors || emulatedMedia.contrast)\n      promises.push(WKPage._setEmulateMedia(session, emulatedMedia.media, emulatedMedia.colorScheme, emulatedMedia.reducedMotion, emulatedMedia.forcedColors, emulatedMedia.contrast));\n    const bootstrapScript = this._calculateBootstrapScript();\n    if (bootstrapScript.length)\n      promises.push(session.send('Page.setBootstrapScript', { source: bootstrapScript }));\n    this._page.frames().map(frame => frame.evaluateExpression(bootstrapScript).catch(e => {}));\n    if (contextOptions.bypassCSP)\n      promises.push(session.send('Page.setBypassCSP', { enabled: true }));\n    const emulatedSize = this._page.emulatedSize();\n    if (emulatedSize) {\n      promises.push(session.send('Page.setScreenSizeOverride', {\n        width: emulatedSize.screen.width,\n        height: emulatedSize.screen.height,\n      }));\n    }\n    promises.push(this.updateEmulateMedia());\n    promises.push(session.send('Network.setExtraHTTPHeaders', { headers: headersArrayToObject(this._calculateExtraHTTPHeaders(), false /* lowerCase */) }));\n    if (contextOptions.offline)\n      promises.push(session.send('Network.setEmulateOfflineState', { offline: true }));\n    promises.push(session.send('Page.setTouchEmulationEnabled', { enabled: !!contextOptions.hasTouch }));\n    if (contextOptions.timezoneId) {\n      promises.push(session.send('Page.setTimeZone', { timeZone: contextOptions.timezoneId }).\n          catch(e => { throw new Error(`Invalid timezone ID: ${contextOptions.timezoneId}`); }));\n    }\n    if (this._page.fileChooserIntercepted())\n      promises.push(session.send('Page.setInterceptFileChooserDialog', { enabled: true }));\n    promises.push(session.send('Page.overrideSetting', { setting: 'DeviceOrientationEventEnabled', value: contextOptions.isMobile }));\n    promises.push(session.send('Page.overrideSetting', { setting: 'FullScreenEnabled', value: !contextOptions.isMobile }));\n    promises.push(session.send('Page.overrideSetting', { setting: 'NotificationsEnabled', value: !contextOptions.isMobile }));\n    promises.push(session.send('Page.overrideSetting', { setting: 'PointerLockEnabled', value: !contextOptions.isMobile }));\n    promises.push(session.send('Page.overrideSetting', { setting: 'InputTypeMonthEnabled', value: contextOptions.isMobile }));\n    promises.push(session.send('Page.overrideSetting', { setting: 'InputTypeWeekEnabled', value: contextOptions.isMobile }));\n    promises.push(session.send('Page.overrideSetting', { setting: 'FixedBackgroundsPaintRelativeToDocument', value: contextOptions.isMobile }));\n    await Promise.all(promises);\n  }\n\n  private _onDidCommitProvisionalTarget(event: Protocol.Target.didCommitProvisionalTargetPayload) {\n    const { oldTargetId, newTargetId } = event;\n    assert(this._provisionalPage);\n    assert(this._provisionalPage._session.sessionId === newTargetId, 'Unknown new target: ' + newTargetId);\n    assert(this._session.sessionId === oldTargetId, 'Unknown old target: ' + oldTargetId);\n    const newSession = this._provisionalPage._session;\n    this._provisionalPage.commit();\n    this._provisionalPage.dispose();\n    this._provisionalPage = null;\n    this._setSession(newSession);\n  }\n\n  private _onTargetDestroyed(event: Protocol.Target.targetDestroyedPayload) {\n    const { targetId, crashed } = event;\n    if (this._provisionalPage && this._provisionalPage._session.sessionId === targetId) {\n      this._maybeCancelCoopNavigationRequest(this._provisionalPage);\n      this._provisionalPage._session.dispose();\n      this._provisionalPage.dispose();\n      this._provisionalPage = null;\n    } else if (this._session.sessionId === targetId) {\n      this._session.dispose();\n      eventsHelper.removeEventListeners(this._sessionListeners);\n      if (crashed) {\n        this._session.markAsCrashed();\n        this._page._didCrash();\n      }\n    }\n  }\n\n  didClose() {\n    this._pageProxySession.dispose();\n    eventsHelper.removeEventListeners(this._sessionListeners);\n    eventsHelper.removeEventListeners(this._eventListeners);\n    if (this._session)\n      this._session.dispose();\n    if (this._provisionalPage) {\n      this._provisionalPage._session.dispose();\n      this._provisionalPage.dispose();\n      this._provisionalPage = null;\n    }\n    this._firstNonInitialNavigationCommittedReject(new TargetClosedError());\n    this._page._didClose();\n  }\n\n  dispatchMessageToSession(message: any) {\n    this._pageProxySession.dispatchMessage(message);\n  }\n\n  handleProvisionalLoadFailed(event: Protocol.Playwright.provisionalLoadFailedPayload) {\n    if (!this._page.initializedOrUndefined()) {\n      this._firstNonInitialNavigationCommittedReject(new Error('Initial load failed'));\n      return;\n    }\n    if (!this._provisionalPage)\n      return;\n    let errorText = event.error;\n    if (errorText.includes('cancelled'))\n      errorText += '; maybe frame was detached?';\n    this._page.frameManager.frameAbortedNavigation(this._page.mainFrame()._id, errorText, event.loaderId);\n  }\n\n  handleWindowOpen(event: Protocol.Playwright.windowOpenPayload) {\n    this._nextWindowOpenPopupFeatures = event.windowFeatures;\n  }\n\n  private async _onTargetCreated(event: Protocol.Target.targetCreatedPayload) {\n    const { targetInfo } = event;\n    const session = new WKSession(this._pageProxySession.connection, targetInfo.targetId, (message: any) => {\n      this._pageProxySession.send('Target.sendMessageToTarget', {\n        message: JSON.stringify(message), targetId: targetInfo.targetId\n      }).catch(e => {\n        session.dispatchMessage({ id: message.id, error: { message: e.message } });\n      });\n    });\n    assert(targetInfo.type === 'page', 'Only page targets are expected in WebKit, received: ' + targetInfo.type);\n\n    if (!targetInfo.isProvisional) {\n      assert(!this._page.initializedOrUndefined());\n      let pageOrError: Page | Error;\n      try {\n        this._setSession(session);\n        await Promise.all([\n          this._initializePageProxySession(),\n          this._initializeSession(session, false, ({ frameTree }) => this._handleFrameTree(frameTree)),\n        ]);\n        pageOrError = this._page;\n      } catch (e) {\n        pageOrError = e;\n      }\n      if (targetInfo.isPaused)\n        this._pageProxySession.sendMayFail('Target.resume', { targetId: targetInfo.targetId });\n      if ((pageOrError instanceof Page) && this._page.mainFrame().url() === '') {\n        try {\n          // Initial empty page has an empty url. We should wait until the first real url has been loaded,\n          // even if that url is about:blank. This is especially important for popups, where we need the\n          // actual url before interacting with it.\n          await this._firstNonInitialNavigationCommittedPromise;\n        } catch (e) {\n          pageOrError = e;\n        }\n      } else {\n        // Avoid rejection on disconnect.\n        this._firstNonInitialNavigationCommittedPromise.catch(() => {});\n      }\n      this._page.reportAsNew(this._opener?._page, pageOrError instanceof Page ? undefined : pageOrError);\n    } else {\n      assert(targetInfo.isProvisional);\n      assert(!this._provisionalPage);\n      this._provisionalPage = new WKProvisionalPage(session, this);\n      if (targetInfo.isPaused) {\n        this._provisionalPage.initializationPromise.then(() => {\n          this._pageProxySession.sendMayFail('Target.resume', { targetId: targetInfo.targetId });\n        });\n      }\n    }\n  }\n\n  private _onDispatchMessageFromTarget(event: Protocol.Target.dispatchMessageFromTargetPayload) {\n    const { targetId, message } = event;\n    if (this._provisionalPage && this._provisionalPage._session.sessionId === targetId)\n      this._provisionalPage._session.dispatchMessage(JSON.parse(message));\n    else if (this._session.sessionId === targetId)\n      this._session.dispatchMessage(JSON.parse(message));\n    else\n      throw new Error('Unknown target: ' + targetId);\n  }\n\n  private _addSessionListeners() {\n    this._sessionListeners = [\n      eventsHelper.addEventListener(this._session, 'Page.frameNavigated', event => this._onFrameNavigated(event.frame, false)),\n      eventsHelper.addEventListener(this._session, 'Page.navigatedWithinDocument', event => this._onFrameNavigatedWithinDocument(event.frameId, event.url)),\n      eventsHelper.addEventListener(this._session, 'Page.frameAttached', event => this._onFrameAttached(event.frameId, event.parentFrameId)),\n      eventsHelper.addEventListener(this._session, 'Page.frameDetached', event => this._onFrameDetached(event.frameId)),\n      eventsHelper.addEventListener(this._session, 'Page.willCheckNavigationPolicy', event => this._onWillCheckNavigationPolicy(event.frameId)),\n      eventsHelper.addEventListener(this._session, 'Page.didCheckNavigationPolicy', event => this._onDidCheckNavigationPolicy(event.frameId, event.cancel)),\n      eventsHelper.addEventListener(this._session, 'Page.frameScheduledNavigation', event => this._onFrameScheduledNavigation(event.frameId, event.delay, event.targetIsCurrentFrame)),\n      eventsHelper.addEventListener(this._session, 'Page.loadEventFired', event => this._page.frameManager.frameLifecycleEvent(event.frameId, 'load')),\n      eventsHelper.addEventListener(this._session, 'Page.domContentEventFired', event => this._page.frameManager.frameLifecycleEvent(event.frameId, 'domcontentloaded')),\n      eventsHelper.addEventListener(this._session, 'Runtime.executionContextCreated', event => this._onExecutionContextCreated(event.context)),\n      eventsHelper.addEventListener(this._session, 'Runtime.bindingCalled', event => this._onBindingCalled(event.contextId, event.argument)),\n      eventsHelper.addEventListener(this._session, 'Console.messageAdded', event => this._onConsoleMessage(event)),\n      eventsHelper.addEventListener(this._session, 'Console.messageRepeatCountUpdated', event => this._onConsoleRepeatCountUpdated(event)),\n      eventsHelper.addEventListener(this._pageProxySession, 'Dialog.javascriptDialogOpening', event => this._onDialog(event)),\n      eventsHelper.addEventListener(this._session, 'Page.fileChooserOpened', event => this._onFileChooserOpened(event)),\n      eventsHelper.addEventListener(this._session, 'Network.requestWillBeSent', e => this._onRequestWillBeSent(this._session, e)),\n      eventsHelper.addEventListener(this._session, 'Network.requestIntercepted', e => this._onRequestIntercepted(this._session, e)),\n      eventsHelper.addEventListener(this._session, 'Network.responseReceived', e => this._onResponseReceived(this._session, e)),\n      eventsHelper.addEventListener(this._session, 'Network.loadingFinished', e => this._onLoadingFinished(e)),\n      eventsHelper.addEventListener(this._session, 'Network.loadingFailed', e => this._onLoadingFailed(this._session, e)),\n      eventsHelper.addEventListener(this._session, 'Network.webSocketCreated', e => this._page.frameManager.onWebSocketCreated(e.requestId, e.url)),\n      eventsHelper.addEventListener(this._session, 'Network.webSocketWillSendHandshakeRequest', e => this._page.frameManager.onWebSocketRequest(e.requestId)),\n      eventsHelper.addEventListener(this._session, 'Network.webSocketHandshakeResponseReceived', e => this._page.frameManager.onWebSocketResponse(e.requestId, e.response.status, e.response.statusText)),\n      eventsHelper.addEventListener(this._session, 'Network.webSocketFrameSent', e => e.response.payloadData && this._page.frameManager.onWebSocketFrameSent(e.requestId, e.response.opcode, e.response.payloadData)),\n      eventsHelper.addEventListener(this._session, 'Network.webSocketFrameReceived', e => e.response.payloadData && this._page.frameManager.webSocketFrameReceived(e.requestId, e.response.opcode, e.response.payloadData)),\n      eventsHelper.addEventListener(this._session, 'Network.webSocketClosed', e => this._page.frameManager.webSocketClosed(e.requestId)),\n      eventsHelper.addEventListener(this._session, 'Network.webSocketFrameError', e => this._page.frameManager.webSocketError(e.requestId, e.errorMessage)),\n    ];\n  }\n  private async _updateState<T extends keyof Protocol.CommandParameters>(\n    method: T,\n    params?: Protocol.CommandParameters[T]\n  ): Promise<void> {\n    await this._forAllSessions(session => session.send(method, params).then());\n  }\n\n  private async _forAllSessions(callback: ((session: WKSession) => Promise<void>)): Promise<void> {\n    const sessions = [\n      this._session\n    ];\n    // If the state changes during provisional load, push it to the provisional page\n    // as well to always be in sync with the backend.\n    if (this._provisionalPage)\n      sessions.push(this._provisionalPage._session);\n    await Promise.all(sessions.map(session => callback(session).catch(e => {})));\n  }\n\n  private _onWillCheckNavigationPolicy(frameId: string) {\n    // It may happen that new policy check occurs while there is an ongoing\n    // provisional load, in this case it should be safe to ignore it as it will\n    // either:\n    // - end up canceled, e.g. ctrl+click opening link in new tab, having no effect\n    //   on this page\n    // - start new provisional load which we will miss in our signal trackers but\n    //   we certainly won't hang waiting for it to finish and there is high chance\n    //   that the current provisional page will commit navigation canceling the new\n    //   one.\n    if (this._provisionalPage)\n      return;\n    this._page.frameManager.frameRequestedNavigation(frameId);\n  }\n\n  private _onDidCheckNavigationPolicy(frameId: string, cancel?: boolean) {\n    if (!cancel)\n      return;\n    // This is a cross-process navigation that is canceled in the original page and continues in\n    // the provisional page. Bail out as we are tracking it.\n    if (this._provisionalPage)\n      return;\n    this._page.frameManager.frameAbortedNavigation(frameId, 'Navigation canceled by policy check');\n  }\n\n  private _onFrameScheduledNavigation(frameId: string, delay: number, targetIsCurrentFrame: boolean) {\n    if (targetIsCurrentFrame)\n      this._page.frameManager.frameRequestedNavigation(frameId);\n  }\n\n  private _handleFrameTree(frameTree: Protocol.Page.FrameResourceTree) {\n    this._onFrameAttached(frameTree.frame.id, frameTree.frame.parentId || null);\n    this._onFrameNavigated(frameTree.frame, true);\n    this._page.frameManager.frameLifecycleEvent(frameTree.frame.id, 'domcontentloaded');\n    this._page.frameManager.frameLifecycleEvent(frameTree.frame.id, 'load');\n\n    if (!frameTree.childFrames)\n      return;\n    for (const child of frameTree.childFrames)\n      this._handleFrameTree(child);\n  }\n\n  _onFrameAttached(frameId: string, parentFrameId: string | null): frames.Frame {\n    return this._page.frameManager.frameAttached(frameId, parentFrameId);\n  }\n\n  private _onFrameNavigated(framePayload: Protocol.Page.Frame, initial: boolean) {\n    const frame = this._page.frameManager.frame(framePayload.id);\n    assert(frame);\n    this._removeContextsForFrame(frame, true);\n    if (!framePayload.parentId)\n      this._workers.clear();\n    this._page.frameManager.frameCommittedNewDocumentNavigation(framePayload.id, framePayload.url, framePayload.name || '', framePayload.loaderId, initial);\n    if (!initial)\n      this._firstNonInitialNavigationCommittedFulfill();\n  }\n\n  private _onFrameNavigatedWithinDocument(frameId: string, url: string) {\n    this._page.frameManager.frameCommittedSameDocumentNavigation(frameId, url);\n  }\n\n  private _onFrameDetached(frameId: string) {\n    this._page.frameManager.frameDetached(frameId);\n  }\n\n  private _removeContextsForFrame(frame: frames.Frame, notifyFrame: boolean) {\n    for (const [contextId, context] of this._contextIdToContext) {\n      if (context.frame === frame) {\n        this._contextIdToContext.delete(contextId);\n        if (notifyFrame)\n          frame._contextDestroyed(context);\n      }\n    }\n  }\n\n  private _onExecutionContextCreated(contextPayload: Protocol.Runtime.ExecutionContextDescription) {\n    if (this._contextIdToContext.has(contextPayload.id))\n      return;\n    const frame = this._page.frameManager.frame(contextPayload.frameId);\n    if (!frame)\n      return;\n    const delegate = new WKExecutionContext(this._session, contextPayload.id);\n    let worldName: types.World|null = null;\n    if (contextPayload.type === 'normal')\n      worldName = 'main';\n    else if (contextPayload.type === 'user' && contextPayload.name === UTILITY_WORLD_NAME)\n      worldName = 'utility';\n    const context = new dom.FrameExecutionContext(delegate, frame, worldName);\n    if (worldName)\n      frame._contextCreated(worldName, context);\n    this._contextIdToContext.set(contextPayload.id, context);\n  }\n\n  private async _onBindingCalled(contextId: Protocol.Runtime.ExecutionContextId, argument: string) {\n    const pageOrError = await this._page.waitForInitializedOrError();\n    if (!(pageOrError instanceof Error)) {\n      const context = this._contextIdToContext.get(contextId);\n      if (context)\n        await this._page.onBindingCalled(argument, context);\n    }\n  }\n\n  async navigateFrame(frame: frames.Frame, url: string, referrer: string | undefined): Promise<frames.GotoResult> {\n    if (this._pageProxySession.isDisposed())\n      throw new TargetClosedError();\n    const pageProxyId = this._pageProxySession.sessionId;\n    const result = await this._pageProxySession.connection.browserSession.send('Playwright.navigate', { url, pageProxyId, frameId: frame._id, referrer });\n    return { newDocumentId: result.loaderId };\n  }\n\n  private _onConsoleMessage(event: Protocol.Console.messageAddedPayload) {\n    // Note: do no introduce await in this function, otherwise we lose the ordering.\n    // For example, frame.setContent relies on this.\n    const { type, level, text, parameters, url, line: lineNumber, column: columnNumber, source } = event.message;\n    if (level === 'error' && source === 'javascript') {\n      const { name, message } = splitErrorMessage(text);\n\n      let stack: string;\n      if (event.message.stackTrace) {\n        stack = text + '\\n' + event.message.stackTrace.callFrames.map(callFrame => {\n          return `    at ${callFrame.functionName || 'unknown'} (${callFrame.url}:${callFrame.lineNumber}:${callFrame.columnNumber})`;\n        }).join('\\n');\n      } else {\n        stack = '';\n      }\n\n      this._lastConsoleMessage = null;\n      const error = new Error(message);\n      error.stack = stack;\n      error.name = name;\n\n      this._page.emitOnContextOnceInitialized(BrowserContext.Events.PageError, error, this._page);\n      return;\n    }\n\n    let derivedType: string = type || '';\n    if (type === 'log')\n      derivedType = level;\n    else if (type === 'timing')\n      derivedType = 'timeEnd';\n\n    const handles: JSHandle[] = [];\n    for (const p of parameters || []) {\n      let context: dom.FrameExecutionContext | undefined;\n      if (p.objectId) {\n        const objectId = JSON.parse(p.objectId);\n        context = this._contextIdToContext.get(objectId.injectedScriptId);\n      } else {\n        // Pick any context if the parameter is a value.\n        context = [...this._contextIdToContext.values()].find(c => c.frame === this._page.mainFrame());\n      }\n      if (!context)\n        return;\n      handles.push(createHandle(context, p));\n    }\n    this._lastConsoleMessage = {\n      derivedType,\n      text,\n      handles,\n      count: 0,\n      location: {\n        url: url || '',\n        lineNumber: (lineNumber || 1) - 1,\n        columnNumber: (columnNumber || 1) - 1,\n      }\n    };\n    this._onConsoleRepeatCountUpdated({ count: 1 });\n  }\n\n  _onConsoleRepeatCountUpdated(event: Protocol.Console.messageRepeatCountUpdatedPayload) {\n    if (this._lastConsoleMessage) {\n      const {\n        derivedType,\n        text,\n        handles,\n        count,\n        location\n      } = this._lastConsoleMessage;\n      for (let i = count; i < event.count; ++i)\n        this._page.addConsoleMessage(derivedType, handles, location, handles.length ? undefined : text);\n      this._lastConsoleMessage.count = event.count;\n    }\n  }\n\n  _onDialog(event: Protocol.Dialog.javascriptDialogOpeningPayload) {\n    this._page.browserContext.dialogManager.dialogDidOpen(new dialog.Dialog(\n        this._page,\n        event.type as dialog.DialogType,\n        event.message,\n        async (accept: boolean, promptText?: string) => {\n          // TODO: this should actually be a RDP event that notifies about a cancelled navigation attempt.\n          if (event.type === 'beforeunload' && !accept)\n            this._page.frameManager.frameAbortedNavigation(this._page.mainFrame()._id, 'navigation cancelled by beforeunload dialog');\n          await this._pageProxySession.send('Dialog.handleJavaScriptDialog', { accept, promptText });\n        },\n        event.defaultPrompt));\n  }\n\n  private async _onFileChooserOpened(event: {frameId: Protocol.Network.FrameId, element: Protocol.Runtime.RemoteObject}) {\n    let handle;\n    try {\n      const context = await this._page.frameManager.frame(event.frameId)!._mainContext();\n      handle =  createHandle(context, event.element).asElement()!;\n    } catch (e) {\n      // During async processing, frame/context may go away. We should not throw.\n      return;\n    }\n    await this._page._onFileChooserOpened(handle);\n  }\n\n  private static async _setEmulateMedia(session: WKSession, mediaType: types.MediaType, colorScheme: types.ColorScheme, reducedMotion: types.ReducedMotion, forcedColors: types.ForcedColors, contrast: types.Contrast): Promise<void> {\n    const promises = [];\n    promises.push(session.send('Page.setEmulatedMedia', { media: mediaType === 'no-override' ? '' : mediaType }));\n    let appearance: any = undefined;\n    switch (colorScheme) {\n      case 'light': appearance = 'Light'; break;\n      case 'dark': appearance = 'Dark'; break;\n      case 'no-override': appearance = undefined; break;\n    }\n    promises.push(session.send('Page.overrideUserPreference', { name: 'PrefersColorScheme', value: appearance }));\n    let reducedMotionWk: any = undefined;\n    switch (reducedMotion) {\n      case 'reduce': reducedMotionWk = 'Reduce'; break;\n      case 'no-preference': reducedMotionWk = 'NoPreference'; break;\n      case 'no-override': reducedMotionWk = undefined; break;\n    }\n    promises.push(session.send('Page.overrideUserPreference', { name: 'PrefersReducedMotion', value: reducedMotionWk }));\n    let forcedColorsWk: any = undefined;\n    switch (forcedColors) {\n      case 'active': forcedColorsWk = 'Active'; break;\n      case 'none': forcedColorsWk = 'None'; break;\n      case 'no-override': forcedColorsWk = undefined; break;\n    }\n    promises.push(session.send('Page.setForcedColors', { forcedColors: forcedColorsWk }));\n    let contrastWk: any = undefined;\n    switch (contrast) {\n      case 'more': contrastWk = 'More'; break;\n      case 'no-preference': contrastWk = 'NoPreference'; break;\n      case 'no-override': contrastWk = undefined; break;\n    }\n    promises.push(session.send('Page.overrideUserPreference', { name: 'PrefersContrast', value: contrastWk }));\n    await Promise.all(promises);\n  }\n\n  async updateExtraHTTPHeaders(): Promise<void> {\n    await this._updateState('Network.setExtraHTTPHeaders', { headers: headersArrayToObject(this._calculateExtraHTTPHeaders(), false /* lowerCase */) });\n  }\n\n  _calculateExtraHTTPHeaders(): types.HeadersArray {\n    const locale = this._browserContext._options.locale;\n    const headers = network.mergeHeaders([\n      this._browserContext._options.extraHTTPHeaders,\n      this._page.extraHTTPHeaders(),\n      locale ? network.singleHeader('Accept-Language', locale) : undefined,\n    ]);\n    return headers;\n  }\n\n  async updateEmulateMedia(): Promise<void> {\n    const emulatedMedia = this._page.emulatedMedia();\n    const colorScheme = emulatedMedia.colorScheme;\n    const reducedMotion = emulatedMedia.reducedMotion;\n    const forcedColors = emulatedMedia.forcedColors;\n    const contrast = emulatedMedia.contrast;\n    await this._forAllSessions(session => WKPage._setEmulateMedia(session, emulatedMedia.media, colorScheme, reducedMotion, forcedColors, contrast));\n  }\n\n  async updateEmulatedViewportSize(): Promise<void> {\n    this._browserContext._validateEmulatedViewport(this._page.emulatedSize()?.viewport);\n    await this._updateViewport();\n  }\n\n  async updateUserAgent(): Promise<void> {\n    const contextOptions = this._browserContext._options;\n    this._updateState('Page.overrideUserAgent', { value: contextOptions.userAgent });\n  }\n\n  async bringToFront(): Promise<void> {\n    this._pageProxySession.send('Target.activate', {\n      targetId: this._session.sessionId\n    });\n  }\n\n  async _updateViewport(): Promise<void> {\n    const options = this._browserContext._options;\n    const emulatedSize = this._page.emulatedSize();\n    if (!emulatedSize)\n      return;\n    const viewportSize = emulatedSize.viewport;\n    const screenSize = emulatedSize.screen;\n    const promises: Promise<any>[] = [\n      this._pageProxySession.send('Emulation.setDeviceMetricsOverride', {\n        width: viewportSize.width,\n        height: viewportSize.height,\n        fixedLayout: !!options.isMobile,\n        deviceScaleFactor: options.deviceScaleFactor || 1\n      }),\n      this._session.send('Page.setScreenSizeOverride', {\n        width: screenSize.width,\n        height: screenSize.height,\n      }),\n    ];\n    if (options.isMobile) {\n      const angle = viewportSize.width > viewportSize.height ? 90 : 0;\n      promises.push(this._pageProxySession.send('Emulation.setOrientationOverride', { angle }));\n    }\n    await Promise.all(promises);\n  }\n\n  async updateRequestInterception(): Promise<void> {\n    const enabled = this._page.needsRequestInterception();\n    await Promise.all([\n      this._updateState('Network.setInterceptionEnabled', { enabled }),\n      this._updateState('Network.setResourceCachingDisabled', { disabled: enabled }),\n      this._updateState('Network.addInterception', { url: '.*', stage: 'request', isRegex: true }),\n    ]);\n  }\n\n  async updateOffline() {\n    await this._updateState('Network.setEmulateOfflineState', { offline: !!this._browserContext._options.offline });\n  }\n\n  async updateHttpCredentials() {\n    const credentials = this._browserContext._options.httpCredentials || { username: '', password: '', origin: '' };\n    await this._pageProxySession.send('Emulation.setAuthCredentials', { username: credentials.username, password: credentials.password, origin: credentials.origin });\n  }\n\n  async updateFileChooserInterception() {\n    const enabled = this._page.fileChooserIntercepted();\n    await this._session.send('Page.setInterceptFileChooserDialog', { enabled }).catch(() => {}); // target can be closed.\n  }\n\n  async reload(): Promise<void> {\n    await this._session.send('Page.reload');\n  }\n\n  goBack(): Promise<boolean> {\n    return this._session.send('Page.goBack').then(() => true).catch(error => {\n      if (error instanceof Error && error.message.includes(`Protocol error (Page.goBack): Failed to go`))\n        return false;\n      throw error;\n    });\n  }\n\n  goForward(): Promise<boolean> {\n    return this._session.send('Page.goForward').then(() => true).catch(error => {\n      if (error instanceof Error && error.message.includes(`Protocol error (Page.goForward): Failed to go`))\n        return false;\n      throw error;\n    });\n  }\n\n  async requestGC(): Promise<void> {\n    await this._session.send('Heap.gc');\n  }\n\n  async addInitScript(initScript: InitScript): Promise<void> {\n    await this._updateBootstrapScript();\n  }\n\n  async removeInitScripts(initScripts: InitScript[]): Promise<void> {\n    await this._updateBootstrapScript();\n  }\n\n  async exposePlaywrightBinding() {\n    await this._updateState('Runtime.addBinding', { name: PageBinding.kBindingName });\n  }\n\n  private _calculateBootstrapScript(): string {\n    const scripts: string[] = [];\n    if (!this._page.browserContext._options.isMobile) {\n      scripts.push('delete window.orientation');\n      scripts.push('delete window.ondevicemotion');\n      scripts.push('delete window.ondeviceorientation');\n    }\n    scripts.push('if (!window.safari) window.safari = { pushNotification: { toString() { return \"[object SafariRemoteNotification]\"; } } };');\n    scripts.push('if (!window.GestureEvent) window.GestureEvent = function GestureEvent() {};');\n    scripts.push(this._publicKeyCredentialScript());\n    scripts.push(...this._page.allInitScripts().map(script => script.source));\n    return scripts.join(';\\n');\n  }\n\n  private _publicKeyCredentialScript(): string {\n    function polyfill() {\n      /**\n       * Some sites don't check existance of PublicKeyCredentials because all browsers except Webkit on Linux implement it.\n       * We polyfill the subset that's used for feature detection, so that login flows that'd work in Safari don't crash with \"PublicKeyCredential is not defined\" in CI.\n       * https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredential\n       */\n      window.PublicKeyCredential ??= {\n        async getClientCapabilities() {\n          return {};\n        },\n        async isConditionalMediationAvailable() {\n          return false;\n        },\n        async isUserVerifyingPlatformAuthenticatorAvailable() {\n          return false;\n        },\n      } as any;\n    }\n    return `(${polyfill.toString()})();`;\n  }\n\n  async _updateBootstrapScript(): Promise<void> {\n    await this._updateState('Page.setBootstrapScript', { source: this._calculateBootstrapScript() });\n  }\n\n  async closePage(runBeforeUnload: boolean): Promise<void> {\n    await this._stopVideo();\n    await this._pageProxySession.sendMayFail('Target.close', {\n      targetId: this._session.sessionId,\n      runBeforeUnload\n    });\n  }\n\n  async setBackgroundColor(color?: { r: number; g: number; b: number; a: number; }): Promise<void> {\n    await this._session.send('Page.setDefaultBackgroundColorOverride', { color });\n  }\n\n  private _toolbarHeight(): number {\n    if (this._page.browserContext._browser?.options.headful)\n      return hostPlatform === 'mac10.15' ? 55 : 59;\n    return 0;\n  }\n\n  private async _startVideo(options: types.PageScreencastOptions): Promise<void> {\n    assert(!this._recordingVideoFile);\n    const { screencastId } = await this._pageProxySession.send('Screencast.startVideo', {\n      file: options.outputFile,\n      width: options.width,\n      height: options.height,\n      toolbarHeight: this._toolbarHeight()\n    });\n    this._recordingVideoFile = options.outputFile;\n    this._browserContext._browser._videoStarted(this._browserContext, screencastId, options.outputFile, this._page.waitForInitializedOrError());\n  }\n\n  async _stopVideo(): Promise<void> {\n    if (!this._recordingVideoFile)\n      return;\n    await this._pageProxySession.sendMayFail('Screencast.stopVideo');\n    this._recordingVideoFile = null;\n  }\n\n  private validateScreenshotDimension(side: number, omitDeviceScaleFactor: boolean) {\n    // Cairo based implementations (Linux and Windows) have hard limit of 32767\n    // (see https://github.com/microsoft/playwright/issues/16727).\n    if (process.platform === 'darwin')\n      return;\n    if (!omitDeviceScaleFactor && this._page.browserContext._options.deviceScaleFactor)\n      side = Math.ceil(side * this._page.browserContext._options.deviceScaleFactor);\n    if (side > 32767)\n      throw new Error('Cannot take screenshot larger than 32767 pixels on any dimension');\n  }\n\n  async takeScreenshot(progress: Progress, format: string, documentRect: types.Rect | undefined, viewportRect: types.Rect | undefined, quality: number | undefined, fitsViewport: boolean, scale: 'css' | 'device'): Promise<Buffer> {\n    const rect = (documentRect || viewportRect)!;\n    const omitDeviceScaleFactor = scale === 'css';\n    this.validateScreenshotDimension(rect.width, omitDeviceScaleFactor);\n    this.validateScreenshotDimension(rect.height, omitDeviceScaleFactor);\n    const result = await this._session.send('Page.snapshotRect', { ...rect, coordinateSystem: documentRect ? 'Page' : 'Viewport', omitDeviceScaleFactor });\n    const prefix = 'data:image/png;base64,';\n    let buffer: Buffer = Buffer.from(result.dataURL.substr(prefix.length), 'base64');\n    if (format === 'jpeg')\n      buffer = jpegjs.encode(PNG.sync.read(buffer), quality).data;\n    return buffer;\n  }\n\n  async getContentFrame(handle: dom.ElementHandle): Promise<frames.Frame | null> {\n    const nodeInfo = await this._session.send('DOM.describeNode', {\n      objectId: handle._objectId\n    });\n    if (!nodeInfo.contentFrameId)\n      return null;\n    return this._page.frameManager.frame(nodeInfo.contentFrameId);\n  }\n\n  async getOwnerFrame(handle: dom.ElementHandle): Promise<string | null> {\n    if (!handle._objectId)\n      return null;\n    const nodeInfo = await this._session.send('DOM.describeNode', {\n      objectId: handle._objectId\n    });\n    return nodeInfo.ownerFrameId || null;\n  }\n\n  async getBoundingBox(handle: dom.ElementHandle): Promise<types.Rect | null> {\n    const quads = await this.getContentQuads(handle);\n    if (!quads || !quads.length)\n      return null;\n    let minX = Infinity;\n    let maxX = -Infinity;\n    let minY = Infinity;\n    let maxY = -Infinity;\n    for (const quad of quads) {\n      for (const point of quad) {\n        minX = Math.min(minX, point.x);\n        maxX = Math.max(maxX, point.x);\n        minY = Math.min(minY, point.y);\n        maxY = Math.max(maxY, point.y);\n      }\n    }\n    return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n  }\n\n  async scrollRectIntoViewIfNeeded(handle: dom.ElementHandle, rect?: types.Rect): Promise<'error:notvisible' | 'error:notconnected' | 'done'> {\n    return await this._session.send('DOM.scrollIntoViewIfNeeded', {\n      objectId: handle._objectId,\n      rect,\n    }).then(() => 'done' as const).catch(e => {\n      if (e instanceof Error && e.message.includes('Node does not have a layout object'))\n        return 'error:notvisible';\n      if (e instanceof Error && e.message.includes('Node is detached from document'))\n        return 'error:notconnected';\n      throw e;\n    });\n  }\n\n  async setScreencastOptions(options: { width: number, height: number, quality: number } | null): Promise<void> {\n    if (options) {\n      const so = { ...options, toolbarHeight: this._toolbarHeight() };\n      const { generation } = await this._pageProxySession.send('Screencast.startScreencast', so);\n      this._screencastGeneration = generation;\n    } else {\n      await this._pageProxySession.send('Screencast.stopScreencast');\n    }\n  }\n\n  private _onScreencastFrame(event: Protocol.Screencast.screencastFramePayload) {\n    const generation = this._screencastGeneration;\n    this._page.throttleScreencastFrameAck(() => {\n      this._pageProxySession.send('Screencast.screencastFrameAck', { generation }).catch(e => debugLogger.log('error', e));\n    });\n    const buffer = Buffer.from(event.data, 'base64');\n    this._page.emit(Page.Events.ScreencastFrame, {\n      buffer,\n      width: event.deviceWidth,\n      height: event.deviceHeight,\n    });\n  }\n\n  rafCountForStablePosition(): number {\n    return process.platform === 'win32' ? 5 : 1;\n  }\n\n  async getContentQuads(handle: dom.ElementHandle): Promise<types.Quad[] | null> {\n    const result = await this._session.sendMayFail('DOM.getContentQuads', {\n      objectId: handle._objectId\n    });\n    if (!result)\n      return null;\n    return result.quads.map(quad => [\n      { x: quad[0], y: quad[1] },\n      { x: quad[2], y: quad[3] },\n      { x: quad[4], y: quad[5] },\n      { x: quad[6], y: quad[7] }\n    ]);\n  }\n\n  async setInputFilePaths(handle: dom.ElementHandle<HTMLInputElement>, paths: string[]): Promise<void> {\n    const pageProxyId = this._pageProxySession.sessionId;\n    const objectId = handle._objectId;\n    await Promise.all([\n      this._pageProxySession.connection.browserSession.send('Playwright.grantFileReadAccess', { pageProxyId, paths }),\n      this._session.send('DOM.setInputFiles', { objectId, paths })\n    ]);\n  }\n\n  async adoptElementHandle<T extends Node>(handle: dom.ElementHandle<T>, to: dom.FrameExecutionContext): Promise<dom.ElementHandle<T>> {\n    const result = await this._session.sendMayFail('DOM.resolveNode', {\n      objectId: handle._objectId,\n      executionContextId: (to.delegate as WKExecutionContext)._contextId\n    });\n    if (!result || result.object.subtype === 'null')\n      throw new Error(dom.kUnableToAdoptErrorMessage);\n    return createHandle(to, result.object) as dom.ElementHandle<T>;\n  }\n\n  async getAccessibilityTree(needle?: dom.ElementHandle): Promise<{tree: accessibility.AXNode, needle: accessibility.AXNode | null}> {\n    return getAccessibilityTree(this._session, needle);\n  }\n\n  async inputActionEpilogue(): Promise<void> {\n  }\n\n  async resetForReuse(): Promise<void> {\n  }\n\n  async getFrameElement(frame: frames.Frame): Promise<dom.ElementHandle> {\n    const parent = frame.parentFrame();\n    if (!parent)\n      throw new Error('Frame has been detached.');\n    const context = await parent._mainContext();\n    const result = await this._session.send('DOM.resolveNode', {\n      frameId: frame._id,\n      executionContextId: (context.delegate as WKExecutionContext)._contextId\n    });\n    if (!result || result.object.subtype === 'null')\n      throw new Error('Frame has been detached.');\n    return createHandle(context, result.object) as dom.ElementHandle;\n  }\n\n  private _maybeCancelCoopNavigationRequest(provisionalPage: WKProvisionalPage) {\n    const navigationRequest = provisionalPage.coopNavigationRequest();\n    for (const [requestId, request] of this._requestIdToRequest) {\n      if (request.request === navigationRequest) {\n        // Make sure the request completes if the provisional navigation is canceled.\n        this._onLoadingFailed(provisionalPage._session, {\n          requestId: requestId,\n          errorText: 'Provisiolal navigation canceled.',\n          timestamp: request._timestamp,\n          canceled: true,\n        });\n        return;\n      }\n    }\n  }\n\n  _adoptRequestFromNewProcess(navigationRequest: network.Request, newSession: WKSession, newRequestId: string) {\n    for (const [requestId, request] of this._requestIdToRequest) {\n      if (request.request === navigationRequest) {\n        this._requestIdToRequest.delete(requestId);\n        request.adoptRequestFromNewProcess(newSession, newRequestId);\n        this._requestIdToRequest.set(newRequestId, request);\n        return;\n      }\n    }\n  }\n\n  _onRequestWillBeSent(session: WKSession, event: Protocol.Network.requestWillBeSentPayload) {\n    if (event.request.url.startsWith('data:'))\n      return;\n    // WebKit started dispatching network events for about:blank after https://commits.webkit.org/292206@main.\n    if (event.request.url.startsWith('about:'))\n      return;\n\n    // We do not support intercepting redirects.\n    if (this._page.needsRequestInterception() && !event.redirectResponse)\n      this._requestIdToRequestWillBeSentEvent.set(event.requestId, event);\n    else\n      this._onRequest(session, event, false);\n  }\n\n  private _onRequest(session: WKSession, event: Protocol.Network.requestWillBeSentPayload, intercepted: boolean) {\n    let redirectedFrom: WKInterceptableRequest | null = null;\n    if (event.redirectResponse) {\n      const request = this._requestIdToRequest.get(event.requestId);\n      // If we connect late to the target, we could have missed the requestWillBeSent event.\n      if (request) {\n        this._handleRequestRedirect(request, event.requestId, event.redirectResponse, event.timestamp);\n        redirectedFrom = request;\n      }\n    }\n    const frame = redirectedFrom ? redirectedFrom.request.frame() : this._page.frameManager.frame(event.frameId);\n    // sometimes we get stray network events for detached frames\n    // TODO(einbinder) why?\n    if (!frame)\n      return;\n\n    // TODO(einbinder) this will fail if we are an XHR document request\n    const isNavigationRequest = event.type === 'Document';\n    const documentId = isNavigationRequest ? event.loaderId : undefined;\n    const request = new WKInterceptableRequest(session, frame, event, redirectedFrom, documentId);\n    let route;\n    if (intercepted) {\n      route = new WKRouteImpl(session, event.requestId);\n      // There is no point in waiting for the raw headers in Network.responseReceived when intercepting.\n      // Use provisional headers as raw headers, so that client can call allHeaders() from the route handler.\n      request.request.setRawRequestHeaders(null);\n    }\n    this._requestIdToRequest.set(event.requestId, request);\n    this._page.frameManager.requestStarted(request.request, route);\n  }\n\n  private _handleRequestRedirect(request: WKInterceptableRequest, requestId: string, responsePayload: Protocol.Network.Response, timestamp: number) {\n    const response = request.createResponse(responsePayload);\n    response._securityDetailsFinished();\n    response._serverAddrFinished();\n    response.setResponseHeadersSize(null);\n    response.setEncodedBodySize(null);\n    response._requestFinished(responsePayload.timing ? helper.secondsToRoundishMillis(timestamp - request._timestamp) : -1);\n    this._requestIdToRequest.delete(requestId);\n    this._page.frameManager.requestReceivedResponse(response);\n    this._page.frameManager.reportRequestFinished(request.request, response);\n  }\n\n  _onRequestIntercepted(session: WKSession, event: Protocol.Network.requestInterceptedPayload) {\n    const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(event.requestId);\n    if (!requestWillBeSentEvent) {\n      // Intercepted, although we do not intend to allow interception.\n      // Just continue.\n      session.sendMayFail('Network.interceptWithRequest', { requestId: event.requestId });\n      return;\n    }\n    this._requestIdToRequestWillBeSentEvent.delete(event.requestId);\n    this._onRequest(session, requestWillBeSentEvent, true);\n  }\n\n  _onResponseReceived(session: WKSession, event: Protocol.Network.responseReceivedPayload) {\n    const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(event.requestId);\n    if (requestWillBeSentEvent) {\n      this._requestIdToRequestWillBeSentEvent.delete(event.requestId);\n      // We received a response, so the request won't be intercepted (e.g. it was handled by a\n      // service worker and we don't intercept service workers).\n      this._onRequest(session, requestWillBeSentEvent, false);\n    }\n    const request = this._requestIdToRequest.get(event.requestId);\n    // FileUpload sends a response without a matching request.\n    if (!request)\n      return;\n\n    this._requestIdToResponseReceivedPayloadEvent.set(event.requestId, event);\n    const response = request.createResponse(event.response);\n    this._page.frameManager.requestReceivedResponse(response);\n\n    if (response.status() === 204 && request.request.isNavigationRequest()) {\n      this._onLoadingFailed(session, {\n        requestId: event.requestId,\n        errorText: 'Aborted: 204 No Content',\n        timestamp: event.timestamp\n      });\n    }\n  }\n\n  _onLoadingFinished(event: Protocol.Network.loadingFinishedPayload) {\n    const request = this._requestIdToRequest.get(event.requestId);\n    // For certain requestIds we never receive requestWillBeSent event.\n    // @see https://crbug.com/750469\n    if (!request)\n      return;\n\n    // Under certain conditions we never get the Network.responseReceived\n    // event from protocol. @see https://crbug.com/883475\n    const response = request.request._existingResponse();\n    if (response) {\n      const responseReceivedPayload = this._requestIdToResponseReceivedPayloadEvent.get(event.requestId);\n      response._serverAddrFinished(parseRemoteAddress(event?.metrics?.remoteAddress));\n      response._securityDetailsFinished({\n        protocol: isLoadedSecurely(response.url(), response.timing()) ? event.metrics?.securityConnection?.protocol : undefined,\n        subjectName: responseReceivedPayload?.response.security?.certificate?.subject,\n        validFrom: responseReceivedPayload?.response.security?.certificate?.validFrom,\n        validTo: responseReceivedPayload?.response.security?.certificate?.validUntil,\n      });\n      if (event.metrics?.protocol)\n        response._setHttpVersion(event.metrics.protocol);\n      response.setEncodedBodySize(event.metrics?.responseBodyBytesReceived ?? null);\n      response.setResponseHeadersSize(event.metrics?.responseHeaderBytesReceived ?? null);\n\n      response._requestFinished(helper.secondsToRoundishMillis(event.timestamp - request._timestamp));\n    } else {\n      // Use provisional headers if we didn't have the response with raw headers.\n      request.request.setRawRequestHeaders(null);\n    }\n\n    this._requestIdToResponseReceivedPayloadEvent.delete(event.requestId);\n    this._requestIdToRequest.delete(event.requestId);\n    this._page.frameManager.reportRequestFinished(request.request, response);\n  }\n\n  _onLoadingFailed(session: WKSession, event: Protocol.Network.loadingFailedPayload) {\n    const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(event.requestId);\n    if (requestWillBeSentEvent) {\n      this._requestIdToRequestWillBeSentEvent.delete(event.requestId);\n      // If loading failed, the request won't be intercepted (e.g. it was handled by a\n      // service worker and we don't intercept service workers).\n      this._onRequest(session, requestWillBeSentEvent, false);\n    }\n\n    const request = this._requestIdToRequest.get(event.requestId);\n    // For certain requestIds we never receive requestWillBeSent event.\n    // @see https://crbug.com/750469\n    if (!request)\n      return;\n\n    const response = request.request._existingResponse();\n    if (response) {\n      response._serverAddrFinished();\n      response._securityDetailsFinished();\n      response.setResponseHeadersSize(null);\n      response.setEncodedBodySize(null);\n      response._requestFinished(helper.secondsToRoundishMillis(event.timestamp - request._timestamp));\n    } else {\n      // Use provisional headers if we didn't have the response with raw headers.\n      request.request.setRawRequestHeaders(null);\n    }\n    this._requestIdToRequest.delete(event.requestId);\n    request.request._setFailureText(event.errorText);\n    this._page.frameManager.requestFailed(request.request, event.errorText.includes('cancelled'));\n  }\n\n  async _grantPermissions(origin: string, permissions: string[]) {\n    const webPermissionToProtocol = new Map<string, string>([\n      ['geolocation', 'geolocation'],\n      ['notifications', 'notifications'],\n      ['clipboard-read', 'clipboard-read'],\n    ]);\n    const filtered = permissions.map(permission => {\n      const protocolPermission = webPermissionToProtocol.get(permission);\n      if (!protocolPermission)\n        throw new Error('Unknown permission: ' + permission);\n      return protocolPermission;\n    });\n    await this._pageProxySession.send('Emulation.grantPermissions', { origin, permissions: filtered });\n  }\n\n  async _clearPermissions() {\n    await this._pageProxySession.send('Emulation.resetPermissions', {});\n  }\n\n  shouldToggleStyleSheetToSyncAnimations(): boolean {\n    return true;\n  }\n}\n\n/**\n * WebKit Remote Addresses look like:\n *\n * macOS:\n * ::1.8911\n * 2606:2800:220:1:248:1893:25c8:1946.443\n * 127.0.0.1:8000\n *\n * ubuntu:\n * ::1:8907\n * 127.0.0.1:8000\n *\n * NB: They look IPv4 and IPv6's with ports but use an alternative notation.\n */\nfunction parseRemoteAddress(value?: string) {\n  if (!value)\n    return;\n\n  try {\n    const colon = value.lastIndexOf(':');\n    const dot = value.lastIndexOf('.');\n    if (dot < 0) { // IPv6ish:port\n      return {\n        ipAddress: `[${value.slice(0, colon)}]`,\n        port: +value.slice(colon + 1)\n      };\n    }\n\n    if (colon > dot) { // IPv4:port\n      const [address, port] = value.split(':');\n      return {\n        ipAddress: address,\n        port: +port,\n      };\n    } else { // IPv6ish.port\n      const [address, port] = value.split('.');\n      return {\n        ipAddress: `[${address}]`,\n        port: +port,\n      };\n    }\n  } catch (_) {}\n}\n\n\n/**\n * Adapted from Source/WebInspectorUI/UserInterface/Models/Resource.js in\n * WebKit codebase.\n */\nfunction isLoadedSecurely(url: string, timing: network.ResourceTiming) {\n  try {\n    const u = new URL(url);\n    if (u.protocol !== 'https:' && u.protocol !== 'wss:' && u.protocol !== 'sftp:')\n      return false;\n    if (timing.secureConnectionStart === -1 && timing.connectStart !== -1)\n      return false;\n    return true;\n  } catch (_) {}\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '../../utils';\nimport { Browser } from '../browser';\nimport { BrowserContext, verifyGeolocation } from '../browserContext';\nimport * as network from '../network';\nimport { WKConnection, WKSession, kPageProxyMessageReceived } from './wkConnection';\nimport { WKPage } from './wkPage';\nimport { TargetClosedError } from '../errors';\n\nimport type { BrowserOptions } from '../browser';\nimport type { SdkObject } from '../instrumentation';\nimport type { InitScript, Page } from '../page';\nimport type { ConnectionTransport } from '../transport';\nimport type * as types from '../types';\nimport type { Protocol } from './protocol';\nimport type { PageProxyMessageReceivedPayload } from './wkConnection';\nimport type * as channels from '@protocol/channels';\n\nconst BROWSER_VERSION = '18.5';\nconst DEFAULT_USER_AGENT = `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/${BROWSER_VERSION} Safari/605.1.15`;\n\nexport class WKBrowser extends Browser {\n  private readonly _connection: WKConnection;\n  readonly _browserSession: WKSession;\n  readonly _contexts = new Map<string, WKBrowserContext>();\n  readonly _wkPages = new Map<string, WKPage>();\n\n  static async connect(parent: SdkObject, transport: ConnectionTransport, options: BrowserOptions): Promise<WKBrowser> {\n    const browser = new WKBrowser(parent, transport, options);\n    if ((options as any).__testHookOnConnectToBrowser)\n      await (options as any).__testHookOnConnectToBrowser();\n    const promises: Promise<any>[] = [\n      browser._browserSession.send('Playwright.enable'),\n    ];\n    if (options.persistent) {\n      options.persistent.userAgent ||= DEFAULT_USER_AGENT;\n      browser._defaultContext = new WKBrowserContext(browser, undefined, options.persistent);\n      promises.push((browser._defaultContext as WKBrowserContext)._initialize());\n    }\n    await Promise.all(promises);\n    return browser;\n  }\n\n  constructor(parent: SdkObject, transport: ConnectionTransport, options: BrowserOptions) {\n    super(parent, options);\n    this._connection = new WKConnection(transport, this._onDisconnect.bind(this), options.protocolLogger, options.browserLogsCollector);\n    this._browserSession = this._connection.browserSession;\n    this._browserSession.on('Playwright.pageProxyCreated', this._onPageProxyCreated.bind(this));\n    this._browserSession.on('Playwright.pageProxyDestroyed', this._onPageProxyDestroyed.bind(this));\n    this._browserSession.on('Playwright.provisionalLoadFailed', event => this._onProvisionalLoadFailed(event));\n    this._browserSession.on('Playwright.windowOpen', event => this._onWindowOpen(event));\n    this._browserSession.on('Playwright.downloadCreated', this._onDownloadCreated.bind(this));\n    this._browserSession.on('Playwright.downloadFilenameSuggested', this._onDownloadFilenameSuggested.bind(this));\n    this._browserSession.on('Playwright.downloadFinished', this._onDownloadFinished.bind(this));\n    this._browserSession.on('Playwright.screencastFinished', this._onScreencastFinished.bind(this));\n    this._browserSession.on(kPageProxyMessageReceived, this._onPageProxyMessageReceived.bind(this));\n  }\n\n  _onDisconnect() {\n    for (const wkPage of this._wkPages.values())\n      wkPage.didClose();\n    this._wkPages.clear();\n    for (const video of this._idToVideo.values())\n      video.artifact.reportFinished(new TargetClosedError());\n    this._idToVideo.clear();\n    this._didClose();\n  }\n\n  async doCreateNewContext(options: types.BrowserContextOptions): Promise<BrowserContext> {\n    const proxy = options.proxyOverride || options.proxy;\n    const createOptions = proxy ? {\n      // Enable socks5 hostname resolution on Windows.\n      // See https://github.com/microsoft/playwright/issues/20451\n      proxyServer: process.platform === 'win32' ? proxy.server.replace(/^socks5:\\/\\//, 'socks5h://') : proxy.server,\n      proxyBypassList: proxy.bypass\n    } : undefined;\n    const { browserContextId } = await this._browserSession.send('Playwright.createContext', createOptions);\n    options.userAgent = options.userAgent || DEFAULT_USER_AGENT;\n    const context = new WKBrowserContext(this, browserContextId, options);\n    await context._initialize();\n    this._contexts.set(browserContextId, context);\n    return context;\n  }\n\n  contexts(): BrowserContext[] {\n    return Array.from(this._contexts.values());\n  }\n\n  version(): string {\n    return BROWSER_VERSION;\n  }\n\n  userAgent(): string {\n    return DEFAULT_USER_AGENT;\n  }\n\n  _onDownloadCreated(payload: Protocol.Playwright.downloadCreatedPayload) {\n    const page = this._wkPages.get(payload.pageProxyId);\n    if (!page)\n      return;\n    // In some cases, e.g. blob url download, we receive only frameScheduledNavigation\n    // but no signals that the navigation was canceled and replaced by download. Fix it\n    // here by simulating cancelled provisional load which matches downloads from network.\n    //\n    // TODO: this is racy, because download might be unrelated any navigation, and we will\n    // abort navigation that is still running. We should be able to fix this by\n    // instrumenting policy decision start/proceed/cancel.\n    page._page.frameManager.frameAbortedNavigation(payload.frameId, 'Download is starting');\n    let originPage = page._page.initializedOrUndefined();\n    // If it's a new window download, report it on the opener page.\n    if (!originPage) {\n      // Resume the page creation with an error. The page will automatically close right\n      // after the download begins.\n      page._firstNonInitialNavigationCommittedReject(new Error('Starting new page download'));\n      if (page._opener)\n        originPage = page._opener._page.initializedOrUndefined();\n    }\n    if (!originPage)\n      return;\n    this._downloadCreated(originPage, payload.uuid, payload.url);\n  }\n\n  _onDownloadFilenameSuggested(payload: Protocol.Playwright.downloadFilenameSuggestedPayload) {\n    this._downloadFilenameSuggested(payload.uuid, payload.suggestedFilename);\n  }\n\n  _onDownloadFinished(payload: Protocol.Playwright.downloadFinishedPayload) {\n    this._downloadFinished(payload.uuid, payload.error);\n  }\n\n  _onScreencastFinished(payload: Protocol.Playwright.screencastFinishedPayload) {\n    this._takeVideo(payload.screencastId)?.reportFinished();\n  }\n\n  _onPageProxyCreated(event: Protocol.Playwright.pageProxyCreatedPayload) {\n    const pageProxyId = event.pageProxyId;\n    let context: WKBrowserContext | null = null;\n    if (event.browserContextId) {\n      // FIXME: we don't know about the default context id, so assume that all targets from\n      // unknown contexts are created in the 'default' context which can in practice be represented\n      // by multiple actual contexts in WebKit. Solving this properly will require adding context\n      // lifecycle events.\n      context = this._contexts.get(event.browserContextId) || null;\n    }\n    if (!context)\n      context = this._defaultContext as WKBrowserContext;\n    if (!context)\n      return;\n    const pageProxySession = new WKSession(this._connection, pageProxyId, (message: any) => {\n      this._connection.rawSend({ ...message, pageProxyId });\n    });\n    const opener = event.openerId ? this._wkPages.get(event.openerId) : undefined;\n    const wkPage = new WKPage(context, pageProxySession, opener || null);\n    this._wkPages.set(pageProxyId, wkPage);\n  }\n\n  _onPageProxyDestroyed(event: Protocol.Playwright.pageProxyDestroyedPayload) {\n    const pageProxyId = event.pageProxyId;\n    const wkPage = this._wkPages.get(pageProxyId);\n    if (!wkPage)\n      return;\n    wkPage.didClose();\n    this._wkPages.delete(pageProxyId);\n  }\n\n  _onPageProxyMessageReceived(event: PageProxyMessageReceivedPayload) {\n    const wkPage = this._wkPages.get(event.pageProxyId);\n    if (!wkPage)\n      return;\n    wkPage.dispatchMessageToSession(event.message);\n  }\n\n  _onProvisionalLoadFailed(event: Protocol.Playwright.provisionalLoadFailedPayload) {\n    const wkPage = this._wkPages.get(event.pageProxyId);\n    if (!wkPage)\n      return;\n    wkPage.handleProvisionalLoadFailed(event);\n  }\n\n  _onWindowOpen(event: Protocol.Playwright.windowOpenPayload) {\n    const wkPage = this._wkPages.get(event.pageProxyId);\n    if (!wkPage)\n      return;\n    wkPage.handleWindowOpen(event);\n  }\n\n  isConnected(): boolean {\n    return !this._connection.isClosed();\n  }\n}\n\nexport class WKBrowserContext extends BrowserContext {\n  declare readonly _browser: WKBrowser;\n\n  constructor(browser: WKBrowser, browserContextId: string | undefined, options: types.BrowserContextOptions) {\n    super(browser, options, browserContextId);\n    this._validateEmulatedViewport(options.viewport);\n    this._authenticateProxyViaHeader();\n  }\n\n  override async _initialize() {\n    assert(!this._wkPages().length);\n    const browserContextId = this._browserContextId;\n    const promises: Promise<any>[] = [super._initialize()];\n    promises.push(this._browser._browserSession.send('Playwright.setDownloadBehavior', {\n      behavior: this._options.acceptDownloads === 'accept' ? 'allow' : 'deny',\n      downloadPath: this._browser.options.downloadsPath,\n      browserContextId\n    }));\n    if (this._options.ignoreHTTPSErrors || this._options.internalIgnoreHTTPSErrors)\n      promises.push(this._browser._browserSession.send('Playwright.setIgnoreCertificateErrors', { browserContextId, ignore: true }));\n    if (this._options.locale)\n      promises.push(this._browser._browserSession.send('Playwright.setLanguages', { browserContextId, languages: [this._options.locale] }));\n    if (this._options.geolocation)\n      promises.push(this.setGeolocation(this._options.geolocation));\n    if (this._options.offline)\n      promises.push(this.setOffline(this._options.offline));\n    if (this._options.httpCredentials)\n      promises.push(this.setHTTPCredentials(this._options.httpCredentials));\n    await Promise.all(promises);\n  }\n\n  _wkPages(): WKPage[] {\n    return Array.from(this._browser._wkPages.values()).filter(wkPage => wkPage._browserContext === this);\n  }\n\n  override possiblyUninitializedPages(): Page[] {\n    return this._wkPages().map(wkPage => wkPage._page);\n  }\n\n  override async doCreateNewPage(markAsServerSideOnly?: boolean): Promise<Page> {\n    const { pageProxyId } = await this._browser._browserSession.send('Playwright.createPage', { browserContextId: this._browserContextId });\n    const page = this._browser._wkPages.get(pageProxyId)!._page;\n    if (markAsServerSideOnly)\n      page.markAsServerSideOnly();\n    return page;\n  }\n\n  async doGetCookies(urls: string[]): Promise<channels.NetworkCookie[]> {\n    const { cookies } = await this._browser._browserSession.send('Playwright.getAllCookies', { browserContextId: this._browserContextId });\n    return network.filterCookies(cookies.map((c: channels.NetworkCookie) => {\n      const copy: any = { ... c };\n      copy.expires = c.expires === -1 ? -1 : c.expires / 1000;\n      delete copy.session;\n      return copy as channels.NetworkCookie;\n    }), urls);\n  }\n\n  async addCookies(cookies: channels.SetNetworkCookie[]) {\n    const cc = network.rewriteCookies(cookies).map(c => ({\n      ...c,\n      session: c.expires === -1 || c.expires === undefined,\n      expires: c.expires && c.expires !== -1 ? c.expires * 1000 : c.expires,\n    })) as Protocol.Playwright.SetCookieParam[];\n    await this._browser._browserSession.send('Playwright.setCookies', { cookies: cc, browserContextId: this._browserContextId });\n  }\n\n  async doClearCookies() {\n    await this._browser._browserSession.send('Playwright.deleteAllCookies', { browserContextId: this._browserContextId });\n  }\n\n  async doGrantPermissions(origin: string, permissions: string[]) {\n    await Promise.all(this.pages().map(page => (page.delegate as WKPage)._grantPermissions(origin, permissions)));\n  }\n\n  async doClearPermissions() {\n    await Promise.all(this.pages().map(page => (page.delegate as WKPage)._clearPermissions()));\n  }\n\n  async setGeolocation(geolocation?: types.Geolocation): Promise<void> {\n    verifyGeolocation(geolocation);\n    this._options.geolocation = geolocation;\n    const payload: any = geolocation ? { ...geolocation, timestamp: Date.now() } : undefined;\n    await this._browser._browserSession.send('Playwright.setGeolocationOverride', { browserContextId: this._browserContextId, geolocation: payload });\n  }\n\n  async setExtraHTTPHeaders(headers: types.HeadersArray): Promise<void> {\n    this._options.extraHTTPHeaders = headers;\n    for (const page of this.pages())\n      await (page.delegate as WKPage).updateExtraHTTPHeaders();\n  }\n\n  async setUserAgent(userAgent: string | undefined): Promise<void> {\n    this._options.userAgent = userAgent;\n    for (const page of this.pages())\n      await (page.delegate as WKPage).updateUserAgent();\n  }\n\n  async setOffline(offline: boolean): Promise<void> {\n    this._options.offline = offline;\n    for (const page of this.pages())\n      await (page.delegate as WKPage).updateOffline();\n  }\n\n  async doSetHTTPCredentials(httpCredentials?: types.Credentials): Promise<void> {\n    this._options.httpCredentials = httpCredentials;\n    for (const page of this.pages())\n      await (page.delegate as WKPage).updateHttpCredentials();\n  }\n\n  async doAddInitScript(initScript: InitScript) {\n    for (const page of this.pages())\n      await (page.delegate as WKPage)._updateBootstrapScript();\n  }\n\n  async doRemoveInitScripts(initScripts: InitScript[]) {\n    for (const page of this.pages())\n      await (page.delegate as WKPage)._updateBootstrapScript();\n  }\n\n  async doUpdateRequestInterception(): Promise<void> {\n    for (const page of this.pages())\n      await (page.delegate as WKPage).updateRequestInterception();\n  }\n\n  override async doExposePlaywrightBinding() {\n    for (const page of this.pages())\n      await (page.delegate as WKPage).exposePlaywrightBinding();\n  }\n\n  onClosePersistent() {}\n\n  override async clearCache(): Promise<void> {\n    // We use ephemeral contexts so there is no disk cache.\n    await this._browser._browserSession.send('Playwright.clearMemoryCache', {\n      browserContextId: this._browserContextId!\n    });\n  }\n\n  async doClose(reason: string | undefined) {\n    if (!this._browserContextId) {\n      await Promise.all(this._wkPages().map(wkPage => wkPage._stopVideo()));\n      // Closing persistent context should close the browser.\n      await this._browser.close({ reason });\n    } else {\n      await this._browser._browserSession.send('Playwright.deleteContext', { browserContextId: this._browserContextId });\n      this._browser._contexts.delete(this._browserContextId);\n    }\n  }\n\n  async cancelDownload(uuid: string) {\n    await this._browser._browserSession.send('Playwright.cancelDownload', { uuid });\n  }\n\n  _validateEmulatedViewport(viewportSize: types.Size | undefined) {\n    if (!viewportSize)\n      return;\n    if (process.platform === 'win32' && this._browser.options.headful && (viewportSize.width < 250 || viewportSize.height < 240))\n      throw new Error(`WebKit on Windows has a minimal viewport of 250x240.`);\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport path from 'path';\n\nimport { kBrowserCloseMessageId } from './wkConnection';\nimport { wrapInASCIIBox } from '../utils/ascii';\nimport { BrowserType, kNoXServerRunningError } from '../browserType';\nimport { WKBrowser } from '../webkit/wkBrowser';\n\nimport type { BrowserOptions } from '../browser';\nimport type { SdkObject } from '../instrumentation';\nimport type { Env } from '../utils/processLauncher';\nimport type { ProtocolError } from '../protocolError';\nimport type { ConnectionTransport } from '../transport';\nimport type * as types from '../types';\n\nexport class WebKit extends BrowserType {\n  constructor(parent: SdkObject) {\n    super(parent, 'webkit');\n  }\n\n  override connectToTransport(transport: ConnectionTransport, options: BrowserOptions): Promise<WKBrowser> {\n    return WKBrowser.connect(this.attribution.playwright, transport, options);\n  }\n\n  override amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env {\n    return { ...env, CURL_COOKIE_JAR_PATH: path.join(userDataDir, 'cookiejar.db') };\n  }\n\n  override doRewriteStartupLog(error: ProtocolError): ProtocolError {\n    if (!error.logs)\n      return error;\n    if (error.logs.includes('Failed to open display') || error.logs.includes('cannot open display'))\n      error.logs = '\\n' + wrapInASCIIBox(kNoXServerRunningError, 1);\n    return error;\n  }\n\n  override attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void {\n    transport.send({ method: 'Playwright.close', params: {}, id: kBrowserCloseMessageId });\n  }\n\n  override defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[] {\n    const { args = [], headless } = options;\n    const userDataDirArg = args.find(arg => arg.startsWith('--user-data-dir'));\n    if (userDataDirArg)\n      throw this._createUserDataDirArgMisuseError('--user-data-dir');\n    if (args.find(arg => !arg.startsWith('-')))\n      throw new Error('Arguments can not specify page to be opened');\n    const webkitArguments = ['--inspector-pipe'];\n    if (process.platform === 'win32')\n      webkitArguments.push('--disable-accelerated-compositing');\n    if (headless)\n      webkitArguments.push('--headless');\n    if (isPersistent)\n      webkitArguments.push(`--user-data-dir=${userDataDir}`);\n    else\n      webkitArguments.push(`--no-startup-window`);\n    const proxy = options.proxyOverride || options.proxy;\n    if (proxy) {\n      if (process.platform === 'darwin') {\n        webkitArguments.push(`--proxy=${proxy.server}`);\n        if (proxy.bypass)\n          webkitArguments.push(`--proxy-bypass-list=${proxy.bypass}`);\n      } else if (process.platform === 'linux') {\n        webkitArguments.push(`--proxy=${proxy.server}`);\n        if (proxy.bypass)\n          webkitArguments.push(...proxy.bypass.split(',').map(t => `--ignore-host=${t}`));\n      } else if (process.platform === 'win32') {\n        // Enable socks5 hostname resolution on Windows. Workaround can be removed once fixed upstream.\n        // See https://github.com/microsoft/playwright/issues/20451\n        webkitArguments.push(`--curl-proxy=${proxy.server.replace(/^socks5:\\/\\//, 'socks5h://')}`);\n        if (proxy.bypass)\n          webkitArguments.push(`--curl-noproxy=${proxy.bypass}`);\n      }\n    }\n    webkitArguments.push(...args);\n    if (isPersistent)\n      webkitArguments.push('about:blank');\n    return webkitArguments;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { debugLogger  } from '../utils';\nimport { Android } from './android/android';\nimport { AdbBackend } from './android/backendAdb';\nimport { BidiChromium } from './bidi/bidiChromium';\nimport { BidiFirefox } from './bidi/bidiFirefox';\nimport { Chromium } from './chromium/chromium';\nimport { DebugController } from './debugController';\nimport { Electron } from './electron/electron';\nimport { Firefox } from './firefox/firefox';\nimport { SdkObject, createInstrumentation } from './instrumentation';\nimport { WebKit } from './webkit/webkit';\n\nimport type { BrowserType } from './browserType';\nimport type { Language } from '../utils';\nimport type { Browser } from './browser';\nimport type { CallMetadata } from './instrumentation';\nimport type { Page } from './page';\n\ntype PlaywrightOptions = {\n  socksProxyPort?: number;\n  sdkLanguage: Language;\n  isInternalPlaywright?: boolean;\n  isServer?: boolean;\n};\n\nexport class Playwright extends SdkObject {\n  readonly chromium: BrowserType;\n  readonly android: Android;\n  readonly electron: Electron;\n  readonly firefox: BrowserType;\n  readonly webkit: BrowserType;\n  readonly bidiChromium: BrowserType;\n  readonly bidiFirefox: BrowserType;\n  readonly options: PlaywrightOptions;\n  readonly debugController: DebugController;\n  private _allPages = new Set<Page>();\n  private _allBrowsers = new Set<Browser>();\n\n  constructor(options: PlaywrightOptions) {\n    super({ attribution: {}, instrumentation: createInstrumentation() } as any, undefined, 'Playwright');\n    this.options = options;\n    this.attribution.playwright = this;\n    this.instrumentation.addListener({\n      onBrowserOpen: browser => this._allBrowsers.add(browser),\n      onBrowserClose: browser => this._allBrowsers.delete(browser),\n      onPageOpen: page => this._allPages.add(page),\n      onPageClose: page => this._allPages.delete(page),\n      onCallLog: (sdkObject: SdkObject, metadata: CallMetadata, logName: string, message: string) => {\n        debugLogger.log(logName as any, message);\n      }\n    }, null);\n    this.chromium = new Chromium(this);\n    this.bidiChromium = new BidiChromium(this);\n    this.bidiFirefox = new BidiFirefox(this);\n    this.firefox = new Firefox(this);\n    this.webkit = new WebKit(this);\n    this.electron = new Electron(this);\n    this.android = new Android(this, new AdbBackend());\n    this.debugController = new DebugController(this);\n  }\n\n  async hideHighlight() {\n    await Promise.all([...this._allPages].map(p => p.hideHighlight().catch(() => {})));\n  }\n\n  allBrowsers(): Browser[] {\n    return [...this._allBrowsers];\n  }\n\n  allPages(): Page[] {\n    return [...this._allPages];\n  }\n}\n\nexport function createPlaywright(options: PlaywrightOptions) {\n  return new Playwright(options);\n}\n","/**\n * Copyright Joyent, Inc. and other Node contributors.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to permit\n * persons to whom the Software is furnished to do so, subject to the\n * following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n * USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport type { EventEmitter as EventEmitterType } from 'events';\nimport type { Platform } from './platform';\n\ntype EventType = string | symbol;\ntype Listener = (...args: any[]) => any;\ntype EventMap = Record<EventType, Listener | Listener[]>;\n\nexport class EventEmitter implements EventEmitterType {\n\n  private _events: EventMap | undefined = undefined;\n  private _eventsCount = 0;\n  private _maxListeners: number | undefined = undefined;\n  readonly _pendingHandlers = new Map<EventType, Set<Promise<void>>>();\n  private _rejectionHandler: ((error: Error) => void) | undefined;\n  readonly _platform: Platform;\n\n  constructor(platform: Platform) {\n    this._platform = platform;\n    if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {\n      this._events = Object.create(null);\n      this._eventsCount = 0;\n    }\n    this._maxListeners = this._maxListeners || undefined;\n    this.on = this.addListener;\n    this.off = this.removeListener;\n  }\n\n  setMaxListeners(n: number): this {\n    if (typeof n !== 'number' || n < 0 || Number.isNaN(n))\n      throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n    this._maxListeners = n;\n    return this;\n  }\n\n  getMaxListeners(): number {\n    return this._maxListeners === undefined ? this._platform.defaultMaxListeners() : this._maxListeners;\n  }\n\n  emit(type: EventType, ...args: any[]): boolean {\n    const events = this._events;\n    if (events === undefined)\n      return false;\n\n    const handler = events?.[type];\n    if (handler === undefined)\n      return false;\n\n    if (typeof handler === 'function') {\n      this._callHandler(type, handler, args);\n    } else {\n      const len = handler.length;\n      const listeners = handler.slice();\n      for (let i = 0; i < len; ++i)\n        this._callHandler(type, listeners[i], args);\n    }\n    return true;\n  }\n\n  private _callHandler(type: EventType, handler: Listener, args: any[]): void {\n    const promise = Reflect.apply(handler, this, args);\n    if (!(promise instanceof Promise))\n      return;\n    let set = this._pendingHandlers.get(type);\n    if (!set) {\n      set = new Set();\n      this._pendingHandlers.set(type, set);\n    }\n    set.add(promise);\n    promise.catch(e => {\n      if (this._rejectionHandler)\n        this._rejectionHandler(e);\n      else\n        throw e;\n    }).finally(() => set.delete(promise));\n  }\n\n  addListener(type: EventType, listener: Listener): this {\n    return this._addListener(type, listener, false);\n  }\n\n  on(type: EventType, listener: Listener): this {\n    return this._addListener(type, listener, false);\n  }\n\n  private _addListener(type: EventType, listener: Listener, prepend: boolean): this {\n    checkListener(listener);\n    let events = this._events;\n    let existing;\n    if (events === undefined) {\n      events = this._events = Object.create(null);\n      this._eventsCount = 0;\n    } else {\n      // To avoid recursion in the case that type === \"newListener\"! Before\n      // adding it to the listeners, first emit \"newListener\".\n      if (events.newListener !== undefined) {\n        this.emit('newListener', type, unwrapListener(listener));\n\n        // Re-assign `events` because a newListener handler could have caused the\n        // this._events to be assigned to a new object\n        events = this._events!;\n      }\n      existing = events[type];\n    }\n\n    if (existing === undefined) {\n      // Optimize the case of one listener. Don't need the extra array object.\n      existing = events![type] = listener;\n      ++this._eventsCount;\n    } else {\n      if (typeof existing === 'function') {\n        // Adding the second element, need to change to array.\n        existing = events![type] =\n          prepend ? [listener, existing] : [existing, listener];\n        // If we've already got an array, just append.\n      } else if (prepend) {\n        existing.unshift(listener);\n      } else {\n        existing.push(listener);\n      }\n\n      // Check for listener leak\n      const m = this.getMaxListeners();\n      if (m > 0 && existing.length > m && !(existing as any).warned) {\n        (existing as any).warned = true;\n        // No error code for this since it is a Warning\n        const w = new Error('Possible EventEmitter memory leak detected. ' +\n                            existing.length + ' ' + String(type) + ' listeners ' +\n                            'added. Use emitter.setMaxListeners() to ' +\n                            'increase limit') as any;\n        w.name = 'MaxListenersExceededWarning';\n        w.emitter = this;\n        w.type = type;\n        w.count = existing.length;\n        if (!this._platform.isUnderTest()) {\n          // eslint-disable-next-line no-console\n          console.warn(w);\n        }\n      }\n    }\n\n    return this;\n  }\n\n  prependListener(type: EventType, listener: Listener): this {\n    return this._addListener(type, listener, true);\n  }\n\n  once(type: EventType, listener: Listener): this {\n    checkListener(listener);\n    this.on(type, new OnceWrapper(this, type, listener).wrapperFunction);\n    return this;\n  }\n\n  prependOnceListener(type: EventType, listener: Listener): this {\n    checkListener(listener);\n    this.prependListener(type, new OnceWrapper(this, type, listener).wrapperFunction);\n    return this;\n  }\n\n  removeListener(type: EventType, listener: Listener): this {\n    checkListener(listener);\n\n    const events = this._events;\n    if (events === undefined)\n      return this;\n\n    const list = events[type];\n    if (list === undefined)\n      return this;\n\n    if (list === listener || (list as any).listener === listener) {\n      if (--this._eventsCount === 0) {\n        this._events = Object.create(null);\n      } else {\n        delete events[type];\n        if (events.removeListener)\n          this.emit('removeListener', type, (list as any).listener ?? listener);\n      }\n    } else if (typeof list !== 'function') {\n      let position = -1;\n      let originalListener;\n\n      for (let i = list.length - 1; i >= 0; i--) {\n        if (list[i] === listener || wrappedListener(list[i]) === listener) {\n          originalListener = wrappedListener(list[i]);\n          position = i;\n          break;\n        }\n      }\n\n      if (position < 0)\n        return this;\n\n      if (position === 0)\n        list.shift();\n      else\n        list.splice(position, 1);\n\n      if (list.length === 1)\n        events[type] = list[0];\n\n      if (events.removeListener !== undefined)\n        this.emit('removeListener', type, originalListener || listener);\n    }\n\n    return this;\n\n  }\n\n  off(type: EventType, listener: Listener): this {\n    return this.removeListener(type, listener);\n  }\n\n  removeAllListeners(type?: EventType): this;\n  removeAllListeners(type: EventType | undefined, options: { behavior?: 'wait'|'ignoreErrors'|'default' }): Promise<void>;\n  removeAllListeners(type?: string, options?: { behavior?: 'wait'|'ignoreErrors'|'default' }): this | Promise<void> {\n    this._removeAllListeners(type);\n    if (!options)\n      return this;\n\n    if (options.behavior === 'wait') {\n      const errors: Error[] = [];\n      this._rejectionHandler = error => errors.push(error);\n      return this._waitFor(type).then(() => {\n        if (errors.length)\n          throw errors[0];\n      });\n    }\n\n    if (options.behavior === 'ignoreErrors')\n      this._rejectionHandler = () => {};\n\n    return Promise.resolve();\n  }\n\n  private _removeAllListeners(type?: string) {\n    const events = this._events;\n    if (!events)\n      return;\n\n    // not listening for removeListener, no need to emit\n    if (!events.removeListener) {\n      if (type === undefined) {\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n      } else if (events[type] !== undefined) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else\n          delete events[type];\n      }\n      return;\n    }\n\n    // emit removeListener for all listeners on all events\n    if (type === undefined) {\n      const keys = Object.keys(events);\n      let key;\n      for (let i = 0; i < keys.length; ++i) {\n        key = keys[i];\n        if (key === 'removeListener')\n          continue;\n        this._removeAllListeners(key);\n      }\n      this._removeAllListeners('removeListener');\n      this._events = Object.create(null);\n      this._eventsCount = 0;\n      return;\n    }\n\n    const listeners = events[type];\n\n    if (typeof listeners === 'function') {\n      this.removeListener(type, listeners);\n    } else if (listeners !== undefined) {\n      // LIFO order\n      for (let i = listeners.length - 1; i >= 0; i--)\n        this.removeListener(type, listeners[i]);\n    }\n  }\n\n  listeners(type: EventType): Listener[] {\n    return this._listeners(this, type, true);\n  }\n\n  rawListeners(type: EventType): Listener[] {\n    return this._listeners(this, type, false);\n  }\n\n  listenerCount(type: EventType): number {\n    const events = this._events;\n    if (events !== undefined) {\n      const listener = events[type];\n      if (typeof listener === 'function')\n        return 1;\n      if (listener !== undefined)\n        return listener.length;\n    }\n    return 0;\n  }\n\n  eventNames(): Array<string | symbol> {\n    return this._eventsCount > 0 && this._events ? Reflect.ownKeys(this._events) : [];\n  }\n\n  private async _waitFor(type?: EventType) {\n    let promises: Promise<void>[] = [];\n    if (type) {\n      promises = [...(this._pendingHandlers.get(type) || [])];\n    } else {\n      promises = [];\n      for (const [, pending] of this._pendingHandlers)\n        promises.push(...pending);\n    }\n    await Promise.all(promises);\n  }\n\n  private _listeners(target: EventEmitter, type: EventType, unwrap: boolean): Listener[] {\n    const events = target._events;\n\n    if (events === undefined)\n      return [];\n\n    const listener = events[type];\n    if (listener === undefined)\n      return [];\n\n    if (typeof listener === 'function')\n      return unwrap ? [unwrapListener(listener)] : [listener];\n\n    return unwrap ? unwrapListeners(listener) : listener.slice();\n  }\n}\n\nfunction checkListener(listener: any) {\n  if (typeof listener !== 'function')\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n}\n\nclass OnceWrapper {\n  private _fired = false;\n  readonly wrapperFunction: (...args: any[]) => Promise<void> | void;\n  readonly _listener: Listener;\n  private _eventEmitter: EventEmitter;\n  private _eventType: EventType;\n\n  constructor(eventEmitter: EventEmitter, eventType: EventType, listener: Listener) {\n    this._eventEmitter = eventEmitter;\n    this._eventType = eventType;\n    this._listener = listener;\n    this.wrapperFunction = this._handle.bind(this);\n    (this.wrapperFunction as any).listener = listener;\n  }\n\n  private _handle(...args: any[]) {\n    if (this._fired)\n      return;\n    this._fired = true;\n    this._eventEmitter.removeListener(this._eventType, this.wrapperFunction);\n    return this._listener.apply(this._eventEmitter, args);\n  }\n}\n\nfunction unwrapListener(l: Listener): Listener {\n  return wrappedListener(l) ?? l;\n}\n\nfunction unwrapListeners(arr: Listener[]): Listener[] {\n  return arr.map(l => wrappedListener(l) ?? l);\n}\n\nfunction wrappedListener(l: Listener): Listener {\n  return (l as any).listener;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { captureRawStack, parseStackFrame } from '../utils/isomorphic/stackTrace';\n\nimport type { Platform } from './platform';\nimport type { StackFrame } from '@isomorphic/stackTrace';\n\nexport function captureLibraryStackTrace(platform: Platform): { frames: StackFrame[], apiName: string } {\n  const stack = captureRawStack();\n\n  type ParsedFrame = {\n    frame: StackFrame;\n    frameText: string;\n    isPlaywrightLibrary: boolean;\n  };\n  let parsedFrames = stack.map(line => {\n    const frame = parseStackFrame(line, platform.pathSeparator, platform.showInternalStackFrames());\n    if (!frame || !frame.file)\n      return null;\n    const isPlaywrightLibrary = !!platform.coreDir && frame.file.startsWith(platform.coreDir);\n    const parsed: ParsedFrame = {\n      frame,\n      frameText: line,\n      isPlaywrightLibrary\n    };\n    return parsed;\n  }).filter(Boolean) as ParsedFrame[];\n\n  let apiName = '';\n\n  // Deepest transition between non-client code calling into client\n  // code is the api entry.\n  for (let i = 0; i < parsedFrames.length - 1; i++) {\n    const parsedFrame = parsedFrames[i];\n    if (parsedFrame.isPlaywrightLibrary && !parsedFrames[i + 1].isPlaywrightLibrary) {\n      apiName = apiName || normalizeAPIName(parsedFrame.frame.function);\n      break;\n    }\n  }\n\n  function normalizeAPIName(name?: string): string {\n    if (!name)\n      return '';\n    const match = name.match(/(API|JS|CDP|[A-Z])(.*)/);\n    if (!match)\n      return name;\n    return match[1].toLowerCase() + match[2];\n  }\n\n  // This is for the inspector so that it did not include the test runner stack frames.\n  const filterPrefixes = platform.boxedStackPrefixes();\n  parsedFrames = parsedFrames.filter(f => {\n    if (filterPrefixes.some(prefix => f.frame.file.startsWith(prefix)))\n      return false;\n    return true;\n  });\n\n  return {\n    frames: parsedFrames.map(p => p.frame),\n    apiName\n  };\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from './eventEmitter';\nimport { ValidationError, maybeFindValidator  } from '../protocol/validator';\nimport { methodMetainfo } from '../utils/isomorphic/protocolMetainfo';\nimport { captureLibraryStackTrace } from './clientStackTrace';\nimport { stringifyStackFrames } from '../utils/isomorphic/stackTrace';\n\nimport type { ClientInstrumentation } from './clientInstrumentation';\nimport type { Connection } from './connection';\nimport type { Logger } from './types';\nimport type { ValidatorContext } from '../protocol/validator';\nimport type { Platform } from './platform';\nimport type * as channels from '@protocol/channels';\nimport { currentZone } from '../utils';\n\ntype Listener = (...args: any[]) => void;\n\nexport abstract class ChannelOwner<T extends channels.Channel = channels.Channel> extends EventEmitter {\n  readonly _connection: Connection;\n  private _parent: ChannelOwner | undefined;\n  private _objects = new Map<string, ChannelOwner>();\n\n  readonly _type: string;\n  readonly _guid: string;\n  readonly _channel: T;\n  readonly _initializer: channels.InitializerTraits<T>;\n  _logger: Logger | undefined;\n  readonly _instrumentation: ClientInstrumentation;\n  private _eventToSubscriptionMapping: Map<string, string> = new Map();\n  _wasCollected: boolean = false;\n\n  constructor(parent: ChannelOwner | Connection, type: string, guid: string, initializer: channels.InitializerTraits<T>) {\n    const connection = parent instanceof ChannelOwner ? parent._connection : parent;\n    super(connection._platform);\n    this.setMaxListeners(0);\n    this._connection = connection;\n    this._type = type;\n    this._guid = guid;\n    this._parent = parent instanceof ChannelOwner ? parent : undefined;\n    this._instrumentation = this._connection._instrumentation;\n\n    this._connection._objects.set(guid, this);\n    if (this._parent) {\n      this._parent._objects.set(guid, this);\n      this._logger = this._parent._logger;\n    }\n\n    this._channel = this._createChannel(new EventEmitter(connection._platform));\n    this._initializer = initializer;\n  }\n\n  _setEventToSubscriptionMapping(mapping: Map<string, string>) {\n    this._eventToSubscriptionMapping = mapping;\n  }\n\n  private _updateSubscription(event: string | symbol, enabled: boolean) {\n    const protocolEvent = this._eventToSubscriptionMapping.get(String(event));\n    if (protocolEvent)\n      (this._channel as any).updateSubscription({ event: protocolEvent, enabled }).catch(() => {});\n  }\n\n  override on(event: string | symbol, listener: Listener): this {\n    if (!this.listenerCount(event))\n      this._updateSubscription(event, true);\n    super.on(event, listener);\n    return this;\n  }\n\n  override addListener(event: string | symbol, listener: Listener): this {\n    if (!this.listenerCount(event))\n      this._updateSubscription(event, true);\n    super.addListener(event, listener);\n    return this;\n  }\n\n  override prependListener(event: string | symbol, listener: Listener): this {\n    if (!this.listenerCount(event))\n      this._updateSubscription(event, true);\n    super.prependListener(event, listener);\n    return this;\n  }\n\n  override off(event: string | symbol, listener: Listener): this {\n    super.off(event, listener);\n    if (!this.listenerCount(event))\n      this._updateSubscription(event, false);\n    return this;\n  }\n\n  override removeListener(event: string | symbol, listener: Listener): this {\n    super.removeListener(event, listener);\n    if (!this.listenerCount(event))\n      this._updateSubscription(event, false);\n    return this;\n  }\n\n  _adopt(child: ChannelOwner<any>) {\n    child._parent!._objects.delete(child._guid);\n    this._objects.set(child._guid, child);\n    child._parent = this;\n  }\n\n  _dispose(reason: 'gc' | undefined) {\n    // Clean up from parent and connection.\n    if (this._parent)\n      this._parent._objects.delete(this._guid);\n    this._connection._objects.delete(this._guid);\n    this._wasCollected = reason === 'gc';\n\n    // Dispose all children.\n    for (const object of [...this._objects.values()])\n      object._dispose(reason);\n    this._objects.clear();\n  }\n\n  _debugScopeState(): any {\n    return {\n      _guid: this._guid,\n      objects: Array.from(this._objects.values()).map(o => o._debugScopeState()),\n    };\n  }\n\n  private _validatorToWireContext(): ValidatorContext {\n    return {\n      tChannelImpl: tChannelImplToWire,\n      binary: this._connection.rawBuffers() ? 'buffer' : 'toBase64',\n      isUnderTest: () => this._platform.isUnderTest(),\n    };\n  }\n\n  private _createChannel(base: Object): T {\n    const channel = new Proxy(base, {\n      get: (obj: any, prop: string | symbol) => {\n        if (typeof prop === 'string') {\n          const validator = maybeFindValidator(this._type, prop, 'Params');\n          const { internal } = methodMetainfo.get(this._type + '.' + prop) || {};\n          if (validator) {\n            return async (params: any) => {\n              return await this._wrapApiCall(async apiZone => {\n                const validatedParams = validator(params, '', this._validatorToWireContext());\n                if (!apiZone.internal && !apiZone.reported) {\n                  // Reporting/tracing/logging this api call for the first time.\n                  apiZone.reported = true;\n                  this._instrumentation.onApiCallBegin(apiZone, { type: this._type, method: prop, params });\n                  logApiCall(this._platform, this._logger, `=> ${apiZone.apiName} started`);\n                  return await this._connection.sendMessageToServer(this, prop, validatedParams, apiZone);\n                }\n                // Since this api call is either internal, or has already been reported/traced once,\n                // passing as internal.\n                return await this._connection.sendMessageToServer(this, prop, validatedParams, { internal: true });\n              }, { internal });\n            };\n          }\n        }\n        return obj[prop];\n      },\n    });\n    (channel as any)._object = this;\n    return channel;\n  }\n\n  async _wrapApiCall<R>(func: (apiZone: ApiZone) => Promise<R>, options?: { internal?: boolean, title?: string }): Promise<R> {\n    const logger = this._logger;\n    const existingApiZone = this._platform.zones.current().data<ApiZone>();\n    if (existingApiZone)\n      return await func(existingApiZone);\n\n    const crxZone = currentZone().data<{ apiName: string }>('crxZone');\n\n    const stackTrace = captureLibraryStackTrace(this._platform);\n    const apiZone: ApiZone = { title: options?.title, apiName: crxZone?.apiName ?? stackTrace.apiName, frames: stackTrace.frames, internal: options?.internal ?? false, reported: false, userData: undefined, stepId: undefined };\n\n    try {\n      const result = await this._platform.zones.current().push(apiZone).run(async () => await func(apiZone));\n      if (!options?.internal) {\n        logApiCall(this._platform, logger, `<= ${apiZone.apiName} succeeded`);\n        this._instrumentation.onApiCallEnd(apiZone);\n      }\n      return result;\n    } catch (e) {\n      const innerError = ((this._platform.showInternalStackFrames() || this._platform.isUnderTest()) && e.stack) ? '\\n<inner error>\\n' + e.stack : '';\n      if (apiZone.apiName && !apiZone.apiName.includes('<anonymous>'))\n        e.message = apiZone.apiName + ': ' + e.message;\n      const stackFrames = '\\n' + stringifyStackFrames(stackTrace.frames).join('\\n') + innerError;\n      if (stackFrames.trim())\n        e.stack = e.message + stackFrames;\n      else\n        e.stack = '';\n      if (!options?.internal) {\n        apiZone.error = e;\n        logApiCall(this._platform, logger, `<= ${apiZone.apiName} failed`);\n        this._instrumentation.onApiCallEnd(apiZone);\n      }\n      throw e;\n    }\n  }\n\n  _toImpl(): any {\n    return this._connection.toImpl?.(this);\n  }\n\n  private toJSON() {\n    // Jest's expect library tries to print objects sometimes.\n    // RPC objects can contain links to lots of other objects,\n    // which can cause jest to crash. Let's help it out\n    // by just returning the important values.\n    return {\n      _type: this._type,\n      _guid: this._guid,\n    };\n  }\n}\n\nfunction logApiCall(platform: Platform, logger: Logger | undefined, message: string) {\n  if (logger && logger.isEnabled('api', 'info'))\n    logger.log('api', 'info', message, [], { color: 'cyan' });\n  platform.log('api', message);\n}\n\nfunction tChannelImplToWire(names: '*' | string[], arg: any, path: string, context: ValidatorContext) {\n  if (arg._object instanceof ChannelOwner && (names === '*' || names.includes(arg._object._type)))\n    return { guid: arg._object._guid };\n  throw new ValidationError(`${path}: expected channel ${names.toString()}`);\n}\n\ntype ApiZone = {\n  apiName: string;\n  frames: channels.StackFrame[];\n  title?: string;\n  internal?: boolean;\n  reported: boolean;\n  userData: any;\n  stepId?: string;\n  error?: Error;\n};\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Readable } from 'stream';\n\nimport { ChannelOwner } from './channelOwner';\n\nimport type * as channels from '@protocol/channels';\n\nexport class Stream extends ChannelOwner<channels.StreamChannel> {\n  static from(Stream: channels.StreamChannel): Stream {\n    return (Stream as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.StreamInitializer) {\n    super(parent, type, guid, initializer);\n  }\n\n  stream(): Readable {\n    return this._platform.streamReadable(this._channel);\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Platform } from './platform';\n\n// Keep in sync with the server.\nexport const fileUploadSizeLimit = 50 * 1024 * 1024;\n\nexport async function mkdirIfNeeded(platform: Platform, filePath: string) {\n  // This will harmlessly throw on windows if the dirname is the root directory.\n  await platform.fs().promises.mkdir(platform.path().dirname(filePath), { recursive: true }).catch(() => {});\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChannelOwner } from './channelOwner';\nimport { Stream } from './stream';\nimport { mkdirIfNeeded } from './fileUtils';\n\nimport type * as channels from '@protocol/channels';\nimport type { Readable } from 'stream';\n\nexport class Artifact extends ChannelOwner<channels.ArtifactChannel> {\n  static from(channel: channels.ArtifactChannel): Artifact {\n    return (channel as any)._object;\n  }\n\n  async pathAfterFinished(): Promise<string> {\n    if (this._connection.isRemote())\n      throw new Error(`Path is not available when connecting remotely. Use saveAs() to save a local copy.`);\n    return (await this._channel.pathAfterFinished()).value;\n  }\n\n  async saveAs(path: string): Promise<void> {\n    if (!this._connection.isRemote()) {\n      await this._channel.saveAs({ path });\n      return;\n    }\n\n    const result = await this._channel.saveAsStream();\n    const stream = Stream.from(result.stream);\n    await mkdirIfNeeded(this._platform, path);\n    await new Promise((resolve, reject) => {\n      stream.stream().pipe(this._platform.fs().createWriteStream(path))\n          .on('finish' as any, resolve)\n          .on('error' as any, reject);\n    });\n  }\n\n  async failure(): Promise<string | null> {\n    return (await this._channel.failure()).error || null;\n  }\n\n  async createReadStream(): Promise<Readable> {\n    const result = await this._channel.stream();\n    const stream = Stream.from(result.stream);\n    return stream.stream();\n  }\n\n  async readIntoBuffer(): Promise<Buffer> {\n    const stream = (await this.createReadStream())!;\n    return await new Promise((resolve, reject) => {\n      const chunks: Buffer[] = [];\n      stream.on('data', (chunk: Buffer) => {\n        chunks.push(chunk);\n      });\n      stream.on('end', () => {\n        resolve(Buffer.concat(chunks));\n      });\n      stream.on('error', reject);\n    });\n  }\n\n  async cancel(): Promise<void> {\n    return await this._channel.cancel();\n  }\n\n  async delete(): Promise<void> {\n    return await this._channel.delete();\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChannelOwner } from './channelOwner';\n\nimport type * as api from '../../types/types';\nimport type { Protocol } from '../server/chromium/protocol';\nimport type * as channels from '@protocol/channels';\n\nexport class CDPSession extends ChannelOwner<channels.CDPSessionChannel> implements api.CDPSession {\n  static from(cdpSession: channels.CDPSessionChannel): CDPSession {\n    return (cdpSession as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.CDPSessionInitializer) {\n    super(parent, type, guid, initializer);\n\n    this._channel.on('event', ({ method, params }) => {\n      this.emit(method, params);\n    });\n\n    this.on = super.on;\n    this.addListener = super.addListener;\n    this.off = super.removeListener;\n    this.removeListener = super.removeListener;\n    this.once = super.once;\n  }\n\n  async send<T extends keyof Protocol.CommandParameters>(\n    method: T,\n    params?: Protocol.CommandParameters[T]\n  ): Promise<Protocol.CommandReturnValues[T]> {\n    const result = await this._channel.send({ method, params });\n    return result.result as Protocol.CommandReturnValues[T];\n  }\n\n  async detach() {\n    return await this._channel.detach();\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isString } from '../utils/isomorphic/rtti';\n\nimport type * as types from './types';\nimport type { Platform } from './platform';\n\nexport function envObjectToArray(env: types.Env): { name: string, value: string }[] {\n  const result: { name: string, value: string }[] = [];\n  for (const name in env) {\n    if (!Object.is(env[name], undefined))\n      result.push({ name, value: String(env[name]) });\n  }\n  return result;\n}\n\nexport async function evaluationScript(platform: Platform, fun: Function | string | { path?: string, content?: string }, arg?: any, addSourceUrl: boolean = true): Promise<string> {\n  if (typeof fun === 'function') {\n    const source = fun.toString();\n    const argString = Object.is(arg, undefined) ? 'undefined' : JSON.stringify(arg);\n    return `(${source})(${argString})`;\n  }\n  if (arg !== undefined)\n    throw new Error('Cannot evaluate a string with arguments');\n  if (isString(fun))\n    return fun;\n  if (fun.content !== undefined)\n    return fun.content;\n  if (fun.path !== undefined) {\n    let source = await platform.fs().promises.readFile(fun.path, 'utf8');\n    if (addSourceUrl)\n      source = addSourceUrlToScript(source, fun.path);\n    return source;\n  }\n  throw new Error('Either path or content property must be present');\n}\n\nexport function addSourceUrlToScript(source: string, path: string): string {\n  return `${source}\\n//# sourceURL=${path.replace(/\\n/g, '')}`;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { BrowserContext } from './browserContext';\nimport type * as api from '../../types/types';\n\nexport class Clock implements api.Clock {\n  private _browserContext: BrowserContext;\n\n  constructor(browserContext: BrowserContext) {\n    this._browserContext = browserContext;\n  }\n\n  async install(options: { time?: number | string | Date } = { }) {\n    await this._browserContext._channel.clockInstall(options.time !== undefined ? parseTime(options.time) : {});\n  }\n\n  async fastForward(ticks: number | string) {\n    await this._browserContext._channel.clockFastForward(parseTicks(ticks));\n  }\n\n  async pauseAt(time: number | string | Date) {\n    await this._browserContext._channel.clockPauseAt(parseTime(time));\n  }\n\n  async resume() {\n    await this._browserContext._channel.clockResume({});\n  }\n\n  async runFor(ticks: number | string) {\n    await this._browserContext._channel.clockRunFor(parseTicks(ticks));\n  }\n\n  async setFixedTime(time: string | number | Date) {\n    await this._browserContext._channel.clockSetFixedTime(parseTime(time));\n  }\n\n  async setSystemTime(time: string | number | Date) {\n    await this._browserContext._channel.clockSetSystemTime(parseTime(time));\n  }\n}\n\nfunction parseTime(time: string | number | Date): { timeNumber?: number, timeString?: string } {\n  if (typeof time === 'number')\n    return { timeNumber: time };\n  if (typeof time === 'string')\n    return { timeString: time };\n  if (!isFinite(time.getTime()))\n    throw new Error(`Invalid date: ${time}`);\n  return { timeNumber: time.getTime() };\n}\n\nfunction parseTicks(ticks: string | number): { ticksNumber?: number, ticksString?: string } {\n  return {\n    ticksNumber: typeof ticks === 'number' ? ticks : undefined,\n    ticksString: typeof ticks === 'string' ? ticks : undefined\n  };\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { parseSerializedValue, serializeValue } from '../protocol/serializers';\nimport { isError } from '../utils/isomorphic/rtti';\n\nimport type { SerializedError } from '@protocol/channels';\n\nexport class TimeoutError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'TimeoutError';\n  }\n}\n\nexport class TargetClosedError extends Error {\n  constructor(cause?: string) {\n    super(cause || 'Target page, context or browser has been closed');\n  }\n}\n\nexport function isTargetClosedError(error: Error) {\n  return error instanceof TargetClosedError;\n}\n\nexport function serializeError(e: any): SerializedError {\n  if (isError(e))\n    return { error: { message: e.message, stack: e.stack, name: e.name } };\n  return { value: serializeValue(e, value => ({ fallThrough: value })) };\n}\n\nexport function parseError(error: SerializedError): Error {\n  if (!error.error) {\n    if (error.value === undefined)\n      throw new Error('Serialized error must have either an error or a value');\n    return parseSerializedValue(error.value, undefined);\n  }\n  if (error.error.name === 'TimeoutError') {\n    const e = new TimeoutError(error.error.message);\n    e.stack = error.error.stack || '';\n    return e;\n  }\n  if (error.error.name === 'TargetClosedError') {\n    const e = new TargetClosedError(error.error.message);\n    e.stack = error.error.stack || '';\n    return e;\n  }\n  const e = new Error(error.error.message);\n  e.stack = error.error.stack || '';\n  e.name = error.error.name;\n  return e;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChannelOwner } from './channelOwner';\nimport { isTargetClosedError } from './errors';\nimport { parseSerializedValue, serializeValue } from '../protocol/serializers';\n\nimport type * as structs from '../../types/structs';\nimport type * as api from '../../types/types';\nimport type * as channels from '@protocol/channels';\n\n\nexport class JSHandle<T = any> extends ChannelOwner<channels.JSHandleChannel> implements api.JSHandle {\n  private _preview: string;\n\n  static from(handle: channels.JSHandleChannel): JSHandle {\n    return (handle as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.JSHandleInitializer) {\n    super(parent, type, guid, initializer);\n    this._preview = this._initializer.preview;\n    this._channel.on('previewUpdated', ({ preview }) => this._preview = preview);\n  }\n\n  async evaluate<R, Arg>(pageFunction: structs.PageFunctionOn<T, Arg, R>, arg?: Arg): Promise<R> {\n    const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === 'function', arg: serializeArgument(arg) });\n    return parseResult(result.value);\n  }\n\n  async evaluateHandle<R, Arg>(pageFunction: structs.PageFunctionOn<T, Arg, R>, arg?: Arg): Promise<structs.SmartHandle<R>> {\n    const result = await this._channel.evaluateExpressionHandle({ expression: String(pageFunction), isFunction: typeof pageFunction === 'function', arg: serializeArgument(arg) });\n    return JSHandle.from(result.handle) as any as structs.SmartHandle<R>;\n  }\n\n  async getProperty(propertyName: string): Promise<JSHandle> {\n    const result = await this._channel.getProperty({ name: propertyName });\n    return JSHandle.from(result.handle);\n  }\n\n  async getProperties(): Promise<Map<string, JSHandle>> {\n    const map = new Map<string, JSHandle>();\n    for (const { name, value } of (await this._channel.getPropertyList()).properties)\n      map.set(name, JSHandle.from(value));\n    return map;\n  }\n\n  async jsonValue(): Promise<T> {\n    return parseResult((await this._channel.jsonValue()).value);\n  }\n\n  asElement(): T extends Node ? api.ElementHandle<T> : null {\n    return null as any;\n  }\n\n  async [Symbol.asyncDispose]() {\n    await this.dispose();\n  }\n\n  async dispose() {\n    try {\n      await this._channel.dispose();\n    } catch (e) {\n      if (isTargetClosedError(e))\n        return;\n      throw e;\n    }\n  }\n\n  override toString(): string {\n    return this._preview;\n  }\n}\n\n// This function takes care of converting all JSHandles to their channels,\n// so that generic channel serializer converts them to guids.\nexport function serializeArgument(arg: any): channels.SerializedArgument {\n  const handles: channels.Channel[] = [];\n  const pushHandle = (channel: channels.Channel): number => {\n    handles.push(channel);\n    return handles.length - 1;\n  };\n  const value = serializeValue(arg, value => {\n    if (value instanceof JSHandle)\n      return { h: pushHandle(value._channel) };\n    return { fallThrough: value };\n  });\n  return { value, handles };\n}\n\nexport function parseResult(value: channels.SerializedValue): any {\n  return parseSerializedValue(value, undefined);\n}\n\nexport function assertMaxArguments(count: number, max: number): asserts count {\n  if (count > max)\n    throw new Error('Too many arguments. If you need to pass more than 1 argument to the function wrap them in an object.');\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ElementHandle } from './elementHandle';\nimport type * as api from '../../types/types';\nimport type * as channels from '@protocol/channels';\n\ntype SerializedAXNode = Omit<channels.AXNode, 'valueString' | 'valueNumber' | 'children' | 'checked' | 'pressed'> & {\n  value?: string|number,\n  checked?: boolean | 'mixed',\n  pressed?: boolean | 'mixed',\n  children?: SerializedAXNode[]\n};\n\nfunction axNodeFromProtocol(axNode: channels.AXNode): SerializedAXNode {\n  const result: SerializedAXNode = {\n    ...axNode,\n    value: axNode.valueNumber !== undefined ? axNode.valueNumber : axNode.valueString,\n    checked: axNode.checked === 'checked' ? true : axNode.checked === 'unchecked' ? false : axNode.checked,\n    pressed: axNode.pressed === 'pressed' ? true : axNode.pressed === 'released' ? false : axNode.pressed,\n    children: axNode.children ? axNode.children.map(axNodeFromProtocol) : undefined,\n  };\n  delete (result as any).valueNumber;\n  delete (result as any).valueString;\n  return result;\n}\n\nexport class Accessibility implements api.Accessibility {\n  private _channel: channels.PageChannel;\n\n  constructor(channel: channels.PageChannel) {\n    this._channel = channel;\n  }\n\n  async snapshot(options: { interestingOnly?: boolean; root?: ElementHandle } = {}): Promise<SerializedAXNode | null> {\n    const root = options.root ? options.root._elementChannel : undefined;\n    const result = await this._channel.accessibilitySnapshot({ interestingOnly: options.interestingOnly, root });\n    return result.rootAXNode ? axNodeFromProtocol(result.rootAXNode) : null;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type * as api from '../../types/types';\nimport type * as channels from '@protocol/channels';\n\nexport class Coverage implements api.Coverage {\n  private _channel: channels.PageChannel;\n\n  constructor(channel: channels.PageChannel) {\n    this._channel = channel;\n  }\n\n  async startJSCoverage(options: channels.PageStartJSCoverageOptions = {}) {\n    await this._channel.startJSCoverage(options);\n  }\n\n  async stopJSCoverage(): Promise<channels.PageStopJSCoverageResult['entries']> {\n    return (await this._channel.stopJSCoverage()).entries;\n  }\n\n  async startCSSCoverage(options: channels.PageStartCSSCoverageOptions = {}) {\n    await this._channel.startCSSCoverage(options);\n  }\n\n  async stopCSSCoverage(): Promise<channels.PageStopCSSCoverageResult['entries']> {\n    return (await this._channel.stopCSSCoverage()).entries;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Artifact } from './artifact';\nimport type { Page } from './page';\nimport type * as api from '../../types/types';\nimport type { Readable } from 'stream';\n\nexport class Download implements api.Download {\n  private _page: Page;\n  private _url: string;\n  private _suggestedFilename: string;\n  private _artifact: Artifact;\n\n  constructor(page: Page, url: string, suggestedFilename: string, artifact: Artifact) {\n    this._page = page;\n    this._url = url;\n    this._suggestedFilename = suggestedFilename;\n    this._artifact = artifact;\n  }\n\n  page(): Page {\n    return this._page;\n  }\n\n  url(): string {\n    return this._url;\n  }\n\n  suggestedFilename(): string {\n    return this._suggestedFilename;\n  }\n\n  async path(): Promise<string> {\n    return await this._artifact.pathAfterFinished();\n  }\n\n  async saveAs(path: string): Promise<void> {\n    return await this._artifact.saveAs(path);\n  }\n\n  async failure(): Promise<string | null> {\n    return await this._artifact.failure();\n  }\n\n  async createReadStream(): Promise<Readable> {\n    return await this._artifact.createReadStream();\n  }\n\n  async cancel(): Promise<void> {\n    return await this._artifact.cancel();\n  }\n\n  async delete(): Promise<void> {\n    return await this._artifact.delete();\n  }\n}\n","/**\n * Copyright 2019 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const Events = {\n  AndroidDevice: {\n    WebView: 'webview',\n    Close: 'close'\n  },\n\n  AndroidSocket: {\n    Data: 'data',\n    Close: 'close'\n  },\n\n  AndroidWebView: {\n    Close: 'close'\n  },\n\n  Browser: {\n    Disconnected: 'disconnected'\n  },\n\n  BrowserContext: {\n    Console: 'console',\n    Close: 'close',\n    Dialog: 'dialog',\n    Page: 'page',\n    // Can't use just 'error' due to node.js special treatment of error events.\n    // @see https://nodejs.org/api/events.html#events_error_events\n    WebError: 'weberror',\n    BackgroundPage: 'backgroundpage',\n    ServiceWorker: 'serviceworker',\n    Request: 'request',\n    Response: 'response',\n    RequestFailed: 'requestfailed',\n    RequestFinished: 'requestfinished',\n  },\n\n  BrowserServer: {\n    Close: 'close',\n  },\n\n  Page: {\n    Close: 'close',\n    Crash: 'crash',\n    Console: 'console',\n    Dialog: 'dialog',\n    Download: 'download',\n    FileChooser: 'filechooser',\n    DOMContentLoaded: 'domcontentloaded',\n    // Can't use just 'error' due to node.js special treatment of error events.\n    // @see https://nodejs.org/api/events.html#events_error_events\n    PageError: 'pageerror',\n    Request: 'request',\n    Response: 'response',\n    RequestFailed: 'requestfailed',\n    RequestFinished: 'requestfinished',\n    FrameAttached: 'frameattached',\n    FrameDetached: 'framedetached',\n    FrameNavigated: 'framenavigated',\n    Load: 'load',\n    Popup: 'popup',\n    WebSocket: 'websocket',\n    Worker: 'worker',\n  },\n\n  WebSocket: {\n    Close: 'close',\n    Error: 'socketerror',\n    FrameReceived: 'framereceived',\n    FrameSent: 'framesent',\n  },\n\n  Worker: {\n    Close: 'close',\n  },\n\n  ElectronApplication: {\n    Close: 'close',\n    Console: 'console',\n    Window: 'window',\n  },\n};\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { escapeForAttributeSelector, escapeForTextSelector } from './stringUtils';\n\nexport type ByRoleOptions = {\n  checked?: boolean;\n  disabled?: boolean;\n  exact?: boolean;\n  expanded?: boolean;\n  includeHidden?: boolean;\n  level?: number;\n  name?: string | RegExp;\n  pressed?: boolean;\n  selected?: boolean;\n};\n\nfunction getByAttributeTextSelector(attrName: string, text: string | RegExp, options?: { exact?: boolean }): string {\n  return `internal:attr=[${attrName}=${escapeForAttributeSelector(text, options?.exact || false)}]`;\n}\n\nexport function getByTestIdSelector(testIdAttributeName: string, testId: string | RegExp): string {\n  return `internal:testid=[${testIdAttributeName}=${escapeForAttributeSelector(testId, true)}]`;\n}\n\nexport function getByLabelSelector(text: string | RegExp, options?: { exact?: boolean }): string {\n  return 'internal:label=' + escapeForTextSelector(text, !!options?.exact);\n}\n\nexport function getByAltTextSelector(text: string | RegExp, options?: { exact?: boolean }): string {\n  return getByAttributeTextSelector('alt', text, options);\n}\n\nexport function getByTitleSelector(text: string | RegExp, options?: { exact?: boolean }): string {\n  return getByAttributeTextSelector('title', text, options);\n}\n\nexport function getByPlaceholderSelector(text: string | RegExp, options?: { exact?: boolean }): string {\n  return getByAttributeTextSelector('placeholder', text, options);\n}\n\nexport function getByTextSelector(text: string | RegExp, options?: { exact?: boolean }): string {\n  return 'internal:text=' + escapeForTextSelector(text, !!options?.exact);\n}\n\nexport function getByRoleSelector(role: string, options: ByRoleOptions = {}): string {\n  const props: string[][] = [];\n  if (options.checked !== undefined)\n    props.push(['checked', String(options.checked)]);\n  if (options.disabled !== undefined)\n    props.push(['disabled', String(options.disabled)]);\n  if (options.selected !== undefined)\n    props.push(['selected', String(options.selected)]);\n  if (options.expanded !== undefined)\n    props.push(['expanded', String(options.expanded)]);\n  if (options.includeHidden !== undefined)\n    props.push(['include-hidden', String(options.includeHidden)]);\n  if (options.level !== undefined)\n    props.push(['level', String(options.level)]);\n  if (options.name !== undefined)\n    props.push(['name', escapeForAttributeSelector(options.name, !!options.exact)]);\n  if (options.pressed !== undefined)\n    props.push(['pressed', String(options.pressed)]);\n  return `internal:role=${role}${props.map(([n, v]) => `[${n}=${v}]`).join('')}`;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ElementHandle } from './elementHandle';\nimport { parseResult, serializeArgument } from './jsHandle';\nimport { asLocator } from '../utils/isomorphic/locatorGenerators';\nimport { getByAltTextSelector, getByLabelSelector, getByPlaceholderSelector, getByRoleSelector, getByTestIdSelector, getByTextSelector, getByTitleSelector } from '../utils/isomorphic/locatorUtils';\nimport { escapeForTextSelector } from '../utils/isomorphic/stringUtils';\nimport { isString } from '../utils/isomorphic/rtti';\nimport { monotonicTime } from '../utils/isomorphic/time';\n\nimport type { Frame } from './frame';\nimport type { FilePayload, FrameExpectParams, Rect, SelectOption, SelectOptionOptions, TimeoutOptions } from './types';\nimport type * as structs from '../../types/structs';\nimport type * as api from '../../types/types';\nimport type { ByRoleOptions } from '../utils/isomorphic/locatorUtils';\nimport type * as channels from '@protocol/channels';\n\n\nexport type LocatorOptions = {\n  hasText?: string | RegExp;\n  hasNotText?: string | RegExp;\n  has?: Locator;\n  hasNot?: Locator;\n  visible?: boolean;\n};\n\nexport class Locator implements api.Locator {\n  _frame: Frame;\n  _selector: string;\n\n  constructor(frame: Frame, selector: string, options?: LocatorOptions) {\n    this._frame = frame;\n    this._selector = selector;\n\n    if (options?.hasText)\n      this._selector += ` >> internal:has-text=${escapeForTextSelector(options.hasText, false)}`;\n\n    if (options?.hasNotText)\n      this._selector += ` >> internal:has-not-text=${escapeForTextSelector(options.hasNotText, false)}`;\n\n    if (options?.has) {\n      const locator = options.has;\n      if (locator._frame !== frame)\n        throw new Error(`Inner \"has\" locator must belong to the same frame.`);\n      this._selector += ` >> internal:has=` + JSON.stringify(locator._selector);\n    }\n\n    if (options?.hasNot) {\n      const locator = options.hasNot;\n      if (locator._frame !== frame)\n        throw new Error(`Inner \"hasNot\" locator must belong to the same frame.`);\n      this._selector += ` >> internal:has-not=` + JSON.stringify(locator._selector);\n    }\n\n    if (options?.visible !== undefined)\n      this._selector += ` >> visible=${options.visible ? 'true' : 'false'}`;\n\n    if (this._frame._platform.inspectCustom)\n      (this as any)[this._frame._platform.inspectCustom] = () => this._inspect();\n  }\n\n  private async _withElement<R>(task: (handle: ElementHandle<SVGElement | HTMLElement>, timeout?: number) => Promise<R>, options: { title: string, internal?: boolean, timeout?: number }): Promise<R> {\n    const timeout = this._frame._timeout({ timeout: options.timeout });\n    const deadline = timeout ? monotonicTime() + timeout : 0;\n\n    return await this._frame._wrapApiCall<R>(async () => {\n      const result = await this._frame._channel.waitForSelector({ selector: this._selector, strict: true, state: 'attached', timeout });\n      const handle = ElementHandle.fromNullable(result.element) as ElementHandle<SVGElement | HTMLElement> | null;\n      if (!handle)\n        throw new Error(`Could not resolve ${this._selector} to DOM Element`);\n      try {\n        return await task(handle, deadline ? deadline - monotonicTime() : 0);\n      } finally {\n        await handle.dispose();\n      }\n    }, { title: options.title, internal: options.internal });\n  }\n\n  _equals(locator: Locator) {\n    return this._frame === locator._frame && this._selector === locator._selector;\n  }\n\n  page() {\n    return this._frame.page();\n  }\n\n  async boundingBox(options?: TimeoutOptions): Promise<Rect | null> {\n    return await this._withElement(h => h.boundingBox(), { title: 'Bounding box', timeout: options?.timeout });\n  }\n\n  async check(options: channels.ElementHandleCheckOptions & TimeoutOptions = {}) {\n    return await this._frame.check(this._selector, { strict: true, ...options });\n  }\n\n  async click(options: channels.ElementHandleClickOptions & TimeoutOptions = {}): Promise<void> {\n    return await this._frame.click(this._selector, { strict: true, ...options });\n  }\n\n  async dblclick(options: channels.ElementHandleDblclickOptions & TimeoutOptions = {}): Promise<void> {\n    await this._frame.dblclick(this._selector, { strict: true, ...options });\n  }\n\n  async dispatchEvent(type: string, eventInit: Object = {}, options?: TimeoutOptions) {\n    return await this._frame.dispatchEvent(this._selector, type, eventInit, { strict: true, ...options });\n  }\n\n  async dragTo(target: Locator, options: channels.FrameDragAndDropOptions & TimeoutOptions = {}) {\n    return await this._frame.dragAndDrop(this._selector, target._selector, {\n      strict: true,\n      ...options,\n    });\n  }\n\n  async evaluate<R, Arg>(pageFunction: structs.PageFunctionOn<SVGElement | HTMLElement, Arg, R>, arg?: Arg, options?: TimeoutOptions): Promise<R> {\n    return await this._withElement(h => h.evaluate(pageFunction, arg), { title: 'Evaluate', timeout: options?.timeout });\n  }\n\n  async evaluateAll<R, Arg>(pageFunction: structs.PageFunctionOn<Element[], Arg, R>, arg?: Arg): Promise<R> {\n    return await this._frame.$$eval(this._selector, pageFunction, arg);\n  }\n\n  async evaluateHandle<R, Arg>(pageFunction: structs.PageFunctionOn<any, Arg, R>, arg?: Arg, options?: TimeoutOptions): Promise<structs.SmartHandle<R>> {\n    return await this._withElement(h => h.evaluateHandle(pageFunction, arg), { title: 'Evaluate', timeout: options?.timeout });\n  }\n\n  async fill(value: string, options: channels.ElementHandleFillOptions & TimeoutOptions = {}): Promise<void> {\n    return await this._frame.fill(this._selector, value, { strict: true, ...options });\n  }\n\n  async clear(options: channels.ElementHandleFillOptions = {}): Promise<void> {\n    return await this.fill('', options);\n  }\n\n  async _highlight() {\n    // VS Code extension uses this one, keep it for now.\n    return await this._frame._highlight(this._selector);\n  }\n\n  async highlight() {\n    return await this._frame._highlight(this._selector);\n  }\n\n  locator(selectorOrLocator: string | Locator, options?: Omit<LocatorOptions, 'visible'>): Locator {\n    if (isString(selectorOrLocator))\n      return new Locator(this._frame, this._selector + ' >> ' + selectorOrLocator, options);\n    if (selectorOrLocator._frame !== this._frame)\n      throw new Error(`Locators must belong to the same frame.`);\n    return new Locator(this._frame, this._selector + ' >> internal:chain=' + JSON.stringify(selectorOrLocator._selector), options);\n  }\n\n  getByTestId(testId: string | RegExp): Locator {\n    return this.locator(getByTestIdSelector(testIdAttributeName(), testId));\n  }\n\n  getByAltText(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByAltTextSelector(text, options));\n  }\n\n  getByLabel(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByLabelSelector(text, options));\n  }\n\n  getByPlaceholder(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByPlaceholderSelector(text, options));\n  }\n\n  getByText(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByTextSelector(text, options));\n  }\n\n  getByTitle(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByTitleSelector(text, options));\n  }\n\n  getByRole(role: string, options: ByRoleOptions = {}): Locator {\n    return this.locator(getByRoleSelector(role, options));\n  }\n\n  frameLocator(selector: string): FrameLocator {\n    return new FrameLocator(this._frame, this._selector + ' >> ' + selector);\n  }\n\n  filter(options?: LocatorOptions): Locator {\n    return new Locator(this._frame, this._selector, options);\n  }\n\n  async elementHandle(options?: TimeoutOptions): Promise<ElementHandle<SVGElement | HTMLElement>> {\n    return await this._frame.waitForSelector(this._selector, { strict: true, state: 'attached', ...options })!;\n  }\n\n  async elementHandles(): Promise<api.ElementHandle<SVGElement | HTMLElement>[]> {\n    return await this._frame.$$(this._selector);\n  }\n\n  contentFrame() {\n    return new FrameLocator(this._frame, this._selector);\n  }\n\n  describe(description: string) {\n    return new Locator(this._frame, this._selector + ' >> internal:describe=' + JSON.stringify(description));\n  }\n\n  first(): Locator {\n    return new Locator(this._frame, this._selector + ' >> nth=0');\n  }\n\n  last(): Locator {\n    return new Locator(this._frame, this._selector + ` >> nth=-1`);\n  }\n\n  nth(index: number): Locator {\n    return new Locator(this._frame, this._selector + ` >> nth=${index}`);\n  }\n\n  and(locator: Locator): Locator {\n    if (locator._frame !== this._frame)\n      throw new Error(`Locators must belong to the same frame.`);\n    return new Locator(this._frame, this._selector + ` >> internal:and=` + JSON.stringify(locator._selector));\n  }\n\n  or(locator: Locator): Locator {\n    if (locator._frame !== this._frame)\n      throw new Error(`Locators must belong to the same frame.`);\n    return new Locator(this._frame, this._selector + ` >> internal:or=` + JSON.stringify(locator._selector));\n  }\n\n  async focus(options?: TimeoutOptions): Promise<void> {\n    return await this._frame.focus(this._selector, { strict: true, ...options });\n  }\n\n  async blur(options?: TimeoutOptions): Promise<void> {\n    await this._frame._channel.blur({ selector: this._selector, strict: true, ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async count(): Promise<number> {\n    return await this._frame._queryCount(this._selector);\n  }\n\n  async _generateLocatorString(): Promise<string | null> {\n    return await this._withElement(h => h._generateLocatorString(), { title: 'Generate locator string', internal: true });\n  }\n\n  async getAttribute(name: string, options?: TimeoutOptions): Promise<string | null> {\n    return await this._frame.getAttribute(this._selector, name, { strict: true, ...options });\n  }\n\n  async hover(options: channels.ElementHandleHoverOptions & TimeoutOptions = {}): Promise<void> {\n    return await this._frame.hover(this._selector, { strict: true, ...options });\n  }\n\n  async innerHTML(options?: TimeoutOptions): Promise<string> {\n    return await this._frame.innerHTML(this._selector, { strict: true, ...options });\n  }\n\n  async innerText(options?: TimeoutOptions): Promise<string> {\n    return await this._frame.innerText(this._selector, { strict: true, ...options });\n  }\n\n  async inputValue(options?: TimeoutOptions): Promise<string> {\n    return await this._frame.inputValue(this._selector, { strict: true, ...options });\n  }\n\n  async isChecked(options?: TimeoutOptions): Promise<boolean> {\n    return await this._frame.isChecked(this._selector, { strict: true, ...options });\n  }\n\n  async isDisabled(options?: TimeoutOptions): Promise<boolean> {\n    return await this._frame.isDisabled(this._selector, { strict: true, ...options });\n  }\n\n  async isEditable(options?: TimeoutOptions): Promise<boolean> {\n    return await this._frame.isEditable(this._selector, { strict: true, ...options });\n  }\n\n  async isEnabled(options?: TimeoutOptions): Promise<boolean> {\n    return await this._frame.isEnabled(this._selector, { strict: true, ...options });\n  }\n\n  async isHidden(options?: TimeoutOptions): Promise<boolean> {\n    return await this._frame.isHidden(this._selector, { strict: true, ...options });\n  }\n\n  async isVisible(options?: TimeoutOptions): Promise<boolean> {\n    return await this._frame.isVisible(this._selector, { strict: true, ...options });\n  }\n\n  async press(key: string, options: channels.ElementHandlePressOptions & TimeoutOptions = {}): Promise<void> {\n    return await this._frame.press(this._selector, key, { strict: true, ...options });\n  }\n\n  async screenshot(options: Omit<channels.ElementHandleScreenshotOptions, 'mask'> & TimeoutOptions & { path?: string, mask?: api.Locator[] } = {}): Promise<Buffer> {\n    const mask = options.mask as Locator[] | undefined;\n    return await this._withElement((h, timeout) => h.screenshot({ ...options, mask, timeout }), { title: 'Screenshot', timeout: options.timeout });\n  }\n\n  async ariaSnapshot(options?: TimeoutOptions): Promise<string> {\n    const result = await this._frame._channel.ariaSnapshot({ ...options, selector: this._selector, timeout: this._frame._timeout(options) });\n    return result.snapshot;\n  }\n\n  async scrollIntoViewIfNeeded(options: channels.ElementHandleScrollIntoViewIfNeededOptions & TimeoutOptions = {}) {\n    return await this._withElement((h, timeout) => h.scrollIntoViewIfNeeded({ ...options, timeout }), { title: 'Scroll into view', timeout: options.timeout });\n  }\n\n  async selectOption(values: string | api.ElementHandle | SelectOption | string[] | api.ElementHandle[] | SelectOption[] | null, options: SelectOptionOptions = {}): Promise<string[]> {\n    return await this._frame.selectOption(this._selector, values, { strict: true, ...options });\n  }\n\n  async selectText(options: channels.ElementHandleSelectTextOptions & TimeoutOptions = {}): Promise<void> {\n    return await this._withElement((h, timeout) => h.selectText({ ...options, timeout }), { title: 'Select text', timeout: options.timeout });\n  }\n\n  async setChecked(checked: boolean, options?: channels.ElementHandleCheckOptions & TimeoutOptions) {\n    if (checked)\n      await this.check(options);\n    else\n      await this.uncheck(options);\n  }\n\n  async setInputFiles(files: string | FilePayload | string[] | FilePayload[], options: channels.ElementHandleSetInputFilesOptions & TimeoutOptions = {}) {\n    return await this._frame.setInputFiles(this._selector, files, { strict: true, ...options });\n  }\n\n  async tap(options: channels.ElementHandleTapOptions & TimeoutOptions = {}): Promise<void> {\n    return await this._frame.tap(this._selector, { strict: true, ...options });\n  }\n\n  async textContent(options?: TimeoutOptions): Promise<string | null> {\n    return await this._frame.textContent(this._selector, { strict: true, ...options });\n  }\n\n  async type(text: string, options: channels.ElementHandleTypeOptions & TimeoutOptions = {}): Promise<void> {\n    return await this._frame.type(this._selector, text, { strict: true, ...options });\n  }\n\n  async pressSequentially(text: string, options: channels.ElementHandleTypeOptions & TimeoutOptions = {}): Promise<void> {\n    return await this.type(text, options);\n  }\n\n  async uncheck(options: channels.ElementHandleUncheckOptions & TimeoutOptions = {}) {\n    return await this._frame.uncheck(this._selector, { strict: true, ...options });\n  }\n\n  async all(): Promise<Locator[]> {\n    return new Array(await this.count()).fill(0).map((e, i) => this.nth(i));\n  }\n\n  async allInnerTexts(): Promise<string[]> {\n    return await this._frame.$$eval(this._selector, ee => ee.map(e => (e as HTMLElement).innerText));\n  }\n\n  async allTextContents(): Promise<string[]> {\n    return await this._frame.$$eval(this._selector, ee => ee.map(e => e.textContent || ''));\n  }\n\n  waitFor(options: channels.FrameWaitForSelectorOptions & TimeoutOptions & { state: 'attached' | 'visible' }): Promise<void>;\n  waitFor(options?: channels.FrameWaitForSelectorOptions & TimeoutOptions): Promise<void>;\n  async waitFor(options?: channels.FrameWaitForSelectorOptions & TimeoutOptions): Promise<void> {\n    await this._frame._channel.waitForSelector({ selector: this._selector, strict: true, omitReturnValue: true, ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async _expect(expression: string, options: FrameExpectParams): Promise<{ matches: boolean, received?: any, log?: string[], timedOut?: boolean }> {\n    const params: channels.FrameExpectParams = { selector: this._selector, expression, ...options, isNot: !!options.isNot };\n    params.expectedValue = serializeArgument(options.expectedValue);\n    const result = (await this._frame._channel.expect(params));\n    if (result.received !== undefined)\n      result.received = parseResult(result.received);\n    return result;\n  }\n\n  private _inspect() {\n    return this.toString();\n  }\n\n  toString() {\n    return asLocator('javascript', this._selector);\n  }\n}\n\nexport class FrameLocator implements api.FrameLocator {\n  private _frame: Frame;\n  private _frameSelector: string;\n\n  constructor(frame: Frame, selector: string) {\n    this._frame = frame;\n    this._frameSelector = selector;\n  }\n\n  locator(selectorOrLocator: string | Locator, options?: LocatorOptions): Locator {\n    if (isString(selectorOrLocator))\n      return new Locator(this._frame, this._frameSelector + ' >> internal:control=enter-frame >> ' + selectorOrLocator, options);\n    if (selectorOrLocator._frame !== this._frame)\n      throw new Error(`Locators must belong to the same frame.`);\n    return new Locator(this._frame, this._frameSelector + ' >> internal:control=enter-frame >> ' + selectorOrLocator._selector, options);\n  }\n\n  getByTestId(testId: string | RegExp): Locator {\n    return this.locator(getByTestIdSelector(testIdAttributeName(), testId));\n  }\n\n  getByAltText(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByAltTextSelector(text, options));\n  }\n\n  getByLabel(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByLabelSelector(text, options));\n  }\n\n  getByPlaceholder(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByPlaceholderSelector(text, options));\n  }\n\n  getByText(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByTextSelector(text, options));\n  }\n\n  getByTitle(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByTitleSelector(text, options));\n  }\n\n  getByRole(role: string, options: ByRoleOptions = {}): Locator {\n    return this.locator(getByRoleSelector(role, options));\n  }\n\n  owner() {\n    return new Locator(this._frame, this._frameSelector);\n  }\n\n  frameLocator(selector: string): FrameLocator {\n    return new FrameLocator(this._frame, this._frameSelector + ' >> internal:control=enter-frame >> ' + selector);\n  }\n\n  first(): FrameLocator {\n    return new FrameLocator(this._frame, this._frameSelector + ' >> nth=0');\n  }\n\n  last(): FrameLocator {\n    return new FrameLocator(this._frame, this._frameSelector + ` >> nth=-1`);\n  }\n\n  nth(index: number): FrameLocator {\n    return new FrameLocator(this._frame, this._frameSelector + ` >> nth=${index}`);\n  }\n}\n\nlet _testIdAttributeName: string = 'data-testid';\n\nexport function testIdAttributeName(): string {\n  return _testIdAttributeName;\n}\n\nexport function setTestIdAttribute(attributeName: string) {\n  _testIdAttributeName = attributeName;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Artifact } from './artifact';\nimport { ChannelOwner } from './channelOwner';\n\nimport type * as api from '../../types/types';\nimport type * as channels from '@protocol/channels';\n\nexport class Tracing extends ChannelOwner<channels.TracingChannel> implements api.Tracing {\n  private _includeSources = false;\n  _tracesDir: string | undefined;\n  private _stacksId: string | undefined;\n  private _isTracing = false;\n\n  static from(channel: channels.TracingChannel): Tracing {\n    return (channel as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.TracingInitializer) {\n    super(parent, type, guid, initializer);\n  }\n\n  async start(options: { name?: string, title?: string, snapshots?: boolean, screenshots?: boolean, sources?: boolean, _live?: boolean } = {}) {\n    this._includeSources = !!options.sources;\n    await this._channel.tracingStart({\n      name: options.name,\n      snapshots: options.snapshots,\n      screenshots: options.screenshots,\n      live: options._live,\n    });\n    const { traceName } = await this._channel.tracingStartChunk({ name: options.name, title: options.title });\n    await this._startCollectingStacks(traceName);\n  }\n\n  async startChunk(options: { name?: string, title?: string } = {}) {\n    const { traceName } = await this._channel.tracingStartChunk(options);\n    await this._startCollectingStacks(traceName);\n  }\n\n  async group(name: string, options: { location?: { file: string, line?: number, column?: number } } = {}) {\n    await this._channel.tracingGroup({ name, location: options.location });\n  }\n\n  async groupEnd() {\n    await this._channel.tracingGroupEnd();\n  }\n\n  private async _startCollectingStacks(traceName: string) {\n    if (!this._isTracing) {\n      this._isTracing = true;\n      this._connection.setIsTracing(true);\n    }\n    const result = await this._connection.localUtils()?.tracingStarted({ tracesDir: this._tracesDir, traceName });\n    this._stacksId = result?.stacksId;\n  }\n\n  async stopChunk(options: { path?: string } = {}) {\n    await this._doStopChunk(options.path);\n  }\n\n  async stop(options: { path?: string } = {}) {\n    await this._doStopChunk(options.path);\n    await this._channel.tracingStop();\n  }\n\n  private async _doStopChunk(filePath: string | undefined) {\n    this._resetStackCounter();\n\n    if (!filePath) {\n      // Not interested in artifacts.\n      await this._channel.tracingStopChunk({ mode: 'discard' });\n      if (this._stacksId)\n        await this._connection.localUtils()!.traceDiscarded({ stacksId: this._stacksId });\n      return;\n    }\n\n    const localUtils = this._connection.localUtils();\n    if (!localUtils)\n      throw new Error('Cannot save trace in thin clients');\n\n    const isLocal = !this._connection.isRemote();\n\n    if (isLocal) {\n      const result = await this._channel.tracingStopChunk({ mode: 'entries' });\n      await localUtils.zip({ zipFile: filePath, entries: result.entries!, mode: 'write', stacksId: this._stacksId, includeSources: this._includeSources });\n      return;\n    }\n\n    const result = await this._channel.tracingStopChunk({ mode: 'archive' });\n\n    // The artifact may be missing if the browser closed while stopping tracing.\n    if (!result.artifact) {\n      if (this._stacksId)\n        await localUtils.traceDiscarded({ stacksId: this._stacksId });\n      return;\n    }\n\n    // Save trace to the final local file.\n    const artifact = Artifact.from(result.artifact);\n    await artifact.saveAs(filePath);\n    await artifact.delete();\n\n    await localUtils.zip({ zipFile: filePath, entries: [], mode: 'append', stacksId: this._stacksId, includeSources: this._includeSources });\n  }\n\n  _resetStackCounter() {\n    if (this._isTracing) {\n      this._isTracing = false;\n      this._connection.setIsTracing(false);\n    }\n  }\n}\n","/**\n * Copyright 2019 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DEFAULT_PLAYWRIGHT_LAUNCH_TIMEOUT, DEFAULT_PLAYWRIGHT_TIMEOUT } from '../utils/isomorphic/time';\n\nimport type { Platform } from './platform';\n\nexport class TimeoutSettings {\n  private _parent: TimeoutSettings | undefined;\n  private _defaultTimeout: number | undefined;\n  private _defaultNavigationTimeout: number | undefined;\n  private _platform: Platform;\n\n  constructor(platform: Platform, parent?: TimeoutSettings) {\n    this._parent = parent;\n    this._platform = platform;\n  }\n\n  setDefaultTimeout(timeout: number | undefined) {\n    this._defaultTimeout = timeout;\n  }\n\n  setDefaultNavigationTimeout(timeout: number | undefined) {\n    this._defaultNavigationTimeout = timeout;\n  }\n\n  defaultNavigationTimeout() {\n    return this._defaultNavigationTimeout;\n  }\n\n  defaultTimeout() {\n    return this._defaultTimeout;\n  }\n\n  navigationTimeout(options: { timeout?: number }): number {\n    if (typeof options.timeout === 'number')\n      return options.timeout;\n    if (this._defaultNavigationTimeout !== undefined)\n      return this._defaultNavigationTimeout;\n    if (this._platform.isDebugMode())\n      return 0;\n    if (this._defaultTimeout !== undefined)\n      return this._defaultTimeout;\n    if (this._parent)\n      return this._parent.navigationTimeout(options);\n    return DEFAULT_PLAYWRIGHT_TIMEOUT;\n  }\n\n  timeout(options: { timeout?: number }): number {\n    if (typeof options.timeout === 'number')\n      return options.timeout;\n    if (this._platform.isDebugMode())\n      return 0;\n    if (this._defaultTimeout !== undefined)\n      return this._defaultTimeout;\n    if (this._parent)\n      return this._parent.timeout(options);\n    return DEFAULT_PLAYWRIGHT_TIMEOUT;\n  }\n\n  launchTimeout(options: { timeout?: number }): number {\n    if (typeof options.timeout === 'number')\n      return options.timeout;\n    if (this._platform.isDebugMode())\n      return 0;\n    if (this._parent)\n      return this._parent.launchTimeout(options);\n    return DEFAULT_PLAYWRIGHT_LAUNCH_TIMEOUT;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { toClientCertificatesProtocol } from './browserContext';\nimport { ChannelOwner } from './channelOwner';\nimport { TargetClosedError, isTargetClosedError } from './errors';\nimport { RawHeaders } from './network';\nimport { Tracing } from './tracing';\nimport { assert } from '../utils/isomorphic/assert';\nimport { mkdirIfNeeded } from './fileUtils';\nimport { headersObjectToArray } from '../utils/isomorphic/headers';\nimport { isString } from '../utils/isomorphic/rtti';\nimport { TimeoutSettings } from './timeoutSettings';\n\nimport type { Playwright } from './playwright';\nimport type { ClientCertificate, FilePayload, Headers, SetStorageState, StorageState, TimeoutOptions } from './types';\nimport type { Serializable } from '../../types/structs';\nimport type * as api from '../../types/types';\nimport type { HeadersArray, NameValue } from '../utils/isomorphic/types';\nimport type { Platform } from './platform';\nimport type * as channels from '@protocol/channels';\nimport type * as fs from 'fs';\n\nexport type FetchOptions = {\n  params?: { [key: string]: string | number | boolean; } | URLSearchParams | string,\n  method?: string,\n  headers?: Headers,\n  data?: string | Buffer | Serializable,\n  form?: { [key: string]: string|number|boolean; } | FormData;\n  multipart?: { [key: string]: string|number|boolean|fs.ReadStream|FilePayload; } | FormData;\n  timeout?: number,\n  failOnStatusCode?: boolean,\n  ignoreHTTPSErrors?: boolean,\n  maxRedirects?: number,\n  maxRetries?: number,\n};\n\ntype NewContextOptions = Omit<channels.PlaywrightNewRequestOptions, 'extraHTTPHeaders' | 'clientCertificates' | 'storageState' | 'tracesDir'> & {\n  extraHTTPHeaders?: Headers,\n  storageState?: string | SetStorageState,\n  clientCertificates?: ClientCertificate[];\n};\n\ntype RequestWithBodyOptions = Omit<FetchOptions, 'method'>;\n\nexport class APIRequest implements api.APIRequest {\n  private _playwright: Playwright;\n  readonly _contexts = new Set<APIRequestContext>();\n\n  constructor(playwright: Playwright) {\n    this._playwright = playwright;\n  }\n\n  async newContext(options: NewContextOptions & TimeoutOptions = {}): Promise<APIRequestContext> {\n    options = {\n      ...this._playwright._defaultContextOptions,\n      ...options,\n    };\n    const storageState = typeof options.storageState === 'string' ?\n      JSON.parse(await this._playwright._platform.fs().promises.readFile(options.storageState, 'utf8')) :\n      options.storageState;\n    const context = APIRequestContext.from((await this._playwright._channel.newRequest({\n      ...options,\n      extraHTTPHeaders: options.extraHTTPHeaders ? headersObjectToArray(options.extraHTTPHeaders) : undefined,\n      storageState,\n      tracesDir: this._playwright._defaultLaunchOptions?.tracesDir, // We do not expose tracesDir in the API, so do not allow options to accidentally override it.\n      clientCertificates: await toClientCertificatesProtocol(this._playwright._platform, options.clientCertificates),\n    })).request);\n    this._contexts.add(context);\n    context._request = this;\n    context._timeoutSettings.setDefaultTimeout(options.timeout ?? this._playwright._defaultContextTimeout);\n    context._tracing._tracesDir = this._playwright._defaultLaunchOptions?.tracesDir;\n    await context._instrumentation.runAfterCreateRequestContext(context);\n    return context;\n  }\n}\n\nexport class APIRequestContext extends ChannelOwner<channels.APIRequestContextChannel> implements api.APIRequestContext {\n  _request?: APIRequest;\n  readonly _tracing: Tracing;\n  private _closeReason: string | undefined;\n  _timeoutSettings: TimeoutSettings;\n\n  static from(channel: channels.APIRequestContextChannel): APIRequestContext {\n    return (channel as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.APIRequestContextInitializer) {\n    super(parent, type, guid, initializer);\n    this._tracing = Tracing.from(initializer.tracing);\n    this._timeoutSettings = new TimeoutSettings(this._platform);\n  }\n\n  async [Symbol.asyncDispose]() {\n    await this.dispose();\n  }\n\n  async dispose(options: { reason?: string } = {}): Promise<void> {\n    this._closeReason = options.reason;\n    await this._instrumentation.runBeforeCloseRequestContext(this);\n    try {\n      await this._channel.dispose(options);\n    } catch (e) {\n      if (isTargetClosedError(e))\n        return;\n      throw e;\n    }\n    this._tracing._resetStackCounter();\n    this._request?._contexts.delete(this);\n  }\n\n  async delete(url: string, options?: RequestWithBodyOptions): Promise<APIResponse> {\n    return await this.fetch(url, {\n      ...options,\n      method: 'DELETE',\n    });\n  }\n\n  async head(url: string, options?: RequestWithBodyOptions): Promise<APIResponse> {\n    return await this.fetch(url, {\n      ...options,\n      method: 'HEAD',\n    });\n  }\n\n  async get(url: string, options?: RequestWithBodyOptions): Promise<APIResponse> {\n    return await this.fetch(url, {\n      ...options,\n      method: 'GET',\n    });\n  }\n\n  async patch(url: string, options?: RequestWithBodyOptions): Promise<APIResponse> {\n    return await this.fetch(url, {\n      ...options,\n      method: 'PATCH',\n    });\n  }\n\n  async post(url: string, options?: RequestWithBodyOptions): Promise<APIResponse> {\n    return await this.fetch(url, {\n      ...options,\n      method: 'POST',\n    });\n  }\n\n  async put(url: string, options?: RequestWithBodyOptions): Promise<APIResponse> {\n    return await this.fetch(url, {\n      ...options,\n      method: 'PUT',\n    });\n  }\n\n  async fetch(urlOrRequest: string | api.Request, options: FetchOptions = {}): Promise<APIResponse> {\n    const url = isString(urlOrRequest) ? urlOrRequest : undefined;\n    const request = isString(urlOrRequest) ? undefined : urlOrRequest;\n    return await this._innerFetch({ url, request, ...options });\n  }\n\n  async _innerFetch(options: FetchOptions & { url?: string, request?: api.Request } = {}): Promise<APIResponse> {\n    return await this._wrapApiCall(async () => {\n      if (this._closeReason)\n        throw new TargetClosedError(this._closeReason);\n      assert(options.request || typeof options.url === 'string', 'First argument must be either URL string or Request');\n      assert((options.data === undefined ? 0 : 1) + (options.form === undefined ? 0 : 1) + (options.multipart === undefined ? 0 : 1) <= 1, `Only one of 'data', 'form' or 'multipart' can be specified`);\n      assert(options.maxRedirects === undefined || options.maxRedirects >= 0, `'maxRedirects' must be greater than or equal to '0'`);\n      assert(options.maxRetries === undefined || options.maxRetries >= 0, `'maxRetries' must be greater than or equal to '0'`);\n      const url = options.url !== undefined ? options.url : options.request!.url();\n      const method = options.method || options.request?.method();\n      let encodedParams = undefined;\n      if (typeof options.params === 'string')\n        encodedParams = options.params;\n      else if (options.params instanceof URLSearchParams)\n        encodedParams = options.params.toString();\n      // Cannot call allHeaders() here as the request may be paused inside route handler.\n      const headersObj = options.headers || options.request?.headers();\n      const headers = headersObj ? headersObjectToArray(headersObj) : undefined;\n      let jsonData: any;\n      let formData: channels.NameValue[] | undefined;\n      let multipartData: channels.FormField[] | undefined;\n      let postDataBuffer: Buffer | undefined;\n      if (options.data !== undefined) {\n        if (isString(options.data)) {\n          if (isJsonContentType(headers))\n            jsonData = isJsonParsable(options.data) ? options.data : JSON.stringify(options.data);\n          else\n            postDataBuffer = Buffer.from(options.data, 'utf8');\n        } else if (Buffer.isBuffer(options.data)) {\n          postDataBuffer = options.data;\n        } else if (typeof options.data === 'object' || typeof options.data === 'number' || typeof options.data === 'boolean') {\n          jsonData = JSON.stringify(options.data);\n        } else {\n          throw new Error(`Unexpected 'data' type`);\n        }\n      } else if (options.form) {\n        if (globalThis.FormData && options.form instanceof FormData) {\n          formData = [];\n          for (const [name, value] of options.form.entries()) {\n            if (typeof value !== 'string')\n              throw new Error(`Expected string for options.form[\"${name}\"], found File. Please use options.multipart instead.`);\n            formData.push({ name, value });\n          }\n        } else {\n          formData = objectToArray(options.form);\n        }\n      } else if (options.multipart) {\n        multipartData = [];\n        if (globalThis.FormData && options.multipart instanceof FormData) {\n          const form = options.multipart;\n          for (const [name, value] of form.entries()) {\n            if (isString(value)) {\n              multipartData.push({ name, value });\n            } else {\n              const file: ServerFilePayload = {\n                name: value.name,\n                mimeType: value.type,\n                buffer: Buffer.from(await value.arrayBuffer()),\n              };\n              multipartData.push({ name, file });\n            }\n          }\n        } else {\n          // Convert file-like values to ServerFilePayload structs.\n          for (const [name, value] of Object.entries(options.multipart))\n            multipartData.push(await toFormField(this._platform, name, value));\n        }\n      }\n      if (postDataBuffer === undefined && jsonData === undefined && formData === undefined && multipartData === undefined)\n        postDataBuffer = options.request?.postDataBuffer() || undefined;\n      const fixtures = {\n        __testHookLookup: (options as any).__testHookLookup\n      };\n      const result = await this._channel.fetch({\n        url,\n        params: typeof options.params === 'object' ? objectToArray(options.params) : undefined,\n        encodedParams,\n        method,\n        headers,\n        postData: postDataBuffer,\n        jsonData,\n        formData,\n        multipartData,\n        timeout: this._timeoutSettings.timeout(options),\n        failOnStatusCode: options.failOnStatusCode,\n        ignoreHTTPSErrors: options.ignoreHTTPSErrors,\n        maxRedirects: options.maxRedirects,\n        maxRetries: options.maxRetries,\n        ...fixtures\n      });\n      return new APIResponse(this, result.response);\n    });\n  }\n\n  async storageState(options: { path?: string, indexedDB?: boolean } = {}): Promise<StorageState> {\n    const state = await this._channel.storageState({ indexedDB: options.indexedDB });\n    if (options.path) {\n      await mkdirIfNeeded(this._platform, options.path);\n      await this._platform.fs().promises.writeFile(options.path, JSON.stringify(state, undefined, 2), 'utf8');\n    }\n    return state;\n  }\n}\n\nasync function toFormField(platform: Platform, name: string, value: string | number | boolean | fs.ReadStream | FilePayload): Promise<channels.FormField> {\n  const typeOfValue = typeof value;\n  if (isFilePayload(value)) {\n    const payload = value as FilePayload;\n    if (!Buffer.isBuffer(payload.buffer))\n      throw new Error(`Unexpected buffer type of 'data.${name}'`);\n    return { name, file: filePayloadToJson(payload) };\n  } else if (typeOfValue === 'string' || typeOfValue === 'number' || typeOfValue === 'boolean') {\n    return { name, value: String(value) };\n  } else {\n    return { name, file: await readStreamToJson(platform, value as fs.ReadStream) };\n  }\n}\n\nfunction isJsonParsable(value: any) {\n  if (typeof value !== 'string')\n    return false;\n  try {\n    JSON.parse(value);\n    return true;\n  } catch (e) {\n    if (e instanceof SyntaxError)\n      return false;\n    else\n      throw e;\n  }\n}\n\nexport class APIResponse implements api.APIResponse {\n  private readonly _initializer: channels.APIResponse;\n  private readonly _headers: RawHeaders;\n  readonly _request: APIRequestContext;\n\n  constructor(context: APIRequestContext, initializer: channels.APIResponse) {\n    this._request = context;\n    this._initializer = initializer;\n    this._headers = new RawHeaders(this._initializer.headers);\n\n    if (context._platform.inspectCustom)\n      (this as any)[context._platform.inspectCustom] = () => this._inspect();\n  }\n\n  ok(): boolean {\n    return this._initializer.status >= 200 && this._initializer.status <= 299;\n  }\n\n  url(): string {\n    return this._initializer.url;\n  }\n\n  status(): number {\n    return this._initializer.status;\n  }\n\n  statusText(): string {\n    return this._initializer.statusText;\n  }\n\n  headers(): Headers {\n    return this._headers.headers();\n  }\n\n  headersArray(): HeadersArray {\n    return this._headers.headersArray();\n  }\n\n  async body(): Promise<Buffer> {\n    return await this._request._wrapApiCall(async () => {\n      try {\n        const result = await this._request._channel.fetchResponseBody({ fetchUid: this._fetchUid() });\n        if (result.binary === undefined)\n          throw new Error('Response has been disposed');\n        return result.binary;\n      } catch (e) {\n        if (isTargetClosedError(e))\n          throw new Error('Response has been disposed');\n        throw e;\n      }\n    }, { internal: true });\n  }\n\n  async text(): Promise<string> {\n    const content = await this.body();\n    return content.toString('utf8');\n  }\n\n  async json(): Promise<object> {\n    const content = await this.text();\n    return JSON.parse(content);\n  }\n\n  async [Symbol.asyncDispose]() {\n    await this.dispose();\n  }\n\n  async dispose(): Promise<void> {\n    await this._request._channel.disposeAPIResponse({ fetchUid: this._fetchUid() });\n  }\n\n  private _inspect() {\n    const headers = this.headersArray().map(({ name, value }) => `  ${name}: ${value}`);\n    return `APIResponse: ${this.status()} ${this.statusText()}\\n${headers.join('\\n')}`;\n  }\n\n  _fetchUid(): string {\n    return this._initializer.fetchUid;\n  }\n\n  async _fetchLog(): Promise<string[]> {\n    const { log } = await this._request._channel.fetchLog({ fetchUid: this._fetchUid() });\n    return log;\n  }\n}\n\ntype ServerFilePayload = NonNullable<channels.FormField['file']>;\n\nfunction filePayloadToJson(payload: FilePayload): ServerFilePayload {\n  return {\n    name: payload.name,\n    mimeType: payload.mimeType,\n    buffer: payload.buffer,\n  };\n}\n\nasync function readStreamToJson(platform: Platform, stream: fs.ReadStream): Promise<ServerFilePayload> {\n  const buffer = await new Promise<Buffer>((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    stream.on('data', chunk => chunks.push(chunk as Buffer));\n    stream.on('end', () => resolve(Buffer.concat(chunks)));\n    stream.on('error', err => reject(err));\n  });\n  const streamPath: string = Buffer.isBuffer(stream.path) ? stream.path.toString('utf8') : stream.path;\n  return {\n    name: platform.path().basename(streamPath),\n    buffer,\n  };\n}\n\nfunction isJsonContentType(headers?: HeadersArray): boolean {\n  if (!headers)\n    return false;\n  for (const { name, value } of headers) {\n    if (name.toLocaleLowerCase() === 'content-type')\n      return value === 'application/json';\n  }\n  return false;\n}\n\nfunction objectToArray(map?: { [key: string]: any }): NameValue[] | undefined {\n  if (!map)\n    return undefined;\n  const result = [];\n  for (const [name, value] of Object.entries(map)) {\n    if (value !== undefined)\n      result.push({ name, value: String(value) });\n  }\n  return result;\n}\n\nfunction isFilePayload(value: any): boolean {\n  return typeof value === 'object' && value['name'] && value['mimeType'] && value['buffer'];\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TimeoutError } from './errors';\nimport { rewriteErrorMessage } from '../utils/isomorphic/stackTrace';\n\nimport type { ChannelOwner } from './channelOwner';\nimport type * as channels from '@protocol/channels';\nimport type { EventEmitter } from 'events';\nimport type { Zone } from './platform';\n\nexport class Waiter {\n  private _dispose: (() => void)[];\n  private _failures: Promise<any>[] = [];\n  private _immediateError?: Error;\n  private _logs: string[] = [];\n  private _channelOwner: ChannelOwner<channels.EventTargetChannel>;\n  private _waitId: string;\n  private _error: string | undefined;\n  private _savedZone: Zone;\n\n  constructor(channelOwner: ChannelOwner<channels.EventTargetChannel>, event: string) {\n    this._waitId = channelOwner._platform.createGuid();\n    this._channelOwner = channelOwner;\n    this._savedZone = channelOwner._platform.zones.current().pop();\n\n    this._channelOwner._channel.waitForEventInfo({ info: { waitId: this._waitId, phase: 'before', event } }).catch(() => {});\n    this._dispose = [\n      () => this._channelOwner._wrapApiCall(async () => {\n        await this._channelOwner._channel.waitForEventInfo({ info: { waitId: this._waitId, phase: 'after', error: this._error } });\n      }, { internal: true }).catch(() => {}),\n    ];\n  }\n\n  static createForEvent(channelOwner: ChannelOwner<channels.EventTargetChannel>, event: string) {\n    return new Waiter(channelOwner, event);\n  }\n\n  async waitForEvent<T = void>(emitter: EventEmitter, event: string, predicate?: (arg: T) => boolean | Promise<boolean>): Promise<T> {\n    const { promise, dispose } = waitForEvent(emitter, event, this._savedZone, predicate);\n    return await this.waitForPromise(promise, dispose);\n  }\n\n  rejectOnEvent<T = void>(emitter: EventEmitter, event: string, error: Error | (() => Error), predicate?: (arg: T) => boolean | Promise<boolean>) {\n    const { promise, dispose } = waitForEvent(emitter, event, this._savedZone, predicate);\n    this._rejectOn(promise.then(() => { throw (typeof error === 'function' ? error() : error); }), dispose);\n  }\n\n  rejectOnTimeout(timeout: number, message: string) {\n    if (!timeout)\n      return;\n    const { promise, dispose } = waitForTimeout(timeout);\n    this._rejectOn(promise.then(() => { throw new TimeoutError(message); }), dispose);\n  }\n\n  rejectImmediately(error: Error) {\n    this._immediateError = error;\n  }\n\n  dispose() {\n    for (const dispose of this._dispose)\n      dispose();\n  }\n\n  async waitForPromise<T>(promise: Promise<T>, dispose?: () => void): Promise<T> {\n    try {\n      if (this._immediateError)\n        throw this._immediateError;\n      const result = await Promise.race([promise, ...this._failures]);\n      if (dispose)\n        dispose();\n      return result;\n    } catch (e) {\n      if (dispose)\n        dispose();\n      this._error = e.message;\n      this.dispose();\n      rewriteErrorMessage(e, e.message + formatLogRecording(this._logs));\n      throw e;\n    }\n  }\n\n  log(s: string) {\n    this._logs.push(s);\n    this._channelOwner._wrapApiCall(async () => {\n      await this._channelOwner._channel.waitForEventInfo({ info: { waitId: this._waitId, phase: 'log', message: s } });\n    }, { internal: true }).catch(() => {});\n  }\n\n  private _rejectOn(promise: Promise<any>, dispose?: () => void) {\n    this._failures.push(promise);\n    if (dispose)\n      this._dispose.push(dispose);\n  }\n}\n\nfunction waitForEvent<T = void>(emitter: EventEmitter, event: string, savedZone: Zone, predicate?: (arg: T) => boolean | Promise<boolean>): { promise: Promise<T>, dispose: () => void } {\n  let listener: (eventArg: any) => void;\n  const promise = new Promise<T>((resolve, reject) => {\n    listener = async (eventArg: any) => {\n      await savedZone.run(async () => {\n        try {\n          if (predicate && !(await predicate(eventArg)))\n            return;\n          emitter.removeListener(event, listener);\n          resolve(eventArg);\n        } catch (e) {\n          emitter.removeListener(event, listener);\n          reject(e);\n        }\n      });\n    };\n    emitter.addListener(event, listener);\n  });\n  const dispose = () => emitter.removeListener(event, listener);\n  return { promise, dispose };\n}\n\nfunction waitForTimeout(timeout: number): { promise: Promise<void>, dispose: () => void } {\n  let timeoutId: any;\n  const promise = new Promise<void>(resolve => timeoutId = setTimeout(resolve, timeout));\n  const dispose = () => clearTimeout(timeoutId);\n  return { promise, dispose };\n}\n\nfunction formatLogRecording(log: string[]): string {\n  if (!log.length)\n    return '';\n  const header = ` logs `;\n  const headerLength = 60;\n  const leftLength = (headerLength - header.length) / 2;\n  const rightLength = headerLength - header.length - leftLength;\n  return `\\n${'='.repeat(leftLength)}${header}${'='.repeat(rightLength)}\\n${log.join('\\n')}\\n${'='.repeat(headerLength)}`;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChannelOwner } from './channelOwner';\nimport { TargetClosedError } from './errors';\nimport { Events } from './events';\nimport { JSHandle, assertMaxArguments, parseResult, serializeArgument } from './jsHandle';\nimport { LongStandingScope } from '../utils/isomorphic/manualPromise';\n\nimport type { BrowserContext } from './browserContext';\nimport type { Page } from './page';\nimport type * as structs from '../../types/structs';\nimport type * as api from '../../types/types';\nimport type * as channels from '@protocol/channels';\n\n\nexport class Worker extends ChannelOwner<channels.WorkerChannel> implements api.Worker {\n  _page: Page | undefined;  // Set for web workers.\n  _context: BrowserContext | undefined;  // Set for service workers.\n  readonly _closedScope = new LongStandingScope();\n\n  static from(worker: channels.WorkerChannel): Worker {\n    return (worker as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.WorkerInitializer) {\n    super(parent, type, guid, initializer);\n    this._channel.on('close', () => {\n      if (this._page)\n        this._page._workers.delete(this);\n      if (this._context)\n        this._context._serviceWorkers.delete(this);\n      this.emit(Events.Worker.Close, this);\n    });\n    this.once(Events.Worker.Close, () => this._closedScope.close(this._page?._closeErrorWithReason() || new TargetClosedError()));\n  }\n\n  url(): string {\n    return this._initializer.url;\n  }\n\n  async evaluate<R, Arg>(pageFunction: structs.PageFunction<Arg, R>, arg?: Arg): Promise<R> {\n    assertMaxArguments(arguments.length, 2);\n    const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === 'function', arg: serializeArgument(arg) });\n    return parseResult(result.value);\n  }\n\n  async evaluateHandle<R, Arg>(pageFunction: structs.PageFunction<Arg, R>, arg?: Arg): Promise<structs.SmartHandle<R>> {\n    assertMaxArguments(arguments.length, 2);\n    const result = await this._channel.evaluateExpressionHandle({ expression: String(pageFunction), isFunction: typeof pageFunction === 'function', arg: serializeArgument(arg) });\n    return JSHandle.from(result.handle) as any as structs.SmartHandle<R>;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChannelOwner } from './channelOwner';\nimport { isTargetClosedError } from './errors';\nimport { Events } from './events';\nimport { APIResponse } from './fetch';\nimport { Frame } from './frame';\nimport { Waiter } from './waiter';\nimport { Worker } from './worker';\nimport { assert } from '../utils/isomorphic/assert';\nimport { headersObjectToArray } from '../utils/isomorphic/headers';\nimport { urlMatches } from '../utils/isomorphic/urlMatch';\nimport { LongStandingScope, ManualPromise } from '../utils/isomorphic/manualPromise';\nimport { MultiMap } from '../utils/isomorphic/multimap';\nimport { isRegExp, isString } from '../utils/isomorphic/rtti';\nimport { rewriteErrorMessage } from '../utils/isomorphic/stackTrace';\nimport { getMimeTypeForPath } from '../utils/isomorphic/mimeType';\n\nimport type { BrowserContext } from './browserContext';\nimport type { Page } from './page';\nimport type { Headers, RemoteAddr, SecurityDetails, WaitForEventOptions } from './types';\nimport type { Serializable } from '../../types/structs';\nimport type * as api from '../../types/types';\nimport type { HeadersArray } from '../utils/isomorphic/types';\nimport type { URLMatch } from '../utils/isomorphic/urlMatch';\nimport type * as channels from '@protocol/channels';\nimport type { Platform, Zone } from './platform';\n\nexport type NetworkCookie = {\n  name: string,\n  value: string,\n  domain: string,\n  path: string,\n  expires: number,\n  httpOnly: boolean,\n  secure: boolean,\n  sameSite: 'Strict' | 'Lax' | 'None'\n};\n\nexport type SetNetworkCookieParam = {\n  name: string,\n  value: string,\n  url?: string,\n  domain?: string,\n  path?: string,\n  expires?: number,\n  httpOnly?: boolean,\n  secure?: boolean,\n  sameSite?: 'Strict' | 'Lax' | 'None'\n};\n\nexport type ClearNetworkCookieOptions = {\n  name?: string | RegExp,\n  domain?: string | RegExp,\n  path?: string | RegExp,\n};\n\ntype SerializedFallbackOverrides = {\n  url?: string;\n  method?: string;\n  headers?: Headers;\n  postDataBuffer?: Buffer;\n};\n\ntype FallbackOverrides = {\n  url?: string;\n  method?: string;\n  headers?: Headers;\n  postData?: string | Buffer | Serializable;\n};\n\nexport class Request extends ChannelOwner<channels.RequestChannel> implements api.Request {\n  private _redirectedFrom: Request | null = null;\n  private _redirectedTo: Request | null = null;\n  _failureText: string | null = null;\n  private _provisionalHeaders: RawHeaders;\n  private _actualHeadersPromise: Promise<RawHeaders> | undefined;\n  _timing: ResourceTiming;\n  private _fallbackOverrides: SerializedFallbackOverrides = {};\n\n  static from(request: channels.RequestChannel): Request {\n    return (request as any)._object;\n  }\n\n  static fromNullable(request: channels.RequestChannel | undefined): Request | null {\n    return request ? Request.from(request) : null;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.RequestInitializer) {\n    super(parent, type, guid, initializer);\n    this._redirectedFrom = Request.fromNullable(initializer.redirectedFrom);\n    if (this._redirectedFrom)\n      this._redirectedFrom._redirectedTo = this;\n    this._provisionalHeaders = new RawHeaders(initializer.headers);\n    this._timing = {\n      startTime: 0,\n      domainLookupStart: -1,\n      domainLookupEnd: -1,\n      connectStart: -1,\n      secureConnectionStart: -1,\n      connectEnd: -1,\n      requestStart: -1,\n      responseStart: -1,\n      responseEnd: -1,\n    };\n  }\n\n  url(): string {\n    return this._fallbackOverrides.url || this._initializer.url;\n  }\n\n  resourceType(): string {\n    return this._initializer.resourceType;\n  }\n\n  method(): string {\n    return this._fallbackOverrides.method || this._initializer.method;\n  }\n\n  postData(): string | null {\n    return (this._fallbackOverrides.postDataBuffer || this._initializer.postData)?.toString('utf-8') || null;\n  }\n\n  postDataBuffer(): Buffer | null {\n    return this._fallbackOverrides.postDataBuffer || this._initializer.postData || null;\n  }\n\n  postDataJSON(): Object | null {\n    const postData = this.postData();\n    if (!postData)\n      return null;\n\n    const contentType = this.headers()['content-type'];\n    if (contentType?.includes('application/x-www-form-urlencoded')) {\n      const entries: Record<string, string> = {};\n      const parsed = new URLSearchParams(postData);\n      for (const [k, v] of parsed.entries())\n        entries[k] = v;\n      return entries;\n    }\n\n    try {\n      return JSON.parse(postData);\n    } catch (e) {\n      throw new Error('POST data is not a valid JSON object: ' + postData);\n    }\n  }\n\n  /**\n   * @deprecated\n   */\n  headers(): Headers {\n    if (this._fallbackOverrides.headers)\n      return RawHeaders._fromHeadersObjectLossy(this._fallbackOverrides.headers).headers();\n    return this._provisionalHeaders.headers();\n  }\n\n  async _actualHeaders(): Promise<RawHeaders> {\n    if (this._fallbackOverrides.headers)\n      return RawHeaders._fromHeadersObjectLossy(this._fallbackOverrides.headers);\n\n    if (!this._actualHeadersPromise) {\n      this._actualHeadersPromise = this._wrapApiCall(async () => {\n        return new RawHeaders((await this._channel.rawRequestHeaders()).headers);\n      }, { internal: true });\n    }\n    return await this._actualHeadersPromise;\n  }\n\n  async allHeaders(): Promise<Headers> {\n    return (await this._actualHeaders()).headers();\n  }\n\n  async headersArray(): Promise<HeadersArray> {\n    return (await this._actualHeaders()).headersArray();\n  }\n\n  async headerValue(name: string): Promise<string | null> {\n    return (await this._actualHeaders()).get(name);\n  }\n\n  async response(): Promise<Response | null> {\n    return Response.fromNullable((await this._channel.response()).response);\n  }\n\n  async _internalResponse(): Promise<Response | null> {\n    return Response.fromNullable((await this._channel.response()).response);\n  }\n\n  frame(): Frame {\n    if (!this._initializer.frame) {\n      assert(this.serviceWorker());\n      throw new Error('Service Worker requests do not have an associated frame.');\n    }\n    const frame = Frame.from(this._initializer.frame);\n    if (!frame._page) {\n      throw new Error([\n        'Frame for this navigation request is not available, because the request',\n        'was issued before the frame is created. You can check whether the request',\n        'is a navigation request by calling isNavigationRequest() method.',\n      ].join('\\n'));\n    }\n    return frame;\n  }\n\n  _safePage(): Page | null {\n    return Frame.fromNullable(this._initializer.frame)?._page || null;\n  }\n\n  serviceWorker(): Worker | null {\n    return this._initializer.serviceWorker ? Worker.from(this._initializer.serviceWorker) : null;\n  }\n\n  isNavigationRequest(): boolean {\n    return this._initializer.isNavigationRequest;\n  }\n\n  redirectedFrom(): Request | null {\n    return this._redirectedFrom;\n  }\n\n  redirectedTo(): Request | null {\n    return this._redirectedTo;\n  }\n\n  failure(): { errorText: string; } | null {\n    if (this._failureText === null)\n      return null;\n    return {\n      errorText: this._failureText\n    };\n  }\n\n  timing(): ResourceTiming {\n    return this._timing;\n  }\n\n  async sizes(): Promise<RequestSizes> {\n    const response = await this.response();\n    if (!response)\n      throw new Error('Unable to fetch sizes for failed request');\n    return (await response._channel.sizes()).sizes;\n  }\n\n  _setResponseEndTiming(responseEndTiming: number) {\n    this._timing.responseEnd = responseEndTiming;\n    if (this._timing.responseStart === -1)\n      this._timing.responseStart = responseEndTiming;\n  }\n\n  _finalRequest(): Request {\n    return this._redirectedTo ? this._redirectedTo._finalRequest() : this;\n  }\n\n  _applyFallbackOverrides(overrides: FallbackOverrides) {\n    if (overrides.url)\n      this._fallbackOverrides.url = overrides.url;\n    if (overrides.method)\n      this._fallbackOverrides.method = overrides.method;\n    if (overrides.headers)\n      this._fallbackOverrides.headers = overrides.headers;\n\n    if (isString(overrides.postData))\n      this._fallbackOverrides.postDataBuffer = Buffer.from(overrides.postData, 'utf-8');\n    else if (overrides.postData instanceof Buffer)\n      this._fallbackOverrides.postDataBuffer = overrides.postData;\n    else if (overrides.postData)\n      this._fallbackOverrides.postDataBuffer = Buffer.from(JSON.stringify(overrides.postData), 'utf-8');\n  }\n\n  _fallbackOverridesForContinue() {\n    return this._fallbackOverrides;\n  }\n\n  _targetClosedScope(): LongStandingScope {\n    return this.serviceWorker()?._closedScope || this._safePage()?._closedOrCrashedScope || new LongStandingScope();\n  }\n}\n\nexport class Route extends ChannelOwner<channels.RouteChannel> implements api.Route {\n  private _handlingPromise: ManualPromise<boolean> | null = null;\n  _context!: BrowserContext;\n  _didThrow: boolean = false;\n\n  static from(route: channels.RouteChannel): Route {\n    return (route as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.RouteInitializer) {\n    super(parent, type, guid, initializer);\n  }\n\n  request(): Request {\n    return Request.from(this._initializer.request);\n  }\n\n  private async _raceWithTargetClose(promise: Promise<any>): Promise<void> {\n    // When page closes or crashes, we catch any potential rejects from this Route.\n    // Note that page could be missing when routing popup's initial request that\n    // does not have a Page initialized just yet.\n    return await this.request()._targetClosedScope().safeRace(promise);\n  }\n\n  async _startHandling(): Promise<boolean> {\n    this._handlingPromise = new ManualPromise();\n    return await this._handlingPromise;\n  }\n\n  async fallback(options: FallbackOverrides = {}) {\n    this._checkNotHandled();\n    this.request()._applyFallbackOverrides(options);\n    this._reportHandled(false);\n  }\n\n  async abort(errorCode?: string) {\n    await this._handleRoute(async () => {\n      await this._raceWithTargetClose(this._channel.abort({ errorCode }));\n    });\n  }\n\n  async _redirectNavigationRequest(url: string) {\n    await this._handleRoute(async () => {\n      await this._raceWithTargetClose(this._channel.redirectNavigationRequest({ url }));\n    });\n  }\n\n  async fetch(options: FallbackOverrides & { maxRedirects?: number, maxRetries?: number, timeout?: number } = {}): Promise<APIResponse> {\n    return await this._wrapApiCall(async () => {\n      return await this._context.request._innerFetch({ request: this.request(), data: options.postData, ...options });\n    });\n  }\n\n  async fulfill(options: { response?: api.APIResponse, status?: number, headers?: Headers, contentType?: string, body?: string | Buffer, json?: any, path?: string } = {}) {\n    await this._handleRoute(async () => {\n      await this._innerFulfill(options);\n    });\n  }\n\n  private async _handleRoute(callback: () => Promise<void>) {\n    this._checkNotHandled();\n    try {\n      await callback();\n      this._reportHandled(true);\n    } catch (e) {\n      this._didThrow = true;\n      throw e;\n    }\n  }\n\n  private async _innerFulfill(options: { response?: api.APIResponse, status?: number, headers?: Headers, contentType?: string, body?: string | Buffer, json?: any, path?: string } = {}): Promise<void> {\n    let fetchResponseUid;\n    let { status: statusOption, headers: headersOption, body } = options;\n\n    if (options.json !== undefined) {\n      assert(options.body === undefined, 'Can specify either body or json parameters');\n      body = JSON.stringify(options.json);\n    }\n\n    if (options.response instanceof APIResponse) {\n      statusOption ??= options.response.status();\n      headersOption ??= options.response.headers();\n      if (body === undefined && options.path === undefined) {\n        if (options.response._request._connection === this._connection)\n          fetchResponseUid = (options.response as APIResponse)._fetchUid();\n        else\n          body = await options.response.body();\n      }\n    }\n\n    let isBase64 = false;\n    let length = 0;\n    if (options.path) {\n      const buffer = await this._platform.fs().promises.readFile(options.path);\n      body = buffer.toString('base64');\n      isBase64 = true;\n      length = buffer.length;\n    } else if (isString(body)) {\n      isBase64 = false;\n      length = Buffer.byteLength(body);\n    } else if (body) {\n      length = body.length;\n      body = body.toString('base64');\n      isBase64 = true;\n    }\n\n    const headers: Headers = {};\n    for (const header of Object.keys(headersOption || {}))\n      headers[header.toLowerCase()] = String(headersOption![header]);\n    if (options.contentType)\n      headers['content-type'] = String(options.contentType);\n    else if (options.json)\n      headers['content-type'] = 'application/json';\n    else if (options.path)\n      headers['content-type'] = getMimeTypeForPath(options.path) || 'application/octet-stream';\n    if (length && !('content-length' in headers))\n      headers['content-length'] = String(length);\n\n    await this._raceWithTargetClose(this._channel.fulfill({\n      status: statusOption || 200,\n      headers: headersObjectToArray(headers),\n      body,\n      isBase64,\n      fetchResponseUid\n    }));\n  }\n\n  async continue(options: FallbackOverrides = {}) {\n    await this._handleRoute(async () => {\n      this.request()._applyFallbackOverrides(options);\n      await this._innerContinue(false /* isFallback */);\n    });\n  }\n\n  _checkNotHandled() {\n    if (!this._handlingPromise)\n      throw new Error('Route is already handled!');\n  }\n\n  _reportHandled(done: boolean) {\n    const chain = this._handlingPromise!;\n    this._handlingPromise = null;\n    chain.resolve(done);\n  }\n\n  async _innerContinue(isFallback: boolean) {\n    const options = this.request()._fallbackOverridesForContinue();\n    return await this._raceWithTargetClose(this._channel.continue({\n      url: options.url,\n      method: options.method,\n      headers: options.headers ? headersObjectToArray(options.headers) : undefined,\n      postData: options.postDataBuffer,\n      isFallback,\n    }));\n  }\n}\n\nexport class WebSocketRoute extends ChannelOwner<channels.WebSocketRouteChannel> implements api.WebSocketRoute {\n  static from(route: channels.WebSocketRouteChannel): WebSocketRoute {\n    return (route as any)._object;\n  }\n\n  private _onPageMessage?: (message: string | Buffer) => any;\n  private _onPageClose?: (code: number | undefined, reason: string | undefined) => any;\n  private _onServerMessage?: (message: string | Buffer) => any;\n  private _onServerClose?: (code: number | undefined, reason: string | undefined) => any;\n  private _server: api.WebSocketRoute;\n  private _connected = false;\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.WebSocketRouteInitializer) {\n    super(parent, type, guid, initializer);\n\n    this._server = {\n      onMessage: (handler: (message: string | Buffer) => any) => {\n        this._onServerMessage = handler;\n      },\n\n      onClose: (handler: (code: number | undefined, reason: string | undefined) => any) => {\n        this._onServerClose = handler;\n      },\n\n      connectToServer: () => {\n        throw new Error(`connectToServer must be called on the page-side WebSocketRoute`);\n      },\n\n      url: () => {\n        return this._initializer.url;\n      },\n\n      close: async (options: { code?: number, reason?: string } = {}) => {\n        await this._channel.closeServer({ ...options, wasClean: true }).catch(() => {});\n      },\n\n      send: (message: string | Buffer) => {\n        if (isString(message))\n          this._channel.sendToServer({ message, isBase64: false }).catch(() => {});\n        else\n          this._channel.sendToServer({ message: message.toString('base64'), isBase64: true }).catch(() => {});\n      },\n\n      async [Symbol.asyncDispose]() {\n        await this.close();\n      },\n    };\n\n    this._channel.on('messageFromPage', ({ message, isBase64 }) => {\n      if (this._onPageMessage)\n        this._onPageMessage(isBase64 ? Buffer.from(message, 'base64') : message);\n      else if (this._connected)\n        this._channel.sendToServer({ message, isBase64 }).catch(() => {});\n    });\n\n    this._channel.on('messageFromServer', ({ message, isBase64 }) => {\n      if (this._onServerMessage)\n        this._onServerMessage(isBase64 ? Buffer.from(message, 'base64') : message);\n      else\n        this._channel.sendToPage({ message, isBase64 }).catch(() => {});\n    });\n\n    this._channel.on('closePage', ({ code, reason, wasClean }) => {\n      if (this._onPageClose)\n        this._onPageClose(code, reason);\n      else\n        this._channel.closeServer({ code, reason, wasClean }).catch(() => {});\n    });\n\n    this._channel.on('closeServer', ({ code, reason, wasClean }) => {\n      if (this._onServerClose)\n        this._onServerClose(code, reason);\n      else\n        this._channel.closePage({ code, reason, wasClean }).catch(() => {});\n    });\n  }\n\n  url() {\n    return this._initializer.url;\n  }\n\n  async close(options: { code?: number, reason?: string } = {}) {\n    await this._channel.closePage({ ...options, wasClean: true }).catch(() => {});\n  }\n\n  connectToServer() {\n    if (this._connected)\n      throw new Error('Already connected to the server');\n    this._connected = true;\n    this._channel.connect().catch(() => {});\n    return this._server;\n  }\n\n  send(message: string | Buffer) {\n    if (isString(message))\n      this._channel.sendToPage({ message, isBase64: false }).catch(() => {});\n    else\n      this._channel.sendToPage({ message: message.toString('base64'), isBase64: true }).catch(() => {});\n  }\n\n  onMessage(handler: (message: string | Buffer) => any) {\n    this._onPageMessage = handler;\n  }\n\n  onClose(handler: (code: number | undefined, reason: string | undefined) => any) {\n    this._onPageClose = handler;\n  }\n\n  async [Symbol.asyncDispose]() {\n    await this.close();\n  }\n\n  async _afterHandle() {\n    if (this._connected)\n      return;\n    // Ensure that websocket is \"open\" and can send messages without an actual server connection.\n    await this._channel.ensureOpened();\n  }\n}\n\nexport class WebSocketRouteHandler {\n  private readonly _baseURL: string | undefined;\n  readonly url: URLMatch;\n  readonly handler: WebSocketRouteHandlerCallback;\n\n  constructor(baseURL: string | undefined, url: URLMatch, handler: WebSocketRouteHandlerCallback) {\n    this._baseURL = baseURL;\n    this.url = url;\n    this.handler = handler;\n  }\n\n  static prepareInterceptionPatterns(handlers: WebSocketRouteHandler[]) {\n    const patterns: channels.BrowserContextSetWebSocketInterceptionPatternsParams['patterns'] = [];\n    let all = false;\n    for (const handler of handlers) {\n      if (isString(handler.url))\n        patterns.push({ glob: handler.url });\n      else if (isRegExp(handler.url))\n        patterns.push({ regexSource: handler.url.source, regexFlags: handler.url.flags });\n      else\n        all = true;\n    }\n    if (all)\n      return [{ glob: '**/*' }];\n    return patterns;\n  }\n\n  public matches(wsURL: string): boolean {\n    return urlMatches(this._baseURL, wsURL, this.url, true);\n  }\n\n  public async handle(webSocketRoute: WebSocketRoute) {\n    const handler = this.handler;\n    await handler(webSocketRoute);\n    await webSocketRoute._afterHandle();\n  }\n}\n\nexport type RouteHandlerCallback = (route: Route, request: Request) => Promise<any> | void;\nexport type WebSocketRouteHandlerCallback = (ws: WebSocketRoute) => Promise<any> | void;\n\nexport type ResourceTiming = {\n  startTime: number;\n  domainLookupStart: number;\n  domainLookupEnd: number;\n  connectStart: number;\n  secureConnectionStart: number;\n  connectEnd: number;\n  requestStart: number;\n  responseStart: number;\n  responseEnd: number;\n};\n\nexport type RequestSizes = {\n  requestBodySize: number;\n  requestHeadersSize: number;\n  responseBodySize: number;\n  responseHeadersSize: number;\n};\n\nexport class Response extends ChannelOwner<channels.ResponseChannel> implements api.Response {\n  private _provisionalHeaders: RawHeaders;\n  private _actualHeadersPromise: Promise<RawHeaders> | undefined;\n  private _request: Request;\n  readonly _finishedPromise = new ManualPromise<null>();\n\n  static from(response: channels.ResponseChannel): Response {\n    return (response as any)._object;\n  }\n\n  static fromNullable(response: channels.ResponseChannel | undefined): Response | null {\n    return response ? Response.from(response) : null;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.ResponseInitializer) {\n    super(parent, type, guid, initializer);\n    this._provisionalHeaders = new RawHeaders(initializer.headers);\n    this._request = Request.from(this._initializer.request);\n    Object.assign(this._request._timing, this._initializer.timing);\n  }\n\n  url(): string {\n    return this._initializer.url;\n  }\n\n  ok(): boolean {\n    // Status 0 is for file:// URLs\n    return this._initializer.status === 0 || (this._initializer.status >= 200 && this._initializer.status <= 299);\n  }\n\n  status(): number {\n    return this._initializer.status;\n  }\n\n  statusText(): string {\n    return this._initializer.statusText;\n  }\n\n  fromServiceWorker(): boolean {\n    return this._initializer.fromServiceWorker;\n  }\n\n  /**\n   * @deprecated\n   */\n  headers(): Headers {\n    return this._provisionalHeaders.headers();\n  }\n\n  async _actualHeaders(): Promise<RawHeaders> {\n    if (!this._actualHeadersPromise) {\n      this._actualHeadersPromise = (async () => {\n        return new RawHeaders((await this._channel.rawResponseHeaders()).headers);\n      })();\n    }\n    return await this._actualHeadersPromise;\n  }\n\n  async allHeaders(): Promise<Headers> {\n    return (await this._actualHeaders()).headers();\n  }\n\n  async headersArray(): Promise<HeadersArray> {\n    return (await this._actualHeaders()).headersArray().slice();\n  }\n\n  async headerValue(name: string): Promise<string | null> {\n    return (await this._actualHeaders()).get(name);\n  }\n\n  async headerValues(name: string): Promise<string[]> {\n    return (await this._actualHeaders()).getAll(name);\n  }\n\n  async finished(): Promise<null> {\n    return await this.request()._targetClosedScope().race(this._finishedPromise);\n  }\n\n  async body(): Promise<Buffer> {\n    return (await this._channel.body()).binary;\n  }\n\n  async text(): Promise<string> {\n    const content = await this.body();\n    return content.toString('utf8');\n  }\n\n  async json(): Promise<object> {\n    const content = await this.text();\n    return JSON.parse(content);\n  }\n\n  request(): Request {\n    return this._request;\n  }\n\n  frame(): Frame {\n    return this._request.frame();\n  }\n\n  async serverAddr(): Promise<RemoteAddr|null> {\n    return (await this._channel.serverAddr()).value || null;\n  }\n\n  async securityDetails(): Promise<SecurityDetails|null> {\n    return (await this._channel.securityDetails()).value || null;\n  }\n}\n\nexport class WebSocket extends ChannelOwner<channels.WebSocketChannel> implements api.WebSocket {\n  private _page: Page;\n  private _isClosed: boolean;\n\n  static from(webSocket: channels.WebSocketChannel): WebSocket {\n    return (webSocket as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.WebSocketInitializer) {\n    super(parent, type, guid, initializer);\n    this._isClosed = false;\n    this._page = parent as Page;\n    this._channel.on('frameSent', event => {\n      if (event.opcode === 1)\n        this.emit(Events.WebSocket.FrameSent, { payload: event.data });\n      else if (event.opcode === 2)\n        this.emit(Events.WebSocket.FrameSent, { payload: Buffer.from(event.data, 'base64') });\n    });\n    this._channel.on('frameReceived', event => {\n      if (event.opcode === 1)\n        this.emit(Events.WebSocket.FrameReceived, { payload: event.data });\n      else if (event.opcode === 2)\n        this.emit(Events.WebSocket.FrameReceived, { payload: Buffer.from(event.data, 'base64') });\n    });\n    this._channel.on('socketError', ({ error }) => this.emit(Events.WebSocket.Error, error));\n    this._channel.on('close', () => {\n      this._isClosed = true;\n      this.emit(Events.WebSocket.Close, this);\n    });\n  }\n\n  url(): string {\n    return this._initializer.url;\n  }\n\n  isClosed(): boolean {\n    return this._isClosed;\n  }\n\n  async waitForEvent(event: string, optionsOrPredicate: WaitForEventOptions = {}): Promise<any> {\n    return await this._wrapApiCall(async () => {\n      const timeout = this._page._timeoutSettings.timeout(typeof optionsOrPredicate === 'function' ? {} : optionsOrPredicate);\n      const predicate = typeof optionsOrPredicate === 'function' ? optionsOrPredicate : optionsOrPredicate.predicate;\n      const waiter = Waiter.createForEvent(this, event);\n      waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event \"${event}\"`);\n      if (event !== Events.WebSocket.Error)\n        waiter.rejectOnEvent(this, Events.WebSocket.Error, new Error('Socket error'));\n      if (event !== Events.WebSocket.Close)\n        waiter.rejectOnEvent(this, Events.WebSocket.Close, new Error('Socket closed'));\n      waiter.rejectOnEvent(this._page, Events.Page.Close, () => this._page._closeErrorWithReason());\n      const result = await waiter.waitForEvent(this, event, predicate as any);\n      waiter.dispose();\n      return result;\n    });\n  }\n}\n\nexport function validateHeaders(headers: Headers) {\n  for (const key of Object.keys(headers)) {\n    const value = headers[key];\n    if (!Object.is(value, undefined) && !isString(value))\n      throw new Error(`Expected value of header \"${key}\" to be String, but \"${typeof value}\" is found.`);\n  }\n}\n\nexport class RouteHandler {\n  private handledCount = 0;\n  private readonly _baseURL: string | undefined;\n  private readonly _times: number;\n  readonly url: URLMatch;\n  readonly handler: RouteHandlerCallback;\n  private _ignoreException: boolean = false;\n  private _activeInvocations: Set<{ complete: Promise<void>, route: Route }> = new Set();\n  private _savedZone: Zone;\n\n  constructor(platform: Platform, baseURL: string | undefined, url: URLMatch, handler: RouteHandlerCallback, times: number = Number.MAX_SAFE_INTEGER) {\n    this._baseURL = baseURL;\n    this._times = times;\n    this.url = url;\n    this.handler = handler;\n    this._savedZone = platform.zones.current().pop();\n  }\n\n  static prepareInterceptionPatterns(handlers: RouteHandler[]) {\n    const patterns: channels.BrowserContextSetNetworkInterceptionPatternsParams['patterns'] = [];\n    let all = false;\n    for (const handler of handlers) {\n      if (isString(handler.url))\n        patterns.push({ glob: handler.url });\n      else if (isRegExp(handler.url))\n        patterns.push({ regexSource: handler.url.source, regexFlags: handler.url.flags });\n      else\n        all = true;\n    }\n    if (all)\n      return [{ glob: '**/*' }];\n    return patterns;\n  }\n\n  public matches(requestURL: string): boolean {\n    return urlMatches(this._baseURL, requestURL, this.url);\n  }\n\n  public async handle(route: Route): Promise<boolean> {\n    return await this._savedZone.run(async () => this._handleImpl(route));\n  }\n\n  private async _handleImpl(route: Route): Promise<boolean> {\n    const handlerInvocation = { complete: new ManualPromise(), route } ;\n    this._activeInvocations.add(handlerInvocation);\n    try {\n      return await this._handleInternal(route);\n    } catch (e) {\n      // If the handler was stopped (without waiting for completion), we ignore all exceptions.\n      if (this._ignoreException)\n        return false;\n      if (isTargetClosedError(e)) {\n        // We are failing in the handler because the target close closed.\n        // Give user a hint!\n        rewriteErrorMessage(e, `\"${e.message}\" while running route callback.\\nConsider awaiting \\`await page.unrouteAll({ behavior: 'ignoreErrors' })\\`\\nbefore the end of the test to ignore remaining routes in flight.`);\n      }\n      throw e;\n    } finally {\n      handlerInvocation.complete.resolve();\n      this._activeInvocations.delete(handlerInvocation);\n    }\n  }\n\n  async stop(behavior: 'wait' | 'ignoreErrors') {\n    // When a handler is manually unrouted or its page/context is closed we either\n    // - wait for the current handler invocations to finish\n    // - or do not wait, if the user opted out of it, but swallow all exceptions\n    //   that happen after the unroute/close.\n    if (behavior === 'ignoreErrors') {\n      this._ignoreException = true;\n    } else {\n      const promises = [];\n      for (const activation of this._activeInvocations) {\n        if (!activation.route._didThrow)\n          promises.push(activation.complete);\n      }\n      await Promise.all(promises);\n    }\n  }\n\n  private async _handleInternal(route: Route): Promise<boolean> {\n    ++this.handledCount;\n    const handledPromise = route._startHandling();\n    // Extract handler into a variable to avoid [RouteHandler.handler] in the stack.\n    const handler = this.handler;\n    const [handled] = await Promise.all([\n      handledPromise,\n      handler(route, route.request()),\n    ]);\n    return handled;\n  }\n\n  public willExpire(): boolean {\n    return this.handledCount + 1 >= this._times;\n  }\n}\n\nexport class RawHeaders {\n  private _headersArray: HeadersArray;\n  private _headersMap = new MultiMap<string, string>();\n\n  static _fromHeadersObjectLossy(headers: Headers): RawHeaders {\n    const headersArray: HeadersArray = Object.entries(headers).map(([name, value]) => ({\n      name, value\n    })).filter(header => header.value !== undefined);\n    return new RawHeaders(headersArray);\n  }\n\n  constructor(headers: HeadersArray) {\n    this._headersArray = headers;\n    for (const header of headers)\n      this._headersMap.set(header.name.toLowerCase(), header.value);\n  }\n\n  get(name: string): string | null {\n    const values = this.getAll(name);\n    if (!values || !values.length)\n      return null;\n    return values.join(name.toLowerCase() === 'set-cookie' ? '\\n' : ', ');\n  }\n\n  getAll(name: string): string[] {\n    return [...this._headersMap.get(name.toLowerCase())];\n  }\n\n  headers(): Headers {\n    const result: Headers = {};\n    for (const name of this._headersMap.keys())\n      result[name] = this.get(name)!;\n    return result;\n  }\n\n  headersArray(): HeadersArray {\n    return this._headersArray;\n  }\n}\n","/**\n * Copyright 2018 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Size } from '../utils/isomorphic/types';\nimport type * as channels from '@protocol/channels';\nexport type { HeadersArray, Point, Quad, Rect, Size } from '../utils/isomorphic/types';\n\ntype LoggerSeverity = 'verbose' | 'info' | 'warning' | 'error';\nexport interface Logger {\n  isEnabled(name: string, severity: LoggerSeverity): boolean;\n  log(name: string, severity: LoggerSeverity, message: string | Error, args: any[], hints: { color?: string }): void;\n}\n\nexport type TimeoutOptions = { timeout?: number };\nexport type StrictOptions = { strict?: boolean };\nexport type Headers = { [key: string]: string };\nexport type Env = { [key: string]: string | number | boolean | undefined };\n\nexport type WaitForEventOptions = Function | TimeoutOptions & { predicate?: Function };\nexport type WaitForFunctionOptions = TimeoutOptions & { polling?: 'raf' | number };\n\nexport type SelectOption = { value?: string, label?: string, index?: number, valueOrLabel?: string };\nexport type SelectOptionOptions = TimeoutOptions & { force?: boolean };\nexport type FilePayload = { name: string, mimeType: string, buffer: Buffer };\nexport type StorageState = {\n  cookies: channels.NetworkCookie[],\n  origins: (Omit<channels.OriginStorage, 'indexedDB'>)[],\n};\nexport type SetStorageState = {\n  cookies?: channels.SetNetworkCookie[],\n  origins?: (Omit<channels.SetOriginStorage, 'indexedDB'> & { indexedDB?: unknown[] })[]\n};\n\nexport type LifecycleEvent = channels.LifecycleEvent;\nexport const kLifecycleEvents: Set<LifecycleEvent> = new Set(['load', 'domcontentloaded', 'networkidle', 'commit']);\n\nexport type ClientCertificate = {\n  origin: string;\n  cert?: Buffer;\n  certPath?: string;\n  key?: Buffer;\n  keyPath?: string;\n  pfx?: Buffer;\n  pfxPath?: string;\n  passphrase?: string;\n};\n\nexport type BrowserContextOptions = Omit<channels.BrowserNewContextOptions, 'viewport' | 'noDefaultViewport' | 'extraHTTPHeaders' | 'clientCertificates' | 'storageState' | 'recordHar' | 'colorScheme' | 'reducedMotion' | 'forcedColors' | 'acceptDownloads' | 'contrast'> & {\n  viewport?: Size | null;\n  extraHTTPHeaders?: Headers;\n  logger?: Logger;\n  videosPath?: string;\n  videoSize?: Size;\n  storageState?: string | SetStorageState;\n  har?: {\n    path: string;\n    fallback?: 'abort'|'continue';\n    urlFilter?: string|RegExp;\n  };\n  recordHar?: {\n    path: string,\n    omitContent?: boolean,\n    content?: 'omit' | 'embed' | 'attach',\n    mode?: 'full' | 'minimal',\n    urlFilter?: string | RegExp,\n  };\n  colorScheme?: 'dark' | 'light' | 'no-preference' | null;\n  reducedMotion?: 'reduce' | 'no-preference' | null;\n  forcedColors?: 'active' | 'none' | null;\n  contrast?: 'more' | 'no-preference' | null;\n  acceptDownloads?: boolean;\n  clientCertificates?: ClientCertificate[];\n};\n\ntype LaunchOverrides = {\n  ignoreDefaultArgs?: boolean | string[];\n  env?: Env;\n  logger?: Logger;\n  firefoxUserPrefs?: { [key: string]: string | number | boolean };\n} & TimeoutOptions;\n\nexport type LaunchOptions = Omit<channels.BrowserTypeLaunchOptions, 'ignoreAllDefaultArgs' | 'ignoreDefaultArgs' | 'env' | 'firefoxUserPrefs'> & LaunchOverrides;\nexport type LaunchPersistentContextOptions = Omit<LaunchOptions & BrowserContextOptions, 'storageState'>;\n\nexport type ConnectOptions = {\n  wsEndpoint: string,\n  headers?: { [key: string]: string; };\n  exposeNetwork?: string,\n  _exposeNetwork?: string,\n  slowMo?: number,\n  timeout?: number,\n  logger?: Logger,\n};\nexport type LaunchServerOptions = LaunchOptions & {\n  host?: string,\n  port?: number,\n  wsPath?: string,\n};\n\nexport type LaunchAndroidServerOptions = {\n  deviceSerialNumber?: string,\n  adbHost?: string,\n  adbPort?: number,\n  omitDriverInstall?: boolean,\n  host?: string,\n  port?: number,\n  wsPath?: string,\n};\n\nexport type SelectorEngine = {\n  /**\n   * Returns the first element matching given selector in the root's subtree.\n   */\n  query(root: HTMLElement, selector: string): HTMLElement | null;\n  /**\n   * Returns all elements matching given selector in the root's subtree.\n   */\n  queryAll(root: HTMLElement, selector: string): HTMLElement[];\n};\n\nexport type RemoteAddr = channels.RemoteAddr;\nexport type SecurityDetails = channels.SecurityDetails;\n\nexport type FrameExpectParams = Omit<channels.FrameExpectParams, 'selector'|'expression'|'expectedValue'> & { expectedValue?: any };\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from './eventEmitter';\nimport { ChannelOwner } from './channelOwner';\nimport { addSourceUrlToScript } from './clientHelper';\nimport { ElementHandle, convertInputFiles, convertSelectOptionValues } from './elementHandle';\nimport { Events } from './events';\nimport { JSHandle, assertMaxArguments, parseResult, serializeArgument } from './jsHandle';\nimport { FrameLocator, Locator, testIdAttributeName } from './locator';\nimport * as network from './network';\nimport { kLifecycleEvents } from './types';\nimport { Waiter } from './waiter';\nimport { assert } from '../utils/isomorphic/assert';\nimport { getByAltTextSelector, getByLabelSelector, getByPlaceholderSelector, getByRoleSelector, getByTestIdSelector, getByTextSelector, getByTitleSelector } from '../utils/isomorphic/locatorUtils';\nimport { urlMatches } from '../utils/isomorphic/urlMatch';\nimport { TimeoutSettings } from './timeoutSettings';\n\nimport type { LocatorOptions } from './locator';\nimport type { Page } from './page';\nimport type { FilePayload, LifecycleEvent, SelectOption, SelectOptionOptions, StrictOptions, TimeoutOptions, WaitForFunctionOptions } from './types';\nimport type * as structs from '../../types/structs';\nimport type * as api from '../../types/types';\nimport type { ByRoleOptions } from '../utils/isomorphic/locatorUtils';\nimport type { URLMatch } from '../utils/isomorphic/urlMatch';\nimport type * as channels from '@protocol/channels';\n\nexport type WaitForNavigationOptions = {\n  timeout?: number,\n  waitUntil?: LifecycleEvent,\n  url?: URLMatch,\n};\n\nexport class Frame extends ChannelOwner<channels.FrameChannel> implements api.Frame {\n  _eventEmitter: EventEmitter;\n  _loadStates: Set<LifecycleEvent>;\n  _parentFrame: Frame | null = null;\n  _url = '';\n  _name = '';\n  _detached = false;\n  _childFrames = new Set<Frame>();\n  _page: Page | undefined;\n\n  static from(frame: channels.FrameChannel): Frame {\n    return (frame as any)._object;\n  }\n\n  static fromNullable(frame: channels.FrameChannel | undefined): Frame | null {\n    return frame ? Frame.from(frame) : null;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.FrameInitializer) {\n    super(parent, type, guid, initializer);\n    this._eventEmitter = new EventEmitter(parent._platform);\n    this._eventEmitter.setMaxListeners(0);\n    this._parentFrame = Frame.fromNullable(initializer.parentFrame);\n    if (this._parentFrame)\n      this._parentFrame._childFrames.add(this);\n    this._name = initializer.name;\n    this._url = initializer.url;\n    this._loadStates = new Set(initializer.loadStates);\n    this._channel.on('loadstate', event => {\n      if (event.add) {\n        this._loadStates.add(event.add);\n        this._eventEmitter.emit('loadstate', event.add);\n      }\n      if (event.remove)\n        this._loadStates.delete(event.remove);\n      if (!this._parentFrame && event.add === 'load' && this._page)\n        this._page.emit(Events.Page.Load, this._page);\n      if (!this._parentFrame && event.add === 'domcontentloaded' && this._page)\n        this._page.emit(Events.Page.DOMContentLoaded, this._page);\n    });\n    this._channel.on('navigated', event => {\n      this._url = event.url;\n      this._name = event.name;\n      this._eventEmitter.emit('navigated', event);\n      if (!event.error && this._page)\n        this._page.emit(Events.Page.FrameNavigated, this);\n    });\n  }\n\n  page(): Page {\n    return this._page!;\n  }\n\n  _timeout(options?: TimeoutOptions): number {\n    const timeoutSettings = this._page?._timeoutSettings || new TimeoutSettings(this._platform);\n    return timeoutSettings.timeout(options || {});\n  }\n\n  _navigationTimeout(options?: TimeoutOptions): number {\n    const timeoutSettings = this._page?._timeoutSettings || new TimeoutSettings(this._platform);\n    return timeoutSettings.navigationTimeout(options || {});\n  }\n\n  async goto(url: string, options: channels.FrameGotoOptions & TimeoutOptions = {}): Promise<network.Response | null> {\n    const waitUntil = verifyLoadState('waitUntil', options.waitUntil === undefined ? 'load' : options.waitUntil);\n    return network.Response.fromNullable((await this._channel.goto({ url, ...options, waitUntil, timeout: this._navigationTimeout(options) })).response);\n  }\n\n  private _setupNavigationWaiter(options: { timeout?: number }): Waiter {\n    const waiter = new Waiter(this._page!, '');\n    if (this._page!.isClosed())\n      waiter.rejectImmediately(this._page!._closeErrorWithReason());\n    waiter.rejectOnEvent(this._page!, Events.Page.Close, () => this._page!._closeErrorWithReason());\n    waiter.rejectOnEvent(this._page!, Events.Page.Crash, new Error('Navigation failed because page crashed!'));\n    waiter.rejectOnEvent<Frame>(this._page!, Events.Page.FrameDetached, new Error('Navigating frame was detached!'), frame => frame === this);\n    const timeout = this._page!._timeoutSettings.navigationTimeout(options);\n    waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded.`);\n    return waiter;\n  }\n\n  async waitForNavigation(options: WaitForNavigationOptions = {}): Promise<network.Response | null> {\n    return await this._page!._wrapApiCall(async () => {\n      const waitUntil = verifyLoadState('waitUntil', options.waitUntil === undefined ? 'load' : options.waitUntil);\n      const waiter = this._setupNavigationWaiter(options);\n\n      const toUrl = typeof options.url === 'string' ? ` to \"${options.url}\"` : '';\n      waiter.log(`waiting for navigation${toUrl} until \"${waitUntil}\"`);\n\n      const navigatedEvent = await waiter.waitForEvent<channels.FrameNavigatedEvent>(this._eventEmitter, 'navigated', event => {\n        // Any failed navigation results in a rejection.\n        if (event.error)\n          return true;\n        waiter.log(`  navigated to \"${event.url}\"`);\n        return urlMatches(this._page?.context()._options.baseURL, event.url, options.url);\n      });\n      if (navigatedEvent.error) {\n        const e = new Error(navigatedEvent.error);\n        e.stack = '';\n        await waiter.waitForPromise(Promise.reject(e));\n      }\n\n      if (!this._loadStates.has(waitUntil)) {\n        await waiter.waitForEvent<LifecycleEvent>(this._eventEmitter, 'loadstate', s => {\n          waiter.log(`  \"${s}\" event fired`);\n          return s === waitUntil;\n        });\n      }\n\n      const request = navigatedEvent.newDocument ? network.Request.fromNullable(navigatedEvent.newDocument.request) : null;\n      const response = request ? await waiter.waitForPromise(request._finalRequest()._internalResponse()) : null;\n      waiter.dispose();\n      return response;\n    }, { title: 'Wait for navigation' });\n  }\n\n  async waitForLoadState(state: LifecycleEvent = 'load', options: { timeout?: number } = {}): Promise<void> {\n    state = verifyLoadState('state', state);\n    return await this._page!._wrapApiCall(async () => {\n      const waiter = this._setupNavigationWaiter(options);\n      if (this._loadStates.has(state)) {\n        waiter.log(`  not waiting, \"${state}\" event already fired`);\n      } else {\n        await waiter.waitForEvent<LifecycleEvent>(this._eventEmitter, 'loadstate', s => {\n          waiter.log(`  \"${s}\" event fired`);\n          return s === state;\n        });\n      }\n      waiter.dispose();\n    }, { title: `Wait for load state \"${state}\"` });\n  }\n\n  async waitForURL(url: URLMatch, options: { waitUntil?: LifecycleEvent, timeout?: number } = {}): Promise<void> {\n    if (urlMatches(this._page?.context()._options.baseURL, this.url(), url))\n      return await this.waitForLoadState(options.waitUntil, options);\n\n    await this.waitForNavigation({ url, ...options });\n  }\n\n  async frameElement(): Promise<ElementHandle> {\n    return ElementHandle.from((await this._channel.frameElement()).element);\n  }\n\n  async evaluateHandle<R, Arg>(pageFunction: structs.PageFunction<Arg, R>, arg?: Arg): Promise<structs.SmartHandle<R>> {\n    assertMaxArguments(arguments.length, 2);\n    const result = await this._channel.evaluateExpressionHandle({ expression: String(pageFunction), isFunction: typeof pageFunction === 'function', arg: serializeArgument(arg) });\n    return JSHandle.from(result.handle) as any as structs.SmartHandle<R>;\n  }\n\n  async evaluate<R, Arg>(pageFunction: structs.PageFunction<Arg, R>, arg?: Arg): Promise<R> {\n    assertMaxArguments(arguments.length, 2);\n    const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === 'function', arg: serializeArgument(arg) });\n    return parseResult(result.value);\n  }\n\n  async _evaluateExposeUtilityScript<R, Arg>(pageFunction: structs.PageFunction<Arg, R>, arg?: Arg): Promise<R> {\n    assertMaxArguments(arguments.length, 2);\n    const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === 'function', arg: serializeArgument(arg) });\n    return parseResult(result.value);\n  }\n\n  async $(selector: string, options?: { strict?: boolean }): Promise<ElementHandle<SVGElement | HTMLElement> | null> {\n    const result = await this._channel.querySelector({ selector, ...options });\n    return ElementHandle.fromNullable(result.element) as ElementHandle<SVGElement | HTMLElement> | null;\n  }\n\n  waitForSelector(selector: string, options: channels.FrameWaitForSelectorOptions & TimeoutOptions & { state: 'attached' | 'visible' }): Promise<ElementHandle<SVGElement | HTMLElement>>;\n  waitForSelector(selector: string, options?: channels.FrameWaitForSelectorOptions & TimeoutOptions): Promise<ElementHandle<SVGElement | HTMLElement> | null>;\n  async waitForSelector(selector: string, options: channels.FrameWaitForSelectorOptions & TimeoutOptions = {}): Promise<ElementHandle<SVGElement | HTMLElement> | null> {\n    if ((options as any).visibility)\n      throw new Error('options.visibility is not supported, did you mean options.state?');\n    if ((options as any).waitFor && (options as any).waitFor !== 'visible')\n      throw new Error('options.waitFor is not supported, did you mean options.state?');\n    const result = await this._channel.waitForSelector({ selector, ...options, timeout: this._timeout(options) });\n    return ElementHandle.fromNullable(result.element) as ElementHandle<SVGElement | HTMLElement> | null;\n  }\n\n  async dispatchEvent(selector: string, type: string, eventInit?: any, options: channels.FrameDispatchEventOptions & TimeoutOptions = {}): Promise<void> {\n    await this._channel.dispatchEvent({ selector, type, eventInit: serializeArgument(eventInit), ...options, timeout: this._timeout(options) });\n  }\n\n  async $eval<R, Arg>(selector: string, pageFunction: structs.PageFunctionOn<Element, Arg, R>, arg?: Arg): Promise<R> {\n    assertMaxArguments(arguments.length, 3);\n    const result = await this._channel.evalOnSelector({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === 'function', arg: serializeArgument(arg) });\n    return parseResult(result.value);\n  }\n\n  async $$eval<R, Arg>(selector: string, pageFunction: structs.PageFunctionOn<Element[], Arg, R>, arg?: Arg): Promise<R> {\n    assertMaxArguments(arguments.length, 3);\n    const result = await this._channel.evalOnSelectorAll({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === 'function', arg: serializeArgument(arg) });\n    return parseResult(result.value);\n  }\n\n  async $$(selector: string): Promise<ElementHandle<SVGElement | HTMLElement>[]> {\n    const result = await this._channel.querySelectorAll({ selector });\n    return result.elements.map(e => ElementHandle.from(e) as ElementHandle<SVGElement | HTMLElement>);\n  }\n\n  async _queryCount(selector: string): Promise<number> {\n    return (await this._channel.queryCount({ selector })).value;\n  }\n\n  async content(): Promise<string> {\n    return (await this._channel.content()).value;\n  }\n\n  async setContent(html: string, options: channels.FrameSetContentOptions & TimeoutOptions = {}): Promise<void> {\n    const waitUntil = verifyLoadState('waitUntil', options.waitUntil === undefined ? 'load' : options.waitUntil);\n    await this._channel.setContent({ html, ...options, waitUntil, timeout: this._navigationTimeout(options) });\n  }\n\n  name(): string {\n    return this._name || '';\n  }\n\n  url(): string {\n    return this._url;\n  }\n\n  parentFrame(): Frame | null {\n    return this._parentFrame;\n  }\n\n  childFrames(): Frame[] {\n    return Array.from(this._childFrames);\n  }\n\n  isDetached(): boolean {\n    return this._detached;\n  }\n\n  async addScriptTag(options: { url?: string, path?: string, content?: string, type?: string } = {}): Promise<ElementHandle> {\n    const copy = { ...options };\n    if (copy.path) {\n      copy.content = (await this._platform.fs().promises.readFile(copy.path)).toString();\n      copy.content = addSourceUrlToScript(copy.content, copy.path);\n    }\n    return ElementHandle.from((await this._channel.addScriptTag({ ...copy })).element);\n  }\n\n  async addStyleTag(options: { url?: string; path?: string; content?: string; } = {}): Promise<ElementHandle> {\n    const copy = { ...options };\n    if (copy.path) {\n      copy.content = (await this._platform.fs().promises.readFile(copy.path)).toString();\n      copy.content += '/*# sourceURL=' + copy.path.replace(/\\n/g, '') + '*/';\n    }\n    return ElementHandle.from((await this._channel.addStyleTag({ ...copy })).element);\n  }\n\n  async click(selector: string, options: channels.FrameClickOptions & TimeoutOptions = {}) {\n    return await this._channel.click({ selector, ...options, timeout: this._timeout(options) });\n  }\n\n  async dblclick(selector: string, options: channels.FrameDblclickOptions & TimeoutOptions = {}) {\n    return await this._channel.dblclick({ selector, ...options, timeout: this._timeout(options) });\n  }\n\n  async dragAndDrop(source: string, target: string, options: channels.FrameDragAndDropOptions & TimeoutOptions = {}) {\n    return await this._channel.dragAndDrop({ source, target, ...options, timeout: this._timeout(options) });\n  }\n\n  async tap(selector: string, options: channels.FrameTapOptions & TimeoutOptions = {}) {\n    return await this._channel.tap({ selector, ...options, timeout: this._timeout(options) });\n  }\n\n  async fill(selector: string, value: string, options: channels.FrameFillOptions & TimeoutOptions = {}) {\n    return await this._channel.fill({ selector, value, ...options, timeout: this._timeout(options) });\n  }\n\n  async _highlight(selector: string) {\n    return await this._channel.highlight({ selector });\n  }\n\n  locator(selector: string, options?: LocatorOptions): Locator {\n    return new Locator(this, selector, options);\n  }\n\n  getByTestId(testId: string | RegExp): Locator {\n    return this.locator(getByTestIdSelector(testIdAttributeName(), testId));\n  }\n\n  getByAltText(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByAltTextSelector(text, options));\n  }\n\n  getByLabel(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByLabelSelector(text, options));\n  }\n\n  getByPlaceholder(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByPlaceholderSelector(text, options));\n  }\n\n  getByText(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByTextSelector(text, options));\n  }\n\n  getByTitle(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.locator(getByTitleSelector(text, options));\n  }\n\n  getByRole(role: string, options: ByRoleOptions = {}): Locator {\n    return this.locator(getByRoleSelector(role, options));\n  }\n\n  frameLocator(selector: string): FrameLocator {\n    return new FrameLocator(this, selector);\n  }\n\n  async focus(selector: string, options: channels.FrameFocusOptions & TimeoutOptions = {}) {\n    await this._channel.focus({ selector, ...options, timeout: this._timeout(options) });\n  }\n\n  async textContent(selector: string, options: channels.FrameTextContentOptions & TimeoutOptions = {}): Promise<null|string> {\n    const value = (await this._channel.textContent({ selector, ...options, timeout: this._timeout(options) })).value;\n    return value === undefined ? null : value;\n  }\n\n  async innerText(selector: string, options: channels.FrameInnerTextOptions & TimeoutOptions = {}): Promise<string> {\n    return (await this._channel.innerText({ selector, ...options, timeout: this._timeout(options) })).value;\n  }\n\n  async innerHTML(selector: string, options: channels.FrameInnerHTMLOptions & TimeoutOptions = {}): Promise<string> {\n    return (await this._channel.innerHTML({ selector, ...options, timeout: this._timeout(options) })).value;\n  }\n\n  async getAttribute(selector: string, name: string, options: channels.FrameGetAttributeOptions & TimeoutOptions = {}): Promise<string | null> {\n    const value = (await this._channel.getAttribute({ selector, name, ...options, timeout: this._timeout(options) })).value;\n    return value === undefined ? null : value;\n  }\n\n  async inputValue(selector: string, options: channels.FrameInputValueOptions & TimeoutOptions = {}): Promise<string> {\n    return (await this._channel.inputValue({ selector, ...options, timeout: this._timeout(options) })).value;\n  }\n\n  async isChecked(selector: string, options: channels.FrameIsCheckedOptions & TimeoutOptions = {}): Promise<boolean> {\n    return (await this._channel.isChecked({ selector, ...options, timeout: this._timeout(options) })).value;\n  }\n\n  async isDisabled(selector: string, options: channels.FrameIsDisabledOptions & TimeoutOptions = {}): Promise<boolean> {\n    return (await this._channel.isDisabled({ selector, ...options, timeout: this._timeout(options) })).value;\n  }\n\n  async isEditable(selector: string, options: channels.FrameIsEditableOptions & TimeoutOptions = {}): Promise<boolean> {\n    return (await this._channel.isEditable({ selector, ...options, timeout: this._timeout(options) })).value;\n  }\n\n  async isEnabled(selector: string, options: channels.FrameIsEnabledOptions & TimeoutOptions = {}): Promise<boolean> {\n    return (await this._channel.isEnabled({ selector, ...options, timeout: this._timeout(options) })).value;\n  }\n\n  async isHidden(selector: string, options: channels.FrameIsHiddenOptions & TimeoutOptions = {}): Promise<boolean> {\n    return (await this._channel.isHidden({ selector, ...options })).value;\n  }\n\n  async isVisible(selector: string, options: channels.FrameIsVisibleOptions & TimeoutOptions = {}): Promise<boolean> {\n    return (await this._channel.isVisible({ selector, ...options })).value;\n  }\n\n  async hover(selector: string, options: channels.FrameHoverOptions & TimeoutOptions = {}) {\n    await this._channel.hover({ selector, ...options, timeout: this._timeout(options) });\n  }\n\n  async selectOption(selector: string, values: string | api.ElementHandle | SelectOption | string[] | api.ElementHandle[] | SelectOption[] | null, options: SelectOptionOptions & StrictOptions = {}): Promise<string[]> {\n    return (await this._channel.selectOption({ selector, ...convertSelectOptionValues(values), ...options, timeout: this._timeout(options) })).values;\n  }\n\n  async setInputFiles(selector: string, files: string | FilePayload | string[] | FilePayload[], options: channels.FrameSetInputFilesOptions & TimeoutOptions = {}): Promise<void> {\n    const converted = await convertInputFiles(this._platform, files, this.page().context());\n    await this._channel.setInputFiles({ selector, ...converted, ...options, timeout: this._timeout(options) });\n  }\n\n  async type(selector: string, text: string, options: channels.FrameTypeOptions & TimeoutOptions = {}) {\n    await this._channel.type({ selector, text, ...options, timeout: this._timeout(options) });\n  }\n\n  async press(selector: string, key: string, options: channels.FramePressOptions & TimeoutOptions = {}) {\n    await this._channel.press({ selector, key, ...options, timeout: this._timeout(options) });\n  }\n\n  async check(selector: string, options: channels.FrameCheckOptions & TimeoutOptions = {}) {\n    await this._channel.check({ selector, ...options, timeout: this._timeout(options) });\n  }\n\n  async uncheck(selector: string, options: channels.FrameUncheckOptions & TimeoutOptions = {}) {\n    await this._channel.uncheck({ selector, ...options, timeout: this._timeout(options) });\n  }\n\n  async setChecked(selector: string, checked: boolean, options?: channels.FrameCheckOptions) {\n    if (checked)\n      await this.check(selector, options);\n    else\n      await this.uncheck(selector, options);\n  }\n\n  async waitForTimeout(timeout: number) {\n    await this._channel.waitForTimeout({ timeout });\n  }\n\n  async waitForFunction<R, Arg>(pageFunction: structs.PageFunction<Arg, R>, arg?: Arg, options: WaitForFunctionOptions = {}): Promise<structs.SmartHandle<R>> {\n    if (typeof options.polling === 'string')\n      assert(options.polling === 'raf', 'Unknown polling option: ' + options.polling);\n    const result = await this._channel.waitForFunction({\n      ...options,\n      pollingInterval: options.polling === 'raf' ? undefined : options.polling,\n      expression: String(pageFunction),\n      isFunction: typeof pageFunction === 'function',\n      arg: serializeArgument(arg),\n      timeout: this._timeout(options),\n    });\n    return JSHandle.from(result.handle) as any as structs.SmartHandle<R>;\n  }\n\n  async title(): Promise<string> {\n    return (await this._channel.title()).value;\n  }\n}\n\nexport function verifyLoadState(name: string, waitUntil: LifecycleEvent): LifecycleEvent {\n  if (waitUntil as unknown === 'networkidle0')\n    waitUntil = 'networkidle';\n  if (!kLifecycleEvents.has(waitUntil))\n    throw new Error(`${name}: expected one of (load|domcontentloaded|networkidle|commit)`);\n  return waitUntil;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChannelOwner } from './channelOwner';\n\nimport type * as channels from '@protocol/channels';\nimport type { Writable } from 'stream';\n\nexport class WritableStream extends ChannelOwner<channels.WritableStreamChannel> {\n  static from(Stream: channels.WritableStreamChannel): WritableStream {\n    return (Stream as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.WritableStreamInitializer) {\n    super(parent, type, guid, initializer);\n  }\n\n  stream(): Writable {\n    return this._platform.streamWritable(this._channel);\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Frame } from './frame';\nimport { JSHandle, parseResult, serializeArgument } from './jsHandle';\nimport { assert } from '../utils/isomorphic/assert';\nimport { fileUploadSizeLimit, mkdirIfNeeded } from './fileUtils';\nimport { isString } from '../utils/isomorphic/rtti';\nimport { WritableStream } from './writableStream';\nimport { getMimeTypeForPath } from '../utils/isomorphic/mimeType';\n\nimport type { BrowserContext } from './browserContext';\nimport type { ChannelOwner } from './channelOwner';\nimport type { Locator } from './locator';\nimport type { FilePayload, Rect, SelectOption, SelectOptionOptions, TimeoutOptions } from './types';\nimport type * as structs from '../../types/structs';\nimport type * as api from '../../types/types';\nimport type { Platform } from './platform';\nimport type * as channels from '@protocol/channels';\n\nexport class ElementHandle<T extends Node = Node> extends JSHandle<T> implements api.ElementHandle {\n  private _frame: Frame;\n  readonly _elementChannel: channels.ElementHandleChannel;\n\n  static override from(handle: channels.ElementHandleChannel): ElementHandle {\n    return (handle as any)._object;\n  }\n\n  static fromNullable(handle: channels.ElementHandleChannel | undefined): ElementHandle | null {\n    return handle ? ElementHandle.from(handle) : null;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.JSHandleInitializer) {\n    super(parent, type, guid, initializer);\n    this._frame = parent as Frame;\n    this._elementChannel = this._channel as channels.ElementHandleChannel;\n  }\n\n  override asElement(): T extends Node ? ElementHandle<T> : null {\n    return this as any;\n  }\n\n  async ownerFrame(): Promise<Frame | null> {\n    return Frame.fromNullable((await this._elementChannel.ownerFrame()).frame);\n  }\n\n  async contentFrame(): Promise<Frame | null> {\n    return Frame.fromNullable((await this._elementChannel.contentFrame()).frame);\n  }\n\n  async _generateLocatorString(): Promise<string | null> {\n    const value = (await this._elementChannel.generateLocatorString()).value;\n    return value === undefined ? null : value;\n  }\n\n  async getAttribute(name: string): Promise<string | null> {\n    const value = (await this._elementChannel.getAttribute({ name })).value;\n    return value === undefined ? null : value;\n  }\n\n  async inputValue(): Promise<string> {\n    return (await this._elementChannel.inputValue()).value;\n  }\n\n  async textContent(): Promise<string | null> {\n    const value = (await this._elementChannel.textContent()).value;\n    return value === undefined ? null : value;\n  }\n\n  async innerText(): Promise<string> {\n    return (await this._elementChannel.innerText()).value;\n  }\n\n  async innerHTML(): Promise<string> {\n    return (await this._elementChannel.innerHTML()).value;\n  }\n\n  async isChecked(): Promise<boolean> {\n    return (await this._elementChannel.isChecked()).value;\n  }\n\n  async isDisabled(): Promise<boolean> {\n    return (await this._elementChannel.isDisabled()).value;\n  }\n\n  async isEditable(): Promise<boolean> {\n    return (await this._elementChannel.isEditable()).value;\n  }\n\n  async isEnabled(): Promise<boolean> {\n    return (await this._elementChannel.isEnabled()).value;\n  }\n\n  async isHidden(): Promise<boolean> {\n    return (await this._elementChannel.isHidden()).value;\n  }\n\n  async isVisible(): Promise<boolean> {\n    return (await this._elementChannel.isVisible()).value;\n  }\n\n  async dispatchEvent(type: string, eventInit: Object = {}) {\n    await this._elementChannel.dispatchEvent({ type, eventInit: serializeArgument(eventInit) });\n  }\n\n  async scrollIntoViewIfNeeded(options: channels.ElementHandleScrollIntoViewIfNeededOptions & TimeoutOptions = {}) {\n    await this._elementChannel.scrollIntoViewIfNeeded({ ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async hover(options: channels.ElementHandleHoverOptions & TimeoutOptions = {}): Promise<void> {\n    await this._elementChannel.hover({ ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async click(options: channels.ElementHandleClickOptions & TimeoutOptions = {}): Promise<void> {\n    return await this._elementChannel.click({ ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async dblclick(options: channels.ElementHandleDblclickOptions & TimeoutOptions = {}): Promise<void> {\n    return await this._elementChannel.dblclick({ ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async tap(options: channels.ElementHandleTapOptions & TimeoutOptions = {}): Promise<void> {\n    return await this._elementChannel.tap({ ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async selectOption(values: string | api.ElementHandle | SelectOption | string[] | api.ElementHandle[] | SelectOption[] | null, options: SelectOptionOptions = {}): Promise<string[]> {\n    const result = await this._elementChannel.selectOption({ ...convertSelectOptionValues(values), ...options, timeout: this._frame._timeout(options) });\n    return result.values;\n  }\n\n  async fill(value: string, options: channels.ElementHandleFillOptions & TimeoutOptions = {}): Promise<void> {\n    return await this._elementChannel.fill({ value, ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async selectText(options: channels.ElementHandleSelectTextOptions & TimeoutOptions = {}): Promise<void> {\n    await this._elementChannel.selectText({ ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async setInputFiles(files: string | FilePayload | string[] | FilePayload[], options: channels.ElementHandleSetInputFilesOptions & TimeoutOptions = {}) {\n    const frame = await this.ownerFrame();\n    if (!frame)\n      throw new Error('Cannot set input files to detached element');\n    const converted = await convertInputFiles(this._platform, files, frame.page().context());\n    await this._elementChannel.setInputFiles({ ...converted, ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async focus(): Promise<void> {\n    await this._elementChannel.focus();\n  }\n\n  async type(text: string, options: channels.ElementHandleTypeOptions & TimeoutOptions = {}): Promise<void> {\n    await this._elementChannel.type({ text, ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async press(key: string, options: channels.ElementHandlePressOptions & TimeoutOptions = {}): Promise<void> {\n    await this._elementChannel.press({ key, ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async check(options: channels.ElementHandleCheckOptions & TimeoutOptions = {}) {\n    return await this._elementChannel.check({ ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async uncheck(options: channels.ElementHandleUncheckOptions & TimeoutOptions = {}) {\n    return await this._elementChannel.uncheck({ ...options, timeout: this._frame._timeout(options) });\n  }\n\n  async setChecked(checked: boolean, options?: channels.ElementHandleCheckOptions) {\n    if (checked)\n      await this.check(options);\n    else\n      await this.uncheck(options);\n  }\n\n  async boundingBox(): Promise<Rect | null> {\n    const value = (await this._elementChannel.boundingBox()).value;\n    return value === undefined ? null : value;\n  }\n\n  async screenshot(options: Omit<channels.ElementHandleScreenshotOptions, 'mask'> & TimeoutOptions & { path?: string, mask?: api.Locator[] } = {}): Promise<Buffer> {\n    const mask = options.mask as Locator[] | undefined;\n    const copy: channels.ElementHandleScreenshotParams = { ...options, mask: undefined, timeout: this._frame._timeout(options) };\n    if (!copy.type)\n      copy.type = determineScreenshotType(options);\n    if (mask) {\n      copy.mask = mask.map(locator => ({\n        frame: locator._frame._channel,\n        selector: locator._selector,\n      }));\n    }\n    const result = await this._elementChannel.screenshot(copy);\n    if (options.path) {\n      await mkdirIfNeeded(this._platform, options.path);\n      await this._platform.fs().promises.writeFile(options.path, result.binary);\n    }\n    return result.binary;\n  }\n\n  async $(selector: string): Promise<ElementHandle<SVGElement | HTMLElement> | null> {\n    return ElementHandle.fromNullable((await this._elementChannel.querySelector({ selector })).element) as ElementHandle<SVGElement | HTMLElement> | null;\n  }\n\n  async $$(selector: string): Promise<ElementHandle<SVGElement | HTMLElement>[]> {\n    const result = await this._elementChannel.querySelectorAll({ selector });\n    return result.elements.map(h => ElementHandle.from(h) as ElementHandle<SVGElement | HTMLElement>);\n  }\n\n  async $eval<R, Arg>(selector: string, pageFunction: structs.PageFunctionOn<Element, Arg, R>, arg?: Arg): Promise<R> {\n    const result = await this._elementChannel.evalOnSelector({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === 'function', arg: serializeArgument(arg) });\n    return parseResult(result.value);\n  }\n\n  async $$eval<R, Arg>(selector: string, pageFunction: structs.PageFunctionOn<Element[], Arg, R>, arg?: Arg): Promise<R> {\n    const result = await this._elementChannel.evalOnSelectorAll({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === 'function', arg: serializeArgument(arg) });\n    return parseResult(result.value);\n  }\n\n  async waitForElementState(state: 'visible' | 'hidden' | 'stable' | 'enabled' | 'disabled', options: TimeoutOptions = {}): Promise<void> {\n    return await this._elementChannel.waitForElementState({ state, ...options, timeout: this._frame._timeout(options) });\n  }\n\n  waitForSelector(selector: string, options: channels.ElementHandleWaitForSelectorOptions & TimeoutOptions & { state: 'attached' | 'visible' }): Promise<ElementHandle<SVGElement | HTMLElement>>;\n  waitForSelector(selector: string, options?: channels.ElementHandleWaitForSelectorOptions & TimeoutOptions): Promise<ElementHandle<SVGElement | HTMLElement> | null>;\n  async waitForSelector(selector: string, options: channels.ElementHandleWaitForSelectorOptions & TimeoutOptions = {}): Promise<ElementHandle<SVGElement | HTMLElement> | null> {\n    const result = await this._elementChannel.waitForSelector({ selector, ...options, timeout: this._frame._timeout(options) });\n    return ElementHandle.fromNullable(result.element) as ElementHandle<SVGElement | HTMLElement> | null;\n  }\n}\n\nexport function convertSelectOptionValues(values: string | api.ElementHandle | SelectOption | string[] | api.ElementHandle[] | SelectOption[] | null): { elements?: channels.ElementHandleChannel[], options?: SelectOption[] } {\n  if (values === null)\n    return {};\n  if (!Array.isArray(values))\n    values = [values as any];\n  if (!values.length)\n    return {};\n  for (let i = 0; i < values.length; i++)\n    assert(values[i] !== null, `options[${i}]: expected object, got null`);\n  if (values[0] instanceof ElementHandle)\n    return { elements: (values as ElementHandle[]).map((v: ElementHandle) => v._elementChannel) };\n  if (isString(values[0]))\n    return { options: (values as string[]).map(valueOrLabel => ({ valueOrLabel })) };\n  return { options: values as SelectOption[] };\n}\n\ntype SetInputFilesFiles = Pick<channels.ElementHandleSetInputFilesParams, 'payloads' | 'localPaths' | 'localDirectory' | 'streams' | 'directoryStream'>;\n\nfunction filePayloadExceedsSizeLimit(payloads: FilePayload[]) {\n  return payloads.reduce((size, item) => size + (item.buffer ? item.buffer.byteLength : 0), 0) >= fileUploadSizeLimit;\n}\n\nasync function resolvePathsAndDirectoryForInputFiles(platform: Platform, items: string[]): Promise<[string[] | undefined, string | undefined]> {\n  let localPaths: string[] | undefined;\n  let localDirectory: string | undefined;\n  for (const item of items) {\n    const stat = await platform.fs().promises.stat(item as string);\n    if (stat.isDirectory()) {\n      if (localDirectory)\n        throw new Error('Multiple directories are not supported');\n      localDirectory = platform.path().resolve(item as string);\n    } else {\n      localPaths ??= [];\n      localPaths.push(platform.path().resolve(item as string));\n    }\n  }\n  if (localPaths?.length && localDirectory)\n    throw new Error('File paths must be all files or a single directory');\n  return [localPaths, localDirectory];\n}\n\nexport async function convertInputFiles(platform: Platform, files: string | FilePayload | string[] | FilePayload[], context: BrowserContext): Promise<SetInputFilesFiles> {\n  const items: (string | FilePayload)[] = Array.isArray(files) ? files.slice() : [files];\n\n  if (items.some(item => typeof item === 'string')) {\n    if (!items.every(item => typeof item === 'string'))\n      throw new Error('File paths cannot be mixed with buffers');\n\n    const [localPaths, localDirectory] = await resolvePathsAndDirectoryForInputFiles(platform, items);\n\n    if (context._connection.isRemote()) {\n      const files = localDirectory ? (await platform.fs().promises.readdir(localDirectory, { withFileTypes: true, recursive: true })).filter(f => f.isFile()).map(f => platform.path().join(f.path, f.name)) : localPaths!;\n      const { writableStreams, rootDir } = await context._wrapApiCall(async () => context._channel.createTempFiles({\n        rootDirName: localDirectory ? platform.path().basename(localDirectory) : undefined,\n        items: await Promise.all(files.map(async file => {\n          const lastModifiedMs = (await platform.fs().promises.stat(file)).mtimeMs;\n          return {\n            name: localDirectory ? platform.path().relative(localDirectory, file) : platform.path().basename(file),\n            lastModifiedMs\n          };\n        })),\n      }), { internal: true });\n      for (let i = 0; i < files.length; i++) {\n        const writable = WritableStream.from(writableStreams[i]);\n        await platform.streamFile(files[i], writable.stream());\n      }\n      return {\n        directoryStream: rootDir,\n        streams: localDirectory ? undefined : writableStreams,\n      };\n    }\n    return {\n      localPaths,\n      localDirectory,\n    };\n  }\n\n  const payloads = items as FilePayload[];\n  if (filePayloadExceedsSizeLimit(payloads))\n    throw new Error('Cannot set buffer larger than 50Mb, please write it to a file and pass its path instead.');\n  return { payloads };\n}\n\nexport function determineScreenshotType(options: { path?: string, type?: 'png' | 'jpeg' }): 'png' | 'jpeg' | undefined {\n  if (options.path) {\n    const mimeType = getMimeTypeForPath(options.path);\n    if (mimeType === 'image/png')\n      return 'png';\n    else if (mimeType === 'image/jpeg')\n      return 'jpeg';\n    throw new Error(`path: unsupported mime type \"${mimeType}\"`);\n  }\n  return options.type;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ElementHandle } from './elementHandle';\nimport type { Page } from './page';\nimport type { FilePayload, TimeoutOptions } from './types';\nimport type * as api from '../../types/types';\nimport type * as channels from '@protocol/channels';\n\nexport class FileChooser implements api.FileChooser {\n  private _page: Page;\n  private _elementHandle: ElementHandle<Node>;\n  private _isMultiple: boolean;\n\n  constructor(page: Page, elementHandle: ElementHandle, isMultiple: boolean) {\n    this._page = page;\n    this._elementHandle = elementHandle;\n    this._isMultiple = isMultiple;\n  }\n\n  element(): ElementHandle {\n    return this._elementHandle;\n  }\n\n  isMultiple(): boolean {\n    return this._isMultiple;\n  }\n\n  page(): Page {\n    return this._page;\n  }\n\n  async setFiles(files: string | FilePayload | string[] | FilePayload[], options?: channels.ElementHandleSetInputFilesOptions & TimeoutOptions) {\n    return await this._elementHandle.setInputFiles(files, options);\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { BrowserContext } from './browserContext';\nimport type { LocalUtils } from './localUtils';\nimport type { Route } from './network';\nimport type { Page } from './page';\nimport type { URLMatch } from '../utils/isomorphic/urlMatch';\n\ntype HarNotFoundAction = 'abort' | 'fallback';\n\nexport class HarRouter {\n  private _localUtils: LocalUtils;\n  private _harId: string;\n  private _notFoundAction: HarNotFoundAction;\n  private _options: { urlMatch?: URLMatch; baseURL?: string; };\n\n  static async create(localUtils: LocalUtils, file: string, notFoundAction: HarNotFoundAction, options: { urlMatch?: URLMatch }): Promise<HarRouter> {\n    const { harId, error } = await localUtils.harOpen({ file });\n    if (error)\n      throw new Error(error);\n    return new HarRouter(localUtils, harId!, notFoundAction, options);\n  }\n\n  private constructor(localUtils: LocalUtils, harId: string, notFoundAction: HarNotFoundAction, options: { urlMatch?: URLMatch }) {\n    this._localUtils = localUtils;\n    this._harId = harId;\n    this._options = options;\n    this._notFoundAction = notFoundAction;\n  }\n\n  private async _handle(route: Route) {\n    const request = route.request();\n\n    const response = await this._localUtils.harLookup({\n      harId: this._harId,\n      url: request.url(),\n      method: request.method(),\n      headers: (await request.headersArray()),\n      postData: request.postDataBuffer() || undefined,\n      isNavigationRequest: request.isNavigationRequest()\n    });\n\n    if (response.action === 'redirect') {\n      route._platform.log('api', `HAR: ${route.request().url()} redirected to ${response.redirectURL}`);\n      await route._redirectNavigationRequest(response.redirectURL!);\n      return;\n    }\n\n    if (response.action === 'fulfill') {\n      // If the response status is -1, the request was canceled or stalled, so we just stall it here.\n      // See https://github.com/microsoft/playwright/issues/29311.\n      // TODO: it'd be better to abort such requests, but then we likely need to respect the timing,\n      // because the request might have been stalled for a long time until the very end of the\n      // test when HAR was recorded but we'd abort it immediately.\n      if (response.status === -1)\n        return;\n      await route.fulfill({\n        status: response.status,\n        headers: Object.fromEntries(response.headers!.map(h => [h.name, h.value])),\n        body: response.body!\n      });\n      return;\n    }\n\n    if (response.action === 'error')\n      route._platform.log('api', 'HAR: ' + response.message!);\n    // Report the error, but fall through to the default handler.\n\n    if (this._notFoundAction === 'abort') {\n      await route.abort();\n      return;\n    }\n\n    await route.fallback();\n  }\n\n  async addContextRoute(context: BrowserContext) {\n    await context.route(this._options.urlMatch || '**/*', route => this._handle(route));\n  }\n\n  async addPageRoute(page: Page) {\n    await page.route(this._options.urlMatch || '**/*', route => this._handle(route));\n  }\n\n  async [Symbol.asyncDispose]() {\n    await this.dispose();\n  }\n\n  dispose() {\n    this._localUtils.harClose({ harId: this._harId }).catch(() => {});\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Page } from './page';\nimport type * as api from '../../types/types';\nimport type * as channels from '@protocol/channels';\n\nexport class Keyboard implements api.Keyboard {\n  private _page: Page;\n\n  constructor(page: Page) {\n    this._page = page;\n  }\n\n  async down(key: string) {\n    await this._page._channel.keyboardDown({ key });\n  }\n\n  async up(key: string) {\n    await this._page._channel.keyboardUp({ key });\n  }\n\n  async insertText(text: string) {\n    await this._page._channel.keyboardInsertText({ text });\n  }\n\n  async type(text: string, options: channels.PageKeyboardTypeOptions = {}) {\n    await this._page._channel.keyboardType({ text, ...options });\n  }\n\n  async press(key: string, options: channels.PageKeyboardPressOptions = {}) {\n    await this._page._channel.keyboardPress({ key, ...options });\n  }\n}\n\nexport class Mouse implements api.Mouse {\n  private _page: Page;\n\n  constructor(page: Page) {\n    this._page = page;\n  }\n\n  async move(x: number, y: number, options: { steps?: number } = {}) {\n    await this._page._channel.mouseMove({ x, y, ...options });\n  }\n\n  async down(options: channels.PageMouseDownOptions = {}) {\n    await this._page._channel.mouseDown({ ...options });\n  }\n\n  async up(options: channels.PageMouseUpOptions = {}) {\n    await this._page._channel.mouseUp(options);\n  }\n\n  async click(x: number, y: number, options: channels.PageMouseClickOptions = {}) {\n    await this._page._channel.mouseClick({ x, y, ...options });\n  }\n\n  async dblclick(x: number, y: number, options: Omit<channels.PageMouseClickOptions, 'clickCount'> = {}) {\n    await this._page._wrapApiCall(async () => {\n      await this.click(x, y, { ...options, clickCount: 2 });\n    }, { title: 'Double click' });\n  }\n\n  async wheel(deltaX: number, deltaY: number) {\n    await this._page._channel.mouseWheel({ deltaX, deltaY });\n  }\n}\n\nexport class Touchscreen implements api.Touchscreen {\n  private _page: Page;\n\n  constructor(page: Page) {\n    this._page = page;\n  }\n\n  async tap(x: number, y: number) {\n    await this._page._channel.touchscreenTap({ x, y });\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ManualPromise } from '../utils/isomorphic/manualPromise';\n\nimport type { Artifact } from './artifact';\nimport type { Connection } from './connection';\nimport type { Page } from './page';\nimport type * as api from '../../types/types';\n\nexport class Video implements api.Video {\n  private _artifact: Promise<Artifact | null> | null = null;\n  private _artifactReadyPromise = new ManualPromise<Artifact>();\n  private _isRemote = false;\n\n  constructor(page: Page, connection: Connection) {\n    this._isRemote = connection.isRemote();\n    this._artifact = page._closedOrCrashedScope.safeRace(this._artifactReadyPromise);\n  }\n\n  _artifactReady(artifact: Artifact) {\n    this._artifactReadyPromise.resolve(artifact);\n  }\n\n  async path(): Promise<string> {\n    if (this._isRemote)\n      throw new Error(`Path is not available when connecting remotely. Use saveAs() to save a local copy.`);\n    const artifact = await this._artifact;\n    if (!artifact)\n      throw new Error('Page did not produce any video frames');\n    return artifact._initializer.absolutePath;\n  }\n\n  async saveAs(path: string): Promise<void> {\n    const artifact = await this._artifact;\n    if (!artifact)\n      throw new Error('Page did not produce any video frames');\n    return await artifact.saveAs(path);\n  }\n\n  async delete(): Promise<void> {\n    const artifact = await this._artifact;\n    if (artifact)\n      await artifact.delete();\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Accessibility } from './accessibility';\nimport { Artifact } from './artifact';\nimport { ChannelOwner } from './channelOwner';\nimport { evaluationScript } from './clientHelper';\nimport { Coverage } from './coverage';\nimport { Download } from './download';\nimport { ElementHandle, determineScreenshotType } from './elementHandle';\nimport { TargetClosedError, isTargetClosedError, serializeError } from './errors';\nimport { Events } from './events';\nimport { FileChooser } from './fileChooser';\nimport { Frame, verifyLoadState } from './frame';\nimport { HarRouter } from './harRouter';\nimport { Keyboard, Mouse, Touchscreen } from './input';\nimport { JSHandle, assertMaxArguments, parseResult, serializeArgument } from './jsHandle';\nimport { Response, Route, RouteHandler, WebSocket,  WebSocketRoute, WebSocketRouteHandler, validateHeaders } from './network';\nimport { Video } from './video';\nimport { Waiter } from './waiter';\nimport { Worker } from './worker';\nimport { TimeoutSettings } from './timeoutSettings';\nimport { assert } from '../utils/isomorphic/assert';\nimport { mkdirIfNeeded } from './fileUtils';\nimport { headersObjectToArray } from '../utils/isomorphic/headers';\nimport { trimStringWithEllipsis  } from '../utils/isomorphic/stringUtils';\nimport { urlMatches, urlMatchesEqual } from '../utils/isomorphic/urlMatch';\nimport { LongStandingScope } from '../utils/isomorphic/manualPromise';\nimport { isObject, isRegExp, isString } from '../utils/isomorphic/rtti';\n\nimport type { BrowserContext } from './browserContext';\nimport type { Clock } from './clock';\nimport type { APIRequestContext } from './fetch';\nimport type { WaitForNavigationOptions } from './frame';\nimport type { FrameLocator, Locator, LocatorOptions } from './locator';\nimport type { Request, RouteHandlerCallback, WebSocketRouteHandlerCallback } from './network';\nimport type { FilePayload, Headers, LifecycleEvent, SelectOption, SelectOptionOptions, Size, TimeoutOptions, WaitForEventOptions, WaitForFunctionOptions } from './types';\nimport type * as structs from '../../types/structs';\nimport type * as api from '../../types/types';\nimport type { ByRoleOptions } from '../utils/isomorphic/locatorUtils';\nimport type { URLMatch } from '../utils/isomorphic/urlMatch';\nimport type * as channels from '@protocol/channels';\n\ntype PDFOptions = Omit<channels.PagePdfParams, 'width' | 'height' | 'margin'> & {\n  width?: string | number,\n  height?: string | number,\n  margin?: {\n    top?: string | number,\n    bottom?: string | number,\n    left?: string | number,\n    right?: string | number\n  },\n  path?: string,\n};\n\nexport type ExpectScreenshotOptions = Omit<channels.PageExpectScreenshotOptions, 'locator' | 'expected' | 'mask'> & {\n  expected?: Buffer,\n  locator?: api.Locator,\n  timeout: number,\n  isNot: boolean,\n  mask?: api.Locator[],\n};\n\nexport class Page extends ChannelOwner<channels.PageChannel> implements api.Page {\n  private _browserContext: BrowserContext;\n  _ownedContext: BrowserContext | undefined;\n\n  private _mainFrame: Frame;\n  private _frames = new Set<Frame>();\n  _workers = new Set<Worker>();\n  private _closed = false;\n  readonly _closedOrCrashedScope = new LongStandingScope();\n  private _viewportSize: Size | undefined;\n  _routes: RouteHandler[] = [];\n  _webSocketRoutes: WebSocketRouteHandler[] = [];\n\n  readonly accessibility: Accessibility;\n  readonly coverage: Coverage;\n  readonly keyboard: Keyboard;\n  readonly mouse: Mouse;\n  readonly request: APIRequestContext;\n  readonly touchscreen: Touchscreen;\n  readonly clock: Clock;\n\n\n  readonly _bindings = new Map<string, (source: structs.BindingSource, ...args: any[]) => any>();\n  readonly _timeoutSettings: TimeoutSettings;\n  private _video: Video | null = null;\n  readonly _opener: Page | null;\n  private _closeReason: string | undefined;\n  _closeWasCalled: boolean = false;\n  private _harRouters: HarRouter[] = [];\n\n  private _locatorHandlers = new Map<number, { locator: Locator, handler: (locator: Locator) => any, times: number | undefined }>();\n\n  static from(page: channels.PageChannel): Page {\n    return (page as any)._object;\n  }\n\n  static fromNullable(page: channels.PageChannel | undefined): Page | null {\n    return page ? Page.from(page) : null;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.PageInitializer) {\n    super(parent, type, guid, initializer);\n    this._browserContext = parent as unknown as BrowserContext;\n    this._timeoutSettings = new TimeoutSettings(this._platform, this._browserContext._timeoutSettings);\n\n    this.accessibility = new Accessibility(this._channel);\n    this.keyboard = new Keyboard(this);\n    this.mouse = new Mouse(this);\n    this.request = this._browserContext.request;\n    this.touchscreen = new Touchscreen(this);\n    this.clock = this._browserContext.clock;\n\n    this._mainFrame = Frame.from(initializer.mainFrame);\n    this._mainFrame._page = this;\n    this._frames.add(this._mainFrame);\n    this._viewportSize = initializer.viewportSize;\n    this._closed = initializer.isClosed;\n    this._opener = Page.fromNullable(initializer.opener);\n\n    this._channel.on('bindingCall', ({ binding }) => this._onBinding(BindingCall.from(binding)));\n    this._channel.on('close', () => this._onClose());\n    this._channel.on('crash', () => this._onCrash());\n    this._channel.on('download', ({ url, suggestedFilename, artifact }) => {\n      const artifactObject = Artifact.from(artifact);\n      this.emit(Events.Page.Download, new Download(this, url, suggestedFilename, artifactObject));\n    });\n    this._channel.on('fileChooser', ({ element, isMultiple }) => this.emit(Events.Page.FileChooser, new FileChooser(this, ElementHandle.from(element), isMultiple)));\n    this._channel.on('frameAttached', ({ frame }) => this._onFrameAttached(Frame.from(frame)));\n    this._channel.on('frameDetached', ({ frame }) => this._onFrameDetached(Frame.from(frame)));\n    this._channel.on('locatorHandlerTriggered', ({ uid }) => this._onLocatorHandlerTriggered(uid));\n    this._channel.on('route', ({ route }) => this._onRoute(Route.from(route)));\n    this._channel.on('webSocketRoute', ({ webSocketRoute }) => this._onWebSocketRoute(WebSocketRoute.from(webSocketRoute)));\n    this._channel.on('video', ({ artifact }) => {\n      const artifactObject = Artifact.from(artifact);\n      this._forceVideo()._artifactReady(artifactObject);\n    });\n    this._channel.on('viewportSizeChanged', ({ viewportSize }) => this._viewportSize = viewportSize);\n    this._channel.on('webSocket', ({ webSocket }) => this.emit(Events.Page.WebSocket, WebSocket.from(webSocket)));\n    this._channel.on('worker', ({ worker }) => this._onWorker(Worker.from(worker)));\n\n    this.coverage = new Coverage(this._channel);\n\n    this.once(Events.Page.Close, () => this._closedOrCrashedScope.close(this._closeErrorWithReason()));\n    this.once(Events.Page.Crash, () => this._closedOrCrashedScope.close(new TargetClosedError()));\n\n    this._setEventToSubscriptionMapping(new Map<string, channels.PageUpdateSubscriptionParams['event']>([\n      [Events.Page.Console, 'console'],\n      [Events.Page.Dialog, 'dialog'],\n      [Events.Page.Request, 'request'],\n      [Events.Page.Response, 'response'],\n      [Events.Page.RequestFinished, 'requestFinished'],\n      [Events.Page.RequestFailed, 'requestFailed'],\n      [Events.Page.FileChooser, 'fileChooser'],\n    ]));\n  }\n\n  private _onFrameAttached(frame: Frame) {\n    frame._page = this;\n    this._frames.add(frame);\n    if (frame._parentFrame)\n      frame._parentFrame._childFrames.add(frame);\n    this.emit(Events.Page.FrameAttached, frame);\n  }\n\n  private _onFrameDetached(frame: Frame) {\n    this._frames.delete(frame);\n    frame._detached = true;\n    if (frame._parentFrame)\n      frame._parentFrame._childFrames.delete(frame);\n    this.emit(Events.Page.FrameDetached, frame);\n  }\n\n  private async _onRoute(route: Route) {\n    route._context = this.context();\n    const routeHandlers = this._routes.slice();\n    for (const routeHandler of routeHandlers) {\n      // If the page was closed we stall all requests right away.\n      if (this._closeWasCalled || this._browserContext._closingStatus !== 'none')\n        return;\n      if (!routeHandler.matches(route.request().url()))\n        continue;\n      const index = this._routes.indexOf(routeHandler);\n      if (index === -1)\n        continue;\n      if (routeHandler.willExpire())\n        this._routes.splice(index, 1);\n      const handled = await routeHandler.handle(route);\n      if (!this._routes.length)\n        this._wrapApiCall(() => this._updateInterceptionPatterns(), { internal: true }).catch(() => {});\n      if (handled)\n        return;\n    }\n\n    await this._browserContext._onRoute(route);\n  }\n\n  private async _onWebSocketRoute(webSocketRoute: WebSocketRoute) {\n    const routeHandler = this._webSocketRoutes.find(route => route.matches(webSocketRoute.url()));\n    if (routeHandler)\n      await routeHandler.handle(webSocketRoute);\n    else\n      await this._browserContext._onWebSocketRoute(webSocketRoute);\n  }\n\n  async _onBinding(bindingCall: BindingCall) {\n    const func = this._bindings.get(bindingCall._initializer.name);\n    if (func) {\n      await bindingCall.call(func);\n      return;\n    }\n    await this._browserContext._onBinding(bindingCall);\n  }\n\n  _onWorker(worker: Worker): void {\n    this._workers.add(worker);\n    worker._page = this;\n    this.emit(Events.Page.Worker, worker);\n  }\n\n  _onClose() {\n    this._closed = true;\n    this._browserContext._pages.delete(this);\n    this._browserContext._backgroundPages.delete(this);\n    this._disposeHarRouters();\n    this.emit(Events.Page.Close, this);\n  }\n\n  private _onCrash() {\n    this.emit(Events.Page.Crash, this);\n  }\n\n  context(): BrowserContext {\n    return this._browserContext;\n  }\n\n  async opener(): Promise<Page | null> {\n    if (!this._opener || this._opener.isClosed())\n      return null;\n    return this._opener;\n  }\n\n  mainFrame(): Frame {\n    return this._mainFrame;\n  }\n\n  frame(frameSelector: string | { name?: string, url?: URLMatch }): Frame | null {\n    const name = isString(frameSelector) ? frameSelector : frameSelector.name;\n    const url = isObject(frameSelector) ? frameSelector.url : undefined;\n    assert(name || url, 'Either name or url matcher should be specified');\n    return this.frames().find(f => {\n      if (name)\n        return f.name() === name;\n      return urlMatches(this._browserContext._options.baseURL, f.url(), url);\n    }) || null;\n  }\n\n  frames(): Frame[] {\n    return [...this._frames];\n  }\n\n  setDefaultNavigationTimeout(timeout: number) {\n    this._timeoutSettings.setDefaultNavigationTimeout(timeout);\n  }\n\n  setDefaultTimeout(timeout: number) {\n    this._timeoutSettings.setDefaultTimeout(timeout);\n  }\n\n  private _forceVideo(): Video {\n    if (!this._video)\n      this._video = new Video(this, this._connection);\n    return this._video;\n  }\n\n  video(): Video | null {\n    // Note: we are creating Video object lazily, because we do not know\n    // BrowserContextOptions when constructing the page - it is assigned\n    // too late during launchPersistentContext.\n    if (!this._browserContext._options.recordVideo)\n      return null;\n    return this._forceVideo();\n  }\n\n  async $(selector: string, options?: { strict?: boolean }): Promise<ElementHandle<SVGElement | HTMLElement> | null> {\n    return await this._mainFrame.$(selector, options);\n  }\n\n  waitForSelector(selector: string, options: channels.FrameWaitForSelectorOptions & TimeoutOptions & { state: 'attached' | 'visible' }): Promise<ElementHandle<SVGElement | HTMLElement>>;\n  waitForSelector(selector: string, options?: channels.FrameWaitForSelectorOptions & TimeoutOptions): Promise<ElementHandle<SVGElement | HTMLElement> | null>;\n  async waitForSelector(selector: string, options?: channels.FrameWaitForSelectorOptions & TimeoutOptions): Promise<ElementHandle<SVGElement | HTMLElement> | null> {\n    return await this._mainFrame.waitForSelector(selector, options);\n  }\n\n  async dispatchEvent(selector: string, type: string, eventInit?: any, options?: channels.FrameDispatchEventOptions): Promise<void> {\n    return await this._mainFrame.dispatchEvent(selector, type, eventInit, options);\n  }\n\n  async evaluateHandle<R, Arg>(pageFunction: structs.PageFunction<Arg, R>, arg?: Arg): Promise<structs.SmartHandle<R>> {\n    assertMaxArguments(arguments.length, 2);\n    return await this._mainFrame.evaluateHandle(pageFunction, arg);\n  }\n\n  async $eval<R, Arg>(selector: string, pageFunction: structs.PageFunctionOn<Element, Arg, R>, arg?: Arg): Promise<R> {\n    assertMaxArguments(arguments.length, 3);\n    return await this._mainFrame.$eval(selector, pageFunction, arg);\n  }\n\n  async $$eval<R, Arg>(selector: string, pageFunction: structs.PageFunctionOn<Element[], Arg, R>, arg?: Arg): Promise<R> {\n    assertMaxArguments(arguments.length, 3);\n    return await this._mainFrame.$$eval(selector, pageFunction, arg);\n  }\n\n  async $$(selector: string): Promise<ElementHandle<SVGElement | HTMLElement>[]> {\n    return await this._mainFrame.$$(selector);\n  }\n\n  async addScriptTag(options: { url?: string; path?: string; content?: string; type?: string; } = {}): Promise<ElementHandle> {\n    return await this._mainFrame.addScriptTag(options);\n  }\n\n  async addStyleTag(options: { url?: string; path?: string; content?: string; } = {}): Promise<ElementHandle> {\n    return await this._mainFrame.addStyleTag(options);\n  }\n\n  async exposeFunction(name: string, callback: Function) {\n    await this._channel.exposeBinding({ name });\n    const binding = (source: structs.BindingSource, ...args: any[]) => callback(...args);\n    this._bindings.set(name, binding);\n  }\n\n  async exposeBinding(name: string, callback: (source: structs.BindingSource, ...args: any[]) => any, options: { handle?: boolean } = {}) {\n    await this._channel.exposeBinding({ name, needsHandle: options.handle });\n    this._bindings.set(name, callback);\n  }\n\n  async setExtraHTTPHeaders(headers: Headers) {\n    validateHeaders(headers);\n    await this._channel.setExtraHTTPHeaders({ headers: headersObjectToArray(headers) });\n  }\n\n  url(): string {\n    return this._mainFrame.url();\n  }\n\n  async content(): Promise<string> {\n    return await this._mainFrame.content();\n  }\n\n  async setContent(html: string, options?: channels.FrameSetContentOptions & TimeoutOptions): Promise<void> {\n    return await this._mainFrame.setContent(html, options);\n  }\n\n  async goto(url: string, options?: channels.FrameGotoOptions & TimeoutOptions): Promise<Response | null> {\n    return await this._mainFrame.goto(url, options);\n  }\n\n  async reload(options: channels.PageReloadOptions & TimeoutOptions = {}): Promise<Response | null> {\n    const waitUntil = verifyLoadState('waitUntil', options.waitUntil === undefined ? 'load' : options.waitUntil);\n    return Response.fromNullable((await this._channel.reload({ ...options, waitUntil, timeout: this._timeoutSettings.navigationTimeout(options) })).response);\n  }\n\n  async addLocatorHandler(locator: Locator, handler: (locator: Locator) => any, options: { times?: number, noWaitAfter?: boolean } = {}): Promise<void> {\n    if (locator._frame !== this._mainFrame)\n      throw new Error(`Locator must belong to the main frame of this page`);\n    if (options.times === 0)\n      return;\n    const { uid } = await this._channel.registerLocatorHandler({ selector: locator._selector, noWaitAfter: options.noWaitAfter });\n    this._locatorHandlers.set(uid, { locator, handler, times: options.times });\n  }\n\n  private async _onLocatorHandlerTriggered(uid: number) {\n    let remove = false;\n    try {\n      const handler = this._locatorHandlers.get(uid);\n      if (handler && handler.times !== 0) {\n        if (handler.times !== undefined)\n          handler.times--;\n        await handler.handler(handler.locator);\n      }\n      remove = handler?.times === 0;\n    } finally {\n      if (remove)\n        this._locatorHandlers.delete(uid);\n      this._wrapApiCall(() => this._channel.resolveLocatorHandlerNoReply({ uid, remove }), { internal: true }).catch(() => {});\n    }\n  }\n\n  async removeLocatorHandler(locator: Locator): Promise<void> {\n    for (const [uid, data] of this._locatorHandlers) {\n      if (data.locator._equals(locator)) {\n        this._locatorHandlers.delete(uid);\n        await this._channel.unregisterLocatorHandler({ uid }).catch(() => {});\n      }\n    }\n  }\n\n  async waitForLoadState(state?: LifecycleEvent, options?: TimeoutOptions): Promise<void> {\n    return await this._mainFrame.waitForLoadState(state, options);\n  }\n\n  async waitForNavigation(options?: WaitForNavigationOptions): Promise<Response | null> {\n    return await this._mainFrame.waitForNavigation(options);\n  }\n\n  async waitForURL(url: URLMatch, options?: TimeoutOptions & { waitUntil?: LifecycleEvent }): Promise<void> {\n    return await this._mainFrame.waitForURL(url, options);\n  }\n\n  async waitForRequest(urlOrPredicate: string | RegExp | ((r: Request) => boolean | Promise<boolean>), options: TimeoutOptions = {}): Promise<Request> {\n    const predicate = async (request: Request) => {\n      if (isString(urlOrPredicate) || isRegExp(urlOrPredicate))\n        return urlMatches(this._browserContext._options.baseURL, request.url(), urlOrPredicate);\n      return await urlOrPredicate(request);\n    };\n    const trimmedUrl = trimUrl(urlOrPredicate);\n    const logLine = trimmedUrl ? `waiting for request ${trimmedUrl}` : undefined;\n    return await this._waitForEvent(Events.Page.Request, { predicate, timeout: options.timeout }, logLine);\n  }\n\n  async waitForResponse(urlOrPredicate: string | RegExp | ((r: Response) => boolean | Promise<boolean>), options: TimeoutOptions = {}): Promise<Response> {\n    const predicate = async (response: Response) => {\n      if (isString(urlOrPredicate) || isRegExp(urlOrPredicate))\n        return urlMatches(this._browserContext._options.baseURL, response.url(), urlOrPredicate);\n      return await urlOrPredicate(response);\n    };\n    const trimmedUrl = trimUrl(urlOrPredicate);\n    const logLine = trimmedUrl ? `waiting for response ${trimmedUrl}` : undefined;\n    return await this._waitForEvent(Events.Page.Response, { predicate, timeout: options.timeout }, logLine);\n  }\n\n  async waitForEvent(event: string, optionsOrPredicate: WaitForEventOptions = {}): Promise<any> {\n    return await this._waitForEvent(event, optionsOrPredicate, `waiting for event \"${event}\"`);\n  }\n\n  _closeErrorWithReason(): TargetClosedError {\n    return new TargetClosedError(this._closeReason || this._browserContext._effectiveCloseReason());\n  }\n\n  private async _waitForEvent(event: string, optionsOrPredicate: WaitForEventOptions, logLine?: string): Promise<any> {\n    return await this._wrapApiCall(async () => {\n      const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === 'function' ? {} : optionsOrPredicate);\n      const predicate = typeof optionsOrPredicate === 'function' ? optionsOrPredicate : optionsOrPredicate.predicate;\n      const waiter = Waiter.createForEvent(this, event);\n      if (logLine)\n        waiter.log(logLine);\n      waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event \"${event}\"`);\n      if (event !== Events.Page.Crash)\n        waiter.rejectOnEvent(this, Events.Page.Crash, new Error('Page crashed'));\n      if (event !== Events.Page.Close)\n        waiter.rejectOnEvent(this, Events.Page.Close, () => this._closeErrorWithReason());\n      const result = await waiter.waitForEvent(this, event, predicate as any);\n      waiter.dispose();\n      return result;\n    });\n  }\n\n  async goBack(options: channels.PageGoBackOptions & TimeoutOptions = {}): Promise<Response | null> {\n    const waitUntil = verifyLoadState('waitUntil', options.waitUntil === undefined ? 'load' : options.waitUntil);\n    return Response.fromNullable((await this._channel.goBack({ ...options, waitUntil, timeout: this._timeoutSettings.navigationTimeout(options) })).response);\n  }\n\n  async goForward(options: channels.PageGoForwardOptions & TimeoutOptions = {}): Promise<Response | null> {\n    const waitUntil = verifyLoadState('waitUntil', options.waitUntil === undefined ? 'load' : options.waitUntil);\n    return Response.fromNullable((await this._channel.goForward({ ...options, waitUntil, timeout: this._timeoutSettings.navigationTimeout(options) })).response);\n  }\n\n  async requestGC() {\n    await this._channel.requestGC();\n  }\n\n  async emulateMedia(options: { media?: 'screen' | 'print' | null, colorScheme?: 'dark' | 'light' | 'no-preference' | null, reducedMotion?: 'reduce' | 'no-preference' | null, forcedColors?: 'active' | 'none' | null, contrast?: 'no-preference' | 'more' | null } = {}) {\n    await this._channel.emulateMedia({\n      media: options.media === null ? 'no-override' : options.media,\n      colorScheme: options.colorScheme === null ? 'no-override' : options.colorScheme,\n      reducedMotion: options.reducedMotion === null ? 'no-override' : options.reducedMotion,\n      forcedColors: options.forcedColors === null ? 'no-override' : options.forcedColors,\n      contrast: options.contrast === null ? 'no-override' : options.contrast,\n    });\n  }\n\n  async setViewportSize(viewportSize: Size) {\n    this._viewportSize = viewportSize;\n    await this._channel.setViewportSize({ viewportSize });\n  }\n\n  viewportSize(): Size | null {\n    return this._viewportSize || null;\n  }\n\n  async evaluate<R, Arg>(pageFunction: structs.PageFunction<Arg, R>, arg?: Arg): Promise<R> {\n    assertMaxArguments(arguments.length, 2);\n    return await this._mainFrame.evaluate(pageFunction, arg);\n  }\n\n  async addInitScript(script: Function | string | { path?: string, content?: string }, arg?: any) {\n    const source = await evaluationScript(this._platform, script, arg);\n    await this._channel.addInitScript({ source });\n  }\n\n  async route(url: URLMatch, handler: RouteHandlerCallback, options: { times?: number } = {}): Promise<void> {\n    this._routes.unshift(new RouteHandler(this._platform, this._browserContext._options.baseURL, url, handler, options.times));\n    await this._updateInterceptionPatterns();\n  }\n\n  async routeFromHAR(har: string, options: { url?: string | RegExp, notFound?: 'abort' | 'fallback', update?: boolean, updateContent?: 'attach' | 'embed', updateMode?: 'minimal' | 'full'} = {}): Promise<void> {\n    const localUtils = this._connection.localUtils();\n    if (!localUtils)\n      throw new Error('Route from har is not supported in thin clients');\n    if (options.update) {\n      await this._browserContext._recordIntoHAR(har, this, options);\n      return;\n    }\n    const harRouter = await HarRouter.create(localUtils, har, options.notFound || 'abort', { urlMatch: options.url });\n    this._harRouters.push(harRouter);\n    await harRouter.addPageRoute(this);\n  }\n\n  async routeWebSocket(url: URLMatch, handler: WebSocketRouteHandlerCallback): Promise<void> {\n    this._webSocketRoutes.unshift(new WebSocketRouteHandler(this._browserContext._options.baseURL, url, handler));\n    await this._updateWebSocketInterceptionPatterns();\n  }\n\n  private _disposeHarRouters() {\n    this._harRouters.forEach(router => router.dispose());\n    this._harRouters = [];\n  }\n\n  async unrouteAll(options?: { behavior?: 'wait'|'ignoreErrors'|'default' }): Promise<void> {\n    await this._unrouteInternal(this._routes, [], options?.behavior);\n    this._disposeHarRouters();\n  }\n\n  async unroute(url: URLMatch, handler?: RouteHandlerCallback): Promise<void> {\n    const removed = [];\n    const remaining = [];\n    for (const route of this._routes) {\n      if (urlMatchesEqual(route.url, url) && (!handler || route.handler === handler))\n        removed.push(route);\n      else\n        remaining.push(route);\n    }\n    await this._unrouteInternal(removed, remaining, 'default');\n  }\n\n  private async _unrouteInternal(removed: RouteHandler[], remaining: RouteHandler[], behavior?: 'wait'|'ignoreErrors'|'default'): Promise<void> {\n    this._routes = remaining;\n    await this._updateInterceptionPatterns();\n    if (!behavior || behavior === 'default')\n      return;\n    const promises = removed.map(routeHandler => routeHandler.stop(behavior));\n    await Promise.all(promises);\n  }\n\n  private async _updateInterceptionPatterns() {\n    const patterns = RouteHandler.prepareInterceptionPatterns(this._routes);\n    await this._channel.setNetworkInterceptionPatterns({ patterns });\n  }\n\n  private async _updateWebSocketInterceptionPatterns() {\n    const patterns = WebSocketRouteHandler.prepareInterceptionPatterns(this._webSocketRoutes);\n    await this._channel.setWebSocketInterceptionPatterns({ patterns });\n  }\n\n  async screenshot(options: Omit<channels.PageScreenshotOptions, 'mask'> & TimeoutOptions & { path?: string, mask?: api.Locator[] } = {}): Promise<Buffer> {\n    const mask = options.mask as Locator[] | undefined;\n    const copy: channels.PageScreenshotParams = { ...options, mask: undefined, timeout: this._timeoutSettings.timeout(options) };\n    if (!copy.type)\n      copy.type = determineScreenshotType(options);\n    if (mask) {\n      copy.mask = mask.map(locator => ({\n        frame: locator._frame._channel,\n        selector: locator._selector,\n      }));\n    }\n    const result = await this._channel.screenshot(copy);\n    if (options.path) {\n      await mkdirIfNeeded(this._platform, options.path);\n      await this._platform.fs().promises.writeFile(options.path, result.binary);\n    }\n    return result.binary;\n  }\n\n  async _expectScreenshot(options: ExpectScreenshotOptions): Promise<{ actual?: Buffer, previous?: Buffer, diff?: Buffer, errorMessage?: string, log?: string[], timedOut?: boolean}> {\n    const mask = options?.mask ? options?.mask.map(locator => ({\n      frame: (locator as Locator)._frame._channel,\n      selector: (locator as Locator)._selector,\n    })) : undefined;\n    const locator = options.locator ? {\n      frame: (options.locator as Locator)._frame._channel,\n      selector: (options.locator as Locator)._selector,\n    } : undefined;\n    return await this._channel.expectScreenshot({\n      ...options,\n      isNot: !!options.isNot,\n      locator,\n      mask,\n    });\n  }\n\n  async title(): Promise<string> {\n    return await this._mainFrame.title();\n  }\n\n  async bringToFront(): Promise<void> {\n    await this._channel.bringToFront();\n  }\n\n  async [Symbol.asyncDispose]() {\n    await this.close();\n  }\n\n  async close(options: { runBeforeUnload?: boolean, reason?: string } = {}) {\n    this._closeReason = options.reason;\n    this._closeWasCalled = true;\n    try {\n      if (this._ownedContext)\n        await this._ownedContext.close();\n      else\n        await this._channel.close(options);\n    } catch (e) {\n      if (isTargetClosedError(e) && !options.runBeforeUnload)\n        return;\n      throw e;\n    }\n  }\n\n  isClosed(): boolean {\n    return this._closed;\n  }\n\n  async click(selector: string, options?: channels.FrameClickOptions & TimeoutOptions) {\n    return await this._mainFrame.click(selector, options);\n  }\n\n  async dragAndDrop(source: string, target: string, options?: channels.FrameDragAndDropOptions & TimeoutOptions) {\n    return await this._mainFrame.dragAndDrop(source, target, options);\n  }\n\n  async dblclick(selector: string, options?: channels.FrameDblclickOptions & TimeoutOptions) {\n    await this._mainFrame.dblclick(selector, options);\n  }\n\n  async tap(selector: string, options?: channels.FrameTapOptions & TimeoutOptions) {\n    return await this._mainFrame.tap(selector, options);\n  }\n\n  async fill(selector: string, value: string, options?: channels.FrameFillOptions & TimeoutOptions) {\n    return await this._mainFrame.fill(selector, value, options);\n  }\n\n  locator(selector: string, options?: LocatorOptions): Locator {\n    return this.mainFrame().locator(selector, options);\n  }\n\n  getByTestId(testId: string | RegExp): Locator {\n    return this.mainFrame().getByTestId(testId);\n  }\n\n  getByAltText(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.mainFrame().getByAltText(text, options);\n  }\n\n  getByLabel(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.mainFrame().getByLabel(text, options);\n  }\n\n  getByPlaceholder(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.mainFrame().getByPlaceholder(text, options);\n  }\n\n  getByText(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.mainFrame().getByText(text, options);\n  }\n\n  getByTitle(text: string | RegExp, options?: { exact?: boolean }): Locator {\n    return this.mainFrame().getByTitle(text, options);\n  }\n\n  getByRole(role: string, options: ByRoleOptions = {}): Locator {\n    return this.mainFrame().getByRole(role, options);\n  }\n\n  frameLocator(selector: string): FrameLocator {\n    return this.mainFrame().frameLocator(selector);\n  }\n\n  async focus(selector: string, options?: channels.FrameFocusOptions & TimeoutOptions) {\n    return await this._mainFrame.focus(selector, options);\n  }\n\n  async textContent(selector: string, options?: channels.FrameTextContentOptions & TimeoutOptions): Promise<null|string> {\n    return await this._mainFrame.textContent(selector, options);\n  }\n\n  async innerText(selector: string, options?: channels.FrameInnerTextOptions & TimeoutOptions): Promise<string> {\n    return await this._mainFrame.innerText(selector, options);\n  }\n\n  async innerHTML(selector: string, options?: channels.FrameInnerHTMLOptions & TimeoutOptions): Promise<string> {\n    return await this._mainFrame.innerHTML(selector, options);\n  }\n\n  async getAttribute(selector: string, name: string, options?: channels.FrameGetAttributeOptions & TimeoutOptions): Promise<string | null> {\n    return await this._mainFrame.getAttribute(selector, name, options);\n  }\n\n  async inputValue(selector: string, options?: channels.FrameInputValueOptions & TimeoutOptions): Promise<string> {\n    return await this._mainFrame.inputValue(selector, options);\n  }\n\n  async isChecked(selector: string, options?: channels.FrameIsCheckedOptions & TimeoutOptions): Promise<boolean> {\n    return await this._mainFrame.isChecked(selector, options);\n  }\n\n  async isDisabled(selector: string, options?: channels.FrameIsDisabledOptions & TimeoutOptions): Promise<boolean> {\n    return await this._mainFrame.isDisabled(selector, options);\n  }\n\n  async isEditable(selector: string, options?: channels.FrameIsEditableOptions & TimeoutOptions): Promise<boolean> {\n    return await this._mainFrame.isEditable(selector, options);\n  }\n\n  async isEnabled(selector: string, options?: channels.FrameIsEnabledOptions & TimeoutOptions): Promise<boolean> {\n    return await this._mainFrame.isEnabled(selector, options);\n  }\n\n  async isHidden(selector: string, options?: channels.FrameIsHiddenOptions & TimeoutOptions): Promise<boolean> {\n    return await this._mainFrame.isHidden(selector, options);\n  }\n\n  async isVisible(selector: string, options?: channels.FrameIsVisibleOptions & TimeoutOptions): Promise<boolean> {\n    return await this._mainFrame.isVisible(selector, options);\n  }\n\n  async hover(selector: string, options?: channels.FrameHoverOptions & TimeoutOptions) {\n    return await this._mainFrame.hover(selector, options);\n  }\n\n  async selectOption(selector: string, values: string | api.ElementHandle | SelectOption | string[] | api.ElementHandle[] | SelectOption[] | null, options?: SelectOptionOptions): Promise<string[]> {\n    return await this._mainFrame.selectOption(selector, values, options);\n  }\n\n  async setInputFiles(selector: string, files: string | FilePayload | string[] | FilePayload[], options?: channels.FrameSetInputFilesOptions & TimeoutOptions): Promise<void> {\n    return await this._mainFrame.setInputFiles(selector, files, options);\n  }\n\n  async type(selector: string, text: string, options?: channels.FrameTypeOptions & TimeoutOptions) {\n    return await this._mainFrame.type(selector, text, options);\n  }\n\n  async press(selector: string, key: string, options?: channels.FramePressOptions & TimeoutOptions) {\n    return await this._mainFrame.press(selector, key, options);\n  }\n\n  async check(selector: string, options?: channels.FrameCheckOptions & TimeoutOptions) {\n    return await this._mainFrame.check(selector, options);\n  }\n\n  async uncheck(selector: string, options?: channels.FrameUncheckOptions & TimeoutOptions) {\n    return await this._mainFrame.uncheck(selector, options);\n  }\n\n  async setChecked(selector: string, checked: boolean, options?: channels.FrameCheckOptions & TimeoutOptions) {\n    return await this._mainFrame.setChecked(selector, checked, options);\n  }\n\n  async waitForTimeout(timeout: number) {\n    return await this._mainFrame.waitForTimeout(timeout);\n  }\n\n  async waitForFunction<R, Arg>(pageFunction: structs.PageFunction<Arg, R>, arg?: Arg, options?: WaitForFunctionOptions): Promise<structs.SmartHandle<R>> {\n    return await this._mainFrame.waitForFunction(pageFunction, arg, options);\n  }\n\n  workers(): Worker[] {\n    return [...this._workers];\n  }\n\n  async pause(_options?: { __testHookKeepTestTimeout: boolean }) {\n    if (this._platform.isJSDebuggerAttached())\n      return;\n    const defaultNavigationTimeout = this._browserContext._timeoutSettings.defaultNavigationTimeout();\n    const defaultTimeout = this._browserContext._timeoutSettings.defaultTimeout();\n    this._browserContext.setDefaultNavigationTimeout(0);\n    this._browserContext.setDefaultTimeout(0);\n    this._instrumentation?.onWillPause({ keepTestTimeout: !!_options?.__testHookKeepTestTimeout });\n    await this._closedOrCrashedScope.safeRace(this.context()._channel.pause());\n    this._browserContext.setDefaultNavigationTimeout(defaultNavigationTimeout);\n    this._browserContext.setDefaultTimeout(defaultTimeout);\n  }\n\n  async pdf(options: PDFOptions = {}): Promise<Buffer> {\n    const transportOptions: channels.PagePdfParams = { ...options } as channels.PagePdfParams;\n    if (transportOptions.margin)\n      transportOptions.margin = { ...transportOptions.margin };\n    if (typeof options.width === 'number')\n      transportOptions.width = options.width + 'px';\n    if (typeof options.height === 'number')\n      transportOptions.height  = options.height + 'px';\n    for (const margin of ['top', 'right', 'bottom', 'left']) {\n      const index = margin as 'top' | 'right' | 'bottom' | 'left';\n      if (options.margin && typeof options.margin[index] === 'number')\n        transportOptions.margin![index] = transportOptions.margin![index] + 'px';\n    }\n    const result = await this._channel.pdf(transportOptions);\n    if (options.path) {\n      const platform = this._platform;\n      await platform.fs().promises.mkdir(platform.path().dirname(options.path), { recursive: true });\n      await platform.fs().promises.writeFile(options.path, result.pdf);\n    }\n    return result.pdf;\n  }\n\n  async _snapshotForAI(): Promise<string> {\n    const result = await this._channel.snapshotForAI();\n    return result.snapshot;\n  }\n}\n\nexport class BindingCall extends ChannelOwner<channels.BindingCallChannel> {\n  static from(channel: channels.BindingCallChannel): BindingCall {\n    return (channel as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.BindingCallInitializer) {\n    super(parent, type, guid, initializer);\n  }\n\n  async call(func: (source: structs.BindingSource, ...args: any[]) => any) {\n    try {\n      const frame = Frame.from(this._initializer.frame);\n      const source = {\n        context: frame._page!.context(),\n        page: frame._page!,\n        frame\n      };\n      let result: any;\n      if (this._initializer.handle)\n        result = await func(source, JSHandle.from(this._initializer.handle));\n      else\n        result = await func(source, ...this._initializer.args!.map(parseResult));\n      this._channel.resolve({ result: serializeArgument(result) }).catch(() => {});\n    } catch (e) {\n      this._channel.reject({ error: serializeError(e) }).catch(() => {});\n    }\n  }\n}\n\nfunction trimUrl(param: any): string | undefined {\n  if (isRegExp(param))\n    return `/${trimStringWithEllipsis(param.source, 50)}/${param.flags}`;\n  if (isString(param))\n    return `\"${trimStringWithEllipsis(param, 50)}\"`;\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { JSHandle } from './jsHandle';\nimport { Page } from './page';\n\nimport type * as api from '../../types/types';\nimport type { Platform } from './platform';\nimport type * as channels from '@protocol/channels';\n\ntype ConsoleMessageLocation = channels.BrowserContextConsoleEvent['location'];\n\nexport class ConsoleMessage implements api.ConsoleMessage {\n\n  private _page: Page | null;\n  private _event: channels.BrowserContextConsoleEvent | channels.ElectronApplicationConsoleEvent;\n\n  constructor(platform: Platform, event: channels.BrowserContextConsoleEvent | channels.ElectronApplicationConsoleEvent) {\n    this._page = ('page' in event && event.page) ? Page.from(event.page) : null;\n    this._event = event;\n    if (platform.inspectCustom)\n      (this as any)[platform.inspectCustom] = () => this._inspect();\n  }\n\n  page() {\n    return this._page;\n  }\n\n  type(): string {\n    return this._event.type;\n  }\n\n  text(): string {\n    return this._event.text;\n  }\n\n  args(): JSHandle[] {\n    return this._event.args.map(JSHandle.from);\n  }\n\n  location(): ConsoleMessageLocation {\n    return this._event.location;\n  }\n\n  private _inspect() {\n    return this.text();\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChannelOwner } from './channelOwner';\nimport { Page } from './page';\n\nimport type * as api from '../../types/types';\nimport type * as channels from '@protocol/channels';\n\n\nexport class Dialog extends ChannelOwner<channels.DialogChannel> implements api.Dialog {\n  static from(dialog: channels.DialogChannel): Dialog {\n    return (dialog as any)._object;\n  }\n\n  private _page: Page | null;\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.DialogInitializer) {\n    super(parent, type, guid, initializer);\n    // Note: dialogs that open early during page initialization block it.\n    // Therefore, we must report the dialog without a page to be able to handle it.\n    this._page = Page.fromNullable(initializer.page);\n  }\n\n  page() {\n    return this._page;\n  }\n\n  type(): string {\n    return this._initializer.type;\n  }\n\n  message(): string {\n    return this._initializer.message;\n  }\n\n  defaultValue(): string {\n    return this._initializer.defaultValue;\n  }\n\n  async accept(promptText: string | undefined) {\n    await this._channel.accept({ promptText });\n  }\n\n  async dismiss() {\n    await this._channel.dismiss();\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Page } from './page';\nimport type * as api from '../../types/types';\n\nexport class WebError implements api.WebError {\n  private _page: Page | null;\n  private _error: Error;\n\n  constructor(page: Page | null, error: Error) {\n    this._page = page;\n    this._error = error;\n  }\n\n  page() {\n    return this._page;\n  }\n\n  error() {\n    return this._error;\n  }\n}\n","/**\n * Copyright 2017 Google Inc. All rights reserved.\n * Modifications copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Artifact } from './artifact';\nimport { Browser } from './browser';\nimport { CDPSession } from './cdpSession';\nimport { ChannelOwner } from './channelOwner';\nimport { evaluationScript } from './clientHelper';\nimport { Clock } from './clock';\nimport { ConsoleMessage } from './consoleMessage';\nimport { Dialog } from './dialog';\nimport { TargetClosedError, parseError } from './errors';\nimport { Events } from './events';\nimport { APIRequestContext } from './fetch';\nimport { Frame } from './frame';\nimport { HarRouter } from './harRouter';\nimport * as network from './network';\nimport { BindingCall, Page } from './page';\nimport { Tracing } from './tracing';\nimport { Waiter } from './waiter';\nimport { WebError } from './webError';\nimport { Worker } from './worker';\nimport { TimeoutSettings } from './timeoutSettings';\nimport { mkdirIfNeeded } from './fileUtils';\nimport { headersObjectToArray } from '../utils/isomorphic/headers';\nimport { urlMatchesEqual } from '../utils/isomorphic/urlMatch';\nimport { isRegExp, isString } from '../utils/isomorphic/rtti';\nimport { rewriteErrorMessage } from '../utils/isomorphic/stackTrace';\n\nimport type { BrowserContextOptions, Headers, StorageState, WaitForEventOptions } from './types';\nimport type * as structs from '../../types/structs';\nimport type * as api from '../../types/types';\nimport type { URLMatch } from '../utils/isomorphic/urlMatch';\nimport type { Platform } from './platform';\nimport type * as channels from '@protocol/channels';\n\nexport class BrowserContext extends ChannelOwner<channels.BrowserContextChannel> implements api.BrowserContext {\n  _pages = new Set<Page>();\n  _routes: network.RouteHandler[] = [];\n  _webSocketRoutes: network.WebSocketRouteHandler[] = [];\n  // Browser is null for browser contexts created outside of normal browser, e.g. android or electron.\n  _browser: Browser | null = null;\n  readonly _bindings = new Map<string, (source: structs.BindingSource, ...args: any[]) => any>();\n  _timeoutSettings: TimeoutSettings;\n  _ownerPage: Page | undefined;\n  private _closedPromise: Promise<void>;\n  readonly _options: channels.BrowserNewContextParams;\n\n  readonly request: APIRequestContext;\n  readonly tracing: Tracing;\n  readonly clock: Clock;\n\n  readonly _backgroundPages = new Set<Page>();\n  readonly _serviceWorkers = new Set<Worker>();\n  private _harRecorders = new Map<string, { path: string, content: 'embed' | 'attach' | 'omit' | undefined }>();\n  _closingStatus: 'none' | 'closing' | 'closed' = 'none';\n  private _closeReason: string | undefined;\n  private _harRouters: HarRouter[] = [];\n\n  static from(context: channels.BrowserContextChannel): BrowserContext {\n    return (context as any)._object;\n  }\n\n  static fromNullable(context: channels.BrowserContextChannel | null): BrowserContext | null {\n    return context ? BrowserContext.from(context) : null;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.BrowserContextInitializer) {\n    super(parent, type, guid, initializer);\n    this._options = initializer.options;\n    this._timeoutSettings = new TimeoutSettings(this._platform);\n    this.tracing = Tracing.from(initializer.tracing);\n    this.request = APIRequestContext.from(initializer.requestContext);\n    this.request._timeoutSettings = this._timeoutSettings;\n    this.clock = new Clock(this);\n\n    this._channel.on('bindingCall', ({ binding }) => this._onBinding(BindingCall.from(binding)));\n    this._channel.on('close', () => this._onClose());\n    this._channel.on('page', ({ page }) => this._onPage(Page.from(page)));\n    this._channel.on('route', ({ route }) => this._onRoute(network.Route.from(route)));\n    this._channel.on('webSocketRoute', ({ webSocketRoute }) => this._onWebSocketRoute(network.WebSocketRoute.from(webSocketRoute)));\n    this._channel.on('backgroundPage', ({ page }) => {\n      const backgroundPage = Page.from(page);\n      this._backgroundPages.add(backgroundPage);\n      this.emit(Events.BrowserContext.BackgroundPage, backgroundPage);\n    });\n    this._channel.on('serviceWorker', ({ worker }) => {\n      const serviceWorker = Worker.from(worker);\n      serviceWorker._context = this;\n      this._serviceWorkers.add(serviceWorker);\n      this.emit(Events.BrowserContext.ServiceWorker, serviceWorker);\n    });\n    this._channel.on('console', event => {\n      const consoleMessage = new ConsoleMessage(this._platform, event);\n      this.emit(Events.BrowserContext.Console, consoleMessage);\n      const page = consoleMessage.page();\n      if (page)\n        page.emit(Events.Page.Console, consoleMessage);\n    });\n    this._channel.on('pageError', ({ error, page }) => {\n      const pageObject = Page.from(page);\n      const parsedError = parseError(error);\n      this.emit(Events.BrowserContext.WebError, new WebError(pageObject, parsedError));\n      if (pageObject)\n        pageObject.emit(Events.Page.PageError, parsedError);\n    });\n    this._channel.on('dialog', ({ dialog }) => {\n      const dialogObject = Dialog.from(dialog);\n      let hasListeners = this.emit(Events.BrowserContext.Dialog, dialogObject);\n      const page = dialogObject.page();\n      if (page)\n        hasListeners = page.emit(Events.Page.Dialog, dialogObject) || hasListeners;\n      if (!hasListeners) {\n        // Although we do similar handling on the server side, we still need this logic\n        // on the client side due to a possible race condition between two async calls:\n        // a) removing \"dialog\" listener subscription (client->server)\n        // b) actual \"dialog\" event (server->client)\n        if (dialogObject.type() === 'beforeunload')\n          dialog.accept({}).catch(() => {});\n        else\n          dialog.dismiss().catch(() => {});\n      }\n    });\n    this._channel.on('request', ({ request, page }) => this._onRequest(network.Request.from(request), Page.fromNullable(page)));\n    this._channel.on('requestFailed', ({ request, failureText, responseEndTiming, page }) => this._onRequestFailed(network.Request.from(request), responseEndTiming, failureText, Page.fromNullable(page)));\n    this._channel.on('requestFinished', params => this._onRequestFinished(params));\n    this._channel.on('response', ({ response, page }) => this._onResponse(network.Response.from(response), Page.fromNullable(page)));\n    this._closedPromise = new Promise(f => this.once(Events.BrowserContext.Close, f));\n\n    this._setEventToSubscriptionMapping(new Map<string, channels.BrowserContextUpdateSubscriptionParams['event']>([\n      [Events.BrowserContext.Console, 'console'],\n      [Events.BrowserContext.Dialog, 'dialog'],\n      [Events.BrowserContext.Request, 'request'],\n      [Events.BrowserContext.Response, 'response'],\n      [Events.BrowserContext.RequestFinished, 'requestFinished'],\n      [Events.BrowserContext.RequestFailed, 'requestFailed'],\n    ]));\n  }\n\n  async _initializeHarFromOptions(recordHar: BrowserContextOptions['recordHar']) {\n    if (!recordHar)\n      return;\n    const defaultContent = recordHar.path.endsWith('.zip') ? 'attach' : 'embed';\n    await this._recordIntoHAR(recordHar.path, null, {\n      url: recordHar.urlFilter,\n      updateContent: recordHar.content ?? (recordHar.omitContent ? 'omit' : defaultContent),\n      updateMode: recordHar.mode ?? 'full',\n    });\n  }\n\n  private _onPage(page: Page): void {\n    this._pages.add(page);\n    this.emit(Events.BrowserContext.Page, page);\n    if (page._opener && !page._opener.isClosed())\n      page._opener.emit(Events.Page.Popup, page);\n  }\n\n  private _onRequest(request: network.Request, page: Page | null) {\n    this.emit(Events.BrowserContext.Request, request);\n    if (page)\n      page.emit(Events.Page.Request, request);\n  }\n\n  private _onResponse(response: network.Response, page: Page | null) {\n    this.emit(Events.BrowserContext.Response, response);\n    if (page)\n      page.emit(Events.Page.Response, response);\n  }\n\n  private _onRequestFailed(request: network.Request, responseEndTiming: number, failureText: string | undefined, page: Page | null) {\n    request._failureText = failureText || null;\n    request._setResponseEndTiming(responseEndTiming);\n    this.emit(Events.BrowserContext.RequestFailed, request);\n    if (page)\n      page.emit(Events.Page.RequestFailed, request);\n  }\n\n  private _onRequestFinished(params: channels.BrowserContextRequestFinishedEvent) {\n    const { responseEndTiming } = params;\n    const request = network.Request.from(params.request);\n    const response = network.Response.fromNullable(params.response);\n    const page = Page.fromNullable(params.page);\n    request._setResponseEndTiming(responseEndTiming);\n    this.emit(Events.BrowserContext.RequestFinished, request);\n    if (page)\n      page.emit(Events.Page.RequestFinished, request);\n    if (response)\n      response._finishedPromise.resolve(null);\n  }\n\n  async _onRoute(route: network.Route) {\n    route._context = this;\n    const page = route.request()._safePage();\n    const routeHandlers = this._routes.slice();\n    for (const routeHandler of routeHandlers) {\n      // If the page or the context was closed we stall all requests right away.\n      if (page?._closeWasCalled || this._closingStatus !== 'none')\n        return;\n      if (!routeHandler.matches(route.request().url()))\n        continue;\n      const index = this._routes.indexOf(routeHandler);\n      if (index === -1)\n        continue;\n      if (routeHandler.willExpire())\n        this._routes.splice(index, 1);\n      const handled = await routeHandler.handle(route);\n      if (!this._routes.length)\n        this._updateInterceptionPatterns().catch(() => {});\n      if (handled)\n        return;\n    }\n    // If the page is closed or unrouteAll() was called without waiting and interception disabled,\n    // the method will throw an error - silence it.\n    await route._innerContinue(true /* isFallback */).catch(() => {});\n  }\n\n  async _onWebSocketRoute(webSocketRoute: network.WebSocketRoute) {\n    const routeHandler = this._webSocketRoutes.find(route => route.matches(webSocketRoute.url()));\n    if (routeHandler)\n      await routeHandler.handle(webSocketRoute);\n    else\n      webSocketRoute.connectToServer();\n  }\n\n  async _onBinding(bindingCall: BindingCall) {\n    const func = this._bindings.get(bindingCall._initializer.name);\n    if (!func)\n      return;\n    await bindingCall.call(func);\n  }\n\n  setDefaultNavigationTimeout(timeout: number | undefined) {\n    this._timeoutSettings.setDefaultNavigationTimeout(timeout);\n  }\n\n  setDefaultTimeout(timeout: number | undefined) {\n    this._timeoutSettings.setDefaultTimeout(timeout);\n  }\n\n  browser(): Browser | null {\n    return this._browser;\n  }\n\n  pages(): Page[] {\n    return [...this._pages];\n  }\n\n  async newPage(): Promise<Page> {\n    if (this._ownerPage)\n      throw new Error('Please use browser.newContext()');\n    return Page.from((await this._channel.newPage()).page);\n  }\n\n  async cookies(urls?: string | string[]): Promise<network.NetworkCookie[]> {\n    if (!urls)\n      urls = [];\n    if (urls && typeof urls === 'string')\n      urls = [urls];\n    return (await this._channel.cookies({ urls: urls as string[] })).cookies;\n  }\n\n  async addCookies(cookies: network.SetNetworkCookieParam[]): Promise<void> {\n    await this._channel.addCookies({ cookies });\n  }\n\n  async clearCookies(options: network.ClearNetworkCookieOptions = {}): Promise<void> {\n    await this._channel.clearCookies({\n      name: isString(options.name) ? options.name : undefined,\n      nameRegexSource: isRegExp(options.name) ? options.name.source : undefined,\n      nameRegexFlags: isRegExp(options.name) ? options.name.flags : undefined,\n      domain: isString(options.domain) ? options.domain : undefined,\n      domainRegexSource: isRegExp(options.domain) ? options.domain.source : undefined,\n      domainRegexFlags: isRegExp(options.domain) ? options.domain.flags : undefined,\n      path: isString(options.path) ? options.path : undefined,\n      pathRegexSource: isRegExp(options.path) ? options.path.source : undefined,\n      pathRegexFlags: isRegExp(options.path) ? options.path.flags : undefined,\n    });\n  }\n\n  async grantPermissions(permissions: string[], options?: { origin?: string }): Promise<void> {\n    await this._channel.grantPermissions({ permissions, ...options });\n  }\n\n  async clearPermissions(): Promise<void> {\n    await this._channel.clearPermissions();\n  }\n\n  async setGeolocation(geolocation: { longitude: number, latitude: number, accuracy?: number } | null): Promise<void> {\n    await this._channel.setGeolocation({ geolocation: geolocation || undefined });\n  }\n\n  async setExtraHTTPHeaders(headers: Headers): Promise<void> {\n    network.validateHeaders(headers);\n    await this._channel.setExtraHTTPHeaders({ headers: headersObjectToArray(headers) });\n  }\n\n  async setOffline(offline: boolean): Promise<void> {\n    await this._channel.setOffline({ offline });\n  }\n\n  async setHTTPCredentials(httpCredentials: { username: string, password: string } | null): Promise<void> {\n    await this._channel.setHTTPCredentials({ httpCredentials: httpCredentials || undefined });\n  }\n\n  async addInitScript(script: Function | string | { path?: string, content?: string }, arg?: any): Promise<void> {\n    const source = await evaluationScript(this._platform, script, arg);\n    await this._channel.addInitScript({ source });\n  }\n\n  async exposeBinding(name: string, callback: (source: structs.BindingSource, ...args: any[]) => any, options: { handle?: boolean } = {}): Promise<void> {\n    await this._channel.exposeBinding({ name, needsHandle: options.handle });\n    this._bindings.set(name, callback);\n  }\n\n  async exposeFunction(name: string, callback: Function): Promise<void> {\n    await this._channel.exposeBinding({ name });\n    const binding = (source: structs.BindingSource, ...args: any[]) => callback(...args);\n    this._bindings.set(name, binding);\n  }\n\n  async route(url: URLMatch, handler: network.RouteHandlerCallback, options: { times?: number } = {}): Promise<void> {\n    this._routes.unshift(new network.RouteHandler(this._platform, this._options.baseURL, url, handler, options.times));\n    await this._updateInterceptionPatterns();\n  }\n\n  async routeWebSocket(url: URLMatch, handler: network.WebSocketRouteHandlerCallback): Promise<void> {\n    this._webSocketRoutes.unshift(new network.WebSocketRouteHandler(this._options.baseURL, url, handler));\n    await this._updateWebSocketInterceptionPatterns();\n  }\n\n  async _recordIntoHAR(har: string, page: Page | null, options: { url?: string | RegExp, updateContent?: 'attach' | 'embed' | 'omit', updateMode?: 'minimal' | 'full'} = {}): Promise<void> {\n    const { harId } = await this._channel.harStart({\n      page: page?._channel,\n      options: {\n        zip: har.endsWith('.zip'),\n        content: options.updateContent ?? 'attach',\n        urlGlob: isString(options.url) ? options.url : undefined,\n        urlRegexSource: isRegExp(options.url) ? options.url.source : undefined,\n        urlRegexFlags: isRegExp(options.url) ? options.url.flags : undefined,\n        mode: options.updateMode ?? 'minimal',\n      },\n    });\n    this._harRecorders.set(harId, { path: har, content: options.updateContent ?? 'attach' });\n  }\n\n  async routeFromHAR(har: string, options: { url?: string | RegExp, notFound?: 'abort' | 'fallback', update?: boolean, updateContent?: 'attach' | 'embed', updateMode?: 'minimal' | 'full' } = {}): Promise<void> {\n    const localUtils = this._connection.localUtils();\n    if (!localUtils)\n      throw new Error('Route from har is not supported in thin clients');\n    if (options.update) {\n      await this._recordIntoHAR(har, null, options);\n      return;\n    }\n    const harRouter = await HarRouter.create(localUtils, har, options.notFound || 'abort', { urlMatch: options.url });\n    this._harRouters.push(harRouter);\n    await harRouter.addContextRoute(this);\n  }\n\n  private _disposeHarRouters() {\n    this._harRouters.forEach(router => router.dispose());\n    this._harRouters = [];\n  }\n\n  async unrouteAll(options?: { behavior?: 'wait'|'ignoreErrors'|'default' }): Promise<void> {\n    await this._unrouteInternal(this._routes, [], options?.behavior);\n    this._disposeHarRouters();\n  }\n\n  async unroute(url: URLMatch, handler?: network.RouteHandlerCallback): Promise<void> {\n    const removed = [];\n    const remaining = [];\n    for (const route of this._routes) {\n      if (urlMatchesEqual(route.url, url) && (!handler || route.handler === handler))\n        removed.push(route);\n      else\n        remaining.push(route);\n    }\n    await this._unrouteInternal(removed, remaining, 'default');\n  }\n\n  private async _unrouteInternal(removed: network.RouteHandler[], remaining: network.RouteHandler[], behavior?: 'wait'|'ignoreErrors'|'default'): Promise<void> {\n    this._routes = remaining;\n    await this._updateInterceptionPatterns();\n    if (!behavior || behavior === 'default')\n      return;\n    const promises = removed.map(routeHandler => routeHandler.stop(behavior));\n    await Promise.all(promises);\n  }\n\n  private async _updateInterceptionPatterns() {\n    const patterns = network.RouteHandler.prepareInterceptionPatterns(this._routes);\n    await this._channel.setNetworkInterceptionPatterns({ patterns });\n  }\n\n  private async _updateWebSocketInterceptionPatterns() {\n    const patterns = network.WebSocketRouteHandler.prepareInterceptionPatterns(this._webSocketRoutes);\n    await this._channel.setWebSocketInterceptionPatterns({ patterns });\n  }\n\n  _effectiveCloseReason(): string | undefined {\n    return this._closeReason || this._browser?._closeReason;\n  }\n\n  async waitForEvent(event: string, optionsOrPredicate: WaitForEventOptions = {}): Promise<any> {\n    return await this._wrapApiCall(async () => {\n      const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === 'function'  ? {} : optionsOrPredicate);\n      const predicate = typeof optionsOrPredicate === 'function'  ? optionsOrPredicate : optionsOrPredicate.predicate;\n      const waiter = Waiter.createForEvent(this, event);\n      waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event \"${event}\"`);\n      if (event !== Events.BrowserContext.Close)\n        waiter.rejectOnEvent(this, Events.BrowserContext.Close, () => new TargetClosedError(this._effectiveCloseReason()));\n      const result = await waiter.waitForEvent(this, event, predicate as any);\n      waiter.dispose();\n      return result;\n    });\n  }\n\n  async storageState(options: { path?: string, indexedDB?: boolean } = {}): Promise<StorageState> {\n    const state = await this._channel.storageState({ indexedDB: options.indexedDB });\n    if (options.path) {\n      await mkdirIfNeeded(this._platform, options.path);\n      await this._platform.fs().promises.writeFile(options.path, JSON.stringify(state, undefined, 2), 'utf8');\n    }\n    return state;\n  }\n\n  backgroundPages(): Page[] {\n    return [...this._backgroundPages];\n  }\n\n  serviceWorkers(): Worker[] {\n    return [...this._serviceWorkers];\n  }\n\n  async newCDPSession(page: Page | Frame): Promise<api.CDPSession> {\n    // channelOwner.ts's validation messages don't handle the pseudo-union type, so we're explicit here\n    if (!(page instanceof Page) && !(page instanceof Frame))\n      throw new Error('page: expected Page or Frame');\n    const result = await this._channel.newCDPSession(page instanceof Page ? { page: page._channel } : { frame: page._channel });\n    return CDPSession.from(result.session);\n  }\n\n  _onClose() {\n    this._closingStatus = 'closed';\n    this._browser?._contexts.delete(this);\n    this._browser?._browserType._contexts.delete(this);\n    this._browser?._browserType._playwright.selectors._contextsForSelectors.delete(this);\n    this._disposeHarRouters();\n    this.tracing._resetStackCounter();\n    this.emit(Events.BrowserContext.Close, this);\n  }\n\n  async [Symbol.asyncDispose]() {\n    await this.close();\n  }\n\n  async close(options: { reason?: string } = {}): Promise<void> {\n    if (this._closingStatus !== 'none')\n      return;\n    this._closeReason = options.reason;\n    this._closingStatus = 'closing';\n    await this.request.dispose(options);\n    await this._wrapApiCall(async () => {\n      await this._instrumentation.runBeforeCloseBrowserContext(this);\n      for (const [harId, harParams] of this._harRecorders) {\n        const har = await this._channel.harExport({ harId });\n        const artifact = Artifact.from(har.artifact);\n        // Server side will compress artifact if content is attach or if file is .zip.\n        const isCompressed = harParams.content === 'attach' || harParams.path.endsWith('.zip');\n        const needCompressed = harParams.path.endsWith('.zip');\n        if (isCompressed && !needCompressed) {\n          const localUtils = this._connection.localUtils();\n          if (!localUtils)\n            throw new Error('Uncompressed har is not supported in thin clients');\n          await artifact.saveAs(harParams.path + '.tmp');\n          await localUtils.harUnzip({ zipFile: harParams.path + '.tmp', harFile: harParams.path });\n        } else {\n          await artifact.saveAs(harParams.path);\n        }\n        await artifact.delete();\n      }\n    }, { internal: true });\n    await this._channel.close(options);\n    await this._closedPromise;\n  }\n\n  async _enableRecorder(params: channels.BrowserContextEnableRecorderParams) {\n    await this._channel.enableRecorder(params);\n  }\n}\n\nasync function prepareStorageState(platform: Platform, options: BrowserContextOptions): Promise<channels.BrowserNewContextParams['storageState']> {\n  if (typeof options.storageState !== 'string')\n    return options.storageState as any;\n  try {\n    return JSON.parse(await platform.fs().promises.readFile(options.storageState, 'utf8'));\n  } catch (e) {\n    rewriteErrorMessage(e, `Error reading storage state from ${options.storageState}:\\n` + e.message);\n    throw e;\n  }\n}\n\nexport async function prepareBrowserContextParams(platform: Platform, options: BrowserContextOptions): Promise<channels.BrowserNewContextParams> {\n  if (options.videoSize && !options.videosPath)\n    throw new Error(`\"videoSize\" option requires \"videosPath\" to be specified`);\n  if (options.extraHTTPHeaders)\n    network.validateHeaders(options.extraHTTPHeaders);\n  const contextParams: channels.BrowserNewContextParams = {\n    ...options,\n    viewport: options.viewport === null ? undefined : options.viewport,\n    noDefaultViewport: options.viewport === null,\n    extraHTTPHeaders: options.extraHTTPHeaders ? headersObjectToArray(options.extraHTTPHeaders) : undefined,\n    storageState: await prepareStorageState(platform, options),\n    serviceWorkers: options.serviceWorkers,\n    colorScheme: options.colorScheme === null ? 'no-override' : options.colorScheme,\n    reducedMotion: options.reducedMotion === null ? 'no-override' : options.reducedMotion,\n    forcedColors: options.forcedColors === null ? 'no-override' : options.forcedColors,\n    contrast: options.contrast === null ? 'no-override' : options.contrast,\n    acceptDownloads: toAcceptDownloadsProtocol(options.acceptDownloads),\n    clientCertificates: await toClientCertificatesProtocol(platform, options.clientCertificates),\n  };\n  if (!contextParams.recordVideo && options.videosPath) {\n    contextParams.recordVideo = {\n      dir: options.videosPath,\n      size: options.videoSize\n    };\n  }\n  if (contextParams.recordVideo && contextParams.recordVideo.dir)\n    contextParams.recordVideo.dir = platform.path().resolve(contextParams.recordVideo.dir);\n  return contextParams;\n}\n\nfunction toAcceptDownloadsProtocol(acceptDownloads?: boolean) {\n  if (acceptDownloads === undefined)\n    return undefined;\n  if (acceptDownloads)\n    return 'accept';\n  return 'deny';\n}\n\nexport async function toClientCertificatesProtocol(platform: Platform, certs?: BrowserContextOptions['clientCertificates']): Promise<channels.PlaywrightNewRequestParams['clientCertificates']> {\n  if (!certs)\n    return undefined;\n\n  const bufferizeContent = async (value?: Buffer, path?: string): Promise<Buffer | undefined> => {\n    if (value)\n      return value;\n    if (path)\n      return await platform.fs().promises.readFile(path);\n  };\n\n  return await Promise.all(certs.map(async cert => ({\n    origin: cert.origin,\n    cert: await bufferizeContent(cert.cert, cert.certPath),\n    key: await bufferizeContent(cert.key, cert.keyPath),\n    pfx: await bufferizeContent(cert.pfx, cert.pfxPath),\n    passphrase: cert.passphrase,\n  })));\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChannelOwner } from './channelOwner';\nimport { Connection } from './connection';\n\nimport type { HeadersArray } from './types';\nimport type * as channels from '@protocol/channels';\n\nexport async function connectOverWebSocket(parentConnection: Connection, params: channels.LocalUtilsConnectParams): Promise<Connection> {\n  const localUtils = parentConnection.localUtils();\n  const transport = localUtils ? new JsonPipeTransport(localUtils) : new WebSocketTransport();\n  const connectHeaders = await transport.connect(params);\n  const connection = new Connection(parentConnection._platform, localUtils, parentConnection._instrumentation, connectHeaders);\n  connection.markAsRemote();\n  connection.on('close', () => transport.close());\n\n  let closeError: string | undefined;\n  const onTransportClosed = (reason?: string) => {\n    connection.close(reason || closeError);\n  };\n  transport.onClose(reason => onTransportClosed(reason));\n  connection.onmessage = message => transport.send(message).catch(() => onTransportClosed());\n  transport.onMessage(message => {\n    try {\n      connection!.dispatch(message);\n    } catch (e) {\n      closeError = String(e);\n      transport.close().catch(() => {});\n    }\n  });\n  return connection;\n}\n\ninterface Transport {\n  connect(params: channels.LocalUtilsConnectParams): Promise<HeadersArray>;\n  send(message: any): Promise<void>;\n  onMessage(callback: (message: object) => void): void;\n  onClose(callback: (reason?: string) => void): void;\n  close(): Promise<void>;\n}\n\nclass JsonPipeTransport implements Transport {\n  private _pipe: channels.JsonPipeChannel | undefined;\n  private _owner: ChannelOwner<channels.LocalUtilsChannel>;\n\n  constructor(owner: ChannelOwner<channels.LocalUtilsChannel>) {\n    this._owner = owner;\n  }\n\n  async connect(params: channels.LocalUtilsConnectParams) {\n    const { pipe, headers: connectHeaders } = await this._owner._channel.connect(params);\n    this._pipe = pipe;\n    return connectHeaders;\n  }\n\n  async send(message: object) {\n    await this._pipe!.send({ message });\n  }\n\n  onMessage(callback: (message: object) => void) {\n    this._pipe!.on('message', ({ message }) => callback(message));\n  }\n\n  onClose(callback: (reason?: string) => void) {\n    this._pipe!.on('closed', ({ reason }) => callback(reason));\n  }\n\n  async close() {\n    await this._pipe!.close().catch(() => {});\n  }\n}\n\nclass WebSocketTransport implements Transport {\n  private _ws: WebSocket | undefined;\n\n  async connect(params: channels.LocalUtilsConnectParams) {\n    this._ws = new window.WebSocket(params.wsEndpoint);\n    return [];\n  }\n\n  async send(message: object) {\n    this._ws!.send(JSON.stringify(message));\n  }\n\n  onMessage(callback: (message: object) => void) {\n    this._ws!.addEventListener('message', event => callback(JSON.parse(event.data)));\n  }\n\n  onClose(callback: (reason?: string) => void) {\n    this._ws!.addEventListener('close', () => callback());\n  }\n\n  async close() {\n    this._ws!.close();\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from './eventEmitter';\nimport { BrowserContext, prepareBrowserContextParams } from './browserContext';\nimport { ChannelOwner } from './channelOwner';\nimport { TargetClosedError, isTargetClosedError } from './errors';\nimport { Events } from './events';\nimport { Waiter } from './waiter';\nimport { TimeoutSettings } from './timeoutSettings';\nimport { isRegExp, isString } from '../utils/isomorphic/rtti';\nimport { monotonicTime } from '../utils/isomorphic/time';\nimport { raceAgainstDeadline } from '../utils/isomorphic/timeoutRunner';\nimport { connectOverWebSocket } from './webSocket';\n\nimport type { Page } from './page';\nimport type * as types from './types';\nimport type * as api from '../../types/types';\nimport type { AndroidServerLauncherImpl } from '../androidServerImpl';\nimport type { Platform } from './platform';\nimport type * as channels from '@protocol/channels';\nimport type { Playwright } from './playwright';\n\ntype Direction = 'down' | 'up' | 'left' | 'right';\ntype SpeedOptions = { speed?: number };\n\nexport class Android extends ChannelOwner<channels.AndroidChannel> implements api.Android {\n  _playwright!: Playwright;\n  readonly _timeoutSettings: TimeoutSettings;\n  _serverLauncher?: AndroidServerLauncherImpl;\n\n  static from(android: channels.AndroidChannel): Android {\n    return (android as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.AndroidInitializer) {\n    super(parent, type, guid, initializer);\n    this._timeoutSettings = new TimeoutSettings(this._platform);\n  }\n\n  setDefaultTimeout(timeout: number) {\n    this._timeoutSettings.setDefaultTimeout(timeout);\n  }\n\n  async devices(options: { port?: number } = {}): Promise<AndroidDevice[]> {\n    const { devices } = await this._channel.devices(options);\n    return devices.map(d => AndroidDevice.from(d));\n  }\n\n  async launchServer(options: types.LaunchServerOptions = {}): Promise<api.BrowserServer> {\n    if (!this._serverLauncher)\n      throw new Error('Launching server is not supported');\n    return await this._serverLauncher.launchServer(options);\n  }\n\n  async connect(wsEndpoint: string, options: Parameters<api.Android['connect']>[1] = {}): Promise<api.AndroidDevice> {\n    return await this._wrapApiCall(async () => {\n      const deadline = options.timeout ? monotonicTime() + options.timeout : 0;\n      const headers = { 'x-playwright-browser': 'android', ...options.headers };\n      const connectParams: channels.LocalUtilsConnectParams = { wsEndpoint, headers, slowMo: options.slowMo, timeout: options.timeout || 0 };\n      const connection = await connectOverWebSocket(this._connection, connectParams);\n\n      let device: AndroidDevice;\n      connection.on('close', () => {\n        device?._didClose();\n      });\n\n      const result = await raceAgainstDeadline(async () => {\n        const playwright = await connection!.initializePlaywright();\n        if (!playwright._initializer.preConnectedAndroidDevice) {\n          connection.close();\n          throw new Error('Malformed endpoint. Did you use Android.launchServer method?');\n        }\n        device = AndroidDevice.from(playwright._initializer.preConnectedAndroidDevice!);\n        device._shouldCloseConnectionOnClose = true;\n        device.on(Events.AndroidDevice.Close, () => connection.close());\n        return device;\n      }, deadline);\n      if (!result.timedOut) {\n        return result.result;\n      } else {\n        connection.close();\n        throw new Error(`Timeout ${options.timeout}ms exceeded`);\n      }\n    });\n  }\n}\n\nexport class AndroidDevice extends ChannelOwner<channels.AndroidDeviceChannel> implements api.AndroidDevice {\n  readonly _timeoutSettings: TimeoutSettings;\n  private _webViews = new Map<string, AndroidWebView>();\n  private _android: Android;\n  _shouldCloseConnectionOnClose = false;\n\n  static from(androidDevice: channels.AndroidDeviceChannel): AndroidDevice {\n    return (androidDevice as any)._object;\n  }\n\n  input: AndroidInput;\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.AndroidDeviceInitializer) {\n    super(parent, type, guid, initializer);\n    this._android = parent as Android;\n    this.input = new AndroidInput(this);\n    this._timeoutSettings = new TimeoutSettings(this._platform, (parent as Android)._timeoutSettings);\n    this._channel.on('webViewAdded', ({ webView }) => this._onWebViewAdded(webView));\n    this._channel.on('webViewRemoved', ({ socketName }) => this._onWebViewRemoved(socketName));\n    this._channel.on('close', () => this._didClose());\n  }\n\n  private _onWebViewAdded(webView: channels.AndroidWebView) {\n    const view = new AndroidWebView(this, webView);\n    this._webViews.set(webView.socketName, view);\n    this.emit(Events.AndroidDevice.WebView, view);\n  }\n\n  private _onWebViewRemoved(socketName: string) {\n    const view = this._webViews.get(socketName);\n    this._webViews.delete(socketName);\n    if (view)\n      view.emit(Events.AndroidWebView.Close);\n  }\n\n  setDefaultTimeout(timeout: number) {\n    this._timeoutSettings.setDefaultTimeout(timeout);\n  }\n\n  serial(): string {\n    return this._initializer.serial;\n  }\n\n  model(): string {\n    return this._initializer.model;\n  }\n\n  webViews(): AndroidWebView[] {\n    return [...this._webViews.values()];\n  }\n\n  async webView(selector: { pkg?: string; socketName?: string; }, options?: types.TimeoutOptions): Promise<AndroidWebView> {\n    const predicate = (v: AndroidWebView) => {\n      if (selector.pkg)\n        return v.pkg() === selector.pkg;\n      if (selector.socketName)\n        return v._socketName() === selector.socketName;\n      return false;\n    };\n    const webView = [...this._webViews.values()].find(predicate);\n    if (webView)\n      return webView;\n    return await this.waitForEvent('webview', { ...options, predicate });\n  }\n\n  async wait(selector: api.AndroidSelector, options: { state?: 'gone' } & types.TimeoutOptions = {}) {\n    await this._channel.wait({ androidSelector: toSelectorChannel(selector), ...options, timeout: this._timeoutSettings.timeout(options) });\n  }\n\n  async fill(selector: api.AndroidSelector, text: string, options: types.TimeoutOptions = {}) {\n    await this._channel.fill({ androidSelector: toSelectorChannel(selector), text, ...options, timeout: this._timeoutSettings.timeout(options) });\n  }\n\n  async press(selector: api.AndroidSelector, key: api.AndroidKey, options: types.TimeoutOptions = {}) {\n    await this.tap(selector, options);\n    await this.input.press(key);\n  }\n\n  async tap(selector: api.AndroidSelector, options: { duration?: number } & types.TimeoutOptions = {}) {\n    await this._channel.tap({ androidSelector: toSelectorChannel(selector), ...options, timeout: this._timeoutSettings.timeout(options) });\n  }\n\n  async drag(selector: api.AndroidSelector, dest: types.Point, options: SpeedOptions & types.TimeoutOptions = {}) {\n    await this._channel.drag({ androidSelector: toSelectorChannel(selector), dest, ...options, timeout: this._timeoutSettings.timeout(options) });\n  }\n\n  async fling(selector: api.AndroidSelector, direction: Direction, options: SpeedOptions & types.TimeoutOptions = {}) {\n    await this._channel.fling({ androidSelector: toSelectorChannel(selector), direction, ...options, timeout: this._timeoutSettings.timeout(options) });\n  }\n\n  async longTap(selector: api.AndroidSelector, options: types.TimeoutOptions = {}) {\n    await this._channel.longTap({ androidSelector: toSelectorChannel(selector), ...options, timeout: this._timeoutSettings.timeout(options) });\n  }\n\n  async pinchClose(selector: api.AndroidSelector, percent: number, options: SpeedOptions & types.TimeoutOptions = {}) {\n    await this._channel.pinchClose({ androidSelector: toSelectorChannel(selector), percent, ...options, timeout: this._timeoutSettings.timeout(options) });\n  }\n\n  async pinchOpen(selector: api.AndroidSelector, percent: number, options: SpeedOptions & types.TimeoutOptions = {}) {\n    await this._channel.pinchOpen({ androidSelector: toSelectorChannel(selector), percent, ...options, timeout: this._timeoutSettings.timeout(options) });\n  }\n\n  async scroll(selector: api.AndroidSelector, direction: Direction, percent: number, options: SpeedOptions & types.TimeoutOptions = {}) {\n    await this._channel.scroll({ androidSelector: toSelectorChannel(selector), direction, percent, ...options, timeout: this._timeoutSettings.timeout(options) });\n  }\n\n  async swipe(selector: api.AndroidSelector, direction: Direction, percent: number, options: SpeedOptions & types.TimeoutOptions = {}) {\n    await this._channel.swipe({ androidSelector: toSelectorChannel(selector), direction, percent, ...options, timeout: this._timeoutSettings.timeout(options) });\n  }\n\n  async info(selector: api.AndroidSelector): Promise<api.AndroidElementInfo> {\n    return (await this._channel.info({ androidSelector: toSelectorChannel(selector) })).info;\n  }\n\n  async screenshot(options: { path?: string } = {}): Promise<Buffer> {\n    const { binary } = await this._channel.screenshot();\n    if (options.path)\n      await this._platform.fs().promises.writeFile(options.path, binary);\n    return binary;\n  }\n\n  async [Symbol.asyncDispose]() {\n    await this.close();\n  }\n\n  async close() {\n    try {\n      if (this._shouldCloseConnectionOnClose)\n        this._connection.close();\n      else\n        await this._channel.close();\n    } catch (e) {\n      if (isTargetClosedError(e))\n        return;\n      throw e;\n    }\n  }\n\n  _didClose() {\n    this.emit(Events.AndroidDevice.Close, this);\n  }\n\n  async shell(command: string): Promise<Buffer> {\n    const { result } = await this._channel.shell({ command });\n    return result;\n  }\n\n  async open(command: string): Promise<AndroidSocket> {\n    return AndroidSocket.from((await this._channel.open({ command })).socket);\n  }\n\n  async installApk(file: string | Buffer, options?: { args: string[] }): Promise<void> {\n    await this._channel.installApk({ file: await loadFile(this._platform, file), args: options && options.args });\n  }\n\n  async push(file: string | Buffer, path: string, options?: { mode: number }): Promise<void> {\n    await this._channel.push({ file: await loadFile(this._platform, file), path, mode: options ? options.mode : undefined });\n  }\n\n  async launchBrowser(options: types.BrowserContextOptions & { pkg?: string } = {}): Promise<BrowserContext> {\n    const contextOptions = await prepareBrowserContextParams(this._platform, options);\n    const result = await this._channel.launchBrowser(contextOptions);\n    const context = BrowserContext.from(result.context);\n    const selectors = this._android._playwright.selectors;\n    selectors._contextsForSelectors.add(context);\n    context.once(Events.BrowserContext.Close, () => selectors._contextsForSelectors.delete(context));\n    await context._initializeHarFromOptions(options.recordHar);\n    return context;\n  }\n\n  async waitForEvent(event: string, optionsOrPredicate: types.WaitForEventOptions = {}): Promise<any> {\n    return await this._wrapApiCall(async () => {\n      const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === 'function' ? {} : optionsOrPredicate);\n      const predicate = typeof optionsOrPredicate === 'function' ? optionsOrPredicate : optionsOrPredicate.predicate;\n      const waiter = Waiter.createForEvent(this, event);\n      waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event \"${event}\"`);\n      if (event !== Events.AndroidDevice.Close)\n        waiter.rejectOnEvent(this, Events.AndroidDevice.Close, () => new TargetClosedError());\n      const result = await waiter.waitForEvent(this, event, predicate as any);\n      waiter.dispose();\n      return result;\n    });\n  }\n}\n\nexport class AndroidSocket extends ChannelOwner<channels.AndroidSocketChannel> implements api.AndroidSocket {\n  static from(androidDevice: channels.AndroidSocketChannel): AndroidSocket {\n    return (androidDevice as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.AndroidSocketInitializer) {\n    super(parent, type, guid, initializer);\n    this._channel.on('data', ({ data }) => this.emit(Events.AndroidSocket.Data, data));\n    this._channel.on('close', () => this.emit(Events.AndroidSocket.Close));\n  }\n\n  async write(data: Buffer): Promise<void> {\n    await this._channel.write({ data });\n  }\n\n  async close(): Promise<void> {\n    await this._channel.close();\n  }\n\n  async [Symbol.asyncDispose]() {\n    await this.close();\n  }\n}\n\nasync function loadFile(platform: Platform, file: string | Buffer): Promise<Buffer> {\n  if (isString(file))\n    return await platform.fs().promises.readFile(file);\n  return file;\n}\n\nexport class AndroidInput implements api.AndroidInput {\n  private _device: AndroidDevice;\n\n  constructor(device: AndroidDevice) {\n    this._device = device;\n  }\n\n  async type(text: string) {\n    await this._device._channel.inputType({ text });\n  }\n\n  async press(key: api.AndroidKey) {\n    await this._device._channel.inputPress({ key });\n  }\n\n  async tap(point: types.Point) {\n    await this._device._channel.inputTap({ point });\n  }\n\n  async swipe(from: types.Point, segments: types.Point[], steps: number) {\n    await this._device._channel.inputSwipe({ segments, steps });\n  }\n\n  async drag(from: types.Point, to: types.Point, steps: number) {\n    await this._device._channel.inputDrag({ from, to, steps });\n  }\n}\n\nfunction toSelectorChannel(selector: api.AndroidSelector): channels.AndroidSelector {\n  const {\n    checkable,\n    checked,\n    clazz,\n    clickable,\n    depth,\n    desc,\n    enabled,\n    focusable,\n    focused,\n    hasChild,\n    hasDescendant,\n    longClickable,\n    pkg,\n    res,\n    scrollable,\n    selected,\n    text,\n  } = selector;\n\n  const toRegex = (value: RegExp | string | undefined): string | undefined => {\n    if (value === undefined)\n      return undefined;\n    if (isRegExp(value))\n      return value.source;\n    return '^' + value.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d') + '$';\n  };\n\n  return {\n    checkable,\n    checked,\n    clazz: toRegex(clazz),\n    pkg: toRegex(pkg),\n    desc: toRegex(desc),\n    res: toRegex(res),\n    text: toRegex(text),\n    clickable,\n    depth,\n    enabled,\n    focusable,\n    focused,\n    hasChild: hasChild ? { androidSelector: toSelectorChannel(hasChild.selector) } : undefined,\n    hasDescendant: hasDescendant ? { androidSelector: toSelectorChannel(hasDescendant.selector), maxDepth: hasDescendant.maxDepth } : undefined,\n    longClickable,\n    scrollable,\n    selected,\n  };\n}\n\nexport class AndroidWebView extends EventEmitter implements api.AndroidWebView {\n  private _device: AndroidDevice;\n  private _data: channels.AndroidWebView;\n  private _pagePromise: Promise<Page> | undefined;\n\n  constructor(device: AndroidDevice, data: channels.AndroidWebView) {\n    super(device._platform);\n    this._device = device;\n    this._data = data;\n  }\n\n  pid(): number {\n    return this._data.pid;\n  }\n\n  pkg(): string {\n    return this._data.pkg;\n  }\n\n  _socketName(): string {\n    return this._data.socketName;\n  }\n\n  async page(): Promise<Page> {\n    if (!this._pagePromise)\n      this._pagePromise = this._fetchPage();\n    return await this._pagePromise;\n  }\n\n  private async _fetchPage(): Promise<Page> {\n    const { context } = await this._device._channel.connectToWebView({ socketName: this._data.socketName });\n    return BrowserContext.from(context).pages()[0];\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Artifact } from './artifact';\nimport { BrowserContext, prepareBrowserContextParams } from './browserContext';\nimport { CDPSession } from './cdpSession';\nimport { ChannelOwner } from './channelOwner';\nimport { isTargetClosedError } from './errors';\nimport { Events } from './events';\nimport { mkdirIfNeeded } from './fileUtils';\n\nimport type { BrowserType } from './browserType';\nimport type { Page } from './page';\nimport type { BrowserContextOptions, LaunchOptions, Logger } from './types';\nimport type * as api from '../../types/types';\nimport type * as channels from '@protocol/channels';\n\nexport class Browser extends ChannelOwner<channels.BrowserChannel> implements api.Browser {\n  readonly _contexts = new Set<BrowserContext>();\n  private _isConnected = true;\n  private _closedPromise: Promise<void>;\n  _shouldCloseConnectionOnClose = false;\n  _browserType!: BrowserType;\n  _options: LaunchOptions = {};\n  readonly _name: string;\n  private _path: string | undefined;\n  _closeReason: string | undefined;\n\n  static from(browser: channels.BrowserChannel): Browser {\n    return (browser as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.BrowserInitializer) {\n    super(parent, type, guid, initializer);\n    this._name = initializer.name;\n    this._channel.on('context', ({ context }) => this._didCreateContext(BrowserContext.from(context)));\n    this._channel.on('close', () => this._didClose());\n    this._closedPromise = new Promise(f => this.once(Events.Browser.Disconnected, f));\n  }\n\n  browserType(): BrowserType {\n    return this._browserType;\n  }\n\n  async newContext(options: BrowserContextOptions = {}): Promise<BrowserContext> {\n    return await this._innerNewContext(options, false);\n  }\n\n  async _newContextForReuse(options: BrowserContextOptions = {}): Promise<BrowserContext> {\n    return await this._wrapApiCall(async () => {\n      for (const context of this._contexts) {\n        await this._instrumentation.runBeforeCloseBrowserContext(context);\n        for (const page of context.pages())\n          page._onClose();\n        context._onClose();\n      }\n      return await this._innerNewContext(options, true);\n    }, { internal: true });\n  }\n\n  async _stopPendingOperations(reason: string) {\n    await this._channel.stopPendingOperations({ reason });\n  }\n\n  async _innerNewContext(options: BrowserContextOptions = {}, forReuse: boolean): Promise<BrowserContext> {\n    options = this._browserType._playwright.selectors._withSelectorOptions({\n      ...this._browserType._playwright._defaultContextOptions,\n      ...options,\n    });\n    const contextOptions = await prepareBrowserContextParams(this._platform, options);\n    const response = forReuse ? await this._channel.newContextForReuse(contextOptions) : await this._channel.newContext(contextOptions);\n    const context = BrowserContext.from(response.context);\n    if (options.logger)\n      context._logger = options.logger;\n    await context._initializeHarFromOptions(options.recordHar);\n    await this._instrumentation.runAfterCreateBrowserContext(context);\n    return context;\n  }\n\n  _connectToBrowserType(browserType: BrowserType, browserOptions: LaunchOptions, logger: Logger | undefined) {\n    // Note: when using connect(), `browserType` is different from `this._parent`.\n    // This is why browser type is not wired up in the constructor,\n    // and instead this separate method is called later on.\n    this._browserType = browserType;\n    this._options = browserOptions;\n    this._logger = logger;\n    for (const context of this._contexts)\n      this._setupBrowserContext(context);\n  }\n\n  private _didCreateContext(context: BrowserContext) {\n    context._browser = this;\n    this._contexts.add(context);\n    // Note: when connecting to a browser, initial contexts arrive before `browserType` is set,\n    // and will be configured later in `_connectToBrowserType`.\n    if (this._browserType)\n      this._setupBrowserContext(context);\n  }\n\n  private _setupBrowserContext(context: BrowserContext) {\n    context._logger = this._logger;\n    context.tracing._tracesDir = this._options.tracesDir;\n    this._browserType._contexts.add(context);\n    this._browserType._playwright.selectors._contextsForSelectors.add(context);\n    context.setDefaultTimeout(this._browserType._playwright._defaultContextTimeout);\n    context.setDefaultNavigationTimeout(this._browserType._playwright._defaultContextNavigationTimeout);\n  }\n\n  contexts(): BrowserContext[] {\n    return [...this._contexts];\n  }\n\n  version(): string {\n    return this._initializer.version;\n  }\n\n  async newPage(options: BrowserContextOptions = {}): Promise<Page> {\n    return await this._wrapApiCall(async () => {\n      const context = await this.newContext(options);\n      const page = await context.newPage();\n      page._ownedContext = context;\n      context._ownerPage = page;\n      return page;\n    }, { title: 'Create page' });\n  }\n\n  isConnected(): boolean {\n    return this._isConnected;\n  }\n\n  async newBrowserCDPSession(): Promise<api.CDPSession> {\n    return CDPSession.from((await this._channel.newBrowserCDPSession()).session);\n  }\n\n  async startTracing(page?: Page, options: { path?: string; screenshots?: boolean; categories?: string[]; } = {}) {\n    this._path = options.path;\n    await this._channel.startTracing({ ...options, page: page ? page._channel : undefined });\n  }\n\n  async stopTracing(): Promise<Buffer> {\n    const artifact = Artifact.from((await this._channel.stopTracing()).artifact);\n    const buffer = await artifact.readIntoBuffer();\n    await artifact.delete();\n    if (this._path) {\n      await mkdirIfNeeded(this._platform, this._path);\n      await this._platform.fs().promises.writeFile(this._path, buffer);\n      this._path = undefined;\n    }\n    return buffer;\n  }\n\n  async [Symbol.asyncDispose]() {\n    await this.close();\n  }\n\n  async close(options: { reason?: string } = {}): Promise<void> {\n    this._closeReason = options.reason;\n    try {\n      if (this._shouldCloseConnectionOnClose)\n        this._connection.close();\n      else\n        await this._channel.close(options);\n      await this._closedPromise;\n    } catch (e) {\n      if (isTargetClosedError(e))\n        return;\n      throw e;\n    }\n  }\n\n  _didClose() {\n    this._isConnected = false;\n    this.emit(Events.Browser.Disconnected, this);\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Browser } from './browser';\nimport { BrowserContext, prepareBrowserContextParams } from './browserContext';\nimport { ChannelOwner } from './channelOwner';\nimport { envObjectToArray } from './clientHelper';\nimport { Events } from './events';\nimport { assert } from '../utils/isomorphic/assert';\nimport { headersObjectToArray } from '../utils/isomorphic/headers';\nimport { monotonicTime } from '../utils/isomorphic/time';\nimport { raceAgainstDeadline } from '../utils/isomorphic/timeoutRunner';\nimport { connectOverWebSocket } from './webSocket';\nimport { TimeoutSettings } from './timeoutSettings';\n\nimport type { Playwright } from './playwright';\nimport type { ConnectOptions, LaunchOptions, LaunchPersistentContextOptions, LaunchServerOptions } from './types';\nimport type * as api from '../../types/types';\nimport type * as channels from '@protocol/channels';\nimport type { ChildProcess } from 'child_process';\n\nexport interface BrowserServerLauncher {\n  launchServer(options?: LaunchServerOptions): Promise<api.BrowserServer>;\n}\n\n// This is here just for api generation and checking.\nexport interface BrowserServer extends api.BrowserServer {\n  process(): ChildProcess;\n  wsEndpoint(): string;\n  close(): Promise<void>;\n  kill(): Promise<void>;\n}\n\nexport class BrowserType extends ChannelOwner<channels.BrowserTypeChannel> implements api.BrowserType {\n  _serverLauncher?: BrowserServerLauncher;\n  _contexts = new Set<BrowserContext>();\n  _playwright!: Playwright;\n\n  static from(browserType: channels.BrowserTypeChannel): BrowserType {\n    return (browserType as any)._object;\n  }\n\n  executablePath(): string {\n    if (!this._initializer.executablePath)\n      throw new Error('Browser is not supported on current platform');\n    return this._initializer.executablePath;\n  }\n\n  name(): string {\n    return this._initializer.name;\n  }\n\n  async launch(options: LaunchOptions = {}): Promise<Browser> {\n    assert(!(options as any).userDataDir, 'userDataDir option is not supported in `browserType.launch`. Use `browserType.launchPersistentContext` instead');\n    assert(!(options as any).port, 'Cannot specify a port without launching as a server.');\n\n    const logger = options.logger || this._playwright._defaultLaunchOptions?.logger;\n    options = { ...this._playwright._defaultLaunchOptions, ...options };\n    const launchOptions: channels.BrowserTypeLaunchParams = {\n      ...options,\n      ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : undefined,\n      ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),\n      env: options.env ? envObjectToArray(options.env) : undefined,\n      timeout: new TimeoutSettings(this._platform).launchTimeout(options),\n    };\n    return await this._wrapApiCall(async () => {\n      const browser = Browser.from((await this._channel.launch(launchOptions)).browser);\n      browser._connectToBrowserType(this, options, logger);\n      return browser;\n    });\n  }\n\n  async launchServer(options: LaunchServerOptions = {}): Promise<api.BrowserServer> {\n    if (!this._serverLauncher)\n      throw new Error('Launching server is not supported');\n    options = { ...this._playwright._defaultLaunchOptions, ...options };\n    return await this._serverLauncher.launchServer(options);\n  }\n\n  async launchPersistentContext(userDataDir: string, options: LaunchPersistentContextOptions = {}): Promise<BrowserContext> {\n    const logger = options.logger || this._playwright._defaultLaunchOptions?.logger;\n    assert(!(options as any).port, 'Cannot specify a port without launching as a server.');\n    options = this._playwright.selectors._withSelectorOptions({\n      ...this._playwright._defaultLaunchOptions,\n      ...this._playwright._defaultContextOptions,\n      ...options,\n    });\n    const contextParams = await prepareBrowserContextParams(this._platform, options);\n    const persistentParams: channels.BrowserTypeLaunchPersistentContextParams = {\n      ...contextParams,\n      ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : undefined,\n      ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),\n      env: options.env ? envObjectToArray(options.env) : undefined,\n      channel: options.channel,\n      userDataDir: (this._platform.path().isAbsolute(userDataDir) || !userDataDir) ? userDataDir : this._platform.path().resolve(userDataDir),\n      timeout: new TimeoutSettings(this._platform).launchTimeout(options),\n    };\n    return await this._wrapApiCall(async () => {\n      const result = await this._channel.launchPersistentContext(persistentParams);\n      const browser = Browser.from(result.browser);\n      browser._connectToBrowserType(this, options, logger);\n      const context = BrowserContext.from(result.context);\n      await context._initializeHarFromOptions(options.recordHar);\n      await this._instrumentation.runAfterCreateBrowserContext(context);\n      return context;\n    });\n  }\n\n  connect(options: api.ConnectOptions & { wsEndpoint: string }): Promise<api.Browser>;\n  connect(wsEndpoint: string, options?: api.ConnectOptions): Promise<api.Browser>;\n  async connect(optionsOrWsEndpoint: string | (api.ConnectOptions & { wsEndpoint: string }), options?: api.ConnectOptions): Promise<Browser>{\n    if (typeof optionsOrWsEndpoint === 'string')\n      return await this._connect({ ...options, wsEndpoint: optionsOrWsEndpoint });\n    assert(optionsOrWsEndpoint.wsEndpoint, 'options.wsEndpoint is required');\n    return await this._connect(optionsOrWsEndpoint);\n  }\n\n  async _connect(params: ConnectOptions): Promise<Browser> {\n    const logger = params.logger;\n    return await this._wrapApiCall(async () => {\n      const deadline = params.timeout ? monotonicTime() + params.timeout : 0;\n      const headers = { 'x-playwright-browser': this.name(), ...params.headers };\n      const connectParams: channels.LocalUtilsConnectParams = {\n        wsEndpoint: params.wsEndpoint,\n        headers,\n        exposeNetwork: params.exposeNetwork ?? params._exposeNetwork,\n        slowMo: params.slowMo,\n        timeout: params.timeout || 0,\n      };\n      if ((params as any).__testHookRedirectPortForwarding)\n        connectParams.socksProxyRedirectPortForTest = (params as any).__testHookRedirectPortForwarding;\n      const connection = await connectOverWebSocket(this._connection, connectParams);\n      let browser: Browser;\n      connection.on('close', () => {\n        // Emulate all pages, contexts and the browser closing upon disconnect.\n        for (const context of browser?.contexts() || []) {\n          for (const page of context.pages())\n            page._onClose();\n          context._onClose();\n        }\n        setTimeout(() => browser?._didClose(), 0);\n      });\n\n      const result = await raceAgainstDeadline(async () => {\n        // For tests.\n        if ((params as any).__testHookBeforeCreateBrowser)\n          await (params as any).__testHookBeforeCreateBrowser();\n\n        const playwright = await connection!.initializePlaywright();\n        if (!playwright._initializer.preLaunchedBrowser) {\n          connection.close();\n          throw new Error('Malformed endpoint. Did you use BrowserType.launchServer method?');\n        }\n        playwright.selectors = this._playwright.selectors;\n        browser = Browser.from(playwright._initializer.preLaunchedBrowser!);\n        browser._connectToBrowserType(this, {}, logger);\n        browser._shouldCloseConnectionOnClose = true;\n        browser.on(Events.Browser.Disconnected, () => connection.close());\n        return browser;\n      }, deadline);\n      if (!result.timedOut) {\n        return result.result;\n      } else {\n        connection.close();\n        throw new Error(`Timeout ${params.timeout}ms exceeded`);\n      }\n    });\n  }\n\n  async connectOverCDP(options: api.ConnectOverCDPOptions  & { wsEndpoint?: string }): Promise<api.Browser>;\n  async connectOverCDP(endpointURL: string, options?: api.ConnectOverCDPOptions): Promise<api.Browser>;\n  async connectOverCDP(endpointURLOrOptions: (api.ConnectOverCDPOptions & { wsEndpoint?: string })|string, options?: api.ConnectOverCDPOptions) {\n    if (typeof endpointURLOrOptions === 'string')\n      return await this._connectOverCDP(endpointURLOrOptions, options);\n    const endpointURL = 'endpointURL' in endpointURLOrOptions ? endpointURLOrOptions.endpointURL : endpointURLOrOptions.wsEndpoint;\n    assert(endpointURL, 'Cannot connect over CDP without wsEndpoint.');\n    return await this.connectOverCDP(endpointURL, endpointURLOrOptions);\n  }\n\n  async _connectOverCDP(endpointURL: string, params: api.ConnectOverCDPOptions = {}): Promise<Browser>  {\n    if (this.name() !== 'chromium')\n      throw new Error('Connecting over CDP is only supported in Chromium.');\n    const headers = params.headers ? headersObjectToArray(params.headers) : undefined;\n    const result = await this._channel.connectOverCDP({\n      endpointURL,\n      headers,\n      slowMo: params.slowMo,\n      timeout: new TimeoutSettings(this._platform).timeout(params),\n    });\n    const browser = Browser.from(result.browser);\n    browser._connectToBrowserType(this, {}, params.logger);\n    if (result.defaultContext)\n      await this._instrumentation.runAfterCreateBrowserContext(BrowserContext.from(result.defaultContext));\n    return browser;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { BrowserContext } from './browserContext';\nimport type { APIRequestContext } from './fetch';\nimport type { StackFrame } from '@protocol/channels';\n\n// Instrumentation can mutate the data, for example change apiName or stepId.\nexport interface ApiCallData {\n  apiName: string;\n  title?: string;\n  frames: StackFrame[];\n  userData: any;\n  stepId?: string;\n  error?: Error;\n}\n\nexport interface ClientInstrumentation {\n  addListener(listener: ClientInstrumentationListener): void;\n  removeListener(listener: ClientInstrumentationListener): void;\n  removeAllListeners(): void;\n  onApiCallBegin(apiCall: ApiCallData, channel: { type: string, method: string, params?: Record<string, any> }): void;\n  onApiCallEnd(apiCal: ApiCallData): void;\n  onWillPause(options: { keepTestTimeout: boolean }): void;\n\n  runAfterCreateBrowserContext(context: BrowserContext): Promise<void>;\n  runAfterCreateRequestContext(context: APIRequestContext): Promise<void>;\n  runBeforeCloseBrowserContext(context: BrowserContext): Promise<void>;\n  runBeforeCloseRequestContext(context: APIRequestContext): Promise<void>;\n}\n\nexport interface ClientInstrumentationListener {\n  onApiCallBegin?(apiCall: ApiCallData, channel: { type: string, method: string, params?: Record<string, any>  }): void;\n  onApiCallEnd?(apiCall: ApiCallData): void;\n  onWillPause?(options: { keepTestTimeout: boolean }): void;\n\n  runAfterCreateBrowserContext?(context: BrowserContext): Promise<void>;\n  runAfterCreateRequestContext?(context: APIRequestContext): Promise<void>;\n  runBeforeCloseBrowserContext?(context: BrowserContext): Promise<void>;\n  runBeforeCloseRequestContext?(context: APIRequestContext): Promise<void>;\n}\n\nexport function createInstrumentation(): ClientInstrumentation {\n  const listeners: ClientInstrumentationListener[] = [];\n  return new Proxy({}, {\n    get: (obj: any, prop: string | symbol) => {\n      if (typeof prop !== 'string')\n        return obj[prop];\n      if (prop === 'addListener')\n        return (listener: ClientInstrumentationListener) => listeners.push(listener);\n      if (prop === 'removeListener')\n        return (listener: ClientInstrumentationListener) => listeners.splice(listeners.indexOf(listener), 1);\n      if (prop === 'removeAllListeners')\n        return () => listeners.splice(0, listeners.length);\n      if (prop.startsWith('run')) {\n        return async (...params: any[]) => {\n          for (const listener of listeners)\n            await (listener as any)[prop]?.(...params);\n        };\n      }\n      if (prop.startsWith('on')) {\n        return (...params: any[]) => {\n          for (const listener of listeners)\n            (listener as any)[prop]?.(...params);\n        };\n      }\n      return obj[prop];\n    },\n  });\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BrowserContext, prepareBrowserContextParams } from './browserContext';\nimport { ChannelOwner } from './channelOwner';\nimport { envObjectToArray } from './clientHelper';\nimport { ConsoleMessage } from './consoleMessage';\nimport { TargetClosedError, isTargetClosedError } from './errors';\nimport { Events } from './events';\nimport { JSHandle, parseResult, serializeArgument } from './jsHandle';\nimport { Waiter } from './waiter';\nimport { TimeoutSettings } from './timeoutSettings';\n\nimport type { Page } from './page';\nimport type { BrowserContextOptions, Env, Headers, WaitForEventOptions } from './types';\nimport type * as structs from '../../types/structs';\nimport type * as api from '../../types/types';\nimport type * as channels from '@protocol/channels';\nimport type * as childProcess from 'child_process';\nimport type { BrowserWindow } from 'electron';\nimport type { Playwright } from './playwright';\n\ntype ElectronOptions = Omit<channels.ElectronLaunchOptions, 'env'|'extraHTTPHeaders'|'recordHar'|'colorScheme'|'acceptDownloads'> & {\n  env?: Env,\n  extraHTTPHeaders?: Headers,\n  recordHar?: BrowserContextOptions['recordHar'],\n  colorScheme?: 'dark' | 'light' | 'no-preference' | null,\n  acceptDownloads?: boolean,\n  timeout?: number,\n};\n\ntype ElectronAppType = typeof import('electron');\n\nexport class Electron extends ChannelOwner<channels.ElectronChannel> implements api.Electron {\n  _playwright!: Playwright;\n\n  static from(electron: channels.ElectronChannel): Electron {\n    return (electron as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.ElectronInitializer) {\n    super(parent, type, guid, initializer);\n  }\n\n  async launch(options: ElectronOptions = {}): Promise<ElectronApplication> {\n    options = this._playwright.selectors._withSelectorOptions(options);\n    const params: channels.ElectronLaunchParams = {\n      ...await prepareBrowserContextParams(this._platform, options),\n      env: envObjectToArray(options.env ? options.env : this._platform.env),\n      tracesDir: options.tracesDir,\n      timeout: new TimeoutSettings(this._platform).launchTimeout(options),\n    };\n    const app = ElectronApplication.from((await this._channel.launch(params)).electronApplication);\n    this._playwright.selectors._contextsForSelectors.add(app._context);\n    app.once(Events.ElectronApplication.Close, () => this._playwright.selectors._contextsForSelectors.delete(app._context));\n    await app._context._initializeHarFromOptions(options.recordHar);\n    app._context.tracing._tracesDir = options.tracesDir;\n    return app;\n  }\n}\n\nexport class ElectronApplication extends ChannelOwner<channels.ElectronApplicationChannel> implements api.ElectronApplication {\n  readonly _context: BrowserContext;\n  private _windows = new Set<Page>();\n  private _timeoutSettings: TimeoutSettings;\n\n  static from(electronApplication: channels.ElectronApplicationChannel): ElectronApplication {\n    return (electronApplication as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.ElectronApplicationInitializer) {\n    super(parent, type, guid, initializer);\n\n    this._timeoutSettings = new TimeoutSettings(this._platform);\n    this._context = BrowserContext.from(initializer.context);\n    for (const page of this._context._pages)\n      this._onPage(page);\n    this._context.on(Events.BrowserContext.Page, page => this._onPage(page));\n    this._channel.on('close', () => {\n      this.emit(Events.ElectronApplication.Close);\n    });\n    this._channel.on('console', event => this.emit(Events.ElectronApplication.Console, new ConsoleMessage(this._platform, event)));\n    this._setEventToSubscriptionMapping(new Map<string, channels.ElectronApplicationUpdateSubscriptionParams['event']>([\n      [Events.ElectronApplication.Console, 'console'],\n    ]));\n  }\n\n  process(): childProcess.ChildProcess {\n    return this._toImpl().process();\n  }\n\n  _onPage(page: Page) {\n    this._windows.add(page);\n    this.emit(Events.ElectronApplication.Window, page);\n    page.once(Events.Page.Close, () => this._windows.delete(page));\n  }\n\n  windows(): Page[] {\n    // TODO: add ElectronPage class inheriting from Page.\n    return [...this._windows];\n  }\n\n  async firstWindow(options?: { timeout?: number }): Promise<Page> {\n    if (this._windows.size)\n      return this._windows.values().next().value!;\n    return await this.waitForEvent('window', options);\n  }\n\n  context(): BrowserContext {\n    return this._context;\n  }\n\n  async [Symbol.asyncDispose]() {\n    await this.close();\n  }\n\n  async close() {\n    try {\n      await this._context.close();\n    } catch (e) {\n      if (isTargetClosedError(e))\n        return;\n      throw e;\n    }\n  }\n\n  async waitForEvent(event: string, optionsOrPredicate: WaitForEventOptions = {}): Promise<any> {\n    return await this._wrapApiCall(async () => {\n      const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === 'function' ? {} : optionsOrPredicate);\n      const predicate = typeof optionsOrPredicate === 'function' ? optionsOrPredicate : optionsOrPredicate.predicate;\n      const waiter = Waiter.createForEvent(this, event);\n      waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event \"${event}\"`);\n      if (event !== Events.ElectronApplication.Close)\n        waiter.rejectOnEvent(this, Events.ElectronApplication.Close, () => new TargetClosedError());\n      const result = await waiter.waitForEvent(this, event, predicate as any);\n      waiter.dispose();\n      return result;\n    });\n  }\n\n  async browserWindow(page: Page): Promise<JSHandle<BrowserWindow>> {\n    const result = await this._channel.browserWindow({ page: page._channel });\n    return JSHandle.from(result.handle);\n  }\n\n  async evaluate<R, Arg>(pageFunction: structs.PageFunctionOn<ElectronAppType, Arg, R>, arg: Arg): Promise<R> {\n    const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === 'function', arg: serializeArgument(arg) });\n    return parseResult(result.value);\n  }\n\n  async evaluateHandle<R, Arg>(pageFunction: structs.PageFunctionOn<ElectronAppType, Arg, R>, arg: Arg): Promise<structs.SmartHandle<R>> {\n    const result = await this._channel.evaluateExpressionHandle({ expression: String(pageFunction), isFunction: typeof pageFunction === 'function', arg: serializeArgument(arg) });\n    return JSHandle.from(result.handle) as any as structs.SmartHandle<R>;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChannelOwner } from './channelOwner';\n\nimport type * as channels from '@protocol/channels';\n\nexport class JsonPipe extends ChannelOwner<channels.JsonPipeChannel> {\n  static from(jsonPipe: channels.JsonPipeChannel): JsonPipe {\n    return (jsonPipe as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.JsonPipeInitializer) {\n    super(parent, type, guid, initializer);\n  }\n\n  channel() {\n    return this._channel;\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChannelOwner } from './channelOwner';\n\nimport type { Size } from './types';\nimport type * as channels from '@protocol/channels';\n\ntype DeviceDescriptor = {\n  userAgent: string,\n  viewport: Size,\n  deviceScaleFactor: number,\n  isMobile: boolean,\n  hasTouch: boolean,\n  defaultBrowserType: 'chromium' | 'firefox' | 'webkit'\n};\ntype Devices = { [name: string]: DeviceDescriptor };\n\nexport class LocalUtils extends ChannelOwner<channels.LocalUtilsChannel> {\n  readonly devices: Devices;\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.LocalUtilsInitializer) {\n    super(parent, type, guid, initializer);\n    this.devices = {};\n    for (const { name, descriptor } of initializer.deviceDescriptors)\n      this.devices[name] = descriptor;\n  }\n\n  async zip(params: channels.LocalUtilsZipParams): Promise<void> {\n    return await this._channel.zip(params);\n  }\n\n  async harOpen(params: channels.LocalUtilsHarOpenParams): Promise<channels.LocalUtilsHarOpenResult> {\n    return await this._channel.harOpen(params);\n  }\n\n  async harLookup(params: channels.LocalUtilsHarLookupParams): Promise<channels.LocalUtilsHarLookupResult> {\n    return await this._channel.harLookup(params);\n  }\n\n  async harClose(params: channels.LocalUtilsHarCloseParams): Promise<void> {\n    return await this._channel.harClose(params);\n  }\n\n  async harUnzip(params: channels.LocalUtilsHarUnzipParams): Promise<void> {\n    return await this._channel.harUnzip(params);\n  }\n\n  async tracingStarted(params: channels.LocalUtilsTracingStartedParams): Promise<channels.LocalUtilsTracingStartedResult> {\n    return await this._channel.tracingStarted(params);\n  }\n\n  async traceDiscarded(params: channels.LocalUtilsTraceDiscardedParams): Promise<void> {\n    return await this._channel.traceDiscarded(params);\n  }\n\n  async addStackToTracingNoReply(params: channels.LocalUtilsAddStackToTracingNoReplyParams): Promise<void> {\n    return await this._channel.addStackToTracingNoReply(params);\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { evaluationScript } from './clientHelper';\nimport { setTestIdAttribute } from './locator';\n\nimport type { SelectorEngine } from './types';\nimport type * as api from '../../types/types';\nimport type * as channels from '@protocol/channels';\nimport type { BrowserContext } from './browserContext';\nimport type { Platform } from './platform';\n\nexport class Selectors implements api.Selectors {\n  private _platform: Platform;\n  private _selectorEngines: channels.SelectorEngine[] = [];\n  private _testIdAttributeName: string | undefined;\n  readonly _contextsForSelectors = new Set<BrowserContext>();\n\n  constructor(platform: Platform) {\n    this._platform = platform;\n  }\n\n  async register(name: string, script: string | (() => SelectorEngine) | { path?: string, content?: string }, options: { contentScript?: boolean } = {}): Promise<void> {\n    const source = await evaluationScript(this._platform, script, undefined, false);\n    const selectorEngine: channels.SelectorEngine = { ...options, name, source };\n    for (const context of this._contextsForSelectors)\n      await context._channel.registerSelectorEngine({ selectorEngine });\n    this._selectorEngines.push(selectorEngine);\n  }\n\n  setTestIdAttribute(attributeName: string) {\n    this._testIdAttributeName = attributeName;\n    setTestIdAttribute(attributeName);\n    for (const context of this._contextsForSelectors)\n      context._channel.setTestIdAttributeName({ testIdAttributeName: attributeName }).catch(() => {});\n  }\n\n  _withSelectorOptions<T>(options: T) {\n    return { ...options, selectorEngines: this._selectorEngines, testIdAttributeName: this._testIdAttributeName };\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Android } from './android';\nimport { Browser } from './browser';\nimport { BrowserType } from './browserType';\nimport { ChannelOwner } from './channelOwner';\nimport { Electron } from './electron';\nimport { TimeoutError } from './errors';\nimport { APIRequest } from './fetch';\nimport { Selectors } from './selectors';\n\nimport type * as channels from '@protocol/channels';\nimport type { BrowserContextOptions, LaunchOptions } from 'playwright-core';\n\nexport class Playwright extends ChannelOwner<channels.PlaywrightChannel> {\n  readonly _android: Android;\n  readonly _electron: Electron;\n  readonly _bidiChromium: BrowserType;\n  readonly _bidiFirefox: BrowserType;\n  readonly chromium: BrowserType;\n  readonly firefox: BrowserType;\n  readonly webkit: BrowserType;\n  readonly devices: any;\n  selectors: Selectors;\n  readonly request: APIRequest;\n  readonly errors: { TimeoutError: typeof TimeoutError };\n\n  // Instrumentation.\n  _defaultLaunchOptions?: LaunchOptions;\n  _defaultContextOptions?: BrowserContextOptions;\n  _defaultContextTimeout?: number;\n  _defaultContextNavigationTimeout?: number;\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.PlaywrightInitializer) {\n    super(parent, type, guid, initializer);\n    this.request = new APIRequest(this);\n    this.chromium = BrowserType.from(initializer.chromium);\n    this.chromium._playwright = this;\n    this.firefox = BrowserType.from(initializer.firefox);\n    this.firefox._playwright = this;\n    this.webkit = BrowserType.from(initializer.webkit);\n    this.webkit._playwright = this;\n    this._android = Android.from(initializer.android);\n    this._android._playwright = this;\n    this._electron = Electron.from(initializer.electron);\n    this._electron._playwright = this;\n    this._bidiChromium = BrowserType.from(initializer.bidiChromium);\n    this._bidiChromium._playwright = this;\n    this._bidiFirefox = BrowserType.from(initializer.bidiFirefox);\n    this._bidiFirefox._playwright = this;\n    this.devices = this._connection.localUtils()?.devices ?? {};\n    this.selectors = new Selectors(this._connection._platform);\n    this.errors = { TimeoutError };\n    (global as any)._playwrightInstance = this;\n  }\n\n  static from(channel: channels.PlaywrightChannel): Playwright {\n    return (channel as any)._object;\n  }\n\n  private _browserTypes(): BrowserType[] {\n    return [this.chromium, this.firefox, this.webkit, this._bidiChromium, this._bidiFirefox];\n  }\n\n  _preLaunchedBrowser(): Browser {\n    const browser = Browser.from(this._initializer.preLaunchedBrowser!);\n    browser._connectToBrowserType(this[browser._name as 'chromium' | 'firefox' | 'webkit'], {}, undefined);\n    return browser;\n  }\n\n  _allContexts() {\n    return this._browserTypes().flatMap(type => [...type._contexts]);\n  }\n\n  _allPages() {\n    return this._allContexts().flatMap(context => context.pages());\n  }\n}\n","/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from './eventEmitter';\nimport { Android, AndroidDevice, AndroidSocket } from './android';\nimport { Artifact } from './artifact';\nimport { Browser } from './browser';\nimport { BrowserContext } from './browserContext';\nimport { BrowserType } from './browserType';\nimport { CDPSession } from './cdpSession';\nimport { ChannelOwner } from './channelOwner';\nimport { createInstrumentation } from './clientInstrumentation';\nimport { Dialog } from './dialog';\nimport { Electron, ElectronApplication } from './electron';\nimport { ElementHandle } from './elementHandle';\nimport { TargetClosedError, parseError } from './errors';\nimport { APIRequestContext } from './fetch';\nimport { Frame } from './frame';\nimport { JSHandle } from './jsHandle';\nimport { JsonPipe } from './jsonPipe';\nimport { LocalUtils } from './localUtils';\nimport { Request, Response, Route, WebSocket, WebSocketRoute } from './network';\nimport { BindingCall, Page } from './page';\nimport { Playwright } from './playwright';\nimport { Stream } from './stream';\nimport { Tracing } from './tracing';\nimport { Worker } from './worker';\nimport { WritableStream } from './writableStream';\nimport { ValidationError, findValidator  } from '../protocol/validator';\nimport { rewriteErrorMessage } from '../utils/isomorphic/stackTrace';\n\nimport type { ClientInstrumentation } from './clientInstrumentation';\nimport type { HeadersArray } from './types';\nimport type { ValidatorContext } from '../protocol/validator';\nimport type { Platform } from './platform';\nimport type * as channels from '@protocol/channels';\n\nclass Root extends ChannelOwner<channels.RootChannel> {\n  constructor(connection: Connection) {\n    super(connection, 'Root', '', {});\n  }\n\n  async initialize(): Promise<Playwright> {\n    return Playwright.from((await this._channel.initialize({\n      sdkLanguage: 'javascript',\n    })).playwright);\n  }\n}\n\nclass DummyChannelOwner extends ChannelOwner {\n}\n\nexport class Connection extends EventEmitter {\n  readonly _objects = new Map<string, ChannelOwner>();\n  onmessage = (message: object): void => {};\n  private _lastId = 0;\n  private _callbacks = new Map<number, { resolve: (a: any) => void, reject: (a: Error) => void, title: string | undefined, type: string, method: string }>();\n  private _rootObject: Root;\n  private _closedError: Error | undefined;\n  private _isRemote = false;\n  private _localUtils?: LocalUtils;\n  private _rawBuffers = false;\n  // Some connections allow resolving in-process dispatchers.\n  toImpl: ((client: ChannelOwner) => any) | undefined;\n  private _tracingCount = 0;\n  readonly _instrumentation: ClientInstrumentation;\n  // Used from @playwright/test fixtures -> TODO remove?\n  readonly headers: HeadersArray;\n\n  constructor(platform: Platform, localUtils?: LocalUtils, instrumentation?: ClientInstrumentation, headers: HeadersArray = []) {\n    super(platform);\n    this._instrumentation = instrumentation || createInstrumentation();\n    this._localUtils = localUtils;\n    this._rootObject = new Root(this);\n    this.headers = headers;\n  }\n\n  markAsRemote() {\n    this._isRemote = true;\n  }\n\n  isRemote() {\n    return this._isRemote;\n  }\n\n  useRawBuffers() {\n    this._rawBuffers = true;\n  }\n\n  rawBuffers() {\n    return this._rawBuffers;\n  }\n\n  localUtils(): LocalUtils | undefined {\n    return this._localUtils;\n  }\n\n  async initializePlaywright(): Promise<Playwright> {\n    return await this._rootObject.initialize();\n  }\n\n  getObjectWithKnownName(guid: string): any {\n    return this._objects.get(guid)!;\n  }\n\n  setIsTracing(isTracing: boolean) {\n    if (isTracing)\n      this._tracingCount++;\n    else\n      this._tracingCount--;\n  }\n\n  async sendMessageToServer(object: ChannelOwner, method: string, params: any, options: { apiName?: string, title?: string, internal?: boolean, frames?: channels.StackFrame[], stepId?: string }): Promise<any> {\n    if (this._closedError)\n      throw this._closedError;\n    if (object._wasCollected)\n      throw new Error('The object has been collected to prevent unbounded heap growth.');\n\n    const guid = object._guid;\n    const type = object._type;\n    const id = ++this._lastId;\n    const message = { id, guid, method, params };\n    if (this._platform.isLogEnabled('channel')) {\n      // Do not include metadata in debug logs to avoid noise.\n      this._platform.log('channel', 'SEND> ' + JSON.stringify(message));\n    }\n    const location = options.frames?.[0] ? { file: options.frames[0].file, line: options.frames[0].line, column: options.frames[0].column } : undefined;\n    const metadata: channels.Metadata = { title: options.title, location, internal: options.internal, stepId: options.stepId };\n    if (this._tracingCount && options.frames && type !== 'LocalUtils')\n      this._localUtils?.addStackToTracingNoReply({ callData: { stack: options.frames ?? [], id } }).catch(() => {});\n    // We need to exit zones before calling into the server, otherwise\n    // when we receive events from the server, we would be in an API zone.\n    this._platform.zones.empty.run(() => this.onmessage({ ...message, metadata }));\n    return await new Promise((resolve, reject) => this._callbacks.set(id, { resolve, reject, title: options.title, type, method }));\n  }\n\n  private _validatorFromWireContext(): ValidatorContext {\n    return {\n      tChannelImpl: this._tChannelImplFromWire.bind(this),\n      binary: this._rawBuffers ? 'buffer' : 'fromBase64',\n      isUnderTest: () => this._platform.isUnderTest(),\n    };\n  }\n\n  dispatch(message: object) {\n    if (this._closedError)\n      return;\n\n    const { id, guid, method, params, result, error, log } = message as any;\n    if (id) {\n      if (this._platform.isLogEnabled('channel'))\n        this._platform.log('channel', '<RECV ' + JSON.stringify(message));\n      const callback = this._callbacks.get(id);\n      if (!callback)\n        throw new Error(`Cannot find command to respond: ${id}`);\n      this._callbacks.delete(id);\n      if (error && !result) {\n        const parsedError = parseError(error);\n        rewriteErrorMessage(parsedError, parsedError.message + formatCallLog(this._platform, log));\n        callback.reject(parsedError);\n      } else {\n        const validator = findValidator(callback.type, callback.method, 'Result');\n        callback.resolve(validator(result, '', this._validatorFromWireContext()));\n      }\n      return;\n    }\n\n    if (this._platform.isLogEnabled('channel'))\n      this._platform.log('channel', '<EVENT ' + JSON.stringify(message));\n    if (method === '__create__') {\n      this._createRemoteObject(guid, params.type, params.guid, params.initializer);\n      return;\n    }\n\n    const object = this._objects.get(guid);\n    if (!object)\n      throw new Error(`Cannot find object to \"${method}\": ${guid}`);\n\n    if (method === '__adopt__') {\n      const child = this._objects.get(params.guid);\n      if (!child)\n        throw new Error(`Unknown new child: ${params.guid}`);\n      object._adopt(child);\n      return;\n    }\n\n    if (method === '__dispose__') {\n      object._dispose(params.reason);\n      return;\n    }\n\n    const validator = findValidator(object._type, method, 'Event');\n    (object._channel as any).emit(method, validator(params, '', this._validatorFromWireContext()));\n  }\n\n  close(cause?: string) {\n    if (this._closedError)\n      return;\n    this._closedError = new TargetClosedError(cause);\n    for (const callback of this._callbacks.values())\n      callback.reject(this._closedError);\n    this._callbacks.clear();\n    this.emit('close');\n  }\n\n  private _tChannelImplFromWire(names: '*' | string[], arg: any, path: string, context: ValidatorContext) {\n    if (arg && typeof arg === 'object' && typeof arg.guid === 'string') {\n      const object = this._objects.get(arg.guid)!;\n      if (!object)\n        throw new Error(`Object with guid ${arg.guid} was not bound in the connection`);\n      if (names !== '*' && !names.includes(object._type))\n        throw new ValidationError(`${path}: expected channel ${names.toString()}`);\n      return object._channel;\n    }\n    throw new ValidationError(`${path}: expected channel ${names.toString()}`);\n  }\n\n  private _createRemoteObject(parentGuid: string, type: string, guid: string, initializer: any): any {\n    const parent = this._objects.get(parentGuid);\n    if (!parent)\n      throw new Error(`Cannot find parent object ${parentGuid} to create ${guid}`);\n    let result: ChannelOwner<any>;\n    const validator = findValidator(type, '', 'Initializer');\n    initializer = validator(initializer, '', this._validatorFromWireContext());\n    switch (type) {\n      case 'Android':\n        result = new Android(parent, type, guid, initializer);\n        break;\n      case 'AndroidSocket':\n        result = new AndroidSocket(parent, type, guid, initializer);\n        break;\n      case 'AndroidDevice':\n        result = new AndroidDevice(parent, type, guid, initializer);\n        break;\n      case 'APIRequestContext':\n        result = new APIRequestContext(parent, type, guid, initializer);\n        break;\n      case 'Artifact':\n        result = new Artifact(parent, type, guid, initializer);\n        break;\n      case 'BindingCall':\n        result = new BindingCall(parent, type, guid, initializer);\n        break;\n      case 'Browser':\n        result = new Browser(parent, type, guid, initializer);\n        break;\n      case 'BrowserContext':\n        result = new BrowserContext(parent, type, guid, initializer);\n        break;\n      case 'BrowserType':\n        result = new BrowserType(parent, type, guid, initializer);\n        break;\n      case 'CDPSession':\n        result = new CDPSession(parent, type, guid, initializer);\n        break;\n      case 'Dialog':\n        result = new Dialog(parent, type, guid, initializer);\n        break;\n      case 'Electron':\n        result = new Electron(parent, type, guid, initializer);\n        break;\n      case 'ElectronApplication':\n        result = new ElectronApplication(parent, type, guid, initializer);\n        break;\n      case 'ElementHandle':\n        result = new ElementHandle(parent, type, guid, initializer);\n        break;\n      case 'Frame':\n        result = new Frame(parent, type, guid, initializer);\n        break;\n      case 'JSHandle':\n        result = new JSHandle(parent, type, guid, initializer);\n        break;\n      case 'JsonPipe':\n        result = new JsonPipe(parent, type, guid, initializer);\n        break;\n      case 'LocalUtils':\n        result = new LocalUtils(parent, type, guid, initializer);\n        if (!this._localUtils)\n          this._localUtils = result as LocalUtils;\n        break;\n      case 'Page':\n        result = new Page(parent, type, guid, initializer);\n        break;\n      case 'Playwright':\n        result = new Playwright(parent, type, guid, initializer);\n        break;\n      case 'Request':\n        result = new Request(parent, type, guid, initializer);\n        break;\n      case 'Response':\n        result = new Response(parent, type, guid, initializer);\n        break;\n      case 'Route':\n        result = new Route(parent, type, guid, initializer);\n        break;\n      case 'Stream':\n        result = new Stream(parent, type, guid, initializer);\n        break;\n      case 'SocksSupport':\n        result = new DummyChannelOwner(parent, type, guid, initializer);\n        break;\n      case 'Tracing':\n        result = new Tracing(parent, type, guid, initializer);\n        break;\n      case 'WebSocket':\n        result = new WebSocket(parent, type, guid, initializer);\n        break;\n      case 'WebSocketRoute':\n        result = new WebSocketRoute(parent, type, guid, initializer);\n        break;\n      case 'Worker':\n        result = new Worker(parent, type, guid, initializer);\n        break;\n      case 'WritableStream':\n        result = new WritableStream(parent, type, guid, initializer);\n        break;\n      default:\n        throw new Error('Missing type ' + type);\n    }\n    return result;\n  }\n}\n\nfunction formatCallLog(platform: Platform, log: string[] | undefined): string {\n  if (!log || !log.some(l => !!l))\n    return '';\n  return `\nCall log:\n${platform.colors.dim(log.join('\\n'))}\n`;\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\nimport { ChannelOwner } from 'playwright-core/lib/client/channelOwner';\nimport type api from '../types/types';\nimport type * as channels from '../protocol/channels';\nimport { Page } from 'playwright-core/lib/client/page';\nimport type { BrowserContext } from 'playwright-core/lib/client/browserContext';\nimport type { Mode } from '@recorder/recorderTypes';\nimport fs from '../shims/fs';\n\nfunction from<T>(obj: any): T {\n  return obj._object as T;\n}\n\nexport class Crx extends ChannelOwner<channels.CrxChannel> implements api.Crx {\n\n  readonly fs: api.CrxFs = fs;\n\n  private _crxAppPromise?: Promise<CrxApplication>;\n  private _incognitoCrxPromise?: Promise<CrxApplication>;\n\n  static from(crx: channels.CrxChannel): Crx {\n    return (crx as any)._object;\n  }\n\n  async start(options?: channels.CrxStartOptions) {\n    if (options?.incognito) {\n      if (this._incognitoCrxPromise)\n        throw new Error(`incognito crxApplication is already started`);\n      this._incognitoCrxPromise = this._start(options, () => this._incognitoCrxPromise = undefined);\n      return await this._incognitoCrxPromise;\n    } else {\n      if (this._crxAppPromise)\n        throw new Error(`crxApplication is already started`);\n      this._crxAppPromise = this._start(options ?? {}, () => this._crxAppPromise = undefined);\n      return await this._crxAppPromise;\n    }\n  }\n\n  private async _start(options: channels.CrxStartOptions, onClose: () => void) {\n    const crxApp = from<CrxApplication>((await this._channel.start(options ?? {})).crxApplication);\n    crxApp.on('close', onClose);\n    return crxApp;\n  }\n\n  async get(options?: { incognito: boolean }): Promise<CrxApplication | undefined> {\n    if (options?.incognito)\n      return await this._incognitoCrxPromise;\n    else\n      return await this._crxAppPromise;\n  }\n}\n\nexport class CrxRecorder extends EventEmitter implements api.CrxRecorder {\n  private _channel: channels.CrxApplicationChannel;\n  private _hidden: boolean = true;\n  private _mode: Mode = 'none';\n\n  constructor(channel: channels.CrxApplicationChannel) {\n    super();\n    this._channel = channel;\n    this._channel.on('hide', () => {\n      this._hidden = true;\n      this.emit('hide');\n    });\n    this._channel.on('show', () => {\n      this._hidden = false;\n      this.emit('show');\n    });\n    this._channel.on('modeChanged', event => {\n      this._mode = event.mode;\n      this.emit('modechanged', event);\n    });\n  }\n\n  mode() {\n    return this._mode;\n  }\n\n  isHidden() {\n    return this._hidden;\n  }\n\n  async setMode(mode: Mode) {\n    await this._channel.setMode({ mode });\n  }\n\n  async show(options?: channels.CrxApplicationShowRecorderOptions) {\n    await this._channel.showRecorder(options ?? {});\n  }\n\n  async hide() {\n    await this._channel.hideRecorder();\n  }\n\n  async list(code: string) {\n    const { tests } = await this._channel.list({ code });\n    return tests;\n  }\n\n  async load(code: string) {\n    await this._channel.load({ code });\n  }\n\n  async run(code: string, page?: Page): Promise<void> {\n    await this._channel.run({ code, page: page?._channel });\n  }\n}\n\nexport class CrxApplication extends ChannelOwner<channels.CrxApplicationChannel> implements api.CrxApplication {\n  private _context: BrowserContext;\n  readonly recorder: api.CrxRecorder;\n\n  static from(crxApplication: channels.CrxApplicationChannel): CrxApplication {\n    return (crxApplication as any)._object;\n  }\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.CrxApplicationInitializer) {\n    super(parent, type, guid, initializer);\n    this._context = (initializer.context as any)._object;\n    this.recorder = new CrxRecorder(this._channel);\n    this._channel.on('attached', ({ page, tabId }) => {\n      this.emit('attached', { tabId, page: Page.from(page) });\n    });\n    this._channel.on('detached', ({ tabId }) => {\n      this.emit('detached', tabId);\n    });\n    this._context.on('close', () => {\n      this.emit('close');\n    });\n  }\n\n  context() {\n    return this._context;\n  }\n\n  pages(): api.Page[] {\n    return this._context.pages();\n  }\n\n  async attach(tabId: number) {\n    return from<Page>((await this._channel.attach({ tabId })).page);\n  }\n\n  async attachAll(options?: channels.CrxApplicationAttachAllOptions) {\n    // we must convert url as string into string[]\n    const { url: urlOrUrls, ...remaining } = options ?? {};\n    const url = urlOrUrls ? typeof urlOrUrls === 'string' ? [urlOrUrls] : urlOrUrls : undefined;\n    const params = { ...remaining, url };\n\n    return (await this._channel.attachAll(params)).pages.map(p => from<Page>(p));\n  }\n\n  async detach(tabIdOrPage: number | Page): Promise<void> {\n    const params = typeof tabIdOrPage === 'number' ?\n      { tabId: tabIdOrPage } :\n      { page: tabIdOrPage._channel };\n\n    await this._channel.detach(params);\n  }\n\n  async detachAll(): Promise<void> {\n    await this._channel.detachAll();\n  }\n\n  async newPage(options?: channels.CrxApplicationNewPageOptions) {\n    return from<Page>((await this._channel.newPage(options ?? {})).page);\n  }\n\n  async close() {\n    await this._channel.close();\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\nimport type * as channels from '../protocol/channels';\nimport type { ChannelOwner } from 'playwright-core/lib/client/channelOwner';\nimport { Playwright } from 'playwright-core/lib/client/playwright';\nimport { Crx } from './crx';\n\nexport class CrxPlaywright extends Playwright {\n\n  readonly _crx: Crx;\n\n  constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.CrxPlaywrightInitializer) {\n    super(parent, type, guid, initializer);\n    this._crx = Crx.from(initializer._crx);\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Connection } from 'playwright-core/lib/client/connection';\nimport { Crx, CrxApplication } from './crx';\nimport { CrxPlaywright } from './crxPlaywright';\nimport { findValidator } from 'playwright-core/lib/protocol/validatorPrimitives';\nimport { Platform } from 'playwright-core/lib/client/platform';\n\nexport class CrxConnection extends Connection {\n  constructor(platform: Platform) {\n    super(platform, undefined, undefined);\n    this.useRawBuffers();\n  }\n\n  dispatch(message: object): void {\n    const { guid: parentGuid, method, params } = message as any;\n\n    if (method === '__create__') {\n      const { type, guid } = params;\n      let initializer = params.initializer;\n\n      const parent = this._objects.get(parentGuid)!;\n      const validator = findValidator(type, '', 'Initializer');\n      initializer = validator(initializer, '', {\n        tChannelImpl: (this as any)._tChannelImplFromWire.bind(this),\n        binary: 'buffer',\n        isUnderTest: () => this._platform.isUnderTest()\n      });\n\n      switch (type) {\n        case 'Playwright':\n          new CrxPlaywright(parent, type, guid, initializer);\n          return;\n        case 'Crx':\n          new Crx(parent, type, guid, initializer);\n          return;\n        case 'CrxApplication':\n          new CrxApplication(parent, type, guid, initializer);\n          return;\n      }\n    }\n\n    return super.dispatch(message);\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { RecorderEventData, RecorderMessage, RecorderWindow } from './crxRecorderApp';\n\nexport class PopupRecorderWindow implements RecorderWindow {\n  private _recorderUrl: string;\n  private _window?: chrome.windows.Window;\n  private id?: number;\n  private _portPromise?: Promise<chrome.runtime.Port>;\n  onMessage?: ({ type, event, params }: RecorderEventData) => void;\n  hideApp?: () => any;\n\n  constructor(recorderUrl?: string) {\n    this._recorderUrl = recorderUrl ?? 'index.html';\n    chrome.windows.onRemoved.addListener(window => {\n      if (this._window?.id === window)\n        this.close().catch(() => {});\n    });\n  }\n\n  isClosed() {\n    return !this._window;\n  }\n\n  postMessage(msg: RecorderMessage) {\n    this._portPromise?.then(port => port.postMessage({ ...msg })).catch(() => {});\n  }\n\n  async open() {\n    if (this._window)\n      return;\n    this._portPromise = new Promise<chrome.runtime.Port>(resolve => {\n      const onConnect = (port: chrome.runtime.Port) => {\n        chrome.runtime.onConnect.removeListener(onConnect);\n        port.onDisconnect.addListener(this.close.bind(this));\n        if (this.onMessage)\n          port.onMessage.addListener(this.onMessage);\n        resolve(port);\n      };\n      chrome.runtime.onConnect.addListener(onConnect);\n    });\n    const [wnd] = await Promise.all([\n      chrome.windows.create({ type: 'popup', url: this._recorderUrl }),\n      this._portPromise,\n    ]);\n    this._window = wnd;\n  }\n\n  async focus() {\n    await chrome.windows.update(this.id!, { drawAttention: true, focused: true });\n  }\n\n  async close() {\n    if (!this._portPromise)\n      return;\n\n    this.hideApp?.();\n\n    if (this._window?.id)\n      chrome.windows.remove(this._window.id).catch(() => {});\n    this._portPromise?.then(port => port.disconnect()).catch(() => {});\n    this._window = undefined;\n    this._portPromise = undefined;\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { RecorderEventData, RecorderMessage, RecorderWindow } from './crxRecorderApp';\n\nexport class SidepanelRecorderWindow implements RecorderWindow {\n  private _recorderUrl: string;\n  private _portPromise: Promise<chrome.runtime.Port>;\n  private _closed = true;\n  onMessage?: (({ type, event, params }: RecorderEventData) => void) | undefined;\n  hideApp?: (() => any) | undefined;\n\n  constructor(recorderUrl?: string) {\n    this._recorderUrl = recorderUrl ?? 'index.html';\n    this._portPromise = this._waitConnect();\n  }\n\n  isClosed(): boolean {\n    return this._closed;\n  }\n\n  postMessage(msg: RecorderMessage) {\n    this._portPromise.then(port => port.postMessage({ ...msg })).catch(() => {});\n  }\n\n  async open() {\n    await chrome.sidePanel.setOptions({ path: this._recorderUrl });\n    await this._portPromise;\n    this._closed = false;\n  }\n\n  async focus() {\n  }\n\n  async close() {\n    if (this._closed)\n      return;\n    this._closed = true;\n    this._portPromise.then(port => port.disconnect());\n    this._portPromise = this._waitConnect();\n    this.hideApp?.();\n  }\n\n  private _waitConnect(): Promise<chrome.runtime.Port> {\n    return new Promise(resolve => {\n      const onConnect = (port: chrome.runtime.Port) => {\n        chrome.runtime.onConnect.removeListener(onConnect);\n        port.onDisconnect.addListener(this.close.bind(this));\n        if (this.onMessage)\n          port.onMessage.addListener(this.onMessage.bind(this));\n        resolve(port);\n      };\n      chrome.runtime.onConnect.addListener(onConnect);\n    });\n  }\n}\n","// This file was generated. Do not modify manually!\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 80, 3, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 343, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 726, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n// This file was generated. Do not modify manually!\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 2, 60, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 42, 9, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 496, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191];\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0897-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c8a\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7cd\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7dc\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n  3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n  5: \"class enum extends super const export import\",\n  6: \"enum\",\n  strict: \"implements interface let package private protected public static yield\",\n  strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords$1 = {\n  5: ecma5AndLessKeywords,\n  \"5module\": ecma5AndLessKeywords + \" export import\",\n  6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n  var pos = 0x10000;\n  for (var i = 0; i < set.length; i += 2) {\n    pos += set[i];\n    if (pos > code) { return false }\n    pos += set[i + 1];\n    if (pos >= code) { return true }\n  }\n  return false\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n  if (code < 65) { return code === 36 }\n  if (code < 91) { return true }\n  if (code < 97) { return code === 95 }\n  if (code < 123) { return true }\n  if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n  if (astral === false) { return false }\n  return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n  if (code < 48) { return code === 36 }\n  if (code < 58) { return true }\n  if (code < 65) { return false }\n  if (code < 91) { return true }\n  if (code < 97) { return code === 95 }\n  if (code < 123) { return true }\n  if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n  if (astral === false) { return false }\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n  if ( conf === void 0 ) conf = {};\n\n  this.label = label;\n  this.keyword = conf.keyword;\n  this.beforeExpr = !!conf.beforeExpr;\n  this.startsExpr = !!conf.startsExpr;\n  this.isLoop = !!conf.isLoop;\n  this.isAssign = !!conf.isAssign;\n  this.prefix = !!conf.prefix;\n  this.postfix = !!conf.postfix;\n  this.binop = conf.binop || null;\n  this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n  return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n  if ( options === void 0 ) options = {};\n\n  options.keyword = name;\n  return keywords[name] = new TokenType(name, options)\n}\n\nvar types$1 = {\n  num: new TokenType(\"num\", startsExpr),\n  regexp: new TokenType(\"regexp\", startsExpr),\n  string: new TokenType(\"string\", startsExpr),\n  name: new TokenType(\"name\", startsExpr),\n  privateId: new TokenType(\"privateId\", startsExpr),\n  eof: new TokenType(\"eof\"),\n\n  // Punctuation token types.\n  bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n  bracketR: new TokenType(\"]\"),\n  braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n  braceR: new TokenType(\"}\"),\n  parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n  parenR: new TokenType(\")\"),\n  comma: new TokenType(\",\", beforeExpr),\n  semi: new TokenType(\";\", beforeExpr),\n  colon: new TokenType(\":\", beforeExpr),\n  dot: new TokenType(\".\"),\n  question: new TokenType(\"?\", beforeExpr),\n  questionDot: new TokenType(\"?.\"),\n  arrow: new TokenType(\"=>\", beforeExpr),\n  template: new TokenType(\"template\"),\n  invalidTemplate: new TokenType(\"invalidTemplate\"),\n  ellipsis: new TokenType(\"...\", beforeExpr),\n  backQuote: new TokenType(\"`\", startsExpr),\n  dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n\n  eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n  assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n  incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n  prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  logicalOR: binop(\"||\", 1),\n  logicalAND: binop(\"&&\", 2),\n  bitwiseOR: binop(\"|\", 3),\n  bitwiseXOR: binop(\"^\", 4),\n  bitwiseAND: binop(\"&\", 5),\n  equality: binop(\"==/!=/===/!==\", 6),\n  relational: binop(\"</>/<=/>=\", 7),\n  bitShift: binop(\"<</>>/>>>\", 8),\n  plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n  modulo: binop(\"%\", 10),\n  star: binop(\"*\", 10),\n  slash: binop(\"/\", 10),\n  starstar: new TokenType(\"**\", {beforeExpr: true}),\n  coalesce: binop(\"??\", 1),\n\n  // Keyword token types.\n  _break: kw(\"break\"),\n  _case: kw(\"case\", beforeExpr),\n  _catch: kw(\"catch\"),\n  _continue: kw(\"continue\"),\n  _debugger: kw(\"debugger\"),\n  _default: kw(\"default\", beforeExpr),\n  _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n  _else: kw(\"else\", beforeExpr),\n  _finally: kw(\"finally\"),\n  _for: kw(\"for\", {isLoop: true}),\n  _function: kw(\"function\", startsExpr),\n  _if: kw(\"if\"),\n  _return: kw(\"return\", beforeExpr),\n  _switch: kw(\"switch\"),\n  _throw: kw(\"throw\", beforeExpr),\n  _try: kw(\"try\"),\n  _var: kw(\"var\"),\n  _const: kw(\"const\"),\n  _while: kw(\"while\", {isLoop: true}),\n  _with: kw(\"with\"),\n  _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n  _this: kw(\"this\", startsExpr),\n  _super: kw(\"super\", startsExpr),\n  _class: kw(\"class\", startsExpr),\n  _extends: kw(\"extends\", beforeExpr),\n  _export: kw(\"export\"),\n  _import: kw(\"import\", startsExpr),\n  _null: kw(\"null\", startsExpr),\n  _true: kw(\"true\", startsExpr),\n  _false: kw(\"false\", startsExpr),\n  _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n  _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n  _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n  return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nfunction nextLineBreak(code, from, end) {\n  if ( end === void 0 ) end = code.length;\n\n  for (var i = from; i < end; i++) {\n    var next = code.charCodeAt(i);\n    if (isNewLine(next))\n      { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n  }\n  return -1\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\nvar hasOwn = Object.hasOwn || (function (obj, propName) { return (\n  hasOwnProperty.call(obj, propName)\n); });\n\nvar isArray = Array.isArray || (function (obj) { return (\n  toString.call(obj) === \"[object Array]\"\n); });\n\nvar regexpCache = Object.create(null);\n\nfunction wordsRegexp(words) {\n  return regexpCache[words] || (regexpCache[words] = new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\"))\n}\n\nfunction codePointToString(code) {\n  // UTF-16 Decoding\n  if (code <= 0xFFFF) { return String.fromCharCode(code) }\n  code -= 0x10000;\n  return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\nvar loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n  this.line = line;\n  this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n  return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n  this.start = start;\n  this.end = end;\n  if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n  for (var line = 1, cur = 0;;) {\n    var nextBreak = nextLineBreak(input, cur, offset);\n    if (nextBreak < 0) { return new Position(line, offset - cur) }\n    ++line;\n    cur = nextBreak;\n  }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n  // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n  // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n  // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n  // (the latest version the library supports). This influences\n  // support for strict mode, the set of reserved words, and support\n  // for new syntax features.\n  ecmaVersion: null,\n  // `sourceType` indicates the mode the code should be parsed in.\n  // Can be either `\"script\"` or `\"module\"`. This influences global\n  // strict mode and parsing of `import` and `export` declarations.\n  sourceType: \"script\",\n  // `onInsertedSemicolon` can be a callback that will be called when\n  // a semicolon is automatically inserted. It will be passed the\n  // position of the inserted semicolon as an offset, and if\n  // `locations` is enabled, it is given the location as a `{line,\n  // column}` object as second argument.\n  onInsertedSemicolon: null,\n  // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n  // trailing commas.\n  onTrailingComma: null,\n  // By default, reserved words are only enforced if ecmaVersion >= 5.\n  // Set `allowReserved` to a boolean value to explicitly turn this on\n  // an off. When this option has the value \"never\", reserved words\n  // and keywords can also not be used as property names.\n  allowReserved: null,\n  // When enabled, a return at the top level is not considered an\n  // error.\n  allowReturnOutsideFunction: false,\n  // When enabled, import/export statements are not constrained to\n  // appearing at the top of the program, and an import.meta expression\n  // in a script isn't considered an error.\n  allowImportExportEverywhere: false,\n  // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n  // When enabled, await identifiers are allowed to appear at the top-level scope,\n  // but they are still not allowed in non-async functions.\n  allowAwaitOutsideFunction: null,\n  // When enabled, super identifiers are not constrained to\n  // appearing in methods and do not raise an error when they appear elsewhere.\n  allowSuperOutsideMethod: null,\n  // When enabled, hashbang directive in the beginning of file is\n  // allowed and treated as a line comment. Enabled by default when\n  // `ecmaVersion` >= 2023.\n  allowHashBang: false,\n  // By default, the parser will verify that private properties are\n  // only used in places where they are valid and have been declared.\n  // Set this to false to turn such checks off.\n  checkPrivateFields: true,\n  // When `locations` is on, `loc` properties holding objects with\n  // `start` and `end` properties in `{line, column}` form (with\n  // line being 1-based and column 0-based) will be attached to the\n  // nodes.\n  locations: false,\n  // A function can be passed as `onToken` option, which will\n  // cause Acorn to call that function with object in the same\n  // format as tokens returned from `tokenizer().getToken()`. Note\n  // that you are not allowed to call the parser from the\n  // callback—that will corrupt its internal state.\n  onToken: null,\n  // A function can be passed as `onComment` option, which will\n  // cause Acorn to call that function with `(block, text, start,\n  // end)` parameters whenever a comment is skipped. `block` is a\n  // boolean indicating whether this is a block (`/* */`) comment,\n  // `text` is the content of the comment, and `start` and `end` are\n  // character offsets that denote the start and end of the comment.\n  // When the `locations` option is on, two more parameters are\n  // passed, the full `{line, column}` locations of the start and\n  // end of the comments. Note that you are not allowed to call the\n  // parser from the callback—that will corrupt its internal state.\n  // When this option has an array as value, objects representing the\n  // comments are pushed to it.\n  onComment: null,\n  // Nodes have their start and end characters offsets recorded in\n  // `start` and `end` properties (directly on the node, rather than\n  // the `loc` object, which holds line/column data. To also add a\n  // [semi-standardized][range] `range` property holding a `[start,\n  // end]` array with the same numbers, set the `ranges` option to\n  // `true`.\n  //\n  // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n  ranges: false,\n  // It is possible to parse multiple files into a single AST by\n  // passing the tree produced by parsing the first file as\n  // `program` option in subsequent parses. This will add the\n  // toplevel forms of the parsed file to the `Program` (top) node\n  // of an existing parse tree.\n  program: null,\n  // When `locations` is on, you can pass this to record the source\n  // file in every node's `loc` object.\n  sourceFile: null,\n  // This value, if given, is stored in every node, whether\n  // `locations` is on or off.\n  directSourceFile: null,\n  // When enabled, parenthesized expressions are represented by\n  // (non-standard) ParenthesizedExpression nodes\n  preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n  var options = {};\n\n  for (var opt in defaultOptions)\n    { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n  if (options.ecmaVersion === \"latest\") {\n    options.ecmaVersion = 1e8;\n  } else if (options.ecmaVersion == null) {\n    if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n      warnedAboutEcmaVersion = true;\n      console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n    }\n    options.ecmaVersion = 11;\n  } else if (options.ecmaVersion >= 2015) {\n    options.ecmaVersion -= 2009;\n  }\n\n  if (options.allowReserved == null)\n    { options.allowReserved = options.ecmaVersion < 5; }\n\n  if (!opts || opts.allowHashBang == null)\n    { options.allowHashBang = options.ecmaVersion >= 14; }\n\n  if (isArray(options.onToken)) {\n    var tokens = options.onToken;\n    options.onToken = function (token) { return tokens.push(token); };\n  }\n  if (isArray(options.onComment))\n    { options.onComment = pushComment(options, options.onComment); }\n\n  return options\n}\n\nfunction pushComment(options, array) {\n  return function(block, text, start, end, startLoc, endLoc) {\n    var comment = {\n      type: block ? \"Block\" : \"Line\",\n      value: text,\n      start: start,\n      end: end\n    };\n    if (options.locations)\n      { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n    if (options.ranges)\n      { comment.range = [start, end]; }\n    array.push(comment);\n  }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n    SCOPE_TOP = 1,\n    SCOPE_FUNCTION = 2,\n    SCOPE_ASYNC = 4,\n    SCOPE_GENERATOR = 8,\n    SCOPE_ARROW = 16,\n    SCOPE_SIMPLE_CATCH = 32,\n    SCOPE_SUPER = 64,\n    SCOPE_DIRECT_SUPER = 128,\n    SCOPE_CLASS_STATIC_BLOCK = 256,\n    SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n  return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n    BIND_NONE = 0, // Not a binding\n    BIND_VAR = 1, // Var-style binding\n    BIND_LEXICAL = 2, // Let- or const-style binding\n    BIND_FUNCTION = 3, // Function declaration\n    BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n    BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n  this.options = options = getOptions(options);\n  this.sourceFile = options.sourceFile;\n  this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n  var reserved = \"\";\n  if (options.allowReserved !== true) {\n    reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n    if (options.sourceType === \"module\") { reserved += \" await\"; }\n  }\n  this.reservedWords = wordsRegexp(reserved);\n  var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n  this.reservedWordsStrict = wordsRegexp(reservedStrict);\n  this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n  this.input = String(input);\n\n  // Used to signal to callers of `readWord1` whether the word\n  // contained any escape sequences. This is needed because words with\n  // escape sequences must not be interpreted as keywords.\n  this.containsEsc = false;\n\n  // Set up token state\n\n  // The current position of the tokenizer in the input.\n  if (startPos) {\n    this.pos = startPos;\n    this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n    this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n  } else {\n    this.pos = this.lineStart = 0;\n    this.curLine = 1;\n  }\n\n  // Properties of the current token:\n  // Its type\n  this.type = types$1.eof;\n  // For tokens that include more information than their type, the value\n  this.value = null;\n  // Its start and end offset\n  this.start = this.end = this.pos;\n  // And, if locations are used, the {line, column} object\n  // corresponding to those offsets\n  this.startLoc = this.endLoc = this.curPosition();\n\n  // Position information for the previous token\n  this.lastTokEndLoc = this.lastTokStartLoc = null;\n  this.lastTokStart = this.lastTokEnd = this.pos;\n\n  // The context stack is used to superficially track syntactic\n  // context to predict whether a regular expression is allowed in a\n  // given position.\n  this.context = this.initialContext();\n  this.exprAllowed = true;\n\n  // Figure out if it's a module code.\n  this.inModule = options.sourceType === \"module\";\n  this.strict = this.inModule || this.strictDirective(this.pos);\n\n  // Used to signify the start of a potential arrow function\n  this.potentialArrowAt = -1;\n  this.potentialArrowInForAwait = false;\n\n  // Positions to delayed-check that yield/await does not exist in default parameters.\n  this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n  // Labels in scope.\n  this.labels = [];\n  // Thus-far undefined exports.\n  this.undefinedExports = Object.create(null);\n\n  // If enabled, skip leading hashbang line.\n  if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n    { this.skipLineComment(2); }\n\n  // Scope tracking for duplicate variable names (see scope.js)\n  this.scopeStack = [];\n  this.enterScope(SCOPE_TOP);\n\n  // For RegExp validation\n  this.regexpState = null;\n\n  // The stack of private names.\n  // Each element has two properties: 'declared' and 'used'.\n  // When it exited from the outermost class definition, all used private names must be declared.\n  this.privateNameStack = [];\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n  var node = this.options.program || this.startNode();\n  this.nextToken();\n  return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.canAwait.get = function () {\n  for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n    var scope = this.scopeStack[i];\n    if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n    if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n  }\n  return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\n\nprototypeAccessors.allowSuper.get = function () {\n  var ref = this.currentThisScope();\n    var flags = ref.flags;\n    var inClassFieldInit = ref.inClassFieldInit;\n  return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n};\n\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\nprototypeAccessors.allowNewDotTarget.get = function () {\n  var ref = this.currentThisScope();\n    var flags = ref.flags;\n    var inClassFieldInit = ref.inClassFieldInit;\n  return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n};\n\nprototypeAccessors.inClassStaticBlock.get = function () {\n  return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n    var plugins = [], len = arguments.length;\n    while ( len-- ) plugins[ len ] = arguments[ len ];\n\n  var cls = this;\n  for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n  return cls\n};\n\nParser.parse = function parse (input, options) {\n  return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n  var parser = new this(options, input, pos);\n  parser.nextToken();\n  return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n  return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp$9 = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\[^]|[^'\\\\])*?)'|\"((?:\\\\[^]|[^\"\\\\])*?)\")/;\npp$9.strictDirective = function(start) {\n  if (this.options.ecmaVersion < 5) { return false }\n  for (;;) {\n    // Try to find string literal.\n    skipWhiteSpace.lastIndex = start;\n    start += skipWhiteSpace.exec(this.input)[0].length;\n    var match = literal.exec(this.input.slice(start));\n    if (!match) { return false }\n    if ((match[1] || match[2]) === \"use strict\") {\n      skipWhiteSpace.lastIndex = start + match[0].length;\n      var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n      var next = this.input.charAt(end);\n      return next === \";\" || next === \"}\" ||\n        (lineBreak.test(spaceAfter[0]) &&\n         !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n    }\n    start += match[0].length;\n\n    // Skip semicolon, if any.\n    skipWhiteSpace.lastIndex = start;\n    start += skipWhiteSpace.exec(this.input)[0].length;\n    if (this.input[start] === \";\")\n      { start++; }\n  }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp$9.eat = function(type) {\n  if (this.type === type) {\n    this.next();\n    return true\n  } else {\n    return false\n  }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp$9.isContextual = function(name) {\n  return this.type === types$1.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp$9.eatContextual = function(name) {\n  if (!this.isContextual(name)) { return false }\n  this.next();\n  return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp$9.expectContextual = function(name) {\n  if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp$9.canInsertSemicolon = function() {\n  return this.type === types$1.eof ||\n    this.type === types$1.braceR ||\n    lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp$9.insertSemicolon = function() {\n  if (this.canInsertSemicolon()) {\n    if (this.options.onInsertedSemicolon)\n      { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n    return true\n  }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp$9.semicolon = function() {\n  if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp$9.afterTrailingComma = function(tokType, notNext) {\n  if (this.type === tokType) {\n    if (this.options.onTrailingComma)\n      { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n    if (!notNext)\n      { this.next(); }\n    return true\n  }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp$9.expect = function(type) {\n  this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp$9.unexpected = function(pos) {\n  this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nvar DestructuringErrors = function DestructuringErrors() {\n  this.shorthandAssign =\n  this.trailingComma =\n  this.parenthesizedAssign =\n  this.parenthesizedBind =\n  this.doubleProto =\n    -1;\n};\n\npp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n  if (!refDestructuringErrors) { return }\n  if (refDestructuringErrors.trailingComma > -1)\n    { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n  var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n  if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n};\n\npp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n  if (!refDestructuringErrors) { return false }\n  var shorthandAssign = refDestructuringErrors.shorthandAssign;\n  var doubleProto = refDestructuringErrors.doubleProto;\n  if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n  if (shorthandAssign >= 0)\n    { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n  if (doubleProto >= 0)\n    { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp$9.checkYieldAwaitInDefaultParams = function() {\n  if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n    { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n  if (this.awaitPos)\n    { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp$9.isSimpleAssignTarget = function(expr) {\n  if (expr.type === \"ParenthesizedExpression\")\n    { return this.isSimpleAssignTarget(expr.expression) }\n  return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$8 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node.  Optionally takes a\n// `program` argument.  If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$8.parseTopLevel = function(node) {\n  var exports = Object.create(null);\n  if (!node.body) { node.body = []; }\n  while (this.type !== types$1.eof) {\n    var stmt = this.parseStatement(null, true, exports);\n    node.body.push(stmt);\n  }\n  if (this.inModule)\n    { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n      {\n        var name = list[i];\n\n        this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n      } }\n  this.adaptDirectivePrologue(node.body);\n  this.next();\n  node.sourceType = this.options.sourceType;\n  return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$8.isLet = function(context) {\n  if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n  skipWhiteSpace.lastIndex = this.pos;\n  var skip = skipWhiteSpace.exec(this.input);\n  var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n  // For ambiguous cases, determine if a LexicalDeclaration (or only a\n  // Statement) is allowed here. If context is not empty then only a Statement\n  // is allowed. However, `let [` is an explicit negative lookahead for\n  // ExpressionStatement, so special-case it first.\n  if (nextCh === 91 || nextCh === 92) { return true } // '[', '\\'\n  if (context) { return false }\n\n  if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n  if (isIdentifierStart(nextCh, true)) {\n    var pos = next + 1;\n    while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n    if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n    var ident = this.input.slice(next, pos);\n    if (!keywordRelationalOperator.test(ident)) { return true }\n  }\n  return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$8.isAsyncFunction = function() {\n  if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n    { return false }\n\n  skipWhiteSpace.lastIndex = this.pos;\n  var skip = skipWhiteSpace.exec(this.input);\n  var next = this.pos + skip[0].length, after;\n  return !lineBreak.test(this.input.slice(this.pos, next)) &&\n    this.input.slice(next, next + 8) === \"function\" &&\n    (next + 8 === this.input.length ||\n     !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$8.parseStatement = function(context, topLevel, exports) {\n  var starttype = this.type, node = this.startNode(), kind;\n\n  if (this.isLet(context)) {\n    starttype = types$1._var;\n    kind = \"let\";\n  }\n\n  // Most types of statements are recognized by the keyword they\n  // start with. Many are trivial to parse, some require a bit of\n  // complexity.\n\n  switch (starttype) {\n  case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n  case types$1._debugger: return this.parseDebuggerStatement(node)\n  case types$1._do: return this.parseDoStatement(node)\n  case types$1._for: return this.parseForStatement(node)\n  case types$1._function:\n    // Function as sole body of either an if statement or a labeled statement\n    // works, but not when it is part of a labeled statement that is the sole\n    // body of an if statement.\n    if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n    return this.parseFunctionStatement(node, false, !context)\n  case types$1._class:\n    if (context) { this.unexpected(); }\n    return this.parseClass(node, true)\n  case types$1._if: return this.parseIfStatement(node)\n  case types$1._return: return this.parseReturnStatement(node)\n  case types$1._switch: return this.parseSwitchStatement(node)\n  case types$1._throw: return this.parseThrowStatement(node)\n  case types$1._try: return this.parseTryStatement(node)\n  case types$1._const: case types$1._var:\n    kind = kind || this.value;\n    if (context && kind !== \"var\") { this.unexpected(); }\n    return this.parseVarStatement(node, kind)\n  case types$1._while: return this.parseWhileStatement(node)\n  case types$1._with: return this.parseWithStatement(node)\n  case types$1.braceL: return this.parseBlock(true, node)\n  case types$1.semi: return this.parseEmptyStatement(node)\n  case types$1._export:\n  case types$1._import:\n    if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n      skipWhiteSpace.lastIndex = this.pos;\n      var skip = skipWhiteSpace.exec(this.input);\n      var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n      if (nextCh === 40 || nextCh === 46) // '(' or '.'\n        { return this.parseExpressionStatement(node, this.parseExpression()) }\n    }\n\n    if (!this.options.allowImportExportEverywhere) {\n      if (!topLevel)\n        { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n      if (!this.inModule)\n        { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n    }\n    return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n    // If the statement does not start with a statement keyword or a\n    // brace, it's an ExpressionStatement or LabeledStatement. We\n    // simply start parsing an expression, and afterwards, if the\n    // next token is a colon and the expression was a simple\n    // Identifier node, we switch to interpreting it as a label.\n  default:\n    if (this.isAsyncFunction()) {\n      if (context) { this.unexpected(); }\n      this.next();\n      return this.parseFunctionStatement(node, true, !context)\n    }\n\n    var maybeName = this.value, expr = this.parseExpression();\n    if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n      { return this.parseLabeledStatement(node, maybeName, expr, context) }\n    else { return this.parseExpressionStatement(node, expr) }\n  }\n};\n\npp$8.parseBreakContinueStatement = function(node, keyword) {\n  var isBreak = keyword === \"break\";\n  this.next();\n  if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n  else if (this.type !== types$1.name) { this.unexpected(); }\n  else {\n    node.label = this.parseIdent();\n    this.semicolon();\n  }\n\n  // Verify that there is an actual destination to break or\n  // continue to.\n  var i = 0;\n  for (; i < this.labels.length; ++i) {\n    var lab = this.labels[i];\n    if (node.label == null || lab.name === node.label.name) {\n      if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n      if (node.label && isBreak) { break }\n    }\n  }\n  if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n  return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$8.parseDebuggerStatement = function(node) {\n  this.next();\n  this.semicolon();\n  return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$8.parseDoStatement = function(node) {\n  this.next();\n  this.labels.push(loopLabel);\n  node.body = this.parseStatement(\"do\");\n  this.labels.pop();\n  this.expect(types$1._while);\n  node.test = this.parseParenExpression();\n  if (this.options.ecmaVersion >= 6)\n    { this.eat(types$1.semi); }\n  else\n    { this.semicolon(); }\n  return this.finishNode(node, \"DoWhileStatement\")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$8.parseForStatement = function(node) {\n  this.next();\n  var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n  this.labels.push(loopLabel);\n  this.enterScope(0);\n  this.expect(types$1.parenL);\n  if (this.type === types$1.semi) {\n    if (awaitAt > -1) { this.unexpected(awaitAt); }\n    return this.parseFor(node, null)\n  }\n  var isLet = this.isLet();\n  if (this.type === types$1._var || this.type === types$1._const || isLet) {\n    var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n    this.next();\n    this.parseVar(init$1, true, kind);\n    this.finishNode(init$1, \"VariableDeclaration\");\n    if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n      if (this.options.ecmaVersion >= 9) {\n        if (this.type === types$1._in) {\n          if (awaitAt > -1) { this.unexpected(awaitAt); }\n        } else { node.await = awaitAt > -1; }\n      }\n      return this.parseForIn(node, init$1)\n    }\n    if (awaitAt > -1) { this.unexpected(awaitAt); }\n    return this.parseFor(node, init$1)\n  }\n  var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n  var containsEsc = this.containsEsc;\n  var refDestructuringErrors = new DestructuringErrors;\n  var initPos = this.start;\n  var init = awaitAt > -1\n    ? this.parseExprSubscripts(refDestructuringErrors, \"await\")\n    : this.parseExpression(true, refDestructuringErrors);\n  if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n    if (awaitAt > -1) { // implies `ecmaVersion >= 9` (see declaration of awaitAt)\n      if (this.type === types$1._in) { this.unexpected(awaitAt); }\n      node.await = true;\n    } else if (isForOf && this.options.ecmaVersion >= 8) {\n      if (init.start === initPos && !containsEsc && init.type === \"Identifier\" && init.name === \"async\") { this.unexpected(); }\n      else if (this.options.ecmaVersion >= 9) { node.await = false; }\n    }\n    if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n    this.toAssignable(init, false, refDestructuringErrors);\n    this.checkLValPattern(init);\n    return this.parseForIn(node, init)\n  } else {\n    this.checkExpressionErrors(refDestructuringErrors, true);\n  }\n  if (awaitAt > -1) { this.unexpected(awaitAt); }\n  return this.parseFor(node, init)\n};\n\npp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n  this.next();\n  return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$8.parseIfStatement = function(node) {\n  this.next();\n  node.test = this.parseParenExpression();\n  // allow function declarations in branches, but only in non-strict mode\n  node.consequent = this.parseStatement(\"if\");\n  node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n  return this.finishNode(node, \"IfStatement\")\n};\n\npp$8.parseReturnStatement = function(node) {\n  if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n    { this.raise(this.start, \"'return' outside of function\"); }\n  this.next();\n\n  // In `return` (and `break`/`continue`), the keywords with\n  // optional arguments, we eagerly look for a semicolon or the\n  // possibility to insert one.\n\n  if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n  else { node.argument = this.parseExpression(); this.semicolon(); }\n  return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$8.parseSwitchStatement = function(node) {\n  this.next();\n  node.discriminant = this.parseParenExpression();\n  node.cases = [];\n  this.expect(types$1.braceL);\n  this.labels.push(switchLabel);\n  this.enterScope(0);\n\n  // Statements under must be grouped (by label) in SwitchCase\n  // nodes. `cur` is used to keep the node that we are currently\n  // adding statements to.\n\n  var cur;\n  for (var sawDefault = false; this.type !== types$1.braceR;) {\n    if (this.type === types$1._case || this.type === types$1._default) {\n      var isCase = this.type === types$1._case;\n      if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n      node.cases.push(cur = this.startNode());\n      cur.consequent = [];\n      this.next();\n      if (isCase) {\n        cur.test = this.parseExpression();\n      } else {\n        if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n        sawDefault = true;\n        cur.test = null;\n      }\n      this.expect(types$1.colon);\n    } else {\n      if (!cur) { this.unexpected(); }\n      cur.consequent.push(this.parseStatement(null));\n    }\n  }\n  this.exitScope();\n  if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n  this.next(); // Closing brace\n  this.labels.pop();\n  return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$8.parseThrowStatement = function(node) {\n  this.next();\n  if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n    { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n  node.argument = this.parseExpression();\n  this.semicolon();\n  return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty$1 = [];\n\npp$8.parseCatchClauseParam = function() {\n  var param = this.parseBindingAtom();\n  var simple = param.type === \"Identifier\";\n  this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n  this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n  this.expect(types$1.parenR);\n\n  return param\n};\n\npp$8.parseTryStatement = function(node) {\n  this.next();\n  node.block = this.parseBlock();\n  node.handler = null;\n  if (this.type === types$1._catch) {\n    var clause = this.startNode();\n    this.next();\n    if (this.eat(types$1.parenL)) {\n      clause.param = this.parseCatchClauseParam();\n    } else {\n      if (this.options.ecmaVersion < 10) { this.unexpected(); }\n      clause.param = null;\n      this.enterScope(0);\n    }\n    clause.body = this.parseBlock(false);\n    this.exitScope();\n    node.handler = this.finishNode(clause, \"CatchClause\");\n  }\n  node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n  if (!node.handler && !node.finalizer)\n    { this.raise(node.start, \"Missing catch or finally clause\"); }\n  return this.finishNode(node, \"TryStatement\")\n};\n\npp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n  this.next();\n  this.parseVar(node, false, kind, allowMissingInitializer);\n  this.semicolon();\n  return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$8.parseWhileStatement = function(node) {\n  this.next();\n  node.test = this.parseParenExpression();\n  this.labels.push(loopLabel);\n  node.body = this.parseStatement(\"while\");\n  this.labels.pop();\n  return this.finishNode(node, \"WhileStatement\")\n};\n\npp$8.parseWithStatement = function(node) {\n  if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n  this.next();\n  node.object = this.parseParenExpression();\n  node.body = this.parseStatement(\"with\");\n  return this.finishNode(node, \"WithStatement\")\n};\n\npp$8.parseEmptyStatement = function(node) {\n  this.next();\n  return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n  for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n    {\n    var label = list[i$1];\n\n    if (label.name === maybeName)\n      { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n  } }\n  var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n  for (var i = this.labels.length - 1; i >= 0; i--) {\n    var label$1 = this.labels[i];\n    if (label$1.statementStart === node.start) {\n      // Update information about previous labels on this node\n      label$1.statementStart = this.start;\n      label$1.kind = kind;\n    } else { break }\n  }\n  this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n  node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n  this.labels.pop();\n  node.label = expr;\n  return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$8.parseExpressionStatement = function(node, expr) {\n  node.expression = expr;\n  this.semicolon();\n  return this.finishNode(node, \"ExpressionStatement\")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n  if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n  if ( node === void 0 ) node = this.startNode();\n\n  node.body = [];\n  this.expect(types$1.braceL);\n  if (createNewLexicalScope) { this.enterScope(0); }\n  while (this.type !== types$1.braceR) {\n    var stmt = this.parseStatement(null);\n    node.body.push(stmt);\n  }\n  if (exitStrict) { this.strict = false; }\n  this.next();\n  if (createNewLexicalScope) { this.exitScope(); }\n  return this.finishNode(node, \"BlockStatement\")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$8.parseFor = function(node, init) {\n  node.init = init;\n  this.expect(types$1.semi);\n  node.test = this.type === types$1.semi ? null : this.parseExpression();\n  this.expect(types$1.semi);\n  node.update = this.type === types$1.parenR ? null : this.parseExpression();\n  this.expect(types$1.parenR);\n  node.body = this.parseStatement(\"for\");\n  this.exitScope();\n  this.labels.pop();\n  return this.finishNode(node, \"ForStatement\")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp$8.parseForIn = function(node, init) {\n  var isForIn = this.type === types$1._in;\n  this.next();\n\n  if (\n    init.type === \"VariableDeclaration\" &&\n    init.declarations[0].init != null &&\n    (\n      !isForIn ||\n      this.options.ecmaVersion < 8 ||\n      this.strict ||\n      init.kind !== \"var\" ||\n      init.declarations[0].id.type !== \"Identifier\"\n    )\n  ) {\n    this.raise(\n      init.start,\n      ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n    );\n  }\n  node.left = init;\n  node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n  this.expect(types$1.parenR);\n  node.body = this.parseStatement(\"for\");\n  this.exitScope();\n  this.labels.pop();\n  return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n  node.declarations = [];\n  node.kind = kind;\n  for (;;) {\n    var decl = this.startNode();\n    this.parseVarId(decl, kind);\n    if (this.eat(types$1.eq)) {\n      decl.init = this.parseMaybeAssign(isFor);\n    } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n      this.unexpected();\n    } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n      this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n    } else {\n      decl.init = null;\n    }\n    node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n    if (!this.eat(types$1.comma)) { break }\n  }\n  return node\n};\n\npp$8.parseVarId = function(decl, kind) {\n  decl.id = this.parseBindingAtom();\n  this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n  this.initFunction(node);\n  if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n    if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n      { this.unexpected(); }\n    node.generator = this.eat(types$1.star);\n  }\n  if (this.options.ecmaVersion >= 8)\n    { node.async = !!isAsync; }\n\n  if (statement & FUNC_STATEMENT) {\n    node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n    if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n      // If it is a regular function declaration in sloppy mode, then it is\n      // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n      // mode depends on properties of the current scope (see\n      // treatFunctionsAsVar).\n      { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n  }\n\n  var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.awaitIdentPos = 0;\n  this.enterScope(functionFlags(node.async, node.generator));\n\n  if (!(statement & FUNC_STATEMENT))\n    { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n  this.parseFunctionParams(node);\n  this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  this.awaitIdentPos = oldAwaitIdentPos;\n  return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$8.parseFunctionParams = function(node) {\n  this.expect(types$1.parenL);\n  node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n  this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$8.parseClass = function(node, isStatement) {\n  this.next();\n\n  // ecma-262 14.6 Class Definitions\n  // A class definition is always strict mode code.\n  var oldStrict = this.strict;\n  this.strict = true;\n\n  this.parseClassId(node, isStatement);\n  this.parseClassSuper(node);\n  var privateNameMap = this.enterClassBody();\n  var classBody = this.startNode();\n  var hadConstructor = false;\n  classBody.body = [];\n  this.expect(types$1.braceL);\n  while (this.type !== types$1.braceR) {\n    var element = this.parseClassElement(node.superClass !== null);\n    if (element) {\n      classBody.body.push(element);\n      if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n        if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n        hadConstructor = true;\n      } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n        this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n      }\n    }\n  }\n  this.strict = oldStrict;\n  this.next();\n  node.body = this.finishNode(classBody, \"ClassBody\");\n  this.exitClassBody();\n  return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$8.parseClassElement = function(constructorAllowsSuper) {\n  if (this.eat(types$1.semi)) { return null }\n\n  var ecmaVersion = this.options.ecmaVersion;\n  var node = this.startNode();\n  var keyName = \"\";\n  var isGenerator = false;\n  var isAsync = false;\n  var kind = \"method\";\n  var isStatic = false;\n\n  if (this.eatContextual(\"static\")) {\n    // Parse static init block\n    if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n      this.parseClassStaticBlock(node);\n      return node\n    }\n    if (this.isClassElementNameStart() || this.type === types$1.star) {\n      isStatic = true;\n    } else {\n      keyName = \"static\";\n    }\n  }\n  node.static = isStatic;\n  if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n    if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n      isAsync = true;\n    } else {\n      keyName = \"async\";\n    }\n  }\n  if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n    isGenerator = true;\n  }\n  if (!keyName && !isAsync && !isGenerator) {\n    var lastValue = this.value;\n    if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n      if (this.isClassElementNameStart()) {\n        kind = lastValue;\n      } else {\n        keyName = lastValue;\n      }\n    }\n  }\n\n  // Parse element name\n  if (keyName) {\n    // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n    // The last token is any of those. Make it the element name.\n    node.computed = false;\n    node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n    node.key.name = keyName;\n    this.finishNode(node.key, \"Identifier\");\n  } else {\n    this.parseClassElementName(node);\n  }\n\n  // Parse element value\n  if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n    var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n    var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n    // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n    if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n    node.kind = isConstructor ? \"constructor\" : kind;\n    this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n  } else {\n    this.parseClassField(node);\n  }\n\n  return node\n};\n\npp$8.isClassElementNameStart = function() {\n  return (\n    this.type === types$1.name ||\n    this.type === types$1.privateId ||\n    this.type === types$1.num ||\n    this.type === types$1.string ||\n    this.type === types$1.bracketL ||\n    this.type.keyword\n  )\n};\n\npp$8.parseClassElementName = function(element) {\n  if (this.type === types$1.privateId) {\n    if (this.value === \"constructor\") {\n      this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n    }\n    element.computed = false;\n    element.key = this.parsePrivateIdent();\n  } else {\n    this.parsePropertyName(element);\n  }\n};\n\npp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n  // Check key and flags\n  var key = method.key;\n  if (method.kind === \"constructor\") {\n    if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n    if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n  } else if (method.static && checkKeyName(method, \"prototype\")) {\n    this.raise(key.start, \"Classes may not have a static property named prototype\");\n  }\n\n  // Parse value\n  var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n  // Check value\n  if (method.kind === \"get\" && value.params.length !== 0)\n    { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n  if (method.kind === \"set\" && value.params.length !== 1)\n    { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n  if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n    { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n  return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$8.parseClassField = function(field) {\n  if (checkKeyName(field, \"constructor\")) {\n    this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n  } else if (field.static && checkKeyName(field, \"prototype\")) {\n    this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n  }\n\n  if (this.eat(types$1.eq)) {\n    // To raise SyntaxError if 'arguments' exists in the initializer.\n    var scope = this.currentThisScope();\n    var inClassFieldInit = scope.inClassFieldInit;\n    scope.inClassFieldInit = true;\n    field.value = this.parseMaybeAssign();\n    scope.inClassFieldInit = inClassFieldInit;\n  } else {\n    field.value = null;\n  }\n  this.semicolon();\n\n  return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$8.parseClassStaticBlock = function(node) {\n  node.body = [];\n\n  var oldLabels = this.labels;\n  this.labels = [];\n  this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n  while (this.type !== types$1.braceR) {\n    var stmt = this.parseStatement(null);\n    node.body.push(stmt);\n  }\n  this.next();\n  this.exitScope();\n  this.labels = oldLabels;\n\n  return this.finishNode(node, \"StaticBlock\")\n};\n\npp$8.parseClassId = function(node, isStatement) {\n  if (this.type === types$1.name) {\n    node.id = this.parseIdent();\n    if (isStatement)\n      { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n  } else {\n    if (isStatement === true)\n      { this.unexpected(); }\n    node.id = null;\n  }\n};\n\npp$8.parseClassSuper = function(node) {\n  node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n\npp$8.enterClassBody = function() {\n  var element = {declared: Object.create(null), used: []};\n  this.privateNameStack.push(element);\n  return element.declared\n};\n\npp$8.exitClassBody = function() {\n  var ref = this.privateNameStack.pop();\n  var declared = ref.declared;\n  var used = ref.used;\n  if (!this.options.checkPrivateFields) { return }\n  var len = this.privateNameStack.length;\n  var parent = len === 0 ? null : this.privateNameStack[len - 1];\n  for (var i = 0; i < used.length; ++i) {\n    var id = used[i];\n    if (!hasOwn(declared, id.name)) {\n      if (parent) {\n        parent.used.push(id);\n      } else {\n        this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n      }\n    }\n  }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n  var name = element.key.name;\n  var curr = privateNameMap[name];\n\n  var next = \"true\";\n  if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n    next = (element.static ? \"s\" : \"i\") + element.kind;\n  }\n\n  // `class { get #a(){}; static set #a(_){} }` is also conflict.\n  if (\n    curr === \"iget\" && next === \"iset\" ||\n    curr === \"iset\" && next === \"iget\" ||\n    curr === \"sget\" && next === \"sset\" ||\n    curr === \"sset\" && next === \"sget\"\n  ) {\n    privateNameMap[name] = \"true\";\n    return false\n  } else if (!curr) {\n    privateNameMap[name] = next;\n    return false\n  } else {\n    return true\n  }\n}\n\nfunction checkKeyName(node, name) {\n  var computed = node.computed;\n  var key = node.key;\n  return !computed && (\n    key.type === \"Identifier\" && key.name === name ||\n    key.type === \"Literal\" && key.value === name\n  )\n}\n\n// Parses module export declaration.\n\npp$8.parseExportAllDeclaration = function(node, exports) {\n  if (this.options.ecmaVersion >= 11) {\n    if (this.eatContextual(\"as\")) {\n      node.exported = this.parseModuleExportName();\n      this.checkExport(exports, node.exported, this.lastTokStart);\n    } else {\n      node.exported = null;\n    }\n  }\n  this.expectContextual(\"from\");\n  if (this.type !== types$1.string) { this.unexpected(); }\n  node.source = this.parseExprAtom();\n  if (this.options.ecmaVersion >= 16)\n    { node.attributes = this.parseWithClause(); }\n  this.semicolon();\n  return this.finishNode(node, \"ExportAllDeclaration\")\n};\n\npp$8.parseExport = function(node, exports) {\n  this.next();\n  // export * from '...'\n  if (this.eat(types$1.star)) {\n    return this.parseExportAllDeclaration(node, exports)\n  }\n  if (this.eat(types$1._default)) { // export default ...\n    this.checkExport(exports, \"default\", this.lastTokStart);\n    node.declaration = this.parseExportDefaultDeclaration();\n    return this.finishNode(node, \"ExportDefaultDeclaration\")\n  }\n  // export var|const|let|function|class ...\n  if (this.shouldParseExportStatement()) {\n    node.declaration = this.parseExportDeclaration(node);\n    if (node.declaration.type === \"VariableDeclaration\")\n      { this.checkVariableExport(exports, node.declaration.declarations); }\n    else\n      { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n    node.specifiers = [];\n    node.source = null;\n  } else { // export { x, y as z } [from '...']\n    node.declaration = null;\n    node.specifiers = this.parseExportSpecifiers(exports);\n    if (this.eatContextual(\"from\")) {\n      if (this.type !== types$1.string) { this.unexpected(); }\n      node.source = this.parseExprAtom();\n      if (this.options.ecmaVersion >= 16)\n        { node.attributes = this.parseWithClause(); }\n    } else {\n      for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n        // check for keywords used as local names\n        var spec = list[i];\n\n        this.checkUnreserved(spec.local);\n        // check if export is defined\n        this.checkLocalExport(spec.local);\n\n        if (spec.local.type === \"Literal\") {\n          this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n        }\n      }\n\n      node.source = null;\n    }\n    this.semicolon();\n  }\n  return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$8.parseExportDeclaration = function(node) {\n  return this.parseStatement(null)\n};\n\npp$8.parseExportDefaultDeclaration = function() {\n  var isAsync;\n  if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n    var fNode = this.startNode();\n    this.next();\n    if (isAsync) { this.next(); }\n    return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n  } else if (this.type === types$1._class) {\n    var cNode = this.startNode();\n    return this.parseClass(cNode, \"nullableID\")\n  } else {\n    var declaration = this.parseMaybeAssign();\n    this.semicolon();\n    return declaration\n  }\n};\n\npp$8.checkExport = function(exports, name, pos) {\n  if (!exports) { return }\n  if (typeof name !== \"string\")\n    { name = name.type === \"Identifier\" ? name.name : name.value; }\n  if (hasOwn(exports, name))\n    { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n  exports[name] = true;\n};\n\npp$8.checkPatternExport = function(exports, pat) {\n  var type = pat.type;\n  if (type === \"Identifier\")\n    { this.checkExport(exports, pat, pat.start); }\n  else if (type === \"ObjectPattern\")\n    { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n      {\n        var prop = list[i];\n\n        this.checkPatternExport(exports, prop);\n      } }\n  else if (type === \"ArrayPattern\")\n    { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n      var elt = list$1[i$1];\n\n        if (elt) { this.checkPatternExport(exports, elt); }\n    } }\n  else if (type === \"Property\")\n    { this.checkPatternExport(exports, pat.value); }\n  else if (type === \"AssignmentPattern\")\n    { this.checkPatternExport(exports, pat.left); }\n  else if (type === \"RestElement\")\n    { this.checkPatternExport(exports, pat.argument); }\n};\n\npp$8.checkVariableExport = function(exports, decls) {\n  if (!exports) { return }\n  for (var i = 0, list = decls; i < list.length; i += 1)\n    {\n    var decl = list[i];\n\n    this.checkPatternExport(exports, decl.id);\n  }\n};\n\npp$8.shouldParseExportStatement = function() {\n  return this.type.keyword === \"var\" ||\n    this.type.keyword === \"const\" ||\n    this.type.keyword === \"class\" ||\n    this.type.keyword === \"function\" ||\n    this.isLet() ||\n    this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$8.parseExportSpecifier = function(exports) {\n  var node = this.startNode();\n  node.local = this.parseModuleExportName();\n\n  node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n  this.checkExport(\n    exports,\n    node.exported,\n    node.exported.start\n  );\n\n  return this.finishNode(node, \"ExportSpecifier\")\n};\n\npp$8.parseExportSpecifiers = function(exports) {\n  var nodes = [], first = true;\n  // export { x, y as z } [from '...']\n  this.expect(types$1.braceL);\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    nodes.push(this.parseExportSpecifier(exports));\n  }\n  return nodes\n};\n\n// Parses import declaration.\n\npp$8.parseImport = function(node) {\n  this.next();\n\n  // import '...'\n  if (this.type === types$1.string) {\n    node.specifiers = empty$1;\n    node.source = this.parseExprAtom();\n  } else {\n    node.specifiers = this.parseImportSpecifiers();\n    this.expectContextual(\"from\");\n    node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n  }\n  if (this.options.ecmaVersion >= 16)\n    { node.attributes = this.parseWithClause(); }\n  this.semicolon();\n  return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$8.parseImportSpecifier = function() {\n  var node = this.startNode();\n  node.imported = this.parseModuleExportName();\n\n  if (this.eatContextual(\"as\")) {\n    node.local = this.parseIdent();\n  } else {\n    this.checkUnreserved(node.imported);\n    node.local = node.imported;\n  }\n  this.checkLValSimple(node.local, BIND_LEXICAL);\n\n  return this.finishNode(node, \"ImportSpecifier\")\n};\n\npp$8.parseImportDefaultSpecifier = function() {\n  // import defaultObj, { x, y as z } from '...'\n  var node = this.startNode();\n  node.local = this.parseIdent();\n  this.checkLValSimple(node.local, BIND_LEXICAL);\n  return this.finishNode(node, \"ImportDefaultSpecifier\")\n};\n\npp$8.parseImportNamespaceSpecifier = function() {\n  var node = this.startNode();\n  this.next();\n  this.expectContextual(\"as\");\n  node.local = this.parseIdent();\n  this.checkLValSimple(node.local, BIND_LEXICAL);\n  return this.finishNode(node, \"ImportNamespaceSpecifier\")\n};\n\npp$8.parseImportSpecifiers = function() {\n  var nodes = [], first = true;\n  if (this.type === types$1.name) {\n    nodes.push(this.parseImportDefaultSpecifier());\n    if (!this.eat(types$1.comma)) { return nodes }\n  }\n  if (this.type === types$1.star) {\n    nodes.push(this.parseImportNamespaceSpecifier());\n    return nodes\n  }\n  this.expect(types$1.braceL);\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    nodes.push(this.parseImportSpecifier());\n  }\n  return nodes\n};\n\npp$8.parseWithClause = function() {\n  var nodes = [];\n  if (!this.eat(types$1._with)) {\n    return nodes\n  }\n  this.expect(types$1.braceL);\n  var attributeKeys = {};\n  var first = true;\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    var attr = this.parseImportAttribute();\n    var keyName = attr.key.type === \"Identifier\" ? attr.key.name : attr.key.value;\n    if (hasOwn(attributeKeys, keyName))\n      { this.raiseRecoverable(attr.key.start, \"Duplicate attribute key '\" + keyName + \"'\"); }\n    attributeKeys[keyName] = true;\n    nodes.push(attr);\n  }\n  return nodes\n};\n\npp$8.parseImportAttribute = function() {\n  var node = this.startNode();\n  node.key = this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\");\n  this.expect(types$1.colon);\n  if (this.type !== types$1.string) {\n    this.unexpected();\n  }\n  node.value = this.parseExprAtom();\n  return this.finishNode(node, \"ImportAttribute\")\n};\n\npp$8.parseModuleExportName = function() {\n  if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n    var stringLiteral = this.parseLiteral(this.value);\n    if (loneSurrogate.test(stringLiteral.value)) {\n      this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n    }\n    return stringLiteral\n  }\n  return this.parseIdent(true)\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$8.adaptDirectivePrologue = function(statements) {\n  for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n    statements[i].directive = statements[i].expression.raw.slice(1, -1);\n  }\n};\npp$8.isDirectiveCandidate = function(statement) {\n  return (\n    this.options.ecmaVersion >= 5 &&\n    statement.type === \"ExpressionStatement\" &&\n    statement.expression.type === \"Literal\" &&\n    typeof statement.expression.value === \"string\" &&\n    // Reject parenthesized strings.\n    (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n  )\n};\n\nvar pp$7 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n  if (this.options.ecmaVersion >= 6 && node) {\n    switch (node.type) {\n    case \"Identifier\":\n      if (this.inAsync && node.name === \"await\")\n        { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n      break\n\n    case \"ObjectPattern\":\n    case \"ArrayPattern\":\n    case \"AssignmentPattern\":\n    case \"RestElement\":\n      break\n\n    case \"ObjectExpression\":\n      node.type = \"ObjectPattern\";\n      if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n      for (var i = 0, list = node.properties; i < list.length; i += 1) {\n        var prop = list[i];\n\n      this.toAssignable(prop, isBinding);\n        // Early error:\n        //   AssignmentRestProperty[Yield, Await] :\n        //     `...` DestructuringAssignmentTarget[Yield, Await]\n        //\n        //   It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n        if (\n          prop.type === \"RestElement\" &&\n          (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n        ) {\n          this.raise(prop.argument.start, \"Unexpected token\");\n        }\n      }\n      break\n\n    case \"Property\":\n      // AssignmentProperty has type === \"Property\"\n      if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n      this.toAssignable(node.value, isBinding);\n      break\n\n    case \"ArrayExpression\":\n      node.type = \"ArrayPattern\";\n      if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n      this.toAssignableList(node.elements, isBinding);\n      break\n\n    case \"SpreadElement\":\n      node.type = \"RestElement\";\n      this.toAssignable(node.argument, isBinding);\n      if (node.argument.type === \"AssignmentPattern\")\n        { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n      break\n\n    case \"AssignmentExpression\":\n      if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n      node.type = \"AssignmentPattern\";\n      delete node.operator;\n      this.toAssignable(node.left, isBinding);\n      break\n\n    case \"ParenthesizedExpression\":\n      this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n      break\n\n    case \"ChainExpression\":\n      this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n      break\n\n    case \"MemberExpression\":\n      if (!isBinding) { break }\n\n    default:\n      this.raise(node.start, \"Assigning to rvalue\");\n    }\n  } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n  return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$7.toAssignableList = function(exprList, isBinding) {\n  var end = exprList.length;\n  for (var i = 0; i < end; i++) {\n    var elt = exprList[i];\n    if (elt) { this.toAssignable(elt, isBinding); }\n  }\n  if (end) {\n    var last = exprList[end - 1];\n    if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n      { this.unexpected(last.argument.start); }\n  }\n  return exprList\n};\n\n// Parses spread element.\n\npp$7.parseSpread = function(refDestructuringErrors) {\n  var node = this.startNode();\n  this.next();\n  node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n  return this.finishNode(node, \"SpreadElement\")\n};\n\npp$7.parseRestBinding = function() {\n  var node = this.startNode();\n  this.next();\n\n  // RestElement inside of a function parameter must be an identifier\n  if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n    { this.unexpected(); }\n\n  node.argument = this.parseBindingAtom();\n\n  return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$7.parseBindingAtom = function() {\n  if (this.options.ecmaVersion >= 6) {\n    switch (this.type) {\n    case types$1.bracketL:\n      var node = this.startNode();\n      this.next();\n      node.elements = this.parseBindingList(types$1.bracketR, true, true);\n      return this.finishNode(node, \"ArrayPattern\")\n\n    case types$1.braceL:\n      return this.parseObj(true)\n    }\n  }\n  return this.parseIdent()\n};\n\npp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n  var elts = [], first = true;\n  while (!this.eat(close)) {\n    if (first) { first = false; }\n    else { this.expect(types$1.comma); }\n    if (allowEmpty && this.type === types$1.comma) {\n      elts.push(null);\n    } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n      break\n    } else if (this.type === types$1.ellipsis) {\n      var rest = this.parseRestBinding();\n      this.parseBindingListItem(rest);\n      elts.push(rest);\n      if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n      this.expect(close);\n      break\n    } else {\n      elts.push(this.parseAssignableListItem(allowModifiers));\n    }\n  }\n  return elts\n};\n\npp$7.parseAssignableListItem = function(allowModifiers) {\n  var elem = this.parseMaybeDefault(this.start, this.startLoc);\n  this.parseBindingListItem(elem);\n  return elem\n};\n\npp$7.parseBindingListItem = function(param) {\n  return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n  left = left || this.parseBindingAtom();\n  if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n  var node = this.startNodeAt(startPos, startLoc);\n  node.left = left;\n  node.right = this.parseMaybeAssign();\n  return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n//   nothing other than identifiers and member expressions. Parenthesized\n//   expressions are also correctly handled. This is generally appropriate for\n//   constructs for which the spec says\n//\n//   > It is a Syntax Error if AssignmentTargetType of [the production] is not\n//   > simple.\n//\n//   It is also appropriate for checking if an identifier is valid and not\n//   defined elsewhere, like import declarations or function/class identifiers.\n//\n//   Examples where this is used include:\n//     a += …;\n//     import a from '…';\n//   where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n//   anything checkLValSimple() supports, as well as object and array\n//   destructuring patterns. This is generally appropriate for constructs for\n//   which the spec says\n//\n//   > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n//   > an ArrayLiteral and AssignmentTargetType of [the production] is not\n//   > simple.\n//\n//   Examples where this is used include:\n//     (a = …);\n//     const a = …;\n//     try { … } catch (a) { … }\n//   where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n//   anything checkLValPattern() supports, as well as default assignment\n//   patterns, rest elements, and other constructs that may appear within an\n//   object or array destructuring pattern.\n//\n//   As a special case, function parameters also use checkLValInnerPattern(),\n//   as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n  if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n  var isBind = bindingType !== BIND_NONE;\n\n  switch (expr.type) {\n  case \"Identifier\":\n    if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n      { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n    if (isBind) {\n      if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n        { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n      if (checkClashes) {\n        if (hasOwn(checkClashes, expr.name))\n          { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n        checkClashes[expr.name] = true;\n      }\n      if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n    }\n    break\n\n  case \"ChainExpression\":\n    this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n    break\n\n  case \"MemberExpression\":\n    if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n    break\n\n  case \"ParenthesizedExpression\":\n    if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n    return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n  default:\n    this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n  }\n};\n\npp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n  if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n  switch (expr.type) {\n  case \"ObjectPattern\":\n    for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n      var prop = list[i];\n\n    this.checkLValInnerPattern(prop, bindingType, checkClashes);\n    }\n    break\n\n  case \"ArrayPattern\":\n    for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n      var elem = list$1[i$1];\n\n    if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n    }\n    break\n\n  default:\n    this.checkLValSimple(expr, bindingType, checkClashes);\n  }\n};\n\npp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n  if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n  switch (expr.type) {\n  case \"Property\":\n    // AssignmentProperty has type === \"Property\"\n    this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n    break\n\n  case \"AssignmentPattern\":\n    this.checkLValPattern(expr.left, bindingType, checkClashes);\n    break\n\n  case \"RestElement\":\n    this.checkLValPattern(expr.argument, bindingType, checkClashes);\n    break\n\n  default:\n    this.checkLValPattern(expr, bindingType, checkClashes);\n  }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n  this.token = token;\n  this.isExpr = !!isExpr;\n  this.preserveSpace = !!preserveSpace;\n  this.override = override;\n  this.generator = !!generator;\n};\n\nvar types = {\n  b_stat: new TokContext(\"{\", false),\n  b_expr: new TokContext(\"{\", true),\n  b_tmpl: new TokContext(\"${\", false),\n  p_stat: new TokContext(\"(\", false),\n  p_expr: new TokContext(\"(\", true),\n  q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n  f_stat: new TokContext(\"function\", false),\n  f_expr: new TokContext(\"function\", true),\n  f_expr_gen: new TokContext(\"function\", true, false, null, true),\n  f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$6 = Parser.prototype;\n\npp$6.initialContext = function() {\n  return [types.b_stat]\n};\n\npp$6.curContext = function() {\n  return this.context[this.context.length - 1]\n};\n\npp$6.braceIsBlock = function(prevType) {\n  var parent = this.curContext();\n  if (parent === types.f_expr || parent === types.f_stat)\n    { return true }\n  if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n    { return !parent.isExpr }\n\n  // The check for `tt.name && exprAllowed` detects whether we are\n  // after a `yield` or `of` construct. See the `updateContext` for\n  // `tt.name`.\n  if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n    { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n  if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n    { return true }\n  if (prevType === types$1.braceL)\n    { return parent === types.b_stat }\n  if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n    { return false }\n  return !this.exprAllowed\n};\n\npp$6.inGeneratorContext = function() {\n  for (var i = this.context.length - 1; i >= 1; i--) {\n    var context = this.context[i];\n    if (context.token === \"function\")\n      { return context.generator }\n  }\n  return false\n};\n\npp$6.updateContext = function(prevType) {\n  var update, type = this.type;\n  if (type.keyword && prevType === types$1.dot)\n    { this.exprAllowed = false; }\n  else if (update = type.updateContext)\n    { update.call(this, prevType); }\n  else\n    { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle edge cases when token context could not be inferred correctly during tokenization phase\n\npp$6.overrideContext = function(tokenCtx) {\n  if (this.curContext() !== tokenCtx) {\n    this.context[this.context.length - 1] = tokenCtx;\n  }\n};\n\n// Token-specific context update code\n\ntypes$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n  if (this.context.length === 1) {\n    this.exprAllowed = true;\n    return\n  }\n  var out = this.context.pop();\n  if (out === types.b_stat && this.curContext().token === \"function\") {\n    out = this.context.pop();\n  }\n  this.exprAllowed = !out.isExpr;\n};\n\ntypes$1.braceL.updateContext = function(prevType) {\n  this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n  this.exprAllowed = true;\n};\n\ntypes$1.dollarBraceL.updateContext = function() {\n  this.context.push(types.b_tmpl);\n  this.exprAllowed = true;\n};\n\ntypes$1.parenL.updateContext = function(prevType) {\n  var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n  this.context.push(statementParens ? types.p_stat : types.p_expr);\n  this.exprAllowed = true;\n};\n\ntypes$1.incDec.updateContext = function() {\n  // tokExprAllowed stays unchanged\n};\n\ntypes$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n  if (prevType.beforeExpr && prevType !== types$1._else &&\n      !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n      !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n      !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n    { this.context.push(types.f_expr); }\n  else\n    { this.context.push(types.f_stat); }\n  this.exprAllowed = false;\n};\n\ntypes$1.colon.updateContext = function() {\n  if (this.curContext().token === \"function\") { this.context.pop(); }\n  this.exprAllowed = true;\n};\n\ntypes$1.backQuote.updateContext = function() {\n  if (this.curContext() === types.q_tmpl)\n    { this.context.pop(); }\n  else\n    { this.context.push(types.q_tmpl); }\n  this.exprAllowed = false;\n};\n\ntypes$1.star.updateContext = function(prevType) {\n  if (prevType === types$1._function) {\n    var index = this.context.length - 1;\n    if (this.context[index] === types.f_expr)\n      { this.context[index] = types.f_expr_gen; }\n    else\n      { this.context[index] = types.f_gen; }\n  }\n  this.exprAllowed = true;\n};\n\ntypes$1.name.updateContext = function(prevType) {\n  var allowed = false;\n  if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n    if (this.value === \"of\" && !this.exprAllowed ||\n        this.value === \"yield\" && this.inGeneratorContext())\n      { allowed = true; }\n  }\n  this.exprAllowed = allowed;\n};\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\nvar pp$5 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n  if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n    { return }\n  if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n    { return }\n  var key = prop.key;\n  var name;\n  switch (key.type) {\n  case \"Identifier\": name = key.name; break\n  case \"Literal\": name = String(key.value); break\n  default: return\n  }\n  var kind = prop.kind;\n  if (this.options.ecmaVersion >= 6) {\n    if (name === \"__proto__\" && kind === \"init\") {\n      if (propHash.proto) {\n        if (refDestructuringErrors) {\n          if (refDestructuringErrors.doubleProto < 0) {\n            refDestructuringErrors.doubleProto = key.start;\n          }\n        } else {\n          this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n        }\n      }\n      propHash.proto = true;\n    }\n    return\n  }\n  name = \"$\" + name;\n  var other = propHash[name];\n  if (other) {\n    var redefinition;\n    if (kind === \"init\") {\n      redefinition = this.strict && other.init || other.get || other.set;\n    } else {\n      redefinition = other.init || other[kind];\n    }\n    if (redefinition)\n      { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n  } else {\n    other = propHash[name] = {\n      init: false,\n      get: false,\n      set: false\n    };\n  }\n  other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp$5.parseExpression = function(forInit, refDestructuringErrors) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n  if (this.type === types$1.comma) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.expressions = [expr];\n    while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n    return this.finishNode(node, \"SequenceExpression\")\n  }\n  return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n  if (this.isContextual(\"yield\")) {\n    if (this.inGenerator) { return this.parseYield(forInit) }\n    // The tokenizer will assume an expression is allowed after\n    // `yield`, but this isn't that kind of yield\n    else { this.exprAllowed = false; }\n  }\n\n  var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n  if (refDestructuringErrors) {\n    oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n    oldTrailingComma = refDestructuringErrors.trailingComma;\n    oldDoubleProto = refDestructuringErrors.doubleProto;\n    refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n  } else {\n    refDestructuringErrors = new DestructuringErrors;\n    ownDestructuringErrors = true;\n  }\n\n  var startPos = this.start, startLoc = this.startLoc;\n  if (this.type === types$1.parenL || this.type === types$1.name) {\n    this.potentialArrowAt = this.start;\n    this.potentialArrowInForAwait = forInit === \"await\";\n  }\n  var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n  if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n  if (this.type.isAssign) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.operator = this.value;\n    if (this.type === types$1.eq)\n      { left = this.toAssignable(left, false, refDestructuringErrors); }\n    if (!ownDestructuringErrors) {\n      refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n    }\n    if (refDestructuringErrors.shorthandAssign >= left.start)\n      { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n    if (this.type === types$1.eq)\n      { this.checkLValPattern(left); }\n    else\n      { this.checkLValSimple(left); }\n    node.left = left;\n    this.next();\n    node.right = this.parseMaybeAssign(forInit);\n    if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n    return this.finishNode(node, \"AssignmentExpression\")\n  } else {\n    if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n  }\n  if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n  if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n  return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseExprOps(forInit, refDestructuringErrors);\n  if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n  if (this.eat(types$1.question)) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.test = expr;\n    node.consequent = this.parseMaybeAssign();\n    this.expect(types$1.colon);\n    node.alternate = this.parseMaybeAssign(forInit);\n    return this.finishNode(node, \"ConditionalExpression\")\n  }\n  return expr\n};\n\n// Start the precedence parser.\n\npp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n  if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n  return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n  var prec = this.type.binop;\n  if (prec != null && (!forInit || this.type !== types$1._in)) {\n    if (prec > minPrec) {\n      var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n      var coalesce = this.type === types$1.coalesce;\n      if (coalesce) {\n        // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n        // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n        prec = types$1.logicalAND.binop;\n      }\n      var op = this.value;\n      this.next();\n      var startPos = this.start, startLoc = this.startLoc;\n      var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n      var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n      if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n        this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n      }\n      return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n    }\n  }\n  return left\n};\n\npp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n  if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n  var node = this.startNodeAt(startPos, startLoc);\n  node.left = left;\n  node.operator = op;\n  node.right = right;\n  return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n  var startPos = this.start, startLoc = this.startLoc, expr;\n  if (this.isContextual(\"await\") && this.canAwait) {\n    expr = this.parseAwait(forInit);\n    sawUnary = true;\n  } else if (this.type.prefix) {\n    var node = this.startNode(), update = this.type === types$1.incDec;\n    node.operator = this.value;\n    node.prefix = true;\n    this.next();\n    node.argument = this.parseMaybeUnary(null, true, update, forInit);\n    this.checkExpressionErrors(refDestructuringErrors, true);\n    if (update) { this.checkLValSimple(node.argument); }\n    else if (this.strict && node.operator === \"delete\" && isLocalVariableAccess(node.argument))\n      { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n    else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n      { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n    else { sawUnary = true; }\n    expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n  } else if (!sawUnary && this.type === types$1.privateId) {\n    if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n    expr = this.parsePrivateIdent();\n    // only could be private fields in 'in', such as #x in obj\n    if (this.type !== types$1._in) { this.unexpected(); }\n  } else {\n    expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n    if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n    while (this.type.postfix && !this.canInsertSemicolon()) {\n      var node$1 = this.startNodeAt(startPos, startLoc);\n      node$1.operator = this.value;\n      node$1.prefix = false;\n      node$1.argument = expr;\n      this.checkLValSimple(expr);\n      this.next();\n      expr = this.finishNode(node$1, \"UpdateExpression\");\n    }\n  }\n\n  if (!incDec && this.eat(types$1.starstar)) {\n    if (sawUnary)\n      { this.unexpected(this.lastTokStart); }\n    else\n      { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n  } else {\n    return expr\n  }\n};\n\nfunction isLocalVariableAccess(node) {\n  return (\n    node.type === \"Identifier\" ||\n    node.type === \"ParenthesizedExpression\" && isLocalVariableAccess(node.expression)\n  )\n}\n\nfunction isPrivateFieldAccess(node) {\n  return (\n    node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n    node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression) ||\n    node.type === \"ParenthesizedExpression\" && isPrivateFieldAccess(node.expression)\n  )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n  if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n    { return expr }\n  var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n  if (refDestructuringErrors && result.type === \"MemberExpression\") {\n    if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n    if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n    if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n  }\n  return result\n};\n\npp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n  var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n      this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n      this.potentialArrowAt === base.start;\n  var optionalChained = false;\n\n  while (true) {\n    var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n    if (element.optional) { optionalChained = true; }\n    if (element === base || element.type === \"ArrowFunctionExpression\") {\n      if (optionalChained) {\n        var chainNode = this.startNodeAt(startPos, startLoc);\n        chainNode.expression = element;\n        element = this.finishNode(chainNode, \"ChainExpression\");\n      }\n      return element\n    }\n\n    base = element;\n  }\n};\n\npp$5.shouldParseAsyncArrow = function() {\n  return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n};\n\npp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n  return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n};\n\npp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n  var optionalSupported = this.options.ecmaVersion >= 11;\n  var optional = optionalSupported && this.eat(types$1.questionDot);\n  if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n  var computed = this.eat(types$1.bracketL);\n  if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.object = base;\n    if (computed) {\n      node.property = this.parseExpression();\n      this.expect(types$1.bracketR);\n    } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n      node.property = this.parsePrivateIdent();\n    } else {\n      node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n    }\n    node.computed = !!computed;\n    if (optionalSupported) {\n      node.optional = optional;\n    }\n    base = this.finishNode(node, \"MemberExpression\");\n  } else if (!noCalls && this.eat(types$1.parenL)) {\n    var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n    this.yieldPos = 0;\n    this.awaitPos = 0;\n    this.awaitIdentPos = 0;\n    var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n    if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n      this.checkPatternErrors(refDestructuringErrors, false);\n      this.checkYieldAwaitInDefaultParams();\n      if (this.awaitIdentPos > 0)\n        { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n      this.yieldPos = oldYieldPos;\n      this.awaitPos = oldAwaitPos;\n      this.awaitIdentPos = oldAwaitIdentPos;\n      return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n    }\n    this.checkExpressionErrors(refDestructuringErrors, true);\n    this.yieldPos = oldYieldPos || this.yieldPos;\n    this.awaitPos = oldAwaitPos || this.awaitPos;\n    this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n    var node$1 = this.startNodeAt(startPos, startLoc);\n    node$1.callee = base;\n    node$1.arguments = exprList;\n    if (optionalSupported) {\n      node$1.optional = optional;\n    }\n    base = this.finishNode(node$1, \"CallExpression\");\n  } else if (this.type === types$1.backQuote) {\n    if (optional || optionalChained) {\n      this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n    }\n    var node$2 = this.startNodeAt(startPos, startLoc);\n    node$2.tag = base;\n    node$2.quasi = this.parseTemplate({isTagged: true});\n    base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n  }\n  return base\n};\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n  // If a division operator appears in an expression position, the\n  // tokenizer got confused, and we force it to read a regexp instead.\n  if (this.type === types$1.slash) { this.readRegexp(); }\n\n  var node, canBeArrow = this.potentialArrowAt === this.start;\n  switch (this.type) {\n  case types$1._super:\n    if (!this.allowSuper)\n      { this.raise(this.start, \"'super' keyword outside a method\"); }\n    node = this.startNode();\n    this.next();\n    if (this.type === types$1.parenL && !this.allowDirectSuper)\n      { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n    // The `super` keyword can appear at below:\n    // SuperProperty:\n    //     super [ Expression ]\n    //     super . IdentifierName\n    // SuperCall:\n    //     super ( Arguments )\n    if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n      { this.unexpected(); }\n    return this.finishNode(node, \"Super\")\n\n  case types$1._this:\n    node = this.startNode();\n    this.next();\n    return this.finishNode(node, \"ThisExpression\")\n\n  case types$1.name:\n    var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n    var id = this.parseIdent(false);\n    if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n      this.overrideContext(types.f_expr);\n      return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n    }\n    if (canBeArrow && !this.canInsertSemicolon()) {\n      if (this.eat(types$1.arrow))\n        { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n      if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n          (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n        id = this.parseIdent(false);\n        if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n          { this.unexpected(); }\n        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n      }\n    }\n    return id\n\n  case types$1.regexp:\n    var value = this.value;\n    node = this.parseLiteral(value.value);\n    node.regex = {pattern: value.pattern, flags: value.flags};\n    return node\n\n  case types$1.num: case types$1.string:\n    return this.parseLiteral(this.value)\n\n  case types$1._null: case types$1._true: case types$1._false:\n    node = this.startNode();\n    node.value = this.type === types$1._null ? null : this.type === types$1._true;\n    node.raw = this.type.keyword;\n    this.next();\n    return this.finishNode(node, \"Literal\")\n\n  case types$1.parenL:\n    var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n    if (refDestructuringErrors) {\n      if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n        { refDestructuringErrors.parenthesizedAssign = start; }\n      if (refDestructuringErrors.parenthesizedBind < 0)\n        { refDestructuringErrors.parenthesizedBind = start; }\n    }\n    return expr\n\n  case types$1.bracketL:\n    node = this.startNode();\n    this.next();\n    node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n    return this.finishNode(node, \"ArrayExpression\")\n\n  case types$1.braceL:\n    this.overrideContext(types.b_expr);\n    return this.parseObj(false, refDestructuringErrors)\n\n  case types$1._function:\n    node = this.startNode();\n    this.next();\n    return this.parseFunction(node, 0)\n\n  case types$1._class:\n    return this.parseClass(this.startNode(), false)\n\n  case types$1._new:\n    return this.parseNew()\n\n  case types$1.backQuote:\n    return this.parseTemplate()\n\n  case types$1._import:\n    if (this.options.ecmaVersion >= 11) {\n      return this.parseExprImport(forNew)\n    } else {\n      return this.unexpected()\n    }\n\n  default:\n    return this.parseExprAtomDefault()\n  }\n};\n\npp$5.parseExprAtomDefault = function() {\n  this.unexpected();\n};\n\npp$5.parseExprImport = function(forNew) {\n  var node = this.startNode();\n\n  // Consume `import` as an identifier for `import.meta`.\n  // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n  if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n  this.next();\n\n  if (this.type === types$1.parenL && !forNew) {\n    return this.parseDynamicImport(node)\n  } else if (this.type === types$1.dot) {\n    var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n    meta.name = \"import\";\n    node.meta = this.finishNode(meta, \"Identifier\");\n    return this.parseImportMeta(node)\n  } else {\n    this.unexpected();\n  }\n};\n\npp$5.parseDynamicImport = function(node) {\n  this.next(); // skip `(`\n\n  // Parse node.source.\n  node.source = this.parseMaybeAssign();\n\n  if (this.options.ecmaVersion >= 16) {\n    if (!this.eat(types$1.parenR)) {\n      this.expect(types$1.comma);\n      if (!this.afterTrailingComma(types$1.parenR)) {\n        node.options = this.parseMaybeAssign();\n        if (!this.eat(types$1.parenR)) {\n          this.expect(types$1.comma);\n          if (!this.afterTrailingComma(types$1.parenR)) {\n            this.unexpected();\n          }\n        }\n      } else {\n        node.options = null;\n      }\n    } else {\n      node.options = null;\n    }\n  } else {\n    // Verify ending.\n    if (!this.eat(types$1.parenR)) {\n      var errorPos = this.start;\n      if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n        this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n      } else {\n        this.unexpected(errorPos);\n      }\n    }\n  }\n\n  return this.finishNode(node, \"ImportExpression\")\n};\n\npp$5.parseImportMeta = function(node) {\n  this.next(); // skip `.`\n\n  var containsEsc = this.containsEsc;\n  node.property = this.parseIdent(true);\n\n  if (node.property.name !== \"meta\")\n    { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n  if (containsEsc)\n    { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n  if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n    { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n  return this.finishNode(node, \"MetaProperty\")\n};\n\npp$5.parseLiteral = function(value) {\n  var node = this.startNode();\n  node.value = value;\n  node.raw = this.input.slice(this.start, this.end);\n  if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n  this.next();\n  return this.finishNode(node, \"Literal\")\n};\n\npp$5.parseParenExpression = function() {\n  this.expect(types$1.parenL);\n  var val = this.parseExpression();\n  this.expect(types$1.parenR);\n  return val\n};\n\npp$5.shouldParseArrow = function(exprList) {\n  return !this.canInsertSemicolon()\n};\n\npp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n  var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n  if (this.options.ecmaVersion >= 6) {\n    this.next();\n\n    var innerStartPos = this.start, innerStartLoc = this.startLoc;\n    var exprList = [], first = true, lastIsComma = false;\n    var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n    this.yieldPos = 0;\n    this.awaitPos = 0;\n    // Do not save awaitIdentPos to allow checking awaits nested in parameters\n    while (this.type !== types$1.parenR) {\n      first ? first = false : this.expect(types$1.comma);\n      if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n        lastIsComma = true;\n        break\n      } else if (this.type === types$1.ellipsis) {\n        spreadStart = this.start;\n        exprList.push(this.parseParenItem(this.parseRestBinding()));\n        if (this.type === types$1.comma) {\n          this.raiseRecoverable(\n            this.start,\n            \"Comma is not permitted after the rest element\"\n          );\n        }\n        break\n      } else {\n        exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n      }\n    }\n    var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n    this.expect(types$1.parenR);\n\n    if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n      this.checkPatternErrors(refDestructuringErrors, false);\n      this.checkYieldAwaitInDefaultParams();\n      this.yieldPos = oldYieldPos;\n      this.awaitPos = oldAwaitPos;\n      return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n    }\n\n    if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n    if (spreadStart) { this.unexpected(spreadStart); }\n    this.checkExpressionErrors(refDestructuringErrors, true);\n    this.yieldPos = oldYieldPos || this.yieldPos;\n    this.awaitPos = oldAwaitPos || this.awaitPos;\n\n    if (exprList.length > 1) {\n      val = this.startNodeAt(innerStartPos, innerStartLoc);\n      val.expressions = exprList;\n      this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n  } else {\n    val = this.parseParenExpression();\n  }\n\n  if (this.options.preserveParens) {\n    var par = this.startNodeAt(startPos, startLoc);\n    par.expression = val;\n    return this.finishNode(par, \"ParenthesizedExpression\")\n  } else {\n    return val\n  }\n};\n\npp$5.parseParenItem = function(item) {\n  return item\n};\n\npp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n  return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n};\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty = [];\n\npp$5.parseNew = function() {\n  if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n  var node = this.startNode();\n  this.next();\n  if (this.options.ecmaVersion >= 6 && this.type === types$1.dot) {\n    var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n    meta.name = \"new\";\n    node.meta = this.finishNode(meta, \"Identifier\");\n    this.next();\n    var containsEsc = this.containsEsc;\n    node.property = this.parseIdent(true);\n    if (node.property.name !== \"target\")\n      { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n    if (containsEsc)\n      { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n    if (!this.allowNewDotTarget)\n      { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n    return this.finishNode(node, \"MetaProperty\")\n  }\n  var startPos = this.start, startLoc = this.startLoc;\n  node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n  if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n  else { node.arguments = empty; }\n  return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$5.parseTemplateElement = function(ref) {\n  var isTagged = ref.isTagged;\n\n  var elem = this.startNode();\n  if (this.type === types$1.invalidTemplate) {\n    if (!isTagged) {\n      this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n    }\n    elem.value = {\n      raw: this.value.replace(/\\r\\n?/g, \"\\n\"),\n      cooked: null\n    };\n  } else {\n    elem.value = {\n      raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: this.value\n    };\n  }\n  this.next();\n  elem.tail = this.type === types$1.backQuote;\n  return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$5.parseTemplate = function(ref) {\n  if ( ref === void 0 ) ref = {};\n  var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n  var node = this.startNode();\n  this.next();\n  node.expressions = [];\n  var curElt = this.parseTemplateElement({isTagged: isTagged});\n  node.quasis = [curElt];\n  while (!curElt.tail) {\n    if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n    this.expect(types$1.dollarBraceL);\n    node.expressions.push(this.parseExpression());\n    this.expect(types$1.braceR);\n    node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n  }\n  this.next();\n  return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$5.isAsyncProp = function(prop) {\n  return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n    (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n    !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$5.parseObj = function(isPattern, refDestructuringErrors) {\n  var node = this.startNode(), first = true, propHash = {};\n  node.properties = [];\n  this.next();\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    var prop = this.parseProperty(isPattern, refDestructuringErrors);\n    if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n    node.properties.push(prop);\n  }\n  return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n  var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n  if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n    if (isPattern) {\n      prop.argument = this.parseIdent(false);\n      if (this.type === types$1.comma) {\n        this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n      }\n      return this.finishNode(prop, \"RestElement\")\n    }\n    // Parse argument.\n    prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n    // To disallow trailing comma via `this.toAssignable()`.\n    if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n      refDestructuringErrors.trailingComma = this.start;\n    }\n    // Finish\n    return this.finishNode(prop, \"SpreadElement\")\n  }\n  if (this.options.ecmaVersion >= 6) {\n    prop.method = false;\n    prop.shorthand = false;\n    if (isPattern || refDestructuringErrors) {\n      startPos = this.start;\n      startLoc = this.startLoc;\n    }\n    if (!isPattern)\n      { isGenerator = this.eat(types$1.star); }\n  }\n  var containsEsc = this.containsEsc;\n  this.parsePropertyName(prop);\n  if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n    isAsync = true;\n    isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n    this.parsePropertyName(prop);\n  } else {\n    isAsync = false;\n  }\n  this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n  return this.finishNode(prop, \"Property\")\n};\n\npp$5.parseGetterSetter = function(prop) {\n  prop.kind = prop.key.name;\n  this.parsePropertyName(prop);\n  prop.value = this.parseMethod(false);\n  var paramCount = prop.kind === \"get\" ? 0 : 1;\n  if (prop.value.params.length !== paramCount) {\n    var start = prop.value.start;\n    if (prop.kind === \"get\")\n      { this.raiseRecoverable(start, \"getter should have no params\"); }\n    else\n      { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n  } else {\n    if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n      { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n  }\n};\n\npp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n  if ((isGenerator || isAsync) && this.type === types$1.colon)\n    { this.unexpected(); }\n\n  if (this.eat(types$1.colon)) {\n    prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n    prop.kind = \"init\";\n  } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n    if (isPattern) { this.unexpected(); }\n    prop.kind = \"init\";\n    prop.method = true;\n    prop.value = this.parseMethod(isGenerator, isAsync);\n  } else if (!isPattern && !containsEsc &&\n             this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n             (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n             (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n    if (isGenerator || isAsync) { this.unexpected(); }\n    this.parseGetterSetter(prop);\n  } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n    if (isGenerator || isAsync) { this.unexpected(); }\n    this.checkUnreserved(prop.key);\n    if (prop.key.name === \"await\" && !this.awaitIdentPos)\n      { this.awaitIdentPos = startPos; }\n    prop.kind = \"init\";\n    if (isPattern) {\n      prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n    } else if (this.type === types$1.eq && refDestructuringErrors) {\n      if (refDestructuringErrors.shorthandAssign < 0)\n        { refDestructuringErrors.shorthandAssign = this.start; }\n      prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n    } else {\n      prop.value = this.copyNode(prop.key);\n    }\n    prop.shorthand = true;\n  } else { this.unexpected(); }\n};\n\npp$5.parsePropertyName = function(prop) {\n  if (this.options.ecmaVersion >= 6) {\n    if (this.eat(types$1.bracketL)) {\n      prop.computed = true;\n      prop.key = this.parseMaybeAssign();\n      this.expect(types$1.bracketR);\n      return prop.key\n    } else {\n      prop.computed = false;\n    }\n  }\n  return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$5.initFunction = function(node) {\n  node.id = null;\n  if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n  if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n  var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n  this.initFunction(node);\n  if (this.options.ecmaVersion >= 6)\n    { node.generator = isGenerator; }\n  if (this.options.ecmaVersion >= 8)\n    { node.async = !!isAsync; }\n\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.awaitIdentPos = 0;\n  this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n  this.expect(types$1.parenL);\n  node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n  this.checkYieldAwaitInDefaultParams();\n  this.parseFunctionBody(node, false, true, false);\n\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  this.awaitIdentPos = oldAwaitIdentPos;\n  return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n  var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n  this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n  this.initFunction(node);\n  if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.awaitIdentPos = 0;\n\n  node.params = this.toAssignableList(params, true);\n  this.parseFunctionBody(node, true, false, forInit);\n\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  this.awaitIdentPos = oldAwaitIdentPos;\n  return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n  var isExpression = isArrowFunction && this.type !== types$1.braceL;\n  var oldStrict = this.strict, useStrict = false;\n\n  if (isExpression) {\n    node.body = this.parseMaybeAssign(forInit);\n    node.expression = true;\n    this.checkParams(node, false);\n  } else {\n    var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n    if (!oldStrict || nonSimple) {\n      useStrict = this.strictDirective(this.end);\n      // If this is a strict mode function, verify that argument names\n      // are not repeated, and it does not try to bind the words `eval`\n      // or `arguments`.\n      if (useStrict && nonSimple)\n        { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n    }\n    // Start a new scope with regard to labels and the `inFunction`\n    // flag (restore them to their old value afterwards).\n    var oldLabels = this.labels;\n    this.labels = [];\n    if (useStrict) { this.strict = true; }\n\n    // Add the params to varDeclaredNames to ensure that an error is thrown\n    // if a let/const declaration in the function clashes with one of the params.\n    this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n    // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n    if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n    node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n    node.expression = false;\n    this.adaptDirectivePrologue(node.body.body);\n    this.labels = oldLabels;\n  }\n  this.exitScope();\n};\n\npp$5.isSimpleParamList = function(params) {\n  for (var i = 0, list = params; i < list.length; i += 1)\n    {\n    var param = list[i];\n\n    if (param.type !== \"Identifier\") { return false\n  } }\n  return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$5.checkParams = function(node, allowDuplicates) {\n  var nameHash = Object.create(null);\n  for (var i = 0, list = node.params; i < list.length; i += 1)\n    {\n    var param = list[i];\n\n    this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n  }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n  var elts = [], first = true;\n  while (!this.eat(close)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n    } else { first = false; }\n\n    var elt = (void 0);\n    if (allowEmpty && this.type === types$1.comma)\n      { elt = null; }\n    else if (this.type === types$1.ellipsis) {\n      elt = this.parseSpread(refDestructuringErrors);\n      if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n        { refDestructuringErrors.trailingComma = this.start; }\n    } else {\n      elt = this.parseMaybeAssign(false, refDestructuringErrors);\n    }\n    elts.push(elt);\n  }\n  return elts\n};\n\npp$5.checkUnreserved = function(ref) {\n  var start = ref.start;\n  var end = ref.end;\n  var name = ref.name;\n\n  if (this.inGenerator && name === \"yield\")\n    { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n  if (this.inAsync && name === \"await\")\n    { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n  if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n    { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n  if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n    { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n  if (this.keywords.test(name))\n    { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n  if (this.options.ecmaVersion < 6 &&\n    this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n  var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n  if (re.test(name)) {\n    if (!this.inAsync && name === \"await\")\n      { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n    this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n  }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$5.parseIdent = function(liberal) {\n  var node = this.parseIdentNode();\n  this.next(!!liberal);\n  this.finishNode(node, \"Identifier\");\n  if (!liberal) {\n    this.checkUnreserved(node);\n    if (node.name === \"await\" && !this.awaitIdentPos)\n      { this.awaitIdentPos = node.start; }\n  }\n  return node\n};\n\npp$5.parseIdentNode = function() {\n  var node = this.startNode();\n  if (this.type === types$1.name) {\n    node.name = this.value;\n  } else if (this.type.keyword) {\n    node.name = this.type.keyword;\n\n    // To fix https://github.com/acornjs/acorn/issues/575\n    // `class` and `function` keywords push new context into this.context.\n    // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n    // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n    if ((node.name === \"class\" || node.name === \"function\") &&\n      (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n      this.context.pop();\n    }\n    this.type = types$1.name;\n  } else {\n    this.unexpected();\n  }\n  return node\n};\n\npp$5.parsePrivateIdent = function() {\n  var node = this.startNode();\n  if (this.type === types$1.privateId) {\n    node.name = this.value;\n  } else {\n    this.unexpected();\n  }\n  this.next();\n  this.finishNode(node, \"PrivateIdentifier\");\n\n  // For validating existence\n  if (this.options.checkPrivateFields) {\n    if (this.privateNameStack.length === 0) {\n      this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n    } else {\n      this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n    }\n  }\n\n  return node\n};\n\n// Parses yield expression inside generator.\n\npp$5.parseYield = function(forInit) {\n  if (!this.yieldPos) { this.yieldPos = this.start; }\n\n  var node = this.startNode();\n  this.next();\n  if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n    node.delegate = false;\n    node.argument = null;\n  } else {\n    node.delegate = this.eat(types$1.star);\n    node.argument = this.parseMaybeAssign(forInit);\n  }\n  return this.finishNode(node, \"YieldExpression\")\n};\n\npp$5.parseAwait = function(forInit) {\n  if (!this.awaitPos) { this.awaitPos = this.start; }\n\n  var node = this.startNode();\n  this.next();\n  node.argument = this.parseMaybeUnary(null, true, false, forInit);\n  return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n  var loc = getLineInfo(this.input, pos);\n  message += \" (\" + loc.line + \":\" + loc.column + \")\";\n  var err = new SyntaxError(message);\n  err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n  throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n  if (this.options.locations) {\n    return new Position(this.curLine, this.pos - this.lineStart)\n  }\n};\n\nvar pp$3 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n  this.flags = flags;\n  // A list of var-declared names in the current lexical scope\n  this.var = [];\n  // A list of lexically-declared names in the current lexical scope\n  this.lexical = [];\n  // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n  this.functions = [];\n  // A switch to disallow the identifier reference 'arguments'\n  this.inClassFieldInit = false;\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$3.enterScope = function(flags) {\n  this.scopeStack.push(new Scope(flags));\n};\n\npp$3.exitScope = function() {\n  this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$3.treatFunctionsAsVarInScope = function(scope) {\n  return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$3.declareName = function(name, bindingType, pos) {\n  var redeclared = false;\n  if (bindingType === BIND_LEXICAL) {\n    var scope = this.currentScope();\n    redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n    scope.lexical.push(name);\n    if (this.inModule && (scope.flags & SCOPE_TOP))\n      { delete this.undefinedExports[name]; }\n  } else if (bindingType === BIND_SIMPLE_CATCH) {\n    var scope$1 = this.currentScope();\n    scope$1.lexical.push(name);\n  } else if (bindingType === BIND_FUNCTION) {\n    var scope$2 = this.currentScope();\n    if (this.treatFunctionsAsVar)\n      { redeclared = scope$2.lexical.indexOf(name) > -1; }\n    else\n      { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n    scope$2.functions.push(name);\n  } else {\n    for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n      var scope$3 = this.scopeStack[i];\n      if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n          !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n        redeclared = true;\n        break\n      }\n      scope$3.var.push(name);\n      if (this.inModule && (scope$3.flags & SCOPE_TOP))\n        { delete this.undefinedExports[name]; }\n      if (scope$3.flags & SCOPE_VAR) { break }\n    }\n  }\n  if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$3.checkLocalExport = function(id) {\n  // scope.functions must be empty as Module code is always strict.\n  if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n      this.scopeStack[0].var.indexOf(id.name) === -1) {\n    this.undefinedExports[id.name] = id;\n  }\n};\n\npp$3.currentScope = function() {\n  return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$3.currentVarScope = function() {\n  for (var i = this.scopeStack.length - 1;; i--) {\n    var scope = this.scopeStack[i];\n    if (scope.flags & SCOPE_VAR) { return scope }\n  }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$3.currentThisScope = function() {\n  for (var i = this.scopeStack.length - 1;; i--) {\n    var scope = this.scopeStack[i];\n    if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n  }\n};\n\nvar Node = function Node(parser, pos, loc) {\n  this.type = \"\";\n  this.start = pos;\n  this.end = 0;\n  if (parser.options.locations)\n    { this.loc = new SourceLocation(parser, loc); }\n  if (parser.options.directSourceFile)\n    { this.sourceFile = parser.options.directSourceFile; }\n  if (parser.options.ranges)\n    { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$2 = Parser.prototype;\n\npp$2.startNode = function() {\n  return new Node(this, this.start, this.startLoc)\n};\n\npp$2.startNodeAt = function(pos, loc) {\n  return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n  node.type = type;\n  node.end = pos;\n  if (this.options.locations)\n    { node.loc.end = loc; }\n  if (this.options.ranges)\n    { node.range[1] = pos; }\n  return node\n}\n\npp$2.finishNode = function(node, type) {\n  return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$2.finishNodeAt = function(node, type, pos, loc) {\n  return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$2.copyNode = function(node) {\n  var newNode = new Node(this, node.start, this.startLoc);\n  for (var prop in node) { newNode[prop] = node[prop]; }\n  return newNode\n};\n\n// This file was generated by \"bin/generate-unicode-script-values.js\". Do not modify manually!\nvar scriptValuesAddedInUnicode = \"Gara Garay Gukh Gurung_Khema Hrkt Katakana_Or_Hiragana Kawi Kirat_Rai Krai Nag_Mundari Nagm Ol_Onal Onao Sunu Sunuwar Todhri Todr Tulu_Tigalari Tutg Unknown Zzzz\";\n\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar ecma13BinaryProperties = ecma12BinaryProperties;\nvar ecma14BinaryProperties = ecma13BinaryProperties;\n\nvar unicodeBinaryProperties = {\n  9: ecma9BinaryProperties,\n  10: ecma10BinaryProperties,\n  11: ecma11BinaryProperties,\n  12: ecma12BinaryProperties,\n  13: ecma13BinaryProperties,\n  14: ecma14BinaryProperties\n};\n\n// #table-binary-unicode-properties-of-strings\nvar ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\nvar unicodeBinaryPropertiesOfStrings = {\n  9: \"\",\n  10: \"\",\n  11: \"\",\n  12: \"\",\n  13: \"\",\n  14: ecma14BinaryPropertiesOfStrings\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar ecma14ScriptValues = ecma13ScriptValues + \" \" + scriptValuesAddedInUnicode;\n\nvar unicodeScriptValues = {\n  9: ecma9ScriptValues,\n  10: ecma10ScriptValues,\n  11: ecma11ScriptValues,\n  12: ecma12ScriptValues,\n  13: ecma13ScriptValues,\n  14: ecma14ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n  var d = data[ecmaVersion] = {\n    binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n    binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n    nonBinary: {\n      General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n      Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n    }\n  };\n  d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n  d.nonBinary.gc = d.nonBinary.General_Category;\n  d.nonBinary.sc = d.nonBinary.Script;\n  d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\n\nfor (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n  var ecmaVersion = list[i];\n\n  buildUnicodeData(ecmaVersion);\n}\n\nvar pp$1 = Parser.prototype;\n\n// Track disjunction structure to determine whether a duplicate\n// capture group name is allowed because it is in a separate branch.\nvar BranchID = function BranchID(parent, base) {\n  // Parent disjunction branch\n  this.parent = parent;\n  // Identifies this set of sibling branches\n  this.base = base || this;\n};\n\nBranchID.prototype.separatedFrom = function separatedFrom (alt) {\n  // A branch is separate from another branch if they or any of\n  // their parents are siblings in a given disjunction\n  for (var self = this; self; self = self.parent) {\n    for (var other = alt; other; other = other.parent) {\n      if (self.base === other.base && self !== other) { return true }\n    }\n  }\n  return false\n};\n\nBranchID.prototype.sibling = function sibling () {\n  return new BranchID(this.parent, this.base)\n};\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n  this.parser = parser;\n  this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n  this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n  this.source = \"\";\n  this.flags = \"\";\n  this.start = 0;\n  this.switchU = false;\n  this.switchV = false;\n  this.switchN = false;\n  this.pos = 0;\n  this.lastIntValue = 0;\n  this.lastStringValue = \"\";\n  this.lastAssertionIsQuantifiable = false;\n  this.numCapturingParens = 0;\n  this.maxBackReference = 0;\n  this.groupNames = Object.create(null);\n  this.backReferenceNames = [];\n  this.branchID = null;\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n  var unicodeSets = flags.indexOf(\"v\") !== -1;\n  var unicode = flags.indexOf(\"u\") !== -1;\n  this.start = start | 0;\n  this.source = pattern + \"\";\n  this.flags = flags;\n  if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n    this.switchU = true;\n    this.switchV = true;\n    this.switchN = true;\n  } else {\n    this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n    this.switchV = false;\n    this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n  }\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n  this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  var s = this.source;\n  var l = s.length;\n  if (i >= l) {\n    return -1\n  }\n  var c = s.charCodeAt(i);\n  if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n    return c\n  }\n  var next = s.charCodeAt(i + 1);\n  return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  var s = this.source;\n  var l = s.length;\n  if (i >= l) {\n    return l\n  }\n  var c = s.charCodeAt(i), next;\n  if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n      (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n    return i + 1\n  }\n  return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  if (this.current(forceU) === ch) {\n    this.advance(forceU);\n    return true\n  }\n  return false\n};\n\nRegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  var pos = this.pos;\n  for (var i = 0, list = chs; i < list.length; i += 1) {\n    var ch = list[i];\n\n      var current = this.at(pos, forceU);\n    if (current === -1 || current !== ch) {\n      return false\n    }\n    pos = this.nextIndex(pos, forceU);\n  }\n  this.pos = pos;\n  return true\n};\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpFlags = function(state) {\n  var validFlags = state.validFlags;\n  var flags = state.flags;\n\n  var u = false;\n  var v = false;\n\n  for (var i = 0; i < flags.length; i++) {\n    var flag = flags.charAt(i);\n    if (validFlags.indexOf(flag) === -1) {\n      this.raise(state.start, \"Invalid regular expression flag\");\n    }\n    if (flags.indexOf(flag, i + 1) > -1) {\n      this.raise(state.start, \"Duplicate regular expression flag\");\n    }\n    if (flag === \"u\") { u = true; }\n    if (flag === \"v\") { v = true; }\n  }\n  if (this.options.ecmaVersion >= 15 && u && v) {\n    this.raise(state.start, \"Invalid regular expression flag\");\n  }\n};\n\nfunction hasProp(obj) {\n  for (var _ in obj) { return true }\n  return false\n}\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpPattern = function(state) {\n  this.regexp_pattern(state);\n\n  // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n  // parsing contains a |GroupName|, reparse with the goal symbol\n  // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n  // exception if _P_ did not conform to the grammar, if any elements of _P_\n  // were not matched by the parse, or if any Early Error conditions exist.\n  if (!state.switchN && this.options.ecmaVersion >= 9 && hasProp(state.groupNames)) {\n    state.switchN = true;\n    this.regexp_pattern(state);\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$1.regexp_pattern = function(state) {\n  state.pos = 0;\n  state.lastIntValue = 0;\n  state.lastStringValue = \"\";\n  state.lastAssertionIsQuantifiable = false;\n  state.numCapturingParens = 0;\n  state.maxBackReference = 0;\n  state.groupNames = Object.create(null);\n  state.backReferenceNames.length = 0;\n  state.branchID = null;\n\n  this.regexp_disjunction(state);\n\n  if (state.pos !== state.source.length) {\n    // Make the same messages as V8.\n    if (state.eat(0x29 /* ) */)) {\n      state.raise(\"Unmatched ')'\");\n    }\n    if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n      state.raise(\"Lone quantifier brackets\");\n    }\n  }\n  if (state.maxBackReference > state.numCapturingParens) {\n    state.raise(\"Invalid escape\");\n  }\n  for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n    var name = list[i];\n\n    if (!state.groupNames[name]) {\n      state.raise(\"Invalid named capture referenced\");\n    }\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$1.regexp_disjunction = function(state) {\n  var trackDisjunction = this.options.ecmaVersion >= 16;\n  if (trackDisjunction) { state.branchID = new BranchID(state.branchID, null); }\n  this.regexp_alternative(state);\n  while (state.eat(0x7C /* | */)) {\n    if (trackDisjunction) { state.branchID = state.branchID.sibling(); }\n    this.regexp_alternative(state);\n  }\n  if (trackDisjunction) { state.branchID = state.branchID.parent; }\n\n  // Make the same message as V8.\n  if (this.regexp_eatQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\");\n  }\n  if (state.eat(0x7B /* { */)) {\n    state.raise(\"Lone quantifier brackets\");\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$1.regexp_alternative = function(state) {\n  while (state.pos < state.source.length && this.regexp_eatTerm(state)) {}\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$1.regexp_eatTerm = function(state) {\n  if (this.regexp_eatAssertion(state)) {\n    // Handle `QuantifiableAssertion Quantifier` alternative.\n    // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n    // is a QuantifiableAssertion.\n    if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n      // Make the same message as V8.\n      if (state.switchU) {\n        state.raise(\"Invalid quantifier\");\n      }\n    }\n    return true\n  }\n\n  if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n    this.regexp_eatQuantifier(state);\n    return true\n  }\n\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$1.regexp_eatAssertion = function(state) {\n  var start = state.pos;\n  state.lastAssertionIsQuantifiable = false;\n\n  // ^, $\n  if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n    return true\n  }\n\n  // \\b \\B\n  if (state.eat(0x5C /* \\ */)) {\n    if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n      return true\n    }\n    state.pos = start;\n  }\n\n  // Lookahead / Lookbehind\n  if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n    var lookbehind = false;\n    if (this.options.ecmaVersion >= 9) {\n      lookbehind = state.eat(0x3C /* < */);\n    }\n    if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n      this.regexp_disjunction(state);\n      if (!state.eat(0x29 /* ) */)) {\n        state.raise(\"Unterminated group\");\n      }\n      state.lastAssertionIsQuantifiable = !lookbehind;\n      return true\n    }\n  }\n\n  state.pos = start;\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$1.regexp_eatQuantifier = function(state, noError) {\n  if ( noError === void 0 ) noError = false;\n\n  if (this.regexp_eatQuantifierPrefix(state, noError)) {\n    state.eat(0x3F /* ? */);\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n  return (\n    state.eat(0x2A /* * */) ||\n    state.eat(0x2B /* + */) ||\n    state.eat(0x3F /* ? */) ||\n    this.regexp_eatBracedQuantifier(state, noError)\n  )\n};\npp$1.regexp_eatBracedQuantifier = function(state, noError) {\n  var start = state.pos;\n  if (state.eat(0x7B /* { */)) {\n    var min = 0, max = -1;\n    if (this.regexp_eatDecimalDigits(state)) {\n      min = state.lastIntValue;\n      if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n        max = state.lastIntValue;\n      }\n      if (state.eat(0x7D /* } */)) {\n        // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n        if (max !== -1 && max < min && !noError) {\n          state.raise(\"numbers out of order in {} quantifier\");\n        }\n        return true\n      }\n    }\n    if (state.switchU && !noError) {\n      state.raise(\"Incomplete quantifier\");\n    }\n    state.pos = start;\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$1.regexp_eatAtom = function(state) {\n  return (\n    this.regexp_eatPatternCharacters(state) ||\n    state.eat(0x2E /* . */) ||\n    this.regexp_eatReverseSolidusAtomEscape(state) ||\n    this.regexp_eatCharacterClass(state) ||\n    this.regexp_eatUncapturingGroup(state) ||\n    this.regexp_eatCapturingGroup(state)\n  )\n};\npp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n  var start = state.pos;\n  if (state.eat(0x5C /* \\ */)) {\n    if (this.regexp_eatAtomEscape(state)) {\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatUncapturingGroup = function(state) {\n  var start = state.pos;\n  if (state.eat(0x28 /* ( */)) {\n    if (state.eat(0x3F /* ? */)) {\n      if (this.options.ecmaVersion >= 16) {\n        var addModifiers = this.regexp_eatModifiers(state);\n        var hasHyphen = state.eat(0x2D /* - */);\n        if (addModifiers || hasHyphen) {\n          for (var i = 0; i < addModifiers.length; i++) {\n            var modifier = addModifiers.charAt(i);\n            if (addModifiers.indexOf(modifier, i + 1) > -1) {\n              state.raise(\"Duplicate regular expression modifiers\");\n            }\n          }\n          if (hasHyphen) {\n            var removeModifiers = this.regexp_eatModifiers(state);\n            if (!addModifiers && !removeModifiers && state.current() === 0x3A /* : */) {\n              state.raise(\"Invalid regular expression modifiers\");\n            }\n            for (var i$1 = 0; i$1 < removeModifiers.length; i$1++) {\n              var modifier$1 = removeModifiers.charAt(i$1);\n              if (\n                removeModifiers.indexOf(modifier$1, i$1 + 1) > -1 ||\n                addModifiers.indexOf(modifier$1) > -1\n              ) {\n                state.raise(\"Duplicate regular expression modifiers\");\n              }\n            }\n          }\n        }\n      }\n      if (state.eat(0x3A /* : */)) {\n        this.regexp_disjunction(state);\n        if (state.eat(0x29 /* ) */)) {\n          return true\n        }\n        state.raise(\"Unterminated group\");\n      }\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatCapturingGroup = function(state) {\n  if (state.eat(0x28 /* ( */)) {\n    if (this.options.ecmaVersion >= 9) {\n      this.regexp_groupSpecifier(state);\n    } else if (state.current() === 0x3F /* ? */) {\n      state.raise(\"Invalid group\");\n    }\n    this.regexp_disjunction(state);\n    if (state.eat(0x29 /* ) */)) {\n      state.numCapturingParens += 1;\n      return true\n    }\n    state.raise(\"Unterminated group\");\n  }\n  return false\n};\n// RegularExpressionModifiers ::\n//   [empty]\n//   RegularExpressionModifiers RegularExpressionModifier\npp$1.regexp_eatModifiers = function(state) {\n  var modifiers = \"\";\n  var ch = 0;\n  while ((ch = state.current()) !== -1 && isRegularExpressionModifier(ch)) {\n    modifiers += codePointToString(ch);\n    state.advance();\n  }\n  return modifiers\n};\n// RegularExpressionModifier :: one of\n//   `i` `m` `s`\nfunction isRegularExpressionModifier(ch) {\n  return ch === 0x69 /* i */ || ch === 0x6d /* m */ || ch === 0x73 /* s */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$1.regexp_eatExtendedAtom = function(state) {\n  return (\n    state.eat(0x2E /* . */) ||\n    this.regexp_eatReverseSolidusAtomEscape(state) ||\n    this.regexp_eatCharacterClass(state) ||\n    this.regexp_eatUncapturingGroup(state) ||\n    this.regexp_eatCapturingGroup(state) ||\n    this.regexp_eatInvalidBracedQuantifier(state) ||\n    this.regexp_eatExtendedPatternCharacter(state)\n  )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n  if (this.regexp_eatBracedQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\");\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$1.regexp_eatSyntaxCharacter = function(state) {\n  var ch = state.current();\n  if (isSyntaxCharacter(ch)) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n  return false\n};\nfunction isSyntaxCharacter(ch) {\n  return (\n    ch === 0x24 /* $ */ ||\n    ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n    ch === 0x2E /* . */ ||\n    ch === 0x3F /* ? */ ||\n    ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n    ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$1.regexp_eatPatternCharacters = function(state) {\n  var start = state.pos;\n  var ch = 0;\n  while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n    state.advance();\n  }\n  return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$1.regexp_eatExtendedPatternCharacter = function(state) {\n  var ch = state.current();\n  if (\n    ch !== -1 &&\n    ch !== 0x24 /* $ */ &&\n    !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n    ch !== 0x2E /* . */ &&\n    ch !== 0x3F /* ? */ &&\n    ch !== 0x5B /* [ */ &&\n    ch !== 0x5E /* ^ */ &&\n    ch !== 0x7C /* | */\n  ) {\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// GroupSpecifier ::\n//   [empty]\n//   `?` GroupName\npp$1.regexp_groupSpecifier = function(state) {\n  if (state.eat(0x3F /* ? */)) {\n    if (!this.regexp_eatGroupName(state)) { state.raise(\"Invalid group\"); }\n    var trackDisjunction = this.options.ecmaVersion >= 16;\n    var known = state.groupNames[state.lastStringValue];\n    if (known) {\n      if (trackDisjunction) {\n        for (var i = 0, list = known; i < list.length; i += 1) {\n          var altID = list[i];\n\n          if (!altID.separatedFrom(state.branchID))\n            { state.raise(\"Duplicate capture group name\"); }\n        }\n      } else {\n        state.raise(\"Duplicate capture group name\");\n      }\n    }\n    if (trackDisjunction) {\n      (known || (state.groupNames[state.lastStringValue] = [])).push(state.branchID);\n    } else {\n      state.groupNames[state.lastStringValue] = true;\n    }\n  }\n};\n\n// GroupName ::\n//   `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatGroupName = function(state) {\n  state.lastStringValue = \"\";\n  if (state.eat(0x3C /* < */)) {\n    if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n      return true\n    }\n    state.raise(\"Invalid capture group name\");\n  }\n  return false\n};\n\n// RegExpIdentifierName ::\n//   RegExpIdentifierStart\n//   RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatRegExpIdentifierName = function(state) {\n  state.lastStringValue = \"\";\n  if (this.regexp_eatRegExpIdentifierStart(state)) {\n    state.lastStringValue += codePointToString(state.lastIntValue);\n    while (this.regexp_eatRegExpIdentifierPart(state)) {\n      state.lastStringValue += codePointToString(state.lastIntValue);\n    }\n    return true\n  }\n  return false\n};\n\n// RegExpIdentifierStart ::\n//   UnicodeIDStart\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[+U]\npp$1.regexp_eatRegExpIdentifierStart = function(state) {\n  var start = state.pos;\n  var forceU = this.options.ecmaVersion >= 11;\n  var ch = state.current(forceU);\n  state.advance(forceU);\n\n  if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n    ch = state.lastIntValue;\n  }\n  if (isRegExpIdentifierStart(ch)) {\n    state.lastIntValue = ch;\n    return true\n  }\n\n  state.pos = start;\n  return false\n};\nfunction isRegExpIdentifierStart(ch) {\n  return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n//   UnicodeIDContinue\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[+U]\n//   <ZWNJ>\n//   <ZWJ>\npp$1.regexp_eatRegExpIdentifierPart = function(state) {\n  var start = state.pos;\n  var forceU = this.options.ecmaVersion >= 11;\n  var ch = state.current(forceU);\n  state.advance(forceU);\n\n  if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n    ch = state.lastIntValue;\n  }\n  if (isRegExpIdentifierPart(ch)) {\n    state.lastIntValue = ch;\n    return true\n  }\n\n  state.pos = start;\n  return false\n};\nfunction isRegExpIdentifierPart(ch) {\n  return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$1.regexp_eatAtomEscape = function(state) {\n  if (\n    this.regexp_eatBackReference(state) ||\n    this.regexp_eatCharacterClassEscape(state) ||\n    this.regexp_eatCharacterEscape(state) ||\n    (state.switchN && this.regexp_eatKGroupName(state))\n  ) {\n    return true\n  }\n  if (state.switchU) {\n    // Make the same message as V8.\n    if (state.current() === 0x63 /* c */) {\n      state.raise(\"Invalid unicode escape\");\n    }\n    state.raise(\"Invalid escape\");\n  }\n  return false\n};\npp$1.regexp_eatBackReference = function(state) {\n  var start = state.pos;\n  if (this.regexp_eatDecimalEscape(state)) {\n    var n = state.lastIntValue;\n    if (state.switchU) {\n      // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n      if (n > state.maxBackReference) {\n        state.maxBackReference = n;\n      }\n      return true\n    }\n    if (n <= state.numCapturingParens) {\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatKGroupName = function(state) {\n  if (state.eat(0x6B /* k */)) {\n    if (this.regexp_eatGroupName(state)) {\n      state.backReferenceNames.push(state.lastStringValue);\n      return true\n    }\n    state.raise(\"Invalid named reference\");\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$1.regexp_eatCharacterEscape = function(state) {\n  return (\n    this.regexp_eatControlEscape(state) ||\n    this.regexp_eatCControlLetter(state) ||\n    this.regexp_eatZero(state) ||\n    this.regexp_eatHexEscapeSequence(state) ||\n    this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n    (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n    this.regexp_eatIdentityEscape(state)\n  )\n};\npp$1.regexp_eatCControlLetter = function(state) {\n  var start = state.pos;\n  if (state.eat(0x63 /* c */)) {\n    if (this.regexp_eatControlLetter(state)) {\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatZero = function(state) {\n  if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n    state.lastIntValue = 0;\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$1.regexp_eatControlEscape = function(state) {\n  var ch = state.current();\n  if (ch === 0x74 /* t */) {\n    state.lastIntValue = 0x09; /* \\t */\n    state.advance();\n    return true\n  }\n  if (ch === 0x6E /* n */) {\n    state.lastIntValue = 0x0A; /* \\n */\n    state.advance();\n    return true\n  }\n  if (ch === 0x76 /* v */) {\n    state.lastIntValue = 0x0B; /* \\v */\n    state.advance();\n    return true\n  }\n  if (ch === 0x66 /* f */) {\n    state.lastIntValue = 0x0C; /* \\f */\n    state.advance();\n    return true\n  }\n  if (ch === 0x72 /* r */) {\n    state.lastIntValue = 0x0D; /* \\r */\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$1.regexp_eatControlLetter = function(state) {\n  var ch = state.current();\n  if (isControlLetter(ch)) {\n    state.lastIntValue = ch % 0x20;\n    state.advance();\n    return true\n  }\n  return false\n};\nfunction isControlLetter(ch) {\n  return (\n    (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n    (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n  if ( forceU === void 0 ) forceU = false;\n\n  var start = state.pos;\n  var switchU = forceU || state.switchU;\n\n  if (state.eat(0x75 /* u */)) {\n    if (this.regexp_eatFixedHexDigits(state, 4)) {\n      var lead = state.lastIntValue;\n      if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n        var leadSurrogateEnd = state.pos;\n        if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n          var trail = state.lastIntValue;\n          if (trail >= 0xDC00 && trail <= 0xDFFF) {\n            state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n            return true\n          }\n        }\n        state.pos = leadSurrogateEnd;\n        state.lastIntValue = lead;\n      }\n      return true\n    }\n    if (\n      switchU &&\n      state.eat(0x7B /* { */) &&\n      this.regexp_eatHexDigits(state) &&\n      state.eat(0x7D /* } */) &&\n      isValidUnicode(state.lastIntValue)\n    ) {\n      return true\n    }\n    if (switchU) {\n      state.raise(\"Invalid unicode escape\");\n    }\n    state.pos = start;\n  }\n\n  return false\n};\nfunction isValidUnicode(ch) {\n  return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$1.regexp_eatIdentityEscape = function(state) {\n  if (state.switchU) {\n    if (this.regexp_eatSyntaxCharacter(state)) {\n      return true\n    }\n    if (state.eat(0x2F /* / */)) {\n      state.lastIntValue = 0x2F; /* / */\n      return true\n    }\n    return false\n  }\n\n  var ch = state.current();\n  if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$1.regexp_eatDecimalEscape = function(state) {\n  state.lastIntValue = 0;\n  var ch = state.current();\n  if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n    do {\n      state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n      state.advance();\n    } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n    return true\n  }\n  return false\n};\n\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar CharSetNone = 0; // Nothing parsed\nvar CharSetOk = 1; // Construct parsed, cannot contain strings\nvar CharSetString = 2; // Construct parsed, can contain strings\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$1.regexp_eatCharacterClassEscape = function(state) {\n  var ch = state.current();\n\n  if (isCharacterClassEscape(ch)) {\n    state.lastIntValue = -1;\n    state.advance();\n    return CharSetOk\n  }\n\n  var negate = false;\n  if (\n    state.switchU &&\n    this.options.ecmaVersion >= 9 &&\n    ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n  ) {\n    state.lastIntValue = -1;\n    state.advance();\n    var result;\n    if (\n      state.eat(0x7B /* { */) &&\n      (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n      state.eat(0x7D /* } */)\n    ) {\n      if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n      return result\n    }\n    state.raise(\"Invalid property name\");\n  }\n\n  return CharSetNone\n};\n\nfunction isCharacterClassEscape(ch) {\n  return (\n    ch === 0x64 /* d */ ||\n    ch === 0x44 /* D */ ||\n    ch === 0x73 /* s */ ||\n    ch === 0x53 /* S */ ||\n    ch === 0x77 /* w */ ||\n    ch === 0x57 /* W */\n  )\n}\n\n// UnicodePropertyValueExpression ::\n//   UnicodePropertyName `=` UnicodePropertyValue\n//   LoneUnicodePropertyNameOrValue\npp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n  var start = state.pos;\n\n  // UnicodePropertyName `=` UnicodePropertyValue\n  if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n    var name = state.lastStringValue;\n    if (this.regexp_eatUnicodePropertyValue(state)) {\n      var value = state.lastStringValue;\n      this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n      return CharSetOk\n    }\n  }\n  state.pos = start;\n\n  // LoneUnicodePropertyNameOrValue\n  if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n    var nameOrValue = state.lastStringValue;\n    return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n  }\n  return CharSetNone\n};\n\npp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n  if (!hasOwn(state.unicodeProperties.nonBinary, name))\n    { state.raise(\"Invalid property name\"); }\n  if (!state.unicodeProperties.nonBinary[name].test(value))\n    { state.raise(\"Invalid property value\"); }\n};\n\npp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n  if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n  if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n  state.raise(\"Invalid property name\");\n};\n\n// UnicodePropertyName ::\n//   UnicodePropertyNameCharacters\npp$1.regexp_eatUnicodePropertyName = function(state) {\n  var ch = 0;\n  state.lastStringValue = \"\";\n  while (isUnicodePropertyNameCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString(ch);\n    state.advance();\n  }\n  return state.lastStringValue !== \"\"\n};\n\nfunction isUnicodePropertyNameCharacter(ch) {\n  return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n//   UnicodePropertyValueCharacters\npp$1.regexp_eatUnicodePropertyValue = function(state) {\n  var ch = 0;\n  state.lastStringValue = \"\";\n  while (isUnicodePropertyValueCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString(ch);\n    state.advance();\n  }\n  return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n  return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n//   UnicodePropertyValueCharacters\npp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n  return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$1.regexp_eatCharacterClass = function(state) {\n  if (state.eat(0x5B /* [ */)) {\n    var negate = state.eat(0x5E /* ^ */);\n    var result = this.regexp_classContents(state);\n    if (!state.eat(0x5D /* ] */))\n      { state.raise(\"Unterminated character class\"); }\n    if (negate && result === CharSetString)\n      { state.raise(\"Negated character class may contain strings\"); }\n    return true\n  }\n  return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\npp$1.regexp_classContents = function(state) {\n  if (state.current() === 0x5D /* ] */) { return CharSetOk }\n  if (state.switchV) { return this.regexp_classSetExpression(state) }\n  this.regexp_nonEmptyClassRanges(state);\n  return CharSetOk\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$1.regexp_nonEmptyClassRanges = function(state) {\n  while (this.regexp_eatClassAtom(state)) {\n    var left = state.lastIntValue;\n    if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n      var right = state.lastIntValue;\n      if (state.switchU && (left === -1 || right === -1)) {\n        state.raise(\"Invalid character class\");\n      }\n      if (left !== -1 && right !== -1 && left > right) {\n        state.raise(\"Range out of order in character class\");\n      }\n    }\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$1.regexp_eatClassAtom = function(state) {\n  var start = state.pos;\n\n  if (state.eat(0x5C /* \\ */)) {\n    if (this.regexp_eatClassEscape(state)) {\n      return true\n    }\n    if (state.switchU) {\n      // Make the same message as V8.\n      var ch$1 = state.current();\n      if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n        state.raise(\"Invalid class escape\");\n      }\n      state.raise(\"Invalid escape\");\n    }\n    state.pos = start;\n  }\n\n  var ch = state.current();\n  if (ch !== 0x5D /* ] */) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$1.regexp_eatClassEscape = function(state) {\n  var start = state.pos;\n\n  if (state.eat(0x62 /* b */)) {\n    state.lastIntValue = 0x08; /* <BS> */\n    return true\n  }\n\n  if (state.switchU && state.eat(0x2D /* - */)) {\n    state.lastIntValue = 0x2D; /* - */\n    return true\n  }\n\n  if (!state.switchU && state.eat(0x63 /* c */)) {\n    if (this.regexp_eatClassControlLetter(state)) {\n      return true\n    }\n    state.pos = start;\n  }\n\n  return (\n    this.regexp_eatCharacterClassEscape(state) ||\n    this.regexp_eatCharacterEscape(state)\n  )\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\npp$1.regexp_classSetExpression = function(state) {\n  var result = CharSetOk, subResult;\n  if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n    if (subResult === CharSetString) { result = CharSetString; }\n    // https://tc39.es/ecma262/#prod-ClassIntersection\n    var start = state.pos;\n    while (state.eatChars([0x26, 0x26] /* && */)) {\n      if (\n        state.current() !== 0x26 /* & */ &&\n        (subResult = this.regexp_eatClassSetOperand(state))\n      ) {\n        if (subResult !== CharSetString) { result = CharSetOk; }\n        continue\n      }\n      state.raise(\"Invalid character in character class\");\n    }\n    if (start !== state.pos) { return result }\n    // https://tc39.es/ecma262/#prod-ClassSubtraction\n    while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n      if (this.regexp_eatClassSetOperand(state)) { continue }\n      state.raise(\"Invalid character in character class\");\n    }\n    if (start !== state.pos) { return result }\n  } else {\n    state.raise(\"Invalid character in character class\");\n  }\n  // https://tc39.es/ecma262/#prod-ClassUnion\n  for (;;) {\n    if (this.regexp_eatClassSetRange(state)) { continue }\n    subResult = this.regexp_eatClassSetOperand(state);\n    if (!subResult) { return result }\n    if (subResult === CharSetString) { result = CharSetString; }\n  }\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetRange\npp$1.regexp_eatClassSetRange = function(state) {\n  var start = state.pos;\n  if (this.regexp_eatClassSetCharacter(state)) {\n    var left = state.lastIntValue;\n    if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n      var right = state.lastIntValue;\n      if (left !== -1 && right !== -1 && left > right) {\n        state.raise(\"Range out of order in character class\");\n      }\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetOperand\npp$1.regexp_eatClassSetOperand = function(state) {\n  if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n  return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n};\n\n// https://tc39.es/ecma262/#prod-NestedClass\npp$1.regexp_eatNestedClass = function(state) {\n  var start = state.pos;\n  if (state.eat(0x5B /* [ */)) {\n    var negate = state.eat(0x5E /* ^ */);\n    var result = this.regexp_classContents(state);\n    if (state.eat(0x5D /* ] */)) {\n      if (negate && result === CharSetString) {\n        state.raise(\"Negated character class may contain strings\");\n      }\n      return result\n    }\n    state.pos = start;\n  }\n  if (state.eat(0x5C /* \\ */)) {\n    var result$1 = this.regexp_eatCharacterClassEscape(state);\n    if (result$1) {\n      return result$1\n    }\n    state.pos = start;\n  }\n  return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\npp$1.regexp_eatClassStringDisjunction = function(state) {\n  var start = state.pos;\n  if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n    if (state.eat(0x7B /* { */)) {\n      var result = this.regexp_classStringDisjunctionContents(state);\n      if (state.eat(0x7D /* } */)) {\n        return result\n      }\n    } else {\n      // Make the same message as V8.\n      state.raise(\"Invalid escape\");\n    }\n    state.pos = start;\n  }\n  return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\npp$1.regexp_classStringDisjunctionContents = function(state) {\n  var result = this.regexp_classString(state);\n  while (state.eat(0x7C /* | */)) {\n    if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n  }\n  return result\n};\n\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\npp$1.regexp_classString = function(state) {\n  var count = 0;\n  while (this.regexp_eatClassSetCharacter(state)) { count++; }\n  return count === 1 ? CharSetOk : CharSetString\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\npp$1.regexp_eatClassSetCharacter = function(state) {\n  var start = state.pos;\n  if (state.eat(0x5C /* \\ */)) {\n    if (\n      this.regexp_eatCharacterEscape(state) ||\n      this.regexp_eatClassSetReservedPunctuator(state)\n    ) {\n      return true\n    }\n    if (state.eat(0x62 /* b */)) {\n      state.lastIntValue = 0x08; /* <BS> */\n      return true\n    }\n    state.pos = start;\n    return false\n  }\n  var ch = state.current();\n  if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n  if (isClassSetSyntaxCharacter(ch)) { return false }\n  state.advance();\n  state.lastIntValue = ch;\n  return true\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction isClassSetReservedDoublePunctuatorCharacter(ch) {\n  return (\n    ch === 0x21 /* ! */ ||\n    ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n    ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n    ch === 0x2E /* . */ ||\n    ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n    ch === 0x5E /* ^ */ ||\n    ch === 0x60 /* ` */ ||\n    ch === 0x7E /* ~ */\n  )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction isClassSetSyntaxCharacter(ch) {\n  return (\n    ch === 0x28 /* ( */ ||\n    ch === 0x29 /* ) */ ||\n    ch === 0x2D /* - */ ||\n    ch === 0x2F /* / */ ||\n    ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n    ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n  )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\npp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n  var ch = state.current();\n  if (isClassSetReservedPunctuator(ch)) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction isClassSetReservedPunctuator(ch) {\n  return (\n    ch === 0x21 /* ! */ ||\n    ch === 0x23 /* # */ ||\n    ch === 0x25 /* % */ ||\n    ch === 0x26 /* & */ ||\n    ch === 0x2C /* , */ ||\n    ch === 0x2D /* - */ ||\n    ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n    ch === 0x40 /* @ */ ||\n    ch === 0x60 /* ` */ ||\n    ch === 0x7E /* ~ */\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$1.regexp_eatClassControlLetter = function(state) {\n  var ch = state.current();\n  if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n    state.lastIntValue = ch % 0x20;\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatHexEscapeSequence = function(state) {\n  var start = state.pos;\n  if (state.eat(0x78 /* x */)) {\n    if (this.regexp_eatFixedHexDigits(state, 2)) {\n      return true\n    }\n    if (state.switchU) {\n      state.raise(\"Invalid escape\");\n    }\n    state.pos = start;\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$1.regexp_eatDecimalDigits = function(state) {\n  var start = state.pos;\n  var ch = 0;\n  state.lastIntValue = 0;\n  while (isDecimalDigit(ch = state.current())) {\n    state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n    state.advance();\n  }\n  return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n  return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$1.regexp_eatHexDigits = function(state) {\n  var start = state.pos;\n  var ch = 0;\n  state.lastIntValue = 0;\n  while (isHexDigit(ch = state.current())) {\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n    state.advance();\n  }\n  return state.pos !== start\n};\nfunction isHexDigit(ch) {\n  return (\n    (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n    (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n    (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n  )\n}\nfunction hexToInt(ch) {\n  if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n    return 10 + (ch - 0x41 /* A */)\n  }\n  if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n    return 10 + (ch - 0x61 /* a */)\n  }\n  return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n  if (this.regexp_eatOctalDigit(state)) {\n    var n1 = state.lastIntValue;\n    if (this.regexp_eatOctalDigit(state)) {\n      var n2 = state.lastIntValue;\n      if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n        state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n      } else {\n        state.lastIntValue = n1 * 8 + n2;\n      }\n    } else {\n      state.lastIntValue = n1;\n    }\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$1.regexp_eatOctalDigit = function(state) {\n  var ch = state.current();\n  if (isOctalDigit(ch)) {\n    state.lastIntValue = ch - 0x30; /* 0 */\n    state.advance();\n    return true\n  }\n  state.lastIntValue = 0;\n  return false\n};\nfunction isOctalDigit(ch) {\n  return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatFixedHexDigits = function(state, length) {\n  var start = state.pos;\n  state.lastIntValue = 0;\n  for (var i = 0; i < length; ++i) {\n    var ch = state.current();\n    if (!isHexDigit(ch)) {\n      state.pos = start;\n      return false\n    }\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n    state.advance();\n  }\n  return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n  this.type = p.type;\n  this.value = p.value;\n  this.start = p.start;\n  this.end = p.end;\n  if (p.options.locations)\n    { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n  if (p.options.ranges)\n    { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp = Parser.prototype;\n\n// Move to the next token\n\npp.next = function(ignoreEscapeSequenceInKeyword) {\n  if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n    { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n  if (this.options.onToken)\n    { this.options.onToken(new Token(this)); }\n\n  this.lastTokEnd = this.end;\n  this.lastTokStart = this.start;\n  this.lastTokEndLoc = this.endLoc;\n  this.lastTokStartLoc = this.startLoc;\n  this.nextToken();\n};\n\npp.getToken = function() {\n  this.next();\n  return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n  { pp[Symbol.iterator] = function() {\n    var this$1$1 = this;\n\n    return {\n      next: function () {\n        var token = this$1$1.getToken();\n        return {\n          done: token.type === types$1.eof,\n          value: token\n        }\n      }\n    }\n  }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n  var curContext = this.curContext();\n  if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n  this.start = this.pos;\n  if (this.options.locations) { this.startLoc = this.curPosition(); }\n  if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n  if (curContext.override) { return curContext.override(this) }\n  else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp.readToken = function(code) {\n  // Identifier or keyword. '\\uXXXX' sequences are allowed in\n  // identifiers, so '\\' also dispatches to that.\n  if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n    { return this.readWord() }\n\n  return this.getTokenFromCode(code)\n};\n\npp.fullCharCodeAtPos = function() {\n  var code = this.input.charCodeAt(this.pos);\n  if (code <= 0xd7ff || code >= 0xdc00) { return code }\n  var next = this.input.charCodeAt(this.pos + 1);\n  return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp.skipBlockComment = function() {\n  var startLoc = this.options.onComment && this.curPosition();\n  var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n  if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n  this.pos = end + 2;\n  if (this.options.locations) {\n    for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n      ++this.curLine;\n      pos = this.lineStart = nextBreak;\n    }\n  }\n  if (this.options.onComment)\n    { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n                           startLoc, this.curPosition()); }\n};\n\npp.skipLineComment = function(startSkip) {\n  var start = this.pos;\n  var startLoc = this.options.onComment && this.curPosition();\n  var ch = this.input.charCodeAt(this.pos += startSkip);\n  while (this.pos < this.input.length && !isNewLine(ch)) {\n    ch = this.input.charCodeAt(++this.pos);\n  }\n  if (this.options.onComment)\n    { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n                           startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n  loop: while (this.pos < this.input.length) {\n    var ch = this.input.charCodeAt(this.pos);\n    switch (ch) {\n    case 32: case 160: // ' '\n      ++this.pos;\n      break\n    case 13:\n      if (this.input.charCodeAt(this.pos + 1) === 10) {\n        ++this.pos;\n      }\n    case 10: case 8232: case 8233:\n      ++this.pos;\n      if (this.options.locations) {\n        ++this.curLine;\n        this.lineStart = this.pos;\n      }\n      break\n    case 47: // '/'\n      switch (this.input.charCodeAt(this.pos + 1)) {\n      case 42: // '*'\n        this.skipBlockComment();\n        break\n      case 47:\n        this.skipLineComment(2);\n        break\n      default:\n        break loop\n      }\n      break\n    default:\n      if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n        ++this.pos;\n      } else {\n        break loop\n      }\n    }\n  }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n  this.end = this.pos;\n  if (this.options.locations) { this.endLoc = this.curPosition(); }\n  var prevType = this.type;\n  this.type = type;\n  this.value = val;\n\n  this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next >= 48 && next <= 57) { return this.readNumber(true) }\n  var next2 = this.input.charCodeAt(this.pos + 2);\n  if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n    this.pos += 3;\n    return this.finishToken(types$1.ellipsis)\n  } else {\n    ++this.pos;\n    return this.finishToken(types$1.dot)\n  }\n};\n\npp.readToken_slash = function() { // '/'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(types$1.slash, 1)\n};\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n  var next = this.input.charCodeAt(this.pos + 1);\n  var size = 1;\n  var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n  // exponentiation operator ** and **=\n  if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n    ++size;\n    tokentype = types$1.starstar;\n    next = this.input.charCodeAt(this.pos + 2);\n  }\n\n  if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n  return this.finishOp(tokentype, size)\n};\n\npp.readToken_pipe_amp = function(code) { // '|&'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === code) {\n    if (this.options.ecmaVersion >= 12) {\n      var next2 = this.input.charCodeAt(this.pos + 2);\n      if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n    }\n    return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n  }\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n};\n\npp.readToken_caret = function() { // '^'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(types$1.bitwiseXOR, 1)\n};\n\npp.readToken_plus_min = function(code) { // '+-'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === code) {\n    if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n        (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n      // A `-->` line comment\n      this.skipLineComment(3);\n      this.skipSpace();\n      return this.nextToken()\n    }\n    return this.finishOp(types$1.incDec, 2)\n  }\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(types$1.plusMin, 1)\n};\n\npp.readToken_lt_gt = function(code) { // '<>'\n  var next = this.input.charCodeAt(this.pos + 1);\n  var size = 1;\n  if (next === code) {\n    size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n    if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n    return this.finishOp(types$1.bitShift, size)\n  }\n  if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n      this.input.charCodeAt(this.pos + 3) === 45) {\n    // `<!--`, an XML-style comment that should be interpreted as a line comment\n    this.skipLineComment(4);\n    this.skipSpace();\n    return this.nextToken()\n  }\n  if (next === 61) { size = 2; }\n  return this.finishOp(types$1.relational, size)\n};\n\npp.readToken_eq_excl = function(code) { // '=!'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === 61) { return this.finishOp(types$1.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }\n  if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n    this.pos += 2;\n    return this.finishToken(types$1.arrow)\n  }\n  return this.finishOp(code === 61 ? types$1.eq : types$1.prefix, 1)\n};\n\npp.readToken_question = function() { // '?'\n  var ecmaVersion = this.options.ecmaVersion;\n  if (ecmaVersion >= 11) {\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (next === 46) {\n      var next2 = this.input.charCodeAt(this.pos + 2);\n      if (next2 < 48 || next2 > 57) { return this.finishOp(types$1.questionDot, 2) }\n    }\n    if (next === 63) {\n      if (ecmaVersion >= 12) {\n        var next2$1 = this.input.charCodeAt(this.pos + 2);\n        if (next2$1 === 61) { return this.finishOp(types$1.assign, 3) }\n      }\n      return this.finishOp(types$1.coalesce, 2)\n    }\n  }\n  return this.finishOp(types$1.question, 1)\n};\n\npp.readToken_numberSign = function() { // '#'\n  var ecmaVersion = this.options.ecmaVersion;\n  var code = 35; // '#'\n  if (ecmaVersion >= 13) {\n    ++this.pos;\n    code = this.fullCharCodeAtPos();\n    if (isIdentifierStart(code, true) || code === 92 /* '\\' */) {\n      return this.finishToken(types$1.privateId, this.readWord1())\n    }\n  }\n\n  this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.getTokenFromCode = function(code) {\n  switch (code) {\n  // The interpretation of a dot depends on whether it is followed\n  // by a digit or another two dots.\n  case 46: // '.'\n    return this.readToken_dot()\n\n  // Punctuation tokens.\n  case 40: ++this.pos; return this.finishToken(types$1.parenL)\n  case 41: ++this.pos; return this.finishToken(types$1.parenR)\n  case 59: ++this.pos; return this.finishToken(types$1.semi)\n  case 44: ++this.pos; return this.finishToken(types$1.comma)\n  case 91: ++this.pos; return this.finishToken(types$1.bracketL)\n  case 93: ++this.pos; return this.finishToken(types$1.bracketR)\n  case 123: ++this.pos; return this.finishToken(types$1.braceL)\n  case 125: ++this.pos; return this.finishToken(types$1.braceR)\n  case 58: ++this.pos; return this.finishToken(types$1.colon)\n\n  case 96: // '`'\n    if (this.options.ecmaVersion < 6) { break }\n    ++this.pos;\n    return this.finishToken(types$1.backQuote)\n\n  case 48: // '0'\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number\n    if (this.options.ecmaVersion >= 6) {\n      if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number\n      if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number\n    }\n\n  // Anything else beginning with a digit is an integer, octal\n  // number, or float.\n  case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n    return this.readNumber(false)\n\n  // Quotes produce strings.\n  case 34: case 39: // '\"', \"'\"\n    return this.readString(code)\n\n  // Operators are parsed inline in tiny state machines. '=' (61) is\n  // often referred to. `finishOp` simply skips the amount of\n  // characters it is given as second argument, and returns a token\n  // of the type given by its first argument.\n  case 47: // '/'\n    return this.readToken_slash()\n\n  case 37: case 42: // '%*'\n    return this.readToken_mult_modulo_exp(code)\n\n  case 124: case 38: // '|&'\n    return this.readToken_pipe_amp(code)\n\n  case 94: // '^'\n    return this.readToken_caret()\n\n  case 43: case 45: // '+-'\n    return this.readToken_plus_min(code)\n\n  case 60: case 62: // '<>'\n    return this.readToken_lt_gt(code)\n\n  case 61: case 33: // '=!'\n    return this.readToken_eq_excl(code)\n\n  case 63: // '?'\n    return this.readToken_question()\n\n  case 126: // '~'\n    return this.finishOp(types$1.prefix, 1)\n\n  case 35: // '#'\n    return this.readToken_numberSign()\n  }\n\n  this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.finishOp = function(type, size) {\n  var str = this.input.slice(this.pos, this.pos + size);\n  this.pos += size;\n  return this.finishToken(type, str)\n};\n\npp.readRegexp = function() {\n  var escaped, inClass, start = this.pos;\n  for (;;) {\n    if (this.pos >= this.input.length) { this.raise(start, \"Unterminated regular expression\"); }\n    var ch = this.input.charAt(this.pos);\n    if (lineBreak.test(ch)) { this.raise(start, \"Unterminated regular expression\"); }\n    if (!escaped) {\n      if (ch === \"[\") { inClass = true; }\n      else if (ch === \"]\" && inClass) { inClass = false; }\n      else if (ch === \"/\" && !inClass) { break }\n      escaped = ch === \"\\\\\";\n    } else { escaped = false; }\n    ++this.pos;\n  }\n  var pattern = this.input.slice(start, this.pos);\n  ++this.pos;\n  var flagsStart = this.pos;\n  var flags = this.readWord1();\n  if (this.containsEsc) { this.unexpected(flagsStart); }\n\n  // Validate pattern\n  var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n  state.reset(start, pattern, flags);\n  this.validateRegExpFlags(state);\n  this.validateRegExpPattern(state);\n\n  // Create Literal#value property value.\n  var value = null;\n  try {\n    value = new RegExp(pattern, flags);\n  } catch (e) {\n    // ESTree requires null if it failed to instantiate RegExp object.\n    // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n  }\n\n  return this.finishToken(types$1.regexp, {pattern: pattern, flags: flags, value: value})\n};\n\n// Read an integer in the given radix. Return null if zero digits\n// were read, the integer value otherwise. When `len` is given, this\n// will return `null` unless the integer has exactly `len` digits.\n\npp.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {\n  // `len` is used for character escape sequences. In that case, disallow separators.\n  var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;\n\n  // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)\n  // and isn't fraction part nor exponent part. In that case, if the first digit\n  // is zero then disallow separators.\n  var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;\n\n  var start = this.pos, total = 0, lastCode = 0;\n  for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {\n    var code = this.input.charCodeAt(this.pos), val = (void 0);\n\n    if (allowSeparators && code === 95) {\n      if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed in legacy octal numeric literals\"); }\n      if (lastCode === 95) { this.raiseRecoverable(this.pos, \"Numeric separator must be exactly one underscore\"); }\n      if (i === 0) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed at the first of digits\"); }\n      lastCode = code;\n      continue\n    }\n\n    if (code >= 97) { val = code - 97 + 10; } // a\n    else if (code >= 65) { val = code - 65 + 10; } // A\n    else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9\n    else { val = Infinity; }\n    if (val >= radix) { break }\n    lastCode = code;\n    total = total * radix + val;\n  }\n\n  if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, \"Numeric separator is not allowed at the last of digits\"); }\n  if (this.pos === start || len != null && this.pos - start !== len) { return null }\n\n  return total\n};\n\nfunction stringToNumber(str, isLegacyOctalNumericLiteral) {\n  if (isLegacyOctalNumericLiteral) {\n    return parseInt(str, 8)\n  }\n\n  // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.\n  return parseFloat(str.replace(/_/g, \"\"))\n}\n\nfunction stringToBigInt(str) {\n  if (typeof BigInt !== \"function\") {\n    return null\n  }\n\n  // `BigInt(value)` throws syntax error if the string contains numeric separators.\n  return BigInt(str.replace(/_/g, \"\"))\n}\n\npp.readRadixNumber = function(radix) {\n  var start = this.pos;\n  this.pos += 2; // 0x\n  var val = this.readInt(radix);\n  if (val == null) { this.raise(this.start + 2, \"Expected number in radix \" + radix); }\n  if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {\n    val = stringToBigInt(this.input.slice(start, this.pos));\n    ++this.pos;\n  } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n  return this.finishToken(types$1.num, val)\n};\n\n// Read an integer, octal integer, or floating-point number.\n\npp.readNumber = function(startsWithDot) {\n  var start = this.pos;\n  if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, \"Invalid number\"); }\n  var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n  if (octal && this.strict) { this.raise(start, \"Invalid number\"); }\n  var next = this.input.charCodeAt(this.pos);\n  if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {\n    var val$1 = stringToBigInt(this.input.slice(start, this.pos));\n    ++this.pos;\n    if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n    return this.finishToken(types$1.num, val$1)\n  }\n  if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }\n  if (next === 46 && !octal) { // '.'\n    ++this.pos;\n    this.readInt(10);\n    next = this.input.charCodeAt(this.pos);\n  }\n  if ((next === 69 || next === 101) && !octal) { // 'eE'\n    next = this.input.charCodeAt(++this.pos);\n    if (next === 43 || next === 45) { ++this.pos; } // '+-'\n    if (this.readInt(10) === null) { this.raise(start, \"Invalid number\"); }\n  }\n  if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n\n  var val = stringToNumber(this.input.slice(start, this.pos), octal);\n  return this.finishToken(types$1.num, val)\n};\n\n// Read a string value, interpreting backslash-escapes.\n\npp.readCodePoint = function() {\n  var ch = this.input.charCodeAt(this.pos), code;\n\n  if (ch === 123) { // '{'\n    if (this.options.ecmaVersion < 6) { this.unexpected(); }\n    var codePos = ++this.pos;\n    code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos);\n    ++this.pos;\n    if (code > 0x10FFFF) { this.invalidStringToken(codePos, \"Code point out of bounds\"); }\n  } else {\n    code = this.readHexChar(4);\n  }\n  return code\n};\n\npp.readString = function(quote) {\n  var out = \"\", chunkStart = ++this.pos;\n  for (;;) {\n    if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated string constant\"); }\n    var ch = this.input.charCodeAt(this.pos);\n    if (ch === quote) { break }\n    if (ch === 92) { // '\\'\n      out += this.input.slice(chunkStart, this.pos);\n      out += this.readEscapedChar(false);\n      chunkStart = this.pos;\n    } else if (ch === 0x2028 || ch === 0x2029) {\n      if (this.options.ecmaVersion < 10) { this.raise(this.start, \"Unterminated string constant\"); }\n      ++this.pos;\n      if (this.options.locations) {\n        this.curLine++;\n        this.lineStart = this.pos;\n      }\n    } else {\n      if (isNewLine(ch)) { this.raise(this.start, \"Unterminated string constant\"); }\n      ++this.pos;\n    }\n  }\n  out += this.input.slice(chunkStart, this.pos++);\n  return this.finishToken(types$1.string, out)\n};\n\n// Reads template string tokens.\n\nvar INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\npp.tryReadTemplateToken = function() {\n  this.inTemplateElement = true;\n  try {\n    this.readTmplToken();\n  } catch (err) {\n    if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n      this.readInvalidTemplateToken();\n    } else {\n      throw err\n    }\n  }\n\n  this.inTemplateElement = false;\n};\n\npp.invalidStringToken = function(position, message) {\n  if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n    throw INVALID_TEMPLATE_ESCAPE_ERROR\n  } else {\n    this.raise(position, message);\n  }\n};\n\npp.readTmplToken = function() {\n  var out = \"\", chunkStart = this.pos;\n  for (;;) {\n    if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated template\"); }\n    var ch = this.input.charCodeAt(this.pos);\n    if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n      if (this.pos === this.start && (this.type === types$1.template || this.type === types$1.invalidTemplate)) {\n        if (ch === 36) {\n          this.pos += 2;\n          return this.finishToken(types$1.dollarBraceL)\n        } else {\n          ++this.pos;\n          return this.finishToken(types$1.backQuote)\n        }\n      }\n      out += this.input.slice(chunkStart, this.pos);\n      return this.finishToken(types$1.template, out)\n    }\n    if (ch === 92) { // '\\'\n      out += this.input.slice(chunkStart, this.pos);\n      out += this.readEscapedChar(true);\n      chunkStart = this.pos;\n    } else if (isNewLine(ch)) {\n      out += this.input.slice(chunkStart, this.pos);\n      ++this.pos;\n      switch (ch) {\n      case 13:\n        if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }\n      case 10:\n        out += \"\\n\";\n        break\n      default:\n        out += String.fromCharCode(ch);\n        break\n      }\n      if (this.options.locations) {\n        ++this.curLine;\n        this.lineStart = this.pos;\n      }\n      chunkStart = this.pos;\n    } else {\n      ++this.pos;\n    }\n  }\n};\n\n// Reads a template token to search for the end, without validating any escape sequences\npp.readInvalidTemplateToken = function() {\n  for (; this.pos < this.input.length; this.pos++) {\n    switch (this.input[this.pos]) {\n    case \"\\\\\":\n      ++this.pos;\n      break\n\n    case \"$\":\n      if (this.input[this.pos + 1] !== \"{\") { break }\n      // fall through\n    case \"`\":\n      return this.finishToken(types$1.invalidTemplate, this.input.slice(this.start, this.pos))\n\n    case \"\\r\":\n      if (this.input[this.pos + 1] === \"\\n\") { ++this.pos; }\n      // fall through\n    case \"\\n\": case \"\\u2028\": case \"\\u2029\":\n      ++this.curLine;\n      this.lineStart = this.pos + 1;\n      break\n    }\n  }\n  this.raise(this.start, \"Unterminated template\");\n};\n\n// Used to read escaped characters\n\npp.readEscapedChar = function(inTemplate) {\n  var ch = this.input.charCodeAt(++this.pos);\n  ++this.pos;\n  switch (ch) {\n  case 110: return \"\\n\" // 'n' -> '\\n'\n  case 114: return \"\\r\" // 'r' -> '\\r'\n  case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n  case 117: return codePointToString(this.readCodePoint()) // 'u'\n  case 116: return \"\\t\" // 't' -> '\\t'\n  case 98: return \"\\b\" // 'b' -> '\\b'\n  case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n  case 102: return \"\\f\" // 'f' -> '\\f'\n  case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\\r\\n'\n  case 10: // ' \\n'\n    if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n    return \"\"\n  case 56:\n  case 57:\n    if (this.strict) {\n      this.invalidStringToken(\n        this.pos - 1,\n        \"Invalid escape sequence\"\n      );\n    }\n    if (inTemplate) {\n      var codePos = this.pos - 1;\n\n      this.invalidStringToken(\n        codePos,\n        \"Invalid escape sequence in template string\"\n      );\n    }\n  default:\n    if (ch >= 48 && ch <= 55) {\n      var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n      var octal = parseInt(octalStr, 8);\n      if (octal > 255) {\n        octalStr = octalStr.slice(0, -1);\n        octal = parseInt(octalStr, 8);\n      }\n      this.pos += octalStr.length - 1;\n      ch = this.input.charCodeAt(this.pos);\n      if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n        this.invalidStringToken(\n          this.pos - 1 - octalStr.length,\n          inTemplate\n            ? \"Octal literal in template string\"\n            : \"Octal literal in strict mode\"\n        );\n      }\n      return String.fromCharCode(octal)\n    }\n    if (isNewLine(ch)) {\n      // Unicode new line characters after \\ get removed from output in both\n      // template literals and strings\n      if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n      return \"\"\n    }\n    return String.fromCharCode(ch)\n  }\n};\n\n// Used to read character escape sequences ('\\x', '\\u', '\\U').\n\npp.readHexChar = function(len) {\n  var codePos = this.pos;\n  var n = this.readInt(16, len);\n  if (n === null) { this.invalidStringToken(codePos, \"Bad character escape sequence\"); }\n  return n\n};\n\n// Read an identifier, and return it as a string. Sets `this.containsEsc`\n// to whether the word contained a '\\u' escape.\n//\n// Incrementally adds only escaped chars, adding other chunks as-is\n// as a micro-optimization.\n\npp.readWord1 = function() {\n  this.containsEsc = false;\n  var word = \"\", first = true, chunkStart = this.pos;\n  var astral = this.options.ecmaVersion >= 6;\n  while (this.pos < this.input.length) {\n    var ch = this.fullCharCodeAtPos();\n    if (isIdentifierChar(ch, astral)) {\n      this.pos += ch <= 0xffff ? 1 : 2;\n    } else if (ch === 92) { // \"\\\"\n      this.containsEsc = true;\n      word += this.input.slice(chunkStart, this.pos);\n      var escStart = this.pos;\n      if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n        { this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\"); }\n      ++this.pos;\n      var esc = this.readCodePoint();\n      if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n        { this.invalidStringToken(escStart, \"Invalid Unicode escape\"); }\n      word += codePointToString(esc);\n      chunkStart = this.pos;\n    } else {\n      break\n    }\n    first = false;\n  }\n  return word + this.input.slice(chunkStart, this.pos)\n};\n\n// Read an identifier or keyword token. Will check for reserved\n// words when necessary.\n\npp.readWord = function() {\n  var word = this.readWord1();\n  var type = types$1.name;\n  if (this.keywords.test(word)) {\n    type = keywords[word];\n  }\n  return this.finishToken(type, word)\n};\n\n// Acorn is a tiny, fast JavaScript parser written in JavaScript.\n//\n// Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and\n// various contributors and released under an MIT license.\n//\n// Git repositories for Acorn are available at\n//\n//     http://marijnhaverbeke.nl/git/acorn\n//     https://github.com/acornjs/acorn.git\n//\n// Please use the [github bug tracker][ghbt] to report issues.\n//\n// [ghbt]: https://github.com/acornjs/acorn/issues\n//\n// [walk]: util/walk.js\n\n\nvar version = \"8.14.0\";\n\nParser.acorn = {\n  Parser: Parser,\n  version: version,\n  defaultOptions: defaultOptions,\n  Position: Position,\n  SourceLocation: SourceLocation,\n  getLineInfo: getLineInfo,\n  Node: Node,\n  TokenType: TokenType,\n  tokTypes: types$1,\n  keywordTypes: keywords,\n  TokContext: TokContext,\n  tokContexts: types,\n  isIdentifierChar: isIdentifierChar,\n  isIdentifierStart: isIdentifierStart,\n  Token: Token,\n  isNewLine: isNewLine,\n  lineBreak: lineBreak,\n  lineBreakG: lineBreakG,\n  nonASCIIwhitespace: nonASCIIwhitespace\n};\n\n// The main exported interface (under `self.acorn` when in the\n// browser) is a `parse` function that takes a code string and returns\n// an abstract syntax tree as specified by the [ESTree spec][estree].\n//\n// [estree]: https://github.com/estree/estree\n\nfunction parse(input, options) {\n  return Parser.parse(input, options)\n}\n\n// This function tries to parse a single expression at a given\n// offset in a string. Useful for parsing mixed-language formats\n// that embed JavaScript expressions.\n\nfunction parseExpressionAt(input, pos, options) {\n  return Parser.parseExpressionAt(input, pos, options)\n}\n\n// Acorn is organized as a tokenizer and a recursive-descent parser.\n// The `tokenizer` export provides an interface to the tokenizer.\n\nfunction tokenizer(input, options) {\n  return Parser.tokenizer(input, options)\n}\n\nexport { Node, Parser, Position, SourceLocation, TokContext, Token, TokenType, defaultOptions, getLineInfo, isIdentifierChar, isIdentifierStart, isNewLine, keywords as keywordTypes, lineBreak, lineBreakG, nonASCIIwhitespace, parse, parseExpressionAt, types as tokContexts, types$1 as tokTypes, tokenizer, version };\n","// AST walker module for ESTree compatible trees\n\n// A simple walk is one where you simply specify callbacks to be\n// called on specific nodes. The last two arguments are optional. A\n// simple use would be\n//\n//     walk.simple(myTree, {\n//         Expression: function(node) { ... }\n//     });\n//\n// to do something with all expressions. All ESTree node types\n// can be used to identify node types, as well as Expression and\n// Statement, which denote categories of nodes.\n//\n// The base argument can be used to pass a custom (recursive)\n// walker, and state can be used to give this walked an initial\n// state.\n\nfunction simple(node, visitors, baseVisitor, state, override) {\n  if (!baseVisitor) { baseVisitor = base\n  ; }(function c(node, st, override) {\n    var type = override || node.type;\n    baseVisitor[type](node, st, c);\n    if (visitors[type]) { visitors[type](node, st); }\n  })(node, state, override);\n}\n\n// An ancestor walk keeps an array of ancestor nodes (including the\n// current node) and passes them to the callback as third parameter\n// (and also as state parameter when no other state is present).\nfunction ancestor(node, visitors, baseVisitor, state, override) {\n  var ancestors = [];\n  if (!baseVisitor) { baseVisitor = base\n  ; }(function c(node, st, override) {\n    var type = override || node.type;\n    var isNew = node !== ancestors[ancestors.length - 1];\n    if (isNew) { ancestors.push(node); }\n    baseVisitor[type](node, st, c);\n    if (visitors[type]) { visitors[type](node, st || ancestors, ancestors); }\n    if (isNew) { ancestors.pop(); }\n  })(node, state, override);\n}\n\n// A recursive walk is one where your functions override the default\n// walkers. They can modify and replace the state parameter that's\n// threaded through the walk, and can opt how and whether to walk\n// their child nodes (by calling their third argument on these\n// nodes).\nfunction recursive(node, state, funcs, baseVisitor, override) {\n  var visitor = funcs ? make(funcs, baseVisitor || undefined) : baseVisitor\n  ;(function c(node, st, override) {\n    visitor[override || node.type](node, st, c);\n  })(node, state, override);\n}\n\nfunction makeTest(test) {\n  if (typeof test === \"string\")\n    { return function (type) { return type === test; } }\n  else if (!test)\n    { return function () { return true; } }\n  else\n    { return test }\n}\n\nvar Found = function Found(node, state) { this.node = node; this.state = state; };\n\n// A full walk triggers the callback on each node\nfunction full(node, callback, baseVisitor, state, override) {\n  if (!baseVisitor) { baseVisitor = base; }\n  var last\n  ;(function c(node, st, override) {\n    var type = override || node.type;\n    baseVisitor[type](node, st, c);\n    if (last !== node) {\n      callback(node, st, type);\n      last = node;\n    }\n  })(node, state, override);\n}\n\n// An fullAncestor walk is like an ancestor walk, but triggers\n// the callback on each node\nfunction fullAncestor(node, callback, baseVisitor, state) {\n  if (!baseVisitor) { baseVisitor = base; }\n  var ancestors = [], last\n  ;(function c(node, st, override) {\n    var type = override || node.type;\n    var isNew = node !== ancestors[ancestors.length - 1];\n    if (isNew) { ancestors.push(node); }\n    baseVisitor[type](node, st, c);\n    if (last !== node) {\n      callback(node, st || ancestors, ancestors, type);\n      last = node;\n    }\n    if (isNew) { ancestors.pop(); }\n  })(node, state);\n}\n\n// Find a node with a given start, end, and type (all are optional,\n// null can be used as wildcard). Returns a {node, state} object, or\n// undefined when it doesn't find a matching node.\nfunction findNodeAt(node, start, end, test, baseVisitor, state) {\n  if (!baseVisitor) { baseVisitor = base; }\n  test = makeTest(test);\n  try {\n    (function c(node, st, override) {\n      var type = override || node.type;\n      if ((start == null || node.start <= start) &&\n          (end == null || node.end >= end))\n        { baseVisitor[type](node, st, c); }\n      if ((start == null || node.start === start) &&\n          (end == null || node.end === end) &&\n          test(type, node))\n        { throw new Found(node, st) }\n    })(node, state);\n  } catch (e) {\n    if (e instanceof Found) { return e }\n    throw e\n  }\n}\n\n// Find the innermost node of a given type that contains the given\n// position. Interface similar to findNodeAt.\nfunction findNodeAround(node, pos, test, baseVisitor, state) {\n  test = makeTest(test);\n  if (!baseVisitor) { baseVisitor = base; }\n  try {\n    (function c(node, st, override) {\n      var type = override || node.type;\n      if (node.start > pos || node.end < pos) { return }\n      baseVisitor[type](node, st, c);\n      if (test(type, node)) { throw new Found(node, st) }\n    })(node, state);\n  } catch (e) {\n    if (e instanceof Found) { return e }\n    throw e\n  }\n}\n\n// Find the outermost matching node after a given position.\nfunction findNodeAfter(node, pos, test, baseVisitor, state) {\n  test = makeTest(test);\n  if (!baseVisitor) { baseVisitor = base; }\n  try {\n    (function c(node, st, override) {\n      if (node.end < pos) { return }\n      var type = override || node.type;\n      if (node.start >= pos && test(type, node)) { throw new Found(node, st) }\n      baseVisitor[type](node, st, c);\n    })(node, state);\n  } catch (e) {\n    if (e instanceof Found) { return e }\n    throw e\n  }\n}\n\n// Find the outermost matching node before a given position.\nfunction findNodeBefore(node, pos, test, baseVisitor, state) {\n  test = makeTest(test);\n  if (!baseVisitor) { baseVisitor = base; }\n  var max\n  ;(function c(node, st, override) {\n    if (node.start > pos) { return }\n    var type = override || node.type;\n    if (node.end <= pos && (!max || max.node.end < node.end) && test(type, node))\n      { max = new Found(node, st); }\n    baseVisitor[type](node, st, c);\n  })(node, state);\n  return max\n}\n\n// Used to create a custom walker. Will fill in all missing node\n// type properties with the defaults.\nfunction make(funcs, baseVisitor) {\n  var visitor = Object.create(baseVisitor || base);\n  for (var type in funcs) { visitor[type] = funcs[type]; }\n  return visitor\n}\n\nfunction skipThrough(node, st, c) { c(node, st); }\nfunction ignore(_node, _st, _c) {}\n\n// Node walkers.\n\nvar base = {};\n\nbase.Program = base.BlockStatement = base.StaticBlock = function (node, st, c) {\n  for (var i = 0, list = node.body; i < list.length; i += 1)\n    {\n    var stmt = list[i];\n\n    c(stmt, st, \"Statement\");\n  }\n};\nbase.Statement = skipThrough;\nbase.EmptyStatement = ignore;\nbase.ExpressionStatement = base.ParenthesizedExpression = base.ChainExpression =\n  function (node, st, c) { return c(node.expression, st, \"Expression\"); };\nbase.IfStatement = function (node, st, c) {\n  c(node.test, st, \"Expression\");\n  c(node.consequent, st, \"Statement\");\n  if (node.alternate) { c(node.alternate, st, \"Statement\"); }\n};\nbase.LabeledStatement = function (node, st, c) { return c(node.body, st, \"Statement\"); };\nbase.BreakStatement = base.ContinueStatement = ignore;\nbase.WithStatement = function (node, st, c) {\n  c(node.object, st, \"Expression\");\n  c(node.body, st, \"Statement\");\n};\nbase.SwitchStatement = function (node, st, c) {\n  c(node.discriminant, st, \"Expression\");\n  for (var i = 0, list = node.cases; i < list.length; i += 1) {\n    var cs = list[i];\n\n    c(cs, st);\n  }\n};\nbase.SwitchCase = function (node, st, c) {\n  if (node.test) { c(node.test, st, \"Expression\"); }\n  for (var i = 0, list = node.consequent; i < list.length; i += 1)\n    {\n    var cons = list[i];\n\n    c(cons, st, \"Statement\");\n  }\n};\nbase.ReturnStatement = base.YieldExpression = base.AwaitExpression = function (node, st, c) {\n  if (node.argument) { c(node.argument, st, \"Expression\"); }\n};\nbase.ThrowStatement = base.SpreadElement =\n  function (node, st, c) { return c(node.argument, st, \"Expression\"); };\nbase.TryStatement = function (node, st, c) {\n  c(node.block, st, \"Statement\");\n  if (node.handler) { c(node.handler, st); }\n  if (node.finalizer) { c(node.finalizer, st, \"Statement\"); }\n};\nbase.CatchClause = function (node, st, c) {\n  if (node.param) { c(node.param, st, \"Pattern\"); }\n  c(node.body, st, \"Statement\");\n};\nbase.WhileStatement = base.DoWhileStatement = function (node, st, c) {\n  c(node.test, st, \"Expression\");\n  c(node.body, st, \"Statement\");\n};\nbase.ForStatement = function (node, st, c) {\n  if (node.init) { c(node.init, st, \"ForInit\"); }\n  if (node.test) { c(node.test, st, \"Expression\"); }\n  if (node.update) { c(node.update, st, \"Expression\"); }\n  c(node.body, st, \"Statement\");\n};\nbase.ForInStatement = base.ForOfStatement = function (node, st, c) {\n  c(node.left, st, \"ForInit\");\n  c(node.right, st, \"Expression\");\n  c(node.body, st, \"Statement\");\n};\nbase.ForInit = function (node, st, c) {\n  if (node.type === \"VariableDeclaration\") { c(node, st); }\n  else { c(node, st, \"Expression\"); }\n};\nbase.DebuggerStatement = ignore;\n\nbase.FunctionDeclaration = function (node, st, c) { return c(node, st, \"Function\"); };\nbase.VariableDeclaration = function (node, st, c) {\n  for (var i = 0, list = node.declarations; i < list.length; i += 1)\n    {\n    var decl = list[i];\n\n    c(decl, st);\n  }\n};\nbase.VariableDeclarator = function (node, st, c) {\n  c(node.id, st, \"Pattern\");\n  if (node.init) { c(node.init, st, \"Expression\"); }\n};\n\nbase.Function = function (node, st, c) {\n  if (node.id) { c(node.id, st, \"Pattern\"); }\n  for (var i = 0, list = node.params; i < list.length; i += 1)\n    {\n    var param = list[i];\n\n    c(param, st, \"Pattern\");\n  }\n  c(node.body, st, node.expression ? \"Expression\" : \"Statement\");\n};\n\nbase.Pattern = function (node, st, c) {\n  if (node.type === \"Identifier\")\n    { c(node, st, \"VariablePattern\"); }\n  else if (node.type === \"MemberExpression\")\n    { c(node, st, \"MemberPattern\"); }\n  else\n    { c(node, st); }\n};\nbase.VariablePattern = ignore;\nbase.MemberPattern = skipThrough;\nbase.RestElement = function (node, st, c) { return c(node.argument, st, \"Pattern\"); };\nbase.ArrayPattern = function (node, st, c) {\n  for (var i = 0, list = node.elements; i < list.length; i += 1) {\n    var elt = list[i];\n\n    if (elt) { c(elt, st, \"Pattern\"); }\n  }\n};\nbase.ObjectPattern = function (node, st, c) {\n  for (var i = 0, list = node.properties; i < list.length; i += 1) {\n    var prop = list[i];\n\n    if (prop.type === \"Property\") {\n      if (prop.computed) { c(prop.key, st, \"Expression\"); }\n      c(prop.value, st, \"Pattern\");\n    } else if (prop.type === \"RestElement\") {\n      c(prop.argument, st, \"Pattern\");\n    }\n  }\n};\n\nbase.Expression = skipThrough;\nbase.ThisExpression = base.Super = base.MetaProperty = ignore;\nbase.ArrayExpression = function (node, st, c) {\n  for (var i = 0, list = node.elements; i < list.length; i += 1) {\n    var elt = list[i];\n\n    if (elt) { c(elt, st, \"Expression\"); }\n  }\n};\nbase.ObjectExpression = function (node, st, c) {\n  for (var i = 0, list = node.properties; i < list.length; i += 1)\n    {\n    var prop = list[i];\n\n    c(prop, st);\n  }\n};\nbase.FunctionExpression = base.ArrowFunctionExpression = base.FunctionDeclaration;\nbase.SequenceExpression = function (node, st, c) {\n  for (var i = 0, list = node.expressions; i < list.length; i += 1)\n    {\n    var expr = list[i];\n\n    c(expr, st, \"Expression\");\n  }\n};\nbase.TemplateLiteral = function (node, st, c) {\n  for (var i = 0, list = node.quasis; i < list.length; i += 1)\n    {\n    var quasi = list[i];\n\n    c(quasi, st);\n  }\n\n  for (var i$1 = 0, list$1 = node.expressions; i$1 < list$1.length; i$1 += 1)\n    {\n    var expr = list$1[i$1];\n\n    c(expr, st, \"Expression\");\n  }\n};\nbase.TemplateElement = ignore;\nbase.UnaryExpression = base.UpdateExpression = function (node, st, c) {\n  c(node.argument, st, \"Expression\");\n};\nbase.BinaryExpression = base.LogicalExpression = function (node, st, c) {\n  c(node.left, st, \"Expression\");\n  c(node.right, st, \"Expression\");\n};\nbase.AssignmentExpression = base.AssignmentPattern = function (node, st, c) {\n  c(node.left, st, \"Pattern\");\n  c(node.right, st, \"Expression\");\n};\nbase.ConditionalExpression = function (node, st, c) {\n  c(node.test, st, \"Expression\");\n  c(node.consequent, st, \"Expression\");\n  c(node.alternate, st, \"Expression\");\n};\nbase.NewExpression = base.CallExpression = function (node, st, c) {\n  c(node.callee, st, \"Expression\");\n  if (node.arguments)\n    { for (var i = 0, list = node.arguments; i < list.length; i += 1)\n      {\n        var arg = list[i];\n\n        c(arg, st, \"Expression\");\n      } }\n};\nbase.MemberExpression = function (node, st, c) {\n  c(node.object, st, \"Expression\");\n  if (node.computed) { c(node.property, st, \"Expression\"); }\n};\nbase.ExportNamedDeclaration = base.ExportDefaultDeclaration = function (node, st, c) {\n  if (node.declaration)\n    { c(node.declaration, st, node.type === \"ExportNamedDeclaration\" || node.declaration.id ? \"Statement\" : \"Expression\"); }\n  if (node.source) { c(node.source, st, \"Expression\"); }\n};\nbase.ExportAllDeclaration = function (node, st, c) {\n  if (node.exported)\n    { c(node.exported, st); }\n  c(node.source, st, \"Expression\");\n};\nbase.ImportDeclaration = function (node, st, c) {\n  for (var i = 0, list = node.specifiers; i < list.length; i += 1)\n    {\n    var spec = list[i];\n\n    c(spec, st);\n  }\n  c(node.source, st, \"Expression\");\n};\nbase.ImportExpression = function (node, st, c) {\n  c(node.source, st, \"Expression\");\n};\nbase.ImportSpecifier = base.ImportDefaultSpecifier = base.ImportNamespaceSpecifier = base.Identifier = base.PrivateIdentifier = base.Literal = ignore;\n\nbase.TaggedTemplateExpression = function (node, st, c) {\n  c(node.tag, st, \"Expression\");\n  c(node.quasi, st, \"Expression\");\n};\nbase.ClassDeclaration = base.ClassExpression = function (node, st, c) { return c(node, st, \"Class\"); };\nbase.Class = function (node, st, c) {\n  if (node.id) { c(node.id, st, \"Pattern\"); }\n  if (node.superClass) { c(node.superClass, st, \"Expression\"); }\n  c(node.body, st);\n};\nbase.ClassBody = function (node, st, c) {\n  for (var i = 0, list = node.body; i < list.length; i += 1)\n    {\n    var elt = list[i];\n\n    c(elt, st);\n  }\n};\nbase.MethodDefinition = base.PropertyDefinition = base.Property = function (node, st, c) {\n  if (node.computed) { c(node.key, st, \"Expression\"); }\n  if (node.value) { c(node.value, st, \"Expression\"); }\n};\n\nexport { ancestor, base, findNodeAfter, findNodeAround, findNodeAt, findNodeBefore, full, fullAncestor, make, recursive, simple };\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Action, ActionInContext, AssertAction, AssertCheckedAction } from '@recorder/actions';\nimport * as acorn from 'acorn';\nimport type { AwaitExpression, Expression, ExpressionStatement } from 'acorn';\nimport * as walk from 'acorn-walk';\nimport { fromKeyboardModifiers } from 'playwright-core/lib/server/codegen/language';\nimport type { BrowserContextOptions, SmartKeyboardModifier } from 'playwright-core/lib/server/types';\nimport { locatorOrSelectorAsSelector } from 'playwright-core/lib/utils/isomorphic/locatorParser';\nimport type { CallMetadata } from '@protocol/callMetadata';\n\nexport type Location = CallMetadata['location'];\nexport type ActionInContextWithLocation = ActionInContext & { location?: Location };\n\ntype RouteFromHAROptions = {\n  url?: string,\n  notFound?: 'abort' | 'fallback',\n  update?: boolean,\n  updateContent?: 'attach' | 'embed',\n  updateMode?: 'minimal' | 'full'\n};\n\ntype RouteFromHARAction = { name: 'routeFromHAR', signals: [], har: string } & RouteFromHAROptions;\ntype ExtendedActionInContextWithLocation = ActionInContextWithLocation | { action: RouteFromHARAction, location?: Location };\n\ntype AssertFnAction =\n  | 'toHaveText'\n  | 'toContainText'\n  | 'toBeChecked'\n  | 'toBeVisible'\n  | 'toHaveValue'\n  | 'toBeEmpty'\n  | 'toMatchAriaSnapshot';\n\ntype ActionFnName =\n  | 'check'\n  | 'click'\n  | 'dblclick'\n  | 'close'\n  | 'fill'\n  | 'goto'\n  | 'newPage'\n  | 'press'\n  | 'selectOption'\n  | 'uncheck'\n  | 'setInputFiles'\n  | AssertFnAction\n  | PseudoActionName;\n\ntype PseudoActionName = 'routeFromHAR';\n\nconst expectFnActions: Record<AssertFnAction, (...args: Expression[]) => [action: AssertAction['name'], ...any]> = {\n  'toHaveText': text => ['assertText', { text }],\n  'toContainText': text => ['assertText', { text, substring: true }],\n  'toBeChecked': () => ['assertChecked', { checked: true }],\n  'toBeVisible': () => ['assertVisible'],\n  'toHaveValue': value => ['assertValue', { value }],\n  'toBeEmpty': () => ['assertValue'],\n  'toMatchAriaSnapshot': snapshot => ['assertSnapshot', { snapshot }],\n};\n\nconst fnActions: Record<Exclude<ActionFnName, AssertFnAction>, (...args: any[]) => [action: Exclude<Action, AssertAction>['name'] | 'routeFromHAR', ...any]> = {\n  'check': () => ['check'],\n  'click': options => ['click', parseClickOptions(options)],\n  'dblclick': options => ['click', parseClickOptions({ ...options, clickCount: 2 })],\n  'close': () => ['closePage'],\n  'fill': text => ['fill', { text }],\n  'goto': url => ['navigate', { url }],\n  'newPage': () => ['openPage'],\n  'press': shortcut => ['press', parseShortcut(shortcut)],\n  'selectOption': options => ['select', { options: typeof options === 'string' ? [options] : options }],\n  'uncheck': () => ['uncheck'],\n  'setInputFiles': files => ['setInputFiles', { files: typeof files === 'string' ? [files] : files }],\n  'routeFromHAR': (har, options) => ['routeFromHAR', { har, ...options }],\n};\n\nconst variableCallRegex = /^([a-zA-Z_$][\\w$]*)\\./;\n\nfunction parseShortcut(shortcut: string) {\n  const parts = shortcut.split('+').map(s => s.trim());\n  return {\n    modifiers: fromKeyboardModifiers(parts.slice(0, parts.length - 1) as SmartKeyboardModifier[]),\n    key: parts[parts.length - 1],\n  };\n}\n\nfunction cleanParams(params: any) {\n  if (!params)\n    return {};\n  return Object.fromEntries(Object.entries(params).filter(([_, v]) => v !== undefined));\n}\n\nfunction parseClickOptions(options?: any) {\n  const { modifiers, button, clickCount, position } = options ?? {};\n  return {\n    button: button ?? 'left',\n    modifiers: modifiers ? fromKeyboardModifiers(modifiers) : 0,\n    clickCount: clickCount ?? 1,\n    position: position ?? undefined,\n  };\n}\n\n// function to convert string index to line and column\nfunction indexToLineColumn(code: string, index: number) {\n  const lines = code.split(/\\r?\\n/);\n  let line = 0;\n  let column = index;\n  while (line < lines.length && column >= lines[line].length + 1) {\n    column -= lines[line].length + 1;\n    line++;\n  }\n  return { line: line + 1, column: column + 1 };\n}\n\nexport type TestBrowserContextOptions = Pick<BrowserContextOptions,\n  | 'colorScheme'\n  | 'locale'\n  | 'timezoneId'\n  | 'geolocation'\n  | 'viewport'\n  | 'permissions'\n  | 'serviceWorkers'\n  | 'recordHar'\n> & { storageState?: string };\n\nexport type TestOptions = {\n  deviceName?: string;\n  contextOptions?: TestBrowserContextOptions;\n};\n\nexport type Test = {\n  title: string;\n  options?: TestOptions;\n  actions: ActionInContextWithLocation[];\n  location: Location;\n};\n\nexport type ErrorWithLocation = { message: string, loc?: acorn.SourceLocation };\nexport type SourceLocation = acorn.SourceLocation;\n\nclass ParserError extends Error implements ErrorWithLocation {\n  loc?: acorn.SourceLocation;\n\n  constructor(message: string, loc?: acorn.SourceLocation) {\n    super(`${message}${loc ? ` (${loc.start.line}:${loc.start.column})` : ''}`);\n    this.loc = loc;\n  }\n}\n\nfunction parserError(message: string, loc?: acorn.SourceLocation | null): never {\n  throw new ParserError(message, loc ?? undefined);\n}\n\nconst argsParser = (arg: acorn.Expression | acorn.SpreadElement | null): any => {\n  if (arg === null)\n    return arg;\n  if (arg.type === 'SpreadElement')\n    parserError('Invalid spread element', arg.loc);\n  switch (arg.type) {\n    case 'Literal':\n      return arg.value;\n    case 'TemplateLiteral':\n      if (arg.quasis.length !== 1)\n        parserError('Invalid template literal', arg.loc);\n      const templateLiteral = arg.quasis[0].value.cooked ?? '';\n      const indent = templateLiteral.split(/\\r?\\n/).filter(Boolean)[0]?.match(/^( +)[^ ]/)?.[1] ?? '';\n      return templateLiteral.replace(new RegExp(`^${indent}`, 'gm'), '').trim();\n    case 'ArrayExpression':\n      return arg.elements.map(argsParser);\n    case 'UnaryExpression':\n      if (arg.operator !== '-' || arg.argument.type !== 'Literal' || typeof (arg.argument as acorn.Literal).value !== 'number')\n        parserError('Invalid number', arg.loc);\n      return -((arg.argument as acorn.Literal).value as number);\n    case 'ObjectExpression':\n      if (arg.properties.some(p => p.type !== 'Property' || p.key.type !== 'Identifier' || !['Literal', 'ObjectExpression', 'ArrayExpression', 'UnaryExpression'].includes(p.value.type)))\n        parserError('Invalid object property', arg.loc);\n      return Object.fromEntries(arg.properties.map(p => p as acorn.Property)\n          .map(p => [(p.key as acorn.Identifier).name, argsParser(p.value)]));\n  }\n};\n\nexport function parse(code: string, file: string = 'playwright-test') {\n  const ast = acorn.parse(code, {\n    ecmaVersion: 2020,\n    sourceType: 'module',\n    locations: true,\n  });\n\n  function parseActionExpression(expr: AwaitExpression | acorn.VariableDeclaration, pages: Set<string>): ExtendedActionInContextWithLocation {\n    let pageAlias: string | undefined;\n    if (expr.type === 'VariableDeclaration') {\n      if (\n        expr.declarations.length !== 1 ||\n        expr.declarations[0].type !== 'VariableDeclarator' ||\n        expr.declarations[0].id.type !== 'Identifier' ||\n        expr.declarations[0].init?.type !== 'AwaitExpression'\n      )\n        parserError('Invalid action expression', expr.loc);\n      pageAlias = expr.declarations[0].id.name;\n      expr = expr.declarations[0].init;\n    }\n\n    if (\n      expr.type !== 'AwaitExpression' ||\n      expr.argument.type !== 'CallExpression' ||\n      expr.argument.callee.type !== 'MemberExpression' ||\n      expr.argument.callee.property.type !== 'Identifier'\n    )\n      parserError('Invalid action expression', expr.loc);\n\n    const actionFnName = expr.argument.callee.property.name as ActionFnName;\n    let locator: string | undefined;\n    let expectAction = false;\n    let expectActionNegated = false;\n\n    if (pageAlias && actionFnName !== 'newPage')\n      parserError('Invalid action expression, only newPage can be assigned variables', expr.argument.callee.loc);\n\n    if (!['newPage'].includes(actionFnName)) {\n\n      const [, variable] = variableCallRegex.exec(code.substring(expr.argument.start)) ?? [];\n      if (variable && !pages.has(variable))\n        parserError('Invalid page variable', expr.argument.callee.loc);\n\n      if (variable) {\n        pageAlias = variable;\n        if (!['goto', 'close', 'routeFromHAR'].includes(actionFnName))\n          locator = code.substring(expr.argument.callee.object.start + (variable.length + 1), expr.argument.callee.object.end);\n\n      } else if (code.startsWith('expect(', expr.argument.start)) {\n        let object = expr.argument.callee.object;\n        if (object.type === 'MemberExpression' && object.property.type === 'Identifier' && object.property.name === 'not') {\n          if (actionFnName !== 'toBeChecked')\n            parserError('Invalid expect expression, .not can only applied to toBeChecked', expr.argument.callee.loc);\n\n          expectActionNegated = true;\n          object = object.object;\n        }\n\n        if (\n          object.type !== 'CallExpression' ||\n          object.arguments.length !== 1 ||\n          object.arguments[0].type !== 'CallExpression'\n        )\n          parserError('Invalid expect expression', expr.argument.callee.loc);\n\n        const expectArg = code.substring(object.arguments[0].start, object.arguments[0].end);\n        const [, variable] = variableCallRegex.exec(expectArg) ?? [];\n        if (!variable || !pages.has(variable))\n          parserError('Invalid page variable', expr.argument.callee.loc);\n\n        pageAlias = variable;\n        locator = expectArg.substring(variable.length + 1);\n        expectAction = true;\n      }\n    }\n\n    let action: Action;\n    const args = expr.argument.arguments.map(argsParser);\n\n    const selector = locator ? locatorOrSelectorAsSelector('javascript', locator, 'data-testid') : undefined;\n    if (selector === '')\n      parserError('Invalid locator', expr.argument.callee.loc);\n\n    if (expectAction) {\n      if (!expectFnActions[actionFnName as AssertFnAction])\n        parserError(`Invalid assertion ${actionFnName}`, expr.argument.callee.loc);\n      const [name, params] = expectFnActions[actionFnName as AssertFnAction](...args);\n      action = { name, selector, signals: [], ...cleanParams(params) } as Action;\n      if (expectActionNegated)\n        (action as AssertCheckedAction).checked = false;\n    } else {\n      if (!fnActions[actionFnName as Exclude<ActionFnName, AssertFnAction>])\n        parserError(`Invalid action ${actionFnName}`, expr.argument.callee.loc);\n      const [name, params] = fnActions[actionFnName as Exclude<ActionFnName, AssertFnAction>](...args);\n      action = { name, selector, signals: [], ...cleanParams(params) } as Action;\n    }\n\n    if (pageAlias)\n      pages.add(pageAlias);\n\n    return {\n      action,\n      frame: { pageAlias: pageAlias ?? 'page', framePath: [] },\n      startTime: 0,\n      location: { file, ...indexToLineColumn(code, expr.start) },\n    };\n  }\n\n  let deviceName: string | undefined;\n  let harAction: RouteFromHARAction | undefined;\n  const contextOptions: TestBrowserContextOptions = {};\n\n  function handleOptions(options: acorn.ObjectExpression) {\n    let props = options.properties;\n    const [first] = options.properties;\n\n    if (first?.type === 'SpreadElement') {\n      const deviceProp = first as acorn.SpreadElement;\n      if (\n        deviceProp.argument.type !== 'MemberExpression' ||\n        deviceProp.argument.object.type !== 'Identifier' ||\n        deviceProp.argument.object.name !== 'devices' ||\n        deviceProp.argument.property.type !== 'Literal' ||\n        typeof deviceProp.argument.property.value !== 'string'\n      )\n        parserError('Invalid device property', deviceProp.loc);\n      deviceName = deviceProp.argument.property.value as string;\n\n      props = props.slice(1);\n    }\n\n    const assertString = (v: any, loc?: acorn.SourceLocation) => {\n      if (typeof v !== 'string')\n        parserError('Invalid string', loc);\n    };\n    const assertEnum = (v: any, values: any[], loc?: acorn.SourceLocation) => {\n      if (!values.includes(v))\n        parserError(`Invalid enum value, expected one of ${values.join(', ')}`, loc);\n    };\n    const assertStringArray = (v: any, loc?: acorn.SourceLocation) => {\n      if (!Array.isArray(v) || !v.every(e => typeof e === 'string'))\n        parserError('Invalid string array', loc);\n    };\n    const assertObjectWithRequiredNumberProperties = (v: any, props: string[], loc?: acorn.SourceLocation) => {\n      if (typeof v !== 'object' || Object.keys(v).length !== props.length || !props.every(p => typeof v[p] === 'number'))\n        parserError(`Invalid object with required number properties, expected ${props.join(', ')}`, loc);\n    };\n    const propValidators: Record<keyof Omit<TestBrowserContextOptions, 'recordHar'>, (v: any, loc?: acorn.SourceLocation) => void> = {\n      colorScheme: (v, loc) => assertEnum(v, ['dark', 'light', 'no-preference'], loc),\n      locale: assertString,\n      timezoneId: assertString,\n      geolocation: (v, loc) => assertObjectWithRequiredNumberProperties(v, ['latitude', 'longitude'], loc),\n      viewport: (v, loc) => assertObjectWithRequiredNumberProperties(v, ['width', 'height'], loc),\n      permissions: assertStringArray,\n      serviceWorkers: (v, loc) => assertEnum(v, ['allow', 'block'], loc),\n      storageState: assertString,\n    };\n\n    for (const prop of props) {\n      if (prop.type !== 'Property' || prop.key.type !== 'Identifier' || !Object.keys(propValidators).includes(prop.key.name as any))\n        parserError('Invalid context option', prop.loc);\n\n      const propKey = prop.key.name as keyof Omit<TestBrowserContextOptions, 'recordHar'>;\n      const propValidator = propValidators[propKey];\n      if (!propValidator)\n        parserError(`Invalid context option ${prop.key.name}`, prop.loc);\n      const value = argsParser(prop.value);\n      propValidator(value, prop.loc ?? undefined);\n      contextOptions[propKey] = value;\n    }\n  }\n\n  const tests: Test[] = [];\n\n  walk.ancestor(ast, {\n    CallExpression({ callee, arguments: args }, _, ancestors) {\n      if (ancestors.length !== 3 || ancestors[0]?.type !== 'Program' || ancestors[1]?.type !== 'ExpressionStatement')\n        return;\n      if (\n        callee.type === 'MemberExpression' &&\n        callee.object.type === 'Identifier' &&\n        callee.object.name === 'test' &&\n        callee.property.type === 'Identifier' && callee.property.name === 'use' &&\n        args.length === 1 &&\n        args[0].type === 'ObjectExpression'\n      ) {\n        handleOptions(args[0]);\n        return;\n      }\n\n      if (args.length !== 2)\n        parserError('Invalid call expression', callee.loc);\n\n      const [title, fn] = args;\n      if (callee.type !== 'Identifier' || callee.name !== 'test')\n        parserError('Invalid call expression', callee.loc);\n      if (title.type !== 'Literal' || typeof title.value !== 'string')\n        parserError('Invalid test title', title.loc);\n      if (\n        fn.type !== 'ArrowFunctionExpression' ||\n        fn.params.length !== 1 ||\n        fn.params[0].type !== 'ObjectPattern' ||\n        fn.params[0].properties.some(p => p.type !== 'Property' || p.key.type !== 'Identifier' || p.value.type !== 'Identifier' || !['page', 'context'].includes(p.key.name))\n      )\n        parserError('Invalid test function', fn.loc);\n\n      const actions: ActionInContextWithLocation[] = [];\n\n      // it has page fixture, let's push a openPage action\n      actions.push({\n        action: { name: 'openPage', signals: [], url: '' },\n        frame: { pageAlias: 'page', framePath: [] },\n        location: { file, ...indexToLineColumn(code, fn.start) },\n        startTime: 0\n      });\n\n      if (\n        fn.body.type !== 'BlockStatement' ||\n        !fn.body.body.every(e => (e.type === 'ExpressionStatement' && e.expression.type === 'AwaitExpression') || e.type === 'VariableDeclaration')\n      )\n        parserError('Invalid test function body', fn.body.loc);\n\n      const stmts = fn.body.body as (ExpressionStatement | acorn.VariableDeclaration)[];\n      const pages = new Set<string>(['page']);\n\n      for (const stmt of stmts) {\n        const actionExpr = stmt.type === 'VariableDeclaration' ? stmt : stmt.expression as AwaitExpression;\n        const candidateAction = parseActionExpression(actionExpr, pages);\n        if (candidateAction.action.name === 'routeFromHAR') {\n          if (!(actions.length === 0 || (actions.length === 1 && actions[0].action.name === 'openPage')))\n            parserError('routeFromHAR must be the first action', actionExpr.loc);\n\n          if (harAction)\n            parserError('Only one routeFromHAR is allowed', actionExpr.loc);\n\n          harAction = candidateAction.action as RouteFromHARAction;\n          continue;\n        }\n        actions.push(candidateAction as ActionInContextWithLocation);\n      }\n\n      if (contextOptions && harAction) {\n        contextOptions.recordHar = {\n          path: harAction.har,\n          content: harAction.updateContent,\n          mode: harAction.updateMode,\n          urlGlob: harAction.url,\n        };\n      }\n\n      tests.push({\n        title: title.value as string,\n        actions,\n        options: deviceName || harAction || (contextOptions && Object.keys(contextOptions).length > 0) ? {\n          deviceName,\n          contextOptions,\n        } : undefined,\n        location: { file, ...indexToLineColumn(code, callee.start) },\n      });\n    },\n  });\n\n  return tests;\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { CallLog, ElementInfo, EventData, Mode, Source, SourceHighlight } from '@recorder/recorderTypes';\nimport { EventEmitter } from 'events';\nimport type { Page } from 'playwright-core/lib/server/page';\nimport type { Recorder } from 'playwright-core/lib/server/recorder';\nimport type * as channels from '../../protocol/channels';\nimport type { ActionInContextWithLocation } from './parser';\nimport { PopupRecorderWindow } from './popupRecorderWindow';\nimport { SidepanelRecorderWindow } from './sidepanelRecorderWindow';\nimport type { IRecorderApp } from 'playwright-core/lib/server/recorder/recorderFrontend';\nimport type { ActionInContext, ActionWithSelector } from '@recorder/actions';\nimport { parse } from './parser';\nimport { languageSet } from 'playwright-core/lib/server/codegen/languages';\nimport type { Crx } from '../crx';\nimport type { LanguageGeneratorOptions } from 'playwright-core/lib/server/codegen/types';\nimport { serverSideCallMetadata } from 'playwright-core/lib/server';\n\nexport type RecorderMessage = { type: 'recorder' } & (\n  | { method: 'resetCallLogs' }\n  | { method: 'updateCallLogs', callLogs: CallLog[] }\n  | { method: 'setPaused', paused: boolean }\n  | { method: 'setMode', mode: Mode }\n  | { method: 'setSources', sources: Source[] }\n  | { method: 'setActions', actions: ActionInContext[], sources: Source[] }\n  | { method: 'elementPicked', elementInfo: ElementInfo, userGesture?: boolean }\n);\n\nexport type RecorderEventData =  (EventData | { event: 'resetCallLogs' | 'codeChanged' | 'cursorActivity', params: any }) & { type: string };\n\nexport interface RecorderWindow {\n  isClosed(): boolean;\n  postMessage: (msg: RecorderMessage) => void;\n  open: () => Promise<void>;\n  focus: () => Promise<void>;\n  close: () => Promise<void>;\n  onMessage?: ({ type, event, params }: RecorderEventData) => void;\n  hideApp?: () => any;\n}\n\nexport class CrxRecorderApp extends EventEmitter implements IRecorderApp {\n  readonly wsEndpointForTest: string | undefined;\n  private _crx: Crx;\n  readonly _recorder: Recorder;\n  private _filename?: string;\n  private _sources?: Source[];\n  private _mode: Mode = 'none';\n  private _window?: RecorderWindow;\n  private _editedCode?: EditedCode;\n  private _recordedActions: ActionInContextWithLocation[] = [];\n  private _playInIncognito = false;\n  private _currentCursorPosition: { line: number } | undefined;\n\n  constructor(crx: Crx, recorder: Recorder) {\n    super();\n    this._crx = crx;\n    this._recorder = recorder;\n    this._crx.player.on('start', () => {\n      this._recorder.clearErrors();\n      this.resetCallLogs().catch(() => {});\n    });\n  }\n\n  async open(options?: channels.CrxApplicationShowRecorderParams) {\n    const mode = options?.mode ?? 'none';\n    const language = options?.language ?? 'playwright-test';\n\n    if (this._window)\n      await this._window.close();\n\n    this._playInIncognito = options?.playInIncognito ?? false;\n\n    this._window = options?.window?.type === 'sidepanel' ? new SidepanelRecorderWindow(options.window.url) : new PopupRecorderWindow(options?.window?.url);\n    this._window.onMessage = this._onMessage.bind(this);\n    this._window.hideApp  = this._hide.bind(this);\n\n    // set in recorder before, so that if it opens the recorder UI window, it will already reflect the changes\n    this._onMessage({ type: 'recorderEvent', event: 'clear', params: {} });\n    this._onMessage({ type: 'recorderEvent', event: 'fileChanged', params: { file: language } });\n    this._recorder.setOutput(language, undefined);\n    this._recorder.setMode(mode);\n\n    if (this._window.isClosed()) {\n      await this._window.open();\n      this.emit('show');\n    } else {\n      await this._window.focus();\n    }\n\n    this.setMode(mode);\n  }\n\n  load(code: string) {\n    this._updateCode(code);\n    this._editedCode?.load();\n  }\n\n  async close() {\n    if (!this._window || this._window.isClosed())\n      return;\n    this._hide();\n    this._window = undefined;\n  }\n\n  private _hide() {\n    this._recorder.setMode('none');\n    this.setMode('none');\n    this._window?.close();\n    this.emit('hide');\n  }\n\n  async setPaused(paused: boolean) {\n    this._sendMessage({ type: 'recorder', method: 'setPaused',  paused });\n  }\n\n  async setMode(mode: Mode) {\n    if (!this._recorder._isRecording())\n      this._crx.player.pause().catch(() => {});\n    else\n      this._crx.player.stop().catch(() => {});\n\n    if (this._mode !== mode) {\n      this._mode = mode;\n      this.emit('modeChanged', { mode });\n    }\n    this._sendMessage({ type: 'recorder', method: 'setMode', mode });\n  }\n\n  async setRunningFile() {\n    // this doesn't make sense in crx, it only runs recorded files\n  }\n\n  async setSources(sources: Source[]) {\n    sources = sources\n    // hack to prevent recorder from opening files\n        .filter(s => s.isRecorded)\n        .map(s => this._editedCode?.decorate(s) ?? s);\n    this._sendMessage({ type: 'recorder', method: 'setSources', sources });\n  }\n\n  async elementPicked(elementInfo: ElementInfo, userGesture?: boolean) {\n    if (userGesture) {\n      if (this._recorder.mode() === 'inspecting') {\n        this._recorder.setMode('standby');\n        this._window?.focus();\n      }\n    }\n    this._sendMessage({ type: 'recorder', method: 'elementPicked', elementInfo, userGesture });\n  }\n\n  async resetCallLogs() {\n    this._sendMessage({ type: 'recorder', method: 'resetCallLogs' });\n  }\n\n  async updateCallLogs(callLogs: CallLog[]) {\n    this._sendMessage({ type: 'recorder', method: 'updateCallLogs', callLogs });\n  }\n\n  async setActions(actions: ActionInContext[], sources: Source[]) {\n    this._recordedActions = Array.from(actions);\n    this._sources = Array.from(sources);\n    if (this._recorder._isRecording())\n      this._updateCode(null);\n  }\n\n  private _updateCode(code: string | null) {\n    if (this._editedCode?.code === code)\n      return;\n\n    this._editedCode?.stopLoad();\n    this._editedCode = undefined;\n\n    if (!code)\n      return;\n\n    this._editedCode = new EditedCode(this._recorder, code, () => this._updateLocator(this._currentCursorPosition));\n  }\n\n  private async _updateLocator(position?: { line: number}) {\n    if (!position)\n      return;\n\n    // codemirror line is 0-based while action line is 1-based\n    const action = this._getActions(true).find(a => a.location?.line === position.line + 1);\n    if (!action || !(action.action as ActionWithSelector).selector)\n      return;\n    const selector = (action.action as ActionWithSelector).selector;\n    this.elementPicked({ selector, ariaSnapshot: '' }, false);\n    this._onMessage({ type: 'recorderEvent', event: 'highlightRequested', params: { selector } });\n  }\n\n  private _onMessage({ type, event, params }: RecorderEventData) {\n    if (type === 'recorderEvent') {\n      switch (event) {\n        case 'fileChanged':\n          this._filename = params.file;\n          if (this._editedCode?.hasErrors()) {\n            this._updateCode(null);\n            // force editor sources to refresh\n            if (this._sources)\n              this.setSources(this._sources);\n          }\n          break;\n        case 'codeChanged':\n          this._updateCode(params.code);\n          break;\n        case 'cursorActivity':\n          this._currentCursorPosition = params.position;\n          this._updateLocator(this._currentCursorPosition);\n          break;\n        case 'resume':\n        case 'step':\n          this._run().catch(() => {});\n          break;\n        case 'setMode':\n          const { mode } = params;\n          if (this._mode !== mode) {\n            this._mode = mode;\n            this.emit('modeChanged', { mode });\n          }\n          break;\n      }\n\n      this.emit('event', { event, params });\n    }\n  }\n\n  async _run() {\n    if (this._crx.player.isPlaying())\n      return;\n    const incognito = this._playInIncognito;\n    if (incognito) {\n      const incognitoCrxApp = await this._crx.get({ incognito });\n      await incognitoCrxApp?.close({ closeWindows: true });\n    }\n    const crxApp = await this._crx.get({ incognito }) ?? await this._crx.start({ incognito }, serverSideCallMetadata());\n    await this._crx.player.run(crxApp._context, this._getActions());\n  }\n\n  _sendMessage(msg: RecorderMessage) {\n    return this._window?.postMessage(msg);\n  }\n\n  async uninstall(page: Page) {\n    await this._recorder._uninstallInjectedRecorder(page);\n  }\n\n  private _getActions(skipLoad = false): ActionInContextWithLocation[] {\n    if (this._editedCode && !skipLoad) {\n      // this will indirectly refresh sources\n      this._editedCode.load();\n      const actions = this._editedCode.actions();\n\n      if (!this._filename || this._filename === 'playwright-test')\n        return actions;\n    }\n\n    const source = this._sources?.find(s => s.id === this._filename);\n    if (!source)\n      return [];\n\n    const actions = this._editedCode?.hasLoaded() && !this._editedCode.hasErrors() ? this._editedCode.actions() : this._recordedActions;\n\n    const { header } = source;\n    const languageGenerator = [...languageSet()].find(l => l.id === this._filename)!;\n    // we generate actions here to have a one-to-one mapping between actions and text\n    // (source actions are filtered, only non-empty actions are included)\n    const actionTexts = actions.map(a => languageGenerator.generateAction(a));\n\n    const sourceLine = (index: number) => {\n      const numLines = (str?: string) => str ? str.split(/\\r?\\n/).length : 0;\n      return numLines(header) + numLines(actionTexts.slice(0, index).filter(Boolean).join('\\n')) + 1;\n    };\n\n    return actions.map((action, index) => ({\n      ...action,\n      location: {\n        file: this._filename!,\n        line: sourceLine(index),\n        column: 1\n      }\n    }));\n  }\n}\n\nclass EditedCode {\n  readonly code: string;\n  private _recorder: Recorder;\n  private _actions: ActionInContextWithLocation[] = [];\n  private _highlight: SourceHighlight[] = [];\n  private _codeLoadDebounceTimeout: NodeJS.Timeout | undefined;\n  private _onLoaded?: () => any;\n\n  constructor(recorder: Recorder, code: string, onLoaded?: () => any) {\n    this.code = code;\n    this._recorder = recorder;\n    this._onLoaded = onLoaded;\n    this._codeLoadDebounceTimeout = setTimeout(this.load.bind(this), 500);\n  }\n\n  actions() {\n    return Array.from(this._actions);\n  }\n\n  hasErrors() {\n    return this._highlight?.length > 0;\n  }\n\n  hasLoaded() {\n    return !this._codeLoadDebounceTimeout;\n  }\n\n  decorate(source: Source) {\n    if (source.id !== 'playwright-test')\n      return;\n\n    return {\n      ...source,\n      highlight: this.hasLoaded() && this.hasErrors() ? this._highlight : source.highlight,\n      text: this.code,\n    };\n  }\n\n  stopLoad() {\n    clearTimeout(this._codeLoadDebounceTimeout);\n    this._codeLoadDebounceTimeout = undefined;\n  }\n\n  load() {\n    if (this.hasLoaded())\n      return;\n\n    this.stopLoad();\n    try {\n      const [{ actions, options }] = parse(this.code);\n      this._actions = actions;\n      const { deviceName, contextOptions } = { deviceName: '', contextOptions: {}, ...options };\n      this._recorder.loadScript({ actions, deviceName, contextOptions: contextOptions as LanguageGeneratorOptions['contextOptions'], text: this.code });\n    } catch (error) {\n      this._actions = [];\n      // syntax error / parsing error\n      const line = error.loc.line ?? error.loc.start.line ?? this.code.split('\\n').length;\n      this._highlight = [{ line, type: 'error', message: error.message }];\n      this._recorder.loadScript({ actions: this._actions, deviceName: '', contextOptions: {}, text: this.code, highlight: this._highlight });\n    }\n\n    this._onLoaded?.();\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { CrxApplicationNewPageOptions } from '../protocol/channels';\n\nexport async function createTab({ incognito, ...params }: { incognito: boolean } & CrxApplicationNewPageOptions) {\n  const windows = (await chrome.windows.getAll()).filter(wnd => wnd.incognito === incognito);\n  const windowId = windows.find(w => !params.windowId || w.id === params.windowId)?.id;\n  if (!windowId && params.windowId)\n    throw new Error(`Window with id ${params.windowId} not found or bound to a different context`);\n  const url = params.url || 'about:blank';\n  const [tab] = await Promise.all([\n    new Promise<chrome.tabs.Tab>(resolve => {\n      const tabCreated = (tab: chrome.tabs.Tab) => {\n        if (tab.incognito !== incognito)\n          return;\n        chrome.tabs.onCreated.removeListener(tabCreated);\n        resolve(tab);\n      };\n      chrome.tabs.onCreated.addListener(tabCreated);\n    }),\n    windowId ?\n      chrome.tabs.create({ ...params, url, windowId }) :\n      chrome.windows.create({ url, incognito: incognito }),\n  ]);\n\n  const tabId = tab.id!;\n\n  // if no window was found, it means we created the tab with chrome.windows.create,\n  // which doesn't support the params we passed to this function, so we need to update\n  // the tab with those params\n  if (!windowId) {\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    const { index, windowId, ...updateParams } = params;\n    if (typeof index === 'number')\n      await chrome.tabs.move(tabId, { index });\n    await chrome.tabs.update(tabId, updateParams);\n  }\n\n  return tab;\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { LogName } from 'playwright-core/lib/server/utils/debugLogger';\nimport { debugLogger } from 'playwright-core/lib/server/utils/debugLogger';\nimport type { Protocol } from 'playwright-core/lib/server/chromium/protocol';\nimport type { Progress } from 'playwright-core/lib/server/progress';\nimport type { ConnectionTransport, ProtocolRequest, ProtocolResponse } from 'playwright-core/lib/server/transport';\nimport { createTab } from '../utils';\n\ntype Tab = chrome.tabs.Tab;\n\n// mimics DebuggerSession on https://chromium-review.googlesource.com/c/chromium/src/+/5398119/12/chrome/common/extensions/api/debugger.json\n// TODO replace with proper type when available\ntype DebuggerSession = chrome.debugger.Debuggee & { sessionId?: string };\n\nexport class CrxTransport implements ConnectionTransport {\n  private _progress?: Progress;\n  private _detachedPromise?: Promise<void>;\n  private _targetToTab: Map<string, number>;\n  private _tabToTarget: Map<number, Protocol.Target.TargetInfo>;\n  private _sessions: Map<string, number>;\n  private _defaultBrowserContextId?: string;\n\n  onmessage?: (message: ProtocolResponse) => void;\n  onclose?: () => void;\n\n  constructor(progress?: Progress) {\n    this._progress = progress;\n    this._tabToTarget = new Map();\n    this._targetToTab = new Map();\n    this._sessions = new Map();\n    chrome.debugger.onEvent.addListener(this._onDebuggerEvent);\n    chrome.debugger.onDetach.addListener(this._onRemoved);\n    chrome.tabs.onRemoved.addListener(this._onRemoved);\n    chrome.tabs.onCreated.addListener(this._onPopupCreated);\n  }\n\n  isIncognito(tabIdOrTargetId: number | string | undefined) {\n    if (typeof tabIdOrTargetId === 'string')\n      tabIdOrTargetId = this.getTabId(tabIdOrTargetId);\n    if (!tabIdOrTargetId)\n      return;\n    return this._tabToTarget.get(tabIdOrTargetId)?.browserContextId !== this._defaultBrowserContextId;\n  }\n\n  getTargetId(tabId: number) {\n    return this._tabToTarget.get(tabId)?.targetId;\n  }\n\n  getTabId(targetId: string) {\n    return this._targetToTab.get(targetId);\n  }\n\n  async send(message: ProtocolRequest) {\n    try {\n      const [, tabIdStr] = /crx-tab-(\\d+)/.exec(message.sessionId ?? '') ?? [];\n      let debuggee: DebuggerSession;\n      if (tabIdStr) {\n        const tabId = parseInt(tabIdStr, 10);\n        debuggee = { tabId };\n      } else {\n        const sessionId = message.sessionId!;\n        const tabId = this._sessions.get(sessionId)!;\n        debuggee = { tabId, sessionId };\n      }\n\n      let result;\n      // chrome extensions doesn't support all CDP commands so we need to handle them\n      if (message.method === 'Target.setAutoAttach' && !debuggee.tabId) {\n        // no tab to attach, just skip for now...\n        result = await Promise.resolve();\n      } else if (message.method === 'Target.setAutoAttach') {\n        const [, versionStr] = navigator.userAgent.match(/Chrome\\/([0-9]+)./) ?? [];\n\n        // we need to exclude service workers, see:\n        // https://github.com/ruifigueira/playwright-crx/issues/1\n        // https://chromedevtools.github.io/devtools-protocol/tot/Target/#method-setAutoAttach\n        result = await this._send(debuggee, message.method, { ...message.params, filter: [\n          { exclude: true, type: 'service_worker' },\n          // and these are the defaults:\n          // https://chromedevtools.github.io/devtools-protocol/tot/Target/#type-TargetFilter\n          { exclude: true, type: 'browser' },\n          { exclude: true, type: 'tab' },\n          // in versions prior to 126, this fallback doesn't work,\n          // but it is necessary for oopif frames to be discoverable in version 126 or greater\n          ...(versionStr && parseInt(versionStr, 10) >= 126 ? [{}] : []),\n        ] });\n      } else if (message.method === 'Target.getTargetInfo' && !debuggee.tabId) {\n        // most likely related with https://chromium-review.googlesource.com/c/chromium/src/+/2885888\n        // See CRBrowser.connect\n        result = await Promise.resolve();\n      } else if (message.method === 'Target.createTarget') {\n        const { browserContextId } = message.params;\n        const incognito = !!browserContextId && browserContextId !== this._defaultBrowserContextId;\n        const tab = await createTab({ incognito });\n        const { targetId } = await this.attach(tab.id!);\n        result = { targetId };\n      } else if (message.method === 'Target.closeTarget') {\n        const { targetId } = message.params;\n        const tabId = this._targetToTab.get(targetId);\n        if (tabId) {\n          await chrome.tabs.remove(tabId);\n          result = true;\n        } else {\n          result = false;\n        }\n      } else if (message.method === 'Target.disposeBrowserContext') {\n        // do nothing...\n        result = await Promise.resolve();\n      } else if (message.method === 'Browser.getVersion') {\n        const userAgent = navigator.userAgent;\n        const [, product] = userAgent.match(/(Chrome\\/[0-9\\.]+)\\b/) ?? [];\n        result = await Promise.resolve({ product, userAgent }).then();\n      } else if (message.method === 'Browser.getWindowForTarget') {\n        // just don't send a window ID...\n        result = await Promise.resolve({}).then();\n      } else if (message.method === 'Browser.setDownloadBehavior') {\n        // do nothing...\n        result = await Promise.resolve();\n      } else if (message.method === 'Emulation.setEmulatedMedia') {\n        // avoids crashing on chrome.debugger.detach\n        // see: https://github.com/ruifigueira/playwright-crx/issues/2\n        result = await Promise.resolve();\n      } else if (message.method === 'Storage.getCookies') {\n        const { browserContextId, ...params } = message.params;\n        const debuggees = this._debuggeesFromBrowserContextId(browserContextId);\n        // we need to use Network.getCookies instead because Storage.getCookies always returns the non-incognito cookies\n        // and iterate over all pages to get all cookies\n        const results = await Promise.all(debuggees.map(debuggee => this._send(debuggee, 'Network.getCookies', params)));\n        // remove duplicates\n        const cookies = new Map<string, Protocol.Network.Cookie>(results.flatMap(({ cookies }) => cookies.map(cookie => [JSON.stringify(cookie), cookie])));\n        result = { cookies: [...cookies.values()] };\n      } else if (message.method === 'Storage.setCookies') {\n        const { browserContextId, ...params } = message.params;\n        const debuggees = this._debuggeesFromBrowserContextId(browserContextId);\n        // apply to all pages\n        await Promise.all(debuggees.map(debuggee => this._send(debuggee, 'Network.setCookies', params)));\n        result = {};\n      } else {\n        result = await this._send(debuggee, message.method as keyof Protocol.CommandParameters, { ...message.params });\n      }\n\n      this._emitMessage({\n        ...message,\n        result,\n      });\n    } catch (error) {\n      this._emitMessage({\n        ...message,\n        error,\n      });\n    }\n  }\n\n  async attach(tabId: number, onBeforeEmitAttachedToTarget?: (targetInfo: Protocol.Target.TargetInfo) => any) {\n    let targetInfo = this._tabToTarget.get(tabId);\n\n    if (!targetInfo) {\n      const debuggee = { tabId };\n      await chrome.debugger.attach(debuggee, '1.3');\n      this._progress?.log(`<chrome debugger attached to tab ${tabId}>`);\n      // we don't create a new browser context, just return the current one\n      const response = await this._send(debuggee, 'Target.getTargetInfo');\n      targetInfo = response.targetInfo;\n\n      if (!this._defaultBrowserContextId) {\n        const tab = await chrome.tabs.get(tabId);\n        if (!tab.incognito)\n          this._defaultBrowserContextId = targetInfo.browserContextId;\n      }\n\n      await onBeforeEmitAttachedToTarget?.(targetInfo!);\n\n      // force browser to create a page\n      this._emitAttachedToTarget(tabId, targetInfo);\n\n      this._tabToTarget.set(tabId, targetInfo);\n      this._targetToTab.set(targetInfo.targetId, tabId);\n    }\n\n    return targetInfo;\n  }\n\n  async detach(tabOrTarget: number | string) {\n    const tabId = typeof tabOrTarget === 'number' ? tabOrTarget : this._targetToTab.get(tabOrTarget);\n    if (!tabId)\n      return;\n\n    const targetInfo = this._tabToTarget.get(tabId);\n    this._tabToTarget.delete(tabId);\n    if (targetInfo) {\n      this._targetToTab.delete(targetInfo.targetId);\n      this._emitDetachedToTarget(tabId, targetInfo.targetId);\n    }\n    await chrome.debugger.detach({ tabId }).catch(() => {});\n    this._progress?.log(`<chrome debugger detached from tab ${tabId}>`);\n  }\n\n  close() {\n    if (this._detachedPromise)\n      return;\n    this._detachedPromise = Promise.all([...this._tabToTarget.keys()]\n        .map(this.detach))\n        .then(() => this.onclose?.());\n  }\n\n  async closeAndWait() {\n    this._progress?.log(`<chrome debugger disconnecting>`);\n    chrome.debugger.onEvent.removeListener(this._onDebuggerEvent);\n    chrome.tabs.onCreated.removeListener(this._onPopupCreated);\n    this.close();\n    await this._detachedPromise; // Make sure to await the actual disconnect.\n    chrome.tabs.onRemoved.removeListener(this._onRemoved);\n    chrome.tabs.onDetached.removeListener(this._onRemoved);\n    this._progress?.log(`<chrome debugger disconnected>`);\n  }\n\n\n  private async _send<T extends keyof Protocol.CommandParameters>(\n    debuggee: DebuggerSession,\n    method: T,\n    commandParams?: Protocol.CommandParameters[T]\n  ) {\n    if (debugLogger.isEnabled('chromedebugger' as LogName))\n      debugLogger.log('chromedebugger' as LogName, `SEND> ${method} #${debuggee.tabId}`);\n\n    return await chrome.debugger.sendCommand(debuggee, method, commandParams) as\n      Protocol.CommandReturnValues[T];\n  }\n\n  private _onPopupCreated = async ({ openerTabId, id }: Tab) => {\n    if (!openerTabId || !id)\n      return;\n\n    if (this._tabToTarget.has(openerTabId))\n      // it can fail due to \"Cannot access a chrome:// URL\"\n      await this.attach(id).catch(() => {});\n  };\n\n  private _onRemoved = (tabIdOrDebuggee: number | { tabId?: number }) => {\n    const tabId = typeof tabIdOrDebuggee === 'number' ? tabIdOrDebuggee : tabIdOrDebuggee.tabId;\n    if (!tabId)\n      return;\n\n    const targetInfo = this._tabToTarget.get(tabId);\n    this._tabToTarget.delete(tabId);\n    if (targetInfo) {\n      this._targetToTab.delete(targetInfo.targetId);\n      this._emitDetachedToTarget(tabId, targetInfo.targetId);\n    }\n  };\n\n  private _onDebuggerEvent = ({ tabId, sessionId }: DebuggerSession, message?: string, params?: any) => {\n    if (!tabId)\n      return;\n    if (!sessionId)\n      sessionId = this._sessionIdFor(tabId);\n\n    if (message === 'Target.attachedToTarget')\n      this._sessions.set((params as Protocol.Target.attachToTargetReturnValue).sessionId, tabId);\n    else if (message === 'Target.detachedFromTarget')\n      this._sessions.delete((params as Protocol.Target.attachToTargetReturnValue).sessionId);\n\n\n    if (debugLogger.isEnabled(`chromedebugger` as LogName))\n      debugLogger.log('chromedebugger' as LogName, `<RECV ${message} #${tabId}`);\n\n\n    this._emitMessage({\n      method: message,\n      sessionId,\n      params,\n    });\n  };\n\n  private _emitMessage(message: ProtocolResponse) {\n    if (this.onmessage)\n      this.onmessage(message);\n  }\n\n  private _sessionIdFor(tabId: number): string {\n    return `crx-tab-${tabId}`;\n  }\n\n  private _emitAttachedToTarget(tabId: number, targetInfo: Protocol.Target.TargetInfo) {\n    const sessionId = this._sessionIdFor(tabId);\n    this._emitMessage({\n      method: 'Target.attachedToTarget',\n      sessionId: '',\n      params: {\n        sessionId,\n        targetInfo,\n      }\n    });\n  }\n\n  private _emitDetachedToTarget(tabId: number, targetId: string) {\n    const sessionId = this._sessionIdFor(tabId);\n    this._emitMessage({\n      method: 'Target.detachedFromTarget',\n      sessionId: '',\n      params: {\n        sessionId,\n        targetId,\n      }\n    });\n  }\n\n  private _debuggeesFromBrowserContextId(browserContextId?: string) {\n    if (!browserContextId)\n      browserContextId = this._defaultBrowserContextId;\n    if (!browserContextId)\n      throw new Error(`No attached tab found for browserContextId ${browserContextId}`);\n    return [...this._tabToTarget]\n        .filter(([, targetInfo]) => targetInfo.browserContextId === browserContextId)\n        .map(([tabId, targetInfo]) => ({ tabId, targetId: targetInfo?.targetId } satisfies chrome.debugger.Debuggee));\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type * as recorderActions from '@recorder/actions';\nimport type * as channels from '@protocol/channels';\nimport { toKeyboardModifiers } from 'playwright-core/lib/server/codegen/language';\nimport { buildFullSelector } from 'playwright-core/lib/server/recorder/recorderUtils';\n\nconst kDefaultTimeout = 5_000;\n\nexport function traceParamsForAction(actionInContext: recorderActions.ActionInContext): { method: string, apiName: string, params: any } {\n  const { action } = actionInContext;\n  switch (action.name) {\n    case 'navigate': {\n      const params: channels.FrameGotoParams = {\n        url: action.url,\n      };\n      return { method: 'goto', apiName: 'page.goto', params };\n    }\n    case 'openPage': {\n      return { method: 'newPage', params: {}, apiName: 'browserContext.newPage' };\n    }\n    case 'closePage': {\n      return { method: 'close', params: {}, apiName: 'page.close' };\n    }\n  }\n  const selector = buildFullSelector(actionInContext.frame.framePath, action.selector);\n  switch (action.name) {\n\n    case 'click': {\n      const params: channels.FrameClickParams = {\n        selector,\n        strict: true,\n        modifiers: toKeyboardModifiers(action.modifiers),\n        button: action.button,\n        clickCount: action.clickCount,\n        position: action.position,\n      };\n      return { method: 'click', apiName: 'locator.click', params };\n    }\n    case 'press': {\n      const params: channels.FramePressParams = {\n        selector,\n        strict: true,\n        key: [...toKeyboardModifiers(action.modifiers), action.key].join('+'),\n      };\n      return { method: 'press', apiName: 'locator.press', params };\n    }\n    case 'fill': {\n      const params: channels.FrameFillParams = {\n        selector,\n        strict: true,\n        value: action.text,\n      };\n      return { method: 'fill', apiName: 'locator.fill', params };\n    }\n    case 'setInputFiles': {\n      const params: channels.FrameSetInputFilesParams = {\n        selector,\n        strict: true,\n        localPaths: action.files,\n      };\n      return { method: 'setInputFiles', apiName: 'locator.setInputFiles', params };\n    }\n    case 'check': {\n      const params: channels.FrameCheckParams = {\n        selector,\n        strict: true,\n      };\n      return { method: 'check', apiName: 'locator.check', params };\n    }\n    case 'uncheck': {\n      const params: channels.FrameUncheckParams = {\n        selector,\n        strict: true,\n      };\n      return { method: 'uncheck', apiName: 'locator.uncheck', params };\n    }\n    case 'select': {\n      const params: channels.FrameSelectOptionParams = {\n        selector,\n        strict: true,\n        options: action.options.map(option => ({ value: option })),\n      };\n      return { method: 'selectOption', apiName: 'locator.selectOption', params };\n    }\n    case 'assertChecked': {\n      const params: channels.FrameExpectParams = {\n        selector: action.selector,\n        expression: 'to.be.checked',\n        isNot: !action.checked,\n        timeout: kDefaultTimeout,\n      };\n      return { method: 'expect', apiName: 'expect.toBeChecked', params };\n    }\n    case 'assertText': {\n      const params: channels.FrameExpectParams = {\n        selector,\n        expression: 'to.have.text',\n        expectedText: [],\n        isNot: false,\n        timeout: kDefaultTimeout,\n      };\n      return { method: 'expect', apiName: 'expect.toContainText', params };\n    }\n    case 'assertValue': {\n      const params: channels.FrameExpectParams = {\n        selector,\n        expression: 'to.have.value',\n        expectedValue: undefined,\n        isNot: false,\n        timeout: kDefaultTimeout,\n      };\n      return { method: 'expect', apiName: 'expect.toHaveValue', params };\n    }\n    case 'assertVisible': {\n      const params: channels.FrameExpectParams = {\n        selector,\n        expression: 'to.be.visible',\n        isNot: false,\n        timeout: kDefaultTimeout,\n      };\n      return { method: 'expect', apiName: 'expect.toBeVisible', params };\n    }\n    case 'assertSnapshot': {\n      const params: channels.FrameExpectParams = {\n        selector,\n        expression: 'to.match.aria',\n        isNot: false,\n        timeout: kDefaultTimeout,\n      };\n      return { method: 'expect', apiName: 'expect.toMatchAriaSnapshot', params };\n    }\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport EventEmitter from 'events';\nimport type { BrowserContext } from 'playwright-core/lib/server/browserContext';\nimport { Page } from 'playwright-core/lib/server/page';\nimport { createGuid, isUnderTest, ManualPromise, monotonicTime, serializeExpectedTextValues } from 'playwright-core/lib/utils';\nimport type { Frame } from 'playwright-core/lib/server/frames';\nimport type { CallMetadata } from '@protocol/callMetadata';\nimport { serializeError } from 'playwright-core/lib/server/errors';\nimport { buildFullSelector } from 'playwright-core/lib/server/recorder/recorderUtils';\nimport { toKeyboardModifiers } from 'playwright-core/lib/server/codegen/language';\nimport type { ActionInContextWithLocation, Location } from './parser';\nimport type { ActionInContext, FrameDescription } from '@recorder/actions';\nimport { toClickOptions } from 'playwright-core/lib/server/recorder/recorderRunner';\nimport { parseAriaSnapshotUnsafe } from 'playwright-core/lib/utils/isomorphic/ariaSnapshot';\nimport { serverSideCallMetadata } from 'playwright-core/lib/server';\nimport type { Crx } from '../crx';\nimport type { InstrumentationListener } from 'playwright-core/lib/server/instrumentation';\nimport { traceParamsForAction } from './recorderUtils';\nimport { yaml } from 'playwright-core/lib/utilsBundle';\n\nclass Stopped extends Error {}\n\nexport type PerformAction = ActionInContextWithLocation | {\n  action: {\n    name: 'pause';\n  };\n  frame: FrameDescription;\n  location?: Location;\n};\n\nexport default class CrxPlayer extends EventEmitter {\n\n  private _crx: Crx;\n  private _currAction?: PerformAction;\n  private _stopping?: ManualPromise;\n  private _pageAliases = new Map<Page, string>();\n  private _pause?: Promise<void>;\n\n  constructor(crx: Crx) {\n    super();\n    this._crx = crx;\n  }\n\n  async pause() {\n    if (!this._pause) {\n      const context = (await this._crx.get({ incognito: false }))!._context;\n      const pauseAction = {\n        action: { name: 'pause' },\n        frame: { pageAlias: 'page', framePath: [] },\n      } satisfies PerformAction;\n      this._pause = this\n          ._performAction(context, pauseAction)\n          .finally(() => this._pause = undefined)\n          .catch(() => {});\n    }\n    await this._pause;\n  }\n\n  async run(pageOrContext: Page | BrowserContext, actions: PerformAction[]) {\n    if (this.isPlaying())\n      return;\n\n    let page: Page;\n    let context: BrowserContext;\n\n    if (pageOrContext instanceof Page) {\n      page = pageOrContext;\n      context = page.context();\n    } else {\n      context = pageOrContext;\n      page = context.pages()[0] ?? await context.newPage(serverSideCallMetadata());\n    }\n\n    const crxApp = await this._crx.get({ incognito: false });\n    const recorder = crxApp?._recorder();\n    let instrumentationListener: InstrumentationListener | undefined;\n\n    if (recorder && crxApp && crxApp._context !== context) {\n      // we intercept incognito call logs and forward them into the recorder\n      const instrumentationListener: InstrumentationListener = {\n        onBeforeCall: recorder.onBeforeCall.bind(recorder),\n        onBeforeInputAction: recorder.onBeforeInputAction.bind(recorder),\n        onCallLog: recorder.onCallLog.bind(recorder),\n        onAfterCall: recorder.onAfterCall.bind(recorder),\n      };\n      if (instrumentationListener)\n        context.instrumentation.addListener(instrumentationListener, context);\n    }\n\n    this._pageAliases.clear();\n    this._pageAliases.set(page, 'page');\n    this.emit('start');\n\n    try {\n      for (const action of actions) {\n        if (action.action.name === 'openPage' && action.frame.pageAlias === 'page')\n          continue;\n        this._currAction = action;\n        await this._performAction(context, action);\n      }\n    } catch (e) {\n      if (e instanceof Stopped)\n        return;\n      throw e;\n    } finally {\n      this._currAction = undefined;\n      this.pause().catch(() => {});\n      if (instrumentationListener)\n        context.instrumentation.removeListener(instrumentationListener);\n    }\n  }\n\n  isPlaying() {\n    return !!this._currAction;\n  }\n\n  async stop() {\n    if (this._currAction || this._pause) {\n      this._currAction = undefined;\n      this._stopping = new ManualPromise();\n      await Promise.all([\n        this._stopping,\n        this._pause,\n      ]);\n      this._stopping = undefined;\n      this._pause = undefined;\n      this.emit('stop');\n    }\n  }\n\n  // \"borrowed\" from ContextRecorder\n  private async _performAction(browserContext: BrowserContext, actionInContext: PerformAction) {\n    this._checkStopped();\n\n    const innerPerformAction = async (mainFrame: Frame | null, actionInContext: PerformAction, cb: (callMetadata: CallMetadata) => Promise<any>): Promise<void> => {\n      // we must use the default browser context here!\n      const context = mainFrame ?? browserContext;\n\n      const traceParams = actionInContext.action.name === 'pause' ?\n        { method: 'pause', params: {}, apiName: 'page.pause' } :\n        traceParamsForAction(actionInContext as ActionInContext);\n\n      const callMetadata: CallMetadata = {\n        id: `call@${createGuid()}`,\n        internal: actionInContext.action.name === 'pause',\n        objectId: context.guid,\n        pageId: mainFrame?._page.guid,\n        frameId: mainFrame?.guid,\n        startTime: monotonicTime(),\n        endTime: 0,\n        type: 'Frame',\n        log: [],\n        location: actionInContext.location,\n        playing: true,\n        ...traceParams,\n      };\n\n      try {\n        this._checkStopped();\n        await context.instrumentation.onBeforeCall(context, callMetadata);\n        this._checkStopped();\n        await cb(callMetadata);\n      } catch (e) {\n        callMetadata.error = serializeError(e);\n      } finally {\n        callMetadata.endTime = monotonicTime();\n        await context.instrumentation.onAfterCall(context, callMetadata);\n        if (callMetadata.error)\n          throw callMetadata.error.error;\n      }\n    };\n\n    // similar to playwright/packages/playwright-core/src/server/recorder/recorderRunner.ts\n    const kActionTimeout = isUnderTest() ? 2000 : 5000;\n\n    const { action } = actionInContext;\n    const pageAliases = this._pageAliases;\n    const context = browserContext;\n\n    if (action.name === 'pause')\n      return await innerPerformAction(null, actionInContext, () => Promise.resolve());\n\n    if (action.name === 'openPage') {\n      return await innerPerformAction(null, actionInContext, async callMetadata => {\n        const pageAlias = actionInContext.frame.pageAlias;\n        if ([...pageAliases.values()].includes(pageAlias))\n          throw new Error(`Page with alias ${pageAlias} already exists`);\n        const newPage = await context.newPage(callMetadata);\n        if (action.url && action.url !== 'about:blank' && action.url !== 'chrome://newtab/') {\n          const navigateCallMetadata = {\n            ...callMetadata,\n            ...traceParamsForAction({ ...actionInContext, action: { name: 'navigate', url: action.url } } as ActionInContext),\n          };\n          await newPage.mainFrame().goto(navigateCallMetadata, action.url, { timeout: kActionTimeout });\n        }\n        pageAliases.set(newPage, pageAlias);\n      });\n    }\n\n    const pageAlias = actionInContext.frame.pageAlias;\n    const page = [...pageAliases.entries()].find(([, alias]) => pageAlias === alias)?.[0];\n    if (!page)\n      throw new Error('Internal error: page not found');\n    const mainFrame = page.mainFrame();\n\n    if (action.name === 'navigate')\n      return await innerPerformAction(mainFrame, actionInContext, callMetadata => mainFrame.goto(callMetadata, action.url, { timeout: kActionTimeout }));\n\n    if (action.name === 'closePage') {\n      return await innerPerformAction(mainFrame, actionInContext, async callMetadata => {\n        pageAliases.delete(page);\n        await page.close(callMetadata, { runBeforeUnload: true });\n      });\n    }\n\n    const selector = buildFullSelector(actionInContext.frame.framePath, action.selector);\n\n    if (action.name === 'click') {\n      const options = toClickOptions(action);\n      return await innerPerformAction(mainFrame, actionInContext, callMetadata => mainFrame.click(callMetadata, selector, { ...options, timeout: kActionTimeout, strict: true }));\n    }\n    if (action.name === 'press') {\n      const modifiers = toKeyboardModifiers(action.modifiers);\n      const shortcut = [...modifiers, action.key].join('+');\n      return await innerPerformAction(mainFrame, actionInContext, callMetadata => mainFrame.press(callMetadata, selector, shortcut, { timeout: kActionTimeout, strict: true }));\n    }\n    if (action.name === 'fill')\n      return await innerPerformAction(mainFrame, actionInContext, callMetadata => mainFrame.fill(callMetadata, selector, action.text, { timeout: kActionTimeout, strict: true }));\n    if (action.name === 'setInputFiles')\n      return await innerPerformAction(mainFrame, actionInContext, () => Promise.reject(new Error(`player does not support setInputFiles yet`)));\n    if (action.name === 'check')\n      return await innerPerformAction(mainFrame, actionInContext, callMetadata => mainFrame.check(callMetadata, selector, { timeout: kActionTimeout, strict: true }));\n    if (action.name === 'uncheck')\n      return await innerPerformAction(mainFrame, actionInContext, callMetadata => mainFrame.uncheck(callMetadata, selector, { timeout: kActionTimeout, strict: true }));\n    if (action.name === 'select') {\n      const values = action.options.map((value: any) => ({ value }));\n      return await innerPerformAction(mainFrame, actionInContext, callMetadata => mainFrame.selectOption(callMetadata, selector, [], values, { timeout: kActionTimeout, strict: true }));\n    }\n    if (action.name === 'assertChecked') {\n      return await innerPerformAction(mainFrame, actionInContext, callMetadata => mainFrame.expect(callMetadata, selector, {\n        selector,\n        expression: 'to.be.checked',\n        expectedValue: { checked: true },\n        isNot: !action.checked,\n        timeout: kActionTimeout,\n      }));\n    }\n    if (action.name === 'assertText') {\n      return await innerPerformAction(mainFrame, actionInContext, callMetadata => mainFrame.expect(callMetadata, selector, {\n        selector,\n        expression: 'to.have.text',\n        expectedText: serializeExpectedTextValues([action.text], { matchSubstring: true, normalizeWhiteSpace: true }),\n        isNot: false,\n        timeout: kActionTimeout,\n      }));\n    }\n    if (action.name === 'assertValue') {\n      return await innerPerformAction(mainFrame, actionInContext, callMetadata => mainFrame.expect(callMetadata, selector, {\n        selector,\n        expression: 'to.have.value',\n        expectedText: serializeExpectedTextValues([action.value], { matchSubstring: false, normalizeWhiteSpace: true }),\n        isNot: false,\n        timeout: kActionTimeout,\n      }));\n    }\n    if (action.name === 'assertVisible') {\n      return await innerPerformAction(mainFrame, actionInContext, callMetadata => mainFrame.expect(callMetadata, selector, {\n        selector,\n        expression: 'to.be.visible',\n        isNot: false,\n        timeout: kActionTimeout,\n      }));\n    }\n    if (action.name === 'assertSnapshot') {\n      return await innerPerformAction(mainFrame, actionInContext, callMetadata => mainFrame.expect(callMetadata, selector, {\n        selector,\n        expression: 'to.match.aria',\n        expectedValue: parseAriaSnapshotUnsafe(yaml, action.snapshot),\n        isNot: false,\n        timeout: kActionTimeout,\n      }));\n    }\n    throw new Error('Internal error: unexpected action ' + (action as any).name);\n  }\n\n  private _checkStopped() {\n    if (this._stopping) {\n      this._stopping.resolve();\n      throw new Stopped();\n    }\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type * as channels from '@protocol/channels';\nimport { RecentLogsCollector } from 'playwright-core/lib/server/utils/debugLogger';\nimport type { BrowserOptions, BrowserProcess } from 'playwright-core/lib/server/browser';\nimport { CRBrowser, CRBrowserContext } from 'playwright-core/lib/server/chromium/crBrowser';\nimport type { CRPage } from 'playwright-core/lib/server/chromium/crPage';\nimport { helper } from 'playwright-core/lib/server/helper';\nimport { SdkObject } from 'playwright-core/lib/server/instrumentation';\nimport { Page } from 'playwright-core/lib/server/page';\nimport type { Playwright } from 'playwright-core/lib/server/playwright';\nimport { Recorder } from 'playwright-core/lib/server/recorder';\nimport { assert } from 'playwright-core/lib/utils';\nimport type * as crxchannels from '../protocol/channels';\nimport { CrxRecorderApp } from './recorder/crxRecorderApp';\nimport { CrxTransport } from './transport/crxTransport';\nimport { BrowserContext } from 'playwright-core/lib/server/browserContext';\nimport type { IRecorder, IRecorderAppFactory } from 'playwright-core/lib/server/recorder/recorderFrontend';\nimport type { Mode } from '@recorder/recorderTypes';\nimport CrxPlayer from './recorder/crxPlayer';\nimport { createTab } from './utils';\nimport { parse } from './recorder/parser';\nimport { generateCode } from 'playwright-core/lib/server/codegen/language';\nimport { languageSet } from 'playwright-core/lib/server/codegen/languages';\nimport { deviceDescriptors } from 'playwright-core/lib/server/deviceDescriptors';\nimport type { DeviceDescriptor } from 'playwright-core/lib/server/types';\nimport { EmptyRecorderApp, RecorderApp } from 'playwright-core/lib/server/recorder/recorderApp';\nimport type { LanguageGeneratorOptions } from 'playwright-core/lib/server/codegen/types';\n\nconst kTabIdSymbol = Symbol('kTabIdSymbol');\n\nexport function tabIdFromPage(page: Page): number | undefined {\n  return (page as any)[kTabIdSymbol] as number;\n}\n\nexport class Crx extends SdkObject {\n\n  private _transport?: CrxTransport;\n  private _browserPromise?: Promise<CRBrowser>;\n  private _crxApplicationPromise: Promise<CrxApplication> | undefined;\n  private _incognitoCrxApplicationPromise: Promise<CrxApplication> | undefined;\n  readonly player: CrxPlayer;\n\n  constructor(playwright: Playwright) {\n    super(playwright, 'crx');\n    this.player = new CrxPlayer(this);\n  }\n\n  async start(options?: crxchannels.CrxStartParams): Promise<CrxApplication> {\n    const { incognito, contextOptions } = options ?? {};\n    const device = deviceDescriptors[options?.deviceName as keyof DeviceDescriptor] ?? {};\n    const viewport = contextOptions?.viewport ?? device.viewport;\n    const newContextOptions: channels.BrowserNewContextOptions = {\n      noDefaultViewport: !viewport,\n      ...device,\n      ...contextOptions,\n      viewport,\n    };\n    if (!this._transport && !this._browserPromise) {\n      const browserLogsCollector = new RecentLogsCollector();\n      const browserProcess: BrowserProcess = {\n        onclose: undefined,\n        process: undefined,\n        // browser.close() calls this function, and closing transport will trigger\n        // Browser.Events.Disconnected and force the browser to resolve the close promise.\n        close: () => this._transport!.closeAndWait(),\n        kill: () => Promise.resolve(),\n      };\n      const browserOptions: BrowserOptions = {\n        name: 'chromium',\n        isChromium: true,\n        headful: true,\n        persistent: newContextOptions,\n        browserProcess,\n        protocolLogger: helper.debugProtocolLogger(),\n        browserLogsCollector,\n        originalLaunchOptions: {},\n        artifactsDir: '/tmp/artifacts',\n        downloadsPath: '/tmp/downloads',\n        tracesDir: '/tmp/traces',\n        ...options,\n      };\n      this._transport = new CrxTransport();\n      this._browserPromise = CRBrowser.connect(this.attribution.playwright, this._transport, browserOptions);\n    }\n    const browser = await this._browserPromise!;\n    const transport = this._transport!;\n\n    if (incognito) {\n      if (this._incognitoCrxApplicationPromise)\n        throw new Error(`incognito crxApplication is already started`);\n      this._incognitoCrxApplicationPromise = this._startIncognitoCrxApplication(browser, transport, newContextOptions);\n      return await this._incognitoCrxApplicationPromise;\n    } else {\n      if (this._crxApplicationPromise)\n        throw new Error(`crxApplication is already started`);\n      this._crxApplicationPromise = this._startCrxApplication(browser, transport);\n      return await this._crxApplicationPromise;\n    }\n  }\n\n  private async _startCrxApplication(browser: CRBrowser, transport: CrxTransport) {\n    const context = browser._defaultContext as CRBrowserContext;\n    const crxApp = new CrxApplication(this, context, transport);\n    context.on(BrowserContext.Events.Close, () => {\n      this._crxApplicationPromise = undefined;\n    });\n    browser.on(CRBrowser.Events.Disconnected, () => {\n      this._browserPromise = undefined;\n      this._transport = undefined;\n    });\n    // override factory otherwise it will fail because the default factory tries to launch a new playwright app\n    RecorderApp.factory = (): IRecorderAppFactory => {\n      return async recorder => {\n        if (recorder instanceof Recorder && recorder._context === context)\n          return await crxApp._createRecorderApp(recorder);\n        else\n          return new EmptyRecorderApp();\n      };\n    };\n    return crxApp;\n  }\n\n  private async _startIncognitoCrxApplication(browser: CRBrowser, transport: CrxTransport, options?: channels.BrowserNewContextParams) {\n    const windows = await chrome.windows.getAll().catch(() => {}) ?? [];\n    const activeTabs = await chrome.tabs.query({ active: true });\n    const incognitoTab = activeTabs.find(t => t.incognito && !t.url?.startsWith('chrome://')) ??\n      await createTab({ incognito: true, windowId: windows.find(w => w.incognito)?.id, url: 'about:blank' });\n\n    const incognitoTabId = incognitoTab.id!;\n\n    let context!: CRBrowserContext;\n    await transport.attach(incognitoTabId, async ({ browserContextId }) => {\n      // ensure we create and initialize the new context before the Target.attachedToTarget event is emitted\n      assert(browserContextId);\n      context = new CRBrowserContext(browser, browserContextId, options ?? {});\n      await context._initialize();\n      browser._contexts.set(browserContextId, context);\n    });\n    context.on(BrowserContext.Events.Close, () => {\n      this._incognitoCrxApplicationPromise = undefined;\n    });\n    const crxApp = new CrxApplication(this, context, transport);\n    await crxApp.attach(incognitoTabId);\n    return crxApp;\n  }\n\n  async get(options: { incognito: boolean }): Promise<CrxApplication | undefined> {\n    return options.incognito ?\n      await this._incognitoCrxApplicationPromise :\n      await this._crxApplicationPromise;\n  }\n}\n\nexport class CrxApplication extends SdkObject {\n  static Events = {\n    RecorderHide: 'hide',\n    RecorderShow: 'show',\n    Attached: 'attached',\n    Detached: 'detached',\n    ModeChanged: 'modeChanged',\n  };\n\n  private _crx: Crx;\n  readonly _context: CRBrowserContext;\n  private _transport: CrxTransport;\n  private _recorderApp?: CrxRecorderApp;\n  private _closed = false;\n\n  constructor(crx: Crx, context: CRBrowserContext, transport: CrxTransport) {\n    super(context, 'crxApplication');\n    this.instrumentation.addListener({\n      onPageClose: page => {\n        page.hideHighlight();\n      },\n    }, null);\n    this._crx = crx;\n    this._context = context;\n    this._transport = transport;\n    context.on(BrowserContext.Events.Page, (page: Page) => {\n      const tabId = this.tabIdForPage(page);\n      if (!tabId)\n        return;\n\n      (page as any)[kTabIdSymbol] = tabId;\n\n      page.on(Page.Events.Close, () => {\n        this.emit(CrxApplication.Events.Detached, { tabId });\n      });\n      this.emit(CrxApplication.Events.Attached, { page, tabId });\n    });\n    context.on(BrowserContext.Events.Close, () => this.close().catch(() => {}));\n    chrome.windows.onRemoved.addListener(this.onWindowRemoved);\n  }\n\n  _browser() {\n    return this._context._browser as CRBrowser;\n  }\n\n  isIncognito() {\n    return this._context._browser._defaultContext !== this._context;\n  }\n\n  _crPages() {\n    return [...this._browser()._crPages.values()].filter(p => this._transport.isIncognito(p._targetId) === this.isIncognito());\n  }\n\n  _crPageByTargetId(targetId: string) {\n    const crPage = this._browser()._crPages.get(targetId);\n    if (crPage && this._transport.isIncognito(crPage._targetId) === this.isIncognito())\n      return crPage;\n  }\n\n  tabIdForPage(page: Page) {\n    const targetId = this._crPages().find(crPage => crPage._page === page)?._targetId;\n    if (!targetId)\n      return;\n\n    return this._transport.getTabId(targetId);\n  }\n\n  async showRecorder(options?: crxchannels.CrxApplicationShowRecorderParams) {\n    if (!this._recorderApp) {\n      const { mode, ...otherOptions } = options ?? {};\n      const recorderParams = {\n        language: options?.language ?? 'playwright-test',\n        mode: mode === 'none' ? undefined : mode,\n        ...otherOptions\n      };\n      Recorder.show(this._context, recorder => this._createRecorderApp(recorder), recorderParams);\n    }\n\n    await this._recorderApp!.open(options);\n  }\n\n  async hideRecorder() {\n    await this._recorderApp?.close();\n  }\n\n  setMode(mode: Mode) {\n    this._recorderApp?._recorder.setMode(mode);\n  }\n\n  async attach(tabId: number): Promise<Page> {\n    const { targetId, browserContextId } = await this._transport.attach(tabId);\n    const tab = await chrome.tabs.get(tabId);\n\n    if (tab.incognito !== this.isIncognito() || (this._context._browserContextId && browserContextId !== this._context._browserContextId)) {\n      await this._transport.detach(targetId);\n      throw new Error('Tab is not in the expected browser context');\n    }\n    const crPage = this._crPageByTargetId(targetId);\n    assert(crPage);\n    const pageOrError = await crPage._page.waitForInitializedOrError();\n    if (pageOrError instanceof Error)\n      throw pageOrError;\n    return pageOrError;\n  }\n\n  async attachAll(params: crxchannels.CrxApplicationAttachAllParams) {\n    const tabs = await chrome.tabs.query(params);\n    const pages = await Promise.all(tabs.map(async tab => {\n      const baseUrl = chrome.runtime.getURL('');\n      if (tab.incognito === this.isIncognito() && tab.id && !tab.url?.startsWith(baseUrl))\n        return await this.attach(tab.id).catch(() => {});\n    }));\n    return pages.filter(Boolean) as Page[];\n  }\n\n  async detach(tabIdOrPage: number | Page) {\n    const targetId = tabIdOrPage instanceof Page ?\n      (tabIdOrPage.delegate as CRPage)._targetId :\n      this._transport.getTargetId(tabIdOrPage);\n\n    await this._doDetach(targetId);\n  }\n\n  async detachAll() {\n    const tabs = await chrome.tabs.query({});\n    await Promise.all(tabs.map(async tab => {\n      if (tab.id && tab.incognito === this.isIncognito())\n        await this.detach(tab.id).catch(() => {});\n    }));\n  }\n\n  async newPage(params: crxchannels.CrxApplicationNewPageParams) {\n    const tab = await createTab({ incognito: this.isIncognito(), ...params });\n    if (!tab?.id)\n      throw new Error(`No ID found for tab`);\n    return await this.attach(tab.id);\n  }\n\n  async close(options?: { closePages?: boolean, closeWindows?: boolean }) {\n    if (this._closed)\n      return;\n\n    if (options?.closeWindows && !this.isIncognito())\n      throw new Error('closeWindows is only supported in incognito mode');\n\n    this._closed = true;\n\n    chrome.windows.onRemoved.removeListener(this.onWindowRemoved);\n\n    if (options?.closeWindows) {\n      const windows = await chrome.windows.getAll();\n      await Promise.all(windows.filter(w => w.incognito && w.id).map(w => chrome.windows.remove(w.id!)));\n    } else {\n      await Promise.all(this._crPages().map(crPage => options?.closePages ? crPage.closePage(false) : this._doDetach(crPage._targetId)));\n    }\n\n    await this._context.close({});\n  }\n\n  list(code: string) {\n    const tests = parse(code);\n    return tests.map(({ title, options, location }) => ({ title, options, location }));\n  }\n\n  load(code: string) {\n    this._recorderApp?.load(code);\n  }\n\n  async run(code: string, page?: Page) {\n    const [{ actions }] = parse(code);\n    await this._crx.player.run(page ?? this._context, actions);\n  }\n\n  async parseForTest(originCode: string) {\n    const [{ actions, options }] = parse(originCode);\n    const jsLanguage = [...languageSet()].find(l => l.id === 'playwright-test');\n    const code = generateCode(actions, jsLanguage!, { browserName: '', launchOptions: {}, contextOptions: {}, ...options } as LanguageGeneratorOptions).text;\n    return { actions, options, code };\n  }\n\n  async _createRecorderApp(recorder: IRecorder) {\n    if (!this._recorderApp) {\n      this._recorderApp = new CrxRecorderApp(this._crx, recorder as Recorder);\n      this._recorderApp.on('show', () => this.emit(CrxApplication.Events.RecorderShow));\n      this._recorderApp.on('hide', () => this.emit(CrxApplication.Events.RecorderHide));\n      this._recorderApp.on('modeChanged', event => {\n        this.emit(CrxApplication.Events.ModeChanged, event);\n      });\n    }\n    return this._recorderApp;\n  }\n\n  _recorder() {\n    return this._recorderApp?._recorder;\n  }\n\n  private onWindowRemoved = async () => {\n    const windows = await chrome.windows.getAll();\n    if (this.isIncognito() && windows.every(w => !w.incognito))\n      await this.close({});\n  };\n\n  private async _doDetach(targetId?: string) {\n    if (!targetId)\n      return;\n\n    if (this._transport.isIncognito(targetId) !== this.isIncognito())\n      throw new Error('Tab is not in the expected browser context');\n\n    const crPage = this._crPageByTargetId(targetId);\n    if (!crPage)\n      return;\n\n    const pageOrError = await crPage._page.waitForInitializedOrError();\n    if (pageOrError instanceof Error)\n      throw pageOrError;\n\n    // ensure we don't have any injected highlights\n    await Promise.all([\n      this._recorderApp?.uninstall(pageOrError),\n      pageOrError.hideHighlight(),\n    ]);\n    const closed = new Promise(x => pageOrError.once(Page.Events.Close, x));\n    await this._transport.detach(targetId);\n    await closed;\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Playwright } from 'playwright-core/lib/server/playwright';\nimport { Crx } from './crx';\n\nexport class CrxPlaywright extends Playwright {\n\n  readonly _crx: Crx;\n\n  constructor() {\n    super({ sdkLanguage: 'javascript' });\n    this._crx = new Crx(this);\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type * as channels from '../../protocol/channels';\nimport { PageDispatcher } from 'playwright-core/lib/server/dispatchers/pageDispatcher';\nimport type { Crx } from '../crx';\nimport { CrxApplication } from '../crx';\nimport type { RootDispatcher } from 'playwright-core/lib/server/dispatchers/dispatcher';\nimport { Dispatcher } from 'playwright-core/lib/server/dispatchers/dispatcher';\nimport { BrowserContextDispatcher } from 'playwright-core/lib/server/dispatchers/browserContextDispatcher';\n\nexport class CrxDispatcher extends Dispatcher<Crx, channels.CrxChannel, RootDispatcher> implements channels.CrxChannel {\n  _type_Crx = true;\n\n  constructor(scope: RootDispatcher, crx: Crx) {\n    super(scope, crx, 'Crx', { });\n  }\n\n  async start(params: channels.CrxStartParams): Promise<channels.CrxStartResult> {\n    return { crxApplication: new CrxApplicationDispatcher(this, await this._object.start(params)) };\n  }\n}\n\nexport class CrxApplicationDispatcher extends Dispatcher<CrxApplication, channels.CrxApplicationChannel, CrxDispatcher> implements channels.CrxApplicationChannel {\n  _type_CrxApplication = true;\n\n  private _context: BrowserContextDispatcher;\n\n  constructor(scope: CrxDispatcher, crxApplication: CrxApplication) {\n    const context = new BrowserContextDispatcher(scope, crxApplication._context);\n    super(scope, crxApplication, 'CrxApplication', { context });\n    this._context = context;\n    const dispatchEvent = (this._dispatchEvent as any).bind(this);\n    this.addObjectListener(CrxApplication.Events.RecorderHide, () => {\n      dispatchEvent('hide');\n    });\n    this.addObjectListener(CrxApplication.Events.RecorderShow, () => {\n      dispatchEvent('show');\n    });\n    this.addObjectListener(CrxApplication.Events.Attached, ({ tabId, page }) => {\n      dispatchEvent('attached', { tabId, page: PageDispatcher.from(this._context, page) });\n    });\n    this.addObjectListener(CrxApplication.Events.Detached, ({ tabId }) => {\n      dispatchEvent('detached', { tabId });\n    });\n    this.addObjectListener(CrxApplication.Events.ModeChanged, event => {\n      dispatchEvent('modeChanged', event);\n    });\n  }\n\n  async attach(params: channels.CrxApplicationAttachParams): Promise<channels.CrxApplicationAttachResult> {\n    return { page: PageDispatcher.from(this._context, await this._object.attach(params.tabId)) };\n  }\n\n  async attachAll(params: channels.CrxApplicationAttachAllParams): Promise<channels.CrxApplicationAttachAllResult> {\n    return { pages: (await this._object.attachAll(params)).map(page => PageDispatcher.from(this._context, page)) };\n  }\n\n  async detach(params: channels.CrxApplicationDetachParams): Promise<void> {\n    if ((params.tabId && params.page))\n      throw new Error(`Only either tabId or page must be specified, not both`);\n    if ((!params.tabId && !params.page))\n      throw new Error(`Either tabId or page must be specified, not none`);\n    await this._object.detach(params.tabId ?? (params.page as PageDispatcher)._object);\n  }\n\n  async detachAll(): Promise<void> {\n    await this._object.detachAll();\n  }\n\n  async newPage(params: channels.CrxApplicationNewPageParams): Promise<channels.CrxApplicationNewPageResult> {\n    return { page: PageDispatcher.from(this._context, await this._object.newPage(params)) };\n  }\n\n  async showRecorder(params: channels.CrxApplicationShowRecorderParams): Promise<void> {\n    await this._object.showRecorder(params);\n  }\n\n  async hideRecorder(): Promise<void> {\n    await this._object.hideRecorder();\n  }\n\n  async setMode(params: channels.CrxApplicationSetModeParams): Promise<channels.CrxApplicationSetModeResult> {\n    this._object.setMode(params.mode);\n  }\n\n  async close(): Promise<void> {\n    await this._object.close();\n    this._dispose();\n  }\n\n  async list(params: channels.CrxApplicationListParams): Promise<channels.CrxApplicationListResult> {\n    const tests = this._object.list(params.code);\n    return { tests };\n  }\n\n  async load(params: channels.CrxApplicationLoadParams): Promise<channels.CrxApplicationLoadResult> {\n    this._object.load(params.code);\n  }\n\n  async run(params: channels.CrxApplicationRunParams): Promise<void> {\n    await this._object.run(params.code, (params.page as PageDispatcher)?._object);\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the 'License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type * as channels from '@protocol/channels';\nimport { AndroidDispatcher } from 'playwright-core/lib/server/dispatchers/androidDispatcher';\nimport { BrowserTypeDispatcher } from 'playwright-core/lib/server/dispatchers/browserTypeDispatcher';\nimport type { RootDispatcher } from 'playwright-core/lib/server/dispatchers/dispatcher';\nimport { Dispatcher } from 'playwright-core/lib/server/dispatchers/dispatcher';\nimport { ElectronDispatcher } from 'playwright-core/lib/server/dispatchers/electronDispatcher';\nimport { LocalUtilsDispatcher } from 'playwright-core/lib/server/dispatchers/localUtilsDispatcher';\nimport { APIRequestContextDispatcher } from 'playwright-core/lib/server/dispatchers/networkDispatchers';\nimport { GlobalAPIRequestContext } from 'playwright-core/lib/server/fetch';\nimport type { Playwright } from 'playwright-core/lib/server/playwright';\nimport { CrxDispatcher } from './crxDispatcher';\nimport type { CrxPlaywright } from '../crxPlaywright';\nimport { CrxPlaywrightInitializer } from 'src/protocol/channels';\n\n// based on PlaywrightDispatcher\nexport class CrxPlaywrightDispatcher extends Dispatcher<Playwright, channels.PlaywrightChannel, RootDispatcher> implements channels.PlaywrightChannel {\n  _type_Playwright;\n\n  constructor(scope: RootDispatcher, playwright: CrxPlaywright) {\n    super(scope, playwright, 'Playwright', {\n      chromium: new BrowserTypeDispatcher(scope, playwright.chromium),\n      firefox: new BrowserTypeDispatcher(scope, playwright.firefox),\n      webkit: new BrowserTypeDispatcher(scope, playwright.webkit),\n      bidiChromium: new BrowserTypeDispatcher(scope, playwright.bidiChromium),\n      bidiFirefox: new BrowserTypeDispatcher(scope, playwright.bidiFirefox),\n      android: new AndroidDispatcher(scope, playwright.android),\n      electron: new ElectronDispatcher(scope, playwright.electron),\n      utils: new LocalUtilsDispatcher(scope, playwright),\n      _crx: new CrxDispatcher(scope, playwright._crx),\n    } as CrxPlaywrightInitializer);\n    this._type_Playwright = true;\n  }\n\n  async newRequest(params: channels.PlaywrightNewRequestParams): Promise<channels.PlaywrightNewRequestResult> {\n    const request = new GlobalAPIRequestContext(this._object, params);\n    return { request: APIRequestContextDispatcher.from(this.parentScope(), request) };\n  }\n\n  async cleanup() {\n    // do nothing\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// some types are commented out because they are not used in the extension\nimport {\n  Accessibility,\n  Browser,\n  BrowserContext,\n  BrowserType,\n  Clock,\n  ConsoleMessage,\n  Coverage,\n  Dialog,\n  Download,\n  // Electron,\n  // ElectronApplication,\n  Locator,\n  FrameLocator,\n  ElementHandle,\n  FileChooser,\n  TimeoutError,\n  Frame,\n  Keyboard,\n  Mouse,\n  Touchscreen,\n  JSHandle,\n  Route,\n  WebSocket,\n  WebSocketRoute,\n  // APIRequest,\n  // APIRequestContext,\n  // APIResponse,\n  Page,\n  Selectors,\n  Tracing,\n  Video,\n  Worker,\n  CDPSession,\n  Playwright,\n  WebError,\n} from 'playwright-core/lib/client/api';\n\nimport {\n  Crx,\n  CrxApplication,\n  CrxRecorder,\n} from './crx';\nimport { currentZone } from 'playwright-core/lib/utils';\n\ntype ApiTypeMap = {\n  'accessibility': Accessibility,\n  // 'android': Android,\n  // 'androidDevice': AndroidDevice,\n  // 'androidWebView': AndroidWebView,\n  // 'androidInput': AndroidInput,\n  // 'androidSocket': AndroidSocket,\n  'browser': Browser,\n  'browserContext': BrowserContext,\n  'browserType': BrowserType,\n  'clock': Clock,\n  'consoleMessage': ConsoleMessage,\n  'coverage': Coverage,\n  'dialog': Dialog,\n  'download': Download,\n  // 'electron': Electron,\n  // 'electronApplication': ElectronApplication,\n  'locator': Locator,\n  'frameLocator': FrameLocator,\n  'elementHandle': ElementHandle,\n  'fileChooser': FileChooser,\n  'timeoutError': TimeoutError,\n  'frame': Frame,\n  'keyboard': Keyboard,\n  'mouse': Mouse,\n  'touchscreen': Touchscreen,\n  'jSHandle': JSHandle,\n  'route': Route,\n  'webSocket': WebSocket,\n  'webSocketRoute': WebSocketRoute,\n  // 'request': APIRequest,\n  // 'requestContext': APIRequestContext,\n  // 'response': APIResponse,\n  'page': Page,\n  'selectors': Selectors,\n  'tracing': Tracing,\n  'video': Video,\n  'worker': Worker,\n  'session': CDPSession,\n  'playwright': Playwright,\n  'webError': WebError,\n\n  // from crx\n  'crx': Crx,\n  'crxApplication': CrxApplication,\n  'crxRecorder': CrxRecorder\n};\n\ntype KeysOfAsyncMethods<T> = {\n  [K in keyof T]: T[K] extends (...args: any[]) => Promise<any> ? (K extends `_${string}` | 'removeAllListeners' ? never : K) : never;\n}[Extract<keyof T, string>];\n\nconst apis: { [ApiK in keyof ApiTypeMap]: [ApiTypeMap[ApiK], { [K in KeysOfAsyncMethods<ApiTypeMap[ApiK]>]: boolean }] } = {\n  accessibility: [Accessibility.prototype, { snapshot: true }],\n  // android: [Android.prototype],\n  // androidDevice: [AndroidDevice.prototype],\n  // androidWebView: [AndroidWebView.prototype],\n  // androidInput: [AndroidInput.prototype],\n  // androidSocket: [AndroidSocket.prototype],\n  browser: [Browser.prototype, { newContext: true, newPage: true, newBrowserCDPSession: true, startTracing: true, stopTracing: true, close: true }],\n  browserContext: [BrowserContext.prototype, {\n    newPage: true,\n    cookies: true,\n    addCookies: true,\n    clearCookies: true,\n    grantPermissions: true,\n    clearPermissions: true,\n    setGeolocation: true,\n    setExtraHTTPHeaders: true,\n    setOffline: true,\n    setHTTPCredentials: true,\n    addInitScript: true,\n    exposeBinding: true,\n    exposeFunction: true,\n    route: true,\n    routeWebSocket: true,\n    routeFromHAR: true,\n    unrouteAll: true,\n    unroute: true,\n    waitForEvent: true,\n    storageState: true,\n    newCDPSession: true,\n    close: true\n  }],\n  browserType: [BrowserType.prototype, { launch: true, launchServer: true, launchPersistentContext: true, connect: true, connectOverCDP: true }],\n  clock: [Clock.prototype, { install: true, fastForward: true, pauseAt: true, resume: true, runFor: true, setFixedTime: true, setSystemTime: true }],\n  consoleMessage: [ConsoleMessage.prototype, {}],\n  coverage: [Coverage.prototype, { startCSSCoverage: true, stopCSSCoverage: true, startJSCoverage: true, stopJSCoverage: true }],\n  dialog: [Dialog.prototype, { accept: true, dismiss: true }],\n  download: [Download.prototype, { cancel: true, createReadStream: true, path: true, failure: true, delete: true, saveAs: true }],\n  // electron: [Electron.prototype, {}],\n  // electronApplication: [ElectronApplication.prototype, {}],\n  locator: [Locator.prototype, {\n    boundingBox: true,\n    check: true,\n    click: true,\n    dblclick: true,\n    dispatchEvent: true,\n    dragTo: true,\n    evaluate: true,\n    evaluateAll: true,\n    evaluateHandle: true,\n    fill: true,\n    clear: true,\n    highlight: true,\n    elementHandle: true,\n    elementHandles: true,\n    focus: true,\n    blur: true,\n    count: true,\n    getAttribute: true,\n    hover: true,\n    innerHTML: true,\n    innerText: true,\n    inputValue: true,\n    isChecked: true,\n    isDisabled: true,\n    isEditable: true,\n    isEnabled: true,\n    isHidden: true,\n    isVisible: true,\n    press: true,\n    screenshot: true,\n    ariaSnapshot: true,\n    scrollIntoViewIfNeeded: true,\n    selectOption: true,\n    selectText: true,\n    setChecked: true,\n    setInputFiles: true,\n    tap: true,\n    textContent: true,\n    type: true,\n    pressSequentially: true,\n    uncheck: true,\n    all: true,\n    allInnerTexts: true,\n    allTextContents: true,\n    waitFor: true,\n  }],\n  frameLocator: [FrameLocator.prototype, {}],\n  elementHandle: [ElementHandle.prototype, {\n    // from JSHandle\n    evaluate: true,\n    evaluateHandle: true,\n    getProperty: true,\n    getProperties: true,\n    jsonValue: true,\n    dispose: true,\n    // from ElementHandle\n    ownerFrame: true,\n    contentFrame: true,\n    getAttribute: true,\n    inputValue: true,\n    textContent: true,\n    innerText: true,\n    innerHTML: true,\n    isChecked: true,\n    isDisabled: true,\n    isEditable: true,\n    isEnabled: true,\n    isHidden: true,\n    isVisible: true,\n    dispatchEvent: true,\n    scrollIntoViewIfNeeded: true,\n    hover: true,\n    click: true,\n    dblclick: true,\n    tap: true,\n    selectOption: true,\n    fill: true,\n    selectText: true,\n    setInputFiles: true,\n    focus: true,\n    type: true,\n    press: true,\n    check: true,\n    uncheck: true,\n    setChecked: true,\n    boundingBox: true,\n    screenshot: true,\n    $: true,\n    $$: true,\n    $eval: true,\n    $$eval: true,\n    waitForElementState: true,\n    waitForSelector: true,\n  }],\n  fileChooser: [FileChooser.prototype, { setFiles: true }],\n  timeoutError: [TimeoutError.prototype, {}],\n  frame: [Frame.prototype, {\n    goto: true,\n    waitForNavigation: true,\n    waitForLoadState: true,\n    waitForURL: true,\n    frameElement: true,\n    evaluateHandle: true,\n    evaluate: true,\n    $: true,\n    $$: true,\n    waitForSelector: true,\n    dispatchEvent: true,\n    $eval: true,\n    $$eval: true,\n    content: true,\n    setContent: true,\n    addScriptTag: true,\n    addStyleTag: true,\n    click: true,\n    dblclick: true,\n    dragAndDrop: true,\n    tap: true,\n    fill: true,\n    focus: true,\n    textContent: true,\n    innerText: true,\n    innerHTML: true,\n    getAttribute: true,\n    inputValue: true,\n    isChecked: true,\n    isDisabled: true,\n    isEditable: true,\n    isEnabled: true,\n    isHidden: true,\n    isVisible: true,\n    hover: true,\n    selectOption: true,\n    setInputFiles: true,\n    type: true,\n    press: true,\n    check: true,\n    uncheck: true,\n    setChecked: true,\n    waitForTimeout: true,\n    waitForFunction: true,\n    title: true\n  }],\n  keyboard: [Keyboard.prototype, { down: true, up: true, insertText: true, type: true, press: true }],\n  mouse: [Mouse.prototype, { click: true, dblclick: true, down: true, up: true, move: true, wheel: true }],\n  touchscreen: [Touchscreen.prototype, { tap: true }],\n  jSHandle: [JSHandle.prototype, { evaluate: true, evaluateHandle: true, getProperty: true, jsonValue: true, getProperties: true, dispose: true }],\n  route: [Route.prototype, { fallback: true, abort: true, fetch: true, fulfill: true, continue: true }],\n  webSocket: [WebSocket.prototype, { waitForEvent: true }],\n  webSocketRoute: [WebSocketRoute.prototype, { close: true }],\n  // request: [APIRequest.prototype, {}],\n  // requestContext: [APIRequestContext.prototype, {}],\n  // response: [APIResponse.prototype, {}],\n  page: [Page.prototype, {\n    opener: true,\n    waitForSelector: true,\n    dispatchEvent: true,\n    evaluateHandle: true,\n    $: true,\n    $$: true,\n    $eval: true,\n    $$eval: true,\n    addScriptTag: true,\n    addStyleTag: true,\n    exposeFunction: true,\n    exposeBinding: true,\n    setExtraHTTPHeaders: true,\n    content: true,\n    setContent: true,\n    goto: true,\n    reload: true,\n    addLocatorHandler: true,\n    removeLocatorHandler: true,\n    waitForLoadState: true,\n    waitForNavigation: true,\n    waitForURL: true,\n    waitForRequest: true,\n    waitForResponse: true,\n    waitForEvent: true,\n    goBack: true,\n    goForward: true,\n    requestGC: true,\n    emulateMedia: true,\n    setViewportSize: true,\n    evaluate: true,\n    addInitScript: true,\n    route: true,\n    routeFromHAR: true,\n    routeWebSocket: true,\n    unrouteAll: true,\n    unroute: true,\n    screenshot: true,\n    title: true,\n    bringToFront: true,\n    close: true,\n    click: true,\n    dragAndDrop: true,\n    dblclick: true,\n    tap: true,\n    fill: true,\n    focus: true,\n    textContent: true,\n    innerText: true,\n    innerHTML: true,\n    getAttribute: true,\n    inputValue: true,\n    isChecked: true,\n    isDisabled: true,\n    isEditable: true,\n    isEnabled: true,\n    isHidden: true,\n    isVisible: true,\n    hover: true,\n    selectOption: true,\n    setInputFiles: true,\n    type: true,\n    press: true,\n    check: true,\n    uncheck: true,\n    setChecked: true,\n    waitForTimeout: true,\n    waitForFunction: true,\n    pause: true,\n    pdf: true,\n  }],\n  selectors: [Selectors.prototype, { register: true }],\n  tracing: [Tracing.prototype, { group: true, groupEnd: true, start: true, startChunk: true, stop: true, stopChunk: true }],\n  video: [Video.prototype, { delete: true, path: true, saveAs: true }],\n  worker: [Worker.prototype, { evaluate: true, evaluateHandle: true }],\n  session: [CDPSession.prototype, { send: true, detach: true }],\n  playwright: [Playwright.prototype, { devices: false }],\n  webError: [WebError.prototype, {}],\n\n  // from crx\n  crx: [Crx.prototype, { start: true, get: true }],\n  crxApplication: [CrxApplication.prototype, { attach: true, attachAll: true, close: true, detach: true, detachAll: true, newPage: true }],\n  crxRecorder: [CrxRecorder.prototype, { hide: true, list: true, load: true, run: true, setMode: true, show: true }],\n};\n\nconst kCrxZoneWrapped = Symbol('crxZone');\n\nexport function wrapClientApis() {\n  for (const [typeName, [proto, props]] of Object.entries(apis)) {\n    for (const [key, needsWrap] of Object.entries(props)) {\n      if (!needsWrap)\n        continue;\n      const originalFn = (proto as any)[key!];\n\n      if (!originalFn || typeof originalFn !== 'function')\n        throw new Error(`Method ${key} not found in ${typeName}`);\n\n      if (originalFn[kCrxZoneWrapped] === true)\n        continue;\n\n      const wrapFn = async function(this: any, ...args: any[]) {\n        const apiName = currentZone().data<{ apiName: string }>('crxZone');\n        if (apiName)\n          return await originalFn.apply(this, args);\n        return await currentZone().with('crxZone', { apiName: `${typeName}.${key}` }).run(async () => await originalFn.apply(this, args));\n      };\n      wrapFn[kCrxZoneWrapped] = true;\n      (proto as any)[key!] = wrapFn;\n    }\n  }\n}\n","/**\n * Copyright (c) Rui Figueira.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport './shims/global';\n\nimport './protocol/validator';\n\nimport { DispatcherConnection, RootDispatcher } from 'playwright-core/lib/server';\nimport { CrxConnection } from './client/crxConnection';\nimport type { CrxPlaywright as CrxPlaywrightAPI } from './client/crxPlaywright';\nimport { CrxPlaywright } from './server/crxPlaywright';\nimport { CrxPlaywrightDispatcher } from './server/dispatchers/crxPlaywrightDispatcher';\nimport { PageBinding } from 'playwright-core/lib/server/page';\n\nimport { wrapClientApis } from './client/crxZone';\nimport { nodePlatform } from 'playwright-core/lib/utils';\n\nexport { debug as _debug } from 'debug';\nexport { setUnderTest as _setUnderTest, isUnderTest as _isUnderTest } from 'playwright-core/lib/utils';\n\n// avoid conflicts with playwright when testing\nPageBinding.kBindingName = '__crx__binding__';\n\nconst playwright = new CrxPlaywright();\n\nconst clientConnection = new CrxConnection(nodePlatform);\nconst dispatcherConnection = new DispatcherConnection(true /* local */);\n\n// Dispatch synchronously at first.\ndispatcherConnection.onmessage = message => clientConnection.dispatch(message);\nclientConnection.onmessage = message => dispatcherConnection.dispatch(message);\n\nconst rootScope = new RootDispatcher(dispatcherConnection);\n\n// Initialize Playwright channel.\nnew CrxPlaywrightDispatcher(rootScope, playwright);\nconst playwrightAPI = clientConnection.getObjectWithKnownName('Playwright') as CrxPlaywrightAPI;\n\n// Switch to async dispatch after we got Playwright object.\ndispatcherConnection.onmessage = message => setImmediate(() => clientConnection.dispatch(message));\nclientConnection.onmessage = message => setImmediate(() => dispatcherConnection.dispatch(message));\n\nclientConnection.toImpl = (x: any) => x ? dispatcherConnection._dispatcherByGuid.get(x._guid)!._object : dispatcherConnection._dispatcherByGuid.get('');\n(playwrightAPI as any)._toImpl = clientConnection.toImpl;\n\nexport const { _crx: crx, selectors, errors } = playwrightAPI;\nexport default playwrightAPI;\n\nwrapClientApis();\n"],"names":["process","browserModule","e","noop","global","undefined","setImmediate","this","len","i","len2","buffer","offset","require$$0","ieee754","require$$1","Buffer","from","encoding","string","compare","toString","equals","max","read","write","byteLength","min","errors","range","type","src","constants","Stats","node","Stats_1","shams","hasSymbols","ref","isNaN","sign","concatty","slicy","implementation","Empty","require$$2","require$$3","callBind","gOPD","getProto","require$$4","require$$5","require$$6","require$$7","abs","require$$8","floor","require$$9","require$$10","require$$11","pow","require$$12","round","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","doEval","require$$23","hasOwn","require$$24","stringToPath","quote","getBaseIntrinsic","gopd","defineDataProperty","hasPropertyDescriptors","setFunctionLength","actualApply","applyBind","callBound","isArguments","isGeneratorFunction","reflectApply","isCallable","hasOwnProperty","forEachArray","forEachString","forEachObject","forEach","availableTypedArrays","whichTypedArray","isTypedArray","isMap","isBufferBrowser","inherits_browserModule","getOwnPropertyDescriptors","isString","x","isObject","set","formatValue","hash","isError","isRegExp","isDate","base","isArray","key","re","timestamp","promisify","self","_typeof","o","_setPrototypeOf","p","_getPrototypeOf","assert","util","NodeError","ownKeys","r","_defineProperty","_toPropertyKey","_toPrimitive","_wrapNativeSuper","Class","_construct","Parent","args","ERR_INVALID_ARG_TYPE","source","other","AssertionError","options","objectKeys","map","polyfill","shim","_unsupportedIterableToArray","_arrayLikeToArray","arrayFromSet","arrayFromMap","objectIs","_i","assertModule","warn","Comparison","error","messages","Dirent","link","Dirent_1","path","pathModule","_a","process_1","ReflectApply","ReflectOwnKeys","NumberIsNaN","EventEmitter","eventsModule","once","checkListener","events","state","unwrapListeners","index","_b","Node","setImmediate_1","queueMicrotask_1","setTimeoutUnref","setTimeoutUnref_1","AbortController","Blob","isBlob","AggregateError","signals","types","String","validateBuffer","data","stream","utils","Promise","readable","writable","endOfStreamModule","Symbol","err","destroy_1","Stream","legacy","addAbortSignal","Uint8Array","buffer_list","close","debug","decoder","Error","writev","duplexify","then","duplex","transform","pipeline_1","compose","Boolean","Number","asIndexedPairs","flatMap","drop","take","promises","streamModule","FLAGS","punycode","digit","int","isPlainObject","formats","compactQueue","arrayToObject","merge","encode","compact","isBuffer","combine","maybeMap","isNonNullishPrimitive","stringify","encoder","sideChannel","value","normalizeStringifyOptions","normalizeParseOptions","parse","lib","url","fs","path2","FileHandle_1","FileHandle","FsPromises_1","FsPromises","printTree","printTree_1","tab","getOptions","join","isEmpty","symlink","retry","removers","memfs","open","browser","random","original","signalExitModule","isWin","unload","emit","load","processReallyExit","processEmit","stat","lock","isOverThreshold","file","lockfile","styles","os","hasFlag","osRelease","version","trap","zalgo","text","colors","letter","build","builder","style","sequencer","ms","extend","common","diff","line","toPos","maxErrors","_i2","_loop","current","splitLines","patchObj","structuredPatch","escapeHTML","crypto","streamBrowser","errorsBrowser","_stream_writable","realHasInstance","get","keys","_stream_duplex","onlegacyfinish","onfinish","onend","onerror","onclose","onrequest","endOfStream","createReadableStreamAsyncIterator","async_iterator","fromBrowser","_stream_readable","EElistenerCount","n","_stream_transform","_stream_passthrough","W","sha","sha256","sha224","dh","sha512","sha384","sha_jsModule","md5","toBuffer","hmac","cbc","des","modes","xor","aes","ghash","module","comb10MulTo","ws","prime","mont","brorandModule","bn","brorand","primes","generatePrime","allocate","cachedProperty","curve","obj","curves","ec","signature","Position","eddsa","elliptic","reporter","der","der_1","header","size","out","pem","encoders","decoders","api","name","asn1","asn1_1","cipher","fixProc","signModule","aliases","mgf","publicEncrypt","privateDecrypt","safeBuffer","bytes","algos","uri","mainModule","getProxyForUrl","promisify_1","createAgent","parseProxyResponse","parseProxyResponse_1","HttpsProxyAgent","agent","createHttpsProxyAgent","dist","fDCTQuant","Diff","quality","component","k","decode","mcu","sample","frame","componentId","j","comment","cp","mime","concatMap","minimatch","Minimatch","filter","makeRe","braceExpand","isWsl","isWslModule","command","binary","crc","trees","deflate","deflate_1","inflate","inflate_1","async","binding","chunkstreamModule","paethPredictor","filterParseModule","interlace","filterParseAsyncModule","crcModule","Parser","parserModule","bitmapper","formatNormaliser","parserAsyncModule","packerModule","packerAsyncModule","syncReaderModule","inflatedData","parser","packer","png","PNG","cmd","option","argument","helper","str","suggestSimilar","suggestSimilar_1","parseOptions","progress","SocksCommand","Socks4Response","Socks5Auth","Socks5Response","Socks5HostType","SocksClientState","t","z","sprintf","helpers","net","SocksProxyAgent","createSocksProxyAgent","SCALAR","isScalar","isCollection","BREAK","SKIP","REMOVE","visit","_c","_d","_e","yaml","res","schema","end","isBlock","literal","seq","floatNaN","floatExp","float","intIdentify","intResolve","intStringify","intOct","intHex","pairs","omap","schema$2","tags","composeNode","composeEmptyNode","CN","tag","cst","ch","start","jpegjs","yamlLibrary","WebSocketServer","wsReceiver","Receiver","wsSender","Sender","safe","cb","onceModule","bufferStream","getStream","getStreamModule","ReadStream","WriteStream","yauzl","ZipFile","createWriteStream","extractZip","yazl","entry","crc32","something","content","mkdirIfNeeded","childProcess.fork","ProgressBar","isOfficiallySupportedPlatform","childProcess.spawn","deps","tokenize","codepoint","css.tokenize","css.EOFToken","css.AtKeywordToken","css.BadStringToken","css.BadURLToken","css.ColumnToken","css.CDOToken","css.CDCToken","css.SemicolonToken","css.OpenCurlyToken","css.CloseCurlyToken","css.URLToken","css.PercentageToken","css.WhitespaceToken","css.IdentToken","css.StringToken","css.NumberToken","css.CommaToken","css.OpenParenToken","css.CloseParenToken","css.FunctionToken","css.DelimToken","result","css.HashToken","css.ColonToken","css.OpenSquareToken","css.CloseSquareToken","part","selector","selectorPart","parseURL","pixelmatch","defaultOptions","drawPixel","certificate","xhr","capability","response","requestModule","http","https","dns","request","WebSocket","endpoint","require","asyncLocalStorage","util.promisify","pipeline","sha1","util.inspect","Readable","Writable","readline.createInterface","childProcess.spawnSync","stdout","stderr","port","payload","executablePath","location","util.format","product","release","artifact","browsers","isURL","id","isTargetClosedError","TargetClosedError","serializeError","parseError","createInstrumentation","_f","parseTicks","parseTime","rawClockSource.source","BrowserContext","rawUtilityScriptSource.source","propertyName","JSHandle","TimeoutError","fileUploadSizeLimit","js.ExecutionContext","ElementHandle","js.evaluate","js.evaluateExpression","rawInjectedScriptSource.source","js.JSHandle","js.isJavaScriptErrorInEvaluate","selectors","waitForVisible","timeout","elementStates","actionType","hitPoint","optionsToSelect","multiple","resetSelectionIfNotFocused","point","element","scope","info","APIRequestContext","statusText","keypadLocation","keyboardLayout.keypadLocation","keyboardLayout.USKeyboardLayout","roots","accessibility.Accessibility","input.Keyboard","input.Mouse","input.Touchscreen","frames.FrameManager","FileChooser","ConsoleMessage","frames.Frame","rawBindingsControllerSource.source","frameOrdinal","kLifecycleEvents","Frame","Page","network.Route","network.WebSocket","event","visible","log","color","html","network.parseURL","params","dom.isNonRecoverableDOMError","dom.assertDone","dom.throwElementIsNotAttached","injected","js.normalizeEvaluationExpression","expression","isFunction","arg","callbackText","taskData","types.kLifecycleEvents","parseCookie","connect","Artifact","formatObject","formatContextOptions","formatOptions","escape","rawRecorderSource.source","testIdAttributeName","settings","mode","paused","sources","primaryPageURL","callLogs","frameElement","Selectors","Tracing","Clock","waitForEvent","network.mergeHeaders","network.singleHeader","indexedDB","rawStorageSource.source","internalMetadata","http2","body","redirectStatus","zlib.createGunzip","zlib.constants","zlib.createBrotliDecompress","zlib.createInflate","Transform","playwright","resolve","ConnectionEvents","kBrowserCloseMessageId","CDPSession","ParserError","escaped","kBindingName","rawWebSocketMockSource.source","Worker","Download","getAccessibilityTree","toModifiersMask","toButtonsMask","rewriteError","js.JavaScriptErrorInEvaluate","createHandle","potentiallyUnserializableValue","js.parseUnserializableValue","renderPreview","js.sparseArrayToString","dom.FrameExecutionContext","dom.ElementHandle","input.keypadLocation","network.statusText","InterceptableRequest","network.Response","network.Request","errorReasons","PagePaperFormats","unitToPixels","convertPrintParameterToInches","RawKeyboardImpl","RawMouseImpl","RawTouchscreenImpl","frames.NavigationAbortedError","dialog.Dialog","dom.kUnableToAdoptErrorMessage","Browser","network.filterCookies","network.rewriteCookies","ARTIFACTS_FOLDER","AndroidDevice","PipeTransport","context","contextDispatcher","targetId","ElectronApplication","WebSocketTransport","socks.SocksProxyHandler","localUtils","deviceDescriptors","descriptors","localUtils.zip","localUtils.harOpen","localUtils.harLookup","localUtils.harClose","localUtils.harUnzip","localUtils.tracingStarted","localUtils.traceDiscarded","localUtils.addStackToTracingNoReply","urlToWSEndpoint","status","message","ignored","Session","UserPromptHandlerType","BrowsingContext","ReadinessState","UserPromptType","CreateType","Network","SameSite","InterceptPhase","Script","ResultOwnership","Log","Level","Input","PointerType","Permissions","PermissionState","bidi.Network","toBidiSameSite","bidi.Script","names","bidi.Input","UTILITY_WORLD_NAME","bidi.BrowsingContext","list","bidi.Session","page","bidi.Permissions","BrowserType","ChromiumReadyState","_g","_h","_j","Electron","Android","Accessibility","Request","Response","Route","WritableStream","files","Keyboard","Mouse","Touchscreen","locator","Dialog","network.WebSocketRoute","network.validateHeaders","network.RouteHandler","network.WebSocketRouteHandler","Playwright","validator","crx","Crx","CrxPlaywright","CrxApplication","window","TokenType","SourceLocation","DestructuringErrors","TokContext","node$1","Scope","BranchID","RegExpValidationState","Token","override","acorn.parse","variable","props","walk.ancestor","actions","windowId","debuggee","cookies","instrumentationListener","mainFrame","actionInContext","pageAlias"],"mappings":"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AA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAEnD;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAClD;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IACnD;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IACpD;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAElD;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IACjD;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IACpD;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IACjD;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAEpD;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IACnD;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IACnD;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IACpD;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAEjD;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IACpD;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAClD;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IACnD;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAElD;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IACnD;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IACnD;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAClD;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAElD;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IACnD;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAG;AAAA,IAAG;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,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC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CpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IACpC;AAAA,IA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,IAAI;AACvB,IAAAA,MAAK,YAAYA,MAAK,OAAO;AAAA;;;;;;;;ACd7B,cAAiB;AAAA,IACf,SAAS;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,QACN;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAAA,IACD,KAAK;AAAA,MACH,KAAK;AAAA,MACL,QAAQ;AAAA,QACN;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UA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C,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,aAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,cAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,aAAM,KAAK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AAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QACnC;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QAAK;AAAA,QA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AAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAAY;AAAA,IAChD;AAAA,IAAY;AA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A;AAAA,EAEzB;AAAA,EAEA,mBAAmB;AAAA,IACjB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT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G,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,IAAI,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,MAAM,GAAG,GAAG,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,QAAQ,GAAG;AAGzoC,IAAI,6BAA6B,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,KAAK,MAAM,IAAI,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,MAAM,GAAG,MAAM,IAAI,GAAG,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,KAAK,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,MAAM,IAAI,GAAG,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,GAAG,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG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","x_google_ignoreList":[0,2,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,154,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,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,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,502,503,504,505,506,507,508,509,510,511,513,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,573,574,575,786,787]}