@b9g/crank 0.6.1 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +203 -138
- package/_css.cjs +80 -0
- package/_css.cjs.map +1 -0
- package/_css.d.ts +21 -0
- package/_css.js +76 -0
- package/_css.js.map +1 -0
- package/_utils.cjs +106 -0
- package/_utils.cjs.map +1 -0
- package/_utils.d.ts +14 -0
- package/_utils.js +99 -0
- package/_utils.js.map +1 -0
- package/async.cjs +236 -0
- package/async.cjs.map +1 -0
- package/async.d.ts +104 -0
- package/async.js +233 -0
- package/async.js.map +1 -0
- package/crank.cjs +1609 -1345
- package/crank.cjs.map +1 -1
- package/crank.d.ts +461 -228
- package/crank.js +1602 -1339
- package/crank.js.map +1 -1
- package/dom.cjs +365 -231
- package/dom.cjs.map +1 -1
- package/dom.d.ts +5 -5
- package/dom.js +365 -231
- package/dom.js.map +1 -1
- package/event-target.cjs +254 -0
- package/event-target.cjs.map +1 -0
- package/event-target.d.ts +26 -0
- package/event-target.js +249 -0
- package/event-target.js.map +1 -0
- package/html.cjs +11 -25
- package/html.cjs.map +1 -1
- package/html.d.ts +3 -3
- package/html.js +11 -25
- package/html.js.map +1 -1
- package/jsx-tag.cjs +2 -2
- package/jsx-tag.cjs.map +1 -1
- package/jsx-tag.js +2 -2
- package/jsx-tag.js.map +1 -1
- package/package.json +18 -2
- package/standalone.cjs +1 -0
- package/standalone.cjs.map +1 -1
- package/standalone.js +1 -1
- package/umd.js +2361 -1569
- package/umd.js.map +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-target.cjs","sources":["../src/event-target.ts"],"sourcesContent":["// EVENT PHASE CONSTANTS\n// https://developer.mozilla.org/en-US/docs/Web/API/Event/eventPhase\nconst NONE = 0;\nconst CAPTURING_PHASE = 1;\nconst AT_TARGET = 2;\nconst BUBBLING_PHASE = 3;\n\nexport function isEventTarget(value: any): value is EventTarget {\n\treturn (\n\t\tvalue != null &&\n\t\ttypeof value.addEventListener === \"function\" &&\n\t\ttypeof value.removeEventListener === \"function\" &&\n\t\ttypeof value.dispatchEvent === \"function\"\n\t);\n}\n\nfunction setEventProperty<T extends keyof Event>(\n\tev: Event,\n\tkey: T,\n\tvalue: Event[T],\n): void {\n\tObject.defineProperty(ev, key, {value, writable: false, configurable: true});\n}\n\nfunction isListenerOrListenerObject(\n\tvalue: unknown,\n): value is EventListenerOrEventListenerObject {\n\treturn (\n\t\ttypeof value === \"function\" ||\n\t\t(value !== null &&\n\t\t\ttypeof value === \"object\" &&\n\t\t\ttypeof (value as any).handleEvent === \"function\")\n\t);\n}\n\nfunction normalizeListenerOptions(\n\toptions: AddEventListenerOptions | boolean | null | undefined,\n): AddEventListenerOptions {\n\tif (typeof options === \"boolean\") {\n\t\treturn {capture: options};\n\t} else if (options == null) {\n\t\treturn {};\n\t}\n\n\treturn options;\n}\n\nconst _parent = Symbol.for(\"CustomEventTarget.parent\");\nconst _listeners = Symbol.for(\"CustomEventTarget.listeners\");\nconst _delegates = Symbol.for(\"CustomEventTarget.delegates\");\nconst _dispatchEventOnSelf = Symbol.for(\"CustomEventTarget.dispatchSelf\");\n\ninterface EventListenerRecord {\n\ttype: string;\n\t// listener is the original value passed to addEventListener, callback is the\n\t// actual function we call\n\tlistener: EventListenerOrEventListenerObject;\n\tcallback: EventListener;\n\toptions: AddEventListenerOptions;\n}\n\nexport class CustomEventTarget<TParent extends CustomEventTarget<TParent> = any>\n\timplements EventTarget\n{\n\tdeclare static dispatchEventOnSelf: typeof _dispatchEventOnSelf;\n\tdeclare [_parent]: TParent | null;\n\tdeclare [_listeners]: Array<EventListenerRecord>;\n\tdeclare [_delegates]: Set<EventTarget>;\n\tconstructor(parent: TParent | null = null) {\n\t\tthis[_parent] = parent;\n\t\tthis[_listeners] = [];\n\t\tthis[_delegates] = new Set<EventTarget>();\n\t}\n\n\taddEventListener(\n\t\ttype: string,\n\t\tlistener: EventListenerOrEventListenerObject | null,\n\t\toptions?: boolean | AddEventListenerOptions,\n\t): void {\n\t\tif (!isListenerOrListenerObject(listener)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst listeners = this[_listeners];\n\t\toptions = normalizeListenerOptions(options);\n\t\tlet callback: EventListener;\n\t\tif (typeof listener === \"function\") {\n\t\t\tcallback = listener;\n\t\t} else {\n\t\t\tcallback = (ev: Event) => listener.handleEvent(ev);\n\t\t}\n\t\tconst record: EventListenerRecord = {type, listener, callback, options};\n\n\t\tif (options.once) {\n\t\t\trecord.callback = function (this: any) {\n\t\t\t\tconst i = listeners.indexOf(record);\n\t\t\t\tif (i !== -1) {\n\t\t\t\t\tlisteners.splice(i, 1);\n\t\t\t\t}\n\n\t\t\t\treturn callback.apply(this, arguments as any);\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tlisteners.some(\n\t\t\t\t(record1) =>\n\t\t\t\t\trecord.type === record1.type &&\n\t\t\t\t\trecord.listener === record1.listener &&\n\t\t\t\t\t!record.options.capture === !record1.options.capture,\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tlisteners.push(record);\n\n\t\tfor (const delegate of this[_delegates]) {\n\t\t\tdelegate.addEventListener(type, record.callback, record.options);\n\t\t}\n\t}\n\n\tremoveEventListener(\n\t\ttype: string,\n\t\tlistener: EventListenerOrEventListenerObject | null,\n\t\toptions?: EventListenerOptions | boolean,\n\t): void {\n\t\tconst listeners = this[_listeners];\n\t\tif (listeners == null || !isListenerOrListenerObject(listener)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst options1 = normalizeListenerOptions(options);\n\t\tconst i = listeners.findIndex(\n\t\t\t(record) =>\n\t\t\t\trecord.type === type &&\n\t\t\t\trecord.listener === listener &&\n\t\t\t\t!record.options.capture === !options1.capture,\n\t\t);\n\n\t\tif (i === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst record = listeners[i];\n\t\tlisteners.splice(i, 1);\n\n\t\tfor (const delegate of this[_delegates]) {\n\t\t\tdelegate.removeEventListener(\n\t\t\t\trecord.type,\n\t\t\t\trecord.callback,\n\t\t\t\trecord.options,\n\t\t\t);\n\t\t}\n\t}\n\n\tdispatchEvent(ev: Event): boolean {\n\t\tconst path: Array<CustomEventTarget> = [];\n\t\tfor (let parent = this[_parent]; parent; parent = parent[_parent]) {\n\t\t\tpath.push(parent);\n\t\t}\n\n\t\tlet cancelBubble = false;\n\t\tlet immediateCancelBubble = false;\n\t\tconst stopPropagation = ev.stopPropagation;\n\t\tsetEventProperty(ev, \"stopPropagation\", () => {\n\t\t\tcancelBubble = true;\n\t\t\treturn stopPropagation.call(ev);\n\t\t});\n\n\t\tconst stopImmediatePropagation = ev.stopImmediatePropagation;\n\t\tsetEventProperty(ev, \"stopImmediatePropagation\", () => {\n\t\t\timmediateCancelBubble = true;\n\t\t\treturn stopImmediatePropagation.call(ev);\n\t\t});\n\t\tsetEventProperty(ev, \"target\", this);\n\n\t\t// The only possible errors in this block are errors thrown by callbacks,\n\t\t// and dispatchEvent will only log these errors rather than throwing them.\n\t\t// Therefore, we place all code in a try block, log errors in the catch\n\t\t// block, and use an unsafe return statement in the finally block.\n\t\t//\n\t\t// Each early return within the try block returns true because while the\n\t\t// return value is overridden in the finally block, TypeScript\n\t\t// (justifiably) does not recognize the unsafe return statement.\n\t\ttry {\n\t\t\tsetEventProperty(ev, \"eventPhase\", CAPTURING_PHASE);\n\t\t\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\t\t\tconst target = path[i];\n\t\t\t\tconst listeners = target[_listeners];\n\t\t\t\tsetEventProperty(ev, \"currentTarget\", target);\n\t\t\t\tfor (let i = 0; i < listeners.length; i++) {\n\t\t\t\t\tconst record = listeners[i];\n\t\t\t\t\tif (record.type === ev.type && record.options.capture) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trecord.callback.call(target, ev);\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (cancelBubble) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tsetEventProperty(ev, \"eventPhase\", AT_TARGET);\n\t\t\t\tsetEventProperty(ev, \"currentTarget\", this);\n\n\t\t\t\tthis[_dispatchEventOnSelf](ev);\n\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tconst listeners = this[_listeners];\n\t\t\t\tfor (let i = 0; i < listeners.length; i++) {\n\t\t\t\t\tconst record = listeners[i];\n\t\t\t\t\tif (record.type === ev.type) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trecord.callback.call(this, ev);\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (cancelBubble) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ev.bubbles) {\n\t\t\t\tsetEventProperty(ev, \"eventPhase\", BUBBLING_PHASE);\n\t\t\t\tfor (let i = 0; i < path.length; i++) {\n\t\t\t\t\tconst target = path[i];\n\t\t\t\t\tsetEventProperty(ev, \"currentTarget\", target);\n\t\t\t\t\tconst listeners = target[_listeners];\n\t\t\t\t\tfor (let i = 0; i < listeners.length; i++) {\n\t\t\t\t\t\tconst record = listeners[i];\n\t\t\t\t\t\tif (record.type === ev.type && !record.options.capture) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trecord.callback.call(target, ev);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cancelBubble) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tsetEventProperty(ev, \"eventPhase\", NONE);\n\t\t\tsetEventProperty(ev, \"currentTarget\", null);\n\t\t\t// eslint-disable-next-line no-unsafe-finally\n\t\t\treturn !ev.defaultPrevented;\n\t\t}\n\t}\n\n\t[_dispatchEventOnSelf](_ev: Event): void {}\n}\n\nCustomEventTarget.dispatchEventOnSelf = _dispatchEventOnSelf;\n\nexport function addEventTargetDelegates<T extends CustomEventTarget>(\n\ttarget: T,\n\tdelegates: Array<unknown>,\n\tinclude: (target1: T) => boolean = (target1) => target === target1,\n): void {\n\tconst delegates1 = delegates.filter(isEventTarget);\n\tfor (\n\t\tlet target1: T | null = target;\n\t\ttarget1 && include(target1);\n\t\ttarget1 = target1[_parent]\n\t) {\n\t\tfor (let i = 0; i < delegates1.length; i++) {\n\t\t\tconst delegate = delegates1[i];\n\t\t\tif (target1[_delegates].has(delegate)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttarget1[_delegates].add(delegate);\n\t\t\tfor (const record of target1[_listeners]) {\n\t\t\t\tdelegate.addEventListener(record.type, record.callback, record.options);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function removeEventTargetDelegates<T extends CustomEventTarget>(\n\ttarget: T,\n\tdelegates: Array<unknown>,\n\tinclude: (target1: T) => boolean = (target1) => target === target1,\n): void {\n\tconst delegates1 = delegates.filter(isEventTarget);\n\tfor (\n\t\tlet target1: T | null = target;\n\t\ttarget1 && include(target1);\n\t\ttarget1 = target1[_parent]\n\t) {\n\t\tfor (let i = 0; i < delegates1.length; i++) {\n\t\t\tconst delegate = delegates1[i];\n\t\t\tif (!target1[_delegates].has(delegate)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttarget1[_delegates].delete(delegate);\n\t\t\tfor (const record of target1[_listeners]) {\n\t\t\t\tdelegate.removeEventListener(\n\t\t\t\t\trecord.type,\n\t\t\t\t\trecord.callback,\n\t\t\t\t\trecord.options,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function clearEventListeners(target: CustomEventTarget): void {\n\tconst listeners = target[_listeners];\n\tconst delegates = target[_delegates];\n\tfor (let i = 0; i < listeners.length; i++) {\n\t\tconst record = listeners[i];\n\t\tfor (const delegate of delegates) {\n\t\t\tdelegate.removeEventListener(\n\t\t\t\trecord.type,\n\t\t\t\trecord.callback,\n\t\t\t\trecord.options,\n\t\t\t);\n\t\t}\n\t}\n\n\tlisteners.length = 0;\n\tdelegates.clear();\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare function isEventTarget(value: any): value is EventTarget;
|
|
2
|
+
declare const _parent: unique symbol;
|
|
3
|
+
declare const _listeners: unique symbol;
|
|
4
|
+
declare const _delegates: unique symbol;
|
|
5
|
+
declare const _dispatchEventOnSelf: unique symbol;
|
|
6
|
+
interface EventListenerRecord {
|
|
7
|
+
type: string;
|
|
8
|
+
listener: EventListenerOrEventListenerObject;
|
|
9
|
+
callback: EventListener;
|
|
10
|
+
options: AddEventListenerOptions;
|
|
11
|
+
}
|
|
12
|
+
export declare class CustomEventTarget<TParent extends CustomEventTarget<TParent> = any> implements EventTarget {
|
|
13
|
+
static dispatchEventOnSelf: typeof _dispatchEventOnSelf;
|
|
14
|
+
[_parent]: TParent | null;
|
|
15
|
+
[_listeners]: Array<EventListenerRecord>;
|
|
16
|
+
[_delegates]: Set<EventTarget>;
|
|
17
|
+
constructor(parent?: TParent | null);
|
|
18
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void;
|
|
19
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean): void;
|
|
20
|
+
dispatchEvent(ev: Event): boolean;
|
|
21
|
+
[_dispatchEventOnSelf](_ev: Event): void;
|
|
22
|
+
}
|
|
23
|
+
export declare function addEventTargetDelegates<T extends CustomEventTarget>(target: T, delegates: Array<unknown>, include?: (target1: T) => boolean): void;
|
|
24
|
+
export declare function removeEventTargetDelegates<T extends CustomEventTarget>(target: T, delegates: Array<unknown>, include?: (target1: T) => boolean): void;
|
|
25
|
+
export declare function clearEventListeners(target: CustomEventTarget): void;
|
|
26
|
+
export {};
|
package/event-target.js
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/// <reference types="event-target.d.ts" />
|
|
2
|
+
// EVENT PHASE CONSTANTS
|
|
3
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/Event/eventPhase
|
|
4
|
+
const NONE = 0;
|
|
5
|
+
const CAPTURING_PHASE = 1;
|
|
6
|
+
const AT_TARGET = 2;
|
|
7
|
+
const BUBBLING_PHASE = 3;
|
|
8
|
+
function isEventTarget(value) {
|
|
9
|
+
return (value != null &&
|
|
10
|
+
typeof value.addEventListener === "function" &&
|
|
11
|
+
typeof value.removeEventListener === "function" &&
|
|
12
|
+
typeof value.dispatchEvent === "function");
|
|
13
|
+
}
|
|
14
|
+
function setEventProperty(ev, key, value) {
|
|
15
|
+
Object.defineProperty(ev, key, { value, writable: false, configurable: true });
|
|
16
|
+
}
|
|
17
|
+
function isListenerOrListenerObject(value) {
|
|
18
|
+
return (typeof value === "function" ||
|
|
19
|
+
(value !== null &&
|
|
20
|
+
typeof value === "object" &&
|
|
21
|
+
typeof value.handleEvent === "function"));
|
|
22
|
+
}
|
|
23
|
+
function normalizeListenerOptions(options) {
|
|
24
|
+
if (typeof options === "boolean") {
|
|
25
|
+
return { capture: options };
|
|
26
|
+
}
|
|
27
|
+
else if (options == null) {
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
return options;
|
|
31
|
+
}
|
|
32
|
+
const _parent = Symbol.for("CustomEventTarget.parent");
|
|
33
|
+
const _listeners = Symbol.for("CustomEventTarget.listeners");
|
|
34
|
+
const _delegates = Symbol.for("CustomEventTarget.delegates");
|
|
35
|
+
const _dispatchEventOnSelf = Symbol.for("CustomEventTarget.dispatchSelf");
|
|
36
|
+
class CustomEventTarget {
|
|
37
|
+
constructor(parent = null) {
|
|
38
|
+
this[_parent] = parent;
|
|
39
|
+
this[_listeners] = [];
|
|
40
|
+
this[_delegates] = new Set();
|
|
41
|
+
}
|
|
42
|
+
addEventListener(type, listener, options) {
|
|
43
|
+
if (!isListenerOrListenerObject(listener)) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const listeners = this[_listeners];
|
|
47
|
+
options = normalizeListenerOptions(options);
|
|
48
|
+
let callback;
|
|
49
|
+
if (typeof listener === "function") {
|
|
50
|
+
callback = listener;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
callback = (ev) => listener.handleEvent(ev);
|
|
54
|
+
}
|
|
55
|
+
const record = { type, listener, callback, options };
|
|
56
|
+
if (options.once) {
|
|
57
|
+
record.callback = function () {
|
|
58
|
+
const i = listeners.indexOf(record);
|
|
59
|
+
if (i !== -1) {
|
|
60
|
+
listeners.splice(i, 1);
|
|
61
|
+
}
|
|
62
|
+
return callback.apply(this, arguments);
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (listeners.some((record1) => record.type === record1.type &&
|
|
66
|
+
record.listener === record1.listener &&
|
|
67
|
+
!record.options.capture === !record1.options.capture)) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
listeners.push(record);
|
|
71
|
+
for (const delegate of this[_delegates]) {
|
|
72
|
+
delegate.addEventListener(type, record.callback, record.options);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
removeEventListener(type, listener, options) {
|
|
76
|
+
const listeners = this[_listeners];
|
|
77
|
+
if (listeners == null || !isListenerOrListenerObject(listener)) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const options1 = normalizeListenerOptions(options);
|
|
81
|
+
const i = listeners.findIndex((record) => record.type === type &&
|
|
82
|
+
record.listener === listener &&
|
|
83
|
+
!record.options.capture === !options1.capture);
|
|
84
|
+
if (i === -1) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const record = listeners[i];
|
|
88
|
+
listeners.splice(i, 1);
|
|
89
|
+
for (const delegate of this[_delegates]) {
|
|
90
|
+
delegate.removeEventListener(record.type, record.callback, record.options);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
dispatchEvent(ev) {
|
|
94
|
+
const path = [];
|
|
95
|
+
for (let parent = this[_parent]; parent; parent = parent[_parent]) {
|
|
96
|
+
path.push(parent);
|
|
97
|
+
}
|
|
98
|
+
let cancelBubble = false;
|
|
99
|
+
let immediateCancelBubble = false;
|
|
100
|
+
const stopPropagation = ev.stopPropagation;
|
|
101
|
+
setEventProperty(ev, "stopPropagation", () => {
|
|
102
|
+
cancelBubble = true;
|
|
103
|
+
return stopPropagation.call(ev);
|
|
104
|
+
});
|
|
105
|
+
const stopImmediatePropagation = ev.stopImmediatePropagation;
|
|
106
|
+
setEventProperty(ev, "stopImmediatePropagation", () => {
|
|
107
|
+
immediateCancelBubble = true;
|
|
108
|
+
return stopImmediatePropagation.call(ev);
|
|
109
|
+
});
|
|
110
|
+
setEventProperty(ev, "target", this);
|
|
111
|
+
// The only possible errors in this block are errors thrown by callbacks,
|
|
112
|
+
// and dispatchEvent will only log these errors rather than throwing them.
|
|
113
|
+
// Therefore, we place all code in a try block, log errors in the catch
|
|
114
|
+
// block, and use an unsafe return statement in the finally block.
|
|
115
|
+
//
|
|
116
|
+
// Each early return within the try block returns true because while the
|
|
117
|
+
// return value is overridden in the finally block, TypeScript
|
|
118
|
+
// (justifiably) does not recognize the unsafe return statement.
|
|
119
|
+
try {
|
|
120
|
+
setEventProperty(ev, "eventPhase", CAPTURING_PHASE);
|
|
121
|
+
for (let i = path.length - 1; i >= 0; i--) {
|
|
122
|
+
const target = path[i];
|
|
123
|
+
const listeners = target[_listeners];
|
|
124
|
+
setEventProperty(ev, "currentTarget", target);
|
|
125
|
+
for (let i = 0; i < listeners.length; i++) {
|
|
126
|
+
const record = listeners[i];
|
|
127
|
+
if (record.type === ev.type && record.options.capture) {
|
|
128
|
+
try {
|
|
129
|
+
record.callback.call(target, ev);
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
console.error(err);
|
|
133
|
+
}
|
|
134
|
+
if (immediateCancelBubble) {
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (cancelBubble) {
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
{
|
|
144
|
+
setEventProperty(ev, "eventPhase", AT_TARGET);
|
|
145
|
+
setEventProperty(ev, "currentTarget", this);
|
|
146
|
+
this[_dispatchEventOnSelf](ev);
|
|
147
|
+
if (immediateCancelBubble) {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
const listeners = this[_listeners];
|
|
151
|
+
for (let i = 0; i < listeners.length; i++) {
|
|
152
|
+
const record = listeners[i];
|
|
153
|
+
if (record.type === ev.type) {
|
|
154
|
+
try {
|
|
155
|
+
record.callback.call(this, ev);
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
console.error(err);
|
|
159
|
+
}
|
|
160
|
+
if (immediateCancelBubble) {
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (cancelBubble) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (ev.bubbles) {
|
|
170
|
+
setEventProperty(ev, "eventPhase", BUBBLING_PHASE);
|
|
171
|
+
for (let i = 0; i < path.length; i++) {
|
|
172
|
+
const target = path[i];
|
|
173
|
+
setEventProperty(ev, "currentTarget", target);
|
|
174
|
+
const listeners = target[_listeners];
|
|
175
|
+
for (let i = 0; i < listeners.length; i++) {
|
|
176
|
+
const record = listeners[i];
|
|
177
|
+
if (record.type === ev.type && !record.options.capture) {
|
|
178
|
+
try {
|
|
179
|
+
record.callback.call(target, ev);
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
console.error(err);
|
|
183
|
+
}
|
|
184
|
+
if (immediateCancelBubble) {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (cancelBubble) {
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
finally {
|
|
196
|
+
setEventProperty(ev, "eventPhase", NONE);
|
|
197
|
+
setEventProperty(ev, "currentTarget", null);
|
|
198
|
+
// eslint-disable-next-line no-unsafe-finally
|
|
199
|
+
return !ev.defaultPrevented;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
[_dispatchEventOnSelf](_ev) { }
|
|
203
|
+
}
|
|
204
|
+
CustomEventTarget.dispatchEventOnSelf = _dispatchEventOnSelf;
|
|
205
|
+
function addEventTargetDelegates(target, delegates, include = (target1) => target === target1) {
|
|
206
|
+
const delegates1 = delegates.filter(isEventTarget);
|
|
207
|
+
for (let target1 = target; target1 && include(target1); target1 = target1[_parent]) {
|
|
208
|
+
for (let i = 0; i < delegates1.length; i++) {
|
|
209
|
+
const delegate = delegates1[i];
|
|
210
|
+
if (target1[_delegates].has(delegate)) {
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
target1[_delegates].add(delegate);
|
|
214
|
+
for (const record of target1[_listeners]) {
|
|
215
|
+
delegate.addEventListener(record.type, record.callback, record.options);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function removeEventTargetDelegates(target, delegates, include = (target1) => target === target1) {
|
|
221
|
+
const delegates1 = delegates.filter(isEventTarget);
|
|
222
|
+
for (let target1 = target; target1 && include(target1); target1 = target1[_parent]) {
|
|
223
|
+
for (let i = 0; i < delegates1.length; i++) {
|
|
224
|
+
const delegate = delegates1[i];
|
|
225
|
+
if (!target1[_delegates].has(delegate)) {
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
target1[_delegates].delete(delegate);
|
|
229
|
+
for (const record of target1[_listeners]) {
|
|
230
|
+
delegate.removeEventListener(record.type, record.callback, record.options);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function clearEventListeners(target) {
|
|
236
|
+
const listeners = target[_listeners];
|
|
237
|
+
const delegates = target[_delegates];
|
|
238
|
+
for (let i = 0; i < listeners.length; i++) {
|
|
239
|
+
const record = listeners[i];
|
|
240
|
+
for (const delegate of delegates) {
|
|
241
|
+
delegate.removeEventListener(record.type, record.callback, record.options);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
listeners.length = 0;
|
|
245
|
+
delegates.clear();
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
export { CustomEventTarget, addEventTargetDelegates, clearEventListeners, isEventTarget, removeEventTargetDelegates };
|
|
249
|
+
//# sourceMappingURL=event-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-target.js","sources":["../src/event-target.ts"],"sourcesContent":["// EVENT PHASE CONSTANTS\n// https://developer.mozilla.org/en-US/docs/Web/API/Event/eventPhase\nconst NONE = 0;\nconst CAPTURING_PHASE = 1;\nconst AT_TARGET = 2;\nconst BUBBLING_PHASE = 3;\n\nexport function isEventTarget(value: any): value is EventTarget {\n\treturn (\n\t\tvalue != null &&\n\t\ttypeof value.addEventListener === \"function\" &&\n\t\ttypeof value.removeEventListener === \"function\" &&\n\t\ttypeof value.dispatchEvent === \"function\"\n\t);\n}\n\nfunction setEventProperty<T extends keyof Event>(\n\tev: Event,\n\tkey: T,\n\tvalue: Event[T],\n): void {\n\tObject.defineProperty(ev, key, {value, writable: false, configurable: true});\n}\n\nfunction isListenerOrListenerObject(\n\tvalue: unknown,\n): value is EventListenerOrEventListenerObject {\n\treturn (\n\t\ttypeof value === \"function\" ||\n\t\t(value !== null &&\n\t\t\ttypeof value === \"object\" &&\n\t\t\ttypeof (value as any).handleEvent === \"function\")\n\t);\n}\n\nfunction normalizeListenerOptions(\n\toptions: AddEventListenerOptions | boolean | null | undefined,\n): AddEventListenerOptions {\n\tif (typeof options === \"boolean\") {\n\t\treturn {capture: options};\n\t} else if (options == null) {\n\t\treturn {};\n\t}\n\n\treturn options;\n}\n\nconst _parent = Symbol.for(\"CustomEventTarget.parent\");\nconst _listeners = Symbol.for(\"CustomEventTarget.listeners\");\nconst _delegates = Symbol.for(\"CustomEventTarget.delegates\");\nconst _dispatchEventOnSelf = Symbol.for(\"CustomEventTarget.dispatchSelf\");\n\ninterface EventListenerRecord {\n\ttype: string;\n\t// listener is the original value passed to addEventListener, callback is the\n\t// actual function we call\n\tlistener: EventListenerOrEventListenerObject;\n\tcallback: EventListener;\n\toptions: AddEventListenerOptions;\n}\n\nexport class CustomEventTarget<TParent extends CustomEventTarget<TParent> = any>\n\timplements EventTarget\n{\n\tdeclare static dispatchEventOnSelf: typeof _dispatchEventOnSelf;\n\tdeclare [_parent]: TParent | null;\n\tdeclare [_listeners]: Array<EventListenerRecord>;\n\tdeclare [_delegates]: Set<EventTarget>;\n\tconstructor(parent: TParent | null = null) {\n\t\tthis[_parent] = parent;\n\t\tthis[_listeners] = [];\n\t\tthis[_delegates] = new Set<EventTarget>();\n\t}\n\n\taddEventListener(\n\t\ttype: string,\n\t\tlistener: EventListenerOrEventListenerObject | null,\n\t\toptions?: boolean | AddEventListenerOptions,\n\t): void {\n\t\tif (!isListenerOrListenerObject(listener)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst listeners = this[_listeners];\n\t\toptions = normalizeListenerOptions(options);\n\t\tlet callback: EventListener;\n\t\tif (typeof listener === \"function\") {\n\t\t\tcallback = listener;\n\t\t} else {\n\t\t\tcallback = (ev: Event) => listener.handleEvent(ev);\n\t\t}\n\t\tconst record: EventListenerRecord = {type, listener, callback, options};\n\n\t\tif (options.once) {\n\t\t\trecord.callback = function (this: any) {\n\t\t\t\tconst i = listeners.indexOf(record);\n\t\t\t\tif (i !== -1) {\n\t\t\t\t\tlisteners.splice(i, 1);\n\t\t\t\t}\n\n\t\t\t\treturn callback.apply(this, arguments as any);\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tlisteners.some(\n\t\t\t\t(record1) =>\n\t\t\t\t\trecord.type === record1.type &&\n\t\t\t\t\trecord.listener === record1.listener &&\n\t\t\t\t\t!record.options.capture === !record1.options.capture,\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tlisteners.push(record);\n\n\t\tfor (const delegate of this[_delegates]) {\n\t\t\tdelegate.addEventListener(type, record.callback, record.options);\n\t\t}\n\t}\n\n\tremoveEventListener(\n\t\ttype: string,\n\t\tlistener: EventListenerOrEventListenerObject | null,\n\t\toptions?: EventListenerOptions | boolean,\n\t): void {\n\t\tconst listeners = this[_listeners];\n\t\tif (listeners == null || !isListenerOrListenerObject(listener)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst options1 = normalizeListenerOptions(options);\n\t\tconst i = listeners.findIndex(\n\t\t\t(record) =>\n\t\t\t\trecord.type === type &&\n\t\t\t\trecord.listener === listener &&\n\t\t\t\t!record.options.capture === !options1.capture,\n\t\t);\n\n\t\tif (i === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst record = listeners[i];\n\t\tlisteners.splice(i, 1);\n\n\t\tfor (const delegate of this[_delegates]) {\n\t\t\tdelegate.removeEventListener(\n\t\t\t\trecord.type,\n\t\t\t\trecord.callback,\n\t\t\t\trecord.options,\n\t\t\t);\n\t\t}\n\t}\n\n\tdispatchEvent(ev: Event): boolean {\n\t\tconst path: Array<CustomEventTarget> = [];\n\t\tfor (let parent = this[_parent]; parent; parent = parent[_parent]) {\n\t\t\tpath.push(parent);\n\t\t}\n\n\t\tlet cancelBubble = false;\n\t\tlet immediateCancelBubble = false;\n\t\tconst stopPropagation = ev.stopPropagation;\n\t\tsetEventProperty(ev, \"stopPropagation\", () => {\n\t\t\tcancelBubble = true;\n\t\t\treturn stopPropagation.call(ev);\n\t\t});\n\n\t\tconst stopImmediatePropagation = ev.stopImmediatePropagation;\n\t\tsetEventProperty(ev, \"stopImmediatePropagation\", () => {\n\t\t\timmediateCancelBubble = true;\n\t\t\treturn stopImmediatePropagation.call(ev);\n\t\t});\n\t\tsetEventProperty(ev, \"target\", this);\n\n\t\t// The only possible errors in this block are errors thrown by callbacks,\n\t\t// and dispatchEvent will only log these errors rather than throwing them.\n\t\t// Therefore, we place all code in a try block, log errors in the catch\n\t\t// block, and use an unsafe return statement in the finally block.\n\t\t//\n\t\t// Each early return within the try block returns true because while the\n\t\t// return value is overridden in the finally block, TypeScript\n\t\t// (justifiably) does not recognize the unsafe return statement.\n\t\ttry {\n\t\t\tsetEventProperty(ev, \"eventPhase\", CAPTURING_PHASE);\n\t\t\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\t\t\tconst target = path[i];\n\t\t\t\tconst listeners = target[_listeners];\n\t\t\t\tsetEventProperty(ev, \"currentTarget\", target);\n\t\t\t\tfor (let i = 0; i < listeners.length; i++) {\n\t\t\t\t\tconst record = listeners[i];\n\t\t\t\t\tif (record.type === ev.type && record.options.capture) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trecord.callback.call(target, ev);\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (cancelBubble) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tsetEventProperty(ev, \"eventPhase\", AT_TARGET);\n\t\t\t\tsetEventProperty(ev, \"currentTarget\", this);\n\n\t\t\t\tthis[_dispatchEventOnSelf](ev);\n\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tconst listeners = this[_listeners];\n\t\t\t\tfor (let i = 0; i < listeners.length; i++) {\n\t\t\t\t\tconst record = listeners[i];\n\t\t\t\t\tif (record.type === ev.type) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trecord.callback.call(this, ev);\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (cancelBubble) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ev.bubbles) {\n\t\t\t\tsetEventProperty(ev, \"eventPhase\", BUBBLING_PHASE);\n\t\t\t\tfor (let i = 0; i < path.length; i++) {\n\t\t\t\t\tconst target = path[i];\n\t\t\t\t\tsetEventProperty(ev, \"currentTarget\", target);\n\t\t\t\t\tconst listeners = target[_listeners];\n\t\t\t\t\tfor (let i = 0; i < listeners.length; i++) {\n\t\t\t\t\t\tconst record = listeners[i];\n\t\t\t\t\t\tif (record.type === ev.type && !record.options.capture) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trecord.callback.call(target, ev);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (immediateCancelBubble) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cancelBubble) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tsetEventProperty(ev, \"eventPhase\", NONE);\n\t\t\tsetEventProperty(ev, \"currentTarget\", null);\n\t\t\t// eslint-disable-next-line no-unsafe-finally\n\t\t\treturn !ev.defaultPrevented;\n\t\t}\n\t}\n\n\t[_dispatchEventOnSelf](_ev: Event): void {}\n}\n\nCustomEventTarget.dispatchEventOnSelf = _dispatchEventOnSelf;\n\nexport function addEventTargetDelegates<T extends CustomEventTarget>(\n\ttarget: T,\n\tdelegates: Array<unknown>,\n\tinclude: (target1: T) => boolean = (target1) => target === target1,\n): void {\n\tconst delegates1 = delegates.filter(isEventTarget);\n\tfor (\n\t\tlet target1: T | null = target;\n\t\ttarget1 && include(target1);\n\t\ttarget1 = target1[_parent]\n\t) {\n\t\tfor (let i = 0; i < delegates1.length; i++) {\n\t\t\tconst delegate = delegates1[i];\n\t\t\tif (target1[_delegates].has(delegate)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttarget1[_delegates].add(delegate);\n\t\t\tfor (const record of target1[_listeners]) {\n\t\t\t\tdelegate.addEventListener(record.type, record.callback, record.options);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function removeEventTargetDelegates<T extends CustomEventTarget>(\n\ttarget: T,\n\tdelegates: Array<unknown>,\n\tinclude: (target1: T) => boolean = (target1) => target === target1,\n): void {\n\tconst delegates1 = delegates.filter(isEventTarget);\n\tfor (\n\t\tlet target1: T | null = target;\n\t\ttarget1 && include(target1);\n\t\ttarget1 = target1[_parent]\n\t) {\n\t\tfor (let i = 0; i < delegates1.length; i++) {\n\t\t\tconst delegate = delegates1[i];\n\t\t\tif (!target1[_delegates].has(delegate)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttarget1[_delegates].delete(delegate);\n\t\t\tfor (const record of target1[_listeners]) {\n\t\t\t\tdelegate.removeEventListener(\n\t\t\t\t\trecord.type,\n\t\t\t\t\trecord.callback,\n\t\t\t\t\trecord.options,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function clearEventListeners(target: CustomEventTarget): void {\n\tconst listeners = target[_listeners];\n\tconst delegates = target[_delegates];\n\tfor (let i = 0; i < listeners.length; i++) {\n\t\tconst record = listeners[i];\n\t\tfor (const delegate of delegates) {\n\t\t\tdelegate.removeEventListener(\n\t\t\t\trecord.type,\n\t\t\t\trecord.callback,\n\t\t\t\trecord.options,\n\t\t\t);\n\t\t}\n\t}\n\n\tlisteners.length = 0;\n\tdelegates.clear();\n}\n"],"names":[],"mappings":";AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,GAAG,CAAC;AACd,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,GAAG,CAAC;AACzB,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,GAAG,CAAC;AACnB,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,GAAG,CAAC;AAElB,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA;CACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,KAAK,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,KAAK,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,KAAK,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAE3C;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,gBAAgB,CACxB,CAAA,CAAS,EACT,CAAM,CAAA,CAAA,CAAA,CACN,KAAe,CAAA,CAAA;AAEf,CAAA,CAAA,CAAA,CAAA,MAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAE,CAAA,CAAA,CAAE,GAAG,CAAE,CAAA,CAAA,CAAC,KAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,YAAY,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,EAAC,CAAC;AAC7E;AAEA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA0B,CAClC,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA;AAEd,CAAA,CAAA,CAAA,CAAA,CACC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,KAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;CACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAQ,CAAa,CAAA,CAAA,CAAA,CAAA,CAAC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAC,CAAA;AAEpD;AAEA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwB,CAChC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA6D,CAAA,CAAA;AAE7D,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,SAAS,CAAE,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,OAAO,CAAC,CAAA;;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA;AAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAE,CAAA;;AAGV,CAAA,CAAA,CAAA,CAAA,OAAO,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACf;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAG,CAAA,CAAA,CAAC,0BAA0B,CAAC;AACtD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,UAAU,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAG,CAAA,CAAA,CAAC,6BAA6B,CAAC;AAC5D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,UAAU,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAG,CAAA,CAAA,CAAC,6BAA6B,CAAC;AAC5D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,oBAAoB,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAG,CAAA,CAAA,CAAC,gCAAgC,CAAC;MAW5D,iBAAiB,CAAA;AAO7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,SAAyB,IAAI,CAAA,CAAA;AACxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAE,CAAA;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,GAAG,CAAe,CAAA;;AAG1C,CAAA,CAAA,CAAA,CAAA,gBAAgB,CACf,CAAA,CAAA,CAAA,CAAY,EACZ,CAAmD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnD,OAA2C,CAAA,CAAA;AAE3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA0B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAE,CAAA;CAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,UAAU,CAAC;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAwB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,OAAO,CAAC;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAuB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAE,CAAA;CACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,GAAG,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;CACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAG,CAAA,CAAA,CAAC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAE,CAAC;;CAEnD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA;AAEvE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA;YACjB,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAE,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC;;CAGvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,SAAgB,CAAC;AAC9C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAI,CACb,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CACrD,CACA,CAAA;CACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC;CAEtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,MAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAE,CAAA;AACxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,OAAO,CAAC;;;AAIlE,CAAA,CAAA,CAAA,CAAA,mBAAmB,CAClB,CAAA,CAAA,CAAA,CAAY,EACZ,CAAmD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnD,OAAwC,CAAA,CAAA;AAExC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,UAAU,CAAC;CAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAA0B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA;CAC/D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAwB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,OAAO,CAAC;AAClD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC5B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAI,KAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;YACpB,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAC9C;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAE,CAAA;CACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC;CAEtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,MAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAE,CAAA;AACxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3B,MAAM,CAAC,CAAA,CAAA,CAAA,CAAI,CACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACf,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,OAAO,CACd;;;AAIH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAAS,CAAA,CAAA;CACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAA6B,CAAE,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAE,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,MAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAE,CAAA;AAClE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC;;CAGlB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA;CACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAqB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAG,CAAA,CAAA,CAAA,CAAE,CAAC,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAgB,CAAC,CAAA,CAAE,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,EAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;CAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,GAAG,CAAI,CAAA,CAAA,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,EAAE,CAAC;AAChC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC;AAEF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwB,CAAG,CAAA,CAAA,CAAA,CAAE,CAAC,CAAwB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC5D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAgB,CAAC,CAAA,CAAE,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA0B,EAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;CACrD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,GAAG,CAAI,CAAA,CAAA,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAwB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,EAAE,CAAC;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC;AACF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAgB,CAAC,CAAA,CAAE,EAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,IAAI,CAAC;;;;;;;;;AAUpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAgB,CAAC,CAAA,CAAE,EAAE,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,eAAe,CAAC;AACnD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAK,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,EAAE,CAAE,CAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,UAAU,CAAC;AACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAgB,CAAC,CAAA,CAAE,EAAE,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,MAAM,CAAC;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAE,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAC,EAAE,CAAE,CAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAI,KAAK,CAAE,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,OAAO,CAAE,CAAA;AACtD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA;CACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAA,CAAE,CAAC;;CAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAG,CAAE,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC;;CAGnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,qBAAqB,CAAE,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAI,CAAA,CAAA,CAAA;;;;CAKd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,YAAY,CAAE,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAI,CAAA,CAAA,CAAA;;;CAIb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAgB,CAAC,CAAA,CAAE,EAAE,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,SAAS,CAAC;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAgB,CAAC,CAAA,CAAE,EAAE,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,IAAI,CAAC;AAE3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAC,CAAC,EAAE,CAAC;CAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,qBAAqB,CAAE,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAI,CAAA,CAAA,CAAA;;AAGZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,UAAU,CAAC;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAE,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAC,EAAE,CAAE,CAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;CAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,MAAM,CAAC,CAAA,CAAA,CAAA,CAAI,KAAK,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA;CACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,IAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAE,CAAC;;CAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAG,CAAE,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC;;CAGnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,qBAAqB,CAAE,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAI,CAAA,CAAA,CAAA;;;;CAKd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,YAAY,CAAE,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAI,CAAA,CAAA,CAAA;;;AAIb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAE,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAgB,CAAC,CAAA,CAAE,EAAE,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,cAAc,CAAC;AAClD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAE,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAC,EAAE,CAAE,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAgB,CAAC,CAAA,CAAE,EAAE,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,MAAM,CAAC;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,UAAU,CAAC;AACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAE,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAC,EAAE,CAAE,CAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAI,KAAK,CAAE,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,OAAO,CAAE,CAAA;AACvD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA;CACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAA,CAAE,CAAC;;CAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAG,CAAE,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC;;CAGnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,qBAAqB,CAAE,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAI,CAAA,CAAA,CAAA;;;;CAKd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,YAAY,CAAE,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAI,CAAA,CAAA,CAAA;;;;;CAIL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAgB,CAAC,CAAA,CAAE,EAAE,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,IAAI,CAAC;AACxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAgB,CAAC,CAAA,CAAE,EAAE,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,IAAI,CAAC;;AAE3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;AAI7B,CAAA,CAAA,CAAA,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAC,CAAC,GAAU;AACjC;AAED,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAE5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAuB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACtC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,SAAyB,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmC,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,OAAO,CAAA,CAAA;CAElE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,UAAU,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,aAAa,CAAC;AAClD,CAAA,CAAA,CAAA,CAAA,KACC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAa,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC9B,OAAO,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC3B,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CACzB,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAE,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAC,EAAE,CAAE,CAAA;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;CAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAG,CAAA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA;CACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;CAGD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAG,CAAA,CAAA,CAAC,QAAQ,CAAC;CACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,MAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAE,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,OAAO,CAAC;;;;AAI3E;AAEgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA0B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACzC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,SAAyB,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmC,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,OAAO,CAAA,CAAA;CAElE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,UAAU,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,aAAa,CAAC;AAClD,CAAA,CAAA,CAAA,CAAA,KACC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAa,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC9B,OAAO,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAC3B,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CACzB,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAE,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAC,EAAE,CAAE,CAAA;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;CAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAC,CAAG,CAAA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA;CACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;CAGD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,QAAQ,CAAC;CACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,MAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAE,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3B,MAAM,CAAC,CAAA,CAAA,CAAA,CAAI,CACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACf,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,OAAO,CACd;;;;AAIL;AAEM,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAyB,CAAA,CAAA;AAC5D,CAAA,CAAA,CAAA,CAAA,MAAM,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,UAAU,CAAC;AACpC,CAAA,CAAA,CAAA,CAAA,MAAM,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,UAAU,CAAC;AACpC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAE,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAC,EAAE,CAAE,CAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,SAAS,CAAE,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3B,MAAM,CAAC,CAAA,CAAA,CAAA,CAAI,CACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACf,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,OAAO,CACd;;;AAIH,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC;CACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA;AAClB;;"}
|
package/html.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var crank = require('./crank.cjs');
|
|
4
|
+
var _css = require('./_css.cjs');
|
|
4
5
|
|
|
5
6
|
const voidTags = new Set([
|
|
6
7
|
"area",
|
|
@@ -42,7 +43,9 @@ function printStyleObject(style) {
|
|
|
42
43
|
const cssStrings = [];
|
|
43
44
|
for (const [name, value] of Object.entries(style)) {
|
|
44
45
|
if (value != null) {
|
|
45
|
-
|
|
46
|
+
const cssName = _css.camelToKebabCase(name);
|
|
47
|
+
const cssValue = _css.formatStyleValue(cssName, value);
|
|
48
|
+
cssStrings.push(`${cssName}:${cssValue};`);
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
51
|
return cssStrings.join("");
|
|
@@ -50,31 +53,14 @@ function printStyleObject(style) {
|
|
|
50
53
|
function printAttrs(props) {
|
|
51
54
|
const attrs = [];
|
|
52
55
|
for (let [name, value] of Object.entries(props)) {
|
|
53
|
-
|
|
54
|
-
// This should be handled by the core library.
|
|
55
|
-
if (name === "children" ||
|
|
56
|
-
name === "innerHTML" ||
|
|
57
|
-
name === "key" ||
|
|
58
|
-
name === "ref" ||
|
|
59
|
-
name === "copy" ||
|
|
60
|
-
name.startsWith("prop:") ||
|
|
61
|
-
// TODO: Remove deprecated special props
|
|
62
|
-
name === "crank-key" ||
|
|
63
|
-
name === "crank-ref" ||
|
|
64
|
-
name === "crank-static" ||
|
|
65
|
-
name === "c-key" ||
|
|
66
|
-
name === "c-ref" ||
|
|
67
|
-
name === "c-static" ||
|
|
68
|
-
name === "$key" ||
|
|
69
|
-
name === "$ref" ||
|
|
70
|
-
name === "$static") {
|
|
56
|
+
if (name === "innerHTML" || name.startsWith("prop:")) {
|
|
71
57
|
continue;
|
|
72
58
|
}
|
|
73
59
|
else if (name === "style") {
|
|
74
60
|
if (typeof value === "string") {
|
|
75
61
|
attrs.push(`style="${escape(value)}"`);
|
|
76
62
|
}
|
|
77
|
-
else if (typeof value === "object") {
|
|
63
|
+
else if (typeof value === "object" && value !== null) {
|
|
78
64
|
attrs.push(`style="${escape(printStyleObject(value))}"`);
|
|
79
65
|
}
|
|
80
66
|
}
|
|
@@ -113,8 +99,8 @@ const impl = {
|
|
|
113
99
|
create() {
|
|
114
100
|
return { value: "" };
|
|
115
101
|
},
|
|
116
|
-
text(
|
|
117
|
-
return escape(
|
|
102
|
+
text({ value }) {
|
|
103
|
+
return { value: escape(value) };
|
|
118
104
|
},
|
|
119
105
|
read(value) {
|
|
120
106
|
if (Array.isArray(value)) {
|
|
@@ -127,15 +113,15 @@ const impl = {
|
|
|
127
113
|
return value;
|
|
128
114
|
}
|
|
129
115
|
else {
|
|
130
|
-
return value.value;
|
|
116
|
+
return value.value || "";
|
|
131
117
|
}
|
|
132
118
|
},
|
|
133
|
-
arrange(tag, node, props, children) {
|
|
119
|
+
arrange({ tag, tagName, node, props, children, }) {
|
|
134
120
|
if (tag === crank.Portal) {
|
|
135
121
|
return;
|
|
136
122
|
}
|
|
137
123
|
else if (typeof tag !== "string") {
|
|
138
|
-
throw new Error(`Unknown tag: ${
|
|
124
|
+
throw new Error(`Unknown tag: ${tagName}`);
|
|
139
125
|
}
|
|
140
126
|
const attrs = printAttrs(props);
|
|
141
127
|
const open = `<${tag}${attrs.length ? " " : ""}${attrs}>`;
|
package/html.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.cjs","sources":["../src/html.ts"],"sourcesContent":["import {Portal, Renderer} from \"./crank.js\";\nimport type {ElementValue,
|
|
1
|
+
{"version":3,"file":"html.cjs","sources":["../src/html.ts"],"sourcesContent":["import {Portal, Renderer} from \"./crank.js\";\nimport type {ElementValue, RenderAdapter} from \"./crank.js\";\nimport {camelToKebabCase, formatStyleValue} from \"./_css.js\";\n\nconst voidTags = new Set([\n\t\"area\",\n\t\"base\",\n\t\"br\",\n\t\"col\",\n\t\"command\",\n\t\"embed\",\n\t\"hr\",\n\t\"img\",\n\t\"input\",\n\t\"keygen\",\n\t\"link\",\n\t\"meta\",\n\t\"param\",\n\t\"source\",\n\t\"track\",\n\t\"wbr\",\n]);\n\nfunction escape(text: string): string {\n\treturn text.replace(/[&<>\"']/g, (match) => {\n\t\tswitch (match) {\n\t\t\tcase \"&\":\n\t\t\t\treturn \"&\";\n\t\t\tcase \"<\":\n\t\t\t\treturn \"<\";\n\t\t\tcase \">\":\n\t\t\t\treturn \">\";\n\t\t\tcase '\"':\n\t\t\t\treturn \""\";\n\t\t\tcase \"'\":\n\t\t\t\treturn \"'\";\n\t\t\tdefault:\n\t\t\t\treturn \"\";\n\t\t}\n\t});\n}\n\nfunction printStyleObject(style: Record<string, any>): string {\n\tconst cssStrings = [];\n\tfor (const [name, value] of Object.entries(style)) {\n\t\tif (value != null) {\n\t\t\tconst cssName = camelToKebabCase(name);\n\t\t\tconst cssValue = formatStyleValue(cssName, value);\n\t\t\tcssStrings.push(`${cssName}:${cssValue};`);\n\t\t}\n\t}\n\n\treturn cssStrings.join(\"\");\n}\n\nfunction printAttrs(props: Record<string, any>): string {\n\tconst attrs: string[] = [];\n\tfor (let [name, value] of Object.entries(props)) {\n\t\tif (name === \"innerHTML\" || name.startsWith(\"prop:\")) {\n\t\t\tcontinue;\n\t\t} else if (name === \"style\") {\n\t\t\tif (typeof value === \"string\") {\n\t\t\t\tattrs.push(`style=\"${escape(value)}\"`);\n\t\t\t} else if (typeof value === \"object\" && value !== null) {\n\t\t\t\tattrs.push(`style=\"${escape(printStyleObject(value))}\"`);\n\t\t\t}\n\t\t} else if (name === \"className\") {\n\t\t\tif (\"class\" in props || typeof value !== \"string\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattrs.push(`class=\"${escape(value)}\"`);\n\t\t} else {\n\t\t\tif (name.startsWith(\"attr:\")) {\n\t\t\t\tname = name.slice(\"attr:\".length);\n\t\t\t}\n\t\t\tif (typeof value === \"string\") {\n\t\t\t\tattrs.push(`${escape(name)}=\"${escape(value)}\"`);\n\t\t\t} else if (typeof value === \"number\") {\n\t\t\t\tattrs.push(`${escape(name)}=\"${value}\"`);\n\t\t\t} else if (value === true) {\n\t\t\t\tattrs.push(`${escape(name)}`);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn attrs.join(\" \");\n}\n\ninterface Node {\n\tvalue?: string;\n}\n\nfunction join(children: Array<Node | string>): string {\n\tlet result = \"\";\n\tfor (let i = 0; i < children.length; i++) {\n\t\tconst child = children[i];\n\t\tresult += typeof child === \"string\" ? child : child.value;\n\t}\n\n\treturn result;\n}\n\nexport const impl: Partial<RenderAdapter<Node, undefined, Node, string>> = {\n\tcreate(): Node {\n\t\treturn {value: \"\"};\n\t},\n\n\ttext({value}: {value: string}): Node {\n\t\treturn {value: escape(value)};\n\t},\n\n\tread(value: ElementValue<Node>): string {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn join(value);\n\t\t} else if (typeof value === \"undefined\") {\n\t\t\treturn \"\";\n\t\t} else if (typeof value === \"string\") {\n\t\t\treturn value;\n\t\t} else {\n\t\t\treturn value.value || \"\";\n\t\t}\n\t},\n\n\tarrange({\n\t\ttag,\n\t\ttagName,\n\t\tnode,\n\t\tprops,\n\t\tchildren,\n\t}: {\n\t\ttag: string | symbol;\n\t\ttagName: string;\n\t\tnode: Node;\n\t\tprops: Record<string, any>;\n\t\tchildren: Array<Node | string>;\n\t}): void {\n\t\tif (tag === Portal) {\n\t\t\treturn;\n\t\t} else if (typeof tag !== \"string\") {\n\t\t\tthrow new Error(`Unknown tag: ${tagName}`);\n\t\t}\n\n\t\tconst attrs = printAttrs(props);\n\t\tconst open = `<${tag}${attrs.length ? \" \" : \"\"}${attrs}>`;\n\t\tlet result: string;\n\t\tif (voidTags.has(tag)) {\n\t\t\tresult = open;\n\t\t} else {\n\t\t\tconst close = `</${tag}>`;\n\t\t\tconst contents =\n\t\t\t\t\"innerHTML\" in props ? props[\"innerHTML\"] : join(children);\n\t\t\tresult = `${open}${contents}${close}`;\n\t\t}\n\n\t\tnode.value = result;\n\t},\n};\n\nexport class HTMLRenderer extends Renderer<Node, undefined, any, string> {\n\tconstructor() {\n\t\tsuper(impl);\n\t}\n}\n\nexport const renderer = new HTMLRenderer();\n\ndeclare global {\n\tmodule Crank {\n\t\tinterface EventMap extends GlobalEventHandlersEventMap {}\n\t}\n}\n"],"names":["camelToKebabCase","formatStyleValue","Portal","Renderer"],"mappings":"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"}
|
package/html.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Renderer } from "./crank.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { RenderAdapter } from "./crank.js";
|
|
3
3
|
interface Node {
|
|
4
|
-
value
|
|
4
|
+
value?: string;
|
|
5
5
|
}
|
|
6
|
-
export declare const impl: Partial<
|
|
6
|
+
export declare const impl: Partial<RenderAdapter<Node, undefined, Node, string>>;
|
|
7
7
|
export declare class HTMLRenderer extends Renderer<Node, undefined, any, string> {
|
|
8
8
|
constructor();
|
|
9
9
|
}
|