@sentry/browser 9.14.0 → 9.16.0

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.
Files changed (131) hide show
  1. package/build/npm/cjs/client.js.map +1 -1
  2. package/build/npm/cjs/helpers.js.map +1 -1
  3. package/build/npm/cjs/index.js +7 -7
  4. package/build/npm/cjs/integrations/breadcrumbs.js +1 -4
  5. package/build/npm/cjs/integrations/breadcrumbs.js.map +1 -1
  6. package/build/npm/cjs/integrations/browserapierrors.js.map +1 -1
  7. package/build/npm/cjs/integrations/browsersession.js +1 -1
  8. package/build/npm/cjs/integrations/browsersession.js.map +1 -1
  9. package/build/npm/cjs/integrations/contextlines.js.map +1 -1
  10. package/build/npm/cjs/integrations/featureFlags/featureFlagsIntegration.js.map +1 -1
  11. package/build/npm/cjs/integrations/featureFlags/launchdarkly/integration.js.map +1 -1
  12. package/build/npm/cjs/integrations/featureFlags/openfeature/integration.js.map +1 -1
  13. package/build/npm/cjs/integrations/featureFlags/statsig/integration.js.map +1 -1
  14. package/build/npm/cjs/integrations/featureFlags/unleash/integration.js.map +1 -1
  15. package/build/npm/cjs/integrations/globalhandlers.js.map +1 -1
  16. package/build/npm/cjs/integrations/graphqlClient.js +1 -1
  17. package/build/npm/cjs/integrations/graphqlClient.js.map +1 -1
  18. package/build/npm/cjs/integrations/httpclient.js +1 -1
  19. package/build/npm/cjs/integrations/httpclient.js.map +1 -1
  20. package/build/npm/cjs/integrations/reportingobserver.js.map +1 -1
  21. package/build/npm/cjs/integrations/spotlight.js +1 -1
  22. package/build/npm/cjs/integrations/spotlight.js.map +1 -1
  23. package/build/npm/cjs/log.js.map +1 -1
  24. package/build/npm/cjs/profiling/integration.js.map +1 -1
  25. package/build/npm/cjs/profiling/startProfileForSpan.js.map +1 -1
  26. package/build/npm/cjs/profiling/utils.js.map +1 -1
  27. package/build/npm/cjs/stack-parsers.js +0 -7
  28. package/build/npm/cjs/stack-parsers.js.map +1 -1
  29. package/build/npm/cjs/tracing/backgroundtab.js.map +1 -1
  30. package/build/npm/cjs/tracing/browserTracingIntegration.js +6 -18
  31. package/build/npm/cjs/tracing/browserTracingIntegration.js.map +1 -1
  32. package/build/npm/cjs/tracing/linkedTraces.js +226 -0
  33. package/build/npm/cjs/tracing/linkedTraces.js.map +1 -0
  34. package/build/npm/cjs/tracing/request.js +23 -6
  35. package/build/npm/cjs/tracing/request.js.map +1 -1
  36. package/build/npm/cjs/transports/fetch.js +1 -1
  37. package/build/npm/cjs/transports/fetch.js.map +1 -1
  38. package/build/npm/cjs/userfeedback.js.map +1 -1
  39. package/build/npm/cjs/utils/featureFlags.js.map +1 -1
  40. package/build/npm/cjs/utils/lazyLoadIntegration.js.map +1 -1
  41. package/build/npm/esm/client.js.map +1 -1
  42. package/build/npm/esm/helpers.js.map +1 -1
  43. package/build/npm/esm/index.js +4 -4
  44. package/build/npm/esm/integrations/breadcrumbs.js +1 -4
  45. package/build/npm/esm/integrations/breadcrumbs.js.map +1 -1
  46. package/build/npm/esm/integrations/browserapierrors.js.map +1 -1
  47. package/build/npm/esm/integrations/browsersession.js +1 -1
  48. package/build/npm/esm/integrations/browsersession.js.map +1 -1
  49. package/build/npm/esm/integrations/contextlines.js.map +1 -1
  50. package/build/npm/esm/integrations/featureFlags/featureFlagsIntegration.js.map +1 -1
  51. package/build/npm/esm/integrations/featureFlags/launchdarkly/integration.js.map +1 -1
  52. package/build/npm/esm/integrations/featureFlags/openfeature/integration.js.map +1 -1
  53. package/build/npm/esm/integrations/featureFlags/statsig/integration.js.map +1 -1
  54. package/build/npm/esm/integrations/featureFlags/unleash/integration.js.map +1 -1
  55. package/build/npm/esm/integrations/globalhandlers.js.map +1 -1
  56. package/build/npm/esm/integrations/graphqlClient.js +1 -1
  57. package/build/npm/esm/integrations/graphqlClient.js.map +1 -1
  58. package/build/npm/esm/integrations/httpclient.js +1 -1
  59. package/build/npm/esm/integrations/httpclient.js.map +1 -1
  60. package/build/npm/esm/integrations/reportingobserver.js.map +1 -1
  61. package/build/npm/esm/integrations/spotlight.js +1 -1
  62. package/build/npm/esm/integrations/spotlight.js.map +1 -1
  63. package/build/npm/esm/log.js.map +1 -1
  64. package/build/npm/esm/package.json +1 -1
  65. package/build/npm/esm/profiling/integration.js.map +1 -1
  66. package/build/npm/esm/profiling/startProfileForSpan.js.map +1 -1
  67. package/build/npm/esm/profiling/utils.js.map +1 -1
  68. package/build/npm/esm/stack-parsers.js +0 -7
  69. package/build/npm/esm/stack-parsers.js.map +1 -1
  70. package/build/npm/esm/tracing/backgroundtab.js.map +1 -1
  71. package/build/npm/esm/tracing/browserTracingIntegration.js +6 -18
  72. package/build/npm/esm/tracing/browserTracingIntegration.js.map +1 -1
  73. package/build/npm/esm/tracing/linkedTraces.js +217 -0
  74. package/build/npm/esm/tracing/linkedTraces.js.map +1 -0
  75. package/build/npm/esm/tracing/request.js +23 -6
  76. package/build/npm/esm/tracing/request.js.map +1 -1
  77. package/build/npm/esm/transports/fetch.js +1 -1
  78. package/build/npm/esm/transports/fetch.js.map +1 -1
  79. package/build/npm/esm/userfeedback.js.map +1 -1
  80. package/build/npm/esm/utils/featureFlags.js.map +1 -1
  81. package/build/npm/esm/utils/lazyLoadIntegration.js.map +1 -1
  82. package/build/npm/types/client.d.ts.map +1 -1
  83. package/build/npm/types/helpers.d.ts +1 -0
  84. package/build/npm/types/helpers.d.ts.map +1 -1
  85. package/build/npm/types/index.bundle.feedback.d.ts +0 -1
  86. package/build/npm/types/index.bundle.feedback.d.ts.map +1 -1
  87. package/build/npm/types/index.bundle.tracing.d.ts.map +1 -1
  88. package/build/npm/types/index.bundle.tracing.replay.d.ts +1 -1
  89. package/build/npm/types/index.bundle.tracing.replay.d.ts.map +1 -1
  90. package/build/npm/types/index.bundle.tracing.replay.feedback.d.ts +2 -2
  91. package/build/npm/types/index.bundle.tracing.replay.feedback.d.ts.map +1 -1
  92. package/build/npm/types/index.d.ts +4 -4
  93. package/build/npm/types/index.d.ts.map +1 -1
  94. package/build/npm/types/integrations/breadcrumbs.d.ts.map +1 -1
  95. package/build/npm/types/integrations/browserapierrors.d.ts.map +1 -1
  96. package/build/npm/types/integrations/featureFlags/featureFlagsIntegration.d.ts.map +1 -1
  97. package/build/npm/types/integrations/featureFlags/launchdarkly/integration.d.ts.map +1 -1
  98. package/build/npm/types/integrations/featureFlags/openfeature/integration.d.ts.map +1 -1
  99. package/build/npm/types/integrations/featureFlags/statsig/integration.d.ts.map +1 -1
  100. package/build/npm/types/integrations/featureFlags/unleash/integration.d.ts.map +1 -1
  101. package/build/npm/types/integrations/globalhandlers.d.ts.map +1 -1
  102. package/build/npm/types/integrations/graphqlClient.d.ts.map +1 -1
  103. package/build/npm/types/integrations/httpclient.d.ts.map +1 -1
  104. package/build/npm/types/integrations/spotlight.d.ts.map +1 -1
  105. package/build/npm/types/log.d.ts.map +1 -1
  106. package/build/npm/types/profiling/integration.d.ts.map +1 -1
  107. package/build/npm/types/profiling/startProfileForSpan.d.ts.map +1 -1
  108. package/build/npm/types/profiling/utils.d.ts.map +1 -1
  109. package/build/npm/types/stack-parsers.d.ts.map +1 -1
  110. package/build/npm/types/tracing/browserTracingIntegration.d.ts +20 -2
  111. package/build/npm/types/tracing/browserTracingIntegration.d.ts.map +1 -1
  112. package/build/npm/types/tracing/{previousTrace.d.ts → linkedTraces.d.ts} +24 -3
  113. package/build/npm/types/tracing/linkedTraces.d.ts.map +1 -0
  114. package/build/npm/types/tracing/request.d.ts.map +1 -1
  115. package/build/npm/types/transports/fetch.d.ts.map +1 -1
  116. package/build/npm/types/userfeedback.d.ts.map +1 -1
  117. package/build/npm/types/utils/featureFlags.d.ts.map +1 -1
  118. package/build/npm/types/utils/lazyLoadIntegration.d.ts.map +1 -1
  119. package/build/npm/types-ts3.8/helpers.d.ts +1 -0
  120. package/build/npm/types-ts3.8/index.bundle.feedback.d.ts +0 -1
  121. package/build/npm/types-ts3.8/index.bundle.tracing.replay.d.ts +1 -1
  122. package/build/npm/types-ts3.8/index.bundle.tracing.replay.feedback.d.ts +2 -2
  123. package/build/npm/types-ts3.8/index.d.ts +4 -4
  124. package/build/npm/types-ts3.8/tracing/browserTracingIntegration.d.ts +20 -2
  125. package/build/npm/types-ts3.8/tracing/{previousTrace.d.ts → linkedTraces.d.ts} +24 -3
  126. package/package.json +7 -7
  127. package/build/npm/cjs/tracing/previousTrace.js +0 -122
  128. package/build/npm/cjs/tracing/previousTrace.js.map +0 -1
  129. package/build/npm/esm/tracing/previousTrace.js +0 -115
  130. package/build/npm/esm/tracing/previousTrace.js.map +0 -1
  131. package/build/npm/types/tracing/previousTrace.d.ts.map +0 -1
@@ -1,115 +0,0 @@
1
- import { spanToJSON, logger, SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE } from '@sentry/core';
2
- import { WINDOW } from '../helpers.js';
3
- import '@sentry-internal/browser-utils';
4
- import '../stack-parsers.js';
5
- import { DEBUG_BUILD } from '../debug-build.js';
6
- import '../integrations/breadcrumbs.js';
7
- import '../integrations/browserapierrors.js';
8
- import '../integrations/browsersession.js';
9
- import '../integrations/globalhandlers.js';
10
- import '../integrations/httpcontext.js';
11
- import '../integrations/linkederrors.js';
12
-
13
- // 1h in seconds
14
- const PREVIOUS_TRACE_MAX_DURATION = 3600;
15
-
16
- // session storage key
17
- const PREVIOUS_TRACE_KEY = 'sentry_previous_trace';
18
-
19
- const PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE = 'sentry.previous_trace';
20
-
21
- /**
22
- * Adds a previous_trace span link to the passed span if the passed
23
- * previousTraceInfo is still valid.
24
- *
25
- * @returns the updated previous trace info (based on the current span/trace) to
26
- * be used on the next call
27
- */
28
- function addPreviousTraceSpanLink(
29
- previousTraceInfo,
30
- span,
31
- ) {
32
- const spanJson = spanToJSON(span);
33
-
34
- if (!previousTraceInfo) {
35
- return {
36
- spanContext: span.spanContext(),
37
- startTimestamp: spanJson.start_timestamp,
38
- };
39
- }
40
-
41
- const previousTraceSpanCtx = previousTraceInfo.spanContext;
42
- if (previousTraceSpanCtx.traceId === spanJson.trace_id) {
43
- // This means, we're still in the same trace so let's not update the previous trace info
44
- // or add a link to the current span.
45
- // Once we move away from the long-lived, route-based trace model, we can remove this cases
46
- return previousTraceInfo;
47
- }
48
-
49
- // Only add the link if the startTimeStamp of the previous trace's root span is within
50
- // PREVIOUS_TRACE_MAX_DURATION (1h) of the current root span's startTimestamp
51
- // This is done to
52
- // - avoid adding links to "stale" traces
53
- // - enable more efficient querying for previous/next traces in Sentry
54
- if (Date.now() / 1000 - previousTraceInfo.startTimestamp <= PREVIOUS_TRACE_MAX_DURATION) {
55
- if (DEBUG_BUILD) {
56
- logger.info(
57
- `Adding previous_trace ${previousTraceSpanCtx} link to span ${{
58
- op: spanJson.op,
59
- ...span.spanContext(),
60
- }}`,
61
- );
62
- }
63
-
64
- span.addLink({
65
- context: previousTraceSpanCtx,
66
- attributes: {
67
- [SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE]: 'previous_trace',
68
- },
69
- });
70
-
71
- // TODO: Remove this once EAP can store span links. We currently only set this attribute so that we
72
- // can obtain the previous trace information from the EAP store. Long-term, EAP will handle
73
- // span links and then we should remove this again. Also throwing in a TODO(v10), to remind us
74
- // to check this at v10 time :)
75
- span.setAttribute(
76
- PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE,
77
- `${previousTraceSpanCtx.traceId}-${previousTraceSpanCtx.spanId}-${
78
- previousTraceSpanCtx.traceFlags === 0x1 ? 1 : 0
79
- }`,
80
- );
81
- }
82
-
83
- return {
84
- spanContext: span.spanContext(),
85
- startTimestamp: spanToJSON(span).start_timestamp,
86
- };
87
- }
88
-
89
- /**
90
- * Stores @param previousTraceInfo in sessionStorage.
91
- */
92
- function storePreviousTraceInSessionStorage(previousTraceInfo) {
93
- try {
94
- WINDOW.sessionStorage.setItem(PREVIOUS_TRACE_KEY, JSON.stringify(previousTraceInfo));
95
- } catch (e) {
96
- // Ignore potential errors (e.g. if sessionStorage is not available)
97
- DEBUG_BUILD && logger.warn('Could not store previous trace in sessionStorage', e);
98
- }
99
- }
100
-
101
- /**
102
- * Retrieves the previous trace from sessionStorage if available.
103
- */
104
- function getPreviousTraceFromSessionStorage() {
105
- try {
106
- const previousTraceInfo = WINDOW.sessionStorage?.getItem(PREVIOUS_TRACE_KEY);
107
- // @ts-expect-error - intentionally risking JSON.parse throwing when previousTraceInfo is null to save bundle size
108
- return JSON.parse(previousTraceInfo);
109
- } catch (e) {
110
- return undefined;
111
- }
112
- }
113
-
114
- export { PREVIOUS_TRACE_KEY, PREVIOUS_TRACE_MAX_DURATION, PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE, addPreviousTraceSpanLink, getPreviousTraceFromSessionStorage, storePreviousTraceInSessionStorage };
115
- //# sourceMappingURL=previousTrace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"previousTrace.js","sources":["../../../../src/tracing/previousTrace.ts"],"sourcesContent":["import type { Span } from '@sentry/core';\nimport { logger, SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE, spanToJSON, type SpanContextData } from '@sentry/core';\nimport { WINDOW } from '../exports';\nimport { DEBUG_BUILD } from '../debug-build';\n\nexport interface PreviousTraceInfo {\n /**\n * Span context of the previous trace's local root span\n */\n spanContext: SpanContextData;\n\n /**\n * Timestamp in seconds when the previous trace was started\n */\n startTimestamp: number;\n}\n\n// 1h in seconds\nexport const PREVIOUS_TRACE_MAX_DURATION = 3600;\n\n// session storage key\nexport const PREVIOUS_TRACE_KEY = 'sentry_previous_trace';\n\nexport const PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE = 'sentry.previous_trace';\n\n/**\n * Adds a previous_trace span link to the passed span if the passed\n * previousTraceInfo is still valid.\n *\n * @returns the updated previous trace info (based on the current span/trace) to\n * be used on the next call\n */\nexport function addPreviousTraceSpanLink(\n previousTraceInfo: PreviousTraceInfo | undefined,\n span: Span,\n): PreviousTraceInfo {\n const spanJson = spanToJSON(span);\n\n if (!previousTraceInfo) {\n return {\n spanContext: span.spanContext(),\n startTimestamp: spanJson.start_timestamp,\n };\n }\n\n const previousTraceSpanCtx = previousTraceInfo.spanContext;\n if (previousTraceSpanCtx.traceId === spanJson.trace_id) {\n // This means, we're still in the same trace so let's not update the previous trace info\n // or add a link to the current span.\n // Once we move away from the long-lived, route-based trace model, we can remove this cases\n return previousTraceInfo;\n }\n\n // Only add the link if the startTimeStamp of the previous trace's root span is within\n // PREVIOUS_TRACE_MAX_DURATION (1h) of the current root span's startTimestamp\n // This is done to\n // - avoid adding links to \"stale\" traces\n // - enable more efficient querying for previous/next traces in Sentry\n if (Date.now() / 1000 - previousTraceInfo.startTimestamp <= PREVIOUS_TRACE_MAX_DURATION) {\n if (DEBUG_BUILD) {\n logger.info(\n `Adding previous_trace ${previousTraceSpanCtx} link to span ${{\n op: spanJson.op,\n ...span.spanContext(),\n }}`,\n );\n }\n\n span.addLink({\n context: previousTraceSpanCtx,\n attributes: {\n [SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE]: 'previous_trace',\n },\n });\n\n // TODO: Remove this once EAP can store span links. We currently only set this attribute so that we\n // can obtain the previous trace information from the EAP store. Long-term, EAP will handle\n // span links and then we should remove this again. Also throwing in a TODO(v10), to remind us\n // to check this at v10 time :)\n span.setAttribute(\n PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE,\n `${previousTraceSpanCtx.traceId}-${previousTraceSpanCtx.spanId}-${\n previousTraceSpanCtx.traceFlags === 0x1 ? 1 : 0\n }`,\n );\n }\n\n return {\n spanContext: span.spanContext(),\n startTimestamp: spanToJSON(span).start_timestamp,\n };\n}\n\n/**\n * Stores @param previousTraceInfo in sessionStorage.\n */\nexport function storePreviousTraceInSessionStorage(previousTraceInfo: PreviousTraceInfo): void {\n try {\n WINDOW.sessionStorage.setItem(PREVIOUS_TRACE_KEY, JSON.stringify(previousTraceInfo));\n } catch (e) {\n // Ignore potential errors (e.g. if sessionStorage is not available)\n DEBUG_BUILD && logger.warn('Could not store previous trace in sessionStorage', e);\n }\n}\n\n/**\n * Retrieves the previous trace from sessionStorage if available.\n */\nexport function getPreviousTraceFromSessionStorage(): PreviousTraceInfo | undefined {\n try {\n const previousTraceInfo = WINDOW.sessionStorage?.getItem(PREVIOUS_TRACE_KEY);\n // @ts-expect-error - intentionally risking JSON.parse throwing when previousTraceInfo is null to save bundle size\n return JSON.parse(previousTraceInfo);\n } catch (e) {\n return undefined;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAiBA;AACO,MAAM,2BAA4B,GAAE;;AAE3C;AACO,MAAM,kBAAmB,GAAE;;AAE3B,MAAM,iCAAkC,GAAE;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,wBAAwB;AACxC,EAAE,iBAAiB;AACnB,EAAE,IAAI;AACN,EAAqB;AACrB,EAAE,MAAM,QAAS,GAAE,UAAU,CAAC,IAAI,CAAC;;AAEnC,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAC1B,IAAI,OAAO;AACX,MAAM,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AACrC,MAAM,cAAc,EAAE,QAAQ,CAAC,eAAe;AAC9C,KAAK;AACL;;AAEA,EAAE,MAAM,oBAAA,GAAuB,iBAAiB,CAAC,WAAW;AAC5D,EAAE,IAAI,oBAAoB,CAAC,YAAY,QAAQ,CAAC,QAAQ,EAAE;AAC1D;AACA;AACA;AACA,IAAI,OAAO,iBAAiB;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,IAAI,CAAC,GAAG,EAAC,GAAI,IAAA,GAAO,iBAAiB,CAAC,cAAe,IAAG,2BAA2B,EAAE;AAC3F,IAAI,IAAI,WAAW,EAAE;AACrB,MAAM,MAAM,CAAC,IAAI;AACjB,QAAQ,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,cAAc,EAAE;AACtE,UAAU,EAAE,EAAE,QAAQ,CAAC,EAAE;AACzB,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,SAAS,CAAC,CAAA;AACA,OAAA;AACA;;AAEA,IAAA,IAAA,CAAA,OAAA,CAAA;AACA,MAAA,OAAA,EAAA,oBAAA;AACA,MAAA,UAAA,EAAA;AACA,QAAA,CAAA,iCAAA,GAAA,gBAAA;AACA,OAAA;AACA,KAAA,CAAA;;AAEA;AACA;AACA;AACA;AACA,IAAA,IAAA,CAAA,YAAA;AACA,MAAA,iCAAA;AACA,MAAA,CAAA,EAAA,oBAAA,CAAA,OAAA,CAAA,CAAA,EAAA,oBAAA,CAAA,MAAA,CAAA,CAAA;AACA,QAAA,oBAAA,CAAA,UAAA,KAAA,GAAA,GAAA,CAAA,GAAA;AACA,OAAA,CAAA;AACA,KAAA;AACA;;AAEA,EAAA,OAAA;AACA,IAAA,WAAA,EAAA,IAAA,CAAA,WAAA,EAAA;AACA,IAAA,cAAA,EAAA,UAAA,CAAA,IAAA,CAAA,CAAA,eAAA;AACA,GAAA;AACA;;AAEA;AACA;AACA;AACA,SAAA,kCAAA,CAAA,iBAAA,EAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,CAAA,cAAA,CAAA,OAAA,CAAA,kBAAA,EAAA,IAAA,CAAA,SAAA,CAAA,iBAAA,CAAA,CAAA;AACA,GAAA,CAAA,OAAA,CAAA,EAAA;AACA;AACA,IAAA,WAAA,IAAA,MAAA,CAAA,IAAA,CAAA,kDAAA,EAAA,CAAA,CAAA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAA,kCAAA,GAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,iBAAA,GAAA,MAAA,CAAA,cAAA,EAAA,OAAA,CAAA,kBAAA,CAAA;AACA;AACA,IAAA,OAAA,IAAA,CAAA,KAAA,CAAA,iBAAA,CAAA;AACA,GAAA,CAAA,OAAA,CAAA,EAAA;AACA,IAAA,OAAA,SAAA;AACA;AACA;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"previousTrace.d.ts","sourceRoot":"","sources":["../../../../src/tracing/previousTrace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAyD,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAI3G,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,WAAW,EAAE,eAAe,CAAC;IAE7B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB;AAGD,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAGhD,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAE1D,eAAO,MAAM,iCAAiC,0BAA0B,CAAC;AAEzE;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,EAChD,IAAI,EAAE,IAAI,GACT,iBAAiB,CAwDnB;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAO7F;AAED;;GAEG;AACH,wBAAgB,kCAAkC,IAAI,iBAAiB,GAAG,SAAS,CAQlF"}