codebuff 1.0.104 → 1.0.108

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.
@@ -1,38 +1,25 @@
1
+ type CheckQuotaResult = Promise<{
2
+ creditsUsed: number;
3
+ quota: number;
4
+ endDate: Date;
5
+ subscription_active: boolean;
6
+ session_credits_used?: number;
7
+ }>;
1
8
  export interface IQuotaManager {
2
- checkQuota(id: string): Promise<{
3
- creditsUsed: number;
4
- quota: number;
5
- endDate: Date;
6
- subscription_active: boolean;
7
- }>;
9
+ checkQuota(id: string): CheckQuotaResult;
8
10
  setNextQuota(id: string, quota_exceeded: boolean, next_quota_reset: Date): Promise<void>;
9
11
  }
10
12
  export declare class AnonymousQuotaManager implements IQuotaManager {
11
- checkQuota(fingerprintId: string): Promise<{
12
- creditsUsed: number;
13
- quota: number;
14
- endDate: Date;
15
- subscription_active: boolean;
16
- }>;
13
+ checkQuota(fingerprintId: string, sessionId?: string): CheckQuotaResult;
17
14
  setNextQuota(fingerprintId: string, quota_exceeded: boolean, next_quota_reset: Date): Promise<void>;
18
15
  }
19
16
  export declare class AuthenticatedQuotaManager implements IQuotaManager {
20
- checkQuota(userId: string): Promise<{
21
- creditsUsed: number;
22
- quota: number;
23
- endDate: Date;
24
- subscription_active: boolean;
25
- next_quota_reset: Date;
26
- }>;
17
+ checkQuota(userId: string, sessionId?: string): CheckQuotaResult;
27
18
  setNextQuota(userId: string, quota_exceeded: boolean, next_quota_reset: Date): Promise<void>;
28
19
  }
29
20
  export type AuthType = 'anonymous' | 'authenticated';
30
21
  export declare const getQuotaManager: (authType: AuthType, id: string) => {
31
- checkQuota: () => Promise<{
32
- creditsUsed: number;
33
- quota: number;
34
- endDate: Date;
35
- subscription_active: boolean;
36
- }>;
22
+ checkQuota: (sessionId?: string) => CheckQuotaResult;
37
23
  setNextQuota: (quota_exceeded: boolean, next_quota_reset: Date) => Promise<void>;
38
24
  };
25
+ export {};
@@ -33,10 +33,11 @@ const schema = __importStar(require("../db/schema"));
33
33
  const drizzle_orm_1 = require("drizzle-orm");
34
34
  const ts_pattern_1 = require("ts-pattern");
35
35
  class AnonymousQuotaManager {
36
- async checkQuota(fingerprintId) {
36
+ async checkQuota(fingerprintId, sessionId) {
37
37
  const quota = constants_1.CREDITS_USAGE_LIMITS.ANON;
38
38
  const startDate = (0, drizzle_orm_1.sql) `COALESCE(${schema.fingerprint.next_quota_reset}, now()) - INTERVAL '1 month'`;
39
39
  const endDate = (0, drizzle_orm_1.sql) `COALESCE(${schema.fingerprint.next_quota_reset}, now())`;
40
+ let session_credits_used = undefined;
40
41
  const result = await db_1.default
41
42
  .select({
42
43
  creditsUsed: (0, drizzle_orm_1.sql) `SUM(COALESCE(${schema.message.credits}, 0))`,
@@ -51,15 +52,32 @@ class AnonymousQuotaManager {
51
52
  return rows[0];
52
53
  return {
53
54
  creditsUsed: '0',
54
- quota,
55
55
  endDate: new Date().toDateString(),
56
56
  };
57
57
  });
58
+ if (sessionId) {
59
+ session_credits_used = await db_1.default
60
+ .select({
61
+ client_id: schema.message.client_id,
62
+ fingerprint_id: schema.message.fingerprint_id,
63
+ sessionCreditsUsed: (0, drizzle_orm_1.sql) `SUM(COALESCE(${schema.message.credits}, 0))`,
64
+ })
65
+ .from(schema.message)
66
+ .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema.message.client_id, sessionId), (0, drizzle_orm_1.eq)(schema.message.fingerprint_id, fingerprintId)))
67
+ .groupBy(schema.message.client_id, schema.message.fingerprint_id)
68
+ .then((rows) => {
69
+ if (rows.length > 0) {
70
+ return parseInt(rows[0].sessionCreditsUsed);
71
+ }
72
+ return 0;
73
+ });
74
+ }
58
75
  return {
59
76
  creditsUsed: parseInt(result.creditsUsed),
60
77
  quota,
61
78
  endDate: new Date(result.endDate),
62
79
  subscription_active: false,
80
+ session_credits_used,
63
81
  };
64
82
  }
65
83
  async setNextQuota(fingerprintId, quota_exceeded, next_quota_reset) {
@@ -74,9 +92,10 @@ class AnonymousQuotaManager {
74
92
  }
75
93
  exports.AnonymousQuotaManager = AnonymousQuotaManager;
76
94
  class AuthenticatedQuotaManager {
77
- async checkQuota(userId) {
95
+ async checkQuota(userId, sessionId) {
78
96
  const startDate = (0, drizzle_orm_1.sql) `COALESCE(${schema.user.next_quota_reset}, now()) - INTERVAL '1 month'`;
79
97
  const endDate = (0, drizzle_orm_1.sql) `COALESCE(${schema.user.next_quota_reset}, now())`;
98
+ let session_credits_used = undefined;
80
99
  const result = await db_1.default
81
100
  .select({
82
101
  quota: schema.user.quota,
@@ -89,7 +108,7 @@ class AuthenticatedQuotaManager {
89
108
  .from(schema.user)
90
109
  .leftJoin(schema.message, (0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema.message.user_id, schema.user.id), (0, drizzle_orm_1.between)(schema.message.finished_at, startDate, endDate)))
91
110
  .where((0, drizzle_orm_1.eq)(schema.user.id, userId))
92
- .groupBy(schema.user.quota, schema.user.stripe_customer_id, schema.user.stripe_price_id, schema.user.next_quota_reset, schema.user.subscription_active)
111
+ .groupBy(schema.user.quota, schema.user.stripe_customer_id, schema.user.stripe_price_id, schema.user.subscription_active, schema.user.next_quota_reset)
93
112
  .then((rows) => {
94
113
  if (rows.length > 0)
95
114
  return rows[0];
@@ -102,6 +121,23 @@ class AuthenticatedQuotaManager {
102
121
  subscription_active: false,
103
122
  };
104
123
  });
124
+ if (sessionId) {
125
+ session_credits_used = await db_1.default
126
+ .select({
127
+ client_id: schema.message.client_id,
128
+ user_id: schema.message.user_id,
129
+ sessionCreditsUsed: (0, drizzle_orm_1.sql) `SUM(COALESCE(${schema.message.credits}, 0))`,
130
+ })
131
+ .from(schema.message)
132
+ .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema.message.client_id, sessionId), (0, drizzle_orm_1.eq)(schema.message.user_id, userId)))
133
+ .groupBy(schema.message.client_id, schema.message.user_id)
134
+ .then((rows) => {
135
+ if (rows.length > 0) {
136
+ return parseInt(rows[0].sessionCreditsUsed);
137
+ }
138
+ return 0;
139
+ });
140
+ }
105
141
  const quota = !result?.stripe_customer_id && !result?.stripe_price_id
106
142
  ? constants_1.CREDITS_USAGE_LIMITS.FREE
107
143
  : result?.quota ?? constants_1.CREDITS_USAGE_LIMITS.FREE;
@@ -110,7 +146,7 @@ class AuthenticatedQuotaManager {
110
146
  quota,
111
147
  endDate: new Date(result.endDate),
112
148
  subscription_active: !!result.subscription_active,
113
- next_quota_reset: new Date(result.endDate),
149
+ session_credits_used,
114
150
  };
115
151
  }
116
152
  async setNextQuota(userId, quota_exceeded, next_quota_reset) {
@@ -130,7 +166,7 @@ const getQuotaManager = (authType, id) => {
130
166
  .with('authenticated', () => new AuthenticatedQuotaManager())
131
167
  .exhaustive();
132
168
  return {
133
- checkQuota: () => manager.checkQuota(id),
169
+ checkQuota: (sessionId) => manager.checkQuota(id, sessionId),
134
170
  setNextQuota: (quota_exceeded, next_quota_reset) => manager.setNextQuota(id, quota_exceeded, next_quota_reset),
135
171
  };
136
172
  };
@@ -1 +1 @@
1
- {"version":3,"file":"quota-manager.js","sourceRoot":"","sources":["../../src/billing/quota-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quota-manager.js","sourceRoot":"","sources":["../../src/billing/quota-manager.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ export declare const TOOL_RESULT_MARKER: string;
4
4
  export declare const EXISTING_CODE_MARKER = "[[**REPLACE_WITH_EXISTING_CODE**]]";
5
5
  export declare const SKIPPED_TERMINAL_COMMANDS: string[];
6
6
  export declare const MAX_DATE: Date;
7
- export type UsageLimits = 'ANON' | 'FREE' | 'PAID';
7
+ export type UsageLimits = 'ANON' | 'FREE' | 'PAID' | 'PRO_PLUS';
8
8
  export declare const CREDITS_USAGE_LIMITS: Record<UsageLimits, number>;
9
9
  export declare const CREDITS_REFERRAL_BONUS = 500;
10
10
  export declare const claudeModels: {
@@ -50,11 +50,13 @@ exports.CREDITS_USAGE_LIMITS = process.env.NEXT_PUBLIC_ENVIRONMENT === 'local'
50
50
  ANON: 1_000_000,
51
51
  FREE: 2_500_000,
52
52
  PAID: 10_000_000,
53
+ PRO_PLUS: 55_000_000,
53
54
  }
54
55
  : {
55
56
  ANON: 750,
56
57
  FREE: 1_500,
57
58
  PAID: 10_000,
59
+ PRO_PLUS: 55_000,
58
60
  };
59
61
  exports.CREDITS_REFERRAL_BONUS = 500;
60
62
  exports.claudeModels = {
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA,kCAAkC;;;AAErB,QAAA,WAAW,GAAG,GAAG,GAAG,MAAM,CAAA;AAC1B,QAAA,iBAAiB,GAAG,GAAG,GAAG,oBAAoB,CAAA;AAC9C,QAAA,kBAAkB,GAAG,GAAG,GAAG,cAAc,CAAA;AACzC,QAAA,oBAAoB,GAAG,oCAAoC,CAAA;AAE3D,QAAA,yBAAyB,GAAG;IACvC,UAAU;IACV,MAAM;IACN,MAAM;IACN,SAAS;IACT,IAAI;IACJ,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,KAAK;IACL,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;CACP,CAAA;AAEY,QAAA,QAAQ,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,CAAA;AAGnC,QAAA,oBAAoB,GAC/B,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,OAAO;IAC7C,CAAC,CAAC;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,UAAU;KACjB;IACH,CAAC,CAAC;QACE,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,MAAM;KACb,CAAA;AACM,QAAA,sBAAsB,GAAG,GAAG,CAAA;AAE5B,QAAA,YAAY,GAAG;IAC1B,MAAM,EAAE,4BAA4B;IACpC,KAAK,EAAE,2BAA2B;CAC1B,CAAA;AAEG,QAAA,YAAY,GAAG;IAC1B,KAAK,EAAE,mBAAmB;IAC1B,SAAS,EAAE,wBAAwB;CAC3B,CAAA;AAEG,QAAA,MAAM,GAAG;IACpB,GAAG,oBAAY;IACf,GAAG,oBAAY;CAChB,CAAA;AAEY,QAAA,YAAY,GAAG,cAAc,CAAA"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA,kCAAkC;;;AAErB,QAAA,WAAW,GAAG,GAAG,GAAG,MAAM,CAAA;AAC1B,QAAA,iBAAiB,GAAG,GAAG,GAAG,oBAAoB,CAAA;AAC9C,QAAA,kBAAkB,GAAG,GAAG,GAAG,cAAc,CAAA;AACzC,QAAA,oBAAoB,GAAG,oCAAoC,CAAA;AAE3D,QAAA,yBAAyB,GAAG;IACvC,UAAU;IACV,MAAM;IACN,MAAM;IACN,SAAS;IACT,IAAI;IACJ,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,KAAK;IACL,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;CACP,CAAA;AAEY,QAAA,QAAQ,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,CAAA;AAGnC,QAAA,oBAAoB,GAC/B,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,OAAO;IAC7C,CAAC,CAAC;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,UAAU;KACrB;IACH,CAAC,CAAC;QACE,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,MAAM;KACjB,CAAA;AACM,QAAA,sBAAsB,GAAG,GAAG,CAAA;AAE5B,QAAA,YAAY,GAAG;IAC1B,MAAM,EAAE,4BAA4B;IACpC,KAAK,EAAE,2BAA2B;CAC1B,CAAA;AAEG,QAAA,YAAY,GAAG;IAC1B,KAAK,EAAE,mBAAmB;IAC1B,SAAS,EAAE,wBAAwB;CAC3B,CAAA;AAEG,QAAA,MAAM,GAAG;IACpB,GAAG,oBAAY;IACf,GAAG,oBAAY;CAChB,CAAA;AAEY,QAAA,YAAY,GAAG,cAAc,CAAA"}
@@ -3,19 +3,19 @@ export declare const usageDataSchema: z.ZodObject<{
3
3
  creditsUsed: z.ZodNumber;
4
4
  totalQuota: z.ZodNumber;
5
5
  remainingCredits: z.ZodNumber;
6
- billingCycleEnd: z.ZodDate;
7
6
  subscriptionActive: z.ZodBoolean;
7
+ nextQuotaReset: z.ZodDate;
8
8
  }, "strip", z.ZodTypeAny, {
9
9
  creditsUsed: number;
10
10
  totalQuota: number;
11
11
  remainingCredits: number;
12
- billingCycleEnd: Date;
13
12
  subscriptionActive: boolean;
13
+ nextQuotaReset: Date;
14
14
  }, {
15
15
  creditsUsed: number;
16
16
  totalQuota: number;
17
17
  remainingCredits: number;
18
- billingCycleEnd: Date;
19
18
  subscriptionActive: boolean;
19
+ nextQuotaReset: Date;
20
20
  }>;
21
21
  export type UsageData = z.infer<typeof usageDataSchema>;
@@ -6,7 +6,7 @@ exports.usageDataSchema = zod_1.z.object({
6
6
  creditsUsed: zod_1.z.number(),
7
7
  totalQuota: zod_1.z.number(),
8
8
  remainingCredits: zod_1.z.number(),
9
- billingCycleEnd: zod_1.z.coerce.date(),
10
9
  subscriptionActive: zod_1.z.boolean(),
10
+ nextQuotaReset: zod_1.z.coerce.date(),
11
11
  });
12
12
  //# sourceMappingURL=usage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/types/usage.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IACtC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;IACvB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;IACtB,gBAAgB,EAAE,OAAC,CAAC,MAAM,EAAE;IAC5B,eAAe,EAAE,OAAC,CAAC,MAAM,CAAC,IAAI,EAAE;IAChC,kBAAkB,EAAE,OAAC,CAAC,OAAO,EAAE;CAChC,CAAC,CAAA"}
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/types/usage.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IACtC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;IACvB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;IACtB,gBAAgB,EAAE,OAAC,CAAC,MAAM,EAAE;IAC5B,kBAAkB,EAAE,OAAC,CAAC,OAAO,EAAE;IAC/B,cAAc,EAAE,OAAC,CAAC,MAAM,CAAC,IAAI,EAAE;CAChC,CAAC,CAAA"}
@@ -1,3 +1,4 @@
1
1
  export declare const truncateString: (str: string, maxLength: number) => string;
2
2
  export declare const replaceNonStandardPlaceholderComments: (content: string, replacement: string) => string;
3
3
  export declare const randBoolFromStr: (str: string) => boolean;
4
+ export declare const pluralize: (count: number, word: string) => string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.randBoolFromStr = exports.replaceNonStandardPlaceholderComments = exports.truncateString = void 0;
3
+ exports.pluralize = exports.randBoolFromStr = exports.replaceNonStandardPlaceholderComments = exports.truncateString = void 0;
4
4
  const lodash_1 = require("lodash");
5
5
  const truncateString = (str, maxLength) => {
6
6
  if (str.length <= maxLength) {
@@ -57,4 +57,25 @@ const randBoolFromStr = (str) => {
57
57
  return (0, lodash_1.sumBy)(str.split(''), (char) => char.charCodeAt(0)) % 2 === 0;
58
58
  };
59
59
  exports.randBoolFromStr = randBoolFromStr;
60
+ const pluralize = (count, word) => {
61
+ if (count === 1)
62
+ return word;
63
+ // Handle words ending in 'y' (unless preceded by a vowel)
64
+ if (word.endsWith('y') && !word.match(/[aeiou]y$/)) {
65
+ return word.slice(0, -1) + 'ies';
66
+ }
67
+ // Handle words ending in s, sh, ch, x, z, o
68
+ if (word.match(/[sxz]$/) || word.match(/[cs]h$/) || word.match(/o$/)) {
69
+ return word + 'es';
70
+ }
71
+ // Handle words ending in f/fe
72
+ if (word.endsWith('f')) {
73
+ return word.slice(0, -1) + 'ves';
74
+ }
75
+ if (word.endsWith('fe')) {
76
+ return word.slice(0, -2) + 'ves';
77
+ }
78
+ return `${count} ${word + 's'}`;
79
+ };
80
+ exports.pluralize = pluralize;
60
81
  //# sourceMappingURL=string.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/util/string.ts"],"names":[],"mappings":";;;AAAA,mCAA8B;AAEvB,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,SAAiB,EAAE,EAAE;IAC/D,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAA;AACxC,CAAC,CAAA;AALY,QAAA,cAAc,kBAK1B;AAEM,MAAM,qCAAqC,GAAG,CACnD,OAAe,EACf,WAAmB,EACX,EAAE;IACV,MAAM,eAAe,GAAG;QACtB,kCAAkC;QAClC;YACE,KAAK,EACH,0FAA0F;YAC5F,WAAW,EAAE,WAAW;SACzB;QACD,gEAAgE;QAChE;YACE,KAAK,EACH,2EAA2E;YAC7E,WAAW,EAAE,WAAW;SACzB;QACD;YACE,KAAK,EACH,kFAAkF;YACpF,WAAW,EAAE,WAAW;SACzB;QACD,2BAA2B;QAC3B;YACE,KAAK,EACH,wEAAwE;YAC1E,WAAW,EAAE,WAAW;SACzB;QACD,sBAAsB;QACtB;YACE,KAAK,EACH,iFAAiF;YACnF,WAAW,EAAE,WAAW;SACzB;QACD,6BAA6B;QAC7B;YACE,KAAK,EACH,yEAAyE;YAC3E,WAAW,EAAE,WAAW;SACzB;QACD,kBAAkB;QAClB;YACE,KAAK,EACH,wEAAwE;YAC1E,WAAW,EAAE,WAAW;SACzB;KACF,CAAA;IAED,IAAI,cAAc,GAAG,OAAO,CAAA;IAE5B,KAAK,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,eAAe,EAAE,CAAC;QACrD,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,cAAc,CAAA;AACvB,CAAC,CAAA;AAvDY,QAAA,qCAAqC,yCAuDjD;AAEM,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE;IAC7C,OAAO,IAAA,cAAK,EAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACrE,CAAC,CAAA;AAFY,QAAA,eAAe,mBAE3B"}
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/util/string.ts"],"names":[],"mappings":"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"}