{"version":3,"sources":["../src/index.ts","../src/seal.ts"],"sourcesContent":["/// SPDX-License-Identifier: GPL-3.0-or-later\n/// SPDX-FileCopyrightText: Copyright © 2016-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nimport {\n    AnyValue,\n    Assertion,\n    Bytes,\n    Dataspace,\n    IdentitySet,\n    Record,\n    Ref,\n    Relay,\n    Schemas,\n    Supervisor,\n    Turn,\n    assertionFacetObserver,\n    canonicalEncode,\n    decode,\n    fromJS,\n    isEmbedded,\n    parse,\n    stringify,\n    underlying,\n    Embeddable,\n    SaltyCrypto,\n    Question,\n    Answer,\n    Result,\n    resultOk,\n    resultError,\n} from \"@syndicate-lang/core\";\nimport G = Schemas.gatekeeper;\nimport S = Schemas.sturdy;\nimport N = Schemas.noise;\nimport T = Schemas.transportAddress;\nimport E = Schemas.stdenv;\nimport R = Schemas.rpc;\n\nexport * from './seal.js';\n\ntype TransportState = {\n    addr: AnyValue,\n    control: Ref,\n    peer: Ref,\n};\n\nexport type Options = boolean /* debug */ | Partial<IOptions>;\nexport type IOptions = {\n    debug: boolean;\n    inboundHook: (url: string, data: Uint8Array) => Uint8Array;\n    outboundHook: (url: string, data: Uint8Array) => Uint8Array;\n};\n\nexport function boot(ds = Dataspace.local, options0: Options = {}, WebSocketConstructor?: typeof WebSocket) {\n    const options1: Partial<IOptions> = typeof options0 === 'boolean'\n        ? { debug: options0 }\n        : Object.assign({}, options0);\n    const options: IOptions = {\n        debug: options1.debug ?? false,\n        inboundHook: options1.inboundHook ?? ((_, data) => data),\n        outboundHook: options1.outboundHook ?? ((_, data) => data),\n    };\n\n    spawn named 'transportConnector' {\n        at ds {\n            during Question(G.ConnectTransport(T.WebSocket($url: string))) => {\n                let counter = 0;\n                Supervisor.always(() => ['wsTransport', fromJS(url), counter++], () => {\n                    console.log('connecting', url, counter);\n                    connectWs(url);\n                });\n            }\n        }\n    }\n\n    function connectWs(url: string) {\n        const facet = Turn.activeFacet;\n        facet.preventInertCheck();\n        const controlEntity = {\n            message(a0: Assertion): void {\n                const a = G.toTransportControl(a0);\n                if (!a) return;\n                stop facet; // ForceDisconnect\n            },\n        };\n        let final = false;\n        function succeed(ws: WebSocket) {\n            if (final) return;\n            final = true;\n            console.log('opened', url);\n            on stop {\n                console.log('closing', url);\n                ws.close();\n            }\n            ws.onclose = () => facet.turn(() => { stop facet; });\n            ws.onerror = () => facet.turn(() => Turn.active.crash(new Error(\"WebSocket error\")));\n            const relay = new Relay.Relay({\n                debug: options.debug,\n                trustPeer: true,\n                packetWriter: bs => ws.send(options.outboundHook(url, bs)),\n                setup: r => ws.onmessage = e => r.accept(options.inboundHook(url, new Uint8Array(e.data))),\n                initialOid: 0,\n            });\n            console.log('succeed', url);\n            at ds {\n                assert Answer(G.ConnectTransport(fromJS<Ref>(T.WebSocket(url))), resultOk(G.ConnectedTransport({\n                    \"addr\": fromJS<Ref>(T.WebSocket(url)),\n                    \"control\": create controlEntity,\n                    \"responderSession\": relay.peer!,\n                })));\n            }\n        }\n        function fail(detail: Assertion) {\n            if (final) return;\n            final = true;\n            console.log('fail', url, detail);\n            at ds {\n                assert Answer(G.ConnectTransport(fromJS<Ref>(T.WebSocket(url))), resultError(detail));\n            }\n            setTimeout(() => facet.turn(() => { stop facet; }), 10000);\n        }\n        try {\n            const ws = new (WebSocketConstructor ?? WebSocket)(url);\n            ws.binaryType = 'arraybuffer';\n            ws.onopen = () => facet.turn(() => succeed(ws));\n            ws.onclose = () => facet.turn(() => fail(Symbol.for('closed')));\n            ws.onerror = () => facet.turn(() => fail(Symbol.for('websocket-error-event')));\n        } catch (e) {\n            console.error('Failed opening websocket', url, e);\n            fail(Symbol.for('websocket-exception'));\n        }\n    }\n\n    spawn named 'pathResolver' {\n        at ds {\n            during Question(G.ResolvePath($route0)) => {\n                const route = G.toRoute(route0);\n                if (!route) return;\n                field candidates: IdentitySet<TransportState> = new IdentitySet();\n                route.transports.forEach(addr => {\n                    console.log('tracking', addr);\n                    assert Question(G.ConnectTransport(addr));\n                    during Answer(G.ConnectTransport(addr), resultOk(G.ConnectedTransport({\n                        \"addr\": addr,\n                        \"control\": $control: Ref,\n                        \"responderSession\": $peer: Ref,\n                    }))) => {\n                        const entry = { addr, control, peer };\n                        candidates.value.add(entry);\n                        candidates.changed();\n                        on stop {\n                            candidates.value.delete(entry);\n                            candidates.changed();\n                        }\n                    }\n                });\n                field best: TransportState | null = null;\n                field rootPeer: Ref | null = null;\n                dataflow {\n                    best.suppressCycleWarning();\n                    best.value = null;\n                    for (const c of candidates.value) {\n                        best.value = c;\n                        break;\n                    }\n                    rootPeer.value = best.value?.peer ?? null;\n                }\n                resolve(() => ({ ref: rootPeer.value, error: false }), route.pathSteps, (r) => {\n                    console.log('leaf', best.value?.addr);\n                    assert Answer(G.ResolvePath(route), resultOk(G.ResolvedPath({\n                        \"addr\": best.value!.addr,\n                        \"control\": best.value!.control,\n                        \"responderSession\": r().ref!,\n                    }))) when (r().ref);\n                    assert Answer(G.ResolvePath(route), resultError(r().error)) when (!r().ref);\n                });\n            }\n        }\n    }\n\n    function resolve(\n        e: () => { ref: Ref | null, error: AnyValue }, // gross\n        steps: G.PathStep[],\n        k: (r: () => { ref: Ref | null, error: AnyValue }) => void,\n    ) {\n        if (steps.length === 0) {\n            k(e);\n        } else {\n            const [step, ...more] = steps;\n            at ds {\n                const q = () => G.ResolvePathStep({ origin: (e().ref!), pathStep: step });\n                assert Question(q()) when (e().ref);\n                during Answer(((q)()) /* omg */, $a: Result) when (e().ref) => {\n                    switch (a._variant) {\n                        case \"Ok\":\n                            // Include a call to our e() in the e we pass in to the recursive\n                            // call to resolve(). e() returning non-null is a precondition for\n                            // the call; if that precondition ever changes, we want to NOT\n                            // reevaluate the body of any assertion, so we should test it\n                            // before we do.\n                            //\n                            // Concrete example of a problem that occurs if the `e() && ...`\n                            // isn't there: connected all OK, the websocket disconnects,\n                            // best.value gets set null, the previous assertion of ResolvePath\n                            // at the end of the chain gets reevaluated because\n                            // resolved.responderSession is still non-null, it includes\n                            // best.value!, which is now null, boom. With the call to e(), we\n                            // short circuit and so the assertion becomes null at that point.\n                            //\n                            const nextRef = G.toResolvedPathStep(a.value.value);\n                            const nextResult = (nextRef === void 0)\n                                ? { ref: null, error: 'bad ResolvedPathStep' }\n                                : { ref: nextRef, error: false };\n                            const nextE = () => {\n                                const result = e();\n                                return result.ref ? nextResult : result;\n                            };\n                            resolve(nextE, more, k);\n                            break;\n                        case \"Error\":\n                            k(() => ({ ref: null, error: a.value.error }));\n                            break;\n                    }\n                }\n            }\n        }\n    }\n\n    spawn named 'noiseStep' {\n        at ds {\n            during Question($q(G.ResolvePathStep({\n                origin: $origin: Ref,\n                pathStep: G.PathStep({\n                    stepType: N.$noise,\n                    detail: $spec: N.NoisePathStepDetail,\n                }),\n            }))) => {\n                const algorithms = SaltyCrypto.Noise_25519_ChaChaPoly_BLAKE2s;\n                const protocol =\n                    spec.protocol._variant === \"present\" ? spec.protocol.protocol :\n                    spec.protocol._variant === \"absent\" ? N.fromDefaultProtocol(N.DefaultProtocol()) as string :\n                    (() => { throw new Error(\"Invalid noise protocol name\"); })();\n\n                const patternName0 = SaltyCrypto.matchPattern(algorithms, protocol);\n                if (patternName0 === null) throw new Error(\"Unsupported protocol \" + protocol);\n                const patternName = patternName0;\n\n                const preSharedKeys =\n                    spec.preSharedKeys._variant === \"present\" ? spec.preSharedKeys.preSharedKeys :\n                    spec.preSharedKeys._variant === \"absent\" ? [] :\n                    (() => { throw new Error(\"Invalid pre-shared keys\"); })();\n                const prologue = underlying(canonicalEncode(spec.service));\n\n                react {\n                    at origin {\n                        assert G.Resolve({\n                            \"step\": G.Step({\n                                \"stepType\": N.$noise,\n                                \"detail\": fromJS(N.ServiceSelector(spec.service)),\n                            }),\n                            \"observer\": create assertionFacetObserver(e => {\n                                const response = R.toResult(e);\n                                if (!response) return;\n                                switch (response._variant) {\n                                    case \"Ok\":\n                                        if (isEmbedded(response.value.value)) {\n                                            runSession(response.value.value);\n                                        }\n                                        break;\n                                    case \"Error\":\n                                        stop {\n                                            at ds {\n                                                assert Answer(q, response);\n                                            }\n                                        }\n                                }\n                            }),\n                        });\n                    }\n                }\n\n                function runSession(responderSession: Ref) {\n                    const H = new SaltyCrypto.Handshake(\n                        algorithms,\n                        patternName,\n                        'initiator',\n                        {\n                            prologue,\n                            remoteStaticPublicKey: underlying(spec.key),\n                            preSharedKeys: preSharedKeys.map(underlying),\n                        });\n                    let transportState: SaltyCrypto.TransportState | null = null;\n                    let relay: Relay.Relay | null = null;\n\n                    const { packet, finished } = H.writeMessage(new Uint8Array());\n                    at responderSession {\n                        assert N.Initiator(create ({ message: handlePacket }));\n                        send message Bytes.from(packet);\n                    }\n                    maybeTransition(finished);\n\n                    function maybeTransition(s: SaltyCrypto.TransportState | null) {\n                        if (transportState !== null) {\n                            throw new Error(\"Unexpected double-transition to transport state\");\n                        }\n                        transportState = s;\n                        if (transportState !== null) {\n                            actuallyTransition();\n                        }\n                    }\n\n                    function actuallyTransition() {\n                        const noiseSessionFacet = Turn.activeFacet;\n                        const peer = new Relay.Relay({\n                            debug: options.debug,\n                            trustPeer: true,\n                            packetWriter: bs => noiseSessionFacet.turn(() => {\n                                const fragments = transportState!.send.encrypt_large(bs).map(Bytes.from);\n                                at responderSession! {\n                                    send message ((fragments.length === 1)\n                                        ? N.Packet.complete(fragments[0])\n                                        : N.Packet.fragmented(fragments));\n                                }\n                            }),\n                            setup: r => relay = r,\n                            initialOid: 0,\n                        }).peer!;\n                        assert Answer(q, resultOk(peer));\n                    }\n\n                    function handlePacket(body: Assertion) {\n                        const p = N.asPacket(body);\n                        if (transportState) {\n                            const packet = transportState.recv.decrypt_large(\n                                p._variant === 'complete'\n                                    ? [underlying(p.value)]\n                                    : p.value.map(underlying));\n                            relay!.accept(packet);\n                        } else {\n                            if (p._variant !== 'complete') {\n                                throw new Error(\"Unexpected fragmentation in handshake\");\n                            }\n                            const { message, finished } = H!.readMessage(underlying(p.value));\n                            if (message.byteLength !== 0) {\n                                throw new Error(\"Unexpected payload during handshake\");\n                            }\n                            maybeTransition(finished);\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    spawn named 'sturdyRefStep' {\n        at ds {\n            during Question($q(G.ResolvePathStep({\n                origin: $origin: Ref,\n                pathStep: G.PathStep({\n                    stepType: S.$ref,\n                    detail: $parameters: S.SturdyPathStepDetail,\n                }),\n            }))) => {\n                at origin {\n                    assert G.Resolve({\n                        \"step\": G.Step({\n                            \"stepType\": S.$ref,\n                            \"detail\": fromJS(parameters),\n                        }),\n                        \"observer\": create assertionFacetObserver(e => {\n                            const response = R.toResult(e);\n                            if (!response) return;\n                            at ds { assert Answer(q, response); }\n                        }),\n                    });\n                }\n            }\n        }\n    }\n}\n\nexport function unpackStandardRoute<R extends Embeddable>(route: E.StandardRoute<R>): G.Route<R> {\n    if (route._variant === 'general') return route.value;\n\n    const { transports, key, service, sig, oid } = route;\n\n    const protocol = N.NoiseProtocol.absent<R>();\n    const preSharedKeys = N.NoisePreSharedKeys.absent<R>();\n    const caveats = route.caveats.length\n        ? S.CaveatsField.present<R>(route.caveats)\n        : S.CaveatsField.absent<R>();\n\n    return G.Route({\n        transports: transports.map(t => {\n            switch (t._variant) {\n                case 'wsUrl': return T.fromWebSocket(T.WebSocket(t.value));\n                default: {\n                    const x = stringify(E.fromStandardTransport(t));\n                    throw new Error(`Unsupported transport: ${x}`);\n                }\n            }\n        }),\n        pathSteps: [\n            G.PathStep({\n                stepType: N.$noise,\n                detail: N.fromNoiseSpec(N.NoiseSpec({ service, key, protocol, preSharedKeys })),\n            }),\n            G.PathStep({\n                stepType: S.$ref,\n                detail: S.fromParameters(S.Parameters({ oid, sig, caveats })),\n            }),\n        ],\n    });\n}\n\n// We support a couple of variations here: a string containing Base64-encoded machine-oriented\n// Preserves, or a string containing text-syntax Preserves.\nexport function decodeStandardRoute(s: string): G.Route | null {\n    try {\n        let routeValue: AnyValue;\n        // A valid text-syntax representation of a StandardRoute must start with\n        // either '[' or '<', neither of which is valid Base64.\n        if (s[0] === '[' || s[0] === '<') {\n            routeValue = parse(s);\n        } else {\n            routeValue = decode(Bytes.fromBase64(s.replace(/[^-_+/A-Za-z0-9=]/g, '')));\n        }\n        const route = E.toStandardRoute(routeValue);\n        return route === void 0 ? null : unpackStandardRoute(route);\n    } catch (e) {\n        console.error('Decoding standard route:', e);\n        return null;\n    }\n}\n\nexport type Routeish = G.Route | Record<AnyValue, Array<AnyValue>, Ref>;\n\nexport function contactRemote(\n    route: Routeish | (() => Routeish),\n    connectedFacet: (\n        remoteObject: Ref,\n        controlObject: Ref,\n        transportAddr: AnyValue,\n    ) => void,\n    ds = Dataspace.local,\n) {\n    const routeFn = typeof route === 'function' ? route : () => route;\n    field routeField: G.Route = null!;\n    dataflow {\n        const r = routeFn();\n        routeField.value = 'pathSteps' in r ? r : G.asRoute(r);\n    }\n    at ds {\n        assert Question(G.ResolvePath(routeField.value));\n        during Answer(G.ResolvePath(routeField.value), resultOk(G.ResolvedPath({\n            \"addr\": $addr,\n            \"control\": $control: Ref,\n            \"responderSession\": $resolved: Ref,\n        }))) => {\n            connectedFacet(resolved, control, addr);\n        }\n    }\n}\n","/// SPDX-License-Identifier: GPL-3.0-or-later\n/// SPDX-FileCopyrightText: Copyright © 2024-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nimport { Bytes, Value, encode, decode, isEmbedded, isSequence } from \"@preserves/core\";\nimport { SaltyCrypto, Ref } from \"@syndicate-lang/core\";\n\nconst aead = SaltyCrypto.ChaCha20Poly1305_RFC8439;\n\nexport type Sealed = [Bytes, number, number, number];\n\nexport function makeSeal() {\n    const key = new DataView(SaltyCrypto.randomBytes(aead.KEYBYTES).buffer);\n    const n = new SaltyCrypto.Nonce();\n    return {\n        seal(v: Value<Ref>): Promise<Sealed> {\n            return new Promise(k => {\n                at this.sealer {\n                    send message [v, create ({\n                        message(reply) { k(reply as Sealed); }\n                    })];\n                }\n            });\n        },\n\n        unseal(sealed: Sealed): Promise<{ ok: true, value: Value } | { ok: false }> {\n            return new Promise(k => {\n                at this.unsealer {\n                    send message [sealed, create ({\n                        message(reply) { k(reply as any); }\n                    })];\n                }\n            });\n        },\n\n        sealer: create ({\n            message(req) {\n                if (isSequence(req) && req.length === 2 && isEmbedded(req[1])) {\n                    try {\n                        const [term, k] = req;\n                        const m = encode(term);\n                        const c = aead.encrypt(m._view, key, n);\n                        at k { send message [Bytes.from(c), n.lo, n.hi, n.extra]; }\n                        n.increment();\n                    } catch (_e) { console.error('Failed sealing: ' + _e); }\n                }\n            }\n        }),\n\n        unsealer: create ({\n            message(req) {\n                if (\n                    isSequence(req) && req.length === 2 && isEmbedded(req[1]) &&\n                        isSequence(req[0]) && req[0].length === 4 &&\n                        Bytes.isBytes(req[0][0]) &&\n                        typeof req[0][1] === 'number' &&\n                        typeof req[0][2] === 'number' &&\n                        typeof req[0][3] === 'number'\n                ) {\n                    const [[c, lo, hi, extra], k] = req;\n                    try {\n                        const n = new SaltyCrypto.Nonce(lo, hi, extra);\n                        const m = aead.decrypt(c._view, key, n);\n                        at k { send message { ok: true, value: decode(Bytes.from(m)) }; }\n                    } catch (e) {\n                        at k { send message { ok: false }; }\n                    }\n                }\n            },\n        }),\n    };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;IAAAA,iBAAA;AAGA,IAAAC,eA2BQ;;;AC9BR,oBAAA;AAGA,kBAAsE;AACtE,IAAAC,eAAkC;AAElC,IAAA,OAAA,yBAAA;AAIA,SAAA,WAAA;AACI,QAAA,MAAA,IAAA,SAAA,yBAAA,YAAA,KAAA,QAAA,EAAA,MAAA;AACA,QAAA,IAAA,IAAA,yBAAA,MAAA;AACA,SAAA;IACI,KAAA,GAAA;AACI,aAAA,IAAA,QAAA,OAAA;AACI,SAAA,CAAA,2BAAA;AACI,UAAA,mBAAA,OAAA,QAAA,uBAAA,GAAa,CAAA,GAAA,mBAAA,IAAW;YACpB,QAAA,OAAA;AAAA,gBAAA,KAAA;YAAA;UACJ,CAFiB,CAEf,CAFF;QADJ,GAAA,MAAG,KAAA,MAAH;MAKJ,CAAA;IACJ;IAEA,OAAA,QAAA;AACI,aAAA,IAAA,QAAA,OAAA;AACI,SAAA,CAAA,2BAAA;AACI,UAAA,mBAAA,OAAA,QAAA,uBAAA,GAAa,CAAA,QAAA,mBAAA,IAAgB;YACzB,QAAA,OAAA;AAAA,gBAAA,KAAA;YAAA;UACJ,CAFsB,CAEpB,CAFF;QADJ,GAAA,MAAG,KAAA,QAAH;MAKJ,CAAA;IACJ;IAEA,QAAA,mBAAA,IAAe;MACX,QAAA,KAAA;AACI,gBAAA,wBAAA,GAAA,KAAA,IAAA,WAAA,SAAA,wBAAA,IAAA,CAAA,CAAA,GAAA;AACI,cAAA;AACI,kBAAA,CAAA,MAAA,CAAA,IAAA;AACA,kBAAA,QAAA,oBAAA,IAAA;AACA,kBAAA,IAAA,KAAA,QAAA,EAAA,OAAA,KAAA,CAAA;AACA,aAAA,CAAA,2BAAA;AAAA,cAAA,mBAAA,OAAA,QAAA,uBAAA,GAAoB,CAAA,kBAAA,KAAA,CAAA,GAAA,EAAA,IAAA,EAAA,IAAA,EAAA,KAAA,CAAb;YAAP,GAAA,MAAG,CAAH;AACA,cAAA,UAAA;UACJ,SAAA,IAAA;AAAA,oBAAA,MAA8B,qBAAA,EAAA;UAAA;QAClC;MACJ;IACJ,CAZQ;IAcR,UAAA,mBAAA,IAAiB;MACb,QAAA,KAAA;AACI,gBACI,wBAAA,GAAA,KAAA,IAAA,WAAA,SAAA,wBAAA,IAAA,CAAA,CAAA,SACI,wBAAA,IAAA,CAAA,CAAA,KAAA,IAAA,CAAA,EAAA,WAAA,KACA,kBAAA,QAAA,IAAA,CAAA,EAAA,CAAA,CAAA,KACA,OAAA,IAAA,CAAA,EAAA,CAAA,MAAsB,YACtB,OAAA,IAAA,CAAA,EAAA,CAAA,MAAsB,YACtB,OAAA,IAAA,CAAA,EAAA,CAAA,MAAsB,UAC9B;AACI,gBAAA,CAAA,CAAA,GAAA,IAAA,IAAA,KAAA,GAAA,CAAA,IAAA;AACA,cAAA;AACI,kBAAAC,KAAA,IAAA,yBAAA,MAAA,IAAA,IAAA,KAAA;AACA,kBAAA,IAAA,KAAA,QAAA,EAAA,OAAA,KAAAA,EAAA;AACA,aAAA,CAAA,2BAAA;AAAA,cAAA,mBAAA,OAAA,QAAA,uBAAA,GAAoB,EAAA,IAAA,MAAA,WAAA,oBAAA,kBAAA,KAAA,CAAA,CAAA,EAAA,CAAb;YAAP,GAAA,MAAG,CAAH;UACJ,SAAA,GAAA;AACI,aAAA,CAAA,2BAAA;AAAA,cAAA,mBAAA,OAAA,QAAA,uBAAA,GAAoB,EAAA,IAAA,MAAA,CAAb;YAAP,GAAA,MAAG,CAAH;UACJ;QACJ;MACJ;IACJ,CApBU;EAqBd;AACJ;;;ADvCA,IAAA,IAAA,qBAAA;AACA,IAAA,IAAA,qBAAA;AACA,IAAA,IAAA,qBAAA;AACA,IAAA,IAAA,qBAAA;AACA,IAAA,IAAA,qBAAA;AACA,IAAA,IAAA,qBAAA;AAiBA,SAAA,KAAA,KAAA,uBAAA,OAAA,WAAA,CAAA,GAAA,sBAAA;AArDA;AAsDI,QAAA,WAAA,OAAA,aAAyD,YACrD,EAAA,OAAA,SAAA,IACA,OAAA,OAAA,CAAA,GAAA,QAAA;AACJ,QAAA,UAAA;IACI,QAAA,cAAA,UAAA,YAAA;IACA,cAAA,cAAA,gBAAA,YAAA,CAAA,GAAA,SAAA;IACA,eAAA,cAAA,iBAAA,YAAA,CAAA,GAAA,SAAA;EACJ;AAEA,EAAA,yBAAA,OAAA,MAAA;AAAA,UAAA,wBAAA,oBAAA;AAAA,0BAAA,MAAA,OAAa;AACT,KAAA,CAAA,2BAAA;AACI,MAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAA,uBAAA,GAAA,WAAA,uBAAA;QAAA,SAAA,0BAAA,OAAA,0BAAA,KAAO,uBAAA,0BAAA,KAAS,EAAA,kBAAA,0BAAA,KAAmB,EAAA,WAAA,0BAAA,KAAA,0BAAA,CAAA,CAAA,CAAA,CAAA,CAAnC;QAAA,UAAA,oBAAA,IAAA;UAAA,CAAA,SAAA;AAAA,gBAAA,MAAA,QAAA,IAAA,GAAA;AAAA,kBAAA,OAAA,KAAA,CAAA,MAAA,SAAA;AAAA,oBAAgD,MAAA,KAAA,CAAA;AAC5C,kBAAA,UAAA;AACA,sCAAA,OAAA,MAAA,CAA0B,mBAAY,qBAAA,GAAA,GAAA,SAAA,GAAA,MAAA;AAClC,wBAAA,IAAa,cAAW,KAAA,OAAA;AACxB,0BAAA,GAAA;cACJ,CAAA;YALJ;UAAA;QAAA,CAAA;MAAA,CAAA,EAAA,EAAA;IADJ,GAAA,MAAG,EAAH;EADJ,CAAA;AAYA,WAAA,UAAA,KAAA;AACI,UAAA,QAAA,kBAAA;AACA,UAAA,kBAAA;AACA,UAAA,gBAAA;MACI,QAAA,IAAA;AACI,cAAA,IAAA,EAAA,mBAAA,EAAA;AACA,YAAA,CAAA,EAAA;AACA,QAAA,oBAAA,OAAA,MAAK,OAAL,MAAA;AAAA,gBAAA,wBAAA,oBAAA;QAAA,CAAA;MACJ;IACJ;AACA,QAAA,QAAA;AACA,aAAA,QAAA,IAAA;AACI,UAAA,MAAA;AACA,cAAA;AACA,cAAA,IAAa,UAAO,GAAA;AACpB,MAAA,oBAAA,YAAA,OAAA,MAAA;AACI,gBAAA,IAAa,WAAQ,GAAA;AACrB,WAAA,MAAA;MAFJ,CAAA;AAIA,SAAA,UAAA,MAAA,MAAA,KAAA,MAAA;AAAA,QAAA,oBAAA,OAAA,MAA2C,OAAL,MAAA;AAAA,gBAAA,wBAAA,oBAAA;QAAA,CAAA;MAAA,CAAA;AACtC,SAAA,UAAA,MAAA,MAAA,KAAA,MAAA,kBAAA,OAAA,MAAA,IAAA,MAAiE,iBAAgB,CAAA,CAAA;AACjF,YAAA,QAAA,IAAA,mBAAA,MAAA;QACI,OAAA,QAAA;QACA,WAAA;QACA,cAAA,QAAA,GAAA,KAAA,QAAA,aAAA,KAAA,EAAA,CAAA;QACA,OAAA,OAAA,GAAA,YAAA,OAAA,EAAA,OAAA,QAAA,YAAA,KAAA,IAAA,WAAA,EAAA,IAAA,CAAA,CAAA;QACA,YAAA;MACJ,CAAA;AACA,cAAA,IAAa,WAAQ,GAAA;AACrB,OAAA,CAAA,2BAAA;AACI,QAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAA,uBAAA,GAAA,eAAO,qBAAA,EAAA,qBAAA,qBAAA,EAAA,UAAA,GAAA,CAAA,CAAA,OAAA,uBAAA,EAAA,mBAAA;UACF,YAAK,qBAAA,EAAA,UAAA,GAAA,CAAA;UACL,WAAQ,oBAAA,IAAS,aAAP;UACV,oBAAiB,MAAA;QACtB,CAAA,CAAA,CAAA,EAAA,EAAA;MALJ,GAAA,MAAG,EAAH;IAOJ;AACA,aAAA,KAAA,QAAA;AACI,UAAA,MAAA;AACA,cAAA;AACA,cAAA,IAAa,QAAK,KAAA,MAAA;AAClB,OAAA,CAAA,2BAAA;AACI,QAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAA,uBAAA,GAAA,eAAO,qBAAA,EAAA,qBAAA,qBAAA,EAAA,UAAA,GAAA,CAAA,CAAA,OAAA,0BAAA,MAAA,CAAA,EAAA,EAAA;MADX,GAAA,MAAG,EAAH;AAGA,iBAAA,MAAA,MAAA,KAAA,MAAA;AAAA,QAAA,oBAAA,OAAA,MAAyC,OAAL,MAAA;AAAA,gBAAA,wBAAA,oBAAA;QAAA,CAAA;MAAA,CAAA,GAAA,GAAA;IACxC;AACA,QAAA;AACI,YAAA,KAAA,KAAA,sDAAA,WAAA,GAAA;AACA,SAAA,aAAiB;AACjB,SAAA,SAAA,MAAA,MAAA,KAAA,MAAA,QAAA,EAAA,CAAA;AACA,SAAA,UAAA,MAAA,MAAA,KAAA,MAAA,KAAA,OAAA,IAAqD,QAAO,CAAA,CAAA;AAC5D,SAAA,UAAA,MAAA,MAAA,KAAA,MAAA,KAAA,OAAA,IAAqD,uBAAsB,CAAA,CAAA;IAC/E,SAAA,GAAA;AACI,cAAA,MAAe,4BAAyB,KAAA,CAAA;AACxC,WAAA,OAAA,IAAiB,qBAAoB,CAAA;IACzC;EACJ;AAEA,EAAA,yBAAA,OAAA,MAAA;AAAA,UAAA,wBAAA,oBAAA;AAAA,0BAAA,MAAA,OAAa;AACT,KAAA,CAAA,2BAAA;AACI,MAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAA,uBAAA,GAAA,WAAA,uBAAA;QAAA,SAAA,0BAAA,OAAA,0BAAA,KAAO,uBAAA,0BAAA,KAAS,EAAA,aAAA,0BAAA,KAAA,0BAAA,CAAA,CAAA,CAAA,CAAhB;QAAA,UAAA,oBAAA,IAAA;UAAA,CAAA,SAAA;AAAA,gBAAA,MAAA,QAAA,IAAA,GAAA;AAAA,oBAA+B,SAAA,KAAA,CAAA;AAC3B,oBAAA,QAAA,EAAA,QAAA,MAAA;AACA,kBAAA,CAAA,MAAA;AACA,oBAAM,aAAA,oBAAA,OAAA,MAA0C,IAAA,yBAAA,GAA1C,YAAN;AACA,oBAAA,WAAA,QAAA,UAAA;AACI,wBAAA,IAAa,YAAS,IAAA;AACtB,gBAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAA,uBAAA,GAAA,eAAO,uBAAA,EAAA,iBAAA,IAAA,CAAA,EAAA,EAAA;AACP,gBAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAA,uBAAA,GAAA,WAAA,uBAAA;kBAAA,SAAA,0BAAA,OAAA,0BAAA,KAAO,qBAAA,0BAAA,KAAO,EAAA,kBAAA,0BAAA,UAAmB,IAAA,CAAA,GAAA,0BAAA,KAAO,uBAAA,0BAAA,KAAS,EAAA,oBAAA,0BAAA,KAAA,CAC5C,QAAA,0BAAA,UAAO,IAAA,CAAA,GAAA,CACP,WAAA,0BAAA,KAAA,0BAAA,CAAA,CAAA,GAAA,CACA,oBAAA,0BAAA,KAAA,0BAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAHL;kBAAA,UAAA,oBAAA,IAAA;oBAAA,CAAAC,UAAA;AAAA,0BAAA,MAAA,QAAAA,KAAA,GAAA;AAAA,8BAAA,QAEyB,iBAFzB,kBAAAA,MAAA,CAAA,CAAA;AAAA,4BAAA,UAAA,OAAA;AAAA,8BAEgB,UAAA;AAFhB,8BAAA,QAG+B,iBAH/B,kBAAAA,MAAA,CAAA,CAAA;AAAA,4BAAA,UAAA,OAAA;AAAA,8BAGyB,OAAA;AAErB,8BAAA,QAAA,EAAA,MAAA,SAAA,KAAA;AACA,mCAAA,MAAA,IAAA,KAAA;AACA,mCAAA,QAAA;AACA,wBAAA,oBAAA,YAAA,OAAA,MAAA;AACI,qCAAA,MAAA,OAAA,KAAA;AACA,qCAAA,QAAA;wBAFJ,CAAA;sBARJ;oBAAA;kBAAA,CAAA;gBAAA,CAAA,EAAA,EAAA;cAaJ,CAAA;AACA,oBAAM,OAAA,oBAAA,OAAA,MAA8B,MAA9B,MAAN;AACA,oBAAM,WAAA,oBAAA,OAAA,MAAuB,MAAvB,UAAN;AACA,cAAA,oBAAA,OAAA,UAAA,MAAA;AA9JhB,oBAAAC,KAAAC;AA+JoB,qBAAA,qBAAA;AACA,qBAAA,QAAA;AACA,2BAAA,KAAA,WAAA,OAAA;AACI,uBAAA,QAAA;AACA;gBACJ;AACA,yBAAA,SAAAA,OAAAD,MAAA,KAAA,UAAA,gBAAAA,IAAA,SAAA,OAAAC,MAAA;cAPJ,CAAA;AASA,sBAAA,OAAA,EAAA,KAAA,SAAA,OAAA,OAAA,MAAA,IAAA,MAAA,WAAA,CAAA,MAAA;AAvKhB,oBAAAD;AAwKoB,wBAAA,IAAa,SAAKA,MAAA,KAAA,UAAA,gBAAAA,IAAA,IAAA;AAClB,gBAAA,oBAAA,OAAA,eAAA,MAIW,EAAA,EAAA,MAJX,EAAA,QAAA,uBAAA,GAAA,eAAO,qBAAA,EAAA,YAAA,KAAA,OAAA,uBAAA,EAAA,aAAA;kBACF,QAAK,KAAA,MAAA;kBACL,WAAQ,KAAA,MAAA;kBACR,oBAAiB,EAAA,EAAA;gBACtB,CAAA,CAAA,CAAA,EAAA,IAJA,EAAA,QAAA,QAAA,WAAA,OAAA,CAAA;AAKA,gBAAA,oBAAA,OAAA,eAAA,MAAkE,CAAA,EAAA,EAAA,MAAlE,EAAA,QAAA,uBAAA,GAAA,eAAO,qBAAA,EAAA,YAAA,KAAA,OAAA,0BAAA,EAAA,EAAA,KAAA,CAAA,EAAA,IAAP,EAAA,QAAA,QAAA,WAAA,OAAA,CAAA;cACJ,CAAA;YAxCJ;UAAA;QAAA,CAAA;MAAA,CAAA,EAAA,EAAA;IADJ,GAAA,MAAG,EAAH;EADJ,CAAA;AA+CA,WAAA,QACI,GACA,OACA,GACJ;AACI,QAAA,MAAA,WAAA,GAAA;AACI,QAAA,CAAA;IACJ,OAAA;AACI,YAAA,CAAA,MAAA,GAAA,IAAA,IAAA;AACA,OAAA,CAAA,2BAAA;AACI,cAAA,IAAA,MAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,KAAA,UAAA,KAAA,CAAA;AACA,QAAA,oBAAA,OAAA,eAAA,MAA2B,EAAA,EAAA,MAA3B,EAAA,QAAA,uBAAA,GAAA,eAAO,uBAAA,EAAA,CAAA,EAAA,IAAP,EAAA,QAAA,QAAA,WAAA,OAAA,CAAA;AACA,QAAA,oBAAA,OAAA,eAAA,MAAmD,EAAA,EAAA,MAAnD,EAAA,QAAA,uBAAA,GAAA,WAAA,uBAAA;UAAA,SAAA,0BAAA,OAAA,0BAAA,KAAO,qBAAA,0BAAA,UAAO,EAAA,CAAA,GAAA,0BAAA,KAAA,0BAAA,CAAA,CAAA,CAAd;UAAA,UAAA,oBAAA,IAAA;YAAA,CAAA,SAAA;AAAA,kBAAA,MAAA,QAAA,IAAA,GAAA;AAAA,sBAAA,QAAqC,oBAArC,kBAAA,KAAA,CAAA,CAAA;AAAA,oBAAA,UAAA,OAAA;AAAA,sBAAkC,IAAA;AAC9B,wBAAA,EAAA,UAAA;kBACI,KAAM;AAeF,0BAAA,UAAA,EAAA,mBAAA,EAAA,MAAA,KAAA;AACA,0BAAA,aAAA,YAAA,SACI,EAAA,KAAA,MAAA,OAAuB,uBAAA,IACvB,EAAA,KAAA,SAAA,OAAA,MAAA;AACJ,0BAAA,QAAA,MAAA;AACI,4BAAA,SAAA,EAAA;AACA,6BAAA,OAAA,MAAA,aAAA;oBACJ;AACA,4BAAA,OAAA,MAAA,CAAA;AACA;kBACJ,KAAM;AACF,sBAAA,OAAA,EAAA,KAAA,MAAA,OAAA,EAAA,MAAA,MAAA,EAAA;AACA;gBACR;cA9BJ;YAAA;UAAA,CAAA;QAAA,CAAA,EAAA,IAAA,EAAA,QAAA,QAAA,WAAA,OAAA,CAAA;MAHJ,GAAA,MAAG,EAAH;IAoCJ;EACJ;AAEA,EAAA,yBAAA,OAAA,MAAA;AAAA,UAAA,wBAAA,oBAAA;AAAA,0BAAA,MAAA,OAAa;AACT,KAAA,CAAA,2BAAA;AACI,MAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAA,uBAAA,GAAA,WAAA,uBAAA;QAAA,SAAA,0BAAA,OAAA,0BAAA,KAAO,uBAAA,0BAAA,KAAA,0BAAA,KAAY,EAAA,iBAAA,0BAAA,KAAA,CAAA,UACf,0BAAA,KAAA,0BAAA,CAAA,CAAA,GAAA,CAAA,YACA,0BAAA,KAAU,EAAA,UAAA,0BAAA,KAAA,CAAA,YACN,0BAAA,UAAU,EAAA,MAAA,CAAA,GAAA,CAAA,UACV,0BAAA,KAAA,0BAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAJR;QAAA,UAAA,oBAAA,IAAA;UAAA,CAAA,SAAA;AAAA,gBAAA,MAAA,QAAA,IAAA,GAAA;AAmDI,kBAAAE,cAAA,SAAA,kBAAA;AACI,sBAAA,IAAA,IAAA,yBAAA;kBACI;kBACA;kBACC;kBACD;oBACI;oBACA,2BAAA,yBAAA,KAAA,GAAA;oBACA,eAAA,cAAA,IAAA,uBAAA;kBACJ;gBAAA;AACJ,oBAAA,iBAAA;AACA,oBAAA,QAAA;AAEA,sBAAA,EAAA,QAAA,SAAA,IAAA,EAAA,aAAA,IAAA,WAAA,CAAA;AACA,iBAAA,CAAAC,4BAAA;AACI,kBAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAAA,wBAAA,GAAA,WAAO,EAAA,UAAA,oBAAA,IAAmB,EAAA,SAAA,aAAA,CAAP,CAAkC,EAAA,EAAA;AACrD,kBAAA,oBAAA,OAAA,QAAAA,wBAAA,GAAa,mBAAA,KAAA,MAAA,CAAb;gBAFJ,GAAA,MAAG,gBAAH;AAIA,gCAAA,QAAA;AAEA,yBAAA,gBAAA,GAAA;AACI,sBAAA,mBAAA,MAAA;AACI,0BAAA,IAAA,MAAiB,iDAAgD;kBACrE;AACA,mCAAA;AACA,sBAAA,mBAAA,MAAA;AACI,uCAAA;kBACJ;gBACJ;AAEA,yBAAA,qBAAA;AACI,wBAAA,oBAAA,kBAAA;AACA,wBAAA,OAAA,IAAA,mBAAA,MAAA;oBACI,OAAA,QAAA;oBACA,WAAA;oBACA,cAAA,QAAA,kBAAA,KAAA,MAAA;AACI,4BAAA,YAAA,eAAA,KAAA,cAAA,EAAA,EAAA,IAAA,mBAAA,IAAA;AACA,uBAAA,CAAAA,4BAAA;AACI,wBAAA,oBAAA,OAAA,QAAAA,wBAAA,GAAa,UAAA,WAAA,IACT,EAAA,OAAA,SAAA,UAAA,CAAA,CAAA,IACA,EAAA,OAAA,WAAA,SAAA,CAFJ;sBADJ,GAAA,MAAG,gBAAH;oBAKJ,CAAA;oBACA,OAAA,OAAA,QAAA;oBACA,YAAA;kBACJ,CAAA,EAAA;AACA,kBAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAA,uBAAA,GAAA,eAAO,qBAAA,OAAA,uBAAA,IAAA,CAAA,EAAA,EAAA;gBACX;AAEA,yBAAA,aAAA,MAAA;AACI,wBAAA,IAAA,EAAA,SAAA,IAAA;AACA,sBAAA,gBAAA;AACI,0BAAAC,UAAA,eAAA,KAAA;sBACI,EAAA,aAAgB,aACZ,KAAA,yBAAA,EAAA,KAAA,CAAA,IACA,EAAA,MAAA,IAAA,uBAAA;oBAAA;AACR,0BAAA,OAAAA,OAAA;kBACJ,OAAA;AACI,wBAAA,EAAA,aAAoB,YAAS;AACzB,4BAAA,IAAA,MAAiB,uCAAsC;oBAC3D;AACA,0BAAA,EAAA,SAAA,UAAAC,UAAA,IAAA,EAAA,gBAAA,yBAAA,EAAA,KAAA,CAAA;AACA,wBAAA,QAAA,eAAA,GAAA;AACI,4BAAA,IAAA,MAAiB,qCAAoC;oBACzD;AACA,oCAAAA,SAAA;kBACJ;gBACJ;cACJ;AApEA,+BAAAH;AAnDJ,oBAAiB,IAAA,KAAA,CAAA;AAAjB,oBAAA,QACqB,iBADrB,kBAAA,KAAA,CAAA,CAAA;AAAA,kBAAA,UAAA,OAAA;AAAA,oBACa,SAAA;AADb,oBAAA,QAIuB,EAAA,oBAJvB,kBAAA,KAAA,CAAA,CAAA;AAAA,kBAAA,UAAA,OAAA;AAAA,oBAIiB,OAAA;AAGb,oBAAA,aAAA,yBAAA;AACA,oBAAA,WACI,KAAA,SAAA,aAA4B,YAAA,KAAA,SAAA,WAC5B,KAAA,SAAA,aAA4B,WAAA,EAAA,oBAAA,EAAA,gBAAA,CAAA,KAC5B,MAAA;AAAA,sBAAA,IAAA,MAA0B,6BAA4B;cAAA,GAAA;AAE1D,oBAAA,eAAA,yBAAA,aAAA,YAAA,QAAA;AACA,kBAAA,iBAAA,KAAA,OAAA,IAAA,MAA4C,0BAAA,QAAA;AAC5C,oBAAA,cAAA;AAEA,oBAAA,gBACI,KAAA,cAAA,aAAiC,YAAA,KAAA,cAAA,gBACjC,KAAA,cAAA,aAAiC,WAAA,CAAA,KACjC,MAAA;AAAA,sBAAA,IAAA,MAA0B,yBAAwB;cAAA,GAAA;AACtD,oBAAA,eAAA,6BAAA,8BAAA,KAAA,OAAA,CAAA;AAEA,cAAA,oBAAA,OAAA,MAAA,MAAA;AAAA,sBAAAI,yBAAA,oBAAA;AACI,iBAAA,CAAAH,4BAAA;AACI,kBAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAAA,wBAAA,GAAA,WAAO,EAAA,QAAA;oBACF,QAAK,EAAA,KAAA;sBACD,YAAS,EAAA;sBACT,cAAO,qBAAA,EAAA,gBAAA,KAAA,OAAA,CAAA;oBACZ,CAAA;oBACC,YAAS,oBAAA,QAAS,qCAAA,OAAA;AACf,4BAAA,WAAA,EAAA,SAAA,CAAA;AACA,0BAAA,CAAA,SAAA;AACA,8BAAA,SAAA,UAAA;wBACI,KAAM;AACF,kCAAA,yBAAA,SAAA,MAAA,KAAA,GAAA;AACI,4BAAAD,YAAA,SAAA,MAAA,KAAA;0BACJ;AACA;wBACJ,KAAM;AACF,0BAAA,oBAAA,OAAA,MAAAI,wBAAA,MAAA;AAAA,kCAAAA,yBAAA,oBAAA;AACI,6BAAA,CAAAH,4BAAA;AACI,8BAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAAA,wBAAA,GAAA,eAAO,qBAAA,GAAA,QAAA,EAAA,EAAA;4BADX,GAAA,MAAG,EAAH;0BADJ,CAAA;sBAKR;oBACJ,CAAA,CAhBY;kBAiBhB,CAAA,EAAA,EAAA;gBAvBJ,GAAA,MAAG,MAAH;cADJ,CAAA;YAvBJ;UAAA;QAAA,CAAA;MAAA,CAAA,EAAA,EAAA;IADJ,GAAA,MAAG,EAAH;EADJ,CAAA;AA8HA,EAAA,yBAAA,OAAA,MAAA;AAAA,UAAA,wBAAA,oBAAA;AAAA,0BAAA,MAAA,OAAa;AACT,KAAA,CAAA,2BAAA;AACI,MAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAA,uBAAA,GAAA,WAAA,uBAAA;QAAA,SAAA,0BAAA,OAAA,0BAAA,KAAO,uBAAA,0BAAA,KAAA,0BAAA,KAAY,EAAA,iBAAA,0BAAA,KAAA,CAAA,UACf,0BAAA,KAAA,0BAAA,CAAA,CAAA,GAAA,CAAA,YACA,0BAAA,KAAU,EAAA,UAAA,0BAAA,KAAA,CAAA,YACN,0BAAA,UAAU,EAAA,IAAA,CAAA,GAAA,CAAA,UACV,0BAAA,KAAA,0BAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAJR;QAAA,UAAA,oBAAA,IAAA;UAAA,CAAA,SAAA;AAAA,gBAAA,MAAA,QAAA,IAAA,GAAA;AAAA,oBAAiB,IAAA,KAAA,CAAA;AAAjB,oBAAA,QACqB,iBADrB,kBAAA,KAAA,CAAA,CAAA;AAAA,kBAAA,UAAA,OAAA;AAAA,oBACa,SAAA;AADb,oBAAA,QAI6B,EAAA,qBAJ7B,kBAAA,KAAA,CAAA,CAAA;AAAA,kBAAA,UAAA,OAAA;AAAA,oBAIiB,aAAA;AAGb,eAAA,CAAAA,4BAAA;AACI,gBAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAAA,wBAAA,GAAA,WAAO,EAAA,QAAA;kBACF,QAAK,EAAA,KAAA;oBACD,YAAS,EAAA;oBACT,cAAO,qBAAA,UAAA;kBACZ,CAAA;kBACC,YAAS,oBAAA,QAAS,qCAAA,OAAA;AACf,0BAAA,WAAA,EAAA,SAAA,CAAA;AACA,wBAAA,CAAA,SAAA;AACA,qBAAA,CAAAA,4BAAA;AAAA,sBAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAAA,wBAAA,GAAA,eAAe,qBAAA,GAAA,QAAA,EAAA,EAAA;oBAAf,GAAA,MAAG,EAAH;kBACJ,CAAA,CAJY;gBAKhB,CAAA,EAAA,EAAA;cAXJ,GAAA,MAAG,MAAH;YAPJ;UAAA;QAAA,CAAA;MAAA,CAAA,EAAA,EAAA;IADJ,GAAA,MAAG,EAAH;EADJ,CAAA;AAyBJ;AAEA,SAAA,oBAAA,OAAA;AACI,MAAA,MAAA,aAAwB,UAAQ,QAAA,MAAA;AAEhC,QAAA,EAAA,YAAA,KAAA,SAAA,KAAA,IAAA,IAAA;AAEA,QAAA,WAAA,EAAA,cAAA,OAAA;AACA,QAAA,gBAAA,EAAA,mBAAA,OAAA;AACA,QAAA,UAAA,MAAA,QAAA,SACI,EAAA,aAAA,QAAA,MAAA,OAAA,IACA,EAAA,aAAA,OAAA;AAEJ,SAAA,EAAA,MAAA;IACI,YAAA,WAAA,IAAA,OAAA;AACI,cAAA,EAAA,UAAA;QACI,KAAM;AAAM,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,KAAA,CAAA;QACZ,SAAA;AACI,gBAAA,QAAA,wBAAA,EAAA,sBAAA,CAAA,CAAA;AACA,gBAAA,IAAA,MAAiB,0BAAwB,CAAA,EAAA;QAC7C;MACJ;IACJ,CAAA;IACA,WAAA;MACI,EAAA,SAAA;QACI,UAAA,EAAA;QACA,QAAA,EAAA,cAAA,EAAA,UAAA,EAAA,SAAA,KAAA,UAAA,cAAA,CAAA,CAAA;MACJ,CAAA;MACA,EAAA,SAAA;QACI,UAAA,EAAA;QACA,QAAA,EAAA,eAAA,EAAA,WAAA,EAAA,KAAA,KAAA,QAAA,CAAA,CAAA;MACJ,CAAA;IACJ;EACJ,CAAA;AACJ;AAIA,SAAA,oBAAA,GAAA;AACI,MAAA;AACI,QAAA;AAGA,QAAA,EAAA,CAAA,MAAc,OAAA,EAAA,CAAA,MAAgB,KAAE;AAC5B,uBAAA,oBAAA,CAAA;IACJ,OAAA;AACI,uBAAA,qBAAA,mBAAA,WAAA,EAAA,QAAA,sBAAsE,EAAC,CAAA,CAAA;IAC3E;AACA,UAAA,QAAA,EAAA,gBAAA,UAAA;AACA,WAAA,UAAA,SAAA,OAAA,oBAAA,KAAA;EACJ,SAAA,GAAA;AACI,YAAA,MAAe,4BAAyB,CAAA;AACxC,WAAA;EACJ;AACJ;AAIA,SAAA,cACI,OACA,gBAKA,KAAA,uBAAA,OACJ;AACI,QAAA,UAAA,OAAA,UAAkC,aAAA,QAAA,MAAA;AAClC,QAAM,aAAA,oBAAA,OAAA,MAAsB,MAAtB,YAAN;AACA,EAAA,oBAAA,OAAA,UAAA,MAAA;AACI,UAAA,IAAA,QAAA;AACA,eAAA,QAAoB,eAAA,IAAA,IAAA,EAAA,QAAA,CAAA;EAFxB,CAAA;AAIA,GAAA,CAAA,2BAAA;AACI,IAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAA,uBAAA,GAAA,eAAO,uBAAA,EAAA,YAAA,WAAA,KAAA,CAAA,EAAA,EAAA;AACP,IAAA,oBAAA,OAAA,eAAA,OAAA,EAAA,QAAA,uBAAA,GAAA,WAAA,uBAAA;MAAA,SAAA,0BAAA,OAAA,0BAAA,KAAO,qBAAA,0BAAA,KAAO,EAAA,aAAA,0BAAA,UAAc,WAAA,KAAA,CAAA,GAAA,0BAAA,KAAmB,uBAAA,0BAAA,KAAS,EAAA,cAAA,0BAAA,KAAA,CACnD,QAAA,0BAAA,KAAA,0BAAA,CAAA,CAAA,GAAA,CACA,WAAA,0BAAA,KAAA,0BAAA,CAAA,CAAA,GAAA,CACA,oBAAA,0BAAA,KAAA,0BAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAHL;MAAA,UAAA,oBAAA,IAAA;QAAA,CAAA,SAAA;AAAA,cAAA,MAAA,QAAA,IAAA,GAAA;AAAA,kBACa,OAAA,KAAA,CAAA;AADb,kBAAA,QAEyB,iBAFzB,kBAAA,KAAA,CAAA,CAAA;AAAA,gBAAA,UAAA,OAAA;AAAA,kBAEgB,UAAA;AAFhB,kBAAA,QAGmC,iBAHnC,kBAAA,KAAA,CAAA,CAAA;AAAA,gBAAA,UAAA,OAAA;AAAA,kBAGyB,WAAA;AAErB,2BAAA,UAAA,SAAA,IAAA;UALJ;QAAA;MAAA,CAAA;IAAA,CAAA,EAAA,EAAA;EAFJ,GAAA,MAAG,EAAH;AAUJ;","names":["__SYNDICATE__","import_core","import_core","n","__vs","_a","_b","runSession","currentSyndicateTarget","packet","finished","currentSyndicateFacet"]}