FRE-600: Fix code review blockers

- Consolidated duplicate UndoManagers to single instance
- Fixed connection promise to only resolve on 'connected' status
- Fixed WebSocketProvider import (WebsocketProvider)
- Added proper doc.destroy() cleanup
- Renamed isPresenceInitialized property to avoid conflict

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-04-25 00:08:01 -04:00
parent 65b552bb08
commit 7c684a42cc
48450 changed files with 5679671 additions and 383 deletions

View File

@@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Connect = exports.StandardConnect = void 0;
/** Name of the feature. */
exports.StandardConnect = 'standard:connect';
/**
* @deprecated Use {@link StandardConnect} instead.
*
* @group Deprecated
*/
exports.Connect = exports.StandardConnect;
//# sourceMappingURL=connect.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":";;;AAEA,2BAA2B;AACd,QAAA,eAAe,GAAG,kBAAkB,CAAC;AAClD;;;;GAIG;AACU,QAAA,OAAO,GAAG,uBAAe,CAAC"}

View File

@@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Disconnect = exports.StandardDisconnect = void 0;
/** Name of the feature. */
exports.StandardDisconnect = 'standard:disconnect';
/**
* @deprecated Use {@link StandardDisconnect} instead.
*
* @group Deprecated
*/
exports.Disconnect = exports.StandardDisconnect;
//# sourceMappingURL=disconnect.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../src/disconnect.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AACd,QAAA,kBAAkB,GAAG,qBAAqB,CAAC;AACxD;;;;GAIG;AACU,QAAA,UAAU,GAAG,0BAAkB,CAAC"}

View File

@@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Events = exports.StandardEvents = void 0;
/** Name of the feature. */
exports.StandardEvents = 'standard:events';
/**
* @deprecated Use {@link StandardEvents} instead.
*
* @group Deprecated
*/
exports.Events = exports.StandardEvents;
//# sourceMappingURL=events.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":";;;AAEA,2BAA2B;AACd,QAAA,cAAc,GAAG,iBAAiB,CAAC;AAChD;;;;GAIG;AACU,QAAA,MAAM,GAAG,sBAAc,CAAC"}

View File

@@ -0,0 +1,20 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./connect.js"), exports);
__exportStar(require("./disconnect.js"), exports);
__exportStar(require("./events.js"), exports);
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAoBA,+CAA6B;AAC7B,kDAAgC;AAChC,8CAA4B"}

View File

@@ -0,0 +1 @@
{ "type": "commonjs" }

View File

@@ -0,0 +1,9 @@
/** Name of the feature. */
export const StandardConnect = 'standard:connect';
/**
* @deprecated Use {@link StandardConnect} instead.
*
* @group Deprecated
*/
export const Connect = StandardConnect;
//# sourceMappingURL=connect.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"AAEA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAClD;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,eAAe,CAAC"}

View File

@@ -0,0 +1,9 @@
/** Name of the feature. */
export const StandardDisconnect = 'standard:disconnect';
/**
* @deprecated Use {@link StandardDisconnect} instead.
*
* @group Deprecated
*/
export const Disconnect = StandardDisconnect;
//# sourceMappingURL=disconnect.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../src/disconnect.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AACxD;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC"}

View File

@@ -0,0 +1,9 @@
/** Name of the feature. */
export const StandardEvents = 'standard:events';
/**
* @deprecated Use {@link StandardEvents} instead.
*
* @group Deprecated
*/
export const Events = StandardEvents;
//# sourceMappingURL=events.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":"AAEA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAChD;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,cAAc,CAAC"}

View File

@@ -0,0 +1,4 @@
export * from './connect.js';
export * from './disconnect.js';
export * from './events.js';
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAoBA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC"}

View File

@@ -0,0 +1,93 @@
import type { WalletAccount } from '@wallet-standard/base';
/** Name of the feature. */
export declare const StandardConnect = "standard:connect";
/**
* @deprecated Use {@link StandardConnect} instead.
*
* @group Deprecated
*/
export declare const Connect = "standard:connect";
/**
* `standard:connect` is a {@link "@wallet-standard/base".Wallet.features | feature} that may be implemented by a
* {@link "@wallet-standard/base".Wallet} to allow the app to obtain authorization to use
* {@link "@wallet-standard/base".Wallet.accounts}.
*
* @group Connect
*/
export type StandardConnectFeature = {
/** Name of the feature. */
readonly [StandardConnect]: {
/** Version of the feature implemented by the Wallet. */
readonly version: StandardConnectVersion;
/** Method to call to use the feature. */
readonly connect: StandardConnectMethod;
};
};
/**
* @deprecated Use {@link StandardConnectFeature} instead.
*
* @group Deprecated
*/
export type ConnectFeature = StandardConnectFeature;
/**
* Version of the {@link StandardConnectFeature} implemented by a {@link "@wallet-standard/base".Wallet}.
*
* @group Connect
*/
export type StandardConnectVersion = '1.0.0';
/**
* @deprecated Use {@link StandardConnectVersion} instead.
*
* @group Deprecated
*/
export type ConnectVersion = StandardConnectVersion;
/**
* Method to call to use the {@link StandardConnectFeature}.
*
* @group Connect
*/
export type StandardConnectMethod = (input?: StandardConnectInput) => Promise<StandardConnectOutput>;
/**
* @deprecated Use {@link StandardConnectMethod} instead.
*
* @group Deprecated
*/
export type ConnectMethod = StandardConnectMethod;
/**
* Input for the {@link StandardConnectMethod}.
*
* @group Connect
*/
export interface StandardConnectInput {
/**
* By default, using the {@link StandardConnectFeature} should prompt the user to request authorization to accounts.
* Set the `silent` flag to `true` to request accounts that have already been authorized without prompting.
*
* This flag may or may not be used by the Wallet and the app should not depend on it being used.
* If this flag is used by the Wallet, the Wallet should not prompt the user, and should return only the accounts
* that the app is authorized to use.
*/
readonly silent?: boolean;
}
/**
* @deprecated Use {@link StandardConnectInput} instead.
*
* @group Deprecated
*/
export type ConnectInput = StandardConnectInput;
/**
* Output of the {@link StandardConnectMethod}.
*
* @group Connect
*/
export interface StandardConnectOutput {
/** List of accounts in the {@link "@wallet-standard/base".Wallet} that the app has been authorized to use. */
readonly accounts: readonly WalletAccount[];
}
/**
* @deprecated Use {@link StandardConnectOutput} instead.
*
* @group Deprecated
*/
export type ConnectOutput = StandardConnectOutput;
//# sourceMappingURL=connect.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,2BAA2B;AAC3B,eAAO,MAAM,eAAe,qBAAqB,CAAC;AAClD;;;;GAIG;AACH,eAAO,MAAM,OAAO,qBAAkB,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACjC,2BAA2B;IAC3B,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE;QACxB,wDAAwD;QACxD,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;QACzC,yCAAyC;QACzC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;KAC3C,CAAC;CACL,CAAC;AACF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAEpD;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC;AAC7C;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAEpD;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;AACrG;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC7B;AACD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,8GAA8G;IAC9G,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;CAC/C;AACD;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,qBAAqB,CAAC"}

View File

@@ -0,0 +1,58 @@
/** Name of the feature. */
export declare const StandardDisconnect = "standard:disconnect";
/**
* @deprecated Use {@link StandardDisconnect} instead.
*
* @group Deprecated
*/
export declare const Disconnect = "standard:disconnect";
/**
* `standard:disconnect` is a {@link "@wallet-standard/base".Wallet.features | feature} that may be implemented by a
* {@link "@wallet-standard/base".Wallet} to allow the app to perform any cleanup work.
*
* This feature may or may not be used by the app and the Wallet should not depend on it being used.
* If this feature is used by the app, the Wallet should perform any cleanup work, but should not revoke authorization
* to use accounts previously granted through the {@link ConnectFeature}.
*
* @group Disconnect
*/
export type StandardDisconnectFeature = {
/** Name of the feature. */
readonly [StandardDisconnect]: {
/** Version of the feature implemented by the Wallet. */
readonly version: StandardDisconnectVersion;
/** Method to call to use the feature. */
readonly disconnect: StandardDisconnectMethod;
};
};
/**
* @deprecated Use {@link StandardDisconnectFeature} instead.
*
* @group Deprecated
*/
export type DisconnectFeature = StandardDisconnectFeature;
/**
* Version of the {@link StandardDisconnectFeature} implemented by a Wallet.
*
* @group Disconnect
*/
export type StandardDisconnectVersion = '1.0.0';
/**
* @deprecated Use {@link StandardDisconnectVersion} instead.
*
* @group Deprecated
*/
export type DisconnectVersion = StandardDisconnectVersion;
/**
* Method to call to use the {@link StandardDisconnectFeature}.
*
* @group Disconnect
*/
export type StandardDisconnectMethod = () => Promise<void>;
/**
* @deprecated Use {@link StandardDisconnectMethod} instead.
*
* @group Deprecated
*/
export type DisconnectMethod = StandardDisconnectMethod;
//# sourceMappingURL=disconnect.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"disconnect.d.ts","sourceRoot":"","sources":["../../src/disconnect.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AACxD;;;;GAIG;AACH,eAAO,MAAM,UAAU,wBAAqB,CAAC;AAE7C;;;;;;;;;GASG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACpC,2BAA2B;IAC3B,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE;QAC3B,wDAAwD;QACxD,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;QAC5C,yCAAyC;QACzC,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;KACjD,CAAC;CACL,CAAC;AACF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC;AAChD;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3D;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,CAAC"}

View File

@@ -0,0 +1,134 @@
import type { Wallet } from '@wallet-standard/base';
/** Name of the feature. */
export declare const StandardEvents = "standard:events";
/**
* @deprecated Use {@link StandardEvents} instead.
*
* @group Deprecated
*/
export declare const Events = "standard:events";
/**
* `standard:events` is a {@link "@wallet-standard/base".Wallet.features | feature} that may be implemented by a
* {@link "@wallet-standard/base".Wallet} to allow the app to add an event listener and subscribe to events emitted by
* the Wallet when properties of the Wallet {@link StandardEventsListeners.change}.
*
* @group Events
*/
export type StandardEventsFeature = {
/** Name of the feature. */
readonly [StandardEvents]: {
/** Version of the feature implemented by the {@link "@wallet-standard/base".Wallet}. */
readonly version: StandardEventsVersion;
/** Method to call to use the feature. */
readonly on: StandardEventsOnMethod;
};
};
/**
* @deprecated Use {@link StandardEventsFeature} instead.
*
* @group Deprecated
*/
export type EventsFeature = StandardEventsFeature;
/**
* Version of the {@link StandardEventsFeature} implemented by a {@link "@wallet-standard/base".Wallet}.
*
* @group Events
*/
export type StandardEventsVersion = '1.0.0';
/**
* @deprecated Use {@link StandardEventsVersion} instead.
*
* @group Deprecated
*/
export type EventsVersion = StandardEventsVersion;
/**
* Method to call to use the {@link StandardEventsFeature}.
*
* @param event Event type to listen for. {@link StandardEventsListeners.change | `change`} is the only event type.
* @param listener Function that will be called when an event of the type is emitted.
*
* @return
* `off` function which may be called to remove the event listener and unsubscribe from events.
*
* As with all event listeners, be careful to avoid memory leaks.
*
* @group Events
*/
export type StandardEventsOnMethod = <E extends StandardEventsNames>(event: E, listener: StandardEventsListeners[E]) => () => void;
/**
* @deprecated Use {@link StandardEventsOnMethod} instead.
*
* @group Deprecated
*/
export type EventsOnMethod = StandardEventsOnMethod;
/**
* Types of event listeners of the {@link StandardEventsFeature}.
*
* @group Events
*/
export interface StandardEventsListeners {
/**
* Listener that will be called when {@link StandardEventsChangeProperties | properties} of the
* {@link "@wallet-standard/base".Wallet} have changed.
*
* @param properties Properties that changed with their **new** values.
*/
change(properties: StandardEventsChangeProperties): void;
}
/**
* @deprecated Use {@link StandardEventsListeners} instead.
*
* @group Deprecated
*/
export type EventsListeners = StandardEventsListeners;
/**
* Names of {@link StandardEventsListeners} that can be listened for.
*
* @group Events
*/
export type StandardEventsNames = keyof StandardEventsListeners;
/**
* @deprecated Use {@link StandardEventsNames} instead.
*
* @group Deprecated
*/
export type EventsNames = StandardEventsNames;
/**
* Properties of a {@link "@wallet-standard/base".Wallet} that {@link StandardEventsListeners.change | changed} with their
* **new** values.
*
* @group Events
*/
export interface StandardEventsChangeProperties {
/**
* {@link "@wallet-standard/base".Wallet.chains | Chains} supported by the Wallet.
*
* The Wallet should only define this field if the value of the property has changed.
*
* The value must be the **new** value of the property.
*/
readonly chains?: Wallet['chains'];
/**
* {@link "@wallet-standard/base".Wallet.features | Features} supported by the Wallet.
*
* The Wallet should only define this field if the value of the property has changed.
*
* The value must be the **new** value of the property.
*/
readonly features?: Wallet['features'];
/**
* {@link "@wallet-standard/base".Wallet.accounts | Accounts} that the app is authorized to use.
*
* The Wallet should only define this field if the value of the property has changed.
*
* The value must be the **new** value of the property.
*/
readonly accounts?: Wallet['accounts'];
}
/**
* @deprecated Use {@link StandardEventsChangeProperties} instead.
*
* @group Deprecated
*/
export type EventsChangeProperties = StandardEventsChangeProperties;
//# sourceMappingURL=events.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,2BAA2B;AAC3B,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAChD;;;;GAIG;AACH,eAAO,MAAM,MAAM,oBAAiB,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAChC,2BAA2B;IAC3B,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE;QACvB,wFAAwF;QACxF,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;QACxC,yCAAyC;QACzC,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;KACvC,CAAC;CACL,CAAC;AACF;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAElD;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAC5C;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,SAAS,mBAAmB,EAC/D,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,uBAAuB,CAAC,CAAC,CAAC,KACnC,MAAM,IAAI,CAAC;AAChB;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACpC;;;;;OAKG;IACH,MAAM,CAAC,UAAU,EAAE,8BAA8B,GAAG,IAAI,CAAC;CAC5D;AACD;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,uBAAuB,CAAC;AAChE;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,WAAW,8BAA8B;IAC3C;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACvC;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;CAC1C;AACD;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,8BAA8B,CAAC"}

View File

@@ -0,0 +1,21 @@
import type { WalletWithFeatures } from '@wallet-standard/base';
import type { StandardConnectFeature } from './connect.js';
import type { StandardDisconnectFeature } from './disconnect.js';
import type { StandardEventsFeature } from './events.js';
/**
* Type alias for some or all {@link "@wallet-standard/base".Wallet.features} implemented within the reserved `standard`
* namespace.
*
* @group Features
*/
export type StandardFeatures = StandardConnectFeature | StandardDisconnectFeature | StandardEventsFeature;
/**
* Type alias for a {@link "@wallet-standard/base".Wallet} that implements some or all {@link StandardFeatures}.
*
* @group Features
*/
export type WalletWithStandardFeatures = WalletWithFeatures<StandardFeatures>;
export * from './connect.js';
export * from './disconnect.js';
export * from './events.js';
//# sourceMappingURL=index.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,sBAAsB,GAAG,yBAAyB,GAAG,qBAAqB,CAAC;AAE1G;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;AAE9E,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC"}