@campnetwork/origin 1.2.0-1 → 1.2.0-3

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.
@@ -3284,7 +3284,7 @@ function registerIpNFT(source, deadline, licenseTerms, metadata, fileKey, parent
3284
3284
  paymentToken: licenseTerms.paymentToken,
3285
3285
  },
3286
3286
  metadata,
3287
- parentId: parents || [],
3287
+ parentId: parents ? parents.map((p) => p.toString()) : [],
3288
3288
  };
3289
3289
  if (fileKey !== undefined) {
3290
3290
  body.fileKey = fileKey;
@@ -3478,6 +3478,46 @@ function approveIfNeeded(_a) {
3478
3478
  });
3479
3479
  }
3480
3480
 
3481
+ /**
3482
+ * Enum representing the status of data in the system.
3483
+ * * - ACTIVE: The data is currently active and available.
3484
+ * * - PENDING_DELETE: The data is scheduled for deletion but not yet removed.
3485
+ * * - DELETED: The data has been deleted and is no longer available.
3486
+ */
3487
+ var DataStatus;
3488
+ (function (DataStatus) {
3489
+ DataStatus[DataStatus["ACTIVE"] = 0] = "ACTIVE";
3490
+ DataStatus[DataStatus["PENDING_DELETE"] = 1] = "PENDING_DELETE";
3491
+ DataStatus[DataStatus["DELETED"] = 2] = "DELETED";
3492
+ })(DataStatus || (DataStatus = {}));
3493
+ /**
3494
+ * Creates license terms for a digital asset.
3495
+ * @param price The price of the asset in wei.
3496
+ * @param duration The duration of the license in seconds.
3497
+ * @param royaltyBps The royalty percentage in basis points (0-10000).
3498
+ * @param paymentToken The address of the payment token (ERC20 / address(0) for native currency).
3499
+ * @returns The created license terms.
3500
+ */
3501
+ const createLicenseTerms = (price, duration, royaltyBps, paymentToken) => {
3502
+ if (royaltyBps < constants.MIN_ROYALTY_BPS ||
3503
+ royaltyBps > constants.MAX_ROYALTY_BPS) {
3504
+ throw new Error(`Royalty basis points must be between ${constants.MIN_ROYALTY_BPS} and ${constants.MAX_ROYALTY_BPS}`);
3505
+ }
3506
+ if (duration < constants.MIN_LICENSE_DURATION ||
3507
+ duration > constants.MAX_LICENSE_DURATION) {
3508
+ throw new Error(`Duration must be between ${constants.MIN_LICENSE_DURATION} and ${constants.MAX_LICENSE_DURATION} seconds`);
3509
+ }
3510
+ if (price < constants.MIN_PRICE) {
3511
+ throw new Error(`Price must be at least ${constants.MIN_PRICE} wei`);
3512
+ }
3513
+ return {
3514
+ price,
3515
+ duration,
3516
+ royaltyBps,
3517
+ paymentToken,
3518
+ };
3519
+ };
3520
+
3481
3521
  var _Origin_instances, _Origin_generateURL, _Origin_setOriginStatus, _Origin_waitForTxReceipt, _Origin_ensureChainId, _Origin_getCurrentAccount, _Origin_resolveWalletAddress;
3482
3522
  /**
3483
3523
  * The Origin class
@@ -4115,6 +4155,11 @@ _Origin_instances = new WeakSet(), _Origin_generateURL = function _Origin_genera
4115
4155
  if (!this.viemClient) {
4116
4156
  throw new Error("WalletClient not connected. Please connect a wallet.");
4117
4157
  }
4158
+ // If account is already set on the client, return it directly
4159
+ if (this.viemClient.account) {
4160
+ return this.viemClient.account.address;
4161
+ }
4162
+ // Otherwise request accounts (browser wallet flow)
4118
4163
  const accounts = yield this.viemClient.request({
4119
4164
  method: "eth_requestAccounts",
4120
4165
  params: [],
@@ -4148,7 +4193,210 @@ _Origin_instances = new WeakSet(), _Origin_generateURL = function _Origin_genera
4148
4193
  });
4149
4194
  };
4150
4195
 
4151
- var _Auth_instances, _Auth_triggers, _Auth_trigger, _Auth_loadAuthStatusFromStorage, _Auth_requestAccount, _Auth_fetchNonce, _Auth_verifySignature, _Auth_createMessage;
4196
+ /**
4197
+ * Adapter for viem WalletClient
4198
+ */
4199
+ class ViemSignerAdapter {
4200
+ constructor(signer) {
4201
+ this.type = "viem";
4202
+ this.signer = signer;
4203
+ }
4204
+ getAddress() {
4205
+ return __awaiter(this, void 0, void 0, function* () {
4206
+ if (this.signer.account) {
4207
+ return this.signer.account.address;
4208
+ }
4209
+ const accounts = yield this.signer.request({
4210
+ method: "eth_requestAccounts",
4211
+ params: [],
4212
+ });
4213
+ if (!accounts || accounts.length === 0) {
4214
+ throw new Error("No accounts found in viem wallet client");
4215
+ }
4216
+ return accounts[0];
4217
+ });
4218
+ }
4219
+ signMessage(message) {
4220
+ return __awaiter(this, void 0, void 0, function* () {
4221
+ const address = yield this.getAddress();
4222
+ return yield this.signer.signMessage({
4223
+ account: address,
4224
+ message,
4225
+ });
4226
+ });
4227
+ }
4228
+ getChainId() {
4229
+ return __awaiter(this, void 0, void 0, function* () {
4230
+ var _a;
4231
+ return ((_a = this.signer.chain) === null || _a === void 0 ? void 0 : _a.id) || 1;
4232
+ });
4233
+ }
4234
+ }
4235
+ /**
4236
+ * Adapter for ethers Signer (v5 and v6)
4237
+ */
4238
+ class EthersSignerAdapter {
4239
+ constructor(signer) {
4240
+ this.type = "ethers";
4241
+ this.signer = signer;
4242
+ }
4243
+ getAddress() {
4244
+ return __awaiter(this, void 0, void 0, function* () {
4245
+ // Works for both ethers v5 and v6
4246
+ if (typeof this.signer.getAddress === "function") {
4247
+ return yield this.signer.getAddress();
4248
+ }
4249
+ if (this.signer.address) {
4250
+ return this.signer.address;
4251
+ }
4252
+ throw new Error("Unable to get address from ethers signer");
4253
+ });
4254
+ }
4255
+ signMessage(message) {
4256
+ return __awaiter(this, void 0, void 0, function* () {
4257
+ if (typeof this.signer.signMessage !== "function") {
4258
+ throw new Error("Signer does not support signMessage");
4259
+ }
4260
+ return yield this.signer.signMessage(message);
4261
+ });
4262
+ }
4263
+ getChainId() {
4264
+ return __awaiter(this, void 0, void 0, function* () {
4265
+ // Try ethers v6 first
4266
+ if (this.signer.provider &&
4267
+ typeof this.signer.provider.getNetwork === "function") {
4268
+ const network = yield this.signer.provider.getNetwork();
4269
+ // ethers v6 returns bigint, v5 returns number
4270
+ return typeof network.chainId === "bigint"
4271
+ ? Number(network.chainId)
4272
+ : network.chainId;
4273
+ }
4274
+ // Fallback for ethers v5
4275
+ if (typeof this.signer.getChainId === "function") {
4276
+ return yield this.signer.getChainId();
4277
+ }
4278
+ // Default to mainnet if we can't determine
4279
+ return 484;
4280
+ });
4281
+ }
4282
+ }
4283
+ /**
4284
+ * Adapter for custom signer implementations
4285
+ */
4286
+ class CustomSignerAdapter {
4287
+ constructor(signer) {
4288
+ this.type = "custom";
4289
+ this.signer = signer;
4290
+ }
4291
+ getAddress() {
4292
+ return __awaiter(this, void 0, void 0, function* () {
4293
+ if (typeof this.signer.getAddress === "function") {
4294
+ return yield this.signer.getAddress();
4295
+ }
4296
+ if (this.signer.address) {
4297
+ return this.signer.address;
4298
+ }
4299
+ throw new Error("Custom signer must implement getAddress() or have address property");
4300
+ });
4301
+ }
4302
+ signMessage(message) {
4303
+ return __awaiter(this, void 0, void 0, function* () {
4304
+ if (typeof this.signer.signMessage !== "function") {
4305
+ throw new Error("Custom signer must implement signMessage()");
4306
+ }
4307
+ return yield this.signer.signMessage(message);
4308
+ });
4309
+ }
4310
+ getChainId() {
4311
+ return __awaiter(this, void 0, void 0, function* () {
4312
+ if (typeof this.signer.getChainId === "function") {
4313
+ const chainId = yield this.signer.getChainId();
4314
+ return typeof chainId === "bigint" ? Number(chainId) : chainId;
4315
+ }
4316
+ if (this.signer.chainId !== undefined) {
4317
+ return typeof this.signer.chainId === "bigint"
4318
+ ? Number(this.signer.chainId)
4319
+ : this.signer.chainId;
4320
+ }
4321
+ // Default to mainnet
4322
+ return 484;
4323
+ });
4324
+ }
4325
+ }
4326
+ /**
4327
+ * Factory function to create appropriate adapter based on signer type
4328
+ */
4329
+ function createSignerAdapter(signer) {
4330
+ // Check for viem WalletClient
4331
+ if (signer.transport &&
4332
+ signer.chain &&
4333
+ typeof signer.signMessage === "function") {
4334
+ return new ViemSignerAdapter(signer);
4335
+ }
4336
+ // Check for ethers signer (v5 or v6)
4337
+ if (signer._isSigner ||
4338
+ (signer.provider && typeof signer.signMessage === "function")) {
4339
+ return new EthersSignerAdapter(signer);
4340
+ }
4341
+ // Try custom adapter
4342
+ return new CustomSignerAdapter(signer);
4343
+ }
4344
+
4345
+ /**
4346
+ * Browser localStorage adapter
4347
+ */
4348
+ class BrowserStorage {
4349
+ getItem(key) {
4350
+ return __awaiter(this, void 0, void 0, function* () {
4351
+ if (typeof localStorage === "undefined") {
4352
+ return null;
4353
+ }
4354
+ return localStorage.getItem(key);
4355
+ });
4356
+ }
4357
+ setItem(key, value) {
4358
+ return __awaiter(this, void 0, void 0, function* () {
4359
+ if (typeof localStorage !== "undefined") {
4360
+ localStorage.setItem(key, value);
4361
+ }
4362
+ });
4363
+ }
4364
+ removeItem(key) {
4365
+ return __awaiter(this, void 0, void 0, function* () {
4366
+ if (typeof localStorage !== "undefined") {
4367
+ localStorage.removeItem(key);
4368
+ }
4369
+ });
4370
+ }
4371
+ }
4372
+ /**
4373
+ * In-memory storage adapter for Node.js
4374
+ */
4375
+ class MemoryStorage {
4376
+ constructor() {
4377
+ this.storage = new Map();
4378
+ }
4379
+ getItem(key) {
4380
+ return __awaiter(this, void 0, void 0, function* () {
4381
+ return this.storage.get(key) || null;
4382
+ });
4383
+ }
4384
+ setItem(key, value) {
4385
+ return __awaiter(this, void 0, void 0, function* () {
4386
+ this.storage.set(key, value);
4387
+ });
4388
+ }
4389
+ removeItem(key) {
4390
+ return __awaiter(this, void 0, void 0, function* () {
4391
+ this.storage.delete(key);
4392
+ });
4393
+ }
4394
+ clear() {
4395
+ this.storage.clear();
4396
+ }
4397
+ }
4398
+
4399
+ var _Auth_instances, _Auth_triggers, _Auth_isNodeEnvironment, _Auth_signerAdapter, _Auth_storage, _Auth_trigger, _Auth_loadAuthStatusFromStorage, _Auth_requestAccount, _Auth_fetchNonce, _Auth_verifySignature, _Auth_createMessage;
4152
4400
  const createRedirectUriObject = (redirectUri) => {
4153
4401
  const keys = ["twitter", "spotify"];
4154
4402
  if (typeof redirectUri === "object") {
@@ -4185,17 +4433,24 @@ class Auth {
4185
4433
  * @param {string} options.clientId The client ID.
4186
4434
  * @param {string|object} options.redirectUri The redirect URI used for oauth. Leave empty if you want to use the current URL. If you want different redirect URIs for different socials, pass an object with the socials as keys and the redirect URIs as values.
4187
4435
  * @param {("DEVELOPMENT"|"PRODUCTION")} [options.environment="DEVELOPMENT"] The environment to use.
4436
+ * @param {StorageAdapter} [options.storage] Custom storage adapter. Defaults to localStorage in browser, memory storage in Node.js.
4188
4437
  * @throws {APIError} - Throws an error if the clientId is not provided.
4189
4438
  */
4190
- constructor({ clientId, redirectUri, environment = "DEVELOPMENT", }) {
4439
+ constructor({ clientId, redirectUri, environment = "DEVELOPMENT", storage, }) {
4191
4440
  _Auth_instances.add(this);
4192
4441
  _Auth_triggers.set(this, void 0);
4442
+ _Auth_isNodeEnvironment.set(this, void 0);
4443
+ _Auth_signerAdapter.set(this, void 0);
4444
+ _Auth_storage.set(this, void 0);
4193
4445
  if (!clientId) {
4194
4446
  throw new Error("clientId is required");
4195
4447
  }
4196
4448
  if (["PRODUCTION", "DEVELOPMENT"].indexOf(environment) === -1) {
4197
4449
  throw new Error("Invalid environment, must be DEVELOPMENT or PRODUCTION");
4198
4450
  }
4451
+ __classPrivateFieldSet(this, _Auth_isNodeEnvironment, typeof window === "undefined", "f");
4452
+ __classPrivateFieldSet(this, _Auth_storage, storage ||
4453
+ (__classPrivateFieldGet(this, _Auth_isNodeEnvironment, "f") ? new MemoryStorage() : new BrowserStorage()), "f");
4199
4454
  this.viem = null;
4200
4455
  this.environment = ENVIRONMENTS[environment];
4201
4456
  this.redirectUri = createRedirectUriObject(redirectUri);
@@ -4206,9 +4461,12 @@ class Auth {
4206
4461
  this.walletAddress = null;
4207
4462
  this.userId = null;
4208
4463
  __classPrivateFieldSet(this, _Auth_triggers, {}, "f");
4209
- providerStore.subscribe((providers) => {
4210
- __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_trigger).call(this, "providers", providers);
4211
- });
4464
+ // only subscribe to providers in browser environment
4465
+ if (!__classPrivateFieldGet(this, _Auth_isNodeEnvironment, "f")) {
4466
+ providerStore.subscribe((providers) => {
4467
+ __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_trigger).call(this, "providers", providers);
4468
+ });
4469
+ }
4212
4470
  __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_loadAuthStatusFromStorage).call(this);
4213
4471
  }
4214
4472
  /**
@@ -4270,7 +4528,7 @@ class Auth {
4270
4528
  // TODO: only use one of these
4271
4529
  __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_trigger).call(this, "viem", this.viem);
4272
4530
  __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_trigger).call(this, "provider", { provider, info });
4273
- localStorage.setItem("camp-sdk:provider", JSON.stringify(info));
4531
+ __classPrivateFieldGet(this, _Auth_storage, "f").setItem("camp-sdk:provider", JSON.stringify(info));
4274
4532
  }
4275
4533
  /**
4276
4534
  * Set the wallet address. This is useful for edge cases where the provider can't return the wallet address. Don't use this unless you know what you're doing.
@@ -4291,7 +4549,11 @@ class Auth {
4291
4549
  console.warn("No wallet address found in local storage. Please connect your wallet again.");
4292
4550
  return;
4293
4551
  }
4294
- const lastProvider = JSON.parse(localStorage.getItem("camp-sdk:provider") || "{}");
4552
+ const providerJson = yield __classPrivateFieldGet(this, _Auth_storage, "f").getItem("camp-sdk:provider");
4553
+ if (!providerJson) {
4554
+ return;
4555
+ }
4556
+ const lastProvider = JSON.parse(providerJson);
4295
4557
  let provider;
4296
4558
  const providers = (_a = providerStore.value()) !== null && _a !== void 0 ? _a : [];
4297
4559
  // first pass: try to find provider by UUID/name and check if it has the right address
@@ -4390,10 +4652,11 @@ class Auth {
4390
4652
  this.userId = null;
4391
4653
  this.jwt = null;
4392
4654
  this.origin = null;
4393
- localStorage.removeItem("camp-sdk:wallet-address");
4394
- localStorage.removeItem("camp-sdk:user-id");
4395
- localStorage.removeItem("camp-sdk:jwt");
4396
- localStorage.removeItem("camp-sdk:environment");
4655
+ __classPrivateFieldSet(this, _Auth_signerAdapter, undefined, "f");
4656
+ yield __classPrivateFieldGet(this, _Auth_storage, "f").removeItem("camp-sdk:wallet-address");
4657
+ yield __classPrivateFieldGet(this, _Auth_storage, "f").removeItem("camp-sdk:user-id");
4658
+ yield __classPrivateFieldGet(this, _Auth_storage, "f").removeItem("camp-sdk:jwt");
4659
+ yield __classPrivateFieldGet(this, _Auth_storage, "f").removeItem("camp-sdk:environment");
4397
4660
  });
4398
4661
  }
4399
4662
  /**
@@ -4421,10 +4684,72 @@ class Auth {
4421
4684
  this.userId = res.userId;
4422
4685
  this.jwt = res.token;
4423
4686
  this.origin = new Origin(this.jwt, this.environment, this.viem);
4424
- localStorage.setItem("camp-sdk:jwt", this.jwt);
4425
- localStorage.setItem("camp-sdk:wallet-address", this.walletAddress);
4426
- localStorage.setItem("camp-sdk:user-id", this.userId);
4427
- localStorage.setItem("camp-sdk:environment", this.environment.NAME);
4687
+ yield __classPrivateFieldGet(this, _Auth_storage, "f").setItem("camp-sdk:jwt", this.jwt);
4688
+ yield __classPrivateFieldGet(this, _Auth_storage, "f").setItem("camp-sdk:wallet-address", this.walletAddress);
4689
+ yield __classPrivateFieldGet(this, _Auth_storage, "f").setItem("camp-sdk:user-id", this.userId);
4690
+ yield __classPrivateFieldGet(this, _Auth_storage, "f").setItem("camp-sdk:environment", this.environment.NAME);
4691
+ __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_trigger).call(this, "state", "authenticated");
4692
+ return {
4693
+ success: true,
4694
+ message: "Successfully authenticated",
4695
+ walletAddress: this.walletAddress,
4696
+ };
4697
+ }
4698
+ else {
4699
+ this.isAuthenticated = false;
4700
+ __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_trigger).call(this, "state", "unauthenticated");
4701
+ throw new APIError("Failed to authenticate");
4702
+ }
4703
+ }
4704
+ catch (e) {
4705
+ this.isAuthenticated = false;
4706
+ __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_trigger).call(this, "state", "unauthenticated");
4707
+ throw new APIError(e);
4708
+ }
4709
+ });
4710
+ }
4711
+ /**
4712
+ * Connect with a custom signer (for Node.js or custom wallet implementations).
4713
+ * This method bypasses browser wallet interactions and uses the provided signer directly.
4714
+ * @param {any} signer The signer instance (viem WalletClient, ethers Signer, or custom signer).
4715
+ * @param {object} [options] Optional configuration.
4716
+ * @param {string} [options.domain] The domain to use in SIWE message (defaults to 'localhost').
4717
+ * @param {string} [options.uri] The URI to use in SIWE message (defaults to 'http://localhost').
4718
+ * @returns {Promise<{ success: boolean; message: string; walletAddress: string }>} A promise that resolves with the authentication result.
4719
+ * @throws {APIError} - Throws an error if authentication fails.
4720
+ * @example
4721
+ * // Using with ethers
4722
+ * const signer = new ethers.Wallet(privateKey, provider);
4723
+ * await auth.connectWithSigner(signer, { domain: 'myapp.com', uri: 'https://myapp.com' });
4724
+ *
4725
+ * // Using with viem
4726
+ * const account = privateKeyToAccount('0x...');
4727
+ * const client = createWalletClient({ account, chain: mainnet, transport: http() });
4728
+ * await auth.connectWithSigner(client);
4729
+ */
4730
+ connectWithSigner(signer, options) {
4731
+ return __awaiter(this, void 0, void 0, function* () {
4732
+ __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_trigger).call(this, "state", "loading");
4733
+ try {
4734
+ __classPrivateFieldSet(this, _Auth_signerAdapter, createSignerAdapter(signer), "f");
4735
+ this.walletAddress = checksumAddress((yield __classPrivateFieldGet(this, _Auth_signerAdapter, "f").getAddress()));
4736
+ // store the signer as viem client if it's a viem client, otherwise keep adapter
4737
+ if (__classPrivateFieldGet(this, _Auth_signerAdapter, "f").type === "viem") {
4738
+ this.viem = signer;
4739
+ }
4740
+ const nonce = yield __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_fetchNonce).call(this);
4741
+ const message = __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_createMessage).call(this, nonce, options === null || options === void 0 ? void 0 : options.domain, options === null || options === void 0 ? void 0 : options.uri);
4742
+ const signature = yield __classPrivateFieldGet(this, _Auth_signerAdapter, "f").signMessage(message);
4743
+ const res = yield __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_verifySignature).call(this, message, signature);
4744
+ if (res.success) {
4745
+ this.isAuthenticated = true;
4746
+ this.userId = res.userId;
4747
+ this.jwt = res.token;
4748
+ this.origin = new Origin(this.jwt, this.environment, this.viem);
4749
+ yield __classPrivateFieldGet(this, _Auth_storage, "f").setItem("camp-sdk:jwt", this.jwt);
4750
+ yield __classPrivateFieldGet(this, _Auth_storage, "f").setItem("camp-sdk:wallet-address", this.walletAddress);
4751
+ yield __classPrivateFieldGet(this, _Auth_storage, "f").setItem("camp-sdk:user-id", this.userId);
4752
+ yield __classPrivateFieldGet(this, _Auth_storage, "f").setItem("camp-sdk:environment", this.environment.NAME);
4428
4753
  __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_trigger).call(this, "state", "authenticated");
4429
4754
  return {
4430
4755
  success: true,
@@ -4440,6 +4765,7 @@ class Auth {
4440
4765
  }
4441
4766
  catch (e) {
4442
4767
  this.isAuthenticated = false;
4768
+ __classPrivateFieldSet(this, _Auth_signerAdapter, undefined, "f");
4443
4769
  __classPrivateFieldGet(this, _Auth_instances, "m", _Auth_trigger).call(this, "state", "unauthenticated");
4444
4770
  throw new APIError(e);
4445
4771
  }
@@ -4481,39 +4807,48 @@ class Auth {
4481
4807
  /**
4482
4808
  * Link the user's Twitter account.
4483
4809
  * @returns {Promise<void>}
4484
- * @throws {Error} - Throws an error if the user is not authenticated.
4810
+ * @throws {Error} - Throws an error if the user is not authenticated or in Node.js environment.
4485
4811
  */
4486
4812
  linkTwitter() {
4487
4813
  return __awaiter(this, void 0, void 0, function* () {
4488
4814
  if (!this.isAuthenticated) {
4489
4815
  throw new Error("User needs to be authenticated");
4490
4816
  }
4817
+ if (__classPrivateFieldGet(this, _Auth_isNodeEnvironment, "f")) {
4818
+ throw new Error("Social linking requires browser environment for OAuth flow");
4819
+ }
4491
4820
  window.location.href = `${this.environment.AUTH_HUB_BASE_API}/twitter/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri["twitter"]}`;
4492
4821
  });
4493
4822
  }
4494
4823
  /**
4495
4824
  * Link the user's Discord account.
4496
4825
  * @returns {Promise<void>}
4497
- * @throws {Error} - Throws an error if the user is not authenticated.
4826
+ * @throws {Error} - Throws an error if the user is not authenticated or in Node.js environment.
4498
4827
  */
4499
4828
  linkDiscord() {
4500
4829
  return __awaiter(this, void 0, void 0, function* () {
4501
4830
  if (!this.isAuthenticated) {
4502
4831
  throw new Error("User needs to be authenticated");
4503
4832
  }
4833
+ if (__classPrivateFieldGet(this, _Auth_isNodeEnvironment, "f")) {
4834
+ throw new Error("Social linking requires browser environment for OAuth flow");
4835
+ }
4504
4836
  window.location.href = `${this.environment.AUTH_HUB_BASE_API}/discord/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri["discord"]}`;
4505
4837
  });
4506
4838
  }
4507
4839
  /**
4508
4840
  * Link the user's Spotify account.
4509
4841
  * @returns {Promise<void>}
4510
- * @throws {Error} - Throws an error if the user is not authenticated.
4842
+ * @throws {Error} - Throws an error if the user is not authenticated or in Node.js environment.
4511
4843
  */
4512
4844
  linkSpotify() {
4513
4845
  return __awaiter(this, void 0, void 0, function* () {
4514
4846
  if (!this.isAuthenticated) {
4515
4847
  throw new Error("User needs to be authenticated");
4516
4848
  }
4849
+ if (__classPrivateFieldGet(this, _Auth_isNodeEnvironment, "f")) {
4850
+ throw new Error("Social linking requires browser environment for OAuth flow");
4851
+ }
4517
4852
  window.location.href = `${this.environment.AUTH_HUB_BASE_API}/spotify/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri["spotify"]}`;
4518
4853
  });
4519
4854
  }
@@ -4782,19 +5117,16 @@ class Auth {
4782
5117
  });
4783
5118
  }
4784
5119
  }
4785
- _Auth_triggers = new WeakMap(), _Auth_instances = new WeakSet(), _Auth_trigger = function _Auth_trigger(event, data) {
5120
+ _Auth_triggers = new WeakMap(), _Auth_isNodeEnvironment = new WeakMap(), _Auth_signerAdapter = new WeakMap(), _Auth_storage = new WeakMap(), _Auth_instances = new WeakSet(), _Auth_trigger = function _Auth_trigger(event, data) {
4786
5121
  if (__classPrivateFieldGet(this, _Auth_triggers, "f")[event]) {
4787
5122
  __classPrivateFieldGet(this, _Auth_triggers, "f")[event].forEach((callback) => callback(data));
4788
5123
  }
4789
5124
  }, _Auth_loadAuthStatusFromStorage = function _Auth_loadAuthStatusFromStorage(provider) {
4790
5125
  return __awaiter(this, void 0, void 0, function* () {
4791
- if (typeof localStorage === "undefined") {
4792
- return;
4793
- }
4794
- const walletAddress = localStorage === null || localStorage === void 0 ? void 0 : localStorage.getItem("camp-sdk:wallet-address");
4795
- const userId = localStorage === null || localStorage === void 0 ? void 0 : localStorage.getItem("camp-sdk:user-id");
4796
- const jwt = localStorage === null || localStorage === void 0 ? void 0 : localStorage.getItem("camp-sdk:jwt");
4797
- const lastEnvironment = localStorage === null || localStorage === void 0 ? void 0 : localStorage.getItem("camp-sdk:environment");
5126
+ const walletAddress = yield __classPrivateFieldGet(this, _Auth_storage, "f").getItem("camp-sdk:wallet-address");
5127
+ const userId = yield __classPrivateFieldGet(this, _Auth_storage, "f").getItem("camp-sdk:user-id");
5128
+ const jwt = yield __classPrivateFieldGet(this, _Auth_storage, "f").getItem("camp-sdk:jwt");
5129
+ const lastEnvironment = yield __classPrivateFieldGet(this, _Auth_storage, "f").getItem("camp-sdk:environment");
4798
5130
  if (walletAddress &&
4799
5131
  userId &&
4800
5132
  jwt &&
@@ -4813,7 +5145,7 @@ _Auth_triggers = new WeakMap(), _Auth_instances = new WeakSet(), _Auth_trigger =
4813
5145
  address: walletAddress,
4814
5146
  });
4815
5147
  }
4816
- else {
5148
+ else if (!__classPrivateFieldGet(this, _Auth_isNodeEnvironment, "f")) {
4817
5149
  console.warn("No matching provider was given for the stored wallet address. Trying to recover provider.");
4818
5150
  yield this.recoverProvider();
4819
5151
  }
@@ -4882,14 +5214,16 @@ _Auth_triggers = new WeakMap(), _Auth_instances = new WeakSet(), _Auth_trigger =
4882
5214
  throw new APIError(e);
4883
5215
  }
4884
5216
  });
4885
- }, _Auth_createMessage = function _Auth_createMessage(nonce) {
5217
+ }, _Auth_createMessage = function _Auth_createMessage(nonce, domain, uri) {
4886
5218
  return createSiweMessage({
4887
- domain: window.location.host,
5219
+ domain: domain ||
5220
+ (__classPrivateFieldGet(this, _Auth_isNodeEnvironment, "f") ? "localhost" : window.location.host),
4888
5221
  address: this.walletAddress,
4889
5222
  statement: constants.SIWE_MESSAGE_STATEMENT,
4890
- uri: window.location.origin,
5223
+ uri: uri ||
5224
+ (__classPrivateFieldGet(this, _Auth_isNodeEnvironment, "f") ? "http://localhost" : window.location.origin),
4891
5225
  version: "1",
4892
- chainId: this.viem.chain.id,
5226
+ chainId: this.environment.CHAIN.id,
4893
5227
  nonce: nonce,
4894
5228
  });
4895
5229
  };
@@ -5380,46 +5714,6 @@ const useWalletConnectProvider = (projectId, chain) => {
5380
5714
  return walletConnectProvider;
5381
5715
  };
5382
5716
 
5383
- /**
5384
- * Enum representing the status of data in the system.
5385
- * * - ACTIVE: The data is currently active and available.
5386
- * * - PENDING_DELETE: The data is scheduled for deletion but not yet removed.
5387
- * * - DELETED: The data has been deleted and is no longer available.
5388
- */
5389
- var DataStatus;
5390
- (function (DataStatus) {
5391
- DataStatus[DataStatus["ACTIVE"] = 0] = "ACTIVE";
5392
- DataStatus[DataStatus["PENDING_DELETE"] = 1] = "PENDING_DELETE";
5393
- DataStatus[DataStatus["DELETED"] = 2] = "DELETED";
5394
- })(DataStatus || (DataStatus = {}));
5395
- /**
5396
- * Creates license terms for a digital asset.
5397
- * @param price The price of the asset in wei.
5398
- * @param duration The duration of the license in seconds.
5399
- * @param royaltyBps The royalty percentage in basis points (0-10000).
5400
- * @param paymentToken The address of the payment token (ERC20 / address(0) for native currency).
5401
- * @returns The created license terms.
5402
- */
5403
- const createLicenseTerms = (price, duration, royaltyBps, paymentToken) => {
5404
- if (royaltyBps < constants.MIN_ROYALTY_BPS ||
5405
- royaltyBps > constants.MAX_ROYALTY_BPS) {
5406
- throw new Error(`Royalty basis points must be between ${constants.MIN_ROYALTY_BPS} and ${constants.MAX_ROYALTY_BPS}`);
5407
- }
5408
- if (duration < constants.MIN_LICENSE_DURATION ||
5409
- duration > constants.MAX_LICENSE_DURATION) {
5410
- throw new Error(`Duration must be between ${constants.MIN_LICENSE_DURATION} and ${constants.MAX_LICENSE_DURATION} seconds`);
5411
- }
5412
- if (price < constants.MIN_PRICE) {
5413
- throw new Error(`Price must be at least ${constants.MIN_PRICE} wei`);
5414
- }
5415
- return {
5416
- price,
5417
- duration,
5418
- royaltyBps,
5419
- paymentToken,
5420
- };
5421
- };
5422
-
5423
5717
  var css_248z = ".buttons-module_button__4Ogad{background-color:#ff6f00;border:none;border-radius:0;box-shadow:inset 0 2px 0 hsla(0,0%,100%,.15),inset 0 -2px 4px rgba(0,0,0,.05),0 1px 1px rgba(46,54,80,.075);color:#fff;font-family:Geist Mono,monospace;font-size:1rem;font-size:.875rem;font-weight:600;height:2.5rem;margin-bottom:.75rem;margin-top:1rem;padding:1rem;padding-block:0;position:relative;text-transform:uppercase;width:100%}.buttons-module_button__4Ogad:hover{background-color:#cc4e02;cursor:pointer}.buttons-module_button__4Ogad:disabled{background-color:#ccc;cursor:not-allowed}.buttons-module_connect-button__CJhUa{background-color:#ff6f00;border:none;box-shadow:inset 0 2px 0 hsla(0,0%,100%,.15),inset 0 -2px 4px rgba(0,0,0,.05),0 1px 1px rgba(46,54,80,.075);color:#fff;font-family:Geist Mono,monospace;font-size:1rem;font-weight:600;height:2.75rem;line-height:1.333rem;padding-inline:2.5rem;padding-left:5rem;position:relative;text-transform:uppercase;transition:background-color .15s;width:13rem}.buttons-module_connect-button__CJhUa .buttons-module_button-icon__JM4-2{background:hsla(0,0%,100%,.75);box-shadow:inset 0 2px 0 hsla(0,0%,100%,.15),inset 0 -2px 4px rgba(0,0,0,.05);display:grid;height:100%;left:0;margin-right:.5rem;place-items:center;position:absolute;top:50%;transform:translateY(-50%);transition:background-color .15s;width:3rem}.buttons-module_connect-button__CJhUa .buttons-module_button-icon__JM4-2 svg{height:1.25rem;width:1.25rem}.buttons-module_connect-button__CJhUa:hover{background-color:#cc4e02;border-color:#cc4e02;cursor:pointer}.buttons-module_connect-button__CJhUa:hover .buttons-module_button-icon__JM4-2{background:hsla(0,0%,100%,.675)}.buttons-module_connect-button__CJhUa:focus{outline:none}.buttons-module_connect-button__CJhUa:disabled{background-color:#ccc;cursor:not-allowed}.buttons-module_provider-button__6JY7s{align-items:center;border:1px solid #ddd;display:flex;gap:.5rem;justify-content:flex-start;padding:.5rem;position:relative;transition:border-color .15s;width:100%}.buttons-module_provider-button__6JY7s:focus{outline:1px solid #ff6f00;outline-offset:2px}.buttons-module_provider-button__6JY7s:hover{border-color:#ff6f00}.buttons-module_provider-button__6JY7s:hover:not(:disabled){cursor:pointer}.buttons-module_provider-button__6JY7s img{height:2rem;width:2rem}.buttons-module_provider-button__6JY7s .buttons-module_provider-icon__MOhr8{border-radius:.2rem}.buttons-module_provider-button__6JY7s span{line-height:1rem;margin-left:.5rem}.buttons-module_provider-button__6JY7s span.buttons-module_provider-name__tHWO2{color:#333;font-size:.875rem}.buttons-module_provider-button__6JY7s span.buttons-module_provider-label__CEGRr{color:#777;font-family:Geist Mono,monospace;font-size:.7rem;text-transform:uppercase}.buttons-module_link-button-default__EcKUT{background-color:#ff6f00;border:none;box-shadow:inset 0 2px 0 hsla(0,0%,100%,.15),inset 0 -2px 4px rgba(0,0,0,.05),0 1px 1px rgba(46,54,80,.075);box-sizing:border-box;cursor:pointer;height:2.6rem;position:relative;width:7rem}.buttons-module_link-button-default__EcKUT:disabled{background-color:#b8b8b8;cursor:not-allowed}.buttons-module_link-button-default__EcKUT:after{background-color:transparent;border-radius:.75rem;bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transition:background-color .15s}.buttons-module_link-button-default__EcKUT:disabled:after{background-color:rgba(0,0,0,.35);border-radius:.35rem;color:#fff;content:\"Not connected\";display:grid;font-size:.75rem;height:2rem;left:0;opacity:0;padding:.25rem;place-items:center;position:absolute;right:0;top:-2.7rem;transform:translateY(-.5rem);transition:all .25s;-webkit-user-select:none;-moz-user-select:none;user-select:none;visibility:hidden}.buttons-module_link-button-default__EcKUT:disabled:hover:after{opacity:1;transform:translateY(0);visibility:visible}.buttons-module_link-button-default__EcKUT:not(:disabled):hover:after{background-color:rgba(0,0,0,.1)}.buttons-module_link-button-default__EcKUT:not(:disabled).buttons-module_twitter__9sRaz{background-color:#1da1f2}.buttons-module_link-button-default__EcKUT:not(:disabled).buttons-module_spotify__-fiKQ{background-color:#1db954}.buttons-module_link-button-default__EcKUT:not(:disabled).buttons-module_discord__I-YjZ{background-color:#7289da}.buttons-module_link-button-default__EcKUT:not(:disabled).buttons-module_tiktok__a80-0{background-color:#000}.buttons-module_link-button-default__EcKUT:not(:disabled).buttons-module_telegram__ExOTS{background-color:#08c}.buttons-module_link-button-default__EcKUT .buttons-module_button-container__-oPqd{align-items:center;display:flex;flex-direction:row;gap:.5rem;justify-content:center;padding:.5rem}.buttons-module_button-container__-oPqd .buttons-module_social-icon__DPdPe{align-items:center;color:#fff;display:flex;height:1.5rem;justify-content:center;width:1.5rem}.buttons-module_button-container__-oPqd .buttons-module_social-icon__DPdPe svg{fill:#fff!important;height:1.5rem;width:1.5rem}.buttons-module_button-container__-oPqd .buttons-module_social-icon__DPdPe svg path{fill:#fff!important}.buttons-module_button-container__-oPqd .buttons-module_link-icon__8V8FP{align-items:center;color:hsla(0,0%,100%,.8);display:flex;height:1.25rem;justify-content:center;width:1.25rem}.buttons-module_button-container__-oPqd .buttons-module_camp-logo__slNl0{align-items:center;background-color:#fff;border-radius:50%;box-sizing:border-box;display:flex;height:1.5rem;justify-content:center;padding:.15rem;width:1.5rem}.buttons-module_link-button-default__EcKUT:disabled .buttons-module_button-container__-oPqd .buttons-module_camp-logo__slNl0 svg path{fill:#b8b8b8!important}.buttons-module_link-button-icon__llX8m{background-color:#ff6f00;border:none;box-shadow:inset 0 2px 0 hsla(0,0%,100%,.15),inset 0 -2px 4px rgba(0,0,0,.05),0 1px 1px rgba(46,54,80,.075);box-sizing:border-box;cursor:pointer;height:3rem;min-height:3rem;min-width:3rem;padding:0;position:relative;width:3rem}.buttons-module_link-button-icon__llX8m:disabled{background-color:#b8b8b8;cursor:not-allowed}.buttons-module_link-button-icon__llX8m:disabled:after{background-color:rgba(0,0,0,.35);border-radius:.35rem;box-sizing:border-box;color:#fff;content:\"Not connected\";display:grid;font-size:.75rem;height:-moz-fit-content;height:fit-content;left:-1rem;opacity:0;padding:.25rem;place-items:center;position:absolute;right:-1rem;top:-2.7rem;transform:translateY(-.5rem);transition:all .25s}.buttons-module_link-button-icon__llX8m:disabled:hover:after{opacity:1;transform:translateY(0)}.buttons-module_link-button-icon__llX8m:after{background-color:transparent;border-radius:.75rem;bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transition:background-color .15s}.buttons-module_link-button-icon__llX8m:not(:disabled):hover:after{background-color:rgba(0,0,0,.1)}.buttons-module_link-button-icon__llX8m:not(:disabled).buttons-module_twitter__9sRaz{background-color:#1da1f2}.buttons-module_link-button-icon__llX8m:not(:disabled).buttons-module_spotify__-fiKQ{background-color:#1db954}.buttons-module_link-button-icon__llX8m:not(:disabled).buttons-module_discord__I-YjZ{background-color:#7289da}.buttons-module_link-button-icon__llX8m:not(:disabled).buttons-module_tiktok__a80-0{background-color:#000}.buttons-module_link-button-icon__llX8m:not(:disabled).buttons-module_telegram__ExOTS{background-color:#08c}.buttons-module_link-button-icon__llX8m .buttons-module_icon-container__Q5bI1{align-items:center;display:flex;flex:1;height:100%;justify-content:center;position:relative;width:100%}.buttons-module_link-button-icon__llX8m .buttons-module_icon-container__Q5bI1>svg{fill:#fff!important;height:1.5rem;width:1.5rem}.buttons-module_link-button-icon__llX8m .buttons-module_icon-container__Q5bI1>svg path{fill:#fff!important}.buttons-module_link-button-icon__llX8m .buttons-module_camp-logo__slNl0{align-items:center;background-color:#fff;border-radius:50%;bottom:-.5rem;box-sizing:border-box;display:flex;height:1.5rem;justify-content:center;position:absolute;right:-.5rem;width:1.5rem}.buttons-module_link-button-icon__llX8m .buttons-module_camp-logo__slNl0 svg{height:1.1rem;width:1.1rem}.buttons-module_link-button-icon__llX8m:disabled .buttons-module_camp-logo__slNl0 svg path,.buttons-module_not-linked__ua4va svg path{fill:#b8b8b8!important}.buttons-module_file-upload-container__le7Cg{align-items:center;border:2px dashed #ccc;box-sizing:border-box;color:#777;cursor:pointer;display:flex;flex-direction:column;justify-content:center;max-width:100%;min-height:12rem;min-width:0;overflow-y:auto;padding:1rem;position:relative;text-align:center;transition:background-color .2s,border-color .2s;width:100%}.buttons-module_file-upload-container__le7Cg:hover{border-color:#e2e2e2}.buttons-module_file-upload-container__le7Cg.buttons-module_dragging__cfggZ{background-color:#f9f9f9;border-color:#ff6f00}.buttons-module_file-upload-container__le7Cg.buttons-module_dragging__cfggZ .buttons-module_file-preview__yuM5i{opacity:.2;transition:opacity .2s}.buttons-module_file-upload-container__le7Cg.buttons-module_file-selected__YY6ms{background-color:#f9f9f9;border:none;padding:0 .5rem 0 0}.buttons-module_file-input__gbD5T{display:none}.buttons-module_selected-file-container__E1AXM{align-items:center;display:flex;flex-direction:column;gap:.25rem;height:100%;justify-content:space-between;max-width:100%;position:relative;width:100%}.buttons-module_remove-file-button__Q1FMa{border:1px solid #ff6f00;color:#fff;color:#ff6f00;cursor:pointer;font-size:.875rem;margin-bottom:.75rem;margin-top:1rem;padding:.5rem;text-align:center;transition:background-color .2s}.buttons-module_remove-file-button__Q1FMa:hover{background-color:#cc4e02;border-color:#cc4e02;color:#fff;cursor:pointer}.buttons-module_remove-file-button__Q1FMa:disabled{background-color:#b8b8b8;border-color:#b8b8b8;color:#fff;cursor:not-allowed}.buttons-module_upload-file-button__vTwWd{background-color:#ff6f00;border:none;border-radius:.5rem;color:#fff;cursor:pointer;font-size:.875rem;padding:.5rem;text-align:center;transition:background-color .2s;width:100%}.buttons-module_upload-file-button__vTwWd:hover{background-color:#cc4e02;cursor:pointer}.buttons-module_upload-file-button__vTwWd:disabled{background-color:#b8b8b8;cursor:not-allowed}.buttons-module_file-preview__yuM5i{max-height:8rem;max-width:100%}audio.buttons-module_file-preview__yuM5i{min-height:4rem}.buttons-module_file-preview-text__80Ju0{color:#333;font-size:.875rem;margin-bottom:.5rem}.buttons-module_file-name__3iskR{color:#333;font-size:.875rem;max-width:100%;min-height:-moz-fit-content;min-height:fit-content;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.buttons-module_upload-buttons__3SAw6{align-items:center;display:flex;gap:.25rem;justify-content:space-between;width:100%}.buttons-module_upload-buttons__3SAw6 .buttons-module_upload-file-button__vTwWd{flex-grow:1}.buttons-module_upload-buttons__3SAw6 .buttons-module_remove-file-button__Q1FMa{flex-grow:0}.buttons-module_accepted-types__Ys-D2{color:#777;font-size:.875rem;font-style:italic;margin-top:.5rem}.buttons-module_loading-bar-container__nrgPX{background-color:#e0e0e0;margin-top:8px;min-height:8px;overflow:hidden;width:100%}.buttons-module_loading-bar__IUAg1{background-color:#ff6f00;min-height:100%;transition:width .3s ease}.buttons-module_date-picker__V6gRM{display:flex;flex-direction:column;font-family:sans-serif;gap:6px;width:100%}.buttons-module_date-picker__V6gRM input{border:1px solid #ccc;border-radius:4px;font-size:14px;padding:6px 10px}.buttons-module_percentage-slider__M84tC{display:flex;flex-direction:row;font-family:sans-serif;gap:8px;justify-content:space-between;width:100%}.buttons-module_percentage-slider__M84tC input[type=range]{width:100%}.buttons-module_percentage-slider__M84tC label{min-width:50px}.buttons-module_fancy-input-container__s-zVw{align-items:center;border:1px solid #ccc;display:flex;font-family:sans-serif;gap:0;min-height:2.5rem;overflow:hidden;position:relative;width:100%}.buttons-module_fancy-input-container__s-zVw textarea.buttons-module_fancy-input__RpSOF{background:transparent;border:none;box-sizing:border-box;color:#222;font-family:inherit;font-size:1rem;line-height:1.4;max-height:12rem;outline:none;overflow-y:auto;padding:10px;resize:none;width:100%}.buttons-module_fancy-input__RpSOF{background:transparent;border:none;flex:1;font-family:sans-serif;outline:none;padding:6px 10px}.buttons-module_fancy-input-label__d-sG7{align-self:flex-start;color:#777;font-family:Geist Mono,monospace;font-size:.8rem;font-weight:500;margin-top:.25rem;padding:0 .25rem;pointer-events:none;text-transform:uppercase}.buttons-module_input-divider__RVasJ{background-color:#ccc;height:24px;margin:0;min-width:1px}.buttons-module_input-icon-container__MUYKL{align-items:center;background-color:#f8f9fa;display:flex;justify-content:center;min-width:40px;padding:6px 10px}.buttons-module_input-icon-container__MUYKL svg{height:16px;width:16px}.buttons-module_duration-input-container__Rh9Na{align-items:stretch;border:1px solid #ccc;box-sizing:border-box;display:flex;font-family:sans-serif;gap:0;min-height:2.5rem;overflow:hidden;width:100%}.buttons-module_duration-input__-gt3p{background:transparent;flex:1;min-width:0}.buttons-module_duration-input__-gt3p,.buttons-module_duration-unit-select__VKFf6{border:none;box-sizing:border-box;font-family:sans-serif;outline:none;padding:6px 10px}.buttons-module_duration-unit-select__VKFf6{background-color:#f8f9fa;border-left:1px solid #ccc;cursor:pointer;flex:0 0 auto;width:auto}.buttons-module_price-input-container__teIRS:focus-within{border-color:#ff6f00;box-shadow:0 0 0 1px #ff6f00}.buttons-module_duration-input-container__Rh9Na:focus-within{border-color:#ff6f00;box-shadow:0 0 0 1px #ff6f00}.buttons-module_duration-input-container__Rh9Na:hover,.buttons-module_price-input-container__teIRS:hover{border-color:#999}.buttons-module_duration-unit-select__VKFf6:focus,.buttons-module_duration-unit-select__VKFf6:hover{background-color:#e9ecef}\n/*# sourceMappingURL=data:application/json;base64,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QUZiLGdCQW9CRixDQVhBLDRDQUtFLHdCQUF5QixDQUN6QiwwQkFBMkIsQ0FDM0IsY0FBZSxDQUNmLGFBQWMsQ0FDZCxVQUVGLENBRUEsMERBQ0Usb0JBQXFCLENBQ3JCLDRCQUNGLENBRUEsNkRBQ0Usb0JBQXFCLENBQ3JCLDRCQUNGLENBRUEseUdBRUUsaUJBQ0YsQ0FNQSxvR0FDRSx3QkFDRiIsImZpbGUiOiJidXR0b25zLm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuYnV0dG9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZjAwO1xuICBjb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgcGFkZGluZzogMXJlbTtcbiAgcGFkZGluZy1ibG9jazogMDtcbiAgZm9udC1zaXplOiAxcmVtO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcbiAgbWFyZ2luLXRvcDogMXJlbTtcbiAgaGVpZ2h0OiAyLjVyZW07XG4gIGJveC1zaGFkb3c6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMTUpIDAgMnB4IDAgaW5zZXQsXG4gICAgcmdiYSgwLCAwLCAwLCAwLjA1KSAwIC0ycHggNHB4IGluc2V0LCByZ2JhKDQ2LCA1NCwgODAsIDAuMDc1KSAwIDFweCAxcHg7XG5cbiAgZm9udC1mYW1pbHk6IFwiR2Vpc3QgTW9ub1wiLCBtb25vc3BhY2U7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG59XG5cbi5idXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2M0ZTAyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5idXR0b246ZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uY29ubmVjdC1idXR0b24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjZmMDA7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiBub25lO1xuICAvKiBib3JkZXItcmFkaXVzOiAwLjc1cmVtOyAqL1xuICBwYWRkaW5nLWlubGluZTogMi41cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDVyZW07XG4gIGhlaWdodDogMi43NXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzcmVtO1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHdpZHRoOiAxM3JlbTtcbiAgZm9udC1mYW1pbHk6IFwiR2Vpc3QgTW9ub1wiLCBtb25vc3BhY2U7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGJveC1zaGFkb3c6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMTUpIDAgMnB4IDAgaW5zZXQsXG4gICAgcmdiYSgwLCAwLCAwLCAwLjA1KSAwIC0ycHggNHB4IGluc2V0LCByZ2JhKDQ2LCA1NCwgODAsIDAuMDc1KSAwIDFweCAxcHg7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXM7XG59XG5cbi5jb25uZWN0LWJ1dHRvbiAuYnV0dG9uLWljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIHdpZHRoOiAzcmVtO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpO1xuICBib3gtc2hhZG93OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjE1KSAwIDJweCAwIGluc2V0LFxuICAgIHJnYmEoMCwgMCwgMCwgMC4wNSkgMCAtMnB4IDRweCBpbnNldDtcbiAgZGlzcGxheTogZ3JpZDtcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cztcbiAgLyogYm9yZGVyLXJhZGl1czogMC43NXJlbSAwIDAgMC43NXJlbTsgKi9cbn1cblxuLmNvbm5lY3QtYnV0dG9uIC5idXR0b24taWNvbiBzdmcge1xuICB3aWR0aDogMS4yNXJlbTtcbiAgaGVpZ2h0OiAxLjI1cmVtO1xufVxuXG4uY29ubmVjdC1idXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2M0ZTAyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJvcmRlci1jb2xvcjogI2NjNGUwMjtcbn1cblxuLmNvbm5lY3QtYnV0dG9uOmhvdmVyIC5idXR0b24taWNvbiB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NzUpO1xufVxuXG4uY29ubmVjdC1idXR0b246Zm9jdXMge1xuICBvdXRsaW5lOiBub25lO1xufVxuXG4uY29ubmVjdC1idXR0b246ZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4ucHJvdmlkZXItYnV0dG9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiAwLjVyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIC8qIGJvcmRlci1yYWRpdXM6IDAuNXJlbTsgKi9cbiAgLyogYmFja2dyb3VuZC1jb2xvcjogI2ZlZmVmZTsgKi9cbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBnYXA6IDAuNXJlbTtcbiAgd2lkdGg6IDEwMCU7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cztcbn1cblxuLnByb3ZpZGVyLWJ1dHRvbjpmb2N1cyB7XG4gIG91dGxpbmU6IDFweCBzb2xpZCAjZmY2ZjAwO1xuICBvdXRsaW5lLW9mZnNldDogMnB4O1xufVxuXG4ucHJvdmlkZXItYnV0dG9uOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjZmY2ZjAwO1xuICAvKiBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOyAqL1xufVxuXG4ucHJvdmlkZXItYnV0dG9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgLyogYmFja2dyb3VuZC1jb2xvcjogI2RkZDsgKi9cbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ucHJvdmlkZXItYnV0dG9uIGltZyB7XG4gIHdpZHRoOiAycmVtO1xuICBoZWlnaHQ6IDJyZW07XG59XG5cbi5wcm92aWRlci1idXR0b24gLnByb3ZpZGVyLWljb24ge1xuICBib3JkZXItcmFkaXVzOiAwLjJyZW07XG59XG5cbi5wcm92aWRlci1idXR0b24gc3BhbiB7XG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxcmVtO1xufVxuXG4ucHJvdmlkZXItYnV0dG9uIHNwYW4ucHJvdmlkZXItbmFtZSB7XG4gIGNvbG9yOiAjMzMzO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xufVxuXG4ucHJvdmlkZXItYnV0dG9uIHNwYW4ucHJvdmlkZXItbGFiZWwge1xuICBjb2xvcjogIzc3NztcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIGZvbnQtZmFtaWx5OiBcIkdlaXN0IE1vbm9cIiwgbW9ub3NwYWNlO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4vKiBcImRlZmF1bHRcIiB2YXJpYW50ICovXG4ubGluay1idXR0b24tZGVmYXVsdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyOiBub25lO1xuICB3aWR0aDogN3JlbTtcbiAgaGVpZ2h0OiAyLjZyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjZmMDA7XG4gIC8qIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07ICovXG4gIGJveC1zaGFkb3c6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMTUpIDAgMnB4IDAgaW5zZXQsXG4gICAgcmdiYSgwLCAwLCAwLCAwLjA1KSAwIC0ycHggNHB4IGluc2V0LCByZ2JhKDQ2LCA1NCwgODAsIDAuMDc1KSAwIDFweCAxcHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmxpbmstYnV0dG9uLWRlZmF1bHQ6ZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjhiOGI4O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4ubGluay1idXR0b24tZGVmYXVsdDo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cztcbn1cblxuLmxpbmstYnV0dG9uLWRlZmF1bHQ6ZGlzYWJsZWQ6OmFmdGVyIHtcbiAgY29udGVudDogXCJOb3QgY29ubmVjdGVkXCI7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC0yLjdyZW07XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBoZWlnaHQ6IDJyZW07XG4gIGJvcmRlci1yYWRpdXM6IDAuMzVyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zNSk7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZGlzcGxheTogZ3JpZDtcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBwYWRkaW5nOiAwLjI1cmVtO1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4yNXM7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMC41cmVtKTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi5saW5rLWJ1dHRvbi1kZWZhdWx0OmRpc2FibGVkOmhvdmVyOjphZnRlciB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIG9wYWNpdHk6IDE7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLmxpbmstYnV0dG9uLWRlZmF1bHQ6bm90KDpkaXNhYmxlZCk6aG92ZXI6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuXG4ubGluay1idXR0b24tZGVmYXVsdDpub3QoOmRpc2FibGVkKS50d2l0dGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFkYTFmMjtcbn1cblxuLmxpbmstYnV0dG9uLWRlZmF1bHQ6bm90KDpkaXNhYmxlZCkuc3BvdGlmeSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxZGI5NTQ7XG59XG5cbi5saW5rLWJ1dHRvbi1kZWZhdWx0Om5vdCg6ZGlzYWJsZWQpLmRpc2NvcmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzI4OWRhO1xufVxuXG4ubGluay1idXR0b24tZGVmYXVsdDpub3QoOmRpc2FibGVkKS50aWt0b2sge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO1xufVxuXG4ubGluay1idXR0b24tZGVmYXVsdDpub3QoOmRpc2FibGVkKS50ZWxlZ3JhbSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDg4Y2M7XG59XG5cbi5saW5rLWJ1dHRvbi1kZWZhdWx0IC5idXR0b24tY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZ2FwOiAwLjVyZW07XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAwLjVyZW07XG59XG5cbi5idXR0b24tY29udGFpbmVyIC5zb2NpYWwtaWNvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHdpZHRoOiAxLjVyZW07XG4gIGhlaWdodDogMS41cmVtO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgY29sb3I6IHdoaXRlO1xufVxuXG4uYnV0dG9uLWNvbnRhaW5lciAuc29jaWFsLWljb24gc3ZnIHtcbiAgd2lkdGg6IDEuNXJlbTtcbiAgaGVpZ2h0OiAxLjVyZW07XG4gIGZpbGw6IHdoaXRlICFpbXBvcnRhbnQ7XG59XG5cbi5idXR0b24tY29udGFpbmVyIC5zb2NpYWwtaWNvbiBzdmcgcGF0aCB7XG4gIGZpbGw6IHdoaXRlICFpbXBvcnRhbnQ7XG59XG5cbi5idXR0b24tY29udGFpbmVyIC5saW5rLWljb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMS4yNXJlbTtcbiAgaGVpZ2h0OiAxLjI1cmVtO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbn1cblxuLmJ1dHRvbi1jb250YWluZXIgLmNhbXAtbG9nbyB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHdpZHRoOiAxLjVyZW07XG4gIGhlaWdodDogMS41cmVtO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgcGFkZGluZzogMC4xNXJlbTtcbn1cblxuLmxpbmstYnV0dG9uLWRlZmF1bHQ6ZGlzYWJsZWQgLmJ1dHRvbi1jb250YWluZXIgLmNhbXAtbG9nbyBzdmcgcGF0aCB7XG4gIGZpbGw6ICNiOGI4YjggIWltcG9ydGFudDtcbn1cblxuLyogXCJpY29uXCIgdmFyaWFudCAqL1xuLmxpbmstYnV0dG9uLWljb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1pbi13aWR0aDogM3JlbTtcbiAgbWluLWhlaWdodDogM3JlbTtcbiAgd2lkdGg6IDNyZW07XG4gIGhlaWdodDogM3JlbTtcbiAgYm9yZGVyOiBub25lO1xuICBwYWRkaW5nOiAwcmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZjAwO1xuICAvKiBib3JkZXItcmFkaXVzOiAwLjc1cmVtOyAqL1xuICBib3gtc2hhZG93OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjE1KSAwIDJweCAwIGluc2V0LFxuICAgIHJnYmEoMCwgMCwgMCwgMC4wNSkgMCAtMnB4IDRweCBpbnNldCwgcmdiYSg0NiwgNTQsIDgwLCAwLjA3NSkgMCAxcHggMXB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5saW5rLWJ1dHRvbi1pY29uOmRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I4YjhiODtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLmxpbmstYnV0dG9uLWljb246ZGlzYWJsZWQ6OmFmdGVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgY29udGVudDogXCJOb3QgY29ubmVjdGVkXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtMi43cmVtO1xuICBsZWZ0OiAtMXJlbTtcbiAgcmlnaHQ6IC0xcmVtO1xuICBoZWlnaHQ6IGZpdC1jb250ZW50O1xuICBib3JkZXItcmFkaXVzOiAwLjM1cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzUpO1xuICBjb2xvcjogd2hpdGU7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgcGFkZGluZzogMC4yNXJlbTtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMjVzO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTAuNXJlbSk7XG59XG5cbi5saW5rLWJ1dHRvbi1pY29uOmRpc2FibGVkOmhvdmVyOjphZnRlciB7XG4gIG9wYWNpdHk6IDE7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLmxpbmstYnV0dG9uLWljb246OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXM7XG59XG5cbi5saW5rLWJ1dHRvbi1pY29uOm5vdCg6ZGlzYWJsZWQpOmhvdmVyOjphZnRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLmxpbmstYnV0dG9uLWljb246bm90KDpkaXNhYmxlZCkudHdpdHRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxZGExZjI7XG59XG5cbi5saW5rLWJ1dHRvbi1pY29uOm5vdCg6ZGlzYWJsZWQpLnNwb3RpZnkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWRiOTU0O1xufVxuXG4ubGluay1idXR0b24taWNvbjpub3QoOmRpc2FibGVkKS5kaXNjb3JkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzcyODlkYTtcbn1cblxuLmxpbmstYnV0dG9uLWljb246bm90KDpkaXNhYmxlZCkudGlrdG9rIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDtcbn1cblxuLmxpbmstYnV0dG9uLWljb246bm90KDpkaXNhYmxlZCkudGVsZWdyYW0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4OGNjO1xufVxuXG4ubGluay1idXR0b24taWNvbiAuaWNvbi1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZsZXg6IDE7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4ubGluay1idXR0b24taWNvbiAuaWNvbi1jb250YWluZXIgPiBzdmcge1xuICB3aWR0aDogMS41cmVtO1xuICBoZWlnaHQ6IDEuNXJlbTtcbiAgZmlsbDogd2hpdGUgIWltcG9ydGFudDtcbn1cblxuLmxpbmstYnV0dG9uLWljb24gLmljb24tY29udGFpbmVyID4gc3ZnIHBhdGgge1xuICBmaWxsOiB3aGl0ZSAhaW1wb3J0YW50O1xufVxuXG4ubGluay1idXR0b24taWNvbiAuY2FtcC1sb2dvIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMS41cmVtO1xuICBoZWlnaHQ6IDEuNXJlbTtcbiAgcmlnaHQ6IC0wLjVyZW07XG4gIGJvdHRvbTogLTAuNXJlbTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG59XG5cbi5saW5rLWJ1dHRvbi1pY29uIC5jYW1wLWxvZ28gc3ZnIHtcbiAgd2lkdGg6IDEuMXJlbTtcbiAgaGVpZ2h0OiAxLjFyZW07XG59XG5cbi5saW5rLWJ1dHRvbi1pY29uOmRpc2FibGVkIC5jYW1wLWxvZ28gc3ZnIHBhdGgge1xuICBmaWxsOiAjYjhiOGI4ICFpbXBvcnRhbnQ7XG59XG5cbi5ub3QtbGlua2VkIHN2ZyBwYXRoIHtcbiAgZmlsbDogI2I4YjhiOCAhaW1wb3J0YW50O1xufVxuXG4uZmlsZS11cGxvYWQtY29udGFpbmVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyOiAycHggZGFzaGVkICNjY2M7XG4gIC8qIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07ICovXG4gIHBhZGRpbmc6IDFyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICM3Nzc7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzLCBib3JkZXItY29sb3IgMC4ycztcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi13aWR0aDogMDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAxMnJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgLyogaGVpZ2h0OiAzMDBweDsgKi9cbn1cblxuLmZpbGUtdXBsb2FkLWNvbnRhaW5lcjpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogI2UyZTJlMjtcbn1cblxuLmZpbGUtdXBsb2FkLWNvbnRhaW5lci5kcmFnZ2luZyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7XG4gIGJvcmRlci1jb2xvcjogI2ZmNmYwMDtcbn1cblxuLmZpbGUtdXBsb2FkLWNvbnRhaW5lci5kcmFnZ2luZyAuZmlsZS1wcmV2aWV3IHtcbiAgb3BhY2l0eTogMC4yO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7XG59XG5cbi5maWxlLXVwbG9hZC1jb250YWluZXIuZmlsZS1zZWxlY3RlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7XG4gIGJvcmRlcjogbm9uZTtcbiAgcGFkZGluZzogMDtcbiAgcGFkZGluZy1yaWdodDogMC41cmVtO1xuICAvKiBoZWlnaHQ6IGF1dG87ICovXG4gIC8qIG1pbi1oZWlnaHQ6IGF1dG87ICovXG59XG5cbi5maWxlLWlucHV0IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLnNlbGVjdGVkLWZpbGUtY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZ2FwOiAwLjI1cmVtO1xufVxuXG4ucmVtb3ZlLWZpbGUtYnV0dG9uIHtcbiAgY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZmY2ZjAwO1xuICAvKiBib3JkZXItcmFkaXVzOiAwLjVyZW07ICovXG4gIHBhZGRpbmc6IDAuNXJlbTtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnM7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcbiAgbWFyZ2luLXRvcDogMXJlbTtcbiAgY29sb3I6ICNmZjZmMDA7XG59XG5cbi5yZW1vdmUtZmlsZS1idXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2M0ZTAyO1xuICBib3JkZXItY29sb3I6ICNjYzRlMDI7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ucmVtb3ZlLWZpbGUtYnV0dG9uOmRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I4YjhiODtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgYm9yZGVyLWNvbG9yOiAjYjhiOGI4O1xuICBjb2xvcjogd2hpdGU7XG59XG5cbi51cGxvYWQtZmlsZS1idXR0b24ge1xuICBjb2xvcjogd2hpdGU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjZmMDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICBwYWRkaW5nOiAwLjVyZW07XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLnVwbG9hZC1maWxlLWJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjYzRlMDI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi51cGxvYWQtZmlsZS1idXR0b246ZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjhiOGI4O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uZmlsZS1wcmV2aWV3IHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXgtaGVpZ2h0OiA4cmVtO1xufVxuYXVkaW8uZmlsZS1wcmV2aWV3IHtcbiAgbWluLWhlaWdodDogNHJlbTtcbn1cblxuLmZpbGUtcHJldmlldy10ZXh0IHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY29sb3I6ICMzMzM7XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbn1cblxuLmZpbGUtbmFtZSB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGNvbG9yOiAjMzMzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgbWluLWhlaWdodDogZml0LWNvbnRlbnQ7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cblxuLnVwbG9hZC1idXR0b25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAwLjI1cmVtO1xuICB3aWR0aDogMTAwJTtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4udXBsb2FkLWJ1dHRvbnMgLnVwbG9hZC1maWxlLWJ1dHRvbiB7XG4gIGZsZXgtZ3JvdzogMTtcbn1cblxuLnVwbG9hZC1idXR0b25zIC5yZW1vdmUtZmlsZS1idXR0b24ge1xuICBmbGV4LWdyb3c6IDA7XG59XG5cbi5hY2NlcHRlZC10eXBlcyB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGNvbG9yOiAjNzc3O1xuICBtYXJnaW4tdG9wOiAwLjVyZW07XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLmxvYWRpbmctYmFyLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG1hcmdpbi10b3A6IDhweDtcbn1cblxuLmxvYWRpbmctYmFyIHtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNmYwMDtcbiAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBlYXNlO1xufVxuXG4uZGF0ZS1waWNrZXIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiA2cHg7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xufVxuXG4uZGF0ZS1waWNrZXIgaW5wdXQge1xuICBwYWRkaW5nOiA2cHggMTBweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbi5wZXJjZW50YWdlLXNsaWRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IDhweDtcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cblxuLnBlcmNlbnRhZ2Utc2xpZGVyIGlucHV0W3R5cGU9XCJyYW5nZVwiXSB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4ucGVyY2VudGFnZS1zbGlkZXIgbGFiZWwge1xuICBtaW4td2lkdGg6IDUwcHg7XG59XG5cbi5mYW5jeS1pbnB1dC1jb250YWluZXIge1xuICBtaW4taGVpZ2h0OiAyLjVyZW07XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGdhcDogMDtcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5mYW5jeS1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEuZmFuY3ktaW5wdXQge1xuICByZXNpemU6IG5vbmU7XG4gIG1heC1oZWlnaHQ6IDEycmVtO1xuICB3aWR0aDogMTAwJTtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICMyMjI7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi5mYW5jeS1pbnB1dCB7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICBwYWRkaW5nOiA2cHggMTBweDtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICBmbGV4OiAxO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuLmZhbmN5LWlucHV0LWxhYmVsIHtcbiAgZm9udC1zaXplOiAwLjhyZW07XG4gIGNvbG9yOiAjNzc3O1xuICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICBwYWRkaW5nOiAwIDAuMjVyZW07XG4gIC8qIHotaW5kZXg6IDI7ICovXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBmb250LWZhbWlseTogXCJHZWlzdCBNb25vXCIsIG1vbm9zcGFjZTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgbWFyZ2luLXRvcDogMC4yNXJlbTtcbn1cblxuLmlucHV0LWRpdmlkZXIge1xuICBtaW4td2lkdGg6IDFweDtcbiAgaGVpZ2h0OiAyNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjO1xuICBtYXJnaW46IDA7XG59XG5cbi5pbnB1dC1pY29uLWNvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDZweCAxMHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgbWluLXdpZHRoOiA0MHB4O1xufVxuXG4uaW5wdXQtaWNvbi1jb250YWluZXIgc3ZnIHtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbn1cblxuLmR1cmF0aW9uLWlucHV0LWNvbnRhaW5lciB7XG4gIG1pbi1oZWlnaHQ6IDIuNXJlbTtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICBnYXA6IDA7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICAvKiBib3JkZXItcmFkaXVzOiA0cHg7ICovXG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5kdXJhdGlvbi1pbnB1dCB7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICBwYWRkaW5nOiA2cHggMTBweDtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICBmbGV4OiAxO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWluLXdpZHRoOiAwO1xufVxuXG4uZHVyYXRpb24tdW5pdC1zZWxlY3Qge1xuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcbiAgcGFkZGluZzogNnB4IDEwcHg7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZsZXg6IDAgMCBhdXRvO1xuICB3aWR0aDogYXV0bztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLnByaWNlLWlucHV0LWNvbnRhaW5lcjpmb2N1cy13aXRoaW4ge1xuICBib3JkZXItY29sb3I6ICNmZjZmMDA7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjZmY2ZjAwO1xufVxuXG4uZHVyYXRpb24taW5wdXQtY29udGFpbmVyOmZvY3VzLXdpdGhpbiB7XG4gIGJvcmRlci1jb2xvcjogI2ZmNmYwMDtcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICNmZjZmMDA7XG59XG5cbi5wcmljZS1pbnB1dC1jb250YWluZXI6aG92ZXIsXG4uZHVyYXRpb24taW5wdXQtY29udGFpbmVyOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjOTk5O1xufVxuXG4uZHVyYXRpb24tdW5pdC1zZWxlY3Q6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xufVxuXG4uZHVyYXRpb24tdW5pdC1zZWxlY3Q6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xufVxuIl19 */";
5424
5718
  var buttonStyles = {"button":"buttons-module_button__4Ogad","connect-button":"buttons-module_connect-button__CJhUa","button-icon":"buttons-module_button-icon__JM4-2","provider-button":"buttons-module_provider-button__6JY7s","provider-icon":"buttons-module_provider-icon__MOhr8","provider-name":"buttons-module_provider-name__tHWO2","provider-label":"buttons-module_provider-label__CEGRr","link-button-default":"buttons-module_link-button-default__EcKUT","twitter":"buttons-module_twitter__9sRaz","spotify":"buttons-module_spotify__-fiKQ","discord":"buttons-module_discord__I-YjZ","tiktok":"buttons-module_tiktok__a80-0","telegram":"buttons-module_telegram__ExOTS","button-container":"buttons-module_button-container__-oPqd","social-icon":"buttons-module_social-icon__DPdPe","link-icon":"buttons-module_link-icon__8V8FP","camp-logo":"buttons-module_camp-logo__slNl0","link-button-icon":"buttons-module_link-button-icon__llX8m","icon-container":"buttons-module_icon-container__Q5bI1","not-linked":"buttons-module_not-linked__ua4va","file-upload-container":"buttons-module_file-upload-container__le7Cg","dragging":"buttons-module_dragging__cfggZ","file-preview":"buttons-module_file-preview__yuM5i","file-selected":"buttons-module_file-selected__YY6ms","file-input":"buttons-module_file-input__gbD5T","selected-file-container":"buttons-module_selected-file-container__E1AXM","remove-file-button":"buttons-module_remove-file-button__Q1FMa","upload-file-button":"buttons-module_upload-file-button__vTwWd","file-preview-text":"buttons-module_file-preview-text__80Ju0","file-name":"buttons-module_file-name__3iskR","upload-buttons":"buttons-module_upload-buttons__3SAw6","accepted-types":"buttons-module_accepted-types__Ys-D2","loading-bar-container":"buttons-module_loading-bar-container__nrgPX","loading-bar":"buttons-module_loading-bar__IUAg1","date-picker":"buttons-module_date-picker__V6gRM","percentage-slider":"buttons-module_percentage-slider__M84tC","fancy-input-container":"buttons-module_fancy-input-container__s-zVw","fancy-input":"buttons-module_fancy-input__RpSOF","fancy-input-label":"buttons-module_fancy-input-label__d-sG7","input-divider":"buttons-module_input-divider__RVasJ","input-icon-container":"buttons-module_input-icon-container__MUYKL","duration-input-container":"buttons-module_duration-input-container__Rh9Na","duration-input":"buttons-module_duration-input__-gt3p","duration-unit-select":"buttons-module_duration-unit-select__VKFf6","price-input-container":"buttons-module_price-input-container__teIRS"};
5425
5719
  styleInject(css_248z);