{"version":3,"sources":["../src/constants.ts","../src/base64.ts","../src/embedded.ts","../src/record.ts","../src/codec.ts","../src/strip.ts","../src/float.ts","../src/decoder.ts","../src/reader.ts","../src/writer.ts","../src/fromjs.ts","../src/text.ts","../src/bytes.ts","../src/encoder.ts","../src/flex.ts","../src/jsdictionary.ts","../src/dictionary.ts","../src/is.ts","../src/annotated.ts","../src/compound.ts","../src/embeddedTypes.ts","../src/fold.ts","../src/merge.ts","../src/order.ts","../src/pexpr.ts","../src/index.ts"],"sourcesContent":["export enum Tag {\n    False = 0x80,\n    True,\n    End = 0x84,\n    Annotation,\n    Embedded,\n    Ieee754,\n\n    SignedInteger = 0xb0,\n    String,\n    ByteString,\n    Symbol,\n    Record,\n    Sequence,\n    Set,\n    Dictionary,\n}\n","const BASE64_DEC: {[key: string]: number} = {};\n[... 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'].forEach(\n    (c, i) => BASE64_DEC[c] = i);\nBASE64_DEC['+'] = BASE64_DEC['-'] = 62;\nBASE64_DEC['/'] = BASE64_DEC['_'] = 63;\n\nexport function decodeBase64(s: string): Uint8Array {\n    const bs = new Uint8Array(Math.floor(s.length * 3/4));\n    let i = 0;\n    let j = 0;\n    while (i < s.length) {\n        const v1 = BASE64_DEC[s[i++]];\n        const v2 = BASE64_DEC[s[i++]];\n        const v3 = BASE64_DEC[s[i++]];\n        const v4 = BASE64_DEC[s[i++]];\n        const v = (v1 << 18) | (v2 << 12) | (v3 << 6) | v4;\n        bs[j++] = (v >> 16) & 255;\n        if (v3 === void 0) break;\n        bs[j++] = (v >> 8) & 255;\n        if (v4 === void 0) break;\n        bs[j++] = v & 255;\n    }\n    return bs.subarray(0, j);\n}\n\nconst BASE64_ENC = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n\nexport function encodeBase64(bs: Uint8Array): string {\n    let s = '';\n    let buffer = 0;\n    let bitcount = 0;\n    for (let b of bs) {\n        buffer = ((buffer & 0x3f) << 8) | b;\n        bitcount += 8;\n        while (bitcount >= 6) {\n            bitcount -= 6;\n            const v = (buffer >> bitcount) & 0x3f;\n            s = s + BASE64_ENC[v];\n        }\n    }\n    if (bitcount > 0) {\n        const v = (buffer << (6 - bitcount)) & 0x3f;\n        s = s + BASE64_ENC[v];\n    }\n    return s;\n}\n","import type { DecoderState } from \"./decoder.js\";\nimport type { EncoderState } from \"./encoder.js\";\nimport type { Value } from \"./values.js\";\nimport { ReaderStateOptions } from \"./reader.js\";\n\nexport const IsEmbedded = Symbol.for('IsEmbedded');\n\nexport interface Embeddable {\n    readonly [IsEmbedded]: true;\n}\n\nexport function isEmbedded<T extends Embeddable>(v: any): v is T {\n    return !!v?.[IsEmbedded];\n}\n\nexport type EmbeddedTypeEncode<T extends Embeddable> = {\n    encode(s: EncoderState, v: T): void;\n}\n\nexport type EmbeddedTypeDecode<T> = {\n    decode(s: DecoderState): T;\n    fromValue(v: Value<GenericEmbedded>, options: ReaderStateOptions): T;\n}\n\nexport type EmbeddedType<T extends Embeddable> = EmbeddedTypeEncode<T> & EmbeddedTypeDecode<T>;\n\nexport class Embedded<T> {\n    get [IsEmbedded](): true { return true; }\n\n    constructor(public readonly value: T) {}\n\n    equals(other: any): boolean {\n        return typeof other === 'object' && 'value' in other && Object.is(this.value, other.value);\n    }\n}\n\nexport class GenericEmbedded {\n    get [IsEmbedded](): true { return true; }\n\n    constructor(public readonly generic: Value) {}\n\n    equals(other: any, is: (a: any, b: any) => boolean) {\n        return typeof other === 'object' && 'generic' in other && is(this.generic, other.generic);\n    }\n\n    toString(): string {\n        return this.generic.toString();\n    }\n}\n","import { Embeddable, GenericEmbedded } from \"./embedded.js\";\nimport { is } from \"./is.js\";\nimport { Value } from \"./values.js\";\n\nexport type Tuple<T> = Array<T> | [T];\n\nexport type Record<LabelType extends Value<T>, FieldsType extends Tuple<Value<T>>, T extends Embeddable = GenericEmbedded>\n    = FieldsType & { label: LabelType };\n\nexport type RecordGetters<Fs, R> = {\n    [K in string & keyof Fs]: (r: R) => Fs[K];\n};\n\nexport type CtorTypes<Fs, Names extends Tuple<keyof Fs>> =\n    { [K in keyof Names]: Fs[keyof Fs & Names[K]] } & any[];\n\nexport interface RecordConstructor<L extends Value<T>, Fs, Names extends Tuple<keyof Fs>, T extends Embeddable = GenericEmbedded> {\n    (...fields: CtorTypes<Fs, Names>): Record<L, CtorTypes<Fs, Names>, T>;\n    constructorInfo: RecordConstructorInfo<L, T>;\n    isClassOf(v: any): v is Record<L, CtorTypes<Fs, Names>, T>;\n    _: RecordGetters<Fs, Record<L, CtorTypes<Fs, Names>, T>>;\n    fieldNumbers: { [K in string & keyof Fs]: number };\n};\n\nexport interface RecordConstructorInfo<L extends Value<T>, T extends Embeddable = GenericEmbedded> {\n    label: L;\n    arity: number;\n}\n\nexport type InferredRecordType<L, FieldsType extends Tuple<any>> =\n    L extends symbol ? (FieldsType extends Tuple<Value<infer T>>\n        ? (Exclude<T, never> extends symbol ? Record<L, FieldsType, never> : Record<L, FieldsType, T>)\n        : (FieldsType extends Tuple<Value<never>>\n            ? Record<L, FieldsType, never>\n            : \"TYPE_ERROR_cannotInferFieldsType\" & [never])) :\n    L extends Value<infer T> ? (FieldsType extends Tuple<Value<T>>\n        ? Record<L, FieldsType, T>\n        : \"TYPE_ERROR_cannotMatchFieldsTypeToLabelType\" & [never]) :\n    \"TYPE_ERROR_cannotInferEmbeddedType\" & [never];\n\nexport function Record<L, FieldsType extends Tuple<any>>(\n    label: L,\n    fields: FieldsType): InferredRecordType<L, FieldsType>\n{\n    (fields as any).label = label;\n    return fields as any;\n}\n\nexport namespace Record {\n    export function isRecord<L extends Value<T>, FieldsType extends Tuple<Value<T>>, T extends Embeddable = GenericEmbedded>(x: any): x is Record<L, FieldsType, T> {\n        return Array.isArray(x) && 'label' in x;\n    }\n\n    export function constructorInfo<L extends Value<T>, FieldsType extends Tuple<Value<T>>, T extends Embeddable = GenericEmbedded>(\n        r: Record<L, FieldsType, T>): RecordConstructorInfo<L, T>\n    {\n        return { label: r.label, arity: r.length };\n    }\n\n    export function isClassOf<L extends Value<T>, FieldsType extends Tuple<Value<T>>, T extends Embeddable = GenericEmbedded>(\n        ci: RecordConstructorInfo<L, T>, v: any): v is Record<L, FieldsType, T>\n    {\n        return (Record.isRecord(v)) && is(ci.label, v.label) && (ci.arity === v.length);\n    }\n\n    export function makeConstructor<Fs, T extends Embeddable = GenericEmbedded>()\n    : (<L extends Value<T>, Names extends Tuple<keyof Fs>>(label: L, fieldNames: Names) =>\n        RecordConstructor<L, Fs, Names, T>)\n    {\n        return <L extends Value<T>, Names extends Tuple<keyof Fs>>(label: L, fieldNames: Names) => {\n            const ctor: RecordConstructor<L, Fs, Names, T> =\n                ((...fields: CtorTypes<Fs, Names>) =>\n                    Record(label, fields)) as unknown as RecordConstructor<L, Fs, Names, T>;\n            const constructorInfo = { label, arity: fieldNames.length };\n            ctor.constructorInfo = constructorInfo;\n            ctor.isClassOf = (v: any): v is Record<L, CtorTypes<Fs, Names>, T> => Record.isClassOf<L, CtorTypes<Fs, Names>, T>(constructorInfo, v);\n            (ctor as any).fieldNumbers = {};\n            (ctor as any)._ = {};\n            fieldNames.forEach((name, i) => {\n                (ctor._ as any)[name] = (r: Record<L, CtorTypes<Fs, Names>, T>) => r[i];\n                (ctor.fieldNumbers as any)[name] = i;\n            });\n            return ctor;\n        };\n    }\n}\n","// Preserves Binary codec.\n\nimport { Position } from \"./annotated.js\";\n\nexport type ErrorType = 'DecodeError' | 'EncodeError' | 'ShortPacket';\nexport const ErrorType = Symbol.for('ErrorType');\n\nexport abstract class PreservesCodecError {\n    abstract get [ErrorType](): ErrorType;\n\n    static isCodecError(e: any, t: ErrorType): e is PreservesCodecError {\n        return (e?.[ErrorType] === t);\n    }\n}\n\nexport class DecodeError extends Error {\n    readonly pos: Position | undefined;\n\n    get [ErrorType](): ErrorType { return 'DecodeError' }\n\n    constructor(message: string, pos?: Position) {\n        super(message);\n        this.pos = pos;\n    }\n\n    static isDecodeError(e: any): e is DecodeError {\n        return PreservesCodecError.isCodecError(e, 'DecodeError');\n    }\n}\n\nexport class EncodeError extends Error {\n    get [ErrorType](): ErrorType { return 'EncodeError' }\n\n    static isEncodeError(e: any): e is EncodeError {\n        return PreservesCodecError.isCodecError(e, 'EncodeError');\n    }\n\n    readonly irritant: any;\n\n    constructor(message: string, irritant: any) {\n        super(message);\n        this.irritant = irritant;\n    }\n}\n\nexport class ShortPacket extends DecodeError {\n    get [ErrorType](): ErrorType { return 'ShortPacket' }\n\n    static isShortPacket(e: any): e is ShortPacket {\n        return PreservesCodecError.isCodecError(e, 'ShortPacket');\n    }\n}\n","import { Value } from \"./values.js\";\nimport { Annotated } from \"./annotated.js\";\nimport { Record, Tuple } from \"./record.js\";\nimport { Set, Dictionary, DictionaryMap } from \"./dictionary.js\";\nimport type { Embeddable, GenericEmbedded } from \"./embedded.js\";\n\nexport function unannotate<T extends Embeddable = GenericEmbedded>(v: Value<T>): Value<T> {\n    return Annotated.isAnnotated<T>(v) ? v.item : v;\n}\n\nexport function peel<T extends Embeddable = GenericEmbedded>(v: Value<T>): Value<T> {\n    return strip(v, 1);\n}\n\nexport function strip<T extends Embeddable = GenericEmbedded>(\n    v: Value<T>,\n    depth: number = Infinity): Value<T>\n{\n    function step(v: Value<T>, depth: number): Value<T> {\n        if (depth === 0) return v;\n        if (!Annotated.isAnnotated<T>(v)) return v;\n\n        const nextDepth = depth - 1;\n        function walk(v: Value<T>): Value<T> { return step(v, nextDepth); }\n\n        if (Record.isRecord<Value<T>, Tuple<Value<T>>, T>(v.item)) {\n            return Record(step(v.item.label, depth), v.item.map(walk));\n        } else if (Annotated.isAnnotated(v.item)) {\n            throw new Error(\"Improper annotation structure\");\n        } else if (nextDepth === 0) {\n            return v.item;\n        } else if (Array.isArray(v.item)) {\n            return (v.item as Value<T>[]).map(walk);\n        } else if (Set.isSet<T>(v.item)) {\n            return v.item.map(walk);\n        } else if (Dictionary.isDictionary<T>(v.item)) {\n            const result = new DictionaryMap<T>();\n            new DictionaryMap<T>(v.item).forEach((val, key) => result.set(walk(key), walk(val)));\n            return result.simplifiedValue();\n        } else {\n            return v.item;\n        }\n    }\n    return step(v, depth);\n}\n","import { Tag } from \"./constants.js\";\nimport { Value } from \"./values.js\";\nimport type { Embeddable, GenericEmbedded } from \"./embedded.js\";\nimport type { Encoder, Preservable } from \"./encoder.js\";\nimport type { Writer, PreserveWritable } from \"./writer.js\";\nimport { Bytes, dataview } from \"./bytes.js\";\n\n// v Previously included 'Single'; may again in future. Also, 'Half', 'Quad'?\nexport type FloatType = 'Double';\nexport const FloatType = Symbol.for('FloatType');\n\nexport abstract class Float {\n    readonly value: number;\n\n    constructor(value: number | bigint | Float) {\n        this.value =\n            typeof value === 'number' ? value :\n            typeof value === 'bigint' ? Number(value) :\n            value.value;\n    }\n\n    __preserve_text_on__(w: Writer<any>) {\n        w.state.pieces.push(this.toString());\n    }\n\n    abstract toBytes(): Bytes;\n\n    equals(other: any): boolean {\n        if (!Float.isFloat(other)) return false;\n        if (Number.isNaN(this.value) && Number.isNaN(other.value)) {\n            return other.toBytes().equals(this.toBytes());\n        } else {\n            return Object.is(other.value, this.value);\n        }\n    }\n\n    hashCode(): number {\n        return (this.value | 0); // TODO: something better?\n    }\n\n    abstract get [FloatType](): FloatType;\n\n    static isFloat = (x: any): x is Float => x?.[FloatType] !== void 0;\n    static isDouble = (x: any): x is DoubleFloat => x?.[FloatType] === 'Double';\n}\n\nexport function floatValue(f: any): number {\n    if (typeof f === 'number') {\n        return f;\n    } else if (typeof f === 'bigint') {\n        return Number(f);\n    } else if (Float.isFloat(f)) {\n        return f.value;\n    } else {\n        return NaN;\n    }\n}\n\nexport function floatlikeString(f: number): string {\n    if (Object.is(f, -0)) return '-0.0';\n    const s = '' + f;\n    if (s.includes('.') || s.includes('e') || s.includes('E')) return s;\n    return s + '.0';\n}\n\n// -- These snippets are useful to keep in mind for promoting 4-byte, single-precision floats\n// -- to 8-byte, double-precision floats *while preserving NaN bit-patterns*:\n//\n// static fromBytes(bs: Bytes | DataView): SingleFloat {\n//     const view = dataview(bs);\n//     const vf = view.getInt32(0, false);\n//     if ((vf & 0x7f800000) === 0x7f800000) {\n//         // NaN or inf. Preserve quiet/signalling bit by manually expanding to double-precision.\n//         const sign = vf >> 31;\n//         const payload = vf & 0x007fffff;\n//         const dbs = new Bytes(8);\n//         const dview = dataview(dbs);\n//         dview.setInt16(0, (sign << 15) | 0x7ff0 | (payload >> 19), false);\n//         dview.setInt32(2, (payload & 0x7ffff) << 13, false);\n//         return new SingleFloat(dview.getFloat64(0, false));\n//     } else {\n//         return new SingleFloat(dataview(bs).getFloat32(0, false));\n//     }\n// }\n//\n// __w(v: DataView, offset: number) {\n//     if (Number.isNaN(this.value)) {\n//         const dbs = new Bytes(8);\n//         const dview = dataview(dbs);\n//         dview.setFloat64(0, this.value, false);\n//         const sign = dview.getInt8(0) >> 7;\n//         const payload = (dview.getInt32(1, false) >> 5) & 0x007fffff;\n//         const vf = (sign << 31) | 0x7f800000 | payload;\n//         v.setInt32(offset, vf, false);\n//     } else {\n//         v.setFloat32(offset, this.value, false);\n//     }\n// }\n\nexport class DoubleFloat extends Float implements Preservable<any>, PreserveWritable<any> {\n    __as_preserve__<T extends Embeddable = GenericEmbedded>(): Value<T> {\n        return this;\n    }\n\n    static fromBytes(bs: Bytes | DataView): DoubleFloat {\n        return new DoubleFloat(dataview(bs).getFloat64(0, false));\n    }\n\n    static __from_preserve__<T extends Embeddable>(v: Value<T>): undefined | DoubleFloat {\n        return Float.isDouble(v) ? v : void 0;\n    }\n\n    __preserve_on__(encoder: Encoder<any>) {\n        encoder.state.emitbyte(Tag.Ieee754);\n        encoder.state.emitbyte(8);\n        encoder.state.makeroom(8);\n        encoder.state.view.setFloat64(encoder.state.index, this.value, false);\n        encoder.state.index += 8;\n    }\n\n    toBytes(): Bytes {\n        const bs = new Bytes(8);\n        bs.dataview().setFloat64(0, this.value, false);\n        return bs;\n    }\n\n    toString(): string {\n        if (Number.isFinite(this.value)) {\n            return floatlikeString(this.value);\n        } else {\n            return '#xd\"' + this.toBytes().toHex() + '\"';\n        }\n    }\n\n    get [FloatType](): 'Double' {\n        return 'Double';\n    }\n}\n\nexport function Double(value: number | bigint | Float): DoubleFloat {\n    return new DoubleFloat(value);\n}\nDouble.__from_preserve__ = DoubleFloat.__from_preserve__;\n","import { Annotated } from \"./annotated.js\";\nimport { DecodeError, ShortPacket } from \"./codec.js\";\nimport { Tag } from \"./constants.js\";\nimport { Set, Dictionary, DictionaryMap } from \"./dictionary.js\";\nimport { DoubleFloat } from \"./float.js\";\nimport { Record } from \"./record.js\";\nimport { Bytes, BytesLike, underlying, hexDigit } from \"./bytes.js\";\nimport { Value } from \"./values.js\";\nimport { is } from \"./is.js\";\nimport { Embeddable, EmbeddedTypeDecode } from \"./embedded.js\";\nimport { neverEmbeddedTypeDecode } from \"./reader.js\";\nimport { stringify } from \"./text.js\";\n\nexport interface DecoderOptions {\n    includeAnnotations?: boolean;\n}\n\nexport interface DecoderEmbeddedOptions<T extends Embeddable> extends DecoderOptions {\n    embeddedDecode?: EmbeddedTypeDecode<T>;\n}\n\nexport interface TypedDecoder<T extends Embeddable> {\n    atEnd(): boolean;\n\n    mark(): any;\n    restoreMark(m: any): undefined;\n\n    skip(): void;\n    next(): Value<T>;\n    withEmbeddedDecode<S extends Embeddable, R>(\n        embeddedDecode: EmbeddedTypeDecode<S>,\n        body: (d: TypedDecoder<S>) => R): R;\n\n    nextBoolean(): boolean | undefined;\n    nextDouble(): DoubleFloat | undefined;\n    nextEmbedded(): T | undefined;\n    nextSignedInteger(): number | bigint | undefined;\n    nextString(): string | undefined;\n    nextByteString(): Bytes | undefined;\n    nextSymbol(): symbol | undefined;\n\n    openRecord(): boolean;\n    openSequence(): boolean;\n    openSet(): boolean;\n    openDictionary(): boolean;\n\n    closeCompound(): boolean;\n}\n\nexport function asLiteral<T extends Embeddable, E extends Exclude<Value<T>, Annotated<T>>>(\n    actual: Value<T>,\n    expected: E): E | undefined\n{\n    return is(actual, expected) ? expected : void 0;\n}\n\nexport class DecoderState {\n    packet: Uint8Array;\n    index = 0;\n    options: DecoderOptions;\n\n    constructor(packet: BytesLike, options: DecoderOptions) {\n        this.packet = underlying(packet);\n        this.options = options;\n    }\n\n    get includeAnnotations(): boolean {\n        return this.options.includeAnnotations ?? false;\n    }\n\n    write(data: BytesLike) {\n        if (this.index === this.packet.length) {\n            this.packet = underlying(data);\n        } else {\n            this.packet = Bytes.concat([this.packet.slice(this.index), data])._view;\n        }\n        this.index = 0;\n    }\n\n    atEnd(): boolean {\n        return this.index >= this.packet.length;\n    }\n\n    mark(): number {\n        return this.index;\n    }\n\n    restoreMark(m: number): undefined {\n        this.index = m;\n        return void 0;\n    }\n\n    shortGuard<R>(body: () => R, short: () => R): R {\n        if (this.atEnd()) return short();\n        // ^ important somewhat-common case optimization - avoid the exception\n\n        const start = this.mark();\n        try {\n            return body();\n        } catch (e) {\n            if (ShortPacket.isShortPacket(e)) {\n                this.restoreMark(start);\n                return short();\n            }\n            throw e;\n        }\n    }\n\n    nextbyte(): number {\n        if (this.atEnd()) throw new ShortPacket(\"Short packet\");\n        return this.packet[this.index++];\n    }\n\n    nextbytes(n: number): DataView {\n        const start = this.index;\n        this.index += n;\n        if (this.index > this.packet.length) throw new ShortPacket(\"Short packet\");\n        // ^ NOTE: greater-than, not greater-than-or-equal-to - this makes atEnd() inappropriate\n        return new DataView(this.packet.buffer, this.packet.byteOffset + start, n);\n    }\n\n    varint(): number {\n        // TODO: Bignums :-/\n        const v = this.nextbyte();\n        if (v < 128) return v;\n        return (this.varint() << 7) + (v - 128);\n    }\n\n    peekend(): boolean {\n        return (this.nextbyte() === Tag.End) || (this.index--, false);\n    }\n\n    nextint(n: number): number | bigint {\n        const start = this.index;\n        if (n === 0) return 0;\n        if (n > 7) return this.nextbigint(n);\n        if (n === 7) {\n            const highByte = this.packet[this.index];\n            if ((highByte >= 0x20) && (highByte < 0xe0)) {\n                return this.nextbigint(n);\n            }\n            // if highByte is 0xe0, we still might have a value\n            // equal to (Number.MIN_SAFE_INTEGER-1).\n        }\n        let acc = this.nextbyte();\n        if (acc & 0x80) acc -= 256;\n        for (let i = 1; i < n; i++) acc = (acc * 256) + this.nextbyte();\n        if (!Number.isSafeInteger(acc)) {\n            this.index = start;\n            return this.nextbigint(n);\n        }\n        return acc;\n    }\n\n    nextbigint(n: number): bigint {\n        if (n === 0) return BigInt(0);\n        const bs = Bytes.from(this.nextbytes(n));\n        if (bs.get(0) >= 128) {\n            // negative\n            const hex = bs.toHex(d => hexDigit(15 - d));\n            return ~BigInt('0x' + hex);\n        } else {\n            // (strictly) positive\n            const hex = bs.toHex();\n            return BigInt('0x' + hex);\n        }\n    }\n\n    wrap<T extends Embeddable>(v: Value<T>): Value<T> {\n        return this.includeAnnotations ? new Annotated(v) : v;\n    }\n\n    unshiftAnnotation<T extends Embeddable>(a: Value<T>, v: Annotated<T>): Annotated<T> {\n        if (this.includeAnnotations) {\n            v.annotations.unshift(a);\n        }\n        return v;\n    }\n}\n\nexport class Decoder<T extends Embeddable = never> implements TypedDecoder<T> {\n    state: DecoderState;\n    embeddedDecode: EmbeddedTypeDecode<T>;\n\n    constructor(state: DecoderState, embeddedDecode?: EmbeddedTypeDecode<T>);\n    constructor(packet?: BytesLike, options?: DecoderEmbeddedOptions<T>);\n    constructor(\n        packet_or_state: (DecoderState | BytesLike) = new Uint8Array(0),\n        options_or_embeddedDecode?: (DecoderEmbeddedOptions<T> | EmbeddedTypeDecode<T>))\n    {\n        if (packet_or_state instanceof DecoderState) {\n            this.state = packet_or_state;\n            this.embeddedDecode = (options_or_embeddedDecode as EmbeddedTypeDecode<T>) ?? neverEmbeddedTypeDecode;\n        } else {\n            const options = (options_or_embeddedDecode as DecoderEmbeddedOptions<T>) ?? {};\n            this.state = new DecoderState(packet_or_state, options);\n            this.embeddedDecode = options.embeddedDecode ?? neverEmbeddedTypeDecode;\n        }\n    }\n\n    write(data: BytesLike) {\n        this.state.write(data);\n    }\n\n    nextvalues(): Value<T>[] {\n        const result = [];\n        while (!this.state.peekend()) result.push(this.next());\n        return result;\n    }\n\n    static dictionaryFromArray<T extends Embeddable>(vs: Value<T>[]): Dictionary<T> {\n        const d = new DictionaryMap<T>();\n        if (vs.length % 2) throw new DecodeError(\"Missing dictionary value\");\n        for (let i = 0; i < vs.length; i += 2) {\n            if (d.has(vs[i])) throw new DecodeError(`Duplicate key: ${stringify(vs[i])}`);\n            d.set(vs[i], vs[i+1]);\n        }\n        return d.simplifiedValue();\n    }\n\n    next(): Value<T> {\n        const tag = this.state.nextbyte();\n        switch (tag) {\n            case Tag.False: return this.state.wrap<T>(false);\n            case Tag.True: return this.state.wrap<T>(true);\n            case Tag.End: throw new DecodeError(\"Unexpected Compound end marker\");\n            case Tag.Annotation: {\n                const a = this.next();\n                const v = this.next() as Annotated<T>;\n                return this.state.unshiftAnnotation(a, v);\n            }\n            case Tag.Embedded: return this.state.wrap<T>(this.embeddedDecode.decode(this.state));\n            case Tag.Ieee754:\n                switch (this.state.varint()) {\n                    case 8: return this.state.wrap<T>(DoubleFloat.fromBytes(this.state.nextbytes(8)));\n                    default: throw new DecodeError(\"Invalid IEEE754 size\");\n                }\n            case Tag.SignedInteger: return this.state.wrap<T>(this.state.nextint(this.state.varint()));\n            case Tag.String: return this.state.wrap<T>(Bytes.from(this.state.nextbytes(this.state.varint())).fromUtf8());\n            case Tag.ByteString: return this.state.wrap<T>(Bytes.from(this.state.nextbytes(this.state.varint())));\n            case Tag.Symbol: return this.state.wrap<T>(Symbol.for(Bytes.from(this.state.nextbytes(this.state.varint())).fromUtf8()));\n            case Tag.Record: {\n                const vs = this.nextvalues();\n                if (vs.length === 0) throw new DecodeError(\"Too few elements in encoded record\");\n                return this.state.wrap<T>(Record(vs[0], vs.slice(1)));\n            }\n            case Tag.Sequence: return this.state.wrap<T>(this.nextvalues());\n            case Tag.Set: {\n                const s = new Set<T>();\n                for (const v of this.nextvalues()) {\n                    if (s.has(v)) throw new DecodeError(`Duplicate value: ${stringify(v)}`);\n                    s.add(v);\n                }\n                return this.state.wrap<T>(s);\n            }\n            case Tag.Dictionary: return this.state.wrap<T>(Decoder.dictionaryFromArray(this.nextvalues()));\n            default: throw new DecodeError(\"Unsupported Preserves tag: \" + tag);\n        }\n    }\n\n    try_next(): Value<T> | undefined {\n        return this.state.shortGuard(() => this.next(), () => void 0);\n    }\n\n    atEnd(): boolean {\n        return this.state.atEnd();\n    }\n\n    mark(): any {\n        return this.state.mark();\n    }\n\n    restoreMark(m: any): undefined {\n        return this.state.restoreMark(m);\n    }\n\n    skip(): void {\n        // TODO: be more efficient\n        this.next();\n    }\n\n    withEmbeddedDecode<S extends Embeddable, R>(\n        embeddedDecode: EmbeddedTypeDecode<S>,\n        body: (d: TypedDecoder<S>) => R): R\n    {\n        return body(new Decoder(this.state, embeddedDecode));\n    }\n\n    skipAnnotations<R>(f: (reset: () => undefined) => R): R {\n        const m = this.mark();\n        while (!this.state.atEnd() && this.state.packet[this.state.index] === Tag.Annotation) {\n            this.state.index++;\n            this.skip();\n        }\n        return f(() => this.restoreMark(m));\n    }\n\n    nextBoolean(): boolean | undefined {\n        return this.skipAnnotations((reset) => {\n            switch (this.state.nextbyte()) {\n                case Tag.False: return false;\n                case Tag.True: return true;\n                default: return reset();\n            }\n        });\n    }\n\n    nextDouble(): DoubleFloat | undefined {\n        return this.skipAnnotations((reset) => {\n            if (this.state.nextbyte() !== Tag.Ieee754) return reset();\n            if (this.state.nextbyte() !== 8) return reset();\n            return DoubleFloat.fromBytes(this.state.nextbytes(8));\n        });\n    }\n\n    nextEmbedded(): T | undefined {\n        return this.skipAnnotations((reset) => {\n            switch (this.state.nextbyte()) {\n                case Tag.Embedded: return this.embeddedDecode.decode(this.state);\n                default: return reset();\n            }\n        });\n    }\n\n    nextSignedInteger(): number | bigint | undefined {\n        return this.skipAnnotations((reset) => {\n            switch (this.state.nextbyte()) {\n                case Tag.SignedInteger: return this.state.nextint(this.state.varint());\n                default: return reset();\n            }\n        });\n    }\n\n    nextString(): string | undefined {\n        return this.skipAnnotations((reset) => {\n            switch (this.state.nextbyte()) {\n                case Tag.String: return Bytes.from(this.state.nextbytes(this.state.varint())).fromUtf8();\n                default: return reset();\n            }\n        });\n    }\n\n    nextByteString(): Bytes | undefined {\n        return this.skipAnnotations((reset) => {\n            switch (this.state.nextbyte()) {\n                case Tag.ByteString: return Bytes.from(this.state.nextbytes(this.state.varint()));\n                default: return reset();\n            }\n        });\n    }\n\n    nextSymbol(): symbol | undefined {\n        return this.skipAnnotations((reset) => {\n            switch (this.state.nextbyte()) {\n                case Tag.Symbol:\n                    return Symbol.for(Bytes.from(this.state.nextbytes(this.state.varint())).fromUtf8());\n                default:\n                    return reset();\n            }\n        });\n    }\n\n    openRecord(): boolean {\n        return this.skipAnnotations((reset) =>\n            (this.state.nextbyte() === Tag.Record) || (reset(), false));\n    }\n\n    openSequence(): boolean {\n        return this.skipAnnotations((reset) =>\n            (this.state.nextbyte() === Tag.Sequence) || (reset(), false));\n    }\n\n    openSet(): boolean {\n        return this.skipAnnotations((reset) =>\n            (this.state.nextbyte() === Tag.Set) || (reset(), false));\n    }\n\n    openDictionary(): boolean {\n        return this.skipAnnotations((reset) =>\n            (this.state.nextbyte() === Tag.Dictionary) || (reset(), false));\n    }\n\n    closeCompound(): boolean {\n        return this.state.peekend();\n    }\n}\n\nexport function decode<T extends Embeddable>(\n    bs: BytesLike,\n    options: DecoderEmbeddedOptions<T> = {},\n): Value<T> {\n    return new Decoder(bs, options).next();\n}\n\nexport function decodeWithAnnotations<T extends Embeddable>(\n    bs: BytesLike,\n    options: DecoderEmbeddedOptions<T> = {},\n): Annotated<T> {\n    return decode(bs, { ... options, includeAnnotations: true }) as Annotated<T>;\n}\n","// Text syntax reader.\n\nimport type { Value } from './values.js';\nimport { DecodeError, ShortPacket } from './codec.js';\nimport { Dictionary, DictionaryMap, Set } from './dictionary.js';\nimport { strip } from './strip.js';\nimport { Bytes, unhexDigit } from './bytes.js';\nimport { Decoder, DecoderState } from './decoder.js';\nimport { Record } from './record.js';\nimport { Annotated, newPosition, Position, updatePosition } from './annotated.js';\nimport { Double, DoubleFloat } from './float.js';\nimport { stringify } from './text.js';\nimport { Embeddable, GenericEmbedded, EmbeddedTypeDecode } from './embedded.js';\n\nexport interface ReaderStateOptions {\n    includeAnnotations?: boolean;\n    name?: string | Position;\n}\n\nexport interface ReaderOptions<T> extends ReaderStateOptions {\n    embeddedDecode?: EmbeddedTypeDecode<T>;\n}\n\nconst MAX_SAFE_INTEGERn = BigInt(Number.MAX_SAFE_INTEGER);\nconst MIN_SAFE_INTEGERn = BigInt(Number.MIN_SAFE_INTEGER);\n\nexport const NUMBER_RE: RegExp = /^([-+]?\\d+)((\\.\\d+([eE][-+]?\\d+)?)|([eE][-+]?\\d+))?$/;\n// Groups:\n//  1 - integer part and sign\n//  2 - decimal part and exponent\n\nexport class ReaderState {\n    buffer: string;\n    pos: Position;\n    index: number;\n    discarded = 0;\n    options: ReaderStateOptions;\n\n    constructor(buffer: string, options: ReaderStateOptions) {\n        this.buffer = buffer;\n        switch (typeof options.name) {\n            case 'undefined': this.pos = newPosition(); break;\n            case 'string': this.pos = newPosition(options.name); break;\n            case 'object': this.pos = { ... options.name }; break;\n        }\n        this.index = 0;\n        this.options = options;\n    }\n\n    error(message: string, pos: Position): never {\n        throw new DecodeError(message, { ... pos });\n    }\n\n    get includeAnnotations(): boolean {\n        return this.options.includeAnnotations ?? false;\n    }\n\n    copyPos(): Position {\n        return { ... this.pos };\n    }\n\n    write(data: string) {\n        if (this.atEnd()) {\n            this.buffer = data;\n        } else {\n            this.buffer = this.buffer.substring(this.index) + data;\n        }\n        this.discarded += this.index;\n        this.index = 0;\n    }\n\n    atEnd(): boolean {\n        return (this.index >= this.buffer.length);\n    }\n\n    peek(): string {\n        if (this.atEnd()) throw new ShortPacket(\"Short term\", this.pos);\n        return this.buffer[this.index];\n    }\n\n    advance(): number {\n        const n = this.index++;\n        updatePosition(this.pos, this.buffer[n]);\n        return n;\n    }\n\n    nextchar(): string {\n        if (this.atEnd()) throw new ShortPacket(\"Short term\", this.pos);\n        return this.buffer[this.advance()];\n    }\n\n    nextcharcode(): number {\n        if (this.atEnd()) throw new ShortPacket(\"Short term\", this.pos);\n        return this.buffer.charCodeAt(this.advance());\n    }\n\n    skipws(skipCommas = false) {\n        while (true) {\n            if (this.atEnd()) break;\n            const c = this.peek();\n            if (!(isSpace(c) || (skipCommas && c === ','))) break;\n            this.advance();\n        }\n    }\n\n    readHex2(): number {\n        const x1 = unhexDigit(this.nextcharcode(), DecodeError);\n        const x2 = unhexDigit(this.nextcharcode(), DecodeError);\n        return (x1 << 4) | x2;\n    }\n\n    readHex4(): number {\n        const x1 = unhexDigit(this.nextcharcode(), DecodeError);\n        const x2 = unhexDigit(this.nextcharcode(), DecodeError);\n        const x3 = unhexDigit(this.nextcharcode(), DecodeError);\n        const x4 = unhexDigit(this.nextcharcode(), DecodeError);\n        return (x1 << 12) | (x2 << 8) | (x3 << 4) | x4;\n    }\n\n    readHexBinary(): Bytes {\n        const acc: number[] = [];\n        while (true) {\n            this.skipws();\n            if (this.peek() === '\"') {\n                this.advance();\n                return Bytes.from(acc);\n            }\n            acc.push(this.readHex2());\n        }\n    }\n\n    readHexFloat(): DoubleFloat {\n        const pos = this.copyPos();\n        if (this.nextchar() !== '\"') {\n            this.error(\"Missing open-double-quote in hex-encoded floating-point number\", pos);\n        }\n        const bs = this.readHexBinary();\n        if (bs.length !== 8) this.error(\"Incorrect number of bytes in hex-encoded Double\", pos);\n        return DoubleFloat.fromBytes(bs);\n    }\n\n    readBase64Binary(): Bytes {\n        let acc = '';\n        while (true) {\n            this.skipws();\n            const c = this.nextchar();\n            if (c === ']') break;\n            acc = acc + c;\n        }\n        return Bytes.fromBase64(acc);\n    }\n\n    requireDelimiter(prefix: string): void {\n        if (this.delimiterFollows()) return;\n        this.error(`Delimiter must follow ${prefix}`, this.pos);\n    }\n\n    static readonly DELIMITERS = '(){}[]<>\"\\';,@#:';\n\n    delimiterFollows(): boolean {\n        if (this.atEnd()) return true;\n        const ch = this.peek();\n        return (ReaderState.DELIMITERS.indexOf(ch) !== -1) || isSpace(ch);\n    }\n\n    readRawSymbolOrNumber(acc: string): number | bigint | symbol | DoubleFloat {\n        while (!this.delimiterFollows()) acc = acc + this.nextchar();\n        const m = NUMBER_RE.exec(acc);\n        if (m) {\n            if (m[2] === void 0) {\n                let v = BigInt(m[1]);\n                if (v <= MIN_SAFE_INTEGERn || v >= MAX_SAFE_INTEGERn) {\n                    return v;\n                } else {\n                    return Number(v);\n                }\n            } else {\n                return Double(parseFloat(acc));\n            }\n        } else {\n            return Symbol.for(acc);\n        }\n    }\n\n    readStringlike<E, R>(xform: (ch: string) => E,\n                         finish: (acc: E[]) => R,\n                         terminator: string,\n                         hexescape: string,\n                         hex: () => E): R\n    {\n        let acc: E[] = [];\n        while (true) {\n            const ch = this.nextchar();\n            switch (ch) {\n                case terminator:\n                    return finish(acc);\n                case '\\\\': {\n                    const ch = this.nextchar();\n                    switch (ch) {\n                        case hexescape: acc.push(hex()); break;\n\n                        case terminator:\n                        case '\\\\':\n                        case '/':\n                            acc.push(xform(ch)); break;\n\n                        case 'b': acc.push(xform('\\x08')); break;\n                        case 'f': acc.push(xform('\\x0c')); break;\n                        case 'n': acc.push(xform('\\x0a')); break;\n                        case 'r': acc.push(xform('\\x0d')); break;\n                        case 't': acc.push(xform('\\x09')); break;\n\n                        default:\n                            this.error(`Invalid escape code \\\\${ch}`, this.pos);\n                    }\n                    break;\n                }\n                default:\n                    acc.push(xform(ch));\n                    break;\n            }\n        }\n    }\n\n    readString(terminator: string): string {\n        return this.readStringlike(x => x, xs => xs.join(''), terminator, 'u', () => {\n            const n1 = this.readHex4();\n            if ((n1 >= 0xd800) && (n1 <= 0xdfff)) {\n                if ((this.nextchar() === '\\\\') && (this.nextchar() === 'u')) {\n                    const n2 = this.readHex4();\n                    if ((n2 >= 0xdc00) && (n2 <= 0xdfff) && (n1 <= 0xdbff)) {\n                        return String.fromCharCode(n1, n2);\n                    }\n                }\n                this.error('Invalid surrogate pair', this.pos);\n            }\n            return String.fromCharCode(n1);\n        });\n    }\n\n    readLiteralBinary(): Bytes {\n        return this.readStringlike(\n            x => {\n                const v = x.charCodeAt(0);\n                if (v >= 256) this.error(`Invalid code point ${v} in literal binary`, this.pos);\n                return v;\n            },\n            Bytes.from,\n            '\"',\n            'x',\n            () => this.readHex2());\n    }\n\n    readCommentLine(): string {\n        let acc = '';\n        while (true) {\n            if (this.atEnd()) return acc;\n            const c = this.nextchar();\n            if (c === '\\n' || c === '\\r') return acc;\n            acc = acc + c;\n        }\n    }\n}\n\nexport const genericEmbeddedTypeDecode: EmbeddedTypeDecode<GenericEmbedded> = {\n    decode(s: DecoderState): GenericEmbedded {\n        return new GenericEmbedded(new Decoder(s, this).next());\n    },\n\n    fromValue(v: Value<GenericEmbedded>, options: ReaderStateOptions): GenericEmbedded {\n        return new GenericEmbedded(options.includeAnnotations ? v : strip(v));\n    },\n};\n\nexport const neverEmbeddedTypeDecode: EmbeddedTypeDecode<never> = {\n    decode(_s: DecoderState): never {\n        throw new Error(\"Embeddeds not permitted at this point in Preserves document\");\n    },\n\n    fromValue(_v: Value<GenericEmbedded>, _options: ReaderStateOptions): never {\n        throw new Error(\"Embeddeds not permitted at this point in Preserves document\");\n    },\n};\n\nexport class ReaderBase<T extends Embeddable> {\n    state: ReaderState;\n    embeddedType: EmbeddedTypeDecode<T>;\n\n    constructor(state: ReaderState, embeddedType: EmbeddedTypeDecode<T>);\n    constructor(buffer: string, options?: ReaderOptions<T>);\n    constructor(\n        state_or_buffer: (ReaderState | string) = '',\n        embeddedType_or_options?: (EmbeddedTypeDecode<T> | ReaderOptions<T>))\n    {\n        if (state_or_buffer instanceof ReaderState) {\n            this.state = state_or_buffer;\n            this.embeddedType = embeddedType_or_options as EmbeddedTypeDecode<T>;\n        } else {\n            const options = (embeddedType_or_options as ReaderOptions<T>) ?? {};\n            this.state = new ReaderState(state_or_buffer, options);\n            this.embeddedType = options.embeddedDecode ?? neverEmbeddedTypeDecode;\n        }\n    }\n\n    write(data: string) {\n        this.state.write(data);\n    }\n}\n\nexport class Reader<T extends Embeddable> extends ReaderBase<T> {\n\n    readCommentLine(): Value<T> {\n        const startPos = this.state.copyPos();\n        return this.wrap(this.state.readCommentLine(), startPos);\n    }\n\n    wrap(v: Value<T>, pos: Position): Value<T> {\n        if (this.state.includeAnnotations && !Annotated.isAnnotated(v)) {\n            v = new Annotated(v, pos);\n        }\n        return v;\n    }\n\n    annotateNextWith(v: Value<T>): Value<T> {\n        this.state.skipws();\n        if (this.state.atEnd()) {\n            throw new DecodeError(\"Trailing annotations and comments are not permitted\",\n                                  this.state.pos);\n        }\n        const u = this.next();\n        if (this.state.includeAnnotations) (u as Annotated<T>).annotations.unshift(v);\n        return u;\n    }\n\n    readToEnd(): Array<Value<T>> {\n        const acc = [];\n        while (true) {\n            this.state.skipws();\n            if (this.state.atEnd()) return acc;\n            acc.push(this.next());\n        }\n    }\n\n    next(): Value<T> {\n        this.state.skipws();\n        const startPos = this.state.copyPos();\n        const unwrapped = ((): Value<T> => {\n            const c = this.state.nextchar();\n            switch (c) {\n                case '\"':\n                    return this.state.readString('\"');\n                case \"'\":\n                    return Symbol.for(this.state.readString(\"'\"));\n                case ';':\n                    this.state.error('Semicolon is reserved syntax', startPos);\n                case '@':\n                    return this.annotateNextWith(this.next());\n                case ':':\n                    this.state.error('Unexpected key/value separator between items', startPos);\n                case '#': {\n                    const c = this.state.nextchar();\n                    switch (c) {\n                        case ' ': case '\\t': return this.annotateNextWith(this.readCommentLine());\n                        case '\\n': case '\\r': return this.annotateNextWith('');\n                        case '!':\n                            return this.annotateNextWith(\n                                Record(Symbol.for('interpreter'), [this.readCommentLine()]));\n                        case 'f': this.state.requireDelimiter('#f'); return false;\n                        case 't': this.state.requireDelimiter('#t'); return true;\n                        case '{': return this.readSet();\n                        case '\"': return this.state.readLiteralBinary();\n                        case 'x': switch (this.state.nextchar()) {\n                            case '\"': return this.state.readHexBinary();\n                            case 'd': return this.state.readHexFloat();\n                            default: this.state.error('Invalid #x syntax', startPos);\n                        }\n                        case '[': return this.state.readBase64Binary();\n                        case ':': return this.embeddedType.fromValue(\n                            new Reader<GenericEmbedded>(this.state, genericEmbeddedTypeDecode).next(),\n                            this.state.options);\n                        default:\n                            this.state.error(`Invalid # syntax: ${c}`, startPos);\n                    }\n                }\n                case '<': {\n                    const label = this.next();\n                    const fields = this.readSequence('>', false);\n                    return Record(label, fields);\n                }\n                case '[': return this.readSequence(']', true);\n                case '{': return this.readDictionary();\n                case '>': this.state.error('Unexpected >', startPos);\n                case ']': this.state.error('Unexpected ]', startPos);\n                case '}': this.state.error('Unexpected }', startPos);\n                case ',': this.state.error('Unexpected ,', startPos);\n                default:\n                    return this.state.readRawSymbolOrNumber(c);\n            }\n        })();\n        return this.wrap(unwrapped, startPos);\n    }\n\n    seq<S>(skipCommas: boolean, acc: S, update: (v: Value<T>, acc: S) => void, ch: string): S {\n        while (true) {\n            this.state.skipws(skipCommas);\n            if (this.state.peek() === ch) {\n                this.state.advance();\n                return acc;\n            }\n            update(this.next(), acc);\n        }\n    }\n\n    readSequence(ch: string, skipCommas: boolean): Array<Value<T>> {\n        return this.seq(skipCommas, [] as Array<Value<T>>, (v, acc) => acc.push(v), ch);\n    }\n\n    readDictionary(): Dictionary<T> {\n        return this.seq(true, new DictionaryMap<T>(), (k, acc) => {\n            this.state.skipws();\n            switch (this.state.peek()) {\n                case ':':\n                    this.state.advance();\n                    if (acc.has(k)) this.state.error(`Duplicate key: ${stringify(k)}`, this.state.pos);\n                    acc.set(k, this.next());\n                    break;\n                default:\n                    this.state.error('Missing key/value separator', this.state.pos);\n            }\n        }, '}').simplifiedValue();\n    }\n\n    readSet(): Set<T> {\n        return this.seq(true,\n                        new Set<T>(),\n                        (v, acc) => {\n                            if (acc.has(v)) this.state.error(\n                                `Duplicate value in set: ${stringify(v)}`, this.state.pos);\n                            acc.add(v);\n                        },\n                        '}');\n    }\n}\n\nfunction isSpace(s: string): boolean {\n    return ' \\t\\n\\r'.indexOf(s) !== -1;\n}\n","import { isAnnotated } from './is.js';\nimport { Record, Tuple } from \"./record.js\";\nimport { Embeddable, GenericEmbedded, EmbeddedTypeEncode, isEmbedded } from \"./embedded.js\";\nimport { Encoder, EncoderState } from \"./encoder.js\";\nimport type { Value } from \"./values.js\";\nimport { NUMBER_RE } from './reader.js';\nimport { encodeBase64 } from './base64.js';\nimport { DictionaryMap, writeDictionaryOn } from './dictionary.js';\n\nexport type Writable<T extends Embeddable> =\n    Value<T> | PreserveWritable<T> | Iterable<Value<T>> | ArrayBufferView;\n\nexport interface PreserveWritable<T extends Embeddable> {\n    __preserve_text_on__(writer: Writer<T>): void;\n}\n\nexport function isPreserveWritable<T extends Embeddable>(v: any): v is PreserveWritable<T> {\n    return typeof v === 'object' && v !== null && '__preserve_text_on__' in v && typeof v.__preserve_text_on__ === 'function';\n}\n\nfunction isIterable<T>(v: any): v is Iterable<T> {\n    return typeof v === 'object' && v !== null && typeof v[Symbol.iterator] === 'function';\n}\n\nexport type EmbeddedWriter<T> =\n    { write(s: WriterState, v: T): void } | { toValue(v: T): Value<GenericEmbedded> };\n\nexport const genericEmbeddedTypeEncode: EmbeddedTypeEncode<GenericEmbedded> & EmbeddedWriter<GenericEmbedded> = {\n    encode(s: EncoderState, v: GenericEmbedded): void {\n        new Encoder(s, this).push(v.generic);\n    },\n\n    toValue(v: GenericEmbedded): Value<GenericEmbedded> {\n        return v.generic;\n    }\n};\n\nexport const neverEmbeddedTypeEncode: EmbeddedTypeEncode<never> & EmbeddedWriter<never> = {\n    encode(_s: EncoderState, _v: never): void {\n        throw new Error(\"Embeddeds not permitted encoding Preserves document\");\n    },\n\n    toValue(_v: never): Value<GenericEmbedded> {\n        throw new Error(\"Embeddeds not permitted writing Preserves document\");\n    }\n};\n\nexport interface WriterStateOptions {\n    includeAnnotations?: boolean;\n    indent?: number;\n    maxBinaryAsciiLength?: number;\n    maxBinaryAsciiProportion?: number;\n}\n\nexport interface WriterOptions<T> extends WriterStateOptions {\n    embeddedWrite?: EmbeddedWriter<T>;\n}\n\nexport class WriterState {\n    pieces: string[] = [];\n    options: WriterStateOptions;\n    indentDelta: string;\n    indentCount = 0;\n\n    constructor (options: WriterStateOptions) {\n        this.options = options;\n        this.indentDelta = ' '.repeat(options.indent ?? 0);\n    }\n\n    get isIndenting(): boolean {\n        return this.indentDelta.length > 0;\n    }\n\n    get includeAnnotations(): boolean {\n        return this.options.includeAnnotations ?? true;\n    }\n\n    writeIndent() {\n        if (this.isIndenting) {\n            this.pieces.push('\\n');\n            for (let i = 0; i < this.indentCount; i++) {\n                this.pieces.push(this.indentDelta);\n            }\n        }\n    }\n\n    writeIndentSpace() {\n        if (this.isIndenting) {\n            this.writeIndent();\n        } else {\n            this.pieces.push(' ');\n        }\n    }\n\n    escapeStringlikeChar(c: string, k: (c: string) => string = (c) => c): string {\n        switch (c) {\n            case \"\\\\\": return \"\\\\\\\\\";\n            case \"\\x08\": return \"\\\\b\";\n            case \"\\x0c\": return \"\\\\f\";\n            case \"\\x0a\": return \"\\\\n\";\n            case \"\\x0d\": return \"\\\\r\";\n            case \"\\x09\": return \"\\\\t\";\n            default: return k(c);\n        }\n    }\n\n    escapeStringlike(s: string, quoteChar: string): string {\n        let buf = quoteChar;\n        for (let c of s) {\n            buf = buf + ((c === quoteChar) ? \"\\\\\" + quoteChar : this.escapeStringlikeChar(c));\n        }\n        return buf + quoteChar;\n    }\n\n    writeSeq<V>(opener: string, closer: string, vs: Iterable<V>, appender: (v: V) => void) {\n        let iter = vs[Symbol.iterator]();\n        this.pieces.push(opener);\n        const first_i = iter.next();\n        if (first_i.done !== true) {\n            const first_v = first_i.value;\n            const second_i = iter.next();\n            if (second_i.done === true) {\n                appender(first_v);\n            } else {\n                this.indentCount++;\n                this.writeIndent();\n                appender(first_v);\n                this.writeIndentSpace();\n                appender(second_i.value);\n                let i: IteratorResult<V>;\n                while ((i = iter.next()).done !== true) {\n                    this.writeIndentSpace();\n                    appender(i.value);\n                }\n                this.indentCount--;\n                this.writeIndent();\n            }\n        }\n        this.pieces.push(closer);\n    }\n\n    writeBytes(bs: Uint8Array) {\n        const limit = this.options.maxBinaryAsciiLength ?? 1024;\n        const proportion = this.options.maxBinaryAsciiProportion ?? 0.75;\n        if (bs.length >= limit) {\n            this.writeBase64(bs);\n        } else {\n            let count = 0;\n            let sampleSize = Math.min(bs.length, limit);\n            for (let i = 0; i < sampleSize; i++) {\n                const b = bs[i];\n                switch (b) {\n                    case 9:\n                    case 10:\n                    case 13:\n                        count++;\n                        break;\n                    default:\n                        if (b >= 32 && b <= 126) {\n                            count++;\n                        }\n                        break;\n                }\n            }\n            if (sampleSize === 0 || (count / sampleSize) >= proportion) {\n                this.writeBinaryStringlike(bs);\n            } else {\n                this.writeBase64(bs);\n            }\n        }\n    }\n\n    writeBase64(bs: Uint8Array) {\n        this.pieces.push(\"#[\", encodeBase64(bs), \"]\");\n    }\n\n    writeBinaryStringlike(bs: Uint8Array) {\n        let buf = '#\"';\n        for (let b of bs) {\n            if (b === 0x22) {\n                buf = buf + '\\\\\"';\n            } else {\n                buf = buf + this.escapeStringlikeChar(String.fromCharCode(b), c => {\n                    if ((b >= 0x20 && b <= 0x7e) && (b !== 0x5c)) {\n                        return c;\n                    } else {\n                        return '\\\\x' + ('0' + b.toString(16)).slice(-2);\n                    }\n                });\n            }\n        }\n        this.pieces.push(buf + '\"');\n    }\n\n    couldBeFlat<T extends Embeddable>(vs: Writable<T>[]): boolean {\n        let seenCompound = false;\n        for (let v of vs) {\n            if (Array.isArray(v) || Set.isSet(v) || Map.isMap(v)) {\n                if (seenCompound) return false;\n                seenCompound = true;\n            }\n            if (this.includeAnnotations && isAnnotated(v) && v.annotations.length > 1) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n\nexport class Writer<T extends Embeddable> {\n    state: WriterState;\n    embeddedWrite: EmbeddedWriter<T>;\n\n    constructor(state: WriterState, embeddedWrite: EmbeddedWriter<T>);\n    constructor(options?: WriterOptions<T>);\n    constructor(\n        state_or_options: (WriterState | WriterOptions<T>) = {},\n        embeddedWrite?: EmbeddedWriter<T>\n    ) {\n        if (state_or_options instanceof WriterState) {\n            this.state = state_or_options;\n            this.embeddedWrite = embeddedWrite!;\n        } else {\n            this.state = new WriterState(state_or_options);\n            this.embeddedWrite = state_or_options.embeddedWrite ?? neverEmbeddedTypeEncode;\n        }\n    }\n\n    static stringify<T extends Embeddable>(v: Writable<T>, options?: WriterOptions<T>): string {\n        const w = new Writer(options);\n        w.push(v);\n        return w.contents();\n    }\n\n    contents(): string {\n        return this.state.pieces.join('');\n    }\n\n    get includeAnnotations(): boolean {\n        return this.state.includeAnnotations;\n    }\n\n    push(v: Writable<T>) {\n        switch (typeof v) {\n            case 'boolean':\n                this.state.pieces.push(v ? '#t' : '#f');\n                break;\n            case 'string':\n                this.state.pieces.push(this.state.escapeStringlike(v, '\"'));\n                break;\n            case 'symbol': {\n                const s = v.description!;\n                // FIXME: This regular expression is conservatively correct, but Anglo-chauvinistic.\n                if (/^[-a-zA-Z0-9~!$%^&*?_=+/.|]+$/.exec(s) && !NUMBER_RE.exec(s)) {\n                    this.state.pieces.push(s);\n                } else {\n                    this.state.pieces.push(this.state.escapeStringlike(s, \"'\"));\n                }\n                break;\n            }\n            case 'bigint':\n            case 'number':\n                this.state.pieces.push('' + v);\n                break;\n            case 'object':\n                if (v === null) {\n                    throw new Error(\"Cannot encode null in Preserves Writer.push\");\n                }\n                else if (isPreserveWritable<any>(v)) {\n                    v.__preserve_text_on__(this);\n                }\n                else if (isPreserveWritable<T>(v)) {\n                    v.__preserve_text_on__(this);\n                }\n                else if (ArrayBuffer.isView(v)) {\n                    if (v instanceof Uint8Array) {\n                        this.state.writeBytes(v);\n                    } else {\n                        const bs = new Uint8Array(v.buffer, v.byteOffset, v.byteLength);\n                        this.state.writeBytes(bs);\n                    }\n                }\n                else if (Record.isRecord<Value<T>, Tuple<Value<T>>, T>(v)) {\n                    const flat = this.state.couldBeFlat(v);\n                    this.state.pieces.push('<');\n                    this.push(v.label);\n                    if (!flat) this.state.indentCount++;\n                    for (let i of v) {\n                        if (flat) {\n                            this.state.pieces.push(' ');\n                        } else {\n                            this.state.writeIndentSpace();\n                        }\n                        this.push(i);\n                    }\n                    if (!flat) this.state.indentCount--;\n                    this.state.pieces.push('>');\n                }\n                else if (isIterable(v)) {\n                    this.state.writeSeq('[', ']', v, vv => this.push(vv));\n                }\n                else if (isEmbedded(v)) {\n                    this.state.pieces.push('#:');\n                    if ('write' in this.embeddedWrite) {\n                        this.embeddedWrite.write(this.state, v);\n                    } else {\n                        new Writer(this.state, genericEmbeddedTypeEncode)\n                            .push(this.embeddedWrite.toValue(v));\n                    }\n                } else {\n                    writeDictionaryOn(new DictionaryMap<T>(v),\n                                      this,\n                                      (k, w) => w.push(k),\n                                      (v, w) => w.push(v));\n                }\n                break;\n            default:\n                ((_: never) => {\n                    throw new Error(`Internal error: unhandled in Preserves Writer.push for ${v}`);\n                })(v);\n        }\n        return this; // for chaining\n    }\n}\n","import { Embeddable, GenericEmbedded, isEmbedded } from \"./embedded.js\";\nimport { Bytes } from \"./bytes.js\";\nimport { Record, Tuple } from \"./record.js\";\nimport { Value } from \"./values.js\";\nimport { KeyedDictionary, Set } from \"./dictionary.js\";\nimport { JsDictionary } from \"./jsdictionary.js\";\n\nexport interface FromJSOptions<T extends Embeddable = GenericEmbedded> {\n    onNonInteger?(n: number): Value<T> | undefined;\n}\n\nexport function fromJS<T extends Embeddable = GenericEmbedded>(x: any): Value<T> {\n    return fromJS_options(x);\n}\n\nexport function fromJS_options<T extends Embeddable = GenericEmbedded>(x: any, options?: FromJSOptions<T>): Value<T> {\n    function walk(x: any): Value<T> {\n        switch (typeof x) {\n            case 'number':\n                if (!Number.isInteger(x)) {\n                    // We require that clients be explicit about integer vs. non-integer types.\n                    const converted = options?.onNonInteger?.(x) ?? void 0;\n                    if (converted !== void 0) return converted;\n                    throw new TypeError(\"Refusing to autoconvert non-integer number to Double\");\n                }\n            // FALL THROUGH\n            case 'bigint':\n            case 'string':\n            case 'symbol':\n            case 'boolean':\n                return x;\n\n            case 'undefined':\n            case 'function':\n                break;\n\n            case 'object':\n                if (x === null) {\n                    break;\n                }\n                if (typeof x.__as_preserve__ === 'function') {\n                    return x.__as_preserve__();\n                }\n                if (Record.isRecord<Value<T>, Tuple<Value<T>>, T>(x)) {\n                    return x;\n                }\n                if (Array.isArray(x)) {\n                    return x.map<Value<T>>(walk);\n                }\n                if (ArrayBuffer.isView(x) || x instanceof ArrayBuffer) {\n                    return Bytes.from(x);\n                }\n                if (Map.isMap(x)) {\n                    const d = new KeyedDictionary<T>();\n                    x.forEach((v, k) => d.set(walk(k), walk(v)));\n                    return d;\n                }\n                if (Set.isSet(x)) {\n                    const s = new Set<T>();\n                    x.forEach(v => s.add(walk(v)));\n                    return s;\n                }\n                if (isEmbedded<T>(x)) {\n                    return x;\n                }\n                // Handle plain JS objects to build a JsDictionary\n                {\n                    const r: JsDictionary<Value<T>> = {};\n                    Object.entries(x).forEach(([k, v]) => r[k] = walk(v));\n                    return r;\n                }\n\n            default:\n                break;\n        }\n\n        throw new TypeError(\"Cannot represent JavaScript value as Preserves: \" + x);\n    }\n\n    return walk(x);\n}\n","import { Embeddable, GenericEmbedded, isEmbedded } from './embedded.js';\nimport type { Value } from './values.js';\n\nimport { Annotated } from './annotated.js';\nimport { Bytes } from './bytes.js';\nimport { KeyedDictionary, KeyedSet } from './dictionary.js';\nimport { Writer, WriterOptions, WriterState } from './writer.js';\nimport { fromJS } from './fromjs.js';\nimport { Reader, ReaderOptions } from './reader.js';\n\nexport function parse<T extends Embeddable = GenericEmbedded>(\n    buffer: string,\n    options?: ReaderOptions<T>,\n): Value<T> {\n    return new Reader<T>(buffer, options).next();\n}\n\nexport function parseAll<T extends Embeddable = GenericEmbedded>(\n    buffer: string,\n    options?: ReaderOptions<T>,\n): Value<T>[] {\n    return new Reader<T>(buffer, options).readToEnd();\n}\n\nexport const stringifyEmbeddedWrite = {\n    write(s: WriterState, v: any): void {\n        if (v instanceof GenericEmbedded) {\n            new Writer(s, this).push(v.generic);\n        } else {\n            try {\n                const j = fromJS(v);\n                if (!isEmbedded(j)) {\n                    new Writer(s, this).push(j);\n                    return;\n                }\n            } catch {}\n            try {\n                s.pieces.push(JSON.stringify(v));\n                return;\n            } catch {}\n            s.pieces.push('⌜' + v + '⌝');\n        }\n    }\n};\n\nexport function stringify<T extends Embeddable = GenericEmbedded>(x: any, options?: WriterOptions<T>): string {\n    options = { ... (options ?? {}) };\n    options.embeddedWrite = options.embeddedWrite ?? stringifyEmbeddedWrite;\n    return Writer.stringify(fromJS<T>(x), options);\n}\n\nexport function preserves(pieces: TemplateStringsArray, ...values: any[]): string {\n    const result = [pieces[0]];\n    values.forEach((v, i) => {\n        result.push(stringify(v));\n        result.push(pieces[i + 1]);\n    });\n    return result.join('');\n}\n","import { Tag } from './constants.js';\nimport type { Embeddable, GenericEmbedded } from './embedded.js';\nimport { Encoder, Preservable } from './encoder.js';\nimport { Value } from './values.js';\nimport type { Writer, PreserveWritable } from './writer.js';\nimport { decodeBase64, encodeBase64 } from './base64.js';\nimport { stringify } from './text.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder('utf-8', { fatal: true });\n\nexport const IsPreservesBytes = Symbol.for('IsPreservesBytes');\n\nexport type BytesLike = Bytes | Uint8Array;\n\nexport class Bytes implements Preservable<any>, PreserveWritable<any> {\n    readonly _view: Uint8Array;\n\n    constructor(maybeByteIterable: any = new Uint8Array()) {\n        if (Bytes.isBytes(maybeByteIterable)) {\n            this._view = maybeByteIterable._view;\n        } else if (ArrayBuffer.isView(maybeByteIterable)) {\n            this._view = new Uint8Array(maybeByteIterable.buffer,\n                                        maybeByteIterable.byteOffset,\n                                        maybeByteIterable.byteLength);\n        } else if (maybeByteIterable instanceof ArrayBuffer) {\n            this._view = new Uint8Array(maybeByteIterable);\n        } else if (typeof maybeByteIterable === 'string') {\n            this._view = textEncoder.encode(maybeByteIterable);\n        } else if (typeof maybeByteIterable === 'number') {\n            this._view = new Uint8Array(maybeByteIterable);\n        } else if (typeof maybeByteIterable.length === 'number') {\n            this._view = Uint8Array.from(maybeByteIterable);\n        } else {\n            throw new TypeError(\"Attempt to initialize Bytes from unsupported value: \" +\n                maybeByteIterable);\n        }\n    }\n\n    dataview(): DataView {\n        return new DataView(this._view.buffer, this._view.byteOffset, this._view.byteLength);\n    }\n\n    get length(): number {\n        return this._view.length;\n    }\n\n    static from(x: any): Bytes {\n        return new Bytes(x);\n    }\n\n    static of(...bytes: number[]): Bytes {\n        return new Bytes(Uint8Array.of(...bytes));\n    }\n\n    static fromLatin1(s: string): Bytes {\n        // Takes codepoints in [0..255] from s, treats them as bytes.\n        // Codepoints outside that range trigger an exception.\n        const result = new Bytes(s.length); // assume all the codepoints are OK\n        for (let i = 0; i < s.length; i++) {\n            const n = s.charCodeAt(i);\n            if (n >= 256) throw new Error(\"Codepoint out of range for 'latin1' byte encoding\");\n            result._view[i] = n;\n        }\n        return result;\n    }\n\n    static fromBase64(s: string): Bytes {\n        return new Bytes(decodeBase64(s));\n    }\n\n    static fromHex(s: string): Bytes {\n        if (s.length & 1) throw new Error(\"Cannot decode odd-length hexadecimal string\");\n        const result = new Bytes(s.length >> 1);\n        Bytes._raw_fromHexInto(s, result._view);\n        return result;\n    }\n\n    static _raw_fromHexInto(s: string, target: Uint8Array): void {\n        const len = s.length >> 1;\n        for (let i = 0; i < len; i++) {\n            target[i] =\n                (unhexDigit(s.charCodeAt(i << 1)) << 4) | unhexDigit(s.charCodeAt((i << 1) + 1));\n        }\n    }\n\n    static fromIO(io: string | BytesLike): string | Bytes {\n        if (typeof io === 'string') return io;\n        if (Bytes.isBytes(io)) return io;\n        return new Bytes(io);\n    }\n\n    static toIO(b : string | BytesLike): string | Uint8Array {\n        if (typeof b === 'string') return b;\n        if (Bytes.isBytes(b)) return b._view;\n        return b;\n    }\n\n    static concat = function (bss: BytesLike[]): Bytes {\n        let len = 0;\n        for (let i = 0; i < bss.length; i++) { len += underlying(bss[i]).length; }\n\n        const result = new Bytes(len);\n        let index = 0;\n        for (let i = 0; i < bss.length; i++) {\n            const bs = underlying(bss[i]);\n            result._view.set(bs, index);\n            index += bs.length;\n        }\n        return result;\n    }\n\n    get(index: number): number {\n        return this._view[index];\n    }\n\n    equals(other: any): boolean {\n        if (!Bytes.isBytes(other)) return false;\n        if (other.length !== this.length) return false;\n        const va = this._view;\n        const vb = other._view;\n        for (let i = 0; i < va.length; i++) {\n            if (va[i] !== vb[i]) return false;\n        }\n        return true;\n    }\n\n    hashCode(): number {\n        // Immutable.js uses this function for strings.\n        const v = this._view;\n        let hash = 0;\n        for (let i = 0; i < v.length; i++) {\n            hash = ((31 * hash) + v[i]) | 0;\n        }\n        return hash;\n    }\n\n    static compare(a: Bytes, b: Bytes): number {\n        if (a < b) return -1;\n        if (b < a) return 1;\n        return 0;\n    }\n\n    static decodeUtf8(bs: Bytes | Uint8Array): string {\n        return textDecoder.decode(underlying(bs));\n    }\n\n    fromUtf8(): string {\n        return textDecoder.decode(this._view);\n    }\n\n    __as_preserve__<T extends Embeddable = GenericEmbedded>(): Value<T> {\n        return this;\n    }\n\n    static __from_preserve__<T extends Embeddable>(v: Value<T>): undefined | Bytes {\n        return Bytes.isBytes(v) ? v : void 0;\n    }\n\n    toLatin1(): string {\n        return String.fromCharCode.apply(null, this._view as any as number[]);\n    }\n\n    toBase64(): string {\n        return encodeBase64(this._view);\n    }\n\n    toHex(digit = hexDigit): string {\n        var nibbles = [];\n        for (let i = 0; i < this.length; i++) {\n            nibbles.push(digit(this._view[i] >> 4));\n            nibbles.push(digit(this._view[i] & 15));\n        }\n        return nibbles.join('');\n    }\n\n    valueOf(): string {\n        // Defined mostly in order to get lexicographic comparison to \"work reliably\"\n        return this.toHex();\n    }\n\n    __preserve_on__(encoder: Encoder<any>) {\n        encoder.state.emitbyte(Tag.ByteString);\n        encoder.state.varint(this.length);\n        encoder.state.emitbytes(this._view);\n    }\n\n    __preserve_text_on__(w: Writer<any>) {\n        w.state.writeBytes(this._view);\n    }\n\n    toString(): string {\n        return stringify(this);\n    }\n\n    get [IsPreservesBytes](): boolean {\n        return true;\n    }\n\n    static isBytes(x: any): x is Bytes {\n        return !!x?.[IsPreservesBytes];\n    }\n}\n\nexport function hexDigit(n: number): string {\n    return '0123456789abcdef'[n];\n}\n\nexport function unhexDigit(asciiCode: number, errorClass: {new(msg: string): Error} = Error) {\n    if (asciiCode >= 48 && asciiCode <= 57) return asciiCode - 48;\n    if (asciiCode >= 97 && asciiCode <= 102) return asciiCode - 97 + 10;\n    if (asciiCode >= 65 && asciiCode <= 70) return asciiCode - 65 + 10;\n    throw new errorClass(\"Invalid hex digit: \" + String.fromCharCode(asciiCode));\n}\n\nexport function underlying(b: Bytes | Uint8Array): Uint8Array {\n    return (b instanceof Uint8Array) ? b : b._view;\n}\n\nexport function dataview(b: Bytes | DataView): DataView {\n    return (b instanceof DataView) ? b : b.dataview();\n}\n\n// Uint8Array / TypedArray methods\n\nexport interface Bytes {\n    entries(): IterableIterator<[number, number]>;\n    every(predicate: (value: number, index: number, array: Uint8Array) => unknown,\n          thisArg?: any): boolean;\n    find(predicate: (value: number, index: number, obj: Uint8Array) => boolean,\n         thisArg?: any): number;\n    findIndex(predicate: (value: number, index: number, obj: Uint8Array) => boolean,\n              thisArg?: any): number;\n    forEach(callbackfn: (value: number, index: number, array: Uint8Array) => void,\n            thisArg?: any): void;\n    includes(searchElement: number, fromIndex?: number): boolean;\n    indexOf(searchElement: number, fromIndex?: number): number;\n    join(separator?: string): string;\n    keys(): IterableIterator<number>;\n    lastIndexOf(searchElement: number, fromIndex?: number): number;\n    reduce(callbackfn: (previousValue: number,\n                        currentValue: number,\n                        currentIndex: number,\n                        array: Uint8Array) => number,\n           initialValue?: number): number;\n    reduceRight(callbackfn: (previousValue: number,\n                             currentValue: number,\n                             currentIndex: number,\n                             array: Uint8Array) => number,\n                initialValue?: number): number;\n    some(predicate: (value: number, index: number, array: Uint8Array) => unknown,\n         thisArg?: any): boolean;\n    toLocaleString(): string;\n    values(): IterableIterator<number>;\n\n    filter(predicate: (value: number, index: number, array: Uint8Array) => any,\n           thisArg?: any): Bytes;\n    map(callbackfn: (value: number, index: number, array: Uint8Array) => number,\n        thisArg?: any): Bytes;\n    slice(start?: number, end?: number): Bytes;\n    subarray(begin?: number, end?: number): Bytes;\n\n    reverse(): Bytes;\n    sort(compareFn?: (a: number, b: number) => number): Bytes;\n\n    [Symbol.iterator](): IterableIterator<number>;\n}\n\n(function () {\n    for (const k of `entries every find findIndex forEach includes indexOf join\nkeys lastIndexOf reduce reduceRight some toLocaleString values`.split(/\\s+/))\n    {\n        (Bytes as any).prototype[k] =\n            function (...args: any[]) { return this._view[k](...args); };\n    }\n\n    for (const k of `filter map slice subarray`.split(/\\s+/))\n    {\n        (Bytes as any).prototype[k] =\n            function (...args: any[]) { return new Bytes(this._view[k](...args)); };\n    }\n\n    for (const k of `reverse sort`.split(/\\s+/))\n    {\n        (Bytes as any).prototype[k] =\n            function (...args: any[]) { return new Bytes(this._view.slice()[k](...args)); };\n    }\n\n    Bytes.prototype[Symbol.iterator] = function () { return this._view[Symbol.iterator](); };\n})();\n","import { Tag } from \"./constants.js\";\nimport { Bytes, unhexDigit } from \"./bytes.js\";\nimport { Value } from \"./values.js\";\nimport { EncodeError } from \"./codec.js\";\nimport { Record, Tuple } from \"./record.js\";\nimport { EmbeddedTypeEncode, isEmbedded } from \"./embedded.js\";\nimport type { Embeddable } from \"./embedded.js\";\nimport { DictionaryMap, encodeDictionaryOn } from \"./dictionary.js\";\nimport { neverEmbeddedTypeEncode } from \"./writer.js\";\n\nexport type Encodable<T extends Embeddable> =\n    Value<T> | Preservable<T> | Iterable<Value<T>> | ArrayBufferView;\n\nexport interface Preservable<T extends Embeddable> {\n    __preserve_on__(encoder: Encoder<T>): void;\n}\n\nexport function isPreservable<T extends Embeddable>(v: any): v is Preservable<T> {\n    return typeof v === 'object' && v !== null && '__preserve_on__' in v && typeof v.__preserve_on__ === 'function';\n}\n\nexport interface EncoderOptions {\n    canonical?: boolean;\n    includeAnnotations?: boolean;\n}\n\nexport interface EncoderEmbeddedOptions<T extends Embeddable> extends EncoderOptions {\n    embeddedEncode?: EmbeddedTypeEncode<T>;\n}\n\nfunction asLatin1(bs: Uint8Array): string {\n    return String.fromCharCode.apply(null, bs as any as number[]);\n}\n\nfunction isIterable<T>(v: any): v is Iterable<T> {\n    return typeof v === 'object' && v !== null && typeof v[Symbol.iterator] === 'function';\n}\n\nexport class IdentityEmbeddedTypeEncode implements EmbeddedTypeEncode<any> {\n    _nextId = 0;\n    readonly _registry = new WeakMap<object, number>();\n\n    embeddedId(v: any): number {\n        let id = this._registry.get(v);\n        if (id === void 0) {\n            id = this._nextId++;\n            this._registry.set(v, id);\n        }\n        return id;\n    }\n\n    encode(s: EncoderState, v: any): void {\n        new Encoder(s, this).push(this.embeddedId(v));\n    }\n}\n\nexport class EncoderState {\n    chunks: Array<Uint8Array>;\n    view: DataView;\n    index: number;\n    options: EncoderOptions;\n\n    constructor(options: EncoderOptions) {\n        this.chunks = [];\n        this.view = new DataView(new ArrayBuffer(256));\n        this.index = 0;\n        this.options = options;\n    }\n\n    get canonical(): boolean {\n        return this.options.canonical ?? true;\n    }\n\n    get includeAnnotations(): boolean {\n        return this.options.includeAnnotations ?? !this.canonical;\n    }\n\n    contents(): Bytes {\n        if (this.chunks.length === 0) {\n            const resultLength = this.index;\n            this.index = 0;\n            return new Bytes(this.view.buffer.slice(0, resultLength));\n        } else {\n            this.rotatebuffer(4096);\n            const chunks = this.chunks;\n            this.chunks = [];\n            return Bytes.concat(chunks);\n        }\n    }\n\n    /* Like contents(), but hands back a string containing binary data \"encoded\" via latin-1 */\n    contentsString(): string {\n        if (this.chunks.length === 0) {\n            const s = asLatin1(new Uint8Array(this.view.buffer, 0, this.index));\n            this.index = 0;\n            return s;\n        } else {\n            this.rotatebuffer(4096);\n            const chunks = this.chunks;\n            this.chunks = [];\n            return chunks.map(asLatin1).join('');\n        }\n    }\n\n    rotatebuffer(size: number) {\n        this.chunks.push(new Uint8Array(this.view.buffer, 0, this.index));\n        this.view = new DataView(new ArrayBuffer(size));\n        this.index = 0;\n    }\n\n    makeroom(amount: number) {\n        if (this.index + amount > this.view.byteLength) {\n            this.rotatebuffer(amount + 4096);\n        }\n    }\n\n    emitbyte(b: number) {\n        this.makeroom(1);\n        this.view.setUint8(this.index++, b);\n    }\n\n    emitbytes(bs: Uint8Array) {\n        this.makeroom(bs.length);\n        (new Uint8Array(this.view.buffer)).set(bs, this.index);\n        this.index += bs.length;\n    }\n\n    claimbytes(count: number) {\n        this.makeroom(count);\n        const view = new Uint8Array(this.view.buffer, this.index, count);\n        this.index += count;\n        return view;\n    }\n\n    varint(v: number) {\n        while (v >= 128) {\n            this.emitbyte((v % 128) + 128);\n            v = Math.floor(v / 128);\n        }\n        this.emitbyte(v);\n    }\n\n    encodeint(v: number | bigint) {\n        if (typeof v === 'bigint') return this.encodebigint(v);\n\n        this.emitbyte(Tag.SignedInteger);\n\n        if (v === 0) {\n            this.emitbyte(0);\n            return;\n        }\n\n        const plain_bitcount = v === -1 ? 0 : Math.floor(Math.log2(v > 0 ? v : -(1 + v))) + 1;\n        const signed_bitcount = plain_bitcount + 1;\n        const bytecount = (signed_bitcount + 7) >> 3;\n        this.varint(bytecount);\n\n        const enc = (n: number, x: number) => {\n            if (n > 0) {\n                enc(n - 1, Math.floor(x / 256));\n                this.emitbyte(x & 255);\n            }\n        };\n        enc(bytecount, v);\n    }\n\n    encodebigint(v: bigint) {\n        this.emitbyte(Tag.SignedInteger);\n\n        let hex: string;\n        if (v > 0) {\n            hex = v.toString(16);\n            if (hex.length & 1) {\n                hex = '0' + hex;\n            } else if (unhexDigit(hex.charCodeAt(0)) >= 8) {\n                hex = '00' + hex;\n            }\n        } else if (v < 0) {\n            const negatedHex = (~v).toString(16);\n            hex = '';\n            for (let i = 0; i < negatedHex.length; i++) {\n                hex = hex + 'fedcba9876543210'[unhexDigit(negatedHex.charCodeAt(i))];\n            }\n            if (hex.length & 1) {\n                hex = 'f' + hex;\n            } else if (unhexDigit(hex.charCodeAt(0)) < 8) {\n                hex = 'ff' + hex;\n            }\n        } else {\n            this.emitbyte(0);\n            return;\n        }\n\n        this.varint(hex.length >> 1);\n        Bytes._raw_fromHexInto(hex, this.claimbytes(hex.length >> 1));\n    }\n\n    encodebytes(tag: Tag, bs: Uint8Array) {\n        this.emitbyte(tag);\n        this.varint(bs.length);\n        this.emitbytes(bs);\n    }\n}\n\nexport class Encoder<T extends Embeddable> {\n    state: EncoderState;\n    embeddedEncode: EmbeddedTypeEncode<T>;\n\n    constructor(options: EncoderEmbeddedOptions<T>);\n    constructor(state: EncoderState, embeddedEncode?: EmbeddedTypeEncode<T>);\n    constructor(\n        state_or_options: (EncoderState | EncoderEmbeddedOptions<T>) = {},\n        embeddedEncode?: EmbeddedTypeEncode<T>)\n    {\n        if (state_or_options instanceof EncoderState) {\n            this.state = state_or_options;\n            this.embeddedEncode = embeddedEncode ?? neverEmbeddedTypeEncode;\n        } else {\n            this.state = new EncoderState(state_or_options);\n            this.embeddedEncode = state_or_options.embeddedEncode ?? neverEmbeddedTypeEncode;\n        }\n    }\n\n    withEmbeddedEncode<S extends Embeddable>(\n        embeddedEncode: EmbeddedTypeEncode<S>,\n        body: (e: Encoder<S>) => void): this\n    {\n        body(new Encoder(this.state, embeddedEncode));\n        return this;\n    }\n\n    get canonical(): boolean {\n        return this.state.canonical;\n    }\n\n    get includeAnnotations(): boolean {\n        return this.state.includeAnnotations;\n    }\n\n    contents(): Bytes {\n        return this.state.contents();\n    }\n\n    contentsString(): string {\n        return this.state.contentsString();\n    }\n\n    grouped(tag: Tag, f: () => void) {\n        this.state.emitbyte(tag);\n        f();\n        this.state.emitbyte(Tag.End);\n    }\n\n    push(v: Encodable<T>) {\n        if (isPreservable<any>(v)) {\n            v.__preserve_on__(this);\n        }\n        else if (isPreservable<T>(v)) {\n            v.__preserve_on__(this);\n        }\n        else if (typeof v === 'boolean') {\n            this.state.emitbyte(v ? Tag.True : Tag.False);\n        }\n        else if (typeof v === 'number' || typeof v === 'bigint') {\n            this.state.encodeint(v);\n        }\n        else if (typeof v === 'string') {\n            this.state.encodebytes(Tag.String, new Bytes(v)._view);\n        }\n        else if (typeof v === 'symbol') {\n            const key = Symbol.keyFor(v);\n            if (key === void 0) throw new EncodeError(\"Cannot preserve non-global Symbol\", v);\n            this.state.encodebytes(Tag.Symbol, new Bytes(key)._view);\n        }\n        else if (ArrayBuffer.isView(v)) {\n            if (v instanceof Uint8Array) {\n                this.state.encodebytes(Tag.ByteString, v);\n            } else {\n                const bs = new Uint8Array(v.buffer, v.byteOffset, v.byteLength);\n                this.state.encodebytes(Tag.ByteString, bs);\n            }\n        }\n        else if (Record.isRecord<Value<T>, Tuple<Value<T>>, T>(v)) {\n            this.state.emitbyte(Tag.Record);\n            this.push(v.label);\n            for (let i of v) { this.push(i); }\n            this.state.emitbyte(Tag.End);\n        }\n        else if (isIterable<Value<T>>(v)) {\n            this.grouped(Tag.Sequence, () => {\n                for (let i of v) this.push(i);\n            });\n        }\n        else if (isEmbedded<T>(v)) {\n            this.state.emitbyte(Tag.Embedded);\n            this.embeddedEncode.encode(this.state, v);\n        }\n        else {\n            encodeDictionaryOn(new DictionaryMap<T>(v),\n                               this,\n                               (k, e) => e.push(k),\n                               (v, e) => e.push(v));\n        }\n        return this; // for chaining\n    }\n}\n\nexport function encode<T extends Embeddable>(\n    v: Encodable<T>,\n    options: EncoderEmbeddedOptions<T> = {}): Bytes\n{\n    return new Encoder(options).push(v).contents();\n}\n\nexport function canonicalEncode(v: Encodable<never>, options?: EncoderEmbeddedOptions<never>): Bytes;\nexport function canonicalEncode(v: Encodable<any>, options?: EncoderEmbeddedOptions<any>): Bytes;\nexport function canonicalEncode(v: any, options?: EncoderEmbeddedOptions<any>): Bytes {\n    return encode(v, options === void 0 ? { canonical: true } : { ... options, canonical: true });\n}\n\nexport function canonicalString(v: Encodable<any>, options?: EncoderEmbeddedOptions<any>): string {\n    return new Encoder(options === void 0 ? { canonical: true } : { ... options, canonical: true })\n        .push(v).contentsString();\n}\n\nexport function encodeWithAnnotations<T extends Embeddable>(\n    v: Encodable<T>,\n    options: EncoderEmbeddedOptions<T> = {},\n): Bytes {\n    return encode(v, { ... options, includeAnnotations: true });\n}\n","// FlexMap, FlexSet: like built-in Map and Set, but with a\n// canonicalization function which gives us the possibility of a\n// coarser equivalence than the identity equivalence used in Map and\n// Set.\n\n// A Canonicalizer represents the equivalence you have in mind. For\n//\n//    c: Canonicalizer<V>\n//    eqv: Equivalence<V>\n//    v1: V\n//    v2: V\n//\n// where `eqv` is the equivalence you want,\n//\n//     eqv(v1, v2) ⇔ c(v1) === c(v2)\n//\nexport type Canonicalizer<V> = (v: V) => string;\nexport type Equivalence<V> = (v1: V, v2: V) => boolean;\n\nexport type IdentityMap<K, V> = Map<K, V>;\nexport type IdentitySet<V> = Set<V>;\nexport const IdentityMap = Map;\nexport const IdentitySet = Set;\n\nexport const IsMap = Symbol.for('IsMap');\nexport const IsSet = Symbol.for('IsSet');\n\ndeclare global {\n    interface Map<K, V> { get [IsMap](): boolean; }\n    interface MapConstructor { isMap<K, V>(x: any): x is Map<K, V>; }\n    interface Set<T> { get [IsSet](): boolean; }\n    interface SetConstructor { isSet<T>(x: any): x is Set<T>; }\n}\nif (!(IsMap in Map.prototype)) {\n    Object.defineProperty(Map.prototype, IsMap, { get() { return true; } });\n    Map.isMap = <K,V> (x: any): x is Map<K, V> => !!x?.[IsMap];\n}\nif (!(IsSet in Set.prototype)) {\n    Object.defineProperty(Set.prototype, IsSet, { get() { return true; } });\n    Set.isSet = <T> (x: any): x is Set<T> => !!x?.[IsSet];\n}\n\nexport function _iterMap<S,T>(i: Iterator<S>, f : (s: S) => T): IterableIterator<T> {\n    const _f = (r: IteratorResult<S>): IteratorResult<T> => {\n        if (r.done) {\n            return { done: true, value: null };\n        } else {\n            return { done: false, value: f(r.value) };\n        }\n    };\n    return {\n        next: (v?: any): IteratorResult<T> => _f(i.next(v)),\n        return: (v?: any): IteratorResult<T> => _f(i.return?.(v) ?? { done: true, value: null }),\n        throw: (e?: any): IteratorResult<T> => _f(i.throw?.(e) ?? { done: true, value: null }),\n        [Symbol.iterator]() { return this; },\n    };\n}\n\nexport class FlexMap<K, V> implements Map<K, V> {\n    readonly items: Map<string, [K, V]>;\n    readonly canonicalizer: Canonicalizer<K>;\n\n    constructor(c: Canonicalizer<K>, items?: Iterable<readonly [K, V]>) {\n        this.canonicalizer = c;\n        this.items = (items === void 0)\n            ? new Map()\n            : new Map(_iterMap(items[Symbol.iterator](), ([k, v]) => [this._key(k), [k, v]]));\n    }\n\n    _key(k: K): string {\n        return this.canonicalizer(k);\n    }\n\n    get(k: K, defaultValue?: V): V | undefined {\n        const e = this.items.get(this._key(k));\n        return (e === void 0) ? defaultValue : e[1];\n    }\n\n    getOrSet(k: K, initializer: () => V): V {\n        const ks = this._key(k);\n        let e = this.items.get(ks);\n        if (e === void 0) {\n            e = [k, initializer()];\n            this.items.set(ks, e);\n        }\n        return e[1];\n    }\n\n    set(k: K, v: V): this {\n        this.items.set(this._key(k), [k, v]);\n        return this;\n    }\n\n    forEach(f: <T extends Map<K, V>> (v: V, k: K, map: T) => void, thisArg?: any) {\n        this.items.forEach(([k, v]) => f.call(thisArg, v, k, this));\n    }\n\n    entries(): MapIterator<[K, V]> {\n        return this.items.values();\n    }\n\n    keys(): MapIterator<K> {\n        return _iterMap(this.items.values(), ([k, _v]) => k);\n    }\n\n    values(): MapIterator<V> {\n        return _iterMap(this.items.values(), ([_k, v]) => v);\n    }\n\n    delete(k: K): boolean {\n        return this.items.delete(this._key(k));\n    }\n\n    getAndDelete(k: K, defaultValue?: V): V | undefined {\n        const ks = this._key(k);\n        const e = this.items.get(ks);\n        if (e === void 0) return defaultValue;\n        this.items.delete(ks);\n        return e[1];\n    }\n\n    clear() {\n        this.items.clear();\n    }\n\n    has(k: K): boolean {\n        return this.items.has(this._key(k));\n    }\n\n    get size(): number {\n        return this.items.size;\n    }\n\n    [Symbol.iterator](): MapIterator<[K, V]> {\n        return this.items.values();\n    }\n\n    get [Symbol.toStringTag]() { return 'FlexMap'; }\n\n    equals(other: any, eqv: Equivalence<V> = (v1, v2) => v1 === v2): boolean {\n        if (!('size' in other && 'has' in other && 'get' in other)) return false;\n        if (this.size !== other.size) return false;\n        for (let [k, v] of this.items.values()) {\n            if (!other.has(k)) return false;\n            if (!eqv(v, other.get(k))) return false;\n        }\n        return true;\n    }\n\n    update(key: K,\n           f: (oldValue?: V) => V | undefined,\n           defaultValue?: V,\n           eqv: Equivalence<V> = (v1, v2) => v1 === v2): number\n    {\n        const ks = this._key(key);\n        if (this.items.has(ks)) {\n            const oldValue = this.items.get(ks)![1];\n            const newValue = f(oldValue);\n            if (newValue === void 0) {\n                this.items.delete(ks);\n                return -1;\n            } else {\n                if (!eqv(newValue, oldValue)) this.items.set(ks, [key, newValue]);\n                return 0;\n            }\n        } else {\n            const newValue = f(defaultValue);\n            if (newValue === void 0) {\n                return 0;\n            } else {\n                this.items.set(ks, [key, newValue]);\n                return 1;\n            }\n        }\n    }\n\n    canonicalKeys(): MapIterator<string> {\n        return this.items.keys();\n    }\n\n    get [IsMap](): boolean {\n        return true;\n    }\n}\n\nexport class FlexSet<V> implements Set<V> {\n    readonly items: Map<string, V>;\n    readonly canonicalizer: Canonicalizer<V>;\n\n    constructor(c: Canonicalizer<V>, items?: Iterable<V>) {\n        this.canonicalizer = c;\n        this.items = (items === void 0)\n            ? new Map()\n            : new Map(_iterMap(items[Symbol.iterator](), (v) => [this._key(v), v]));\n    }\n\n    _key(v: V): string {\n        return this.canonicalizer(v);\n    }\n\n    has(v: V): boolean {\n        return this.items.has(this._key(v));\n    }\n\n    get(v: V): {item: V} | null {\n        const vs = this._key(v);\n        if (this.items.has(vs)) {\n            return { item: this.items.get(vs)! };\n        } else {\n            return null;\n        }\n    }\n\n    add(v: V): this {\n        this.items.set(this._key(v), v);\n        return this;\n    }\n\n    forEach(f: <T extends Set<V>>(v: V, v2: V, set: T) => void, thisArg?: any) {\n        this.items.forEach((v) => f.call(thisArg, v, v, this));\n    }\n\n    entries(): SetIterator<[V, V]> {\n        return _iterMap(this.items.values(), (v) => [v, v]);\n    }\n\n    keys(): SetIterator<V> {\n        return this.items.values();\n    }\n\n    values(): SetIterator<V> {\n        return this.items.values();\n    }\n\n    delete(v: V): boolean {\n        return this.items.delete(this._key(v));\n    }\n\n    clear() {\n        this.items.clear();\n    }\n\n    get size(): number {\n        return this.items.size;\n    }\n\n    [Symbol.iterator](): SetIterator<V> {\n        return this.items.values();\n    }\n\n    get [Symbol.toStringTag]() { return 'FlexSet'; }\n\n    equals(other: any): boolean {\n        if (!('size' in other && 'has' in other)) return false;\n        if (this.size !== other.size) return false;\n        for (let v of this.items.values()) {\n            if (!other.has(v)) return false;\n        }\n        return true;\n    }\n\n    canonicalValues(): SetIterator<string> {\n        return this.items.keys();\n    }\n\n    union(other: Set<V>): FlexSet<V> {\n        const result = new FlexSet(this.canonicalizer, this);\n        for (let k of other) result.add(k);\n        return result;\n    }\n\n    intersect(other: Set<V>): FlexSet<V> {\n        const result = new FlexSet(this.canonicalizer);\n        for (let k of this) if (other.has(k)) result.add(k);\n        return result;\n    }\n\n    subtract(other: Set<V>): FlexSet<V> {\n        const result = new FlexSet(this.canonicalizer);\n        for (let k of this) if (!other.has(k)) result.add(k);\n        return result;\n    }\n\n    get [IsSet](): boolean {\n        return true;\n    }\n}\n","import { isEmbedded } from './embedded.js';\nimport { Equivalence, _iterMap } from './flex.js';\n\nexport interface JsDictionary<V> {\n    [key: string]: V;\n}\n\nexport namespace JsDictionary {\n    export function isJsDictionary<V>(x: any): x is JsDictionary<V> {\n        // We accept only literal objects and objects created via `new Object` as dictionaries.\n        // Furthermore, we require no function-valued `__as_preserve__` property to exist.\n        return typeof x === 'object'\n            && x !== null\n            && Object.getPrototypeOf(Object.getPrototypeOf(x)) === null\n            && typeof x.__as_preserve__ !== 'function'\n            && !isEmbedded(x);\n    }\n\n    export function from<V>(entries: Iterable<[symbol, V]>): JsDictionary<V> {\n        const r: JsDictionary<V> = {};\n        for (const [key, value] of entries) r[key.description!] = value;\n        return r;\n    }\n\n    export function clear<V>(j: JsDictionary<V>): void {\n        for (const key in j) delete j[key];\n    }\n\n    export function remove<V>(j: JsDictionary<V>, key: symbol): boolean {\n        const result = has(j, key);\n        delete j[key.description!];\n        return result;\n    }\n\n    export function forEach<V>(\n        j: JsDictionary<V>,\n        callbackfn: (value: V, key: symbol) => void,\n    ): void {\n        Object.entries(j).forEach(([key, val]) => callbackfn(val, Symbol.for(key)));\n    }\n\n    export function get<V>(j: JsDictionary<V>, key: symbol): V | undefined {\n        return j[key.description!];\n    }\n\n    export function has<V>(j: JsDictionary<V>, key: symbol): boolean {\n        return Object.hasOwnProperty.call(j, key.description!);\n    }\n\n    export function set<V>(j: JsDictionary<V>, key: symbol, value: V): JsDictionary<V> {\n        j[key.description!] = value;\n        return j;\n    }\n\n    export function size<V>(j: JsDictionary<V>): number {\n        return Object.keys(j).length;\n    }\n\n    export function entries<V>(j: JsDictionary<V>): IterableIterator<[symbol, V]> {\n        return _iterMap(Object.entries(j).values(), ([k, v]) => [Symbol.for(k), v]);\n    }\n\n    export function keys<V>(j: JsDictionary<V>): IterableIterator<symbol> {\n        return _iterMap(Object.keys(j).values(), k => Symbol.for(k));\n    }\n\n    export function values<V>(j: JsDictionary<V>): IterableIterator<V> {\n        return Object.values(j).values();\n    }\n\n    export function clone<V>(j: JsDictionary<V>): JsDictionary<V> {\n        const r: JsDictionary<V> = {};\n        Object.keys(j).forEach(k => r[k] = j[k]);\n        return r;\n    }\n\n    export function equals<V>(\n        j1: JsDictionary<V>,\n        j2: JsDictionary<V>,\n        eqv: Equivalence<V> = (v1, v2) => v1 === v2,\n    ): boolean {\n        if (size(j1) !== size(j2)) return false;\n        for (let [k, v] of entries(j1)) {\n            if (!has(j2, k)) return false;\n            if (!eqv(v, get(j2, k)!)) return false;\n        }\n        return true;\n    }\n}\n","import { Encoder, IdentityEmbeddedTypeEncode, canonicalString } from \"./encoder.js\";\nimport { Tag } from \"./constants.js\";\nimport { FlexMap, FlexSet, _iterMap, IdentitySet, Equivalence, IsMap } from \"./flex.js\";\nimport { Value } from \"./values.js\";\nimport { Bytes } from './bytes.js';\nimport { Embeddable, GenericEmbedded } from \"./embedded.js\";\nimport type { Preservable } from \"./encoder.js\";\nimport type { Writer, PreserveWritable } from \"./writer.js\";\nimport { annotations, Annotated } from \"./annotated.js\";\nimport { JsDictionary } from \"./jsdictionary.js\";\nimport { unannotate } from \"./strip.js\";\nimport { fromJS_options, FromJSOptions } from \"./fromjs.js\";\nimport { stringify } from './text.js';\n\nexport type DictionaryType = 'Dictionary' | 'Set';\nexport const DictionaryType = Symbol.for('DictionaryType');\n\nexport type CompoundKey<T extends Embeddable> = Value<T> | (Preservable<T> & PreserveWritable<T>);\n\nconst identityEncoder = new IdentityEmbeddedTypeEncode();\n\nexport class EncodableDictionary<T extends Embeddable, K, V> extends FlexMap<K, V>\n    implements Preservable<T>, PreserveWritable<T>\n{\n    constructor(\n        public readonly encodeK: (k: K) => CompoundKey<T>,\n        public readonly encodeV: (v: V) => CompoundKey<T>,\n        items?: readonly [K, V][] | Iterable<readonly [K, V]>\n    ) {\n        super((k: K) => canonicalString(encodeK(k), { embeddedEncode: identityEncoder }), items);\n    }\n\n    __preserve_on__(encoder: Encoder<T>) {\n        encodeDictionaryOn(this,\n                           encoder,\n                           (k, e) => e.push(this.encodeK(k)),\n                           (v, e) => e.push(this.encodeV(v)));\n    }\n\n    __preserve_text_on__(w: Writer<T>) {\n        writeDictionaryOn(this,\n                          w,\n                          (k, w) => w.push(this.encodeK(k)),\n                          (v, w) => w.push(this.encodeV(v)));\n    }\n\n    toString(): string {\n        return stringify(this);\n    }\n}\n\nexport class KeyedDictionary<T extends Embeddable = GenericEmbedded, K extends CompoundKey<T> = Value<T>, V = Value<T>>\n    extends EncodableDictionary<T, K, V>\n{\n    get [DictionaryType](): DictionaryType {\n        return 'Dictionary';\n    }\n\n    static isKeyedDictionary<T extends Embeddable = GenericEmbedded, K extends CompoundKey<T> = Value<T>, V = Value<T>>(\n        x: any,\n    ): x is KeyedDictionary<T, K, V> {\n        return x?.[DictionaryType] === 'Dictionary';\n    }\n\n\n    static fromJS<T extends Embeddable = GenericEmbedded>(\n        x: object,\n        options?: FromJSOptions<T>,\n    ): KeyedDictionary<T, string, Value<T>> {\n        const r = new KeyedDictionary<T, string, Value<T>>();\n        Object.entries(x).forEach(([key, value]) => r.set(key, fromJS_options(value, options)));\n        return r;\n    }\n\n    constructor(items?: readonly [K, V][] | Iterable<readonly [K, V]>) {\n        // The cast in encodeV is suuuuuuuper unsound, since V may not in fact be Encodable and Writable.\n        // Don't try to encode/write dictionaries holding non-encodable/non-writable values.\n        super(k => k, v => v as CompoundKey<T>, items);\n    }\n\n    clone(): KeyedDictionary<T, K, V> {\n        return new KeyedDictionary(this);\n    }\n\n    get [Symbol.toStringTag]() { return 'Dictionary'; }\n\n    equals(otherAny: any, eqv: Equivalence<V> = (v1, v2) => v1 === v2): boolean {\n        const otherMap = Dictionary.asMap(otherAny);\n        if (!otherMap) return false;\n        return super.equals(otherMap, eqv);\n    }\n}\n\nexport type Dictionary<T extends Embeddable = GenericEmbedded, V = Value<T>> =\n    JsDictionary<V> | KeyedDictionary<T, Value<T>, V>;\n\nexport class DictionaryMap<T extends Embeddable = GenericEmbedded, V = Value<T>> implements Map<Value<T>, V> {\n    get [IsMap](): boolean { return true; }\n\n    j: JsDictionary<V> | undefined;\n    k: KeyedDictionary<T, Value<T>, V> | undefined;\n\n    constructor(input?: Dictionary<T, V>) {\n        if (input === void 0) {\n            this.j = {};\n            this.k = void 0;\n        } else if (DictionaryType in input) {\n            this.j = void 0;\n            this.k = input;\n        } else {\n            this.j = input;\n            this.k = void 0;\n        }\n    }\n\n    static from<T extends Embeddable = GenericEmbedded, V = Value<T>>(\n        entries: [Value<T>, V][] | Iterable<[Value<T>, V]>,\n    ): DictionaryMap<T, V> {\n        const r = new DictionaryMap<T, V>();\n        for (const [key, value] of entries) r.set(key, value);\n        return r;\n    }\n\n    clear(): void {\n        if (this.j) {\n            JsDictionary.clear(this.j);\n        } else {\n            this.k!.clear();\n        }\n    }\n\n    delete(key: Value<T>): boolean {\n        if (this.j) {\n            key = unannotate(key);\n            if (typeof key !== 'symbol') return false;\n            return JsDictionary.remove(this.j, key);\n        } else {\n            return this.k!.delete(key);\n        }\n    }\n\n    forEach(callbackfn: (value: V, key: Value<T>, map: Map<Value<T>, V>) => void, thisArg?: any): void {\n        if (this.j) {\n            JsDictionary.forEach(this.j, (v, k) => callbackfn.call(thisArg, v, k, this));\n        } else {\n            this.k!.forEach(callbackfn, thisArg);\n        }\n    }\n\n    get(key: Value<T>): V | undefined {\n        if (this.j) {\n            key = unannotate(key);\n            if (typeof key !== 'symbol') return void 0;\n            return JsDictionary.get(this.j, key);\n        } else {\n            return this.k!.get(key);\n        }\n    }\n\n    has(key: Value<T>): boolean {\n        if (this.j) {\n            key = unannotate(key);\n            if (typeof key !== 'symbol') return false;\n            return JsDictionary.has(this.j, key);\n        } else {\n            return this.k!.has(key);\n        }\n    }\n\n    set(key: Value<T>, value: V): this {\n        if (this.j) {\n            if (typeof key === 'symbol') {\n                JsDictionary.set(this.j, key, value);\n                return this;\n            }\n            this.k = new KeyedDictionary<T, Value<T>, V>(JsDictionary.entries(this.j));\n            this.j = void 0;\n        }\n        this.k!.set(key, value);\n        return this;\n    }\n\n    get size(): number {\n        return this.j ? JsDictionary.size(this.j) : this.k!.size;\n    }\n\n    entries(): MapIterator<[Value<T>, V]> {\n        return this.j ? JsDictionary.entries(this.j) : this.k!.entries();\n    }\n\n    keys(): MapIterator<Value<T>> {\n        return this.j ? JsDictionary.keys(this.j) : this.k!.keys();\n    }\n\n    values(): MapIterator<V> {\n        return this.j ? JsDictionary.values(this.j) : this.k!.values();\n    }\n\n    [Symbol.iterator](): MapIterator<[Value<T>, V]> {\n        return this.entries();\n    }\n\n    get [Symbol.toStringTag](): string {\n        return 'DictionaryMap';\n    }\n\n    clone(): DictionaryMap<T, V> {\n        return new DictionaryMap<T, V>(this.j ? JsDictionary.clone(this.j) : this.k!.clone());\n    }\n\n    get value(): Dictionary<T, V> {\n        return this.j ?? this.k!;\n    }\n\n    simplify(): void {\n        if (!this.j) {\n            const r: JsDictionary<V> = {};\n            for (const [key, value] of this.k!.entries()) {\n                if (typeof key !== 'symbol') return;\n                r[key.description!] = value;\n            }\n            this.j = r;\n            this.k = void 0;\n        }\n    }\n\n    simplifiedValue(): Dictionary<T, V> {\n        this.simplify();\n        return this.value;\n    }\n\n    asJsDictionary(): JsDictionary<V> {\n        this.simplify();\n        if (!this.j) throw new Error(\"Cannot represent general dictionary as JsDictionary\");\n        return this.j;\n    }\n\n    asKeyedDictionary(): KeyedDictionary<T, Value<T>, V> {\n        return this.k ?? new KeyedDictionary<T, Value<T>, V>(JsDictionary.entries(this.j!));\n    }\n}\n\nexport namespace Dictionary {\n    export function isDictionary<T extends Embeddable = GenericEmbedded, V = Value<T>>(\n        x: any\n    ): x is Dictionary<T, V> {\n        if (typeof x !== 'object' || x === null) return false;\n        switch (x[DictionaryType]) {\n            case 'Dictionary': return true;\n            case void 0: return JsDictionary.isJsDictionary(x);\n            default: return false;\n        }\n    }\n\n    export function asMap<T extends Embeddable = GenericEmbedded, V = Value<T>>(\n        x: Dictionary<T, V>\n    ): DictionaryMap<T, V>;\n    export function asMap<T extends Embeddable = GenericEmbedded, V = Value<T>>(\n        x: any\n    ): DictionaryMap<T, V> | undefined;\n    export function asMap<T extends Embeddable = GenericEmbedded, V = Value<T>>(\n        x: any\n    ): DictionaryMap<T, V> | undefined {\n        return isDictionary<T, V>(x) ? new DictionaryMap(x) : void 0;\n    }\n\n    export function from<T extends Embeddable = GenericEmbedded, V = Value<T>>(\n        entries: [Value<T>, V][] | Iterable<[Value<T>, V]>,\n    ): Dictionary<T, V> {\n        return DictionaryMap.from(entries).simplifiedValue();\n    }\n\n    export function __from_preserve__<T extends Embeddable>(v: Value<T>): undefined | Dictionary<T> {\n        return Dictionary.isDictionary<T>(v) ? v : void 0;\n    }\n}\n\nexport function encodeDictionaryOn<T extends Embeddable, K, V>(\n    dict: Map<K, V>,\n    encoder: Encoder<T>,\n    encodeK: (k: K, encoder: Encoder<T>) => void,\n    encodeV: (v: V, encoder: Encoder<T>) => void,\n) {\n    if (encoder.canonical) {\n        const entries = Array.from(dict);\n        const canonicalEncoder = new Encoder<T>({\n            canonical: true,\n            embeddedEncode: encoder.embeddedEncode,\n        });\n        const pieces = entries.map<[Bytes, number]>(([k, _v], i) => {\n            encodeK(k, canonicalEncoder);\n            return [canonicalEncoder.contents(), i];\n        });\n        pieces.sort((a, b) => Bytes.compare(a[0], b[0]));\n        encoder.grouped(Tag.Dictionary, () => pieces.forEach(([_encodedKey, i]) => {\n            const [k, v] = entries[i];\n            encodeK(k, encoder);\n            encodeV(v, encoder);\n        }));\n    } else {\n        encoder.grouped(Tag.Dictionary, () => dict.forEach((v, k) => {\n            encodeK(k, encoder);\n            encodeV(v, encoder);\n        }));\n    }\n}\n\nexport function writeDictionaryOn<T extends Embeddable, K, V>(\n    dict: Map<K, V>,\n    w: Writer<T>,\n    writeK: (k: K, w: Writer<T>) => void,\n    writeV: (v: V, w: Writer<T>) => void,\n) {\n    w.state.writeSeq('{', '}', dict.entries(), ([k, v]) => {\n        writeK(k, w);\n        if (Annotated.isAnnotated<T>(v) && (annotations(v).length > 1) && w.state.isIndenting) {\n            w.state.pieces.push(':');\n            w.state.indentCount++;\n            w.state.writeIndent();\n            writeV(v, w);\n            w.state.indentCount--;\n        } else {\n            w.state.pieces.push(': ');\n            writeV(v, w);\n        }\n    });\n}\n\nexport class EncodableSet<T extends Embeddable, V> extends FlexSet<V>\n    implements Preservable<T>, PreserveWritable<T>\n{\n    constructor(\n        public readonly encodeV: (v: V) => CompoundKey<T>,\n        items?: Iterable<V>,\n    ) {\n        super((v: V) => canonicalString(encodeV(v), { embeddedEncode: identityEncoder }), items);\n    }\n\n    __preserve_on__(encoder: Encoder<T>) {\n        encodeSetOn(this, encoder, (v, e) => e.push(this.encodeV(v)));\n    }\n\n    __preserve_text_on__(w: Writer<T>) {\n        writeSetOn(this, w, (v, w) => w.push(this.encodeV(v)));\n    }\n\n    toString(): string {\n        return stringify(this);\n    }\n}\n\nexport class KeyedSet<T extends Embeddable = GenericEmbedded, K extends CompoundKey<T> = Value<T>>\n    extends EncodableSet<T, K>\n{\n    get [DictionaryType](): DictionaryType {\n        return 'Set';\n    }\n\n    static isKeyedSet<T extends Embeddable = GenericEmbedded, K extends CompoundKey<T> = Value<T>>(\n        x: any,\n    ): x is KeyedSet<T, K> {\n        return x?.[DictionaryType] === 'Set';\n    }\n\n    constructor(items?: Iterable<K>) {\n        super(k => k, items);\n    }\n\n    map<R extends Embeddable = GenericEmbedded, S extends Value<R> = Value<R>>(\n        f: (value: K) => S,\n    ): KeyedSet<R, S> {\n        return new KeyedSet(_iterMap(this[Symbol.iterator](), f));\n    }\n\n    filter(f: (value: K) => boolean): KeyedSet<T, K> {\n        const result = new KeyedSet<T, K>();\n        for (let k of this) if (f(k)) result.add(k);\n        return result;\n    }\n\n    clone(): KeyedSet<T, K> {\n        return new KeyedSet(this);\n    }\n\n    get [Symbol.toStringTag]() { return 'Set'; }\n}\n\nexport class Set<T extends Embeddable = GenericEmbedded> extends KeyedSet<T> {\n    static isSet<T extends Embeddable = GenericEmbedded>(x: any): x is Set<T> {\n        return x?.[DictionaryType] === 'Set';\n    }\n\n    static __from_preserve__<T extends Embeddable>(v: Value<T>): undefined | Set<T> {\n        return Set.isSet<T>(v) ? v : void 0;\n    }\n}\n\nexport function encodeSetOn<T extends Embeddable, V>(\n    s: IdentitySet<V>,\n    encoder: Encoder<T>,\n    encodeV: (v: V, encoder: Encoder<T>) => void,\n) {\n    if (encoder.canonical) {\n        const canonicalEncoder = new Encoder<T>({\n            canonical: true,\n            embeddedEncode: encoder.embeddedEncode,\n        });\n        const pieces = Array.from(s).map<[Bytes, V]>(v => {\n            encodeV(v, canonicalEncoder);\n            return [canonicalEncoder.contents(), v];\n        });\n        pieces.sort((a, b) => Bytes.compare(a[0], b[0]));\n        encoder.grouped(Tag.Set, () => pieces.forEach(([_e, v]) => encodeV(v, encoder)));\n    } else {\n        encoder.grouped(Tag.Set, () => s.forEach(v => encodeV(v, encoder)));\n    }\n}\n\nexport function writeSetOn<T extends Embeddable, V>(\n    s: IdentitySet<V>,\n    w: Writer<T>,\n    writeV: (v: V, w: Writer<T>) => void,\n) {\n    w.state.writeSeq('#{', '}', s, vv => writeV(vv, w));\n}\n","import type { Embeddable, GenericEmbedded } from \"./embedded.js\";\nimport type { Annotated } from \"./annotated.js\";\nimport { Dictionary } from \"./dictionary.js\";\n\nexport const IsPreservesAnnotated = Symbol.for('IsPreservesAnnotated');\n\nexport function isAnnotated<T extends Embeddable = GenericEmbedded>(x: any): x is Annotated<T>\n{\n    return !!x?.[IsPreservesAnnotated];\n}\n\nexport function is(a: any, b: any): boolean {\n    if (isAnnotated(a)) a = a.item;\n    if (isAnnotated(b)) b = b.item;\n    if (Object.is(a, b)) return true;\n    if (typeof a !== typeof b) {\n        if ((typeof a === 'number' && typeof b === 'bigint') ||\n            (typeof a === 'bigint' && typeof b === 'number')) {\n            return a == b;\n        }\n        return false;\n    }\n    if (typeof a === 'object') {\n        if (a === null || b === null) return false;\n        if ('equals' in a && typeof a.equals === 'function') return a.equals(b, is);\n        if (Array.isArray(a) && Array.isArray(b)) {\n            const isRecord = 'label' in a;\n            if (isRecord !== 'label' in b) return false;\n            if (isRecord && !is((a as any).label, (b as any).label)) return false;\n            if (a.length !== b.length) return false;\n            for (let i = 0; i < a.length; i++) if (!is(a[i], b[i])) return false;\n            return true;\n        }\n        {\n            const aMap = Dictionary.asMap(a);\n            const bMap = Dictionary.asMap(b);\n            if (!aMap || !bMap) return false;\n            if (aMap.size !== bMap.size) return false;\n            for (const k of aMap.keys()) {\n                if (!bMap.has(k)) return false;\n                if (!is(aMap.get(k), bMap.get(k))) return false;\n            }\n            return true;\n        }\n    }\n    return false;\n}\n","import { Tag } from \"./constants.js\";\nimport { is, isAnnotated, IsPreservesAnnotated } from \"./is.js\";\nimport { stringify } from \"./text.js\";\nimport type { Embeddable, GenericEmbedded } from \"./embedded.js\";\nimport type { Value } from \"./values.js\";\nimport type { Encoder, Preservable } from \"./encoder.js\";\nimport type { Writer, PreserveWritable } from \"./writer.js\";\n\nexport interface Position {\n    line?: number;\n    column?: number;\n    pos: number;\n    name?: string;\n}\n\nexport function newPosition(name?: string): Position {\n    return { line: 1, column: 0, pos: 0, name };\n}\n\nexport function updatePosition(p: Position, ch: string): boolean {\n    p.pos++;\n    if (p.line === void 0) {\n        return false;\n    } else {\n        let advancedLine = false;\n        switch (ch) {\n            case '\\t':\n                p.column = (p.column! + 8) & ~7;\n                break;\n            case '\\n':\n                p.column = 0;\n                p.line++;\n                advancedLine = true;\n                break;\n            case '\\r':\n                p.column = 0;\n                break;\n            default:\n                p.column!++;\n                break;\n        }\n        return advancedLine;\n    }\n}\n\nexport function formatPosition(p: Position | null | string): string {\n    if (p === null) {\n        return '<unknown>';\n    } else if (typeof p === 'string') {\n        return p;\n    } else {\n        return `${p.name ?? ''}:${p.line ?? ''}:${p.column ?? ''}:${p.pos}`;\n    }\n}\n\nexport class Annotated<T extends Embeddable = GenericEmbedded> implements Preservable<T>, PreserveWritable<T> {\n    readonly annotations: Array<Value<T>>;\n    readonly pos: Position | null;\n    readonly item: Value<T>;\n\n    constructor(item: Value<T>, pos?: Position) {\n        this.annotations = [];\n        this.pos = pos ?? null;\n        this.item = item;\n    }\n\n    __as_preserve__(): Value<T> {\n        return this;\n    }\n\n    static __from_preserve__<T extends Embeddable>(v: Value<T>): undefined | Annotated<T> {\n        return isAnnotated<T>(v) ? v : void 0;\n    }\n\n    __preserve_on__(encoder: Encoder<T>): void {\n        if (encoder.includeAnnotations) {\n            for (const a of this.annotations) {\n                encoder.state.emitbyte(Tag.Annotation);\n                encoder.push(a);\n            }\n        }\n        encoder.push(this.item);\n    }\n\n    __preserve_text_on__(w: Writer<T>): void {\n        if (w.includeAnnotations) {\n            const flat = this.annotations.length <= 1;\n            for (const a of this.annotations) {\n                w.state.pieces.push(\"@\");\n                w.push(a);\n                if (flat) {\n                    w.state.pieces.push(\" \");\n                } else {\n                    w.state.writeIndentSpace();\n                }\n            }\n        }\n        w.push(this.item);\n    }\n\n    toString(): string {\n        return stringify(this);\n    }\n\n    equals(other: any): boolean {\n        return is(this.item, Annotated.isAnnotated(other) ? other.item : other);\n    }\n\n    // hashCode(): number {\n    //     return hash(this.item);\n    // }\n\n    get [IsPreservesAnnotated](): boolean {\n        return true;\n    }\n\n    static isAnnotated<T extends Embeddable = GenericEmbedded>(x: any): x is Annotated<T> {\n        return isAnnotated(x);\n    }\n}\n\nexport function annotate<T extends Embeddable = GenericEmbedded>(\n    v0: Value<T>,\n    ...anns: Value<T>[]\n): Annotated<T> {\n    const v = Annotated.isAnnotated<T>(v0) ? v0 : new Annotated(v0);\n    anns.forEach((a) => v.annotations.push(a));\n    return v;\n}\n\nexport function annotations<T extends Embeddable = GenericEmbedded>(v: Value<T>): Array<Value<T>> {\n    return Annotated.isAnnotated<T>(v) ? v.annotations : [];\n}\n\nexport function position<T extends Embeddable = GenericEmbedded>(v: Value<T>): Position | null {\n    return Annotated.isAnnotated<T>(v) ? v.pos : null;\n}\n","import type { Compound, Value } from \"./values.js\";\nimport type { Embeddable, GenericEmbedded } from \"./embedded.js\";\nimport { Dictionary, Set } from \"./dictionary.js\";\n\nexport function isCompound<T extends Embeddable = GenericEmbedded>(x: Value<T>): x is Compound<T>\n{\n    return (Array.isArray(x) || Set.isSet(x) || Dictionary.isDictionary(x));\n}\n\nexport function isSequence<T extends Embeddable = GenericEmbedded>(x: Value<T>): x is Array<Value<T>> {\n    return (Array.isArray(x) && !('label' in x));\n}\n","import { genericEmbeddedTypeDecode, neverEmbeddedTypeDecode } from \"./reader.js\";\nimport { genericEmbeddedTypeEncode, neverEmbeddedTypeEncode } from \"./writer.js\";\nimport type { GenericEmbedded, EmbeddedType } from \"./embedded.js\";\n\nexport const genericEmbeddedType: EmbeddedType<GenericEmbedded> =\n    Object.assign({},\n                  genericEmbeddedTypeDecode,\n                  genericEmbeddedTypeEncode);\n\nexport const neverEmbeddedType: EmbeddedType<never> =\n    Object.assign({},\n                  neverEmbeddedTypeDecode,\n                  neverEmbeddedTypeEncode);\n","import { Record, Tuple } from \"./record.js\";\nimport { Bytes } from \"./bytes.js\";\nimport { Value } from \"./values.js\";\nimport { Set, Dictionary, DictionaryMap } from \"./dictionary.js\";\nimport { annotate, Annotated } from \"./annotated.js\";\nimport { Double, Float } from \"./float.js\";\nimport { Embeddable, isEmbedded } from \"./embedded.js\";\n\nexport enum ValueClass {\n    Boolean,\n    Double,\n    SignedInteger,\n    String,\n    ByteString,\n    Symbol,\n    Record,\n    Sequence,\n    Set,\n    Dictionary,\n    Embedded,\n    Annotated, // quasi-class\n}\n\nexport type Fold<T extends Embeddable, R = Value<T>> = (v: Value<T>) => R;\n\nexport interface FoldMethods<T extends Embeddable, R> {\n    boolean(b: boolean): R;\n    double(f: number): R;\n    integer(i: number | bigint): R;\n    string(s: string): R;\n    bytes(b: Bytes): R;\n    symbol(s: symbol): R;\n\n    record(r: Record<Value<T>, Tuple<Value<T>>, T>, k: Fold<T, R>): R;\n    array(a: Array<Value<T>>, k: Fold<T, R>): R;\n    set(s: Set<T>, k: Fold<T, R>): R;\n    dictionary(d: DictionaryMap<T>, k: Fold<T, R>): R;\n\n    annotated(a: Annotated<T>, k: Fold<T, R>): R;\n\n    embedded(t: T, k: Fold<T, R>): R;\n}\n\nexport class VoidFold<T extends Embeddable> implements FoldMethods<T, void> {\n    boolean(_b: boolean): void {}\n    double(_f: number): void {}\n    integer(_i: number | bigint): void {}\n    string(_s: string): void {}\n    bytes(_b: Bytes): void {}\n    symbol(_s: symbol): void {}\n    record(r: Record<Value<T>, Tuple<Value<T>>, T>, k: Fold<T, void>): void {\n        k(r.label);\n        r.forEach(k);\n    }\n    array(a: Value<T>[], k: Fold<T, void>): void { a.forEach(k); }\n    set(s: Set<T>, k: Fold<T, void>): void { s.forEach(k); }\n    dictionary(d: DictionaryMap<T>, k: Fold<T, void>): void {\n        d.forEach((value, key) => { k(key); k(value); });\n    }\n    annotated(a: Annotated<T>, k: Fold<T, void>): void { k(a.item); a.annotations.forEach(k); }\n    embedded(_t: T, _k: Fold<T, void>): void {}\n}\n\nexport class ForEachEmbedded<T extends Embeddable> extends VoidFold<T> {\n    constructor(public readonly f: (t: T, k: Fold<T, void>) => void) { super(); }\n    embedded(t: T, k: Fold<T, void>): void { this.f(t, k); }\n}\n\nexport abstract class ValueFold<T extends Embeddable, R extends Embeddable = T> implements FoldMethods<T, Value<R>> {\n    boolean(b: boolean): Value<R> {\n        return b;\n    }\n    double(f: number): Value<R> {\n        return Double(f);\n    }\n    integer(i: number | bigint): Value<R> {\n        return i;\n    }\n    string(s: string): Value<R> {\n        return s;\n    }\n    bytes(b: Bytes): Value<R> {\n        return b;\n    }\n    symbol(s: symbol): Value<R> {\n        return s;\n    }\n    record(r: Record<Value<T>, Tuple<Value<T>>, T>, k: Fold<T, Value<R>>): Value<R> {\n        return Record(k(r.label), r.map(k));\n    }\n    array(a: Value<T>[], k: Fold<T, Value<R>>): Value<R> {\n        return a.map(k);\n    }\n    set(s: Set<T>, k: Fold<T, Value<R>>): Value<R> {\n        return s.map(k);\n    }\n    dictionary(d: DictionaryMap<T>, k: Fold<T, Value<R>>): Value<R> {\n        const result = new DictionaryMap<R>();\n        d.forEach((value, key) => result.set(k(key), k(value)));\n        return result.simplifiedValue();\n    }\n    annotated(a: Annotated<T>, k: Fold<T, Value<R>>): Value<R> {\n        return annotate(k(a.item), ...a.annotations.map(k));\n    }\n    abstract embedded(t: T, k: Fold<T, Value<R>>): Value<R>;\n}\n\nexport class IdentityFold<T extends Embeddable> extends ValueFold<T, T> {\n    embedded(t: T, _k: Fold<T, Value<T>>): Value<T> {\n        return t;\n    }\n}\n\nexport class MapFold<T extends Embeddable, R extends Embeddable> extends ValueFold<T, R> {\n    readonly f: (t: T) => Value<R>;\n\n    constructor(f: (t: T) => Value<R>) {\n        super();\n        this.f = f;\n    }\n\n    embedded(t: T, _k: Fold<T, Value<R>>): Value<R> {\n        return this.f(t);\n    }\n}\n\nexport function valueClass<T extends Embeddable>(v: Value<T>): ValueClass {\n    switch (typeof v) {\n        case 'boolean':\n            return ValueClass.Boolean;\n        case 'number':\n            if (!Number.isInteger(v)) {\n                throw new Error(\"Non-integer number in Preserves valueClass; missing Float wrapper?\");\n            } else {\n                return ValueClass.SignedInteger;\n            }\n        case 'bigint':\n            return ValueClass.SignedInteger;\n        case 'string':\n            return ValueClass.String;\n        case 'symbol':\n            return ValueClass.Symbol;\n        case 'object':\n            if (Record.isRecord<Value<T>, Tuple<Value<T>>, T>(v)) {\n                return ValueClass.Record;\n            } else if (Array.isArray(v)) {\n                return ValueClass.Sequence;\n            } else if (Set.isSet<T>(v)) {\n                return ValueClass.Set;\n            } else if (Dictionary.isDictionary<T>(v)) {\n                return ValueClass.Dictionary;\n            } else if (Annotated.isAnnotated<T>(v)) {\n                return ValueClass.Annotated;\n            } else if (Bytes.isBytes(v)) {\n                return ValueClass.ByteString;\n            } else if (Float.isDouble(v)) {\n                return ValueClass.Double;\n            } else {\n                return ((_v: T) => ValueClass.Embedded)(v);\n            }\n        default:\n            ((_v: never): never => { throw new Error(\"Internal error\"); })(v);\n    }\n}\n\nexport const IDENTITY_FOLD = new IdentityFold<any>();\n\nexport function fold<T extends Embeddable, R>(v: Value<T>, o: FoldMethods<T, R>): R {\n    const walk = (v: Value<T>): R => {\n        switch (typeof v) {\n            case 'boolean':\n                return o.boolean(v);\n            case 'number':\n                if (!Number.isInteger(v)) {\n                    // TODO: Is this convenience warranted?\n                    return o.double(v);\n                } else {\n                    return o.integer(v);\n                }\n            case 'bigint':\n                return o.integer(v);\n            case 'string':\n                return o.string(v);\n            case 'symbol':\n                return o.symbol(v);\n            case 'object':\n                if (Record.isRecord<Value<T>, Tuple<Value<T>>, T>(v)) {\n                    return o.record(v, walk);\n                } else if (Array.isArray(v)) {\n                    return o.array(v, walk);\n                } else if (Set.isSet<T>(v)) {\n                    return o.set(v, walk);\n                } else if (isEmbedded(v)) {\n                    return o.embedded(v, walk);\n                } else if (Annotated.isAnnotated<T>(v)) {\n                    return o.annotated(v, walk);\n                } else if (Bytes.isBytes(v)) {\n                    return o.bytes(v);\n                } else if (Float.isDouble(v)) {\n                    return o.double(v.value);\n                } else if (Dictionary.isDictionary<T>(v)) {\n                    return o.dictionary(new DictionaryMap(v), walk);\n                }\n            default:\n                ((_v: never): never => { throw new Error(\"Internal error\"); })(v);\n        }\n    };\n    return walk(v);\n}\n\nexport function mapEmbeddeds<T extends Embeddable, R extends Embeddable>(\n    v: Value<T>,\n    f: (t: T) => Value<R>,\n): Value<R>\n{\n    return fold(v, new MapFold(f));\n}\n\nexport function forEachEmbedded<T extends Embeddable>(\n    v: Value<T>,\n    f: (t: T, k: Fold<T, void>) => void,\n): void {\n    return fold(v, new ForEachEmbedded(f));\n}\n","import { Record, Tuple } from \"./record.js\";\nimport { Bytes } from \"./bytes.js\";\nimport { fold } from \"./fold.js\";\nimport { is } from \"./is.js\";\nimport { Value } from \"./values.js\";\nimport { Set, Dictionary, DictionaryMap } from \"./dictionary.js\";\nimport { Annotated } from \"./annotated.js\";\nimport { unannotate } from \"./strip.js\";\nimport { isEmbedded } from \"./embedded.js\";\nimport { isCompound } from \"./compound.js\";\nimport type { Embeddable } from \"./embedded.js\";\n\nexport function merge<T extends Embeddable>(\n    mergeEmbeddeds: (a: T, b: T) => T | undefined,\n    item0: Value<T>,\n    ... items: Array<Value<T>>): Value<T>\n{\n    function die(): never {\n        throw new Error(\"Cannot merge items\");\n    }\n\n    function walk(a: Value<T>, b: Value<T>): Value<T> {\n        if (a === b) {\n            // Shortcut for merges of trivially identical values.\n            return a;\n        }\n        if (!isCompound(a) && !isCompound(b)) {\n            // Don't do expensive recursive comparisons for compounds.\n            if (is(a, b)) {\n                // Shortcut for merges of marginally less trivially identical values.\n                return a;\n            }\n        }\n        return fold<T, Value<T>>(a, {\n            boolean: die,\n            double(_f: number) { return is(a, b) ? a : die(); },\n            integer: die,\n            string: die,\n            bytes(_b: Bytes) { return is(a, b) ? a : die(); },\n            symbol: die,\n\n            record(r: Record<Value<T>, Tuple<Value<T>>, T>) {\n                if (!Record.isRecord<Value<T>, Tuple<Value<T>>, T>(b)) die();\n                return Record(walk(r.label, b.label), walkMany(r, b));\n            },\n\n            array(a: Array<Value<T>>) {\n                if (!Array.isArray(b) || Record.isRecord(b)) die();\n                return walkMany(a, b);\n            },\n\n            set(_s: Set<T>) { die(); },\n\n            dictionary(aMap: DictionaryMap<T>) {\n                const bMap = Dictionary.asMap<T>(b);\n                if (bMap === void 0) die();\n\n                const r = new DictionaryMap<T>();\n                aMap.forEach((av,ak) => {\n                    const bv = bMap.get(ak);\n                    r.set(ak, bv === void 0 ? av : walk(av, bv));\n                });\n                bMap.forEach((bv, bk) => {\n                    if (!aMap.has(bk)) r.set(bk, bv);\n                });\n                return r.simplifiedValue();\n            },\n\n            annotated(a: Annotated<T>) {\n                return walk(a, unannotate(b));\n            },\n\n            embedded(t: T) {\n                if (!isEmbedded<T>(b)) die();\n                const r = mergeEmbeddeds(t, b);\n                if (r === void 0) die();\n                return r;\n            },\n        });\n    }\n\n    function walkMany(a: Array<Value<T>>, b: Array<Value<T>>): Array<Value<T>> {\n        if (a.length <= b.length) {\n            return b.map((bb, i) => (i < a.length) ? walk(a[i], bb) : bb);\n        } else {\n            return a.map((aa, i) => (i < b.length) ? walk(aa, b[i]) : aa);\n        }\n    }\n\n    return items.reduce(walk, item0);\n}\n","import { is, isAnnotated } from './is.js';\nimport { Bytes } from './bytes.js';\nimport { Set, Dictionary } from './dictionary.js';\nimport { isEmbedded } from './embedded.js';\nimport { Float } from './float.js';\nimport { Value } from './values.js';\nimport { Record } from './record.js';\nimport type { Embeddable } from './embedded.js';\n\nexport function typeCode<T extends Embeddable>(v: Value<T>): number {\n    if (isAnnotated<T>(v)) v = v.item;\n    switch (typeof v) {\n        case 'boolean':\n            return 0;\n        case 'number':\n        case 'bigint':\n            return 3;\n        case 'string':\n            return 4;\n        case 'symbol':\n            return 6;\n        case 'object':\n            if (Float.isFloat(v)) return 2; // 1 was for single-precision floats\n            if (Bytes.isBytes(v)) return 5;\n            if (Array.isArray(v)) {\n                return ('label' in v) ? 7 : 8;\n            }\n            if (Set.isSet<T>(v)) return 9;\n            if (Dictionary.isDictionary<T>(v)) return 10;\n            if (isEmbedded(v)) return 11;\n            /* fall through */\n        default:\n            throw new Error(\"Invalid Value<T> in typeCode\");\n    }\n}\n\nexport function compare<T extends Embeddable>(\n    a: Value<T>,\n    b: Value<T>,\n    compare_embedded: (a: T, b: T) => number = (a, b) => is(a, b) ? 0 : a < b ? -1 : 1,\n): number {\n    function cmp(a: Value<T>, b: Value<T>): number {\n        if (isAnnotated<T>(a)) a = a.item;\n        if (isAnnotated<T>(b)) b = b.item;\n        const ta = typeCode(a);\n        const tb = typeCode(b);\n        if (ta < tb) return -1;\n        if (ta > tb) return 1;\n        switch (ta) {\n            case 0:\n            case 3:\n            case 4: {\n                const va = a as any;\n                const vb = b as any;\n                return va < vb ? -1 : va > vb ? 1 : 0;\n            }\n            // case 1: // was single-precision\n            case 2: {\n                const va = (a as Float).value;\n                const vb = (b as Float).value;\n                return va < vb ? -1 : va > vb ? 1 : 0;\n            }\n            case 5:\n                return Bytes.compare(a as Bytes, b as Bytes);\n            case 6: {\n                const va = (a as symbol).description!;\n                const vb = (b as symbol).description!;\n                return va < vb ? -1 : va > vb ? 1 : 0;\n            }\n            case 7: {\n                const lr = cmp((a as Record<Value<T>, Value<T>[], T>).label,\n                               (b as Record<Value<T>, Value<T>[], T>).label);\n                if (lr !== 0) return lr;\n                /* fall through */\n            }\n            case 8: {\n                const va = a as Value<T>[];\n                const vb = b as Value<T>[];\n                const l = Math.min(va.length, vb.length)\n                for (let i = 0; i < l; i++) {\n                    const c = cmp(va[i], vb[i]);\n                    if (c !== 0) return c;\n                }\n                return va.length < vb.length ? -1 : va.length > vb.length ? 1 : 0;\n            }\n            case 9: {\n                const va = Array.from(a as Set<T>).sort(cmp);\n                const vb = Array.from(b as Set<T>).sort(cmp);\n                return cmp(va, vb);\n            }\n            case 10: {\n                const va = Array.from(Dictionary.asMap<T>(a)!.entries()).sort(cmp);\n                const vb = Array.from(Dictionary.asMap<T>(b)!.entries()).sort(cmp);\n                return cmp(va, vb);\n            }\n            case 11:\n                return compare_embedded(a as T, b as T);\n            default:\n                throw new Error(\"Invalid typeCode: \" + ta);\n        }\n    }\n    return cmp(a, b);\n}\n","// Preserves-Expressions. https://preserves.dev/preserves-expressions.html\n\nimport { ReaderBase } from './reader.js';\nimport { Atom, Value } from './values.js';\nimport { Position, annotate, formatPosition } from './annotated.js';\nimport { Record as VRecord } from './record.js';\nimport { Embeddable, GenericEmbedded } from './embedded.js';\nimport { fromJS } from './fromjs.js';\nimport { DictionaryMap, Set as VSet } from './dictionary.js';\n\nexport type Expr = SimpleExpr | Punct;\nexport type SimpleExpr = Atom | Compound | Embedded;\n\nexport type Positioned<I> = { position: Position, item: I, annotations?: Annotations };\n\nexport class Punct {\n    constructor(public text: string) {}\n    __as_preserve__(): Value { return VRecord(Symbol.for('p'), [Symbol.for(this.text)]); }\n\n    isComma(): boolean { return this.text === ','; }\n    static isComma(v: Expr): boolean { return v instanceof Punct && v.isComma(); }\n\n    isColon(n = 1): boolean { return this.text === ':'.repeat(n); }\n    static isColon(v: Expr, n = 1): boolean { return v instanceof Punct && v.isColon(n); }\n}\n\nexport class Embedded {\n    constructor(public expr: SimpleExpr, public annotations?: Annotations) {}\n    __as_preserve__(): Value {\n        const v = fromJS(this.expr);\n        return new GenericEmbedded(this.annotations?.wrap(v) ?? v);\n    }\n}\n\nexport class BaseCompound<I> {\n    positions: Position[] = [];\n    exprs: I[] = [];\n    annotations?: Annotations[] = void 0; // sparse array when non-void\n\n    get(i: number): Positioned<I> | undefined {\n        if (i >= this.exprs.length) return void 0;\n        return {\n            position: this.positions[i],\n            item: this.exprs[i],\n            annotations: this.annotations && this.annotations[i],\n        };\n    }\n\n    push(p: Positioned<I>): true;\n    push(expr: I, position: Position, annotations?: Annotations): true;\n    push(v: Positioned<I> | I, position?: Position, annotations?: Annotations) {\n        if (position === void 0) {\n            const p = v as Positioned<I>;\n            if (p.annotations) this._ensureAnnotations()[this.exprs.length] = p.annotations;\n            this.positions.push(p.position);\n            this.exprs.push(p.item);\n        } else {\n            if (annotations) this._ensureAnnotations()[this.exprs.length] = annotations;\n            this.positions.push(position);\n            this.exprs.push(v as I);\n        }\n        return true;\n    }\n\n    _ensureAnnotations(): Annotations[] {\n        if (this.annotations === void 0) this.annotations = [];\n        return this.annotations;\n    }\n\n    _annotationsAt(index: number): Annotations {\n        return this._ensureAnnotations()[index] ??= new Annotations();\n    }\n\n    preservesValues(): Value[] {\n        return this.exprs.map((p, i) => {\n            const v = fromJS(p);\n            if (this.annotations?.[i] !== void 0) {\n                return this.annotations[i].wrap(v);\n            } else {\n                return v;\n            }\n        });\n    }\n\n    __as_preserve__(): Value {\n        return this.preservesValues();\n    }\n\n    map<R>(f: (item: Positioned<I>, index: number) => R, offset = 0): R[] {\n        const result: R[] = [];\n        for (let i = offset; i < this.exprs.length; i++) {\n            result.push(f(this.get(i)!, i));\n        }\n        return result;\n    }\n\n    [Symbol.iterator](): IterableIterator<Positioned<I>> {\n        let c = this;\n        let i = 0;\n        return {\n            next(): IteratorResult<Positioned<I>> {\n                if (i < c.exprs.length) {\n                    return { done: false, value: c.get(i++)! };\n                } else {\n                    return { done: true, value: void 0 };\n                }\n            },\n            [Symbol.iterator]() { return c[Symbol.iterator](); }\n        };\n    }\n}\n\nexport class Document extends BaseCompound<Expr> {}\n\nexport class Annotations extends BaseCompound<SimpleExpr> {\n    wrap(v: Value): Value {\n        return annotate(v, ... this.preservesValues());\n    }\n}\n\nexport type CompoundVariant = 'sequence' | 'record' | 'block' | 'group' | 'set';\n\nexport abstract class Compound extends BaseCompound<Expr> {\n    abstract get variant(): CompoundVariant;\n    __as_preserve__(): Value {\n        const vs = this.preservesValues();\n        switch (this.variant) {\n            case 'sequence': return vs;\n            case 'record': return VRecord(Symbol.for('r'), vs);\n            case 'block': return VRecord(Symbol.for('b'), vs);\n            case 'group': return VRecord(Symbol.for('g'), vs);\n            case 'set': return VRecord(Symbol.for('s'), vs);\n        }\n    }\n}\n\nexport class Sequence extends Compound {\n    get variant(): CompoundVariant { return 'sequence'; }\n}\n\nexport class Record extends Compound {\n    get variant(): CompoundVariant { return 'record'; }\n}\n\nexport class Block extends Compound {\n    get variant(): CompoundVariant { return 'block'; }\n}\n\nexport class Group extends Compound {\n    get variant(): CompoundVariant { return 'group'; }\n}\n\nexport class Set extends Compound {\n    get variant(): CompoundVariant { return 'set'; }\n}\n\nexport class Reader extends ReaderBase<never> {\n    nextDocument(howMany: 'all' | 'one' = 'all'): Document {\n        const doc = new Document();\n        this.readExpr(doc);\n        if (howMany === 'all') {\n            while (this.readExpr(doc)) {}\n        }\n        return doc;\n    }\n\n    readCompound(c: Compound, terminator: string): Compound {\n        while (this.readExpr(c, terminator)) {}\n        return c;\n    }\n\n    readSimpleExpr(c: BaseCompound<SimpleExpr>): boolean {\n        return this._readInto(c, false);\n    }\n\n    readExpr(c: BaseCompound<Expr>, terminator: string | null = null): boolean {\n        return this._readInto(c as BaseCompound<SimpleExpr> /* yuck */, true, terminator);\n    }\n\n    _checkTerminator(actual: string, expected: string | null, startPos: Position): false {\n        if (actual === expected) return false;\n        this.state.error('Unexpected ' + actual, startPos);\n    }\n\n    _readInto(c: BaseCompound<SimpleExpr>, acceptPunct: boolean, terminator: string | null = null): boolean {\n        while (true) {\n            this.state.skipws();\n            if (this.state.atEnd() && terminator === null) return false;\n            const startPos = this.state.copyPos();\n            const ch = this.state.nextchar();\n            switch (ch) {\n                case '\"':\n                    return c.push(this.state.readString('\"'), startPos);\n                case \"'\":\n                    return c.push(Symbol.for(this.state.readString(\"'\")), startPos);\n                case ';':\n                    if (acceptPunct) {\n                        return (c as BaseCompound<Expr>).push(new Punct(';'), startPos);\n                    } else {\n                        this.state.error('Semicolon is not permitted at this location', startPos);\n                    }\n                case '@':\n                    if (!this.readSimpleExpr(c._annotationsAt(c.exprs.length))) {\n                        this.state.error('Missing annotation', startPos);\n                    }\n                    continue;\n                case ':': {\n                    let colons: string = ch;\n                    while (!this.state.atEnd() && this.state.peek() === ':') {\n                        colons = colons + ':';\n                        this.state.advance();\n                    }\n                    if (acceptPunct) {\n                        return (c as BaseCompound<Expr>).push(new Punct(colons), startPos);\n                    } else {\n                        this.state.error('Colons are not permitted at this location', startPos);\n                    }\n                }\n                case '#': {\n                    const ch = this.state.nextchar();\n                    switch (ch) {\n                        case ' ': case '\\t': {\n                            const here = this.state.copyPos();\n                            c._annotationsAt(c.exprs.length).push(this.state.readCommentLine(), here);\n                            continue;\n                        }\n                        case '\\n': case '\\r': {\n                            const here = this.state.copyPos();\n                            c._annotationsAt(c.exprs.length).push('', here);\n                            continue;\n                        }\n                        case '!': {\n                            const here = this.state.copyPos();\n                            const r = new Record();\n                            r.push(Symbol.for('interpreter'), here);\n                            r.push(this.state.readCommentLine(), here);\n                            c._annotationsAt(c.exprs.length).push(r, here);\n                            continue;\n                        }\n                        case 'f': this.state.requireDelimiter('#f'); return c.push(false, startPos);\n                        case 't': this.state.requireDelimiter('#t'); return c.push(true, startPos);\n                        case '{': return c.push(this.readCompound(new Set(), '}'), startPos);\n                        case '\"': return c.push(this.state.readLiteralBinary(), startPos);\n                        case 'x': switch (this.state.nextchar()) {\n                            case '\"': return c.push(this.state.readHexBinary(), startPos);\n                            case 'd': return c.push(this.state.readHexFloat(), startPos);\n                            default: this.state.error('Invalid #x syntax', startPos);\n                        }\n                        case '[': return c.push(this.state.readBase64Binary(), startPos);\n                        case ':': {\n                            const r = new BaseCompound<SimpleExpr>();\n                            if (!this.readSimpleExpr(r)) return false;\n                            const e = new Embedded(r.exprs[0], r.annotations && r.annotations[0]);\n                            return c.push(e, startPos);\n                        }\n                        default:\n                            this.state.error(`Invalid # syntax: ${ch}`, startPos);\n                    }\n                }\n                case '(': return c.push(this.readCompound(new Group(), ')'), startPos);\n                case '<': return c.push(this.readCompound(new Record(), '>'), startPos);\n                case '[': return c.push(this.readCompound(new Sequence(), ']'), startPos);\n                case '{': return c.push(this.readCompound(new Block(), '}'), startPos);\n                case ')': return this._checkTerminator(ch, terminator, startPos);\n                case '>': return this._checkTerminator(ch, terminator, startPos);\n                case ']': return this._checkTerminator(ch, terminator, startPos);\n                case '}': return this._checkTerminator(ch, terminator, startPos);\n                case ',':\n                    if (acceptPunct) {\n                        return (c as BaseCompound<Expr>).push(new Punct(','), startPos);\n                    } else {\n                        this.state.error('Comma is not permitted at this location', startPos);\n                    }\n                default:\n                    return c.push(this.state.readRawSymbolOrNumber(ch), startPos);\n            }\n        }\n    }\n}\n\nexport interface AsPreservesOptions<T extends Embeddable> {\n    onGroup?: (g: Positioned<Group>) => Value<T>;\n    onEmbedded?: (e: Positioned<Expr>, walk: (p: Positioned<Expr>) => Value<T>) => Value<T>;\n    error?: (tag: string, position: Position) => Value<T>;\n}\n\nexport function asPreserves<T extends Embeddable>(\n    p: Positioned<Expr>,\n    options: AsPreservesOptions<T> = {},\n): Value<T> {\n    const error = options.error ?? ((tag, position) => {\n        throw new Error(formatPosition(position) + \": \" + tag);\n    });\n\n    function nonCommas(p: Compound): Positioned<Expr>[] {\n        return Array.from(p).filter(p => !Punct.isComma(p.item));\n    }\n\n    function walk(p: Positioned<Expr>): Value<T> {\n        if (p.item instanceof Punct) {\n            return error('invalid-punctuation', p.position);\n        } else if (p.item instanceof Embedded) {\n            if (options.onEmbedded) {\n                return options.onEmbedded({ position: p.position, item: p.item.expr }, walk);\n            } else {\n                return error('unexpected-embedded', p.position);\n            }\n        } else if (p.item instanceof Compound) {\n            switch (p.item.variant) {\n                case 'sequence':\n                    return nonCommas(p.item).map(walk);\n                case 'record': {\n                    const vs = nonCommas(p.item).map(walk);\n                    if (vs.length < 1) {\n                        return error('invalid-record', p.position);\n                    }\n                    const r = vs.slice(1) as unknown as VRecord<Value<T>, Value<T>[], T>;\n                    r.label = vs[0];\n                    return r;\n                }\n                case 'block': {\n                    const d = new DictionaryMap<T>();\n                    const vs = nonCommas(p.item);\n                    if ((vs.length % 3) !== 0) {\n                        return error('invalid-dictionary', p.position);\n                    }\n                    for (let i = 0; i < vs.length; i += 3) {\n                        if (!Punct.isColon(vs[i + 1].item)) {\n                            return error('missing-colon', vs[i + 1].position);\n                        }\n                        const k = walk(vs[i]);\n                        const v = walk(vs[i + 2]);\n                        d.set(k, v);\n                    }\n                    return d.simplifiedValue();\n                }\n                case 'group': {\n                    if (options.onGroup) {\n                        return options.onGroup(p as Positioned<Group>);\n                    } else {\n                        return error('unexpected-group', p.position);\n                    }\n                }\n                case 'set':\n                    return new VSet(nonCommas(p.item).map(walk));\n            }\n        } else {\n            return p.item;\n        }\n    }\n\n    return walk(p);\n}\n","export * from './runtime.js';\nexport * as Constants from './constants.js';\nexport * as Pexpr from './pexpr.js';\n\nexport function preserves_spec_version(): string {\n    return \"0.996.2\";\n}\n\nimport type { Embeddable } from './embedded.js';\nimport type { Value } from './values.js';\n\ndeclare global {\n    interface ArrayConstructor {\n        __from_preserve__<T extends Embeddable>(v: Value<T>): undefined | Array<Value<T>>;\n    }\n}\n\nArray.__from_preserve__ = <T extends Embeddable>(v: Value<T>) => {\n    return Array.isArray(v) ? v : void 0;\n};\n\nconst _Array = Array;\ntype _Array<T> = Array<T>;\nexport { _Array as Array };\n\nconst _Symbol = Symbol;\ntype _Symbol = Symbol;\nexport { _Symbol as Symbol };\n"],"mappings":"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","names":["constants_exports","__export","Tag","BASE64_DEC","c","i","decodeBase64","s","bs","j","v1","v2","v3","v4","v","BASE64_ENC","encodeBase64","buffer","bitcount","b","IsEmbedded","isEmbedded","v","Embedded","value","other","GenericEmbedded","generic","is","Record","label","fields","isRecord","x","constructorInfo","r","isClassOf","ci","v","is","makeConstructor","fieldNames","ctor","name","i","ErrorType","PreservesCodecError","DecodeError","message","pos","EncodeError","irritant","ShortPacket","unannotate","v","Annotated","peel","strip","depth","step","nextDepth","walk","Record","Set","Dictionary","result","DictionaryMap","val","key","FloatType","_Float","value","w","other","x","Float","floatValue","f","floatlikeString","s","DoubleFloat","_DoubleFloat","bs","dataview","v","encoder","Bytes","Double","asLiteral","actual","expected","is","DecoderState","packet","options","underlying","_a","data","Bytes","m","body","short","start","e","ShortPacket","n","v","highByte","acc","bs","hex","d","hexDigit","Annotated","a","Decoder","_Decoder","packet_or_state","options_or_embeddedDecode","neverEmbeddedTypeDecode","result","vs","DictionaryMap","DecodeError","i","stringify","tag","DoubleFloat","Record","s","Set","embeddedDecode","f","reset","decode","decodeWithAnnotations","__spreadProps","__spreadValues","MAX_SAFE_INTEGERn","MIN_SAFE_INTEGERn","NUMBER_RE","_ReaderState","buffer","options","newPosition","__spreadValues","message","pos","DecodeError","_a","data","ShortPacket","n","updatePosition","skipCommas","c","isSpace","x1","unhexDigit","x2","x3","x4","acc","Bytes","bs","DoubleFloat","prefix","ch","m","v","Double","xform","finish","terminator","hexescape","hex","x","xs","n1","n2","ReaderState","genericEmbeddedTypeDecode","s","GenericEmbedded","Decoder","strip","neverEmbeddedTypeDecode","_s","_v","_options","ReaderBase","state_or_buffer","embeddedType_or_options","Reader","_Reader","startPos","Annotated","u","unwrapped","Record","label","fields","update","DictionaryMap","k","stringify","Set","isPreserveWritable","v","isIterable","genericEmbeddedTypeEncode","s","Encoder","neverEmbeddedTypeEncode","_s","_v","WriterState","options","_a","i","c","k","quoteChar","buf","opener","closer","vs","appender","iter","first_i","first_v","second_i","bs","_b","limit","proportion","count","sampleSize","b","encodeBase64","seenCompound","isAnnotated","Writer","_Writer","state_or_options","embeddedWrite","w","NUMBER_RE","Record","flat","vv","isEmbedded","writeDictionaryOn","DictionaryMap","_","fromJS","x","fromJS_options","options","walk","_a","_b","converted","Record","Bytes","d","KeyedDictionary","v","k","Set","s","isEmbedded","r","parse","buffer","options","Reader","parseAll","stringifyEmbeddedWrite","s","v","GenericEmbedded","Writer","j","fromJS","isEmbedded","e","stringify","x","_a","__spreadValues","preserves","pieces","values","result","textEncoder","textDecoder","IsPreservesBytes","_Bytes","maybeByteIterable","x","bytes","s","result","i","n","decodeBase64","target","len","unhexDigit","io","b","index","other","va","vb","v","hash","a","bs","underlying","encodeBase64","digit","hexDigit","nibbles","encoder","w","stringify","bss","Bytes","asciiCode","errorClass","dataview","k","args","isPreservable","v","asLatin1","bs","isIterable","IdentityEmbeddedTypeEncode","id","s","Encoder","EncoderState","options","_a","resultLength","Bytes","chunks","size","amount","b","count","view","bytecount","enc","n","x","hex","unhexDigit","negatedHex","tag","_Encoder","state_or_options","embeddedEncode","neverEmbeddedTypeEncode","body","f","key","EncodeError","Record","i","isEmbedded","encodeDictionaryOn","DictionaryMap","k","e","encode","canonicalEncode","__spreadProps","__spreadValues","canonicalString","encodeWithAnnotations","IdentityMap","IdentitySet","IsMap","IsSet","x","_iterMap","i","f","_f","v","_a","_b","e","FlexMap","c","items","k","defaultValue","initializer","ks","thisArg","_v","_k","other","eqv","v1","v2","key","oldValue","newValue","FlexSet","_FlexSet","vs","result","JsDictionary","isJsDictionary","x","isEmbedded","from","entries","r","key","value","clear","j","remove","result","has","forEach","callbackfn","val","get","set","size","_iterMap","k","v","keys","values","clone","equals","j1","j2","eqv","v1","v2","DictionaryType","identityEncoder","IdentityEmbeddedTypeEncode","EncodableDictionary","FlexMap","encodeK","encodeV","items","k","canonicalString","encoder","encodeDictionaryOn","e","v","w","writeDictionaryOn","stringify","KeyedDictionary","_KeyedDictionary","x","options","key","value","fromJS_options","otherAny","eqv","v1","v2","otherMap","Dictionary","DictionaryMap","_DictionaryMap","IsMap","input","entries","r","JsDictionary","unannotate","callbackfn","thisArg","_a","isDictionary","asMap","from","__from_preserve__","dict","canonicalEncoder","Encoder","pieces","_v","i","b","Bytes","_encodedKey","writeK","writeV","Annotated","annotations","EncodableSet","FlexSet","encodeSetOn","writeSetOn","KeyedSet","_KeyedSet","f","_iterMap","result","Set","_Set","s","a","_e","vv","IsPreservesAnnotated","isAnnotated","x","is","a","b","isRecord","i","aMap","Dictionary","bMap","k","newPosition","name","updatePosition","p","ch","advancedLine","formatPosition","_a","_b","_c","Annotated","_Annotated","item","pos","v","isAnnotated","encoder","a","w","flat","stringify","other","is","IsPreservesAnnotated","x","annotate","v0","anns","annotations","position","isCompound","x","Set","Dictionary","isSequence","genericEmbeddedType","genericEmbeddedTypeDecode","genericEmbeddedTypeEncode","neverEmbeddedType","neverEmbeddedTypeDecode","neverEmbeddedTypeEncode","ValueClass","VoidFold","_b","_f","_i","_s","r","k","a","s","d","value","key","_t","_k","ForEachEmbedded","f","ValueFold","b","Double","i","Record","result","DictionaryMap","annotate","IdentityFold","t","MapFold","valueClass","v","Set","Dictionary","Annotated","Bytes","Float","_v","IDENTITY_FOLD","fold","o","walk","isEmbedded","mapEmbeddeds","forEachEmbedded","merge","mergeEmbeddeds","item0","items","die","walk","a","b","isCompound","is","fold","_f","_b","r","Record","walkMany","_s","aMap","bMap","Dictionary","DictionaryMap","av","ak","bv","bk","unannotate","t","isEmbedded","bb","i","aa","typeCode","v","isAnnotated","Float","Bytes","Set","Dictionary","isEmbedded","compare","a","b","compare_embedded","is","cmp","ta","tb","va","vb","lr","l","i","c","pexpr_exports","__export","Annotations","BaseCompound","Block","Compound","Document","Embedded","Group","Punct","Reader","Record","Sequence","Set","asPreserves","Punct","_Punct","text","Record","v","n","Embedded","expr","annotations","_a","_b","fromJS","GenericEmbedded","BaseCompound","i","position","p","index","Annotations","f","offset","result","c","Document","annotate","Compound","vs","Sequence","Block","Group","Set","Reader","ReaderBase","howMany","doc","terminator","actual","expected","startPos","acceptPunct","ch","colons","here","r","e","asPreserves","options","error","tag","formatPosition","nonCommas","walk","d","DictionaryMap","preserves_spec_version","v","_Array","_Symbol"]}