@capacitor-community/camera-preview 2.1.0 → 3.1.1

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.
@@ -3,21 +3,22 @@ package com.ahm.capacitor.camera.preview;
3
3
  import android.view.GestureDetector;
4
4
  import android.view.MotionEvent;
5
5
 
6
- class TapGestureDetector extends GestureDetector.SimpleOnGestureListener{
7
- private final String TAG = "TapGestureDetector";
6
+ class TapGestureDetector extends GestureDetector.SimpleOnGestureListener {
8
7
 
9
- @Override
10
- public boolean onDown(MotionEvent e) {
11
- return false;
12
- }
8
+ private final String TAG = "TapGestureDetector";
13
9
 
14
- @Override
15
- public boolean onSingleTapUp(MotionEvent e) {
16
- return true;
17
- }
10
+ @Override
11
+ public boolean onDown(MotionEvent e) {
12
+ return false;
13
+ }
18
14
 
19
- @Override
20
- public boolean onSingleTapConfirmed(MotionEvent e) {
21
- return true;
22
- }
15
+ @Override
16
+ public boolean onSingleTapUp(MotionEvent e) {
17
+ return true;
18
+ }
19
+
20
+ @Override
21
+ public boolean onSingleTapConfirmed(MotionEvent e) {
22
+ return true;
23
+ }
23
24
  }
@@ -1,17 +1,18 @@
1
1
  package com.getcapacitor;
2
2
 
3
- import org.junit.Test;
4
-
5
3
  import static org.junit.Assert.*;
6
4
 
5
+ import org.junit.Test;
6
+
7
7
  /**
8
8
  * Example local unit test, which will execute on the development machine (host).
9
9
  *
10
10
  * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
11
11
  */
12
12
  public class ExampleUnitTest {
13
+
13
14
  @Test
14
15
  public void addition_isCorrect() throws Exception {
15
16
  assertEquals(4, 2 + 2);
16
17
  }
17
- }
18
+ }
@@ -4,9 +4,9 @@ export interface CameraPreviewOptions {
4
4
  parent?: string;
5
5
  /** Class name to add to the video preview element (applicable to the web platform only) */
6
6
  className?: string;
7
- /** The preview width in pixels, default window.screen.width (applicable to the android and ios platforms only) */
7
+ /** The preview width in pixels, default window.screen.width */
8
8
  width?: number;
9
- /** The preview height in pixels, default window.screen.height (applicable to the android and ios platforms only) */
9
+ /** The preview height in pixels, default window.screen.height */
10
10
  height?: number;
11
11
  /** The x origin, default 0 (applicable to the android and ios platforms only) */
12
12
  x?: number;
@@ -20,7 +20,7 @@ export interface CameraPreviewOptions {
20
20
  rotateWhenOrientationChanged?: boolean;
21
21
  /** Choose the camera to use 'front' or 'rear', default 'front' */
22
22
  position?: CameraPosition | string;
23
- /** Defaults to false - Capture images to a file and return back the file path instead of returning base64 encoded data */
23
+ /** Defaults to false - Capture images to a file and return the file path instead of returning base64 encoded data */
24
24
  storeToFile?: boolean;
25
25
  /** Defaults to false - Android Only - Disable automatic rotation of the image, and let the browser deal with it (keep reading on how to achieve it) */
26
26
  disableExifHeaderStripping?: boolean;
@@ -30,9 +30,9 @@ export interface CameraPreviewOptions {
30
30
  disableAudio?: boolean;
31
31
  /** Android Only - Locks device orientation when camera is showing. */
32
32
  lockAndroidOrientation?: boolean;
33
- /** Defaults to false - Android and Web only. Set if camea preview can change opacity. */
33
+ /** Defaults to false - Android and Web only. Set if camera preview can change opacity. */
34
34
  enableOpacity?: boolean;
35
- /** Defaults to false - Android only. Set if camea preview will support pinch to zoom. */
35
+ /** Defaults to false - Android only. Set if camera preview will support pinch to zoom. */
36
36
  enableZoom?: boolean;
37
37
  }
38
38
  export interface CameraPreviewPictureOptions {
@@ -40,7 +40,9 @@ export interface CameraPreviewPictureOptions {
40
40
  height?: number;
41
41
  /** The picture width, optional, default 0 (Device default) */
42
42
  width?: number;
43
- /** The picture quality, 0 - 100, default 85 */
43
+ /** The picture quality, 0 - 100, default 85 on `iOS/Android`.
44
+ *
45
+ * If left undefined, the `web` implementation will export a PNG, otherwise a JPEG will be generated */
44
46
  quality?: number;
45
47
  }
46
48
  export interface CameraSampleOptions {
@@ -66,7 +68,7 @@ export interface CameraPreviewPlugin {
66
68
  }>;
67
69
  setFlashMode(options: {
68
70
  flashMode: CameraPreviewFlashMode | string;
69
- }): void;
70
- flip(): void;
71
+ }): Promise<void>;
72
+ flip(): Promise<void>;
71
73
  setOpacity(options: CameraOpacityOptions): Promise<{}>;
72
74
  }
package/dist/esm/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { registerPlugin } from '@capacitor/core';
2
2
  const CameraPreview = registerPlugin('CameraPreview', {
3
- web: () => import('./web').then(m => new m.CameraPreviewWeb()),
3
+ web: () => import('./web').then((m) => new m.CameraPreviewWeb()),
4
4
  });
5
5
  export * from './definitions';
6
6
  export { CameraPreview };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAG/C,MAAM,aAAa,GAAG,cAAc,CAAsB,eAAe,EAAE;IACzE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;CAC/D,CAAC,CAAC;AAEH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAC,aAAa,EAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,MAAM,aAAa,GAAG,cAAc,CAAsB,eAAe,EAAE;IACzE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;CACjE,CAAC,CAAC;AAEH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,CAAC"}
package/dist/esm/web.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { WebPlugin } from "@capacitor/core";
2
- import { CameraPreviewOptions, CameraPreviewPictureOptions, CameraPreviewPlugin, CameraPreviewFlashMode, CameraSampleOptions, CameraOpacityOptions } from "./definitions";
1
+ import { WebPlugin } from '@capacitor/core';
2
+ import { CameraPreviewOptions, CameraPreviewPictureOptions, CameraPreviewPlugin, CameraPreviewFlashMode, CameraSampleOptions, CameraOpacityOptions } from './definitions';
3
3
  export declare class CameraPreviewWeb extends WebPlugin implements CameraPreviewPlugin {
4
4
  /**
5
5
  * track which camera is used based on start options
@@ -9,7 +9,7 @@ export declare class CameraPreviewWeb extends WebPlugin implements CameraPreview
9
9
  constructor();
10
10
  start(options: CameraPreviewOptions): Promise<{}>;
11
11
  stop(): Promise<any>;
12
- capture(_options: CameraPreviewPictureOptions): Promise<any>;
12
+ capture(options: CameraPreviewPictureOptions): Promise<any>;
13
13
  captureSample(_options: CameraSampleOptions): Promise<any>;
14
14
  getSupportedFlashModes(): Promise<{
15
15
  result: CameraPreviewFlashMode[];
package/dist/esm/web.js CHANGED
@@ -1,31 +1,34 @@
1
- import { WebPlugin } from "@capacitor/core";
1
+ import { WebPlugin } from '@capacitor/core';
2
2
  export class CameraPreviewWeb extends WebPlugin {
3
3
  constructor() {
4
4
  super({
5
- name: "CameraPreview",
6
- platforms: ["web"],
5
+ name: 'CameraPreview',
6
+ platforms: ['web'],
7
7
  });
8
8
  }
9
9
  async start(options) {
10
10
  return new Promise(async (resolve, reject) => {
11
- await navigator.mediaDevices.getUserMedia({
11
+ await navigator.mediaDevices
12
+ .getUserMedia({
12
13
  audio: !options.disableAudio,
13
14
  video: true
14
- }).then((stream) => {
15
+ })
16
+ .then((stream) => {
15
17
  // Stop any existing stream so we can request media with different constraints based on user input
16
18
  stream.getTracks().forEach((track) => track.stop());
17
- }).catch(error => {
19
+ })
20
+ .catch((error) => {
18
21
  reject(error);
19
22
  });
20
- const video = document.getElementById("video");
23
+ const video = document.getElementById('video');
21
24
  const parent = document.getElementById(options.parent);
22
25
  if (!video) {
23
- const videoElement = document.createElement("video");
24
- videoElement.id = "video";
25
- videoElement.setAttribute("class", options.className || "");
26
+ const videoElement = document.createElement('video');
27
+ videoElement.id = 'video';
28
+ videoElement.setAttribute('class', options.className || '');
26
29
  // Don't flip video feed if camera is rear facing
27
30
  if (options.position !== 'rear') {
28
- videoElement.setAttribute("style", "-webkit-transform: scaleX(-1); transform: scaleX(-1);");
31
+ videoElement.setAttribute('style', '-webkit-transform: scaleX(-1); transform: scaleX(-1);');
29
32
  }
30
33
  const userAgent = navigator.userAgent.toLowerCase();
31
34
  const isSafari = userAgent.includes('safari') && !userAgent.includes('chrome');
@@ -40,10 +43,13 @@ export class CameraPreviewWeb extends WebPlugin {
40
43
  parent.appendChild(videoElement);
41
44
  if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
42
45
  const constraints = {
43
- video: true,
46
+ video: {
47
+ width: { ideal: options.width },
48
+ height: { ideal: options.height }
49
+ }
44
50
  };
45
51
  if (options.position === 'rear') {
46
- constraints.video = { facingMode: 'environment' };
52
+ constraints.video.facingMode = 'environment';
47
53
  this.isBackCamera = true;
48
54
  }
49
55
  else {
@@ -60,12 +66,12 @@ export class CameraPreviewWeb extends WebPlugin {
60
66
  }
61
67
  }
62
68
  else {
63
- reject({ message: "camera already started" });
69
+ reject({ message: 'camera already started' });
64
70
  }
65
71
  });
66
72
  }
67
73
  async stop() {
68
- const video = document.getElementById("video");
74
+ const video = document.getElementById('video');
69
75
  if (video) {
70
76
  video.pause();
71
77
  const st = video.srcObject;
@@ -77,12 +83,12 @@ export class CameraPreviewWeb extends WebPlugin {
77
83
  video.remove();
78
84
  }
79
85
  }
80
- async capture(_options) {
86
+ async capture(options) {
81
87
  return new Promise((resolve, _) => {
82
- const video = document.getElementById("video");
83
- const canvas = document.createElement("canvas");
88
+ const video = document.getElementById('video');
89
+ const canvas = document.createElement('canvas');
84
90
  // video.width = video.offsetWidth;
85
- const context = canvas.getContext("2d");
91
+ const context = canvas.getContext('2d');
86
92
  canvas.width = video.videoWidth;
87
93
  canvas.height = video.videoHeight;
88
94
  // flip horizontally back camera isn't used
@@ -91,10 +97,15 @@ export class CameraPreviewWeb extends WebPlugin {
91
97
  context.scale(-1, 1);
92
98
  }
93
99
  context.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
100
+ let base64EncodedImage;
101
+ if (options.quality != undefined) {
102
+ base64EncodedImage = canvas.toDataURL('image/jpeg', options.quality / 100.0).replace('data:image/jpeg;base64,', '');
103
+ }
104
+ else {
105
+ base64EncodedImage = canvas.toDataURL('image/png').replace('data:image/png;base64,', '');
106
+ }
94
107
  resolve({
95
- value: canvas
96
- .toDataURL("image/png")
97
- .replace("data:image/png;base64,", ""),
108
+ value: base64EncodedImage,
98
109
  });
99
110
  });
100
111
  }
@@ -111,14 +122,14 @@ export class CameraPreviewWeb extends WebPlugin {
111
122
  throw new Error('flip not supported under the web platform');
112
123
  }
113
124
  async setOpacity(_options) {
114
- const video = document.getElementById("video");
125
+ const video = document.getElementById('video');
115
126
  if (!!video && !!_options['opacity']) {
116
- video.style.setProperty("opacity", _options['opacity'].toString());
127
+ video.style.setProperty('opacity', _options['opacity'].toString());
117
128
  }
118
129
  }
119
130
  }
120
131
  const CameraPreview = new CameraPreviewWeb();
121
132
  export { CameraPreview };
122
- import { registerWebPlugin } from "@capacitor/core";
133
+ import { registerWebPlugin } from '@capacitor/core';
123
134
  registerWebPlugin(CameraPreview);
124
135
  //# sourceMappingURL=web.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAU5C,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAO7C;QACE,KAAK,CAAC;YACJ,IAAI,EAAE,eAAe;YACrB,SAAS,EAAE,CAAC,KAAK,CAAC;SACnB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAA6B;QACvC,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,SAAS,CAAC,YAAY;iBACzB,YAAY,CAAC;gBACZ,KAAK,EAAE,CAAC,OAAO,CAAC,YAAY;gBAC5B,KAAK,EAAE,IAAI;aACZ,CAAC;iBACD,IAAI,CAAC,CAAC,MAAmB,EAAE,EAAE;gBAC5B,kGAAkG;gBAClG,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YAEL,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEvD,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBACrD,YAAY,CAAC,EAAE,GAAG,OAAO,CAAC;gBAC1B,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;gBAE5D,iDAAiD;gBACjD,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE;oBAC/B,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,uDAAuD,CAAC,CAAC;iBAC7F;gBAED,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;gBACpD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAE/E,mHAAmH;gBACnH,4EAA4E;gBAC5E,uFAAuF;gBACvF,IAAI,QAAQ,EAAE;oBACZ,YAAY,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;oBAC9C,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC3C,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;iBAClD;gBAED,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAEjC,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE;oBACjE,MAAM,WAAW,GAA2B;wBAC1C,KAAK,EAAE;4BACL,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;4BAC/B,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE;yBAClC;qBACF,CAAC;oBAEF,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE;wBAC9B,WAAW,CAAC,KAA+B,CAAC,UAAU,GAAG,aAAa,CAAC;wBACxE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;qBAC1B;yBAAM;wBACL,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;qBAC3B;oBAED,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CACnD,UAAU,MAAM;wBACd,iDAAiD;wBACjD,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC;wBAChC,YAAY,CAAC,IAAI,EAAE,CAAC;wBACpB,OAAO,CAAC,EAAE,CAAC,CAAC;oBACd,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;wBACN,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC,CACF,CAAC;iBACH;aACF;iBAAM;gBACL,MAAM,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;aAC/C;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,KAAK,GAAqB,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;YAEd,MAAM,EAAE,GAAQ,KAAK,CAAC,SAAS,CAAC;YAChC,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;YAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtB,KAAK,CAAC,IAAI,EAAE,CAAC;aACd;YACD,KAAK,CAAC,MAAM,EAAE,CAAC;SAChB;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAoC;QAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YAChC,MAAM,KAAK,GAAqB,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAEhD,mCAAmC;YAEnC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;YAChC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;YAElC,2CAA2C;YAC3C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBACvC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACtB;YACD,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YAEpE,IAAI,kBAAkB,CAAC;YAEvB,IAAI,OAAO,CAAC,OAAO,IAAI,SAAS,EAAE;gBAChC,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;aACrH;iBAAM;gBACL,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;aAC1F;YAED,OAAO,CAAC;gBACN,KAAK,EAAE,kBAAkB;aAC1B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAA6B;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,sBAAsB;QAG1B,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAwD;QACzE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAA8B;QAC7C,MAAM,KAAK,GAAqB,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACpC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;SACpE;IACH,CAAC;CACF;AAED,MAAM,aAAa,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,iBAAiB,CAAC,aAAa,CAAC,CAAC"}