@zappar/zappar-cv 0.4.0-beta.3 → 0.4.0-beta.9

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 (60) hide show
  1. package/CHANGELOG.md +79 -34
  2. package/README.md +2 -2
  3. package/lib/camera-source-map.d.ts +10 -0
  4. package/lib/camera-source-map.js +40 -0
  5. package/lib/camera-source.d.ts +2 -5
  6. package/lib/camera-source.js +3 -13
  7. package/lib/compatibility.js +1 -1
  8. package/lib/drawcamera.js +2 -1
  9. package/lib/gen/zappar-client.js +6 -1
  10. package/lib/gen/zappar-cwrap.js +37 -21
  11. package/lib/gen/zappar-native.d.ts +11 -0
  12. package/lib/gen/zappar-native.js +13 -1
  13. package/lib/gen/zappar-server.js +1 -1
  14. package/lib/gen/zappar.d.ts +5 -0
  15. package/lib/gen/zappar.js +5 -3
  16. package/lib/gfx.d.ts +1 -0
  17. package/lib/gfx.js +4 -0
  18. package/lib/gl-state-manager.d.ts +9 -0
  19. package/lib/gl-state-manager.js +35 -0
  20. package/lib/html-element-source.d.ts +3 -20
  21. package/lib/html-element-source.js +19 -263
  22. package/lib/image-process-gl.d.ts +37 -0
  23. package/lib/image-process-gl.js +298 -0
  24. package/lib/imagebitmap-camera-source.d.ts +36 -0
  25. package/lib/imagebitmap-camera-source.js +277 -0
  26. package/lib/mstp-camera-source.d.ts +29 -0
  27. package/lib/mstp-camera-source.js +230 -0
  28. package/lib/native.js +45 -8
  29. package/lib/pipeline.d.ts +13 -3
  30. package/lib/pipeline.js +95 -26
  31. package/lib/profile.d.ts +2 -0
  32. package/lib/profile.js +55 -44
  33. package/lib/sequencerecorder.d.ts +1 -0
  34. package/lib/sequencerecorder.js +11 -0
  35. package/lib/sequencesource.d.ts +7 -1
  36. package/lib/sequencesource.js +89 -47
  37. package/lib/source.d.ts +6 -4
  38. package/lib/version.d.ts +1 -1
  39. package/lib/version.js +1 -1
  40. package/lib/worker-client.js +0 -5
  41. package/lib/worker-imagebitmap.d.ts +5 -0
  42. package/lib/worker-imagebitmap.js +63 -0
  43. package/lib/worker-server.d.ts +0 -5
  44. package/lib/worker-server.js +120 -24
  45. package/lib/workerinterface.d.ts +47 -1
  46. package/lib/zcv.js +117 -135
  47. package/lib/zcv.wasm +0 -0
  48. package/package.json +34 -31
  49. package/umd/a78f5ad0a44def457ee50c8bcd5fd27c.wasm +0 -0
  50. package/umd/zappar-cv.js +1 -9
  51. package/umd/zappar-cv.worker.js +1 -1
  52. package/lib/SLAM_Worker.js +0 -16
  53. package/lib/SLAM_Worker.wasm +0 -0
  54. package/lib/bundleworker-mainthread.d.ts +0 -2
  55. package/lib/bundleworker-mainthread.js +0 -36
  56. package/lib/bundleworker-worker.d.ts +0 -6
  57. package/lib/bundleworker-worker.js +0 -34
  58. package/umd/1ec038c18c27f4adf35917a8175401f0.wasm +0 -0
  59. package/umd/427496550eba276b65c7.bundleworker.js +0 -1
  60. package/umd/d115e485cffe500afc4f7c1272ea8f62.wasm +0 -0
package/CHANGELOG.md CHANGED
@@ -1,130 +1,175 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.14] - 2021-10-25
4
+
5
+ ### Changed
6
+
7
+ - Pinned dependencies to exact versions
8
+
9
+ ## [0.3.13] - 2021-10-11
10
+
11
+ ### Fixed
12
+
13
+ - A broken licencing url.
14
+
15
+ ## [0.3.12] - 2021-09-28
16
+
17
+ ### Fixed
18
+
19
+ - Safari logo not appearing on incompatible browser screen
20
+ - Issues with iPad devices
21
+
22
+ ## [0.3.11] - 2021-09-17
23
+
24
+ ### Fixed
25
+
26
+ - Issues with other browsers on iOS, including social browsers
27
+
28
+ ## [0.3.10] - 2021-09-17
29
+
30
+ ### Added
31
+ - loaded() function which returns true once the library is fully loaded and available for use
32
+
33
+ ### Changed
34
+
35
+ - Bucket 172.* IP address range into one license check.
36
+
3
37
  ## [0.3.9] - 2021-04-22
38
+
4
39
  ### Added
5
- - `projection_matrix_from_camera_model_ext` that exposes near and far clipping planes.
40
+
41
+ - `projection_matrix_from_camera_model_ext` that exposes near and far clipping planes.
6
42
 
7
43
  ## [0.3.8] - 2021-02-18
8
44
 
9
45
  ### Added
10
- - pipeline_gl_context_lost to indicate that the GL context is lost
11
- - log_level and log_level_set to customize volume of log output
46
+
47
+ - pipeline_gl_context_lost to indicate that the GL context is lost
48
+ - log_level and log_level_set to customize volume of log output
12
49
 
13
50
  ### Changed
14
- - License checks now only happen on first pipeline construction
51
+
52
+ - License checks now only happen on first pipeline construction
15
53
 
16
54
  ### Fixed
17
- - pipeline_gl_context_set correctly handles multiple invocations
18
55
 
56
+ - pipeline_gl_context_set correctly handles multiple invocations
19
57
 
20
58
  ## [0.3.7] - 2021-02-03
21
59
 
22
60
  ### Fixed
23
- - Issues on Chrome for iOS
24
- - NPM audit dependency updates
61
+
62
+ - Issues on Chrome for iOS
63
+ - NPM audit dependency updates
25
64
 
26
65
  ## [0.3.6] - 2021-01-18
27
66
 
28
67
  ### Fixed
29
- - Issue where wasm would not load on some webpack versions
30
68
 
69
+ - Issue where wasm would not load on some webpack versions
31
70
 
32
71
  ## [0.3.5] - 2020-11-26
33
72
 
34
73
  ### Added
35
- - This changelog :-)
36
- - Console log the version when the library is initialized
74
+
75
+ - This changelog :-)
76
+ - Console log the version when the library is initialized
37
77
 
38
78
  ### Fixed
39
- - Prevent flickering when there are no new camera frames
40
- - Fixed building with recent versions of `worker-loader`
79
+
80
+ - Prevent flickering when there are no new camera frames
81
+ - Fixed building with recent versions of `worker-loader`
41
82
 
42
83
  ### Changed
43
- - Dependencies update
44
- - Remove unnecessary console logging
45
84
 
85
+ - Dependencies update
86
+ - Remove unnecessary console logging
46
87
 
47
88
  ## [0.3.4] - 2020-11-18
48
89
 
49
90
  ### Fixed
50
- - Ensure internal GL usage correctly sets the expected active texture
51
91
 
92
+ - Ensure internal GL usage correctly sets the expected active texture
52
93
 
53
94
  ## [0.3.3] - 2020-11-04
54
95
 
55
96
  ### Added
56
- - Browser compatibility API and UI
97
+
98
+ - Browser compatibility API and UI
57
99
 
58
100
  ### Changed
59
- - Modifications to browser compatibility API
60
101
 
102
+ - Modifications to browser compatibility API
61
103
 
62
104
  ## [0.3.2] - 2020-11-04
63
105
 
64
106
  ### Added
65
- - Browser compatibility API and UI
107
+
108
+ - Browser compatibility API and UI
66
109
 
67
110
  ### Fixed
68
- - Support for Firefox
69
111
 
112
+ - Support for Firefox
70
113
 
71
114
  ## [0.3.1] - 2020-11-03
72
115
 
73
116
  ### Fixed
74
- - Various enums are now available as objects
75
- - Removed unnecessary TypeScript files included in deployment
76
117
 
118
+ - Various enums are now available as objects
119
+ - Removed unnecessary TypeScript files included in deployment
77
120
 
78
121
  ## [0.3.0] - 2020-11-02
79
122
 
80
123
  ### Added
81
- - Support for face landmarks
82
- - Greatly improved face tracking model
124
+
125
+ - Support for face landmarks
126
+ - Greatly improved face tracking model
83
127
 
84
128
  ### Fixed
85
- - Fixes to iPad support
129
+
130
+ - Fixes to iPad support
86
131
 
87
132
  ### Changed
88
- - Dependencies update
89
133
 
134
+ - Dependencies update
90
135
 
91
136
  ## [0.2.12] - 2020-10-19
92
137
 
93
138
  ### Fixed
94
- - Fixes to iPad support
139
+
140
+ - Fixes to iPad support
95
141
 
96
142
  ### Changed
97
- - Dependencies update
98
143
 
144
+ - Dependencies update
99
145
 
100
146
  ## [0.2.11] - 2020-09-15
101
147
 
102
148
  ### Fixed
103
- - Fix issues with iOS 14
149
+
150
+ - Fix issues with iOS 14
104
151
 
105
152
  ### Changed
106
- - Dependencies update
107
153
 
154
+ - Dependencies update
108
155
 
109
156
  ## [0.2.9] - 2020-07-08
110
157
 
111
158
  ### Fixed
112
- - Tweaks to computer vision algorithms
113
159
 
160
+ - Tweaks to computer vision algorithms
114
161
 
115
162
  ## [0.2.6] - 2020-06-09
116
163
 
117
164
  ### Added
118
- - Support for full head meshes
119
-
120
165
 
166
+ - Support for full head meshes
121
167
 
122
168
  ## [0.2.4] - 2020-06-02
123
169
 
124
170
  ### Added
125
- - Support for NGROK
126
-
127
171
 
172
+ - Support for NGROK
128
173
 
129
174
  ## [0.2.3] - 2020-05-26
130
175
 
package/README.md CHANGED
@@ -18,8 +18,8 @@ npm i @zappar/zappar-cv
18
18
 
19
19
  You can use our CDN from within your HTML:
20
20
  ```
21
- <script src="https://libs.zappar.com/zappar-cv/0.4.0-beta.3/zappar-cv.js"></script>
21
+ <script src="https://libs.zappar.com/zappar-cv/0.4.0-beta.9/zappar-cv.js"></script>
22
22
  ```
23
23
 
24
24
  Or you can download and host our standalone JavaScript bundle:
25
- [https://libs.zappar.com/zappar-cv/0.4.0-beta.3/zappar-cv.zip](https://libs.zappar.com/zappar-cv/0.4.0-beta.3/zappar-cv.zip)
25
+ [https://libs.zappar.com/zappar-cv/0.4.0-beta.9/zappar-cv.zip](https://libs.zappar.com/zappar-cv/0.4.0-beta.9/zappar-cv.zip)
@@ -0,0 +1,10 @@
1
+ import { CameraSource } from "./camera-source";
2
+ import { zappar_camera_source_t, zappar_pipeline_t } from "./gen/zappar";
3
+ import { ImageBitmapCameraSource } from "./imagebitmap-camera-source";
4
+ import { MSTPCameraSource } from "./mstp-camera-source";
5
+ export declare type CameraSourceType = CameraSource | MSTPCameraSource | ImageBitmapCameraSource;
6
+ export declare function getNextCameraSourceId(): zappar_camera_source_t;
7
+ export declare function setCameraSourceId(id: zappar_camera_source_t, c: CameraSourceType): void;
8
+ export declare function getCameraSource(id: zappar_camera_source_t): CameraSourceType | undefined;
9
+ export declare function deleteCameraSource(id: zappar_camera_source_t): void;
10
+ export declare function createCameraSource(p: zappar_pipeline_t, deviceId: string): zappar_camera_source_t;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCameraSource = exports.deleteCameraSource = exports.getCameraSource = exports.setCameraSourceId = exports.getNextCameraSourceId = void 0;
4
+ const camera_source_1 = require("./camera-source");
5
+ const imagebitmap_camera_source_1 = require("./imagebitmap-camera-source");
6
+ const loglevel_1 = require("./loglevel");
7
+ const mstp_camera_source_1 = require("./mstp-camera-source");
8
+ const profile_1 = require("./profile");
9
+ let latest = 1;
10
+ let byId = new Map();
11
+ function getNextCameraSourceId() {
12
+ return (latest++);
13
+ }
14
+ exports.getNextCameraSourceId = getNextCameraSourceId;
15
+ function setCameraSourceId(id, c) {
16
+ byId.set(id, c);
17
+ }
18
+ exports.setCameraSourceId = setCameraSourceId;
19
+ function getCameraSource(id) {
20
+ return byId.get(id);
21
+ }
22
+ exports.getCameraSource = getCameraSource;
23
+ function deleteCameraSource(id) {
24
+ byId.delete(id);
25
+ }
26
+ exports.deleteCameraSource = deleteCameraSource;
27
+ function createCameraSource(p, deviceId) {
28
+ let ret = getNextCameraSourceId();
29
+ if (profile_1.profile.preferMediaStreamTrackProcessorCamera &&
30
+ 'MediaStreamTrackProcessor' in window &&
31
+ 'MediaStreamTrackGenerator' in window)
32
+ setCameraSourceId(ret, new mstp_camera_source_1.MSTPCameraSource(ret, p, deviceId));
33
+ else if (profile_1.profile.preferImageBitmapCamera && typeof OffscreenCanvas !== "undefined")
34
+ setCameraSourceId(ret, new imagebitmap_camera_source_1.ImageBitmapCameraSource(ret, p, deviceId));
35
+ else
36
+ setCameraSourceId(ret, new camera_source_1.CameraSource(ret, p, deviceId));
37
+ loglevel_1.zcout("camera_source_t initialized");
38
+ return ret;
39
+ }
40
+ exports.createCameraSource = createCameraSource;
@@ -1,6 +1,5 @@
1
1
  import { zappar_camera_source_t, zappar_pipeline_t } from "./gen/zappar";
2
2
  import { HTMLElementSource } from "./html-element-source";
3
- import { CameraFrameInfo } from "./source";
4
3
  export declare class CameraSource extends HTMLElementSource {
5
4
  private _impl;
6
5
  private _deviceId;
@@ -8,15 +7,13 @@ export declare class CameraSource extends HTMLElementSource {
8
7
  static DEFAULT_DEVICE_ID: string;
9
8
  private _currentStream;
10
9
  private _activeDeviceId;
11
- static create(p: zappar_pipeline_t, deviceId: string): zappar_camera_source_t;
12
- static get(m: zappar_camera_source_t): CameraSource | undefined;
13
- private constructor();
10
+ constructor(_impl: zappar_camera_source_t, pipeline: zappar_pipeline_t, _deviceId: string);
14
11
  destroy(): void;
15
12
  private _stop;
16
13
  pause(): void;
17
14
  start(): void;
18
15
  private _getConstraints;
19
- getFrame(allowRead: boolean): CameraFrameInfo | undefined;
16
+ getFrame(allowRead: boolean): void;
20
17
  private _getUserMedia;
21
18
  private _syncCamera;
22
19
  private _hasStartedOrientation;
@@ -15,8 +15,7 @@ const profile_1 = require("./profile");
15
15
  const pipeline_1 = require("./pipeline");
16
16
  const cameramodel_1 = require("./cameramodel");
17
17
  const loglevel_1 = require("./loglevel");
18
- let latest = 1;
19
- let byId = new Map();
18
+ const camera_source_map_1 = require("./camera-source-map");
20
19
  let _videoSingleton = document.createElement("video");
21
20
  _videoSingleton.setAttribute('playsinline', '');
22
21
  _videoSingleton.setAttribute('webkit-playsinline', '');
@@ -56,17 +55,8 @@ class CameraSource extends html_element_source_1.HTMLElementSource {
56
55
  }
57
56
  };
58
57
  }
59
- static create(p, deviceId) {
60
- let ret = (latest++);
61
- byId.set(ret, new CameraSource(ret, p, deviceId));
62
- loglevel_1.zcout("camera_source_t initialized");
63
- return ret;
64
- }
65
- static get(m) {
66
- return byId.get(m);
67
- }
68
58
  destroy() {
69
- byId.delete(this._impl);
59
+ camera_source_map_1.deleteCameraSource(this._impl);
70
60
  super.destroy();
71
61
  }
72
62
  _stop() {
@@ -140,7 +130,7 @@ class CameraSource extends html_element_source_1.HTMLElementSource {
140
130
  }
141
131
  getFrame(allowRead) {
142
132
  this._cameraToScreenRotation = cameramodel_1.cameraRotationForScreenOrientation(false);
143
- return super.getFrame(allowRead);
133
+ super.getFrame(allowRead);
144
134
  }
145
135
  _getUserMedia() {
146
136
  return __awaiter(this, void 0, void 0, function* () {
@@ -39,7 +39,7 @@ function getUnsupportedMessage() {
39
39
  background-repeat: no-repeat;
40
40
  }
41
41
  .zee-launcher-browser-safari .zee-launcher-browser-logo {
42
- background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg version='1.1' viewBox='0 0 211 211' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg transform='translate(-82 -146)' fill-rule='nonzero' stroke='%23fffffft' stroke-width='2'%3E%3Cpath d='m180 251.86c0-4.0385 2.9377-7.855 7.2552-7.855 3.9614 0 7.7448 2.8402 7.7448 7.145 0 4.0385-2.8487 7.855-7.1662 7.855-4.0059 0-7.8338-2.9734-7.8338-7.145zm112-0.35503c0 57.728-46.772 104.5-104.5 104.5s-104.5-46.772-104.5-104.5 46.772-104.5 104.5-104.5 104.5 46.772 104.5 104.5zm-12-1c0-51.649-41.851-93.5-93.5-93.5s-93.5 41.851-93.5 93.5 41.851 93.5 93.5 93.5 93.5-41.851 93.5-93.5zm-30.624 40.983c0 1.5095 5.4495 4.2768 6.8328 5.1154-11.486 17.401-29.26 29.938-49.423 34.928l-1.8444-7.757c-0.12576-1.0482-0.79646-1.174-1.7606-1.174-0.79646 0-1.2576 1.174-1.1737 1.7611l1.8444 7.8828c-5.5753 1.174-11.234 1.7611-16.935 1.7611-15.217 0-30.182-4.2768-43.177-12.202 0.71263-1.174 5.1141-7.5474 5.1141-8.4698 0-0.79666-0.71263-1.5095-1.5091-1.5095-1.6348 0-5.1141 6.9603-6.1621 8.344-17.522-11.615-30.182-29.602-35.044-50.148l8.0066-1.761c0.92222-0.25158 1.1737-0.92246 1.1737-1.7611 0-0.79667-1.1737-1.2579-1.8444-1.174l-7.8389 1.803c-1.048-5.3251-1.6348-10.692-1.6348-16.143 0-15.556 4.4015-30.86 12.66-43.984 1.1737 0.71281 6.749 4.5284 7.6712 4.5284 0.79646 0 1.5091-0.58702 1.5091-1.3837 0-1.6353-6.1621-4.7381-7.5455-5.7024 11.821-17.275 29.805-29.728 50.219-34.34l1.7606 7.757c0.25152 0.92246 0.92222 1.174 1.7606 1.174 0.83838 0 1.2576-1.174 1.1737-1.8449l-1.7606-7.6732c5.1141-0.92246 10.312-1.5095 15.552-1.5095 15.552 0 30.727 4.4026 43.973 12.663-0.79646 1.174-4.5273 6.6249-4.5273 7.5474 0 0.79667 0.58687 1.5095 1.3833 1.5095 1.6348 0 4.7369-6.0379 5.5753-7.4216 17.187 11.615 29.469 29.351 34.248 49.561l-6.4975 1.3837c-1.048 0.25158-1.1737 0.92246-1.1737 1.8449 0 0.79667 1.1737 1.2579 1.7606 1.174l6.6232-1.5095c1.048 5.3251 1.6348 10.776 1.6348 16.227 0 15.221-4.1919 30.189-12.073 43.062-1.1737-0.58702-6.0364-4.0672-6.9586-4.0672-0.8803 0-1.5929 0.71281-1.5929 1.5095zm-14.876-98.483c-5.2178 4.88-53.863 49.48-55.228 51.8l-38.772 64.2c5.0974-4.76 53.863-49.6 55.108-51.72l38.892-64.28z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
42
+ background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg version='1.1' viewBox='0 0 211 211' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg transform='translate(-82 -146)' fill-rule='nonzero' stroke='%23ffffff' stroke-width='2'%3E%3Cpath d='m180 251.86c0-4.0385 2.9377-7.855 7.2552-7.855 3.9614 0 7.7448 2.8402 7.7448 7.145 0 4.0385-2.8487 7.855-7.1662 7.855-4.0059 0-7.8338-2.9734-7.8338-7.145zm112-0.35503c0 57.728-46.772 104.5-104.5 104.5s-104.5-46.772-104.5-104.5 46.772-104.5 104.5-104.5 104.5 46.772 104.5 104.5zm-12-1c0-51.649-41.851-93.5-93.5-93.5s-93.5 41.851-93.5 93.5 41.851 93.5 93.5 93.5 93.5-41.851 93.5-93.5zm-30.624 40.983c0 1.5095 5.4495 4.2768 6.8328 5.1154-11.486 17.401-29.26 29.938-49.423 34.928l-1.8444-7.757c-0.12576-1.0482-0.79646-1.174-1.7606-1.174-0.79646 0-1.2576 1.174-1.1737 1.7611l1.8444 7.8828c-5.5753 1.174-11.234 1.7611-16.935 1.7611-15.217 0-30.182-4.2768-43.177-12.202 0.71263-1.174 5.1141-7.5474 5.1141-8.4698 0-0.79666-0.71263-1.5095-1.5091-1.5095-1.6348 0-5.1141 6.9603-6.1621 8.344-17.522-11.615-30.182-29.602-35.044-50.148l8.0066-1.761c0.92222-0.25158 1.1737-0.92246 1.1737-1.7611 0-0.79667-1.1737-1.2579-1.8444-1.174l-7.8389 1.803c-1.048-5.3251-1.6348-10.692-1.6348-16.143 0-15.556 4.4015-30.86 12.66-43.984 1.1737 0.71281 6.749 4.5284 7.6712 4.5284 0.79646 0 1.5091-0.58702 1.5091-1.3837 0-1.6353-6.1621-4.7381-7.5455-5.7024 11.821-17.275 29.805-29.728 50.219-34.34l1.7606 7.757c0.25152 0.92246 0.92222 1.174 1.7606 1.174 0.83838 0 1.2576-1.174 1.1737-1.8449l-1.7606-7.6732c5.1141-0.92246 10.312-1.5095 15.552-1.5095 15.552 0 30.727 4.4026 43.973 12.663-0.79646 1.174-4.5273 6.6249-4.5273 7.5474 0 0.79667 0.58687 1.5095 1.3833 1.5095 1.6348 0 4.7369-6.0379 5.5753-7.4216 17.187 11.615 29.469 29.351 34.248 49.561l-6.4975 1.3837c-1.048 0.25158-1.1737 0.92246-1.1737 1.8449 0 0.79667 1.1737 1.2579 1.7606 1.174l6.6232-1.5095c1.048 5.3251 1.6348 10.776 1.6348 16.227 0 15.221-4.1919 30.189-12.073 43.062-1.1737-0.58702-6.0364-4.0672-6.9586-4.0672-0.8803 0-1.5929 0.71281-1.5929 1.5095zm-14.876-98.483c-5.2178 4.88-53.863 49.48-55.228 51.8l-38.772 64.2c5.0974-4.76 53.863-49.6 55.108-51.72l38.892-64.28z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
43
43
  }
44
44
  .zee-launcher-unsupported-message {
45
45
  text-align: center;
package/lib/drawcamera.js CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.cameraFrameTextureMatrix = exports.CameraDraw = void 0;
4
4
  const shader_1 = require("./shader");
5
5
  const gl_matrix_1 = require("gl-matrix");
6
+ let identity = gl_matrix_1.mat4.create();
6
7
  class CameraDraw {
7
8
  constructor(_gl) {
8
9
  this._gl = _gl;
@@ -47,7 +48,7 @@ class CameraDraw {
47
48
  let vbo = this._generate(gl, i);
48
49
  gl.activeTexture(gl.TEXTURE0);
49
50
  gl.useProgram(shader.prog);
50
- gl.uniformMatrix4fv(shader.unif_skinTexTransform, false, cameraFrameTextureMatrix(i.dataWidth, i.dataHeight, screenWidth, screenHeight, i.uvTransform, mirror));
51
+ gl.uniformMatrix4fv(shader.unif_skinTexTransform, false, cameraFrameTextureMatrix(i.dataWidth, i.dataHeight, screenWidth, screenHeight, i.uvTransform || identity, mirror));
51
52
  gl.uniform1i(shader.unif_skinSampler, 0);
52
53
  gl.bindTexture(gl.TEXTURE_2D, i.texture);
53
54
  gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
@@ -100,10 +100,15 @@ class zappar_client {
100
100
  m.int(height);
101
101
  m.int(user_data);
102
102
  m.matrix4x4(camera_to_device_transform);
103
- m.matrix4x4(camera_model);
103
+ m.cameraModel(camera_model);
104
104
  m.bool(user_facing);
105
105
  });
106
106
  },
107
+ pipeline_camera_frame_submit_raw_pointer: (o, data, dataLength, format, width, height, user_data, camera_to_device_transform, rotation, camera_model, user_facing) => {
108
+ let s = this._pipeline_state_by_instance.get(o);
109
+ if (!s)
110
+ throw new Error("This object has been destroyed");
111
+ },
107
112
  pipeline_camera_frame_camera_attitude: (o) => {
108
113
  let s = this._pipeline_state_by_instance.get(o);
109
114
  if (!s)
@@ -27,6 +27,10 @@ function getRuntimeObject(mod) {
27
27
  "number",
28
28
  "number", "number", "number", "number", "number", "number", "number", "number"
29
29
  ]);
30
+ let pipeline_camera_frame_submit_raw_pointer_wrapped = mod.cwrap("zappar_pipeline_camera_frame_submit_raw_pointer", null, [
31
+ "number",
32
+ "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"
33
+ ]);
30
34
  let pipeline_camera_frame_camera_attitude_wrapped = mod.cwrap("zappar_pipeline_camera_frame_camera_attitude", "number", [
31
35
  "number"
32
36
  ]);
@@ -176,6 +180,17 @@ function getRuntimeObject(mod) {
176
180
  let dataArrayArg = mod._malloc(dataArrayArgLength);
177
181
  let floatDataArrayArgLength = 16 * 4;
178
182
  let floatDataArrayArg = mod._malloc(floatDataArrayArgLength);
183
+ let floatDataArraysByArgIndex = new Map();
184
+ let getFloatDataArrayForArgIndex = (indx, len) => {
185
+ let existing = floatDataArraysByArgIndex.get(indx);
186
+ if (!existing || existing[0] < len) {
187
+ if (existing)
188
+ mod._free(existing[1]);
189
+ existing = [len, mod._malloc(len)];
190
+ floatDataArraysByArgIndex.set(indx, existing);
191
+ }
192
+ return existing[1];
193
+ };
179
194
  return {
180
195
  log_level: () => {
181
196
  let ret = log_level_wrapped();
@@ -228,24 +243,30 @@ function getRuntimeObject(mod) {
228
243
  let arg_width = width;
229
244
  let arg_height = height;
230
245
  let arg_user_data = user_data;
231
- if (floatDataArrayArgLength < camera_to_device_transform.byteLength) {
232
- mod._free(floatDataArrayArgLength);
233
- floatDataArrayArgLength = camera_to_device_transform.byteLength;
234
- floatDataArrayArg = mod._malloc(floatDataArrayArgLength);
235
- }
236
- let arg_camera_to_device_transform = floatDataArrayArg;
237
- mod.HEAPF32.set(camera_to_device_transform, floatDataArrayArg / 4);
238
- if (floatDataArrayArgLength < camera_model.byteLength) {
239
- mod._free(floatDataArrayArgLength);
240
- floatDataArrayArgLength = camera_model.byteLength;
241
- floatDataArrayArg = mod._malloc(floatDataArrayArgLength);
242
- }
243
- let arg_camera_model = floatDataArrayArg;
244
- mod.HEAPF32.set(camera_model, floatDataArrayArg / 4);
246
+ let arg_camera_to_device_transform = getFloatDataArrayForArgIndex(4, camera_to_device_transform.byteLength);
247
+ mod.HEAPF32.set(camera_to_device_transform, arg_camera_to_device_transform / 4);
248
+ let arg_camera_model = getFloatDataArrayForArgIndex(5, camera_model.byteLength);
249
+ mod.HEAPF32.set(camera_model, arg_camera_model / 4);
245
250
  let arg_user_facing = user_facing ? 1 : 0;
246
251
  let ret = pipeline_camera_frame_submit_wrapped(o, arg_data, arg_len_data, arg_width, arg_height, arg_user_data, arg_camera_to_device_transform, arg_camera_model, arg_user_facing);
247
252
  return ret;
248
253
  },
254
+ pipeline_camera_frame_submit_raw_pointer: (o, data, dataLength, format, width, height, user_data, camera_to_device_transform, rotation, camera_model, user_facing) => {
255
+ let arg_data = data;
256
+ let arg_dataLength = dataLength;
257
+ let arg_format = format;
258
+ let arg_width = width;
259
+ let arg_height = height;
260
+ let arg_user_data = user_data;
261
+ let arg_camera_to_device_transform = getFloatDataArrayForArgIndex(6, camera_to_device_transform.byteLength);
262
+ mod.HEAPF32.set(camera_to_device_transform, arg_camera_to_device_transform / 4);
263
+ let arg_rotation = rotation;
264
+ let arg_camera_model = getFloatDataArrayForArgIndex(8, camera_model.byteLength);
265
+ mod.HEAPF32.set(camera_model, arg_camera_model / 4);
266
+ let arg_user_facing = user_facing ? 1 : 0;
267
+ let ret = pipeline_camera_frame_submit_raw_pointer_wrapped(o, arg_data, arg_dataLength, arg_format, arg_width, arg_height, arg_user_data, arg_camera_to_device_transform, arg_rotation, arg_camera_model, arg_user_facing);
268
+ return ret;
269
+ },
249
270
  pipeline_camera_frame_camera_attitude: (o) => {
250
271
  let ret = pipeline_camera_frame_camera_attitude_wrapped(o);
251
272
  let ab = new Float32Array(16);
@@ -285,13 +306,8 @@ function getRuntimeObject(mod) {
285
306
  return ret;
286
307
  },
287
308
  pipeline_motion_attitude_matrix_submit: (o, mat) => {
288
- if (floatDataArrayArgLength < mat.byteLength) {
289
- mod._free(floatDataArrayArgLength);
290
- floatDataArrayArgLength = mat.byteLength;
291
- floatDataArrayArg = mod._malloc(floatDataArrayArgLength);
292
- }
293
- let arg_mat = floatDataArrayArg;
294
- mod.HEAPF32.set(mat, floatDataArrayArg / 4);
309
+ let arg_mat = getFloatDataArrayForArgIndex(0, mat.byteLength);
310
+ mod.HEAPF32.set(mat, arg_mat / 4);
295
311
  let ret = pipeline_motion_attitude_matrix_submit_wrapped(o, arg_mat);
296
312
  return ret;
297
313
  },
@@ -46,6 +46,16 @@ export declare enum log_level_t {
46
46
  LOG_LEVEL_WARNING = 2,
47
47
  LOG_LEVEL_VERBOSE = 3
48
48
  }
49
+ export declare enum frame_pixel_format_t {
50
+ FRAME_PIXEL_FORMAT_I420 = 0,
51
+ FRAME_PIXEL_FORMAT_I420A = 1,
52
+ FRAME_PIXEL_FORMAT_I422 = 2,
53
+ FRAME_PIXEL_FORMAT_I444 = 3,
54
+ FRAME_PIXEL_FORMAT_NV12 = 4,
55
+ FRAME_PIXEL_FORMAT_RGBA = 5,
56
+ FRAME_PIXEL_FORMAT_BGRA = 6,
57
+ FRAME_PIXEL_FORMAT_Y = 7
58
+ }
49
59
  export declare type zappar_pipeline_t = number & {
50
60
  _: 'zappar_pipeline_t';
51
61
  };
@@ -84,6 +94,7 @@ export interface zappar_cwrap {
84
94
  pipeline_camera_model(o: zappar_pipeline_t): Float32Array;
85
95
  pipeline_camera_frame_user_data(o: zappar_pipeline_t): number;
86
96
  pipeline_camera_frame_submit(o: zappar_pipeline_t, data: ArrayBuffer, width: number, height: number, user_data: number, camera_to_device_transform: Float32Array, camera_model: Float32Array, user_facing: boolean): void;
97
+ pipeline_camera_frame_submit_raw_pointer(o: zappar_pipeline_t, data: number, dataLength: number, format: frame_pixel_format_t, width: number, height: number, user_data: number, camera_to_device_transform: Float32Array, rotation: number, camera_model: Float32Array, user_facing: boolean): void;
87
98
  pipeline_camera_frame_camera_attitude(o: zappar_pipeline_t): Float32Array;
88
99
  pipeline_camera_frame_device_attitude(o: zappar_pipeline_t): Float32Array;
89
100
  pipeline_motion_accelerometer_submit(o: zappar_pipeline_t, time: number, x: number, y: number, z: number): void;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.log_level_t = exports.instant_world_tracker_transform_orientation_t = exports.face_landmark_name_t = exports.barcode_format_t = void 0;
3
+ exports.frame_pixel_format_t = exports.log_level_t = exports.instant_world_tracker_transform_orientation_t = exports.face_landmark_name_t = exports.barcode_format_t = void 0;
4
4
  var barcode_format_t;
5
5
  (function (barcode_format_t) {
6
6
  barcode_format_t[barcode_format_t["UNKNOWN"] = 131072] = "UNKNOWN";
@@ -57,3 +57,15 @@ var log_level_t;
57
57
  log_level_t[log_level_t["LOG_LEVEL_VERBOSE"] = 3] = "LOG_LEVEL_VERBOSE";
58
58
  })(log_level_t = exports.log_level_t || (exports.log_level_t = {}));
59
59
  ;
60
+ var frame_pixel_format_t;
61
+ (function (frame_pixel_format_t) {
62
+ frame_pixel_format_t[frame_pixel_format_t["FRAME_PIXEL_FORMAT_I420"] = 0] = "FRAME_PIXEL_FORMAT_I420";
63
+ frame_pixel_format_t[frame_pixel_format_t["FRAME_PIXEL_FORMAT_I420A"] = 1] = "FRAME_PIXEL_FORMAT_I420A";
64
+ frame_pixel_format_t[frame_pixel_format_t["FRAME_PIXEL_FORMAT_I422"] = 2] = "FRAME_PIXEL_FORMAT_I422";
65
+ frame_pixel_format_t[frame_pixel_format_t["FRAME_PIXEL_FORMAT_I444"] = 3] = "FRAME_PIXEL_FORMAT_I444";
66
+ frame_pixel_format_t[frame_pixel_format_t["FRAME_PIXEL_FORMAT_NV12"] = 4] = "FRAME_PIXEL_FORMAT_NV12";
67
+ frame_pixel_format_t[frame_pixel_format_t["FRAME_PIXEL_FORMAT_RGBA"] = 5] = "FRAME_PIXEL_FORMAT_RGBA";
68
+ frame_pixel_format_t[frame_pixel_format_t["FRAME_PIXEL_FORMAT_BGRA"] = 6] = "FRAME_PIXEL_FORMAT_BGRA";
69
+ frame_pixel_format_t[frame_pixel_format_t["FRAME_PIXEL_FORMAT_Y"] = 7] = "FRAME_PIXEL_FORMAT_Y";
70
+ })(frame_pixel_format_t = exports.frame_pixel_format_t || (exports.frame_pixel_format_t = {}));
71
+ ;
@@ -72,7 +72,7 @@ class zappar_server {
72
72
  let obj = this._pipeline_by_instance.get(clientId);
73
73
  if (obj === undefined)
74
74
  return;
75
- this._impl.pipeline_camera_frame_submit(obj, msg.dataWithLength(), msg.int(), msg.int(), msg.int(), msg.matrix4x4(), msg.matrix4x4(), msg.bool());
75
+ this._impl.pipeline_camera_frame_submit(obj, msg.dataWithLength(), msg.int(), msg.int(), msg.int(), msg.matrix4x4(), msg.cameraModel(), msg.bool());
76
76
  break;
77
77
  }
78
78
  case 10: {
@@ -2,6 +2,8 @@ import { barcode_format_t } from "./zappar-native";
2
2
  export { barcode_format_t } from "./zappar-native";
3
3
  import { face_landmark_name_t } from "./zappar-native";
4
4
  export { face_landmark_name_t } from "./zappar-native";
5
+ import { frame_pixel_format_t } from "./zappar-native";
6
+ export { frame_pixel_format_t } from "./zappar-native";
5
7
  import { instant_world_tracker_transform_orientation_t } from "./zappar-native";
6
8
  export { instant_world_tracker_transform_orientation_t } from "./zappar-native";
7
9
  import { log_level_t } from "./zappar-native";
@@ -34,6 +36,7 @@ export declare type zappar_instant_world_tracker_t = number & {
34
36
  _: 'zappar_instant_world_tracker_t';
35
37
  };
36
38
  export interface zappar {
39
+ loaded(): boolean;
37
40
  camera_default_device_id(userFacing: boolean): string;
38
41
  projection_matrix_from_camera_model(model: Float32Array, renderWidth: number, renderHeight: number): Float32Array;
39
42
  projection_matrix_from_camera_model_ext(model: Float32Array, renderWidth: number, renderHeight: number, zNear: number, zFar: number): Float32Array;
@@ -65,6 +68,7 @@ export interface zappar {
65
68
  pipeline_camera_pose_with_origin(o: zappar_pipeline_t, pose: Float32Array): Float32Array;
66
69
  pipeline_camera_frame_user_data(o: zappar_pipeline_t): number;
67
70
  pipeline_camera_frame_submit(o: zappar_pipeline_t, data: ArrayBuffer, width: number, height: number, user_data: number, camera_to_device_transform: Float32Array, camera_model: Float32Array, user_facing: boolean): void;
71
+ pipeline_camera_frame_submit_raw_pointer(o: zappar_pipeline_t, data: number, dataLength: number, format: frame_pixel_format_t, width: number, height: number, user_data: number, camera_to_device_transform: Float32Array, rotation: number, camera_model: Float32Array, user_facing: boolean): void;
68
72
  pipeline_camera_frame_camera_attitude(o: zappar_pipeline_t): Float32Array;
69
73
  pipeline_camera_frame_device_attitude(o: zappar_pipeline_t): Float32Array;
70
74
  pipeline_camera_frame_user_facing(o: zappar_pipeline_t): boolean;
@@ -87,6 +91,7 @@ export interface zappar {
87
91
  sequence_source_start(o: zappar_sequence_source_t): void;
88
92
  sequence_source_pause(o: zappar_sequence_source_t): void;
89
93
  sequence_source_load_from_memory(o: zappar_sequence_source_t, data: ArrayBuffer): void;
94
+ sequence_source_max_playback_fps_set(o: zappar_sequence_source_t, fps: number): void;
90
95
  image_tracker_create(pipeline: zappar_pipeline_t): zappar_image_tracker_t;
91
96
  image_tracker_destroy(o: zappar_image_tracker_t): void;
92
97
  image_tracker_target_load_from_memory(o: zappar_image_tracker_t, data: ArrayBuffer): void;
package/lib/gen/zappar.js CHANGED
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.log_level_t = exports.instant_world_tracker_transform_orientation_t = exports.face_landmark_name_t = exports.barcode_format_t = void 0;
3
+ exports.log_level_t = exports.instant_world_tracker_transform_orientation_t = exports.frame_pixel_format_t = exports.face_landmark_name_t = exports.barcode_format_t = void 0;
4
4
  var zappar_native_1 = require("./zappar-native");
5
5
  Object.defineProperty(exports, "barcode_format_t", { enumerable: true, get: function () { return zappar_native_1.barcode_format_t; } });
6
6
  var zappar_native_2 = require("./zappar-native");
7
7
  Object.defineProperty(exports, "face_landmark_name_t", { enumerable: true, get: function () { return zappar_native_2.face_landmark_name_t; } });
8
8
  var zappar_native_3 = require("./zappar-native");
9
- Object.defineProperty(exports, "instant_world_tracker_transform_orientation_t", { enumerable: true, get: function () { return zappar_native_3.instant_world_tracker_transform_orientation_t; } });
9
+ Object.defineProperty(exports, "frame_pixel_format_t", { enumerable: true, get: function () { return zappar_native_3.frame_pixel_format_t; } });
10
10
  var zappar_native_4 = require("./zappar-native");
11
- Object.defineProperty(exports, "log_level_t", { enumerable: true, get: function () { return zappar_native_4.log_level_t; } });
11
+ Object.defineProperty(exports, "instant_world_tracker_transform_orientation_t", { enumerable: true, get: function () { return zappar_native_4.instant_world_tracker_transform_orientation_t; } });
12
+ var zappar_native_5 = require("./zappar-native");
13
+ Object.defineProperty(exports, "log_level_t", { enumerable: true, get: function () { return zappar_native_5.log_level_t; } });
package/lib/gfx.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare const gfx = "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"250\" height=\"80.408\" viewBox=\"0 0 250 80.408\"><defs><filter id=\"a\" x=\"0\" y=\"1.182\" width=\"250\" height=\"79.226\" filterUnits=\"userSpaceOnUse\"><feOffset dy=\"3\" input=\"SourceAlpha\"/><feGaussianBlur stdDeviation=\"3\" result=\"b\"/><feFlood flood-opacity=\"0.161\"/><feComposite operator=\"in\" in2=\"b\"/><feComposite in=\"SourceGraphic\"/></filter><filter id=\"c\" x=\"6.929\" y=\"0\" width=\"111.975\" height=\"40.988\" filterUnits=\"userSpaceOnUse\"><feOffset dy=\"3\" input=\"SourceAlpha\"/><feGaussianBlur stdDeviation=\"3\" result=\"d\"/><feFlood flood-opacity=\"0.161\"/><feComposite operator=\"in\" in2=\"d\"/><feComposite in=\"SourceGraphic\"/></filter></defs><g transform=\"translate(-26.873 -414.029)\"><g transform=\"translate(44 423.332)\"><g transform=\"translate(0 0.635)\" style=\"isolation:isolate\"><g transform=\"translate(0 0)\"><g transform=\"matrix(1, 0, 0, 1, -17.13, -9.94)\" filter=\"url(#a)\"><path d=\"M55.766,44.97V11.8h8.272v2.6h.089a8.258,8.258,0,0,1,7.046-3.357,11.4,11.4,0,0,1,8.5,3.686,12.667,12.667,0,0,1,3.278,8.622,12.509,12.509,0,0,1-3.25,8.57,11.353,11.353,0,0,1-8.429,3.6,9.533,9.533,0,0,1-7.229-2.95V43.378l-8.269,1.594h0Zm8-21.671a4.958,4.958,0,0,0,5.319,5.15A4.957,4.957,0,0,0,74.4,23.3a5.321,5.321,0,0,0-10.638,0ZM16.105,18.412H2.752V11.038H30.9L14.887,37.16H38.22L0,44.534ZM131.469,38.45a.761.761,0,0,1-.484-.166.582.582,0,0,1-.228-.419l-.553-3.586a12.243,12.243,0,0,1-1.782-.721l-2.789,2.084a.718.718,0,0,1-.5.176.688.688,0,0,1-.495-.214,25.864,25.864,0,0,1-3.264-3.274.754.754,0,0,1,.018-.9c.2-.277.543-.713,1.01-1.3.483-.6.832-1.05,1.068-1.374a9.614,9.614,0,0,1-.811-1.929l-3.62-.527a.631.631,0,0,1-.416-.243.728.728,0,0,1-.159-.458V21.283a.743.743,0,0,1,.159-.448.6.6,0,0,1,.376-.253l3.68-.546a9.511,9.511,0,0,1,.772-1.792c-.523-.733-1.235-1.638-2.117-2.69a.731.731,0,0,1-.2-.467.82.82,0,0,1,.178-.449,19.577,19.577,0,0,1,1.949-2.095c.953-.924,1.582-1.393,1.87-1.393a.861.861,0,0,1,.515.195l2.729,2.084a11.551,11.551,0,0,1,1.8-.741,31.446,31.446,0,0,1,.573-3.623.666.666,0,0,1,.712-.546h4.392a.757.757,0,0,1,.485.166.58.58,0,0,1,.228.419l.553,3.584a12.576,12.576,0,0,1,1.782.722l2.809-2.085a.641.641,0,0,1,.475-.176.776.776,0,0,1,.5.195,27.035,27.035,0,0,1,3.264,3.313.625.625,0,0,1,.139.429.742.742,0,0,1-.159.447c-.2.271-.525.7-1.008,1.3-.467.581-.827,1.043-1.069,1.373a11.8,11.8,0,0,1,.812,1.91l3.62.545a.626.626,0,0,1,.416.244.736.736,0,0,1,.158.457v4.325a.755.755,0,0,1-.158.449.6.6,0,0,1-.4.253l-3.66.545a12.692,12.692,0,0,1-.772,1.774c.465.653,1.177,1.559,2.117,2.688a.751.751,0,0,1,.2.488.648.648,0,0,1-.178.448,19.638,19.638,0,0,1-1.958,2.1c-.947.918-1.573,1.384-1.861,1.384a.976.976,0,0,1-.515-.176l-2.731-2.1a11.361,11.361,0,0,1-1.8.741,31.849,31.849,0,0,1-.573,3.625.668.668,0,0,1-.713.546Zm-1.385-18.491a4.935,4.935,0,0,0,0,7.053,5.12,5.12,0,0,0,7.163,0,4.931,4.931,0,0,0,0-7.053,5.117,5.117,0,0,0-7.163,0Zm69.969,14.868a18.523,18.523,0,0,1-4.932-2.073l1.705-6.1A13.441,13.441,0,0,0,200.779,29a12.14,12.14,0,0,0,4.344.818,4.644,4.644,0,0,0,2.351-.482,1.538,1.538,0,0,0,.806-1.4q0-1.5-3.25-2.242-1.061-.246-1.705-.425a12.335,12.335,0,0,1-5.358-2.589,5.5,5.5,0,0,1-1.671-4.157,6.323,6.323,0,0,1,2.547-5.267,10.993,10.993,0,0,1,6.9-1.972,21.351,21.351,0,0,1,4.552.5,25.439,25.439,0,0,1,4.736,1.557l-1.705,5.491a14.244,14.244,0,0,0-3.319-1.636,10.6,10.6,0,0,0-3.364-.561,4.227,4.227,0,0,0-2.121.426,1.357,1.357,0,0,0-.714,1.232q0,1.211,3.227,2.04.737.2,1.106.291,4.264,1.187,5.935,2.79a5.728,5.728,0,0,1,1.67,4.337A6.781,6.781,0,0,1,213,33.37a11.48,11.48,0,0,1-7.259,2.14A22.577,22.577,0,0,1,200.053,34.827ZM30.568,31.834a12.566,12.566,0,0,1-3.292-8.59,12.567,12.567,0,0,1,3.247-8.568,11.3,11.3,0,0,1,8.423-3.638,9.519,9.519,0,0,1,7.217,3V11.8h8.264V34.735H46.163V32.186h-.09c-1.32,2.071-3.951,3.308-7.038,3.308A11.412,11.412,0,0,1,30.568,31.834Zm5.245-8.545a4.95,4.95,0,0,0,5.312,5.141,4.95,4.95,0,0,0,5.312-5.141A5.023,5.023,0,0,0,41.125,18.1,5.023,5.023,0,0,0,35.813,23.289Zm69.2,11.554-3.527-10.452q-.282-.892-.505-1.8t-.412-1.8a30.821,30.821,0,0,1-.917,3.454l-.047.16L96.1,34.842H90.176l-9.925-23.1h8.632l3.552,10.223q.4,1.12.634,1.955t.377,1.635a23.558,23.558,0,0,1,.917-3.179q.093-.274.141-.411l3.528-10.223h5.056l3.5,10.2.07.183a20.724,20.724,0,0,1,.988,3.43q.141-.732.364-1.532t.647-2.058l3.574-10.223h8.678l-9.971,23.1Zm80.154-.092-8.587-9.841v9.841h-7.888V1.5L176.583,0V22.28l8.272-9.665h9.96L184.584,23.266l11.156,11.485Zm-35.09,0V11.782h8.272v3.761h.091a8.131,8.131,0,0,1,7.546-4.074h1.593V19.3a6.8,6.8,0,0,0-3.5-.761c-4.593,0-5.728,3-5.728,6.941v9.268Z\" transform=\"translate(17.13 15.31)\"/></g><g transform=\"matrix(1, 0, 0, 1, -17.13, -9.94)\" filter=\"url(#c)\"><path d=\"M3.576-12.852v-4.3H6.628a2.867,2.867,0,0,1,1.945.55A2.034,2.034,0,0,1,9.188-15a2.06,2.06,0,0,1-.615,1.608,2.784,2.784,0,0,1-1.945.542ZM2.017-18.464V-6.748H3.576v-4.792H7.153a3.569,3.569,0,0,0,2.683-.9A3.478,3.478,0,0,0,10.747-15a3.45,3.45,0,0,0-.911-2.552,3.638,3.638,0,0,0-2.683-.911Zm11.421,7.483a4.221,4.221,0,0,1,.205-1.37,2.957,2.957,0,0,1,.566-1.009,2.411,2.411,0,0,1,.845-.624A2.515,2.515,0,0,1,16.08-14.2a2.515,2.515,0,0,1,1.026.213,2.411,2.411,0,0,1,.845.624,2.957,2.957,0,0,1,.566,1.009,4.221,4.221,0,0,1,.205,1.37,4.221,4.221,0,0,1-.205,1.37,2.867,2.867,0,0,1-.566,1,2.457,2.457,0,0,1-.845.615,2.515,2.515,0,0,1-1.026.213,2.515,2.515,0,0,1-1.026-.213,2.457,2.457,0,0,1-.845-.615,2.867,2.867,0,0,1-.566-1A4.221,4.221,0,0,1,13.438-10.981Zm-1.477,0a5.573,5.573,0,0,0,.263,1.739,3.97,3.97,0,0,0,.788,1.4,3.623,3.623,0,0,0,1.3.935,4.4,4.4,0,0,0,1.772.336A4.381,4.381,0,0,0,17.86-6.9a3.641,3.641,0,0,0,1.288-.935,3.97,3.97,0,0,0,.788-1.4,5.573,5.573,0,0,0,.263-1.739,5.65,5.65,0,0,0-.263-1.748,3.96,3.96,0,0,0-.788-1.411,3.729,3.729,0,0,0-1.288-.944,4.29,4.29,0,0,0-1.78-.345,4.3,4.3,0,0,0-1.772.345,3.71,3.71,0,0,0-1.3.944,3.96,3.96,0,0,0-.788,1.411A5.65,5.65,0,0,0,11.961-10.981Zm18.28,4.234,2.708-8.484H31.5L29.6-8.29h-.033L27.8-15.231H26.27L24.564-8.29h-.033l-1.92-6.941H21.068l2.724,8.484H25.3l1.707-6.744h.033l1.723,6.744ZM40.169-11.8H35.3a2.905,2.905,0,0,1,.213-.927A2.473,2.473,0,0,1,36-13.492a2.255,2.255,0,0,1,.747-.517,2.429,2.429,0,0,1,.976-.189,2.386,2.386,0,0,1,.96.189,2.415,2.415,0,0,1,.755.509,2.391,2.391,0,0,1,.509.763A2.854,2.854,0,0,1,40.169-11.8Zm1.346,2.363H40.136a1.983,1.983,0,0,1-.747,1.247,2.414,2.414,0,0,1-1.452.41,2.889,2.889,0,0,1-1.2-.23,2.348,2.348,0,0,1-.837-.615,2.4,2.4,0,0,1-.476-.886,3.367,3.367,0,0,1-.131-1.058h6.35a6.754,6.754,0,0,0-.139-1.625,4.7,4.7,0,0,0-.624-1.575,3.716,3.716,0,0,0-1.2-1.19,3.48,3.48,0,0,0-1.879-.468,3.858,3.858,0,0,0-1.6.328,3.76,3.76,0,0,0-1.264.919,4.236,4.236,0,0,0-.829,1.395,5.105,5.105,0,0,0-.3,1.772,6.8,6.8,0,0,0,.287,1.789,3.9,3.9,0,0,0,.763,1.411,3.478,3.478,0,0,0,1.255.919,4.358,4.358,0,0,0,1.764.328,3.851,3.851,0,0,0,2.4-.722A3.39,3.39,0,0,0,41.515-9.439Zm1.526-5.793v8.484h1.395v-3.774a5.8,5.8,0,0,1,.164-1.452,2.784,2.784,0,0,1,.525-1.075,2.251,2.251,0,0,1,.952-.673,3.945,3.945,0,0,1,1.428-.23v-1.477a3.135,3.135,0,0,0-1.871.459,3.779,3.779,0,0,0-1.247,1.526h-.033v-1.789ZM54.15-11.8H49.276a2.905,2.905,0,0,1,.213-.927,2.473,2.473,0,0,1,.492-.763,2.255,2.255,0,0,1,.747-.517A2.429,2.429,0,0,1,51.7-14.2a2.386,2.386,0,0,1,.96.189,2.415,2.415,0,0,1,.755.509,2.391,2.391,0,0,1,.509.763A2.854,2.854,0,0,1,54.15-11.8ZM55.5-9.439H54.117a1.983,1.983,0,0,1-.747,1.247,2.414,2.414,0,0,1-1.452.41,2.889,2.889,0,0,1-1.2-.23,2.348,2.348,0,0,1-.837-.615,2.4,2.4,0,0,1-.476-.886,3.367,3.367,0,0,1-.131-1.058h6.35a6.754,6.754,0,0,0-.139-1.625,4.7,4.7,0,0,0-.624-1.575,3.716,3.716,0,0,0-1.2-1.19,3.48,3.48,0,0,0-1.879-.468,3.858,3.858,0,0,0-1.6.328,3.76,3.76,0,0,0-1.264.919,4.236,4.236,0,0,0-.829,1.395,5.1,5.1,0,0,0-.3,1.772,6.8,6.8,0,0,0,.287,1.789,3.9,3.9,0,0,0,.763,1.411,3.478,3.478,0,0,0,1.255.919,4.358,4.358,0,0,0,1.764.328,3.851,3.851,0,0,0,2.4-.722A3.39,3.39,0,0,0,55.5-9.439Zm2.593-1.477a5.581,5.581,0,0,1,.131-1.214,3.212,3.212,0,0,1,.427-1.05,2.221,2.221,0,0,1,.788-.738,2.4,2.4,0,0,1,1.2-.279,2.589,2.589,0,0,1,1.231.271,2.389,2.389,0,0,1,.829.714,2.985,2.985,0,0,1,.468,1.026,4.889,4.889,0,0,1,.148,1.206,4.919,4.919,0,0,1-.139,1.165,3.053,3.053,0,0,1-.451,1.026,2.4,2.4,0,0,1-.8.73,2.4,2.4,0,0,1-1.2.279,2.491,2.491,0,0,1-1.173-.263,2.332,2.332,0,0,1-.82-.706,3.122,3.122,0,0,1-.476-1.009A4.338,4.338,0,0,1,58.088-10.916Zm6.564,4.168V-18.464H63.257V-14.1h-.033a2.247,2.247,0,0,0-.566-.632,3.216,3.216,0,0,0-.714-.41,3.583,3.583,0,0,0-.755-.222,4.132,4.132,0,0,0-.706-.066,3.861,3.861,0,0,0-1.7.353,3.487,3.487,0,0,0-1.214.952,4.018,4.018,0,0,0-.722,1.4,5.985,5.985,0,0,0-.238,1.707,5.8,5.8,0,0,0,.246,1.707,4.218,4.218,0,0,0,.73,1.411,3.529,3.529,0,0,0,1.214.968,3.827,3.827,0,0,0,1.715.361,4.135,4.135,0,0,0,1.625-.312A2.053,2.053,0,0,0,63.224-7.9h.033v1.149Zm6.761-11.716V-6.748h1.395V-7.88h.033a2.247,2.247,0,0,0,.566.632,2.982,2.982,0,0,0,.714.4,3.874,3.874,0,0,0,.763.213,4.193,4.193,0,0,0,.7.066,3.94,3.94,0,0,0,1.7-.345,3.4,3.4,0,0,0,1.214-.944,4.018,4.018,0,0,0,.722-1.4,5.985,5.985,0,0,0,.238-1.707,5.8,5.8,0,0,0-.246-1.707,4.312,4.312,0,0,0-.73-1.419,3.488,3.488,0,0,0-1.214-.976,3.827,3.827,0,0,0-1.715-.361,4.043,4.043,0,0,0-1.625.32,2.088,2.088,0,0,0-1.083,1.026h-.033v-4.381Zm6.564,7.4a5.581,5.581,0,0,1-.131,1.214,3.212,3.212,0,0,1-.427,1.05,2.243,2.243,0,0,1-.779.738,2.385,2.385,0,0,1-1.206.279A2.589,2.589,0,0,1,74.2-8.052a2.389,2.389,0,0,1-.829-.714,2.985,2.985,0,0,1-.468-1.026A4.889,4.889,0,0,1,72.758-11a4.919,4.919,0,0,1,.139-1.165,3.053,3.053,0,0,1,.451-1.026,2.4,2.4,0,0,1,.8-.73,2.4,2.4,0,0,1,1.2-.279,2.491,2.491,0,0,1,1.173.263,2.332,2.332,0,0,1,.82.706,3.122,3.122,0,0,1,.476,1.009A4.338,4.338,0,0,1,77.976-11.063Zm6.449,5.448a8.871,8.871,0,0,1-.484,1.05,2.871,2.871,0,0,1-.525.7,1.782,1.782,0,0,1-.64.394,2.462,2.462,0,0,1-.812.123,3.721,3.721,0,0,1-.492-.033A2.324,2.324,0,0,1,81-3.5v-1.28a2.342,2.342,0,0,0,.418.139,1.765,1.765,0,0,0,.4.057,1.2,1.2,0,0,0,.714-.205,1.255,1.255,0,0,0,.435-.583L83.539-6.8l-3.364-8.434h1.575L84.228-8.29h.033l2.379-6.941h1.477Z\" transform=\"translate(17.85 28.4)\"/></g></g></g><g transform=\"translate(0 0)\"><g transform=\"translate(0 5.371)\"><path d=\"M11.76,24.456A11.41,11.41,0,0,1,3.292,20.8,12.564,12.564,0,0,1,0,12.206,12.569,12.569,0,0,1,3.246,3.638,11.307,11.307,0,0,1,11.67,0a9.519,9.519,0,0,1,7.217,3V.759h8.264V23.7H18.887V21.148H18.8C17.478,23.219,14.846,24.456,11.76,24.456ZM13.849,7.064A5.023,5.023,0,0,0,8.537,12.25a4.95,4.95,0,0,0,5.312,5.141A4.95,4.95,0,0,0,19.16,12.25,5.023,5.023,0,0,0,13.849,7.064Z\" transform=\"translate(27.277 11.038)\" fill=\"#fff\"/><path d=\"M0,33.931V.758H8.271v2.6H8.36A8.258,8.258,0,0,1,15.406,0,11.4,11.4,0,0,1,23.9,3.686a12.665,12.665,0,0,1,3.278,8.622,12.508,12.508,0,0,1-3.25,8.57,11.351,11.351,0,0,1-8.429,3.6,9.535,9.535,0,0,1-7.229-2.95V32.337L0,33.931ZM13.317,7.07A5.028,5.028,0,0,0,8,12.259a4.957,4.957,0,0,0,5.319,5.15,4.957,4.957,0,0,0,5.319-5.15A5.028,5.028,0,0,0,13.317,7.07Z\" transform=\"translate(55.766 11.041)\" fill=\"#fff\"/><path d=\"M22.836,0l3.5,10.2.07.183a20.748,20.748,0,0,1,.988,3.43q.141-.731.364-1.532t.647-2.058L31.985,0h8.678L30.691,23.1H24.764L21.237,12.647q-.282-.891-.505-1.8t-.412-1.8A30.927,30.927,0,0,1,19.4,12.51l-.047.16L15.851,23.1H9.925L0,0H8.631l3.552,10.223q.4,1.121.635,1.955t.377,1.635a23.522,23.522,0,0,1,.917-3.179q.093-.274.141-.411L17.78,0h5.056\" transform=\"translate(80.251 11.743)\" fill=\"#fff\"/><path d=\"M0,34.75V1.5L7.888,0V22.28l8.272-9.665H26.12L15.889,23.266,27.045,34.75H16.475L7.888,24.91v9.84H0\" transform=\"translate(168.695 0)\" fill=\"#fff\"/><path d=\"M0,21.47l1.705-6.1a13.453,13.453,0,0,0,3.952,2.342A12.145,12.145,0,0,0,10,18.534a4.643,4.643,0,0,0,2.351-.482,1.539,1.539,0,0,0,.807-1.4q0-1.5-3.25-2.241-1.06-.246-1.705-.426A12.325,12.325,0,0,1,2.846,11.4,5.5,5.5,0,0,1,1.176,7.239,6.324,6.324,0,0,1,3.722,1.972,11,11,0,0,1,10.624,0a21.365,21.365,0,0,1,4.551.5,25.45,25.45,0,0,1,4.736,1.558l-1.706,5.49a14.24,14.24,0,0,0-3.319-1.636,10.6,10.6,0,0,0-3.364-.56A4.22,4.22,0,0,0,9.4,5.782a1.356,1.356,0,0,0-.714,1.233q0,1.211,3.227,2.04.737.2,1.106.291,4.264,1.188,5.935,2.79a5.728,5.728,0,0,1,1.671,4.337,6.782,6.782,0,0,1-2.743,5.614,11.478,11.478,0,0,1-7.259,2.14,22.565,22.565,0,0,1-5.693-.683A18.517,18.517,0,0,1,0,21.47\" transform=\"translate(195.121 11.284)\" fill=\"#fff\"/><path d=\"M8.273,4.075h.091A8.13,8.13,0,0,1,15.909,0H17.5V7.834A6.8,6.8,0,0,0,14,7.074c-4.593,0-5.728,3-5.728,6.941v9.268H0V.313H8.273V4.075\" transform=\"translate(150.08 11.469)\" fill=\"#fff\"/><path d=\"M17.392,29.929H13a.76.76,0,0,1-.485-.166.579.579,0,0,1-.227-.419l-.553-3.586a12.3,12.3,0,0,1-1.781-.721L7.163,27.123a.719.719,0,0,1-.495.176.687.687,0,0,1-.495-.214A25.873,25.873,0,0,1,2.91,23.81a.753.753,0,0,1,.019-.9c.2-.277.542-.713,1.009-1.3.483-.6.832-1.05,1.068-1.374a9.591,9.591,0,0,1-.811-1.929l-3.62-.526a.63.63,0,0,1-.416-.243A.729.729,0,0,1,0,17.089V12.762a.746.746,0,0,1,.159-.448.6.6,0,0,1,.376-.253l3.68-.546a9.5,9.5,0,0,1,.772-1.792C4.464,8.991,3.752,8.085,2.87,7.034a.732.732,0,0,1-.2-.468.82.82,0,0,1,.179-.449A19.622,19.622,0,0,1,4.8,4.023C5.751,3.1,6.38,2.631,6.668,2.631a.859.859,0,0,1,.515.194L9.913,4.91a11.536,11.536,0,0,1,1.8-.741A31.372,31.372,0,0,1,12.287.546.665.665,0,0,1,13,0h4.392a.755.755,0,0,1,.485.166.581.581,0,0,1,.229.419l.553,3.584a12.543,12.543,0,0,1,1.781.722L23.25,2.807a.641.641,0,0,1,.475-.176.775.775,0,0,1,.495.194,27.092,27.092,0,0,1,3.264,3.313.625.625,0,0,1,.139.429.745.745,0,0,1-.159.448c-.2.271-.525.695-1.008,1.3-.467.581-.827,1.043-1.069,1.373a11.784,11.784,0,0,1,.812,1.91l3.62.545a.625.625,0,0,1,.416.244.736.736,0,0,1,.157.458v4.325a.754.754,0,0,1-.157.449.606.606,0,0,1-.4.253l-3.66.545a12.628,12.628,0,0,1-.772,1.774c.465.654,1.177,1.559,2.117,2.688a.752.752,0,0,1,.2.488.648.648,0,0,1-.177.448,19.641,19.641,0,0,1-1.959,2.1c-.947.918-1.573,1.384-1.86,1.384a.978.978,0,0,1-.515-.176l-2.731-2.1a11.429,11.429,0,0,1-1.8.741,32.016,32.016,0,0,1-.573,3.624A.668.668,0,0,1,17.392,29.929ZM15.2,9.976a4.938,4.938,0,0,0-3.582,1.463,4.935,4.935,0,0,0,0,7.053,5.12,5.12,0,0,0,7.163,0,4.932,4.932,0,0,0,0-7.053A4.938,4.938,0,0,0,15.2,9.976Z\" transform=\"translate(118.47 8.521)\" fill=\"#fff\"/><path d=\"M0,33.5,16.106,7.374H2.752V0H30.9L14.887,26.122H38.22L0,33.5\" transform=\"translate(0 11.038)\" fill=\"#fff\"/></g><path d=\"M3.576-12.852v-4.3H6.628a2.867,2.867,0,0,1,1.945.55A2.034,2.034,0,0,1,9.188-15a2.06,2.06,0,0,1-.615,1.608,2.784,2.784,0,0,1-1.945.542ZM2.017-18.464V-6.748H3.576v-4.792H7.153a3.569,3.569,0,0,0,2.683-.9A3.478,3.478,0,0,0,10.747-15a3.45,3.45,0,0,0-.911-2.552,3.638,3.638,0,0,0-2.683-.911Zm11.421,7.483a4.221,4.221,0,0,1,.205-1.37,2.957,2.957,0,0,1,.566-1.009,2.411,2.411,0,0,1,.845-.624A2.515,2.515,0,0,1,16.08-14.2a2.515,2.515,0,0,1,1.026.213,2.411,2.411,0,0,1,.845.624,2.957,2.957,0,0,1,.566,1.009,4.221,4.221,0,0,1,.205,1.37,4.221,4.221,0,0,1-.205,1.37,2.867,2.867,0,0,1-.566,1,2.457,2.457,0,0,1-.845.615,2.515,2.515,0,0,1-1.026.213,2.515,2.515,0,0,1-1.026-.213,2.457,2.457,0,0,1-.845-.615,2.867,2.867,0,0,1-.566-1A4.221,4.221,0,0,1,13.438-10.981Zm-1.477,0a5.573,5.573,0,0,0,.263,1.739,3.97,3.97,0,0,0,.788,1.4,3.623,3.623,0,0,0,1.3.935,4.4,4.4,0,0,0,1.772.336A4.381,4.381,0,0,0,17.86-6.9a3.641,3.641,0,0,0,1.288-.935,3.97,3.97,0,0,0,.788-1.4,5.573,5.573,0,0,0,.263-1.739,5.65,5.65,0,0,0-.263-1.748,3.96,3.96,0,0,0-.788-1.411,3.729,3.729,0,0,0-1.288-.944,4.29,4.29,0,0,0-1.78-.345,4.3,4.3,0,0,0-1.772.345,3.71,3.71,0,0,0-1.3.944,3.96,3.96,0,0,0-.788,1.411A5.65,5.65,0,0,0,11.961-10.981Zm18.28,4.234,2.708-8.484H31.5L29.6-8.29h-.033L27.8-15.231H26.27L24.564-8.29h-.033l-1.92-6.941H21.068l2.724,8.484H25.3l1.707-6.744h.033l1.723,6.744ZM40.169-11.8H35.3a2.905,2.905,0,0,1,.213-.927A2.473,2.473,0,0,1,36-13.492a2.255,2.255,0,0,1,.747-.517,2.429,2.429,0,0,1,.976-.189,2.386,2.386,0,0,1,.96.189,2.415,2.415,0,0,1,.755.509,2.391,2.391,0,0,1,.509.763A2.854,2.854,0,0,1,40.169-11.8Zm1.346,2.363H40.136a1.983,1.983,0,0,1-.747,1.247,2.414,2.414,0,0,1-1.452.41,2.889,2.889,0,0,1-1.2-.23,2.348,2.348,0,0,1-.837-.615,2.4,2.4,0,0,1-.476-.886,3.367,3.367,0,0,1-.131-1.058h6.35a6.754,6.754,0,0,0-.139-1.625,4.7,4.7,0,0,0-.624-1.575,3.716,3.716,0,0,0-1.2-1.19,3.48,3.48,0,0,0-1.879-.468,3.858,3.858,0,0,0-1.6.328,3.76,3.76,0,0,0-1.264.919,4.236,4.236,0,0,0-.829,1.395,5.105,5.105,0,0,0-.3,1.772,6.8,6.8,0,0,0,.287,1.789,3.9,3.9,0,0,0,.763,1.411,3.478,3.478,0,0,0,1.255.919,4.358,4.358,0,0,0,1.764.328,3.851,3.851,0,0,0,2.4-.722A3.39,3.39,0,0,0,41.515-9.439Zm1.526-5.793v8.484h1.395v-3.774a5.8,5.8,0,0,1,.164-1.452,2.784,2.784,0,0,1,.525-1.075,2.251,2.251,0,0,1,.952-.673,3.945,3.945,0,0,1,1.428-.23v-1.477a3.135,3.135,0,0,0-1.871.459,3.779,3.779,0,0,0-1.247,1.526h-.033v-1.789ZM54.15-11.8H49.276a2.905,2.905,0,0,1,.213-.927,2.473,2.473,0,0,1,.492-.763,2.255,2.255,0,0,1,.747-.517A2.429,2.429,0,0,1,51.7-14.2a2.386,2.386,0,0,1,.96.189,2.415,2.415,0,0,1,.755.509,2.391,2.391,0,0,1,.509.763A2.854,2.854,0,0,1,54.15-11.8ZM55.5-9.439H54.117a1.983,1.983,0,0,1-.747,1.247,2.414,2.414,0,0,1-1.452.41,2.889,2.889,0,0,1-1.2-.23,2.348,2.348,0,0,1-.837-.615,2.4,2.4,0,0,1-.476-.886,3.367,3.367,0,0,1-.131-1.058h6.35a6.754,6.754,0,0,0-.139-1.625,4.7,4.7,0,0,0-.624-1.575,3.716,3.716,0,0,0-1.2-1.19,3.48,3.48,0,0,0-1.879-.468,3.858,3.858,0,0,0-1.6.328,3.76,3.76,0,0,0-1.264.919,4.236,4.236,0,0,0-.829,1.395,5.1,5.1,0,0,0-.3,1.772,6.8,6.8,0,0,0,.287,1.789,3.9,3.9,0,0,0,.763,1.411,3.478,3.478,0,0,0,1.255.919,4.358,4.358,0,0,0,1.764.328,3.851,3.851,0,0,0,2.4-.722A3.39,3.39,0,0,0,55.5-9.439Zm2.593-1.477a5.581,5.581,0,0,1,.131-1.214,3.212,3.212,0,0,1,.427-1.05,2.221,2.221,0,0,1,.788-.738,2.4,2.4,0,0,1,1.2-.279,2.589,2.589,0,0,1,1.231.271,2.389,2.389,0,0,1,.829.714,2.985,2.985,0,0,1,.468,1.026,4.889,4.889,0,0,1,.148,1.206,4.919,4.919,0,0,1-.139,1.165,3.053,3.053,0,0,1-.451,1.026,2.4,2.4,0,0,1-.8.73,2.4,2.4,0,0,1-1.2.279,2.491,2.491,0,0,1-1.173-.263,2.332,2.332,0,0,1-.82-.706,3.122,3.122,0,0,1-.476-1.009A4.338,4.338,0,0,1,58.088-10.916Zm6.564,4.168V-18.464H63.257V-14.1h-.033a2.247,2.247,0,0,0-.566-.632,3.216,3.216,0,0,0-.714-.41,3.583,3.583,0,0,0-.755-.222,4.132,4.132,0,0,0-.706-.066,3.861,3.861,0,0,0-1.7.353,3.487,3.487,0,0,0-1.214.952,4.018,4.018,0,0,0-.722,1.4,5.985,5.985,0,0,0-.238,1.707,5.8,5.8,0,0,0,.246,1.707,4.218,4.218,0,0,0,.73,1.411,3.529,3.529,0,0,0,1.214.968,3.827,3.827,0,0,0,1.715.361,4.135,4.135,0,0,0,1.625-.312A2.053,2.053,0,0,0,63.224-7.9h.033v1.149Zm6.761-11.716V-6.748h1.395V-7.88h.033a2.247,2.247,0,0,0,.566.632,2.982,2.982,0,0,0,.714.4,3.874,3.874,0,0,0,.763.213,4.193,4.193,0,0,0,.7.066,3.94,3.94,0,0,0,1.7-.345,3.4,3.4,0,0,0,1.214-.944,4.018,4.018,0,0,0,.722-1.4,5.985,5.985,0,0,0,.238-1.707,5.8,5.8,0,0,0-.246-1.707,4.312,4.312,0,0,0-.73-1.419,3.488,3.488,0,0,0-1.214-.976,3.827,3.827,0,0,0-1.715-.361,4.043,4.043,0,0,0-1.625.32,2.088,2.088,0,0,0-1.083,1.026h-.033v-4.381Zm6.564,7.4a5.581,5.581,0,0,1-.131,1.214,3.212,3.212,0,0,1-.427,1.05,2.243,2.243,0,0,1-.779.738,2.385,2.385,0,0,1-1.206.279A2.589,2.589,0,0,1,74.2-8.052a2.389,2.389,0,0,1-.829-.714,2.985,2.985,0,0,1-.468-1.026A4.889,4.889,0,0,1,72.758-11a4.919,4.919,0,0,1,.139-1.165,3.053,3.053,0,0,1,.451-1.026,2.4,2.4,0,0,1,.8-.73,2.4,2.4,0,0,1,1.2-.279,2.491,2.491,0,0,1,1.173.263,2.332,2.332,0,0,1,.82.706,3.122,3.122,0,0,1,.476,1.009A4.338,4.338,0,0,1,77.976-11.063Zm6.449,5.448a8.871,8.871,0,0,1-.484,1.05,2.871,2.871,0,0,1-.525.7,1.782,1.782,0,0,1-.64.394,2.462,2.462,0,0,1-.812.123,3.721,3.721,0,0,1-.492-.033A2.324,2.324,0,0,1,81-3.5v-1.28a2.342,2.342,0,0,0,.418.139,1.765,1.765,0,0,0,.4.057,1.2,1.2,0,0,0,.714-.205,1.255,1.255,0,0,0,.435-.583L83.539-6.8l-3.364-8.434h1.575L84.228-8.29h.033l2.379-6.941h1.477Z\" transform=\"translate(0.722 18.464)\" fill=\"#fff\"/></g></g></g></svg>";