@zaamx/netme-bundle 0.0.2 → 0.0.5

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.
@@ -4,94 +4,86 @@ exports.GET = GET;
4
4
  exports.POST = POST;
5
5
  const bundles_1 = require("../../../modules/bundles");
6
6
  const utils_1 = require("@medusajs/framework/utils");
7
+ function parseJsonField(field) {
8
+ if (!field)
9
+ return {};
10
+ if (typeof field === "string") {
11
+ try {
12
+ return JSON.parse(field);
13
+ }
14
+ catch {
15
+ return {};
16
+ }
17
+ }
18
+ return field;
19
+ }
7
20
  async function GET(req, res) {
8
21
  try {
9
- const query = req.scope.resolve("query");
10
- const { data: bundles, metadata: { count, take, skip } = {} } = await query.graph({
11
- entity: "bundle",
12
- ...req.queryConfig
13
- });
14
- // Enrich bundles with product information
22
+ const limit = parseInt(req.query.limit) || 15;
23
+ const offset = parseInt(req.query.offset) || 0;
24
+ const bundleService = req.scope.resolve(bundles_1.BUNDLE_MODULE);
15
25
  const productService = req.scope.resolve(utils_1.Modules.PRODUCT);
26
+ // Use the service directly — query.graph doesn't index plugin module entities
27
+ const allBundles = await bundleService.listBundles({ is_bundle: true });
28
+ const count = allBundles.length;
29
+ const bundles = allBundles.slice(offset, offset + limit);
16
30
  const enrichedBundles = await Promise.all(bundles.map(async (bundle) => {
31
+ const childProductsData = parseJsonField(bundle.child_products)?.data || [];
32
+ const bundleMetaData = parseJsonField(bundle.bundle_meta)?.data || [];
33
+ let productTitle = "Product not found";
34
+ let productStatus = "unknown";
17
35
  try {
18
36
  const product = await productService.retrieveProduct(bundle.id);
19
- // Get child products details
20
- const childProducts = bundle.child_products?.data || [];
21
- const enrichedChildProducts = await Promise.all(childProducts.map(async (childConfig) => {
22
- try {
23
- const childProduct = await productService.retrieveProduct(childConfig.id);
24
- return {
25
- id: childConfig.id,
26
- product: {
27
- id: childProduct.id,
28
- title: childProduct.title,
29
- },
30
- quantity: childConfig.default_quantity || 1,
31
- min_quantity: childConfig.min_quantity,
32
- max_quantity: childConfig.max_quantity,
33
- optional: childConfig.optional,
34
- separate_shipping: childConfig.separate_shipping,
35
- individual_price: childConfig.individual_price,
36
- };
37
- }
38
- catch (error) {
39
- // If child product doesn't exist, return basic info
40
- return {
41
- id: childConfig.id,
42
- product: {
43
- id: childConfig.id,
44
- title: "Product not found",
45
- },
46
- quantity: childConfig.default_quantity || 1,
47
- min_quantity: childConfig.min_quantity,
48
- max_quantity: childConfig.max_quantity,
49
- optional: childConfig.optional,
50
- separate_shipping: childConfig.separate_shipping,
51
- individual_price: childConfig.individual_price,
52
- };
53
- }
54
- }));
55
- return {
56
- id: bundle.id,
57
- title: product.title,
58
- product: {
59
- id: product.id,
60
- },
61
- items: enrichedChildProducts,
62
- bundle_meta: bundle.bundle_meta?.data || [],
63
- is_bundle: bundle.is_bundle,
64
- created_at: bundle.created_at,
65
- updated_at: bundle.updated_at,
66
- };
37
+ productTitle = product.title;
38
+ productStatus = product.status;
39
+ }
40
+ catch {
41
+ // product deleted or missing — still show the bundle
67
42
  }
68
- catch (error) {
69
- // If main product doesn't exist, return basic bundle info
43
+ const enrichedItems = await Promise.all(childProductsData.map(async (childConfig) => {
44
+ let childTitle = "Product not found";
45
+ try {
46
+ const childProduct = await productService.retrieveProduct(childConfig.id);
47
+ childTitle = childProduct.title;
48
+ }
49
+ catch {
50
+ // child product missing
51
+ }
70
52
  return {
71
- id: bundle.id,
72
- title: "Product not found",
73
- product: {
74
- id: bundle.id,
75
- },
76
- items: [],
77
- bundle_meta: bundle.bundle_meta?.data || [],
78
- is_bundle: bundle.is_bundle,
79
- created_at: bundle.created_at,
80
- updated_at: bundle.updated_at,
53
+ id: childConfig.id,
54
+ product: { id: childConfig.id, title: childTitle },
55
+ quantity: childConfig.default_quantity || 1,
56
+ default_quantity: childConfig.default_quantity || 1,
57
+ min_quantity: childConfig.min_quantity ?? 1,
58
+ max_quantity: childConfig.max_quantity ?? 1,
59
+ optional: childConfig.optional ?? false,
60
+ separate_shipping: childConfig.separate_shipping ?? false,
61
+ individual_price: childConfig.individual_price ?? false,
81
62
  };
82
- }
63
+ }));
64
+ return {
65
+ id: bundle.id,
66
+ title: productTitle,
67
+ status: productStatus,
68
+ product: { id: bundle.id },
69
+ items: enrichedItems,
70
+ bundle_meta: bundleMetaData,
71
+ is_bundle: bundle.is_bundle,
72
+ created_at: bundle.created_at,
73
+ updated_at: bundle.updated_at,
74
+ };
83
75
  }));
84
76
  res.json({
85
77
  bundled_products: enrichedBundles,
86
- count: count || 0,
87
- limit: take || 15,
88
- offset: skip || 0,
78
+ count,
79
+ limit,
80
+ offset,
89
81
  });
90
82
  }
91
83
  catch (error) {
92
84
  res.status(500).json({
93
85
  message: "Failed to retrieve bundled products",
94
- error: error instanceof Error ? error.message : "Unknown error"
86
+ error: error instanceof Error ? error.message : "Unknown error",
95
87
  });
96
88
  }
97
89
  }
@@ -149,4 +141,4 @@ async function POST(req, res) {
149
141
  });
150
142
  }
151
143
  }
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2J1bmRsZWQtcHJvZHVjdHMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSxrQkFxR0M7QUFFRCxvQkE4REM7QUExS0Qsc0RBQXdEO0FBRXhELHFEQUFtRDtBQUc1QyxLQUFLLFVBQVUsR0FBRyxDQUN2QixHQUFrQixFQUNsQixHQUFtQjtJQUVuQixJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN4QyxNQUFNLEVBQ0osSUFBSSxFQUFFLE9BQU8sRUFDYixRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFDckMsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDcEIsTUFBTSxFQUFFLFFBQVE7WUFDaEIsR0FBRyxHQUFHLENBQUMsV0FBVztTQUNuQixDQUFDLENBQUE7UUFFRiwwQ0FBMEM7UUFDMUMsTUFBTSxjQUFjLEdBQTBCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNoRixNQUFNLGVBQWUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3RDLE9BQWlCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQkFFL0QsNkJBQTZCO2dCQUM3QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUE7Z0JBQ3ZELE1BQU0scUJBQXFCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxD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
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2J1bmRsZWQtcHJvZHVjdHMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFjQSxrQkFpRkM7QUFFRCxvQkE4REM7QUE5SkQsc0RBQXdEO0FBRXhELHFEQUFtRDtBQUduRCxTQUFTLGNBQWMsQ0FBQyxLQUFVO0lBQ2hDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFDckIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUM7WUFBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7UUFBQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQUMsT0FBTyxFQUFFLENBQUE7UUFBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFTSxLQUFLLFVBQVUsR0FBRyxDQUN2QixHQUFrQixFQUNsQixHQUFtQjtJQUVuQixJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFlLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDdkQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUV4RCxNQUFNLGFBQWEsR0FBa0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsdUJBQWEsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sY0FBYyxHQUEwQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFaEYsOEVBQThFO1FBQzlFLE1BQU0sVUFBVSxHQUFHLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUs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
@@ -39,16 +39,7 @@ async function GET(req, res) {
39
39
  async function POST(req, res) {
40
40
  const { id: productId } = req.params;
41
41
  const { child_product_ids, bundle_meta, is_bundle } = req.body;
42
- // Always delete any existing bundle config for this product first
43
- try {
44
- await (0, delete_product_bundle_1.deleteProductBundleWorkflow)(req.scope).run({
45
- input: { product_id: productId }
46
- });
47
- }
48
- catch (error) {
49
- // Ignore errors if no bundle exists to delete
50
- }
51
- // Then create a new bundle config
42
+ // updateProductBundleWorkflow handles both create and update (upsert logic)
52
43
  const { result: product } = await (0, update_product_bundle_1.updateProductBundleWorkflow)(req.scope).run({
53
44
  input: {
54
45
  product_id: productId,
@@ -68,4 +59,4 @@ async function DELETE(req, res) {
68
59
  });
69
60
  res.json({ product });
70
61
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Byb2R1Y3RzL1tpZF0vYnVuZGxlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBYUEsa0JBa0NDO0FBRUQsb0JBMkNDO0FBRUQsd0JBYUM7QUExR0QsMEZBQXNIO0FBQ3RILDBGQUE0RjtBQUM1Riw0REFBOEQ7QUFFOUQscURBQW1EO0FBUTVDLEtBQUssVUFBVSxHQUFHLENBQ3ZCLEdBQWtCLEVBQ2xCLEdBQW1CO0lBRW5CLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtRQUNwQyxNQUFNLGFBQWEsR0FBa0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsdUJBQWEsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sY0FBYyxHQUEwQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFaEYsa0JBQWtCO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBQztZQUM5QyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUM7U0FDaEIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtZQUN2QyxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN6QixNQUFNLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFL0QsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLE9BQU8sRUFBRTtnQkFDUCxHQUFHLE9BQU87Z0JBQ1YsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLHVDQUF1QztZQUNoRCxLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZTtTQUNoRSxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxJQUFJLENBQ3hCLEdBQWtCLEVBQ2xCLEdBQW1CO0lBRW5CLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUNwQyxNQUFNLEVBQ0osaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxTQUFTLEVBQ1YsR0FBRyxHQUFHLENBQUMsSUFZUCxDQUFBO0lBRUQsa0VBQWtFO0lBQ2xFLElBQUksQ0FBQztRQUNILE1BQU0sSUFBQSxtREFBMkIsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQy9DLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUU7U0FDakMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZiw4Q0FBOEM7SUFDaEQsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sSUFBQSxtREFBMkIsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzNFLEtBQUssRUFBRTtZQUNMLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGlCQUFpQjtZQUNqQixXQUFXO1lBQ1gsU0FBUztTQUN5QjtLQUNyQyxDQUFDLENBQUE7SUFFRixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtBQUN2QixDQUFDO0FBRU0sS0FBSyxVQUFVLE1BQU0sQ0FDMUIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFBO0lBRXBDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFBLG1EQUEyQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDM0UsS0FBSyxFQUFFO1lBQ0wsVUFBVSxFQUFFLFNBQVM7U0FDdEI7S0FDRixDQUFDLENBQUE7SUFFRixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtBQUN2QixDQUFDIn0=
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Byb2R1Y3RzL1tpZF0vYnVuZGxlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBYUEsa0JBa0NDO0FBRUQsb0JBa0NDO0FBRUQsd0JBYUM7QUFqR0QsMEZBQXNIO0FBQ3RILDBGQUE0RjtBQUM1Riw0REFBOEQ7QUFFOUQscURBQW1EO0FBUTVDLEtBQUssVUFBVSxHQUFHLENBQ3ZCLEdBQWtCLEVBQ2xCLEdBQW1CO0lBRW5CLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtRQUNwQyxNQUFNLGFBQWEsR0FBa0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsdUJBQWEsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sY0FBYyxHQUEwQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFaEYsa0JBQWtCO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBQztZQUM5QyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUM7U0FDaEIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtZQUN2QyxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN6QixNQUFNLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFL0QsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLE9BQU8sRUFBRTtnQkFDUCxHQUFHLE9BQU87Z0JBQ1YsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLHVDQUF1QztZQUNoRCxLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZTtTQUNoRSxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxJQUFJLENBQ3hCLEdBQWtCLEVBQ2xCLEdBQW1CO0lBRW5CLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUNwQyxNQUFNLEVBQ0osaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxTQUFTLEVBQ1YsR0FBRyxHQUFHLENBQUMsSUFZUCxDQUFBO0lBRUQsNEVBQTRFO0lBQzVFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFBLG1EQUEyQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDM0UsS0FBSyxFQUFFO1lBQ0wsVUFBVSxFQUFFLFNBQVM7WUFDckIsaUJBQWlCO1lBQ2pCLFdBQVc7WUFDWCxTQUFTO1NBQ3lCO0tBQ3JDLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ3ZCLENBQUM7QUFFTSxLQUFLLFVBQVUsTUFBTSxDQUMxQixHQUFrQixFQUNsQixHQUFtQjtJQUVuQixNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUE7SUFFcEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUEsbURBQTJCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMzRSxLQUFLLEVBQUU7WUFDTCxVQUFVLEVBQUUsU0FBUztTQUN0QjtLQUNGLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ3ZCLENBQUMifQ==