@snap/camera-kit 0.12.0 → 0.13.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 (219) hide show
  1. package/README.md +25 -3
  2. package/docs/html/assets/search.js +1 -1
  3. package/docs/html/classes/CameraKit.html +12 -7
  4. package/docs/html/classes/CameraKitSession.html +27 -7
  5. package/docs/html/classes/CameraKitSource.html +26 -17
  6. package/docs/html/classes/LensPerformanceMeasurement.html +12 -7
  7. package/docs/html/classes/LensPerformanceMetrics.html +12 -7
  8. package/docs/html/classes/LensRepository.html +12 -7
  9. package/docs/html/classes/LensSources.html +12 -7
  10. package/docs/html/classes/Transform2D.html +12 -7
  11. package/docs/html/classes/TypedCustomEvent.html +12 -7
  12. package/docs/html/classes/TypedEventTarget.html +12 -7
  13. package/docs/html/functions/Injectable.html +12 -7
  14. package/docs/html/functions/bootstrapCameraKit.html +12 -7
  15. package/docs/html/functions/createExtension.html +12 -7
  16. package/docs/html/functions/createImageSource.html +12 -7
  17. package/docs/html/functions/createMediaStreamSource.html +12 -7
  18. package/docs/html/functions/createUserMediaSource.html +12 -7
  19. package/docs/html/functions/createVideoSource.html +12 -7
  20. package/docs/html/functions/estimateLensPerformance.html +12 -7
  21. package/docs/html/functions/getRequiredBootstrapURLs.html +12 -7
  22. package/docs/html/functions/lensSourcesFactory.html +12 -7
  23. package/docs/html/functions/{uriHandlersFactory.html → remoteApiServicesFactory.html} +16 -14
  24. package/docs/html/index.html +40 -12
  25. package/docs/html/interfaces/CameraKitBootstrapConfiguration.html +12 -7
  26. package/docs/html/interfaces/CameraKitSourceSubscriber.html +12 -7
  27. package/docs/html/interfaces/ComputedFrameMetrics.html +12 -7
  28. package/docs/html/interfaces/CreateSessionOptions.html +12 -7
  29. package/docs/html/interfaces/EstimatedLensPerformance.html +12 -7
  30. package/docs/html/interfaces/Lens.html +12 -7
  31. package/docs/html/interfaces/LensSource.html +16 -11
  32. package/docs/html/interfaces/MediaStreamSourceOptions.html +12 -7
  33. package/docs/html/interfaces/Preview.html +12 -7
  34. package/docs/html/interfaces/RemoteApiRequest.html +164 -0
  35. package/docs/html/interfaces/RemoteApiResponse.html +156 -0
  36. package/docs/html/interfaces/{UriHandler.html → RemoteApiService.html} +34 -68
  37. package/docs/html/interfaces/Snapcode.html +12 -7
  38. package/docs/html/interfaces/UriCancelRequest.html +12 -7
  39. package/docs/html/interfaces/UriRequest.html +13 -8
  40. package/docs/html/interfaces/UriResponse.html +12 -7
  41. package/docs/html/interfaces/VideoSourceOptions.html +12 -7
  42. package/docs/html/modules.html +22 -12
  43. package/docs/html/types/AssetLoader.html +12 -7
  44. package/docs/html/types/AssetTiming.html +12 -7
  45. package/docs/html/types/BenchmarkError.html +12 -7
  46. package/docs/html/types/BootstrapError.html +12 -7
  47. package/docs/html/types/CacheKeyNotFoundError.html +12 -7
  48. package/docs/html/types/CameraKitDeviceInfo.html +19 -9
  49. package/docs/html/types/CameraKitDeviceOptions.html +119 -0
  50. package/docs/html/types/CameraKitSessionEventListener.html +12 -7
  51. package/docs/html/types/CameraKitSessionEvents.html +12 -7
  52. package/docs/html/types/CameraKitSourceError.html +12 -7
  53. package/docs/html/types/CameraKitSourceInfo.html +12 -7
  54. package/docs/html/types/CameraKitSourceOptions.html +13 -8
  55. package/docs/html/types/ConfigurationError.html +12 -7
  56. package/docs/html/types/Keyboard.html +12 -7
  57. package/docs/html/types/KeyboardEvents.html +12 -7
  58. package/docs/html/types/LegalError.html +12 -7
  59. package/docs/html/types/LensAssetError.html +12 -7
  60. package/docs/html/types/LensContentValidationError.html +12 -7
  61. package/docs/html/types/LensError.html +12 -7
  62. package/docs/html/types/LensExecutionError.html +12 -7
  63. package/docs/html/types/LensImagePickerError.html +12 -7
  64. package/docs/html/types/LensLaunchParams.html +12 -7
  65. package/docs/html/types/LensMetricsEvents.html +12 -7
  66. package/docs/html/types/LensPerformanceCluster.html +12 -7
  67. package/docs/html/types/LensView.html +12 -7
  68. package/docs/html/types/LensWait.html +12 -7
  69. package/docs/html/types/PersistentStoreError.html +12 -7
  70. package/docs/html/types/PlatformNotSupportedError.html +12 -7
  71. package/docs/html/types/PublicContainer.html +12 -7
  72. package/docs/html/types/RemoteApiRequestHandler.html +141 -0
  73. package/docs/html/types/{UriHandlers.html → RemoteApiServices.html} +15 -13
  74. package/docs/html/types/RemoteApiStatus.html +114 -0
  75. package/docs/html/types/RenderTarget.html +12 -7
  76. package/docs/html/types/Uri.html +12 -7
  77. package/docs/html/types/WebGLError.html +12 -7
  78. package/docs/html/variables/extensionRequestContext.html +12 -7
  79. package/docs/md/README.md +25 -3
  80. package/docs/md/classes/CameraKit.md +1 -1
  81. package/docs/md/classes/CameraKitSession.md +19 -1
  82. package/docs/md/classes/CameraKitSource.md +19 -7
  83. package/docs/md/classes/LensPerformanceMeasurement.md +1 -1
  84. package/docs/md/classes/LensPerformanceMetrics.md +1 -1
  85. package/docs/md/classes/LensRepository.md +1 -1
  86. package/docs/md/classes/LensSources.md +1 -1
  87. package/docs/md/classes/Transform2D.md +1 -1
  88. package/docs/md/classes/TypedCustomEvent.md +1 -1
  89. package/docs/md/classes/TypedEventTarget.md +1 -1
  90. package/docs/md/interfaces/CameraKitBootstrapConfiguration.md +1 -1
  91. package/docs/md/interfaces/CameraKitSourceSubscriber.md +1 -1
  92. package/docs/md/interfaces/ComputedFrameMetrics.md +1 -1
  93. package/docs/md/interfaces/CreateSessionOptions.md +1 -1
  94. package/docs/md/interfaces/EstimatedLensPerformance.md +1 -1
  95. package/docs/md/interfaces/Lens.md +1 -1
  96. package/docs/md/interfaces/LensSource.md +3 -3
  97. package/docs/md/interfaces/MediaStreamSourceOptions.md +1 -1
  98. package/docs/md/interfaces/Preview.md +1 -1
  99. package/docs/md/interfaces/RemoteApiRequest.md +46 -0
  100. package/docs/md/interfaces/RemoteApiResponse.md +37 -0
  101. package/docs/md/interfaces/RemoteApiService.md +45 -0
  102. package/docs/md/interfaces/Snapcode.md +1 -1
  103. package/docs/md/interfaces/UriCancelRequest.md +1 -1
  104. package/docs/md/interfaces/UriRequest.md +2 -2
  105. package/docs/md/interfaces/UriResponse.md +1 -1
  106. package/docs/md/interfaces/VideoSourceOptions.md +1 -1
  107. package/docs/md/modules.md +66 -15
  108. package/lib/CameraKit.js +3 -1
  109. package/lib/CameraKit.js.map +1 -1
  110. package/lib/__tests__/data.d.ts +1 -1
  111. package/lib/__tests__/data.js +1 -0
  112. package/lib/__tests__/data.js.map +1 -1
  113. package/lib/bootstrapCameraKit.js +12 -10
  114. package/lib/bootstrapCameraKit.js.map +1 -1
  115. package/lib/common/any.d.ts +17 -0
  116. package/lib/common/any.js +36 -0
  117. package/lib/common/any.js.map +1 -0
  118. package/lib/common/cameraKitUserAgent.d.ts +5 -0
  119. package/lib/common/cameraKitUserAgent.js +2 -1
  120. package/lib/common/cameraKitUserAgent.js.map +1 -1
  121. package/lib/common/date.d.ts +3 -0
  122. package/lib/common/date.js +13 -0
  123. package/lib/common/date.js.map +1 -0
  124. package/lib/common/errorHelpers.js +1 -1
  125. package/lib/common/errorHelpers.js.map +1 -1
  126. package/lib/common/time.d.ts +1 -0
  127. package/lib/common/time.js +1 -0
  128. package/lib/common/time.js.map +1 -1
  129. package/lib/common/types.d.ts +8 -0
  130. package/lib/common/types.js.map +1 -1
  131. package/lib/dependency-injection/RootServices.d.ts +2 -0
  132. package/lib/dependency-injection/RootServices.js.map +1 -1
  133. package/lib/environment.json +1 -1
  134. package/lib/extensions/LensSources.d.ts +2 -2
  135. package/lib/extensions/LensSources.js +7 -3
  136. package/lib/extensions/LensSources.js.map +1 -1
  137. package/lib/extensions/RemoteApiServices.d.ts +101 -0
  138. package/lib/extensions/RemoteApiServices.js +198 -0
  139. package/lib/extensions/RemoteApiServices.js.map +1 -0
  140. package/lib/extensions/UriHandlers.d.ts +10 -17
  141. package/lib/extensions/UriHandlers.js +5 -60
  142. package/lib/extensions/UriHandlers.js.map +1 -1
  143. package/lib/extensions/uriHandlersRegister.d.ts +21 -0
  144. package/lib/extensions/uriHandlersRegister.js +72 -0
  145. package/lib/extensions/uriHandlersRegister.js.map +1 -0
  146. package/lib/generated-proto/pb_schema/camera_kit/v3/features/remote_api_info.d.ts +31 -0
  147. package/lib/generated-proto/pb_schema/camera_kit/v3/features/remote_api_info.js +43 -0
  148. package/lib/generated-proto/pb_schema/camera_kit/v3/features/remote_api_info.js.map +1 -0
  149. package/lib/generated-proto/pb_schema/cdp/cof/namespace.d.ts +1 -0
  150. package/lib/generated-proto/pb_schema/cdp/cof/namespace.js +1 -0
  151. package/lib/generated-proto/pb_schema/cdp/cof/namespace.js.map +1 -1
  152. package/lib/generated-proto/pb_schema/lenses/remote_api/remote_api_service.d.ts +569 -0
  153. package/lib/generated-proto/pb_schema/lenses/remote_api/remote_api_service.js +1175 -0
  154. package/lib/generated-proto/pb_schema/lenses/remote_api/remote_api_service.js.map +1 -0
  155. package/lib/handlers/defaultFetchHandler.js +17 -4
  156. package/lib/handlers/defaultFetchHandler.js.map +1 -1
  157. package/lib/index.d.ts +1 -0
  158. package/lib/index.js +1 -0
  159. package/lib/index.js.map +1 -1
  160. package/lib/legal/legalState.js +1 -1
  161. package/lib/legal/legalState.js.map +1 -1
  162. package/lib/lens/lensHttpUtil.js +26 -4
  163. package/lib/lens/lensHttpUtil.js.map +1 -1
  164. package/lib/lens-core-module/generated-types.d.ts +24 -4
  165. package/lib/lens-core-module/generated-types.js.map +1 -1
  166. package/lib/lensCoreWasmVersions.json +3 -3
  167. package/lib/logger/registerLogEntriesSubscriber.js +13 -1
  168. package/lib/logger/registerLogEntriesSubscriber.js.map +1 -1
  169. package/lib/media-sources/CameraKitSource.d.ts +13 -3
  170. package/lib/media-sources/CameraKitSource.js +2 -8
  171. package/lib/media-sources/CameraKitSource.js.map +1 -1
  172. package/lib/media-sources/FunctionSource.d.ts +1 -1
  173. package/lib/media-sources/FunctionSource.js +1 -1
  174. package/lib/media-sources/FunctionSource.js.map +1 -1
  175. package/lib/media-sources/ImageSource.d.ts +1 -1
  176. package/lib/media-sources/ImageSource.js +1 -1
  177. package/lib/media-sources/ImageSource.js.map +1 -1
  178. package/lib/media-sources/MediaStreamSource.d.ts +1 -1
  179. package/lib/media-sources/MediaStreamSource.js +2 -1
  180. package/lib/media-sources/MediaStreamSource.js.map +1 -1
  181. package/lib/media-sources/VideoSource.d.ts +1 -1
  182. package/lib/media-sources/VideoSource.js +1 -1
  183. package/lib/media-sources/VideoSource.js.map +1 -1
  184. package/lib/metrics/businessEventsReporter.d.ts +3 -2
  185. package/lib/metrics/businessEventsReporter.js +125 -65
  186. package/lib/metrics/businessEventsReporter.js.map +1 -1
  187. package/lib/metrics/operational/operationalMetricsReporter.js +23 -5
  188. package/lib/metrics/operational/operationalMetricsReporter.js.map +1 -1
  189. package/lib/metrics/reporters/reportHttpMetrics.d.ts +0 -7
  190. package/lib/metrics/reporters/reportHttpMetrics.js +3 -2
  191. package/lib/metrics/reporters/reportHttpMetrics.js.map +1 -1
  192. package/lib/metrics/reporters/reportLensView.d.ts +1 -1
  193. package/lib/metrics/reporters/reportLensView.js +41 -13
  194. package/lib/metrics/reporters/reportLensView.js.map +1 -1
  195. package/lib/metrics/reporters/reportUserSession.js +15 -16
  196. package/lib/metrics/reporters/reportUserSession.js.map +1 -1
  197. package/lib/metrics/reporters/reporters.d.ts +1 -1
  198. package/lib/persistence/ExpiringPersistence.d.ts +2 -1
  199. package/lib/persistence/ExpiringPersistence.js +15 -1
  200. package/lib/persistence/ExpiringPersistence.js.map +1 -1
  201. package/lib/persistence/IndexedDBPersistence.d.ts +1 -1
  202. package/lib/persistence/IndexedDBPersistence.js +11 -1
  203. package/lib/persistence/IndexedDBPersistence.js.map +1 -1
  204. package/lib/persistence/Persistence.d.ts +1 -1
  205. package/lib/persistence/Persistence.js.map +1 -1
  206. package/lib/remote-configuration/preloadConfiguration.d.ts +7 -0
  207. package/lib/remote-configuration/preloadConfiguration.js +15 -0
  208. package/lib/remote-configuration/preloadConfiguration.js.map +1 -0
  209. package/lib/remote-configuration/remoteConfiguration.d.ts +5 -1
  210. package/lib/remote-configuration/remoteConfiguration.js +10 -2
  211. package/lib/remote-configuration/remoteConfiguration.js.map +1 -1
  212. package/lib/session/CameraKitSession.d.ts +7 -2
  213. package/lib/session/CameraKitSession.js +1 -0
  214. package/lib/session/CameraKitSession.js.map +1 -1
  215. package/lib/session/sessionState.d.ts +2 -2
  216. package/lib/session/sessionState.js +3 -3
  217. package/lib/session/sessionState.js.map +1 -1
  218. package/package.json +2 -1
  219. package/docs/md/interfaces/UriHandler.md +0 -63
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote_api_service.js","sourceRoot":"","sources":["../../../../../src/generated-proto/pb_schema/lenses/remote_api/remote_api_service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,MAAM,oBAAoB,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AACjD,MAAM,CAAN,IAAY,iBAQX;AARD,WAAY,iBAAiB;IACzB,4DAAuC,CAAA;IACvC,wDAAmC,CAAA;IACnC,0DAAqC,CAAA;IACrC,wDAAmC,CAAA;IACnC,8DAAyC,CAAA;IACzC,4DAAuC,CAAA;IACvC,kDAA6B,CAAA;AACjC,CAAC,EARW,iBAAiB,KAAjB,iBAAiB,QAQ5B;AACD,MAAM,UAAU,yBAAyB,CAAC,MAAW;IACjD,QAAQ,MAAM,EAAE;QACZ,KAAK,CAAC,CAAC;QACP,KAAK,mBAAmB;YACpB,OAAO,iBAAiB,CAAC,iBAAiB,CAAC;QAC/C,KAAK,CAAC,CAAC;QACP,KAAK,iBAAiB;YAClB,OAAO,iBAAiB,CAAC,eAAe,CAAC;QAC7C,KAAK,CAAC,CAAC;QACP,KAAK,kBAAkB;YACnB,OAAO,iBAAiB,CAAC,gBAAgB,CAAC;QAC9C,KAAK,CAAC,CAAC;QACP,KAAK,iBAAiB;YAClB,OAAO,iBAAiB,CAAC,eAAe,CAAC;QAC7C,KAAK,CAAC,CAAC;QACP,KAAK,oBAAoB;YACrB,OAAO,iBAAiB,CAAC,kBAAkB,CAAC;QAChD,KAAK,CAAC,CAAC;QACP,KAAK,mBAAmB;YACpB,OAAO,iBAAiB,CAAC,iBAAiB,CAAC;QAC/C,KAAK,CAAC,CAAC,CAAC;QACR,KAAK,cAAc,CAAC;QACpB;YACI,OAAO,iBAAiB,CAAC,YAAY,CAAC;KAC7C;AACL,CAAC;AACD,MAAM,UAAU,yBAAyB,CAAC,MAAyB;IAC/D,QAAQ,MAAM,EAAE;QACZ,KAAK,iBAAiB,CAAC,iBAAiB;YACpC,OAAO,CAAC,CAAC;QACb,KAAK,iBAAiB,CAAC,eAAe;YAClC,OAAO,CAAC,CAAC;QACb,KAAK,iBAAiB,CAAC,gBAAgB;YACnC,OAAO,CAAC,CAAC;QACb,KAAK,iBAAiB,CAAC,eAAe;YAClC,OAAO,CAAC,CAAC;QACb,KAAK,iBAAiB,CAAC,kBAAkB;YACrC,OAAO,CAAC,CAAC;QACb,KAAK,iBAAiB,CAAC,iBAAiB;YACpC,OAAO,CAAC,CAAC;QACb;YACI,OAAO,CAAC,CAAC;KAChB;AACL,CAAC;AACD,MAAM,CAAN,IAAY,YAaX;AAbD,WAAY,YAAY;IACpB,2DAA2C,CAAA;IAC3C,mCAAmB,CAAA;IACnB,yCAAyB,CAAA;IACzB,2CAA2B,CAAA;IAC3B,+CAA+B,CAAA;IAC/B,uCAAuB,CAAA;IACvB,mCAAmB,CAAA;IACnB,uDAAuC,CAAA;IACvC,6CAA6B,CAAA;IAC7B,uCAAuB,CAAA;IACvB,2CAA2B,CAAA;IAC3B,6CAA6B,CAAA;AACjC,CAAC,EAbW,YAAY,KAAZ,YAAY,QAavB;AACD,MAAM,UAAU,oBAAoB,CAAC,MAAW;IAC5C,QAAQ,MAAM,EAAE;QACZ,KAAK,CAAC,CAAC;QACP,KAAK,qBAAqB;YACtB,OAAO,YAAY,CAAC,mBAAmB,CAAC;QAC5C,KAAK,CAAC,CAAC;QACP,KAAK,SAAS;YACV,OAAO,YAAY,CAAC,OAAO,CAAC;QAChC,KAAK,CAAC,CAAC;QACP,KAAK,YAAY;YACb,OAAO,YAAY,CAAC,UAAU,CAAC;QACnC,KAAK,CAAC,CAAC;QACP,KAAK,aAAa;YACd,OAAO,YAAY,CAAC,WAAW,CAAC;QACpC,KAAK,CAAC,CAAC;QACP,KAAK,eAAe;YAChB,OAAO,YAAY,CAAC,aAAa,CAAC;QACtC,KAAK,CAAC,CAAC;QACP,KAAK,WAAW;YACZ,OAAO,YAAY,CAAC,SAAS,CAAC;QAClC,KAAK,CAAC,CAAC;QACP,KAAK,SAAS;YACV,OAAO,YAAY,CAAC,OAAO,CAAC;QAChC,KAAK,CAAC,CAAC;QACP,KAAK,mBAAmB;YACpB,OAAO,YAAY,CAAC,iBAAiB,CAAC;QAC1C,KAAK,CAAC,CAAC;QACP,KAAK,cAAc;YACf,OAAO,YAAY,CAAC,YAAY,CAAC;QACrC,KAAK,CAAC,CAAC;QACP,KAAK,WAAW;YACZ,OAAO,YAAY,CAAC,SAAS,CAAC;QAClC,KAAK,EAAE,CAAC;QACR,KAAK,aAAa;YACd,OAAO,YAAY,CAAC,WAAW,CAAC;QACpC,KAAK,CAAC,CAAC,CAAC;QACR,KAAK,cAAc,CAAC;QACpB;YACI,OAAO,YAAY,CAAC,YAAY,CAAC;KACxC;AACL,CAAC;AACD,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACrD,QAAQ,MAAM,EAAE;QACZ,KAAK,YAAY,CAAC,mBAAmB;YACjC,OAAO,CAAC,CAAC;QACb,KAAK,YAAY,CAAC,OAAO;YACrB,OAAO,CAAC,CAAC;QACb,KAAK,YAAY,CAAC,UAAU;YACxB,OAAO,CAAC,CAAC;QACb,KAAK,YAAY,CAAC,WAAW;YACzB,OAAO,CAAC,CAAC;QACb,KAAK,YAAY,CAAC,aAAa;YAC3B,OAAO,CAAC,CAAC;QACb,KAAK,YAAY,CAAC,SAAS;YACvB,OAAO,CAAC,CAAC;QACb,KAAK,YAAY,CAAC,OAAO;YACrB,OAAO,CAAC,CAAC;QACb,KAAK,YAAY,CAAC,iBAAiB;YAC/B,OAAO,CAAC,CAAC;QACb,KAAK,YAAY,CAAC,YAAY;YAC1B,OAAO,CAAC,CAAC;QACb,KAAK,YAAY,CAAC,SAAS;YACvB,OAAO,CAAC,CAAC;QACb,KAAK,YAAY,CAAC,WAAW;YACzB,OAAO,EAAE,CAAC;QACd;YACI,OAAO,CAAC,CAAC;KAChB;AACL,CAAC;AAmCD,MAAM,CAAN,IAAY,+BAOX;AAPD,WAAY,+BAA+B;IACvC,wEAAqC,CAAA;IACrC,4EAAyC,CAAA;IACzC,gGAA6D,CAAA;IAC7D,wDAAqB,CAAA;IACrB,4EAAyC,CAAA;IACzC,gEAA6B,CAAA;AACjC,CAAC,EAPW,+BAA+B,KAA/B,+BAA+B,QAO1C;AACD,MAAM,UAAU,uCAAuC,CAAC,MAAW;IAC/D,QAAQ,MAAM,EAAE;QACZ,KAAK,CAAC,CAAC;QACP,KAAK,kBAAkB;YACnB,OAAO,+BAA+B,CAAC,gBAAgB,CAAC;QAC5D,KAAK,CAAC,CAAC;QACP,KAAK,oBAAoB;YACrB,OAAO,+BAA+B,CAAC,kBAAkB,CAAC;QAC9D,KAAK,CAAC,CAAC;QACP,KAAK,8BAA8B;YAC/B,OAAO,+BAA+B,CAAC,4BAA4B,CAAC;QACxE,KAAK,CAAC,CAAC;QACP,KAAK,UAAU;YACX,OAAO,+BAA+B,CAAC,QAAQ,CAAC;QACpD,KAAK,CAAC,CAAC;QACP,KAAK,oBAAoB;YACrB,OAAO,+BAA+B,CAAC,kBAAkB,CAAC;QAC9D,KAAK,CAAC,CAAC,CAAC;QACR,KAAK,cAAc,CAAC;QACpB;YACI,OAAO,+BAA+B,CAAC,YAAY,CAAC;KAC3D;AACL,CAAC;AACD,MAAM,UAAU,uCAAuC,CAAC,MAAuC;IAC3F,QAAQ,MAAM,EAAE;QACZ,KAAK,+BAA+B,CAAC,gBAAgB;YACjD,OAAO,CAAC,CAAC;QACb,KAAK,+BAA+B,CAAC,kBAAkB;YACnD,OAAO,CAAC,CAAC;QACb,KAAK,+BAA+B,CAAC,4BAA4B;YAC7D,OAAO,CAAC,CAAC;QACb,KAAK,+BAA+B,CAAC,QAAQ;YACzC,OAAO,CAAC,CAAC;QACb,KAAK,+BAA+B,CAAC,kBAAkB;YACnD,OAAO,CAAC,CAAC;QACb;YACI,OAAO,CAAC,CAAC;KAChB;AACL,CAAC;AAKD,MAAM,CAAN,IAAY,yCASX;AATD,WAAY,yCAAyC;IACjD,kFAAqC,CAAA;IACrC,gFAAmC,CAAA;IACnC,8EAAiC,CAAA;IACjC,4EAA+B,CAAA;IAC/B,wFAA2C,CAAA;IAC3C,8FAAiD,CAAA;IACjD,4EAA+B,CAAA;IAC/B,0EAA6B,CAAA;AACjC,CAAC,EATW,yCAAyC,KAAzC,yCAAyC,QASpD;AACD,MAAM,UAAU,iDAAiD,CAAC,MAAW;IACzE,QAAQ,MAAM,EAAE;QACZ,KAAK,CAAC,CAAC;QACP,KAAK,kBAAkB;YACnB,OAAO,yCAAyC,CAAC,gBAAgB,CAAC;QACtE,KAAK,CAAC,CAAC;QACP,KAAK,iBAAiB;YAClB,OAAO,yCAAyC,CAAC,eAAe,CAAC;QACrE,KAAK,CAAC,CAAC;QACP,KAAK,gBAAgB;YACjB,OAAO,yCAAyC,CAAC,cAAc,CAAC;QACpE,KAAK,CAAC,CAAC;QACP,KAAK,eAAe;YAChB,OAAO,yCAAyC,CAAC,aAAa,CAAC;QACnE,KAAK,CAAC,CAAC;QACP,KAAK,qBAAqB;YACtB,OAAO,yCAAyC,CAAC,mBAAmB,CAAC;QACzE,KAAK,CAAC,CAAC;QACP,KAAK,wBAAwB;YACzB,OAAO,yCAAyC,CAAC,sBAAsB,CAAC;QAC5E,KAAK,CAAC,CAAC;QACP,KAAK,eAAe;YAChB,OAAO,yCAAyC,CAAC,aAAa,CAAC;QACnE,KAAK,CAAC,CAAC,CAAC;QACR,KAAK,cAAc,CAAC;QACpB;YACI,OAAO,yCAAyC,CAAC,YAAY,CAAC;KACrE;AACL,CAAC;AACD,MAAM,UAAU,iDAAiD,CAAC,MAAiD;IAC/G,QAAQ,MAAM,EAAE;QACZ,KAAK,yCAAyC,CAAC,gBAAgB;YAC3D,OAAO,CAAC,CAAC;QACb,KAAK,yCAAyC,CAAC,eAAe;YAC1D,OAAO,CAAC,CAAC;QACb,KAAK,yCAAyC,CAAC,cAAc;YACzD,OAAO,CAAC,CAAC;QACb,KAAK,yCAAyC,CAAC,aAAa;YACxD,OAAO,CAAC,CAAC;QACb,KAAK,yCAAyC,CAAC,mBAAmB;YAC9D,OAAO,CAAC,CAAC;QACb,KAAK,yCAAyC,CAAC,sBAAsB;YACjE,OAAO,CAAC,CAAC;QACb,KAAK,yCAAyC,CAAC,aAAa;YACxD,OAAO,CAAC,CAAC;QACb;YACI,OAAO,CAAC,CAAC;KAChB;AACL,CAAC;AAoED,SAAS,gCAAgC;IACrC,OAAO;QACH,GAAG,EAAE,EAAE;QACP,MAAM,EAAE,iBAAiB,CAAC,iBAAiB;QAC3C,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,IAAI,UAAU,EAAE;QACtB,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,KAAK;KACrB,CAAC;AACN,CAAC;AACD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,MAAM,CAAC,OAA+B,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QAC5E,IAAI,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE;YACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACzC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,iBAAiB,CAAC,iBAAiB,EAAE;YACxD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;SACtE;QACD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACrD,mCAAmC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAU,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9G,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACzC;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAC/C;QACD,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SAC/C;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,gCAAgC,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC9B,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC3D,MAAM;gBACV,KAAK,CAAC;oBACF,MAAM,MAAM,GAAG,mCAAmC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBACnF,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;wBAC5B,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;qBAC9C;oBACD,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBACpC,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;oBACpC,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAA0D,MAAS;;QAC1E,MAAM,OAAO,GAAG,gCAAgC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,GAAG,MAAA,MAAM,CAAC,GAAG,mCAAI,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,GAAG,MAAA,MAAM,CAAC,MAAM,mCAAI,iBAAiB,CAAC,iBAAiB,CAAC;QACtE,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAA,MAAM,CAAC,OAAO,mCAAI,EAAE,CAAC,CAAC,MAAM,CAE1D,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACrB,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;aAC5B;YACD,OAAO,GAAG,CAAC;QACf,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,OAAO,CAAC,IAAI,GAAG,MAAA,MAAM,CAAC,IAAI,mCAAI,IAAI,UAAU,EAAE,CAAC;QAC/C,OAAO,CAAC,SAAS,GAAG,MAAA,MAAM,CAAC,SAAS,mCAAI,EAAE,CAAC;QAC3C,OAAO,CAAC,WAAW,GAAG,MAAA,MAAM,CAAC,WAAW,mCAAI,KAAK,CAAC;QAClD,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,6CAA6C;IAClD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAClC,CAAC;AACD,MAAM,CAAC,MAAM,mCAAmC,GAAG;IAC/C,MAAM,CAAC,OAA4C,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QACzF,IAAI,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE;YACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACzC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;YACtB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC3C;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,6CAA6C,EAAE,CAAC;QAChE,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC9B,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChC,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAAuE,MAAS;;QACvF,MAAM,OAAO,GAAG,6CAA6C,EAAE,CAAC;QAChE,OAAO,CAAC,GAAG,GAAG,MAAA,MAAM,CAAC,GAAG,mCAAI,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,GAAG,MAAA,MAAM,CAAC,KAAK,mCAAI,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,iCAAiC;IACtC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,UAAU,EAAE,EAAE,CAAC;AAC5D,CAAC;AACD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACnC,MAAM,CAAC,OAAgC,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QAC7E,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE;YACpB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACxC;QACD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACrD,oCAAoC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAU,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/G,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACzC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,iCAAiC,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM;gBACV,KAAK,CAAC;oBACF,MAAM,MAAM,GAAG,oCAAoC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBACpF,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;wBAC5B,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;qBAC9C;oBACD,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAA2D,MAAS;;QAC3E,MAAM,OAAO,GAAG,iCAAiC,EAAE,CAAC;QACpD,OAAO,CAAC,IAAI,GAAG,MAAA,MAAM,CAAC,IAAI,mCAAI,CAAC,CAAC;QAChC,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAA,MAAM,CAAC,OAAO,mCAAI,EAAE,CAAC,CAAC,MAAM,CAE1D,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACrB,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;aAC5B;YACD,OAAO,GAAG,CAAC;QACf,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,OAAO,CAAC,IAAI,GAAG,MAAA,MAAM,CAAC,IAAI,mCAAI,IAAI,UAAU,EAAE,CAAC;QAC/C,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,8CAA8C;IACnD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAClC,CAAC;AACD,MAAM,CAAC,MAAM,oCAAoC,GAAG;IAChD,MAAM,CAAC,OAA6C,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QAC1F,IAAI,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE;YACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACzC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;YACtB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC3C;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,8CAA8C,EAAE,CAAC;QACjE,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC9B,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChC,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAAwE,MAAS;;QACxF,MAAM,OAAO,GAAG,8CAA8C,EAAE,CAAC;QACjE,OAAO,CAAC,GAAG,GAAG,MAAA,MAAM,CAAC,GAAG,mCAAI,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,GAAG,MAAA,MAAM,CAAC,KAAK,mCAAI,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,8BAA8B;IACnC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC7B,CAAC;AACD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC,MAAM,CAAC,OAA6B,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QAC1E,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAC/C;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,8BAA8B,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBACpC,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAAwD,MAAS;;QACxE,MAAM,OAAO,GAAG,8BAA8B,EAAE,CAAC;QACjD,OAAO,CAAC,SAAS,GAAG,MAAA,MAAM,CAAC,SAAS,mCAAI,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,+BAA+B;IACpC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,+BAA+B,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC1H,CAAC;AACD,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACjC,MAAM,CAAC,OAA8B,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QAC3E,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE,EAAE;YACzB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC9C;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,+BAA+B,CAAC,gBAAgB,EAAE;YACxE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,uCAAuC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;SACvF;QACD,IAAI,OAAO,CAAC,gBAAgB,KAAK,EAAE,EAAE;YACjC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;SACtD;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;YACtB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC3C;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,+BAA+B,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBACnC,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,SAAS,GAAG,uCAAuC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC5E,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC3C,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChC,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAAyD,MAAS;;QACzE,MAAM,OAAO,GAAG,+BAA+B,EAAE,CAAC;QAClD,OAAO,CAAC,QAAQ,GAAG,MAAA,MAAM,CAAC,QAAQ,mCAAI,EAAE,CAAC;QACzC,OAAO,CAAC,SAAS,GAAG,MAAA,MAAM,CAAC,SAAS,mCAAI,+BAA+B,CAAC,gBAAgB,CAAC;QACzF,OAAO,CAAC,gBAAgB,GAAG,MAAA,MAAM,CAAC,gBAAgB,mCAAI,EAAE,CAAC;QACzD,OAAO,CAAC,KAAK,GAAG,MAAA,MAAM,CAAC,KAAK,mCAAI,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,4BAA4B;IACjC,OAAO,EAAE,KAAK,EAAE,yCAAyC,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;AACvG,CAAC;AACD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAC9B,MAAM,CAAC,OAA2B,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QACxE,IAAI,OAAO,CAAC,KAAK,KAAK,yCAAyC,CAAC,gBAAgB,EAAE;YAC9E,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,iDAAiD,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;SAC5F;QACD,IAAI,OAAO,CAAC,gBAAgB,KAAK,EAAE,EAAE;YACjC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;SACtD;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,4BAA4B,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,KAAK,GAAG,iDAAiD,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBAClF,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC3C,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAAsD,MAAS;;QACtE,MAAM,OAAO,GAAG,4BAA4B,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,GAAG,MAAA,MAAM,CAAC,KAAK,mCAAI,yCAAyC,CAAC,gBAAgB,CAAC;QAC3F,OAAO,CAAC,gBAAgB,GAAG,MAAA,MAAM,CAAC,gBAAgB,mCAAI,EAAE,CAAC;QACzD,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,sBAAsB;IAC3B,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAChG,CAAC;AACD,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,MAAM,CAAC,OAAqB,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QAClE,IAAI,OAAO,CAAC,WAAW,KAAK,EAAE,EAAE;YAC5B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACjD;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAC/C;QACD,IAAI,OAAO,CAAC,gBAAgB,KAAK,CAAC,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;SACrD;QACD,IAAI,OAAO,CAAC,YAAY,KAAK,EAAE,EAAE;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;SAClD;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;YACtB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC3C;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBACtC,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBACpC,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAU,CAAC,CAAC;oBAChE,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBACvC,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChC,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAAgD,MAAS;;QAChE,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;QACzC,OAAO,CAAC,WAAW,GAAG,MAAA,MAAM,CAAC,WAAW,mCAAI,EAAE,CAAC;QAC/C,OAAO,CAAC,SAAS,GAAG,MAAA,MAAM,CAAC,SAAS,mCAAI,EAAE,CAAC;QAC3C,OAAO,CAAC,gBAAgB,GAAG,MAAA,MAAM,CAAC,gBAAgB,mCAAI,CAAC,CAAC;QACxD,OAAO,CAAC,YAAY,GAAG,MAAA,MAAM,CAAC,YAAY,mCAAI,EAAE,CAAC;QACjD,OAAO,CAAC,KAAK,GAAG,MAAA,MAAM,CAAC,KAAK,mCAAI,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,qCAAqC;IAC1C,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AACtE,CAAC;AACD,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACvC,MAAM,CAAC,OAAoC,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QACjF,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAC/C;QACD,IAAI,OAAO,CAAC,iBAAiB,KAAK,EAAE,EAAE;YAClC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;SACvD;QACD,IAAI,OAAO,CAAC,YAAY,KAAK,EAAE,EAAE;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;SAClD;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,qCAAqC,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBACpC,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC5C,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBACvC,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAA+D,MAAS;;QAC/E,MAAM,OAAO,GAAG,qCAAqC,EAAE,CAAC;QACxD,OAAO,CAAC,SAAS,GAAG,MAAA,MAAM,CAAC,SAAS,mCAAI,EAAE,CAAC;QAC3C,OAAO,CAAC,iBAAiB,GAAG,MAAA,MAAM,CAAC,iBAAiB,mCAAI,EAAE,CAAC;QAC3D,OAAO,CAAC,YAAY,GAAG,MAAA,MAAM,CAAC,YAAY,mCAAI,EAAE,CAAC;QACjD,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,sCAAsC;IAC3C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC;AACD,MAAM,CAAC,MAAM,4BAA4B,GAAG;IACxC,MAAM,CAAC,OAAqC,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;;QAClF,IAAI,CAAA,MAAA,OAAO,CAAC,QAAQ,0CAAE,KAAK,MAAK,cAAc,EAAE;YAC5C,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;SACzF;QACD,IAAI,CAAA,MAAA,OAAO,CAAC,QAAQ,0CAAE,KAAK,MAAK,OAAO,EAAE;YACrC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;SACxF;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,sCAAsC,EAAE,CAAC;QACzD,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;oBACzG,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;oBACjG,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAAgE,MAAS;;QAChF,MAAM,OAAO,GAAG,sCAAsC,EAAE,CAAC;QACzD,IAAI,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,KAAK,MAAK,cAAc;YACzC,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,YAAY,MAAK,SAAS;YAC3C,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,YAAY,MAAK,IAAI,EAAE;YACxC,OAAO,CAAC,QAAQ,GAAG;gBACf,KAAK,EAAE,cAAc;gBACrB,YAAY,EAAE,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;aACvE,CAAC;SACL;QACD,IAAI,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,KAAK,MAAK,OAAO,IAAI,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,KAAK,MAAK,SAAS,IAAI,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,KAAK,MAAK,IAAI,EAAE;YAC/G,OAAO,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;SACvG;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,6BAA6B;IAClC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAC/C,CAAC;AACD,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAC/B,MAAM,CAAC,OAA4B,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QACzE,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAC/C;QACD,IAAI,OAAO,CAAC,YAAY,KAAK,EAAE,EAAE;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;SAClD;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,6BAA6B,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBACpC,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBACvC,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAAuD,MAAS;;QACvE,MAAM,OAAO,GAAG,6BAA6B,EAAE,CAAC;QAChD,OAAO,CAAC,SAAS,GAAG,MAAA,MAAM,CAAC,SAAS,mCAAI,EAAE,CAAC;QAC3C,OAAO,CAAC,YAAY,GAAG,MAAA,MAAM,CAAC,YAAY,mCAAI,EAAE,CAAC;QACjD,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,8BAA8B;IACnC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC;AACD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC,MAAM,CAAC,OAA6B,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;;QAC1E,IAAI,CAAA,MAAA,OAAO,CAAC,QAAQ,0CAAE,KAAK,MAAK,cAAc,EAAE;YAC5C,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;SACzF;QACD,IAAI,CAAA,MAAA,OAAO,CAAC,QAAQ,0CAAE,KAAK,MAAK,OAAO,EAAE;YACrC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;SACxF;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,8BAA8B,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;oBACzG,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;oBACjG,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAAwD,MAAS;;QACxE,MAAM,OAAO,GAAG,8BAA8B,EAAE,CAAC;QACjD,IAAI,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,KAAK,MAAK,cAAc;YACzC,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,YAAY,MAAK,SAAS;YAC3C,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,YAAY,MAAK,IAAI,EAAE;YACxC,OAAO,CAAC,QAAQ,GAAG;gBACf,KAAK,EAAE,cAAc;gBACrB,YAAY,EAAE,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;aACvE,CAAC;SACL;QACD,IAAI,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,KAAK,MAAK,OAAO,IAAI,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,KAAK,MAAK,SAAS,IAAI,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,KAAK,MAAK,IAAI,EAAE;YAC/G,OAAO,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;SACvG;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,+BAA+B;IACpC,OAAO;QACH,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,EAAE;QACd,IAAI,EAAE,IAAI,UAAU,EAAE;QACtB,MAAM,EAAE,EAAE;QACV,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,EAAE;KACtB,CAAC;AACN,CAAC;AACD,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACjC,MAAM,CAAC,OAA8B,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QAC3E,IAAI,OAAO,CAAC,YAAY,KAAK,EAAE,EAAE;YAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;SAClD;QACD,IAAI,OAAO,CAAC,aAAa,KAAK,EAAE,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;SACnD;QACD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACxD,qCAAqC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAU,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAChH,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACzC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE;YACvB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SAC5C;QACD,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SAC/C;QACD,IAAI,OAAO,CAAC,WAAW,KAAK,CAAC,EAAE;YAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SAChD;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,eAAe,EAAE;YACrC,cAAc,CAAC,MAAM,CAAC,CAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;SAChE;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,+BAA+B,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBACvC,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBACxC,MAAM;gBACV,KAAK,CAAC;oBACF,MAAM,MAAM,GAAG,qCAAqC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBACrF,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;wBAC5B,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;qBACjD;oBACD,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBACjC,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;oBACpC,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBACrC,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;oBAC7E,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAAyD,MAAS;;QACzE,MAAM,OAAO,GAAG,+BAA+B,EAAE,CAAC;QAClD,OAAO,CAAC,YAAY,GAAG,MAAA,MAAM,CAAC,YAAY,mCAAI,EAAE,CAAC;QACjD,OAAO,CAAC,aAAa,GAAG,MAAA,MAAM,CAAC,aAAa,mCAAI,EAAE,CAAC;QACnD,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAA,MAAM,CAAC,UAAU,mCAAI,EAAE,CAAC,CAAC,MAAM,CAEhE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACrB,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;aAC5B;YACD,OAAO,GAAG,CAAC;QACf,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,OAAO,CAAC,IAAI,GAAG,MAAA,MAAM,CAAC,IAAI,mCAAI,IAAI,UAAU,EAAE,CAAC;QAC/C,OAAO,CAAC,MAAM,GAAG,MAAA,MAAM,CAAC,MAAM,mCAAI,EAAE,CAAC;QACrC,OAAO,CAAC,WAAW,GAAG,MAAA,MAAM,CAAC,WAAW,mCAAI,KAAK,CAAC;QAClD,OAAO,CAAC,WAAW,GAAG,MAAA,MAAM,CAAC,WAAW,mCAAI,CAAC,CAAC;QAC9C,OAAO,CAAC,eAAe,GAAG,CAAA,MAAA,MAAM,CAAC,eAAe,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAI,EAAE,CAAC;QAClG,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,+CAA+C;IACpD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAClC,CAAC;AACD,MAAM,CAAC,MAAM,qCAAqC,GAAG;IACjD,MAAM,CAAC,OAA8C,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QAC3F,IAAI,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE;YACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACzC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;YACtB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC3C;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,+CAA+C,EAAE,CAAC;QAClE,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC9B,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChC,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAAyE,MAAS;;QACzF,MAAM,OAAO,GAAG,+CAA+C,EAAE,CAAC;QAClE,OAAO,CAAC,GAAG,GAAG,MAAA,MAAM,CAAC,GAAG,mCAAI,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,GAAG,MAAA,MAAM,CAAC,KAAK,mCAAI,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,gCAAgC;IACrC,OAAO;QACH,YAAY,EAAE,YAAY,CAAC,mBAAmB;QAC9C,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,IAAI,UAAU,EAAE;QACtB,gBAAgB,EAAE,KAAK;QACvB,eAAe,EAAE,EAAE;KACtB,CAAC;AACN,CAAC;AACD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,MAAM,CAAC,OAA+B,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QAC5E,IAAI,OAAO,CAAC,YAAY,KAAK,YAAY,CAAC,mBAAmB,EAAE;YAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;SACtE;QACD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACtD,oCAAoC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAU,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/G,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACzC;QACD,IAAI,OAAO,CAAC,gBAAgB,KAAK,IAAI,EAAE;YACnC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;SACpD;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,eAAe,EAAE;YACrC,cAAc,CAAC,MAAM,CAAC,CAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;SAChE;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,gCAAgC,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC5D,MAAM;gBACV,KAAK,CAAC;oBACF,MAAM,MAAM,GAAG,oCAAoC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBACpF,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;wBAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;qBAC/C;oBACD,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;oBACzC,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;oBAC7E,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAA0D,MAAS;;QAC1E,MAAM,OAAO,GAAG,gCAAgC,EAAE,CAAC;QACnD,OAAO,CAAC,YAAY,GAAG,MAAA,MAAM,CAAC,YAAY,mCAAI,YAAY,CAAC,mBAAmB,CAAC;QAC/E,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAA,MAAM,CAAC,QAAQ,mCAAI,EAAE,CAAC,CAAC,MAAM,CAE5D,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACrB,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;aAC5B;YACD,OAAO,GAAG,CAAC;QACf,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,OAAO,CAAC,IAAI,GAAG,MAAA,MAAM,CAAC,IAAI,mCAAI,IAAI,UAAU,EAAE,CAAC;QAC/C,OAAO,CAAC,gBAAgB,GAAG,MAAA,MAAM,CAAC,gBAAgB,mCAAI,KAAK,CAAC;QAC5D,OAAO,CAAC,eAAe,GAAG,CAAA,MAAA,MAAM,CAAC,eAAe,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAI,EAAE,CAAC;QAClG,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,8CAA8C;IACnD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAClC,CAAC;AACD,MAAM,CAAC,MAAM,oCAAoC,GAAG;IAChD,MAAM,CAAC,OAA6C,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QAC1F,IAAI,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE;YACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACzC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;YACtB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC3C;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,8CAA8C,EAAE,CAAC;QACjE,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC9B,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChC,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAAwE,MAAS;;QACxF,MAAM,OAAO,GAAG,8CAA8C,EAAE,CAAC;QACjE,OAAO,CAAC,GAAG,GAAG,MAAA,MAAM,CAAC,GAAG,mCAAI,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,GAAG,MAAA,MAAM,CAAC,KAAK,mCAAI,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AACF,SAAS,wBAAwB;IAC7B,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,UAAU,EAAE,EAAE,CAAC;AACxD,CAAC;AACD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,MAAM,CAAC,OAAuB,EAAE,SAAqB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QACpE,IAAI,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE;YACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACzC;QACD,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YACpC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;SAClD;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,KAA8B,EAAE,MAAe;QAClD,MAAM,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;QAC3C,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC;oBACF,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC9B,MAAM;gBACV,KAAK,CAAC;oBACF,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBACvC,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACzB,MAAM;aACb;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,WAAW,CAAkD,MAAS;;QAClE,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,GAAG,MAAA,MAAM,CAAC,GAAG,mCAAI,EAAE,CAAC;QAC/B,OAAO,CAAC,aAAa,GAAG,MAAA,MAAM,CAAC,aAAa,mCAAI,IAAI,UAAU,EAAE,CAAC;QACjE,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC;AAWF,IAAI,UAAU,GAAQ,CAAC,GAAG,EAAE;IACxB,IAAI,OAAO,UAAU,KAAK,WAAW;QACjC,OAAO,UAAU,CAAC;IACtB,IAAI,OAAO,IAAI,KAAK,WAAW;QAC3B,OAAO,IAAI,CAAC;IAChB,IAAI,OAAO,MAAM,KAAK,WAAW;QAC7B,OAAO,MAAM,CAAC;IAClB,IAAI,OAAO,MAAM,KAAK,WAAW;QAC7B,OAAO,MAAM,CAAC;IAClB,MAAM,gCAAgC,CAAC;AAC3C,CAAC,CAAC,EAAE,CAAC;AAeL,SAAS,YAAY,CAAC,IAAU;IAC5B,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;QAClC,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;KAC9E;IACD,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC;AACD,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;IACxB,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAW,CAAC;IAC5B,GAAG,CAAC,SAAS,EAAE,CAAC;CACnB","sourcesContent":["import Long from \"long\";\nimport _m0 from \"protobufjs/minimal\";\nexport const protobufPackage = \"snapchat.lenses\";\nexport enum HttpRequestMethod {\n HTTP_METHOD_UNSET = \"HTTP_METHOD_UNSET\",\n HTTP_METHOD_GET = \"HTTP_METHOD_GET\",\n HTTP_METHOD_POST = \"HTTP_METHOD_POST\",\n HTTP_METHOD_PUT = \"HTTP_METHOD_PUT\",\n HTTP_METHOD_DELETE = \"HTTP_METHOD_DELETE\",\n HTTP_METHOD_PATCH = \"HTTP_METHOD_PATCH\",\n UNRECOGNIZED = \"UNRECOGNIZED\"\n}\nexport function httpRequestMethodFromJSON(object: any): HttpRequestMethod {\n switch (object) {\n case 0:\n case \"HTTP_METHOD_UNSET\":\n return HttpRequestMethod.HTTP_METHOD_UNSET;\n case 1:\n case \"HTTP_METHOD_GET\":\n return HttpRequestMethod.HTTP_METHOD_GET;\n case 2:\n case \"HTTP_METHOD_POST\":\n return HttpRequestMethod.HTTP_METHOD_POST;\n case 3:\n case \"HTTP_METHOD_PUT\":\n return HttpRequestMethod.HTTP_METHOD_PUT;\n case 4:\n case \"HTTP_METHOD_DELETE\":\n return HttpRequestMethod.HTTP_METHOD_DELETE;\n case 5:\n case \"HTTP_METHOD_PATCH\":\n return HttpRequestMethod.HTTP_METHOD_PATCH;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return HttpRequestMethod.UNRECOGNIZED;\n }\n}\nexport function httpRequestMethodToNumber(object: HttpRequestMethod): number {\n switch (object) {\n case HttpRequestMethod.HTTP_METHOD_UNSET:\n return 0;\n case HttpRequestMethod.HTTP_METHOD_GET:\n return 1;\n case HttpRequestMethod.HTTP_METHOD_POST:\n return 2;\n case HttpRequestMethod.HTTP_METHOD_PUT:\n return 3;\n case HttpRequestMethod.HTTP_METHOD_DELETE:\n return 4;\n case HttpRequestMethod.HTTP_METHOD_PATCH:\n return 5;\n default:\n return 0;\n }\n}\nexport enum ResponseCode {\n RESPONSE_CODE_UNSET = \"RESPONSE_CODE_UNSET\",\n SUCCESS = \"SUCCESS\",\n REDIRECTED = \"REDIRECTED\",\n BAD_REQUEST = \"BAD_REQUEST\",\n ACCESS_DENIED = \"ACCESS_DENIED\",\n NOT_FOUND = \"NOT_FOUND\",\n TIMEOUT = \"TIMEOUT\",\n REQUEST_TOO_LARGE = \"REQUEST_TOO_LARGE\",\n SERVER_ERROR = \"SERVER_ERROR\",\n CANCELLED = \"CANCELLED\",\n PROXY_ERROR = \"PROXY_ERROR\",\n UNRECOGNIZED = \"UNRECOGNIZED\"\n}\nexport function responseCodeFromJSON(object: any): ResponseCode {\n switch (object) {\n case 0:\n case \"RESPONSE_CODE_UNSET\":\n return ResponseCode.RESPONSE_CODE_UNSET;\n case 1:\n case \"SUCCESS\":\n return ResponseCode.SUCCESS;\n case 2:\n case \"REDIRECTED\":\n return ResponseCode.REDIRECTED;\n case 3:\n case \"BAD_REQUEST\":\n return ResponseCode.BAD_REQUEST;\n case 4:\n case \"ACCESS_DENIED\":\n return ResponseCode.ACCESS_DENIED;\n case 5:\n case \"NOT_FOUND\":\n return ResponseCode.NOT_FOUND;\n case 6:\n case \"TIMEOUT\":\n return ResponseCode.TIMEOUT;\n case 7:\n case \"REQUEST_TOO_LARGE\":\n return ResponseCode.REQUEST_TOO_LARGE;\n case 8:\n case \"SERVER_ERROR\":\n return ResponseCode.SERVER_ERROR;\n case 9:\n case \"CANCELLED\":\n return ResponseCode.CANCELLED;\n case 10:\n case \"PROXY_ERROR\":\n return ResponseCode.PROXY_ERROR;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return ResponseCode.UNRECOGNIZED;\n }\n}\nexport function responseCodeToNumber(object: ResponseCode): number {\n switch (object) {\n case ResponseCode.RESPONSE_CODE_UNSET:\n return 0;\n case ResponseCode.SUCCESS:\n return 1;\n case ResponseCode.REDIRECTED:\n return 2;\n case ResponseCode.BAD_REQUEST:\n return 3;\n case ResponseCode.ACCESS_DENIED:\n return 4;\n case ResponseCode.NOT_FOUND:\n return 5;\n case ResponseCode.TIMEOUT:\n return 6;\n case ResponseCode.REQUEST_TOO_LARGE:\n return 7;\n case ResponseCode.SERVER_ERROR:\n return 8;\n case ResponseCode.CANCELLED:\n return 9;\n case ResponseCode.PROXY_ERROR:\n return 10;\n default:\n return 0;\n }\n}\nexport interface PerformHttpCallRequest {\n url: string;\n method: HttpRequestMethod;\n headers: {\n [key: string]: string;\n };\n body: Uint8Array;\n apiSpecId: string;\n isStudioDev: boolean;\n}\nexport interface PerformHttpCallRequest_HeadersEntry {\n key: string;\n value: string;\n}\nexport interface PerformHttpCallResponse {\n code: number;\n headers: {\n [key: string]: string;\n };\n body: Uint8Array;\n}\nexport interface PerformHttpCallResponse_HeadersEntry {\n key: string;\n value: string;\n}\nexport interface GetOAuth2InfoRequest {\n apiSpecId: string;\n}\nexport interface GetOAuth2InfoResponse {\n clientId: string;\n grantType: GetOAuth2InfoResponse_GrantType;\n authorizationUrl: string;\n scope: string;\n}\nexport enum GetOAuth2InfoResponse_GrantType {\n GRANT_TYPE_UNSET = \"GRANT_TYPE_UNSET\",\n AUTHORIZATION_CODE = \"AUTHORIZATION_CODE\",\n AUTHORIZATION_CODE_WITH_PKCE = \"AUTHORIZATION_CODE_WITH_PKCE\",\n IMPLICIT = \"IMPLICIT\",\n CLIENT_CREDENTIALS = \"CLIENT_CREDENTIALS\",\n UNRECOGNIZED = \"UNRECOGNIZED\"\n}\nexport function getOAuth2InfoResponse_GrantTypeFromJSON(object: any): GetOAuth2InfoResponse_GrantType {\n switch (object) {\n case 0:\n case \"GRANT_TYPE_UNSET\":\n return GetOAuth2InfoResponse_GrantType.GRANT_TYPE_UNSET;\n case 1:\n case \"AUTHORIZATION_CODE\":\n return GetOAuth2InfoResponse_GrantType.AUTHORIZATION_CODE;\n case 2:\n case \"AUTHORIZATION_CODE_WITH_PKCE\":\n return GetOAuth2InfoResponse_GrantType.AUTHORIZATION_CODE_WITH_PKCE;\n case 3:\n case \"IMPLICIT\":\n return GetOAuth2InfoResponse_GrantType.IMPLICIT;\n case 4:\n case \"CLIENT_CREDENTIALS\":\n return GetOAuth2InfoResponse_GrantType.CLIENT_CREDENTIALS;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return GetOAuth2InfoResponse_GrantType.UNRECOGNIZED;\n }\n}\nexport function getOAuth2InfoResponse_GrantTypeToNumber(object: GetOAuth2InfoResponse_GrantType): number {\n switch (object) {\n case GetOAuth2InfoResponse_GrantType.GRANT_TYPE_UNSET:\n return 0;\n case GetOAuth2InfoResponse_GrantType.AUTHORIZATION_CODE:\n return 1;\n case GetOAuth2InfoResponse_GrantType.AUTHORIZATION_CODE_WITH_PKCE:\n return 2;\n case GetOAuth2InfoResponse_GrantType.IMPLICIT:\n return 3;\n case GetOAuth2InfoResponse_GrantType.CLIENT_CREDENTIALS:\n return 4;\n default:\n return 0;\n }\n}\nexport interface TokenExchangeError {\n error: TokenExchangeError_TokenExchangeErrorType;\n errorDescription: string;\n}\nexport enum TokenExchangeError_TokenExchangeErrorType {\n ERROR_TYPE_UNSET = \"ERROR_TYPE_UNSET\",\n INVALID_REQUEST = \"INVALID_REQUEST\",\n INVALID_CLIENT = \"INVALID_CLIENT\",\n INVALID_GRANT = \"INVALID_GRANT\",\n UNAUTHORIZED_CLIENT = \"UNAUTHORIZED_CLIENT\",\n UNSUPPORTED_GRANT_TYPE = \"UNSUPPORTED_GRANT_TYPE\",\n INVALID_SCOPE = \"INVALID_SCOPE\",\n UNRECOGNIZED = \"UNRECOGNIZED\"\n}\nexport function tokenExchangeError_TokenExchangeErrorTypeFromJSON(object: any): TokenExchangeError_TokenExchangeErrorType {\n switch (object) {\n case 0:\n case \"ERROR_TYPE_UNSET\":\n return TokenExchangeError_TokenExchangeErrorType.ERROR_TYPE_UNSET;\n case 1:\n case \"INVALID_REQUEST\":\n return TokenExchangeError_TokenExchangeErrorType.INVALID_REQUEST;\n case 2:\n case \"INVALID_CLIENT\":\n return TokenExchangeError_TokenExchangeErrorType.INVALID_CLIENT;\n case 3:\n case \"INVALID_GRANT\":\n return TokenExchangeError_TokenExchangeErrorType.INVALID_GRANT;\n case 4:\n case \"UNAUTHORIZED_CLIENT\":\n return TokenExchangeError_TokenExchangeErrorType.UNAUTHORIZED_CLIENT;\n case 5:\n case \"UNSUPPORTED_GRANT_TYPE\":\n return TokenExchangeError_TokenExchangeErrorType.UNSUPPORTED_GRANT_TYPE;\n case 6:\n case \"INVALID_SCOPE\":\n return TokenExchangeError_TokenExchangeErrorType.INVALID_SCOPE;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return TokenExchangeError_TokenExchangeErrorType.UNRECOGNIZED;\n }\n}\nexport function tokenExchangeError_TokenExchangeErrorTypeToNumber(object: TokenExchangeError_TokenExchangeErrorType): number {\n switch (object) {\n case TokenExchangeError_TokenExchangeErrorType.ERROR_TYPE_UNSET:\n return 0;\n case TokenExchangeError_TokenExchangeErrorType.INVALID_REQUEST:\n return 1;\n case TokenExchangeError_TokenExchangeErrorType.INVALID_CLIENT:\n return 2;\n case TokenExchangeError_TokenExchangeErrorType.INVALID_GRANT:\n return 3;\n case TokenExchangeError_TokenExchangeErrorType.UNAUTHORIZED_CLIENT:\n return 4;\n case TokenExchangeError_TokenExchangeErrorType.UNSUPPORTED_GRANT_TYPE:\n return 5;\n case TokenExchangeError_TokenExchangeErrorType.INVALID_SCOPE:\n return 6;\n default:\n return 0;\n }\n}\nexport interface TokenDetails {\n accessToken: string;\n tokenType: string;\n expiresInSeconds: number;\n refreshToken: string;\n scope: string;\n}\nexport interface PerformTokenExchangeRequest {\n apiSpecId: string;\n authorizationCode: string;\n codeVerifier: string;\n}\nexport interface PerformTokenExchangeResponse {\n response?: {\n $case: \"tokenDetails\";\n tokenDetails: TokenDetails;\n } | {\n $case: \"error\";\n error: TokenExchangeError;\n };\n}\nexport interface RefreshTokenRequest {\n apiSpecId: string;\n refreshToken: string;\n}\nexport interface RefreshTokenResponse {\n response?: {\n $case: \"tokenDetails\";\n tokenDetails: TokenDetails;\n } | {\n $case: \"error\";\n error: TokenExchangeError;\n };\n}\nexport interface PerformApiCallRequest {\n apiSpecSetId: string;\n endpointRefId: string;\n parameters: {\n [key: string]: string;\n };\n body: Uint8Array;\n lensId: string;\n isStudioDev: boolean;\n cacheTtlSec: number;\n linkedResources: LinkedResource[];\n}\nexport interface PerformApiCallRequest_ParametersEntry {\n key: string;\n value: string;\n}\nexport interface PerformApiCallResponse {\n responseCode: ResponseCode;\n metadata: {\n [key: string]: string;\n };\n body: Uint8Array;\n userLocationUsed: boolean;\n linkedResources: LinkedResource[];\n}\nexport interface PerformApiCallResponse_MetadataEntry {\n key: string;\n value: string;\n}\nexport interface LinkedResource {\n url: string;\n encryptionKey: Uint8Array;\n}\nfunction createBasePerformHttpCallRequest(): PerformHttpCallRequest {\n return {\n url: \"\",\n method: HttpRequestMethod.HTTP_METHOD_UNSET,\n headers: {},\n body: new Uint8Array(),\n apiSpecId: \"\",\n isStudioDev: false,\n };\n}\nexport const PerformHttpCallRequest = {\n encode(message: PerformHttpCallRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.url !== \"\") {\n writer.uint32(10).string(message.url);\n }\n if (message.method !== HttpRequestMethod.HTTP_METHOD_UNSET) {\n writer.uint32(16).int32(httpRequestMethodToNumber(message.method));\n }\n Object.entries(message.headers).forEach(([key, value]) => {\n PerformHttpCallRequest_HeadersEntry.encode({ key: key as any, value }, writer.uint32(26).fork()).ldelim();\n });\n if (message.body.length !== 0) {\n writer.uint32(34).bytes(message.body);\n }\n if (message.apiSpecId !== \"\") {\n writer.uint32(42).string(message.apiSpecId);\n }\n if (message.isStudioDev === true) {\n writer.uint32(48).bool(message.isStudioDev);\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): PerformHttpCallRequest {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePerformHttpCallRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.url = reader.string();\n break;\n case 2:\n message.method = httpRequestMethodFromJSON(reader.int32());\n break;\n case 3:\n const entry3 = PerformHttpCallRequest_HeadersEntry.decode(reader, reader.uint32());\n if (entry3.value !== undefined) {\n message.headers[entry3.key] = entry3.value;\n }\n break;\n case 4:\n message.body = reader.bytes();\n break;\n case 5:\n message.apiSpecId = reader.string();\n break;\n case 6:\n message.isStudioDev = reader.bool();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<PerformHttpCallRequest>, I>>(object: I): PerformHttpCallRequest {\n const message = createBasePerformHttpCallRequest();\n message.url = object.url ?? \"\";\n message.method = object.method ?? HttpRequestMethod.HTTP_METHOD_UNSET;\n message.headers = Object.entries(object.headers ?? {}).reduce<{\n [key: string]: string;\n }>((acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = String(value);\n }\n return acc;\n }, {});\n message.body = object.body ?? new Uint8Array();\n message.apiSpecId = object.apiSpecId ?? \"\";\n message.isStudioDev = object.isStudioDev ?? false;\n return message;\n },\n};\nfunction createBasePerformHttpCallRequest_HeadersEntry(): PerformHttpCallRequest_HeadersEntry {\n return { key: \"\", value: \"\" };\n}\nexport const PerformHttpCallRequest_HeadersEntry = {\n encode(message: PerformHttpCallRequest_HeadersEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): PerformHttpCallRequest_HeadersEntry {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePerformHttpCallRequest_HeadersEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.key = reader.string();\n break;\n case 2:\n message.value = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<PerformHttpCallRequest_HeadersEntry>, I>>(object: I): PerformHttpCallRequest_HeadersEntry {\n const message = createBasePerformHttpCallRequest_HeadersEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\nfunction createBasePerformHttpCallResponse(): PerformHttpCallResponse {\n return { code: 0, headers: {}, body: new Uint8Array() };\n}\nexport const PerformHttpCallResponse = {\n encode(message: PerformHttpCallResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.code !== 0) {\n writer.uint32(8).int32(message.code);\n }\n Object.entries(message.headers).forEach(([key, value]) => {\n PerformHttpCallResponse_HeadersEntry.encode({ key: key as any, value }, writer.uint32(18).fork()).ldelim();\n });\n if (message.body.length !== 0) {\n writer.uint32(26).bytes(message.body);\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): PerformHttpCallResponse {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePerformHttpCallResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.code = reader.int32();\n break;\n case 2:\n const entry2 = PerformHttpCallResponse_HeadersEntry.decode(reader, reader.uint32());\n if (entry2.value !== undefined) {\n message.headers[entry2.key] = entry2.value;\n }\n break;\n case 3:\n message.body = reader.bytes();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<PerformHttpCallResponse>, I>>(object: I): PerformHttpCallResponse {\n const message = createBasePerformHttpCallResponse();\n message.code = object.code ?? 0;\n message.headers = Object.entries(object.headers ?? {}).reduce<{\n [key: string]: string;\n }>((acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = String(value);\n }\n return acc;\n }, {});\n message.body = object.body ?? new Uint8Array();\n return message;\n },\n};\nfunction createBasePerformHttpCallResponse_HeadersEntry(): PerformHttpCallResponse_HeadersEntry {\n return { key: \"\", value: \"\" };\n}\nexport const PerformHttpCallResponse_HeadersEntry = {\n encode(message: PerformHttpCallResponse_HeadersEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): PerformHttpCallResponse_HeadersEntry {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePerformHttpCallResponse_HeadersEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.key = reader.string();\n break;\n case 2:\n message.value = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<PerformHttpCallResponse_HeadersEntry>, I>>(object: I): PerformHttpCallResponse_HeadersEntry {\n const message = createBasePerformHttpCallResponse_HeadersEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\nfunction createBaseGetOAuth2InfoRequest(): GetOAuth2InfoRequest {\n return { apiSpecId: \"\" };\n}\nexport const GetOAuth2InfoRequest = {\n encode(message: GetOAuth2InfoRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.apiSpecId !== \"\") {\n writer.uint32(10).string(message.apiSpecId);\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): GetOAuth2InfoRequest {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetOAuth2InfoRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.apiSpecId = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<GetOAuth2InfoRequest>, I>>(object: I): GetOAuth2InfoRequest {\n const message = createBaseGetOAuth2InfoRequest();\n message.apiSpecId = object.apiSpecId ?? \"\";\n return message;\n },\n};\nfunction createBaseGetOAuth2InfoResponse(): GetOAuth2InfoResponse {\n return { clientId: \"\", grantType: GetOAuth2InfoResponse_GrantType.GRANT_TYPE_UNSET, authorizationUrl: \"\", scope: \"\" };\n}\nexport const GetOAuth2InfoResponse = {\n encode(message: GetOAuth2InfoResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.clientId !== \"\") {\n writer.uint32(10).string(message.clientId);\n }\n if (message.grantType !== GetOAuth2InfoResponse_GrantType.GRANT_TYPE_UNSET) {\n writer.uint32(16).int32(getOAuth2InfoResponse_GrantTypeToNumber(message.grantType));\n }\n if (message.authorizationUrl !== \"\") {\n writer.uint32(26).string(message.authorizationUrl);\n }\n if (message.scope !== \"\") {\n writer.uint32(34).string(message.scope);\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): GetOAuth2InfoResponse {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetOAuth2InfoResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.clientId = reader.string();\n break;\n case 2:\n message.grantType = getOAuth2InfoResponse_GrantTypeFromJSON(reader.int32());\n break;\n case 3:\n message.authorizationUrl = reader.string();\n break;\n case 4:\n message.scope = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<GetOAuth2InfoResponse>, I>>(object: I): GetOAuth2InfoResponse {\n const message = createBaseGetOAuth2InfoResponse();\n message.clientId = object.clientId ?? \"\";\n message.grantType = object.grantType ?? GetOAuth2InfoResponse_GrantType.GRANT_TYPE_UNSET;\n message.authorizationUrl = object.authorizationUrl ?? \"\";\n message.scope = object.scope ?? \"\";\n return message;\n },\n};\nfunction createBaseTokenExchangeError(): TokenExchangeError {\n return { error: TokenExchangeError_TokenExchangeErrorType.ERROR_TYPE_UNSET, errorDescription: \"\" };\n}\nexport const TokenExchangeError = {\n encode(message: TokenExchangeError, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.error !== TokenExchangeError_TokenExchangeErrorType.ERROR_TYPE_UNSET) {\n writer.uint32(8).int32(tokenExchangeError_TokenExchangeErrorTypeToNumber(message.error));\n }\n if (message.errorDescription !== \"\") {\n writer.uint32(18).string(message.errorDescription);\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): TokenExchangeError {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTokenExchangeError();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.error = tokenExchangeError_TokenExchangeErrorTypeFromJSON(reader.int32());\n break;\n case 2:\n message.errorDescription = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<TokenExchangeError>, I>>(object: I): TokenExchangeError {\n const message = createBaseTokenExchangeError();\n message.error = object.error ?? TokenExchangeError_TokenExchangeErrorType.ERROR_TYPE_UNSET;\n message.errorDescription = object.errorDescription ?? \"\";\n return message;\n },\n};\nfunction createBaseTokenDetails(): TokenDetails {\n return { accessToken: \"\", tokenType: \"\", expiresInSeconds: 0, refreshToken: \"\", scope: \"\" };\n}\nexport const TokenDetails = {\n encode(message: TokenDetails, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.accessToken !== \"\") {\n writer.uint32(10).string(message.accessToken);\n }\n if (message.tokenType !== \"\") {\n writer.uint32(18).string(message.tokenType);\n }\n if (message.expiresInSeconds !== 0) {\n writer.uint32(24).int64(message.expiresInSeconds);\n }\n if (message.refreshToken !== \"\") {\n writer.uint32(34).string(message.refreshToken);\n }\n if (message.scope !== \"\") {\n writer.uint32(42).string(message.scope);\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): TokenDetails {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTokenDetails();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.accessToken = reader.string();\n break;\n case 2:\n message.tokenType = reader.string();\n break;\n case 3:\n message.expiresInSeconds = longToNumber(reader.int64() as Long);\n break;\n case 4:\n message.refreshToken = reader.string();\n break;\n case 5:\n message.scope = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<TokenDetails>, I>>(object: I): TokenDetails {\n const message = createBaseTokenDetails();\n message.accessToken = object.accessToken ?? \"\";\n message.tokenType = object.tokenType ?? \"\";\n message.expiresInSeconds = object.expiresInSeconds ?? 0;\n message.refreshToken = object.refreshToken ?? \"\";\n message.scope = object.scope ?? \"\";\n return message;\n },\n};\nfunction createBasePerformTokenExchangeRequest(): PerformTokenExchangeRequest {\n return { apiSpecId: \"\", authorizationCode: \"\", codeVerifier: \"\" };\n}\nexport const PerformTokenExchangeRequest = {\n encode(message: PerformTokenExchangeRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.apiSpecId !== \"\") {\n writer.uint32(10).string(message.apiSpecId);\n }\n if (message.authorizationCode !== \"\") {\n writer.uint32(18).string(message.authorizationCode);\n }\n if (message.codeVerifier !== \"\") {\n writer.uint32(26).string(message.codeVerifier);\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): PerformTokenExchangeRequest {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePerformTokenExchangeRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.apiSpecId = reader.string();\n break;\n case 2:\n message.authorizationCode = reader.string();\n break;\n case 3:\n message.codeVerifier = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<PerformTokenExchangeRequest>, I>>(object: I): PerformTokenExchangeRequest {\n const message = createBasePerformTokenExchangeRequest();\n message.apiSpecId = object.apiSpecId ?? \"\";\n message.authorizationCode = object.authorizationCode ?? \"\";\n message.codeVerifier = object.codeVerifier ?? \"\";\n return message;\n },\n};\nfunction createBasePerformTokenExchangeResponse(): PerformTokenExchangeResponse {\n return { response: undefined };\n}\nexport const PerformTokenExchangeResponse = {\n encode(message: PerformTokenExchangeResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.response?.$case === \"tokenDetails\") {\n TokenDetails.encode(message.response.tokenDetails, writer.uint32(10).fork()).ldelim();\n }\n if (message.response?.$case === \"error\") {\n TokenExchangeError.encode(message.response.error, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): PerformTokenExchangeResponse {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePerformTokenExchangeResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.response = { $case: \"tokenDetails\", tokenDetails: TokenDetails.decode(reader, reader.uint32()) };\n break;\n case 2:\n message.response = { $case: \"error\", error: TokenExchangeError.decode(reader, reader.uint32()) };\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<PerformTokenExchangeResponse>, I>>(object: I): PerformTokenExchangeResponse {\n const message = createBasePerformTokenExchangeResponse();\n if (object.response?.$case === \"tokenDetails\" &&\n object.response?.tokenDetails !== undefined &&\n object.response?.tokenDetails !== null) {\n message.response = {\n $case: \"tokenDetails\",\n tokenDetails: TokenDetails.fromPartial(object.response.tokenDetails),\n };\n }\n if (object.response?.$case === \"error\" && object.response?.error !== undefined && object.response?.error !== null) {\n message.response = { $case: \"error\", error: TokenExchangeError.fromPartial(object.response.error) };\n }\n return message;\n },\n};\nfunction createBaseRefreshTokenRequest(): RefreshTokenRequest {\n return { apiSpecId: \"\", refreshToken: \"\" };\n}\nexport const RefreshTokenRequest = {\n encode(message: RefreshTokenRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.apiSpecId !== \"\") {\n writer.uint32(10).string(message.apiSpecId);\n }\n if (message.refreshToken !== \"\") {\n writer.uint32(18).string(message.refreshToken);\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): RefreshTokenRequest {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRefreshTokenRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.apiSpecId = reader.string();\n break;\n case 2:\n message.refreshToken = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<RefreshTokenRequest>, I>>(object: I): RefreshTokenRequest {\n const message = createBaseRefreshTokenRequest();\n message.apiSpecId = object.apiSpecId ?? \"\";\n message.refreshToken = object.refreshToken ?? \"\";\n return message;\n },\n};\nfunction createBaseRefreshTokenResponse(): RefreshTokenResponse {\n return { response: undefined };\n}\nexport const RefreshTokenResponse = {\n encode(message: RefreshTokenResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.response?.$case === \"tokenDetails\") {\n TokenDetails.encode(message.response.tokenDetails, writer.uint32(10).fork()).ldelim();\n }\n if (message.response?.$case === \"error\") {\n TokenExchangeError.encode(message.response.error, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): RefreshTokenResponse {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRefreshTokenResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.response = { $case: \"tokenDetails\", tokenDetails: TokenDetails.decode(reader, reader.uint32()) };\n break;\n case 2:\n message.response = { $case: \"error\", error: TokenExchangeError.decode(reader, reader.uint32()) };\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<RefreshTokenResponse>, I>>(object: I): RefreshTokenResponse {\n const message = createBaseRefreshTokenResponse();\n if (object.response?.$case === \"tokenDetails\" &&\n object.response?.tokenDetails !== undefined &&\n object.response?.tokenDetails !== null) {\n message.response = {\n $case: \"tokenDetails\",\n tokenDetails: TokenDetails.fromPartial(object.response.tokenDetails),\n };\n }\n if (object.response?.$case === \"error\" && object.response?.error !== undefined && object.response?.error !== null) {\n message.response = { $case: \"error\", error: TokenExchangeError.fromPartial(object.response.error) };\n }\n return message;\n },\n};\nfunction createBasePerformApiCallRequest(): PerformApiCallRequest {\n return {\n apiSpecSetId: \"\",\n endpointRefId: \"\",\n parameters: {},\n body: new Uint8Array(),\n lensId: \"\",\n isStudioDev: false,\n cacheTtlSec: 0,\n linkedResources: [],\n };\n}\nexport const PerformApiCallRequest = {\n encode(message: PerformApiCallRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.apiSpecSetId !== \"\") {\n writer.uint32(10).string(message.apiSpecSetId);\n }\n if (message.endpointRefId !== \"\") {\n writer.uint32(18).string(message.endpointRefId);\n }\n Object.entries(message.parameters).forEach(([key, value]) => {\n PerformApiCallRequest_ParametersEntry.encode({ key: key as any, value }, writer.uint32(26).fork()).ldelim();\n });\n if (message.body.length !== 0) {\n writer.uint32(34).bytes(message.body);\n }\n if (message.lensId !== \"\") {\n writer.uint32(42).string(message.lensId);\n }\n if (message.isStudioDev === true) {\n writer.uint32(48).bool(message.isStudioDev);\n }\n if (message.cacheTtlSec !== 0) {\n writer.uint32(56).int32(message.cacheTtlSec);\n }\n for (const v of message.linkedResources) {\n LinkedResource.encode(v!, writer.uint32(66).fork()).ldelim();\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): PerformApiCallRequest {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePerformApiCallRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.apiSpecSetId = reader.string();\n break;\n case 2:\n message.endpointRefId = reader.string();\n break;\n case 3:\n const entry3 = PerformApiCallRequest_ParametersEntry.decode(reader, reader.uint32());\n if (entry3.value !== undefined) {\n message.parameters[entry3.key] = entry3.value;\n }\n break;\n case 4:\n message.body = reader.bytes();\n break;\n case 5:\n message.lensId = reader.string();\n break;\n case 6:\n message.isStudioDev = reader.bool();\n break;\n case 7:\n message.cacheTtlSec = reader.int32();\n break;\n case 8:\n message.linkedResources.push(LinkedResource.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<PerformApiCallRequest>, I>>(object: I): PerformApiCallRequest {\n const message = createBasePerformApiCallRequest();\n message.apiSpecSetId = object.apiSpecSetId ?? \"\";\n message.endpointRefId = object.endpointRefId ?? \"\";\n message.parameters = Object.entries(object.parameters ?? {}).reduce<{\n [key: string]: string;\n }>((acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = String(value);\n }\n return acc;\n }, {});\n message.body = object.body ?? new Uint8Array();\n message.lensId = object.lensId ?? \"\";\n message.isStudioDev = object.isStudioDev ?? false;\n message.cacheTtlSec = object.cacheTtlSec ?? 0;\n message.linkedResources = object.linkedResources?.map((e) => LinkedResource.fromPartial(e)) || [];\n return message;\n },\n};\nfunction createBasePerformApiCallRequest_ParametersEntry(): PerformApiCallRequest_ParametersEntry {\n return { key: \"\", value: \"\" };\n}\nexport const PerformApiCallRequest_ParametersEntry = {\n encode(message: PerformApiCallRequest_ParametersEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): PerformApiCallRequest_ParametersEntry {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePerformApiCallRequest_ParametersEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.key = reader.string();\n break;\n case 2:\n message.value = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<PerformApiCallRequest_ParametersEntry>, I>>(object: I): PerformApiCallRequest_ParametersEntry {\n const message = createBasePerformApiCallRequest_ParametersEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\nfunction createBasePerformApiCallResponse(): PerformApiCallResponse {\n return {\n responseCode: ResponseCode.RESPONSE_CODE_UNSET,\n metadata: {},\n body: new Uint8Array(),\n userLocationUsed: false,\n linkedResources: [],\n };\n}\nexport const PerformApiCallResponse = {\n encode(message: PerformApiCallResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.responseCode !== ResponseCode.RESPONSE_CODE_UNSET) {\n writer.uint32(8).int32(responseCodeToNumber(message.responseCode));\n }\n Object.entries(message.metadata).forEach(([key, value]) => {\n PerformApiCallResponse_MetadataEntry.encode({ key: key as any, value }, writer.uint32(18).fork()).ldelim();\n });\n if (message.body.length !== 0) {\n writer.uint32(26).bytes(message.body);\n }\n if (message.userLocationUsed === true) {\n writer.uint32(32).bool(message.userLocationUsed);\n }\n for (const v of message.linkedResources) {\n LinkedResource.encode(v!, writer.uint32(42).fork()).ldelim();\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): PerformApiCallResponse {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePerformApiCallResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.responseCode = responseCodeFromJSON(reader.int32());\n break;\n case 2:\n const entry2 = PerformApiCallResponse_MetadataEntry.decode(reader, reader.uint32());\n if (entry2.value !== undefined) {\n message.metadata[entry2.key] = entry2.value;\n }\n break;\n case 3:\n message.body = reader.bytes();\n break;\n case 4:\n message.userLocationUsed = reader.bool();\n break;\n case 5:\n message.linkedResources.push(LinkedResource.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<PerformApiCallResponse>, I>>(object: I): PerformApiCallResponse {\n const message = createBasePerformApiCallResponse();\n message.responseCode = object.responseCode ?? ResponseCode.RESPONSE_CODE_UNSET;\n message.metadata = Object.entries(object.metadata ?? {}).reduce<{\n [key: string]: string;\n }>((acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = String(value);\n }\n return acc;\n }, {});\n message.body = object.body ?? new Uint8Array();\n message.userLocationUsed = object.userLocationUsed ?? false;\n message.linkedResources = object.linkedResources?.map((e) => LinkedResource.fromPartial(e)) || [];\n return message;\n },\n};\nfunction createBasePerformApiCallResponse_MetadataEntry(): PerformApiCallResponse_MetadataEntry {\n return { key: \"\", value: \"\" };\n}\nexport const PerformApiCallResponse_MetadataEntry = {\n encode(message: PerformApiCallResponse_MetadataEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): PerformApiCallResponse_MetadataEntry {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePerformApiCallResponse_MetadataEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.key = reader.string();\n break;\n case 2:\n message.value = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<PerformApiCallResponse_MetadataEntry>, I>>(object: I): PerformApiCallResponse_MetadataEntry {\n const message = createBasePerformApiCallResponse_MetadataEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\nfunction createBaseLinkedResource(): LinkedResource {\n return { url: \"\", encryptionKey: new Uint8Array() };\n}\nexport const LinkedResource = {\n encode(message: LinkedResource, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.url !== \"\") {\n writer.uint32(10).string(message.url);\n }\n if (message.encryptionKey.length !== 0) {\n writer.uint32(18).bytes(message.encryptionKey);\n }\n return writer;\n },\n decode(input: _m0.Reader | Uint8Array, length?: number): LinkedResource {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLinkedResource();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.url = reader.string();\n break;\n case 2:\n message.encryptionKey = reader.bytes();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n fromPartial<I extends Exact<DeepPartial<LinkedResource>, I>>(object: I): LinkedResource {\n const message = createBaseLinkedResource();\n message.url = object.url ?? \"\";\n message.encryptionKey = object.encryptionKey ?? new Uint8Array();\n return message;\n },\n};\nexport interface RemoteApiService {\n PerformHttpCall(request: PerformHttpCallRequest): Promise<PerformHttpCallResponse>;\n GetOAuth2Info(request: GetOAuth2InfoRequest): Promise<GetOAuth2InfoResponse>;\n PerformTokenExchange(request: PerformTokenExchangeRequest): Promise<PerformTokenExchangeResponse>;\n RefreshToken(request: RefreshTokenRequest): Promise<RefreshTokenResponse>;\n PerformApiCall(request: PerformApiCallRequest): Promise<PerformApiCallResponse>;\n}\ndeclare var self: any | undefined;\ndeclare var window: any | undefined;\ndeclare var global: any | undefined;\nvar globalThis: any = (() => {\n if (typeof globalThis !== \"undefined\")\n return globalThis;\n if (typeof self !== \"undefined\")\n return self;\n if (typeof window !== \"undefined\")\n return window;\n if (typeof global !== \"undefined\")\n return global;\n throw \"Unable to locate global object\";\n})();\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\nexport type DeepPartial<T> = T extends Builtin ? T : T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {\n $case: string;\n} ? {\n [K in keyof Omit<T, \"$case\">]?: DeepPartial<T[K]>;\n} & {\n $case: T[\"$case\"];\n} : T extends {} ? {\n [K in keyof T]?: DeepPartial<T[K]>;\n} : Partial<T>;\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin ? P : P & {\n [K in keyof P]: Exact<P[K], I[K]>;\n} & Record<Exclude<keyof I, KeysOfUnion<P>>, never>;\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n return long.toNumber();\n}\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n"]}
@@ -20,10 +20,23 @@ export const defaultFetchHandlerFactory = Injectable("defaultFetchHandler", () =
20
20
  // elsewhere (e.g. so that callers can omit the second argument instead of being forced to pass undefined).
21
21
  new HandlerChainBuilder(fetch)
22
22
  .map(createDebugHandler())
23
+ // The 20-second per-request timeout is pretty arbitrary, it's just set to be longer than our API gateway
24
+ // timeout (15s) and lower than the browsers own timeout (variable, Chrome's is 5m).
25
+ .map(createTimeoutHandler({ timeout: 20 * 1000 }))
23
26
  .map(createNoCorsRetryingFetchHandler())
24
- .map(createRetryingHandler())
25
- // TODO: completely arbitrary timeout -- this should be configurable by consumers, and we should think
26
- // about a sane default timeout UX... it's probably less than 10 seconds.
27
- .map(createTimeoutHandler({ timeout: 10 * 1000 })).handler);
27
+ .map(createRetryingHandler({
28
+ maxRetries: 3,
29
+ retryPredicate: (responseOrError) => {
30
+ // Don't retry successful Responses or Responses with a 4xx HTTP status code (indicating a
31
+ // client error). Do retry all 5xx HTTP status codes.
32
+ if (responseOrError instanceof Response) {
33
+ if (responseOrError.ok)
34
+ return false;
35
+ if (responseOrError.status % 400 < 100)
36
+ return false;
37
+ }
38
+ return true;
39
+ },
40
+ })).handler);
28
41
  });
29
42
  //# sourceMappingURL=defaultFetchHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaultFetchHandler.js","sourceRoot":"","sources":["../../src/handlers/defaultFetchHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAIxD;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAC7E,OAAO;IACH,2FAA2F;IAC3F,wGAAwG;IACxG,2GAA2G;IAC3G,IAAI,mBAAmB,CAAiD,KAAK,CAAC;SACzE,GAAG,CAAC,kBAAkB,EAAE,CAAC;SACzB,GAAG,CAAC,gCAAgC,EAAE,CAAC;SACvC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAE7B,sGAAsG;QACtG,yEAAyE;SACxE,GAAG,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CACjE,CAAC;AACN,CAAC,CAAC,CAAC","sourcesContent":["import { Injectable } from \"../dependency-injection/Injectable\";\nimport { createDebugHandler } from \"./debugHandler\";\nimport { HandlerChainBuilder } from \"./HandlerChainBuilder\";\nimport { createNoCorsRetryingFetchHandler } from \"./noCorsRetryingFetchHandler\";\nimport { createRetryingHandler } from \"./retryingHandler\";\nimport { createTimeoutHandler } from \"./timeoutHandler\";\n\nexport type FetchHandler<R = Response> = (input: RequestInfo, init?: RequestInit) => Promise<R>;\n\n/**\n * The default Fetch implementation, used to make a simple HTTP requests without any custom headers. This can be passed\n * to `HandlerChainBuilder` to form the basis for other Fetch implementations (e.g. with custom headers, which extract\n * the Response body, etc.)\n *\n * Has support for retries, client-side timeout, and navigating federated auth flows that may not support CORs requests.\n *\n * @internal\n */\n\nexport const defaultFetchHandlerFactory = Injectable(\"defaultFetchHandler\", () => {\n return (\n // Safety: We're re-typing fetch's second argument from `init?: RequestInit | undefined` to\n // `init: RequestInit | void` – this is semantically equivalent, but the void makes for nicer ergonomics\n // elsewhere (e.g. so that callers can omit the second argument instead of being forced to pass undefined).\n new HandlerChainBuilder<RequestInfo, Response, RequestInit | undefined>(fetch)\n .map(createDebugHandler())\n .map(createNoCorsRetryingFetchHandler())\n .map(createRetryingHandler())\n\n // TODO: completely arbitrary timeout -- this should be configurable by consumers, and we should think\n // about a sane default timeout UX... it's probably less than 10 seconds.\n .map(createTimeoutHandler({ timeout: 10 * 1000 })).handler\n );\n});\n"]}
1
+ {"version":3,"file":"defaultFetchHandler.js","sourceRoot":"","sources":["../../src/handlers/defaultFetchHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAIxD;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAC7E,OAAO;IACH,2FAA2F;IAC3F,wGAAwG;IACxG,2GAA2G;IAC3G,IAAI,mBAAmB,CAAiD,KAAK,CAAC;SACzE,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAC1B,yGAAyG;QACzG,oFAAoF;SACnF,GAAG,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;SACjD,GAAG,CAAC,gCAAgC,EAAE,CAAC;SACvC,GAAG,CACA,qBAAqB,CAAC;QAClB,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,CAAC,eAAe,EAAE,EAAE;YAChC,0FAA0F;YAC1F,qDAAqD;YACrD,IAAI,eAAe,YAAY,QAAQ,EAAE;gBACrC,IAAI,eAAe,CAAC,EAAE;oBAAE,OAAO,KAAK,CAAC;gBACrC,IAAI,eAAe,CAAC,MAAM,GAAG,GAAG,GAAG,GAAG;oBAAE,OAAO,KAAK,CAAC;aACxD;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ,CAAC,CACL,CAAC,OAAO,CAChB,CAAC;AACN,CAAC,CAAC,CAAC","sourcesContent":["import { Injectable } from \"../dependency-injection/Injectable\";\nimport { createDebugHandler } from \"./debugHandler\";\nimport { HandlerChainBuilder } from \"./HandlerChainBuilder\";\nimport { createNoCorsRetryingFetchHandler } from \"./noCorsRetryingFetchHandler\";\nimport { createRetryingHandler } from \"./retryingHandler\";\nimport { createTimeoutHandler } from \"./timeoutHandler\";\n\nexport type FetchHandler<R = Response> = (input: RequestInfo, init?: RequestInit) => Promise<R>;\n\n/**\n * The default Fetch implementation, used to make a simple HTTP requests without any custom headers. This can be passed\n * to `HandlerChainBuilder` to form the basis for other Fetch implementations (e.g. with custom headers, which extract\n * the Response body, etc.)\n *\n * Has support for retries, client-side timeout, and navigating federated auth flows that may not support CORs requests.\n *\n * @internal\n */\n\nexport const defaultFetchHandlerFactory = Injectable(\"defaultFetchHandler\", () => {\n return (\n // Safety: We're re-typing fetch's second argument from `init?: RequestInit | undefined` to\n // `init: RequestInit | void` – this is semantically equivalent, but the void makes for nicer ergonomics\n // elsewhere (e.g. so that callers can omit the second argument instead of being forced to pass undefined).\n new HandlerChainBuilder<RequestInfo, Response, RequestInit | undefined>(fetch)\n .map(createDebugHandler())\n // The 20-second per-request timeout is pretty arbitrary, it's just set to be longer than our API gateway\n // timeout (15s) and lower than the browsers own timeout (variable, Chrome's is 5m).\n .map(createTimeoutHandler({ timeout: 20 * 1000 }))\n .map(createNoCorsRetryingFetchHandler())\n .map(\n createRetryingHandler({\n maxRetries: 3,\n retryPredicate: (responseOrError) => {\n // Don't retry successful Responses or Responses with a 4xx HTTP status code (indicating a\n // client error). Do retry all 5xx HTTP status codes.\n if (responseOrError instanceof Response) {\n if (responseOrError.ok) return false;\n if (responseOrError.status % 400 < 100) return false;\n }\n return true;\n },\n })\n ).handler\n );\n});\n"]}
package/lib/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from "./bootstrapCameraKit";
6
6
  export { extensionRequestContext } from "./extensions/extensionRequestContext";
7
7
  export { LensSource, LensSources, lensSourcesFactory } from "./extensions/LensSources";
8
8
  export { Uri, UriRequest, UriResponse, UriCancelRequest, UriHandler, UriHandlers, uriHandlersFactory, } from "./extensions/UriHandlers";
9
+ export { RemoteApiStatus, RemoteApiRequest, RemoteApiRequestHandler, RemoteApiResponse, RemoteApiService, RemoteApiServices, remoteApiServicesFactory, } from "./extensions/RemoteApiServices";
9
10
  export { CameraKit, CreateSessionOptions, LensMetricsEvents } from "./CameraKit";
10
11
  export { LensView } from "./metrics/reporters/reportLensView";
11
12
  export { LensWait } from "./metrics/reporters/reportLensWait";
package/lib/index.js CHANGED
@@ -9,6 +9,7 @@ export * from "./bootstrapCameraKit";
9
9
  export { extensionRequestContext } from "./extensions/extensionRequestContext";
10
10
  export { LensSources, lensSourcesFactory } from "./extensions/LensSources";
11
11
  export { uriHandlersFactory, } from "./extensions/UriHandlers";
12
+ export { remoteApiServicesFactory, } from "./extensions/RemoteApiServices";
12
13
  export { CameraKit } from "./CameraKit";
13
14
  export { cameraKitUserAgent } from "./common/cameraKitUserAgent";
14
15
  export { toPublicLens } from "./lens/Lens";
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,YAAY,MAAM,6BAA6B,CAAC;AACvD,OAAO,CAAC,IAAI,CAAC,QAAQ,WAAW,CAAC,eAAe;GAC7C,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,WAAW,GAAG,CAAC,CAAC;AAGxD,OAAO,EAA2D,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9G,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EACH,uBAAuB,GAG1B,MAAM,4CAA4C,CAAC;AACpD,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAc,WAAW,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAOH,kBAAkB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA2C,MAAM,aAAa,CAAC;AAGjF,OAAO,EAAE,kBAAkB,EAAsB,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAQ,YAAY,EAAqB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAe,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAC;AAC5F,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,0BAA0B,EAAwB,MAAM,sCAAsC,CAAC;AACxG,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC","sourcesContent":["import environment from \"./environment.json\";\nimport lensCoreWasm from \"./lensCoreWasmVersions.json\";\nconsole.info(`SDK: ${environment.PACKAGE_VERSION} \\\n(${lensCoreWasm.version}/${lensCoreWasm.buildNumber})`);\n\nexport { Keyboard, KeyboardEvents } from \"./session/LensKeyboard\";\nexport { CameraKitConfiguration, CameraKitBootstrapConfiguration, configurationToken } from \"./configuration\";\nexport { getRequiredBootstrapURLs } from \"./lens-core-module/loader/lensCoreFactory\";\nexport {\n estimateLensPerformance,\n EstimatedLensPerformance,\n LensPerformanceCluster,\n} from \"./benchmark/estimateLensPerformanceCluster\";\nexport * from \"./bootstrapCameraKit\";\nexport { extensionRequestContext } from \"./extensions/extensionRequestContext\";\nexport { LensSource, LensSources, lensSourcesFactory } from \"./extensions/LensSources\";\nexport {\n Uri,\n UriRequest,\n UriResponse,\n UriCancelRequest,\n UriHandler,\n UriHandlers,\n uriHandlersFactory,\n} from \"./extensions/UriHandlers\";\nexport { CameraKit, CreateSessionOptions, LensMetricsEvents } from \"./CameraKit\";\nexport { LensView } from \"./metrics/reporters/reportLensView\";\nexport { LensWait } from \"./metrics/reporters/reportLensWait\";\nexport { cameraKitUserAgent, CameraKitUserAgent } from \"./common/cameraKitUserAgent\";\nexport { Lens, toPublicLens, Snapcode, Preview } from \"./lens/Lens\";\nexport { AssetTiming, LensRepository } from \"./lens/LensRepository\";\nexport { LensLaunchParams } from \"./lens/LensLaunchParams\";\nexport { AssetLoader } from \"./lens/assets/LensAssetRepository\";\nexport { remoteMediaAssetLoaderFactory } from \"./lens/assets/remoteMediaAssetLoaderFactory\";\nexport * from \"./media-sources/CameraKitSource\";\nexport * from \"./media-sources/MediaStreamSource\";\nexport * from \"./media-sources/FunctionSource\";\nexport * from \"./media-sources/VideoSource\";\nexport * from \"./media-sources/ImageSource\";\nexport * from \"./session/CameraKitSession\";\nexport { CameraKitSessionEvents, CameraKitSessionEventListener } from \"./session/CameraKitSessionEvents\";\nexport { Injectable } from \"./dependency-injection/Injectable\";\nexport { PartialContainer } from \"./dependency-injection/PartialContainer\";\nexport * from \"./transforms\";\nexport * from \"./namedErrors\";\nexport { LensPerformanceMeasurement, ComputedFrameMetrics } from \"./session/LensPerformanceMeasurement\";\nexport { LensPerformanceMetrics } from \"./session/LensPerformanceMetrics\";\nexport { TypedCustomEvent } from \"./events/TypedCustomEvent\";\nexport { TypedEventTarget } from \"./events/TypedEventTarget\";\nexport { namedError } from \"./namedErrors\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,YAAY,MAAM,6BAA6B,CAAC;AACvD,OAAO,CAAC,IAAI,CAAC,QAAQ,WAAW,CAAC,eAAe;GAC7C,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,WAAW,GAAG,CAAC,CAAC;AAGxD,OAAO,EAA2D,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9G,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EACH,uBAAuB,GAG1B,MAAM,4CAA4C,CAAC;AACpD,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAc,WAAW,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAOH,kBAAkB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAOH,wBAAwB,GAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,SAAS,EAA2C,MAAM,aAAa,CAAC;AAGjF,OAAO,EAAE,kBAAkB,EAAsB,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAQ,YAAY,EAAqB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAe,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAC;AAC5F,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,0BAA0B,EAAwB,MAAM,sCAAsC,CAAC;AACxG,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC","sourcesContent":["import environment from \"./environment.json\";\nimport lensCoreWasm from \"./lensCoreWasmVersions.json\";\nconsole.info(`SDK: ${environment.PACKAGE_VERSION} \\\n(${lensCoreWasm.version}/${lensCoreWasm.buildNumber})`);\n\nexport { Keyboard, KeyboardEvents } from \"./session/LensKeyboard\";\nexport { CameraKitConfiguration, CameraKitBootstrapConfiguration, configurationToken } from \"./configuration\";\nexport { getRequiredBootstrapURLs } from \"./lens-core-module/loader/lensCoreFactory\";\nexport {\n estimateLensPerformance,\n EstimatedLensPerformance,\n LensPerformanceCluster,\n} from \"./benchmark/estimateLensPerformanceCluster\";\nexport * from \"./bootstrapCameraKit\";\nexport { extensionRequestContext } from \"./extensions/extensionRequestContext\";\nexport { LensSource, LensSources, lensSourcesFactory } from \"./extensions/LensSources\";\nexport {\n Uri,\n UriRequest,\n UriResponse,\n UriCancelRequest,\n UriHandler,\n UriHandlers,\n uriHandlersFactory,\n} from \"./extensions/UriHandlers\";\nexport {\n RemoteApiStatus,\n RemoteApiRequest,\n RemoteApiRequestHandler,\n RemoteApiResponse,\n RemoteApiService,\n RemoteApiServices,\n remoteApiServicesFactory,\n} from \"./extensions/RemoteApiServices\";\nexport { CameraKit, CreateSessionOptions, LensMetricsEvents } from \"./CameraKit\";\nexport { LensView } from \"./metrics/reporters/reportLensView\";\nexport { LensWait } from \"./metrics/reporters/reportLensWait\";\nexport { cameraKitUserAgent, CameraKitUserAgent } from \"./common/cameraKitUserAgent\";\nexport { Lens, toPublicLens, Snapcode, Preview } from \"./lens/Lens\";\nexport { AssetTiming, LensRepository } from \"./lens/LensRepository\";\nexport { LensLaunchParams } from \"./lens/LensLaunchParams\";\nexport { AssetLoader } from \"./lens/assets/LensAssetRepository\";\nexport { remoteMediaAssetLoaderFactory } from \"./lens/assets/remoteMediaAssetLoaderFactory\";\nexport * from \"./media-sources/CameraKitSource\";\nexport * from \"./media-sources/MediaStreamSource\";\nexport * from \"./media-sources/FunctionSource\";\nexport * from \"./media-sources/VideoSource\";\nexport * from \"./media-sources/ImageSource\";\nexport * from \"./session/CameraKitSession\";\nexport { CameraKitSessionEvents, CameraKitSessionEventListener } from \"./session/CameraKitSessionEvents\";\nexport { Injectable } from \"./dependency-injection/Injectable\";\nexport { PartialContainer } from \"./dependency-injection/PartialContainer\";\nexport * from \"./transforms\";\nexport * from \"./namedErrors\";\nexport { LensPerformanceMeasurement, ComputedFrameMetrics } from \"./session/LensPerformanceMeasurement\";\nexport { LensPerformanceMetrics } from \"./session/LensPerformanceMetrics\";\nexport { TypedCustomEvent } from \"./events/TypedCustomEvent\";\nexport { TypedEventTarget } from \"./events/TypedEventTarget\";\nexport { namedError } from \"./namedErrors\";\n"]}
@@ -123,7 +123,7 @@ export const legalStateFactory = Injectable("legalState", [remoteConfigurationFa
123
123
  logger.error(error);
124
124
  return of(defaultLegalPrompt);
125
125
  })),
126
- initConfig: remoteConfig.getIntializationConfig().pipe(catchError((error) => {
126
+ initConfig: remoteConfig.getInitializationConfig().pipe(catchError((error) => {
127
127
  logger.error(error);
128
128
  return of(defaultInitConfig);
129
129
  })),
@@ -1 +1 @@
1
- {"version":3,"file":"legalState.js","sourceRoot":"","sources":["../../src/legal/legalState.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n defineAction,\n defineActions,\n defineState,\n defineStates,\n dispatch,\n forActions,\n inStates,\n StateMachine,\n} from \"@snap/state-management\";\nimport { catchError, forkJoin, from, map, merge, of, switchMap } from \"rxjs\";\nimport { Injectable } from \"../dependency-injection/Injectable\";\nimport {\n LegalDocument,\n LegalDocument_Type,\n LegalPrompt as LegalPromptProto,\n} from \"../generated-proto/pb_schema/camera_kit/v3/legal_prompt\";\nimport { ConfigResult } from \"../generated-proto/pb_schema/cdp/cof/config_result\";\nimport { getLogger } from \"../logger/logger\";\nimport { ExpiringPersistence } from \"../persistence/ExpiringPersistence\";\nimport { IndexedDBPersistence } from \"../persistence/IndexedDBPersistence\";\nimport { RemoteConfiguration, remoteConfigurationFactory } from \"../remote-configuration/remoteConfiguration\";\nimport { GetInitializationConfigResponse } from \"../generated-proto/pb_schema/camera_kit/v3/service\";\nimport { LegalPromptFactory, legalPromptFactory } from \"./legalPrompt\";\n\nconst logger = getLogger(\"LegalState\");\n\ntype SupportedDocumentType =\n | LegalDocument_Type.PRIVACY_POLICY\n | LegalDocument_Type.TERMS_OF_SERVICE\n | LegalDocument_Type.LEARN_MORE;\n\n/**\n * We store a hash of the last accepted ToS content. This is how we determine if the user previously accepted the\n * relevant ToS.\n *\n * ToS acceptance is only valid for 12 hours. That is, if legal status is checked and the last acceptance occurred more\n * than 12 hours ago, the user must be prompted to accept again.\n */\nconst tosContentHashExpiry = 12 * 60 * 60;\nconst tosContentHashKey = \"lastAcceptedTosContentHash\";\n\nconst createLegalState = () => {\n const states = defineStates(defineState(\"unknown\")(), defineState(\"accepted\")(), defineState(\"rejected\")());\n\n const actions = defineActions(\n defineAction(\"requestLegalPrompt\")(),\n defineAction(\"accept\")<string>(),\n defineAction(\"reject\")<string>()\n );\n\n return new StateMachine(actions, states, states.unknown(), (actions) => {\n return merge(\n actions.pipe(\n inStates(\"unknown\"),\n forActions(\"accept\"),\n map(() => states.accepted())\n ),\n actions.pipe(\n inStates(\"unknown\"),\n forActions(\"reject\"),\n map(() => states.rejected())\n ),\n\n // We don't treat \"rejected\" as a terminal state -- if we get another request to display the legal prompt,\n // even though we're in the rejected state, we'll transition back to unknown and the prompt will be shown.\n //\n // Conversely, we do treat \"accepted\" as a terminal state -- we will not transition back to unknown or\n // show the legal prompt if we're already in accepted state, even if we get a request to display the prompt.\n actions.pipe(\n inStates(\"rejected\"),\n forActions(\"requestLegalPrompt\"),\n map(() => states.unknown())\n )\n );\n });\n};\n\nconst defaultLegalDocumentDate = new Date(\"2021-09-30T00:00:00+00:00\");\nconst defaultLegalPrompt = LegalPromptProto.fromPartial({\n documents: [\n LegalDocument.fromPartial({\n type: LegalDocument_Type.PRIVACY_POLICY,\n webUrl: \"https://values.snap.com/privacy/privacy-policy\",\n version: \"1\",\n timestamp: defaultLegalDocumentDate,\n }),\n LegalDocument.fromPartial({\n type: LegalDocument_Type.TERMS_OF_SERVICE,\n webUrl: \"https://snap.com/terms\",\n version: \"1\",\n timestamp: defaultLegalDocumentDate,\n }),\n LegalDocument.fromPartial({\n type: LegalDocument_Type.LEARN_MORE,\n webUrl: \"https://support.snapchat.com/article/camera-information-use\",\n version: \"1\",\n timestamp: defaultLegalDocumentDate,\n }),\n ],\n // By default, we adopt a fail-open approach, which means that if COF fails,\n // we do not display ToS for the following reasons:\n // 1. It provides better experince for big partners with ToS disabled\n // 2. It has minimal risk\n disabled: true,\n});\n\nconst defaultInitConfig = GetInitializationConfigResponse.fromPartial({});\n\nconst hasAnyValue = (c: ConfigResult): c is ConfigResult & { value: { anyValue: { value: Uint8Array } } } => {\n return c.value?.anyValue?.value instanceof Uint8Array;\n};\n\nconst getDocumentOrDefault =\n (documents: LegalDocument[]) =>\n <T extends SupportedDocumentType>(type: T): LegalDocument & { type: T } => {\n return (documents.find((d) => d.type === type) ??\n defaultLegalPrompt.documents.find((d) => d.type === type)!) as LegalDocument & { type: T };\n };\n\nexport type LegalState = ReturnType<typeof createLegalState>;\n\n/**\n * We maintain the state of the user's acceptance of Snap's various legal documents. Other components may require that\n * the legal state be \"accepted\" before proceeding (e.g. to apply a lens).\n *\n * On page load, the legal state starts as \"unknown.\" If a request is made to determine the legal state, the following\n * business logic is implemented:\n *\n * 1. Download remote COF config value containing the legal documents + a `disabled` field to optionally skip the legal\n * requirement.\n * 2. Check for a `lastAcceptedTosContentHash` stored in IndexedDB.\n * 3. Prompt the user to accept/reject the legal documents.\n *\n * ┌────────────────────────────────────────────────────────┐\n * │ COF config value includes \"disabled: true\" │\n * └────────────────────────────────────────────────────────┘\n * │\n * │\n * ┌────────No────────────┴────────────Yes──────────────────┐\n * │ │\n * ▼ │\n * ┌────────────────────────────────────┐ ▼\n * │\"lastAcceptedTosContentHash\" exists │ ┌────────────┐\n * └────────────────────────────────────┘ │ Skip ToS │\n * │ └────────────┘\n * │ ▲\n * ┌─────────────No───┴───────Yes────────────┐ │\n * │ │ │\n * │ │ │\n * ▼ ▼ │\n * ┌────────────┐ ┌────────────────────────────────────────┐ │\n * │ Show ToS │ │ Hash of ToS content from COF matches │ │\n * └────────────┘ │ \"lastAcceptedTosContentHash\" │ │\n * ▲ └────────────────────────────────────────┘ │\n * │ │ │\n * │ │ │\n * └──────────────────No─────────────────────┴───────────────────Yes───────────┘\n *\n * @internal\n */\nexport const legalStateFactory = Injectable(\n \"legalState\",\n [remoteConfigurationFactory.token, legalPromptFactory.token] as const,\n (remoteConfig: RemoteConfiguration, legalPrompt: LegalPromptFactory): LegalState => {\n const persistance = new ExpiringPersistence<string>(\n () => tosContentHashExpiry,\n new IndexedDBPersistence({ databaseName: \"Legal\" })\n );\n const getLastAcceptedTosContentHash = () =>\n from(persistance.retrieve(tosContentHashKey).catch((error) => logger.warn(error)));\n\n const setLastAcceptedTosContentHash = (hash: string) =>\n persistance.store(tosContentHashKey, hash).catch((error) => logger.warn(error));\n\n const legalState = createLegalState();\n\n legalState.events\n .pipe(\n inStates(\"unknown\"),\n forActions(\"requestLegalPrompt\"),\n switchMap(() =>\n forkJoin({\n cofConfig: remoteConfig.get(\"CAMERA_KIT_LEGAL_PROMPT\").pipe(\n map((configResults) => {\n const config = configResults.find(hasAnyValue);\n if (!config) return defaultLegalPrompt;\n return LegalPromptProto.decode(config.value.anyValue.value);\n }),\n catchError((error) => {\n logger.error(error);\n return of(defaultLegalPrompt);\n })\n ),\n initConfig: remoteConfig.getIntializationConfig().pipe(\n catchError((error) => {\n logger.error(error);\n return of(defaultInitConfig);\n })\n ),\n })\n ),\n switchMap(({ cofConfig, initConfig }) => {\n // NOTE: Currently, we check two sources to determine whether ToS is disabled or not:\n // COF and initConfig. Legal document links are pulled only from COF (or defaults),\n // because initConfig has not been implemented yet. In the future, we may choose\n // to exclusively use initConfig, which could incorporate the COF call internally:\n // https://jira.sc-corp.net/browse/CAMKIT-4791\n\n if (initConfig.legalPrompt?.disabled) {\n return of(legalState.actions.accept(\"disabled\"));\n }\n\n if (cofConfig.disabled) {\n return of(legalState.actions.accept(\"disabled\"));\n }\n\n const documentOfType = getDocumentOrDefault(cofConfig.documents);\n const prompt = legalPrompt(\n documentOfType(LegalDocument_Type.PRIVACY_POLICY),\n documentOfType(LegalDocument_Type.TERMS_OF_SERVICE),\n documentOfType(LegalDocument_Type.LEARN_MORE),\n initConfig.childrenProtectionActRestricted\n );\n\n return getLastAcceptedTosContentHash().pipe(\n switchMap((lastAcceptedTosContentHash) => {\n if (prompt.contentHash === lastAcceptedTosContentHash) return of(true);\n\n // Delegate prompting the end-user to accept/reject the legal documents. This returns with\n // a Promise<boolean> indicating accept/reject.\n return prompt.show();\n }),\n map((didAccept) => {\n if (!didAccept) return legalState.actions.reject(prompt.contentHash);\n setLastAcceptedTosContentHash(prompt.contentHash);\n return legalState.actions.accept(prompt.contentHash);\n })\n );\n }),\n dispatch(legalState)\n )\n .subscribe({\n error: logger.error,\n });\n\n return legalState;\n }\n);\n"]}
1
+ {"version":3,"file":"legalState.js","sourceRoot":"","sources":["../../src/legal/legalState.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n defineAction,\n defineActions,\n defineState,\n defineStates,\n dispatch,\n forActions,\n inStates,\n StateMachine,\n} from \"@snap/state-management\";\nimport { catchError, forkJoin, from, map, merge, of, switchMap } from \"rxjs\";\nimport { Injectable } from \"../dependency-injection/Injectable\";\nimport {\n LegalDocument,\n LegalDocument_Type,\n LegalPrompt as LegalPromptProto,\n} from \"../generated-proto/pb_schema/camera_kit/v3/legal_prompt\";\nimport { ConfigResult } from \"../generated-proto/pb_schema/cdp/cof/config_result\";\nimport { getLogger } from \"../logger/logger\";\nimport { ExpiringPersistence } from \"../persistence/ExpiringPersistence\";\nimport { IndexedDBPersistence } from \"../persistence/IndexedDBPersistence\";\nimport { RemoteConfiguration, remoteConfigurationFactory } from \"../remote-configuration/remoteConfiguration\";\nimport { GetInitializationConfigResponse } from \"../generated-proto/pb_schema/camera_kit/v3/service\";\nimport { LegalPromptFactory, legalPromptFactory } from \"./legalPrompt\";\n\nconst logger = getLogger(\"LegalState\");\n\ntype SupportedDocumentType =\n | LegalDocument_Type.PRIVACY_POLICY\n | LegalDocument_Type.TERMS_OF_SERVICE\n | LegalDocument_Type.LEARN_MORE;\n\n/**\n * We store a hash of the last accepted ToS content. This is how we determine if the user previously accepted the\n * relevant ToS.\n *\n * ToS acceptance is only valid for 12 hours. That is, if legal status is checked and the last acceptance occurred more\n * than 12 hours ago, the user must be prompted to accept again.\n */\nconst tosContentHashExpiry = 12 * 60 * 60;\nconst tosContentHashKey = \"lastAcceptedTosContentHash\";\n\nconst createLegalState = () => {\n const states = defineStates(defineState(\"unknown\")(), defineState(\"accepted\")(), defineState(\"rejected\")());\n\n const actions = defineActions(\n defineAction(\"requestLegalPrompt\")(),\n defineAction(\"accept\")<string>(),\n defineAction(\"reject\")<string>()\n );\n\n return new StateMachine(actions, states, states.unknown(), (actions) => {\n return merge(\n actions.pipe(\n inStates(\"unknown\"),\n forActions(\"accept\"),\n map(() => states.accepted())\n ),\n actions.pipe(\n inStates(\"unknown\"),\n forActions(\"reject\"),\n map(() => states.rejected())\n ),\n\n // We don't treat \"rejected\" as a terminal state -- if we get another request to display the legal prompt,\n // even though we're in the rejected state, we'll transition back to unknown and the prompt will be shown.\n //\n // Conversely, we do treat \"accepted\" as a terminal state -- we will not transition back to unknown or\n // show the legal prompt if we're already in accepted state, even if we get a request to display the prompt.\n actions.pipe(\n inStates(\"rejected\"),\n forActions(\"requestLegalPrompt\"),\n map(() => states.unknown())\n )\n );\n });\n};\n\nconst defaultLegalDocumentDate = new Date(\"2021-09-30T00:00:00+00:00\");\nconst defaultLegalPrompt = LegalPromptProto.fromPartial({\n documents: [\n LegalDocument.fromPartial({\n type: LegalDocument_Type.PRIVACY_POLICY,\n webUrl: \"https://values.snap.com/privacy/privacy-policy\",\n version: \"1\",\n timestamp: defaultLegalDocumentDate,\n }),\n LegalDocument.fromPartial({\n type: LegalDocument_Type.TERMS_OF_SERVICE,\n webUrl: \"https://snap.com/terms\",\n version: \"1\",\n timestamp: defaultLegalDocumentDate,\n }),\n LegalDocument.fromPartial({\n type: LegalDocument_Type.LEARN_MORE,\n webUrl: \"https://support.snapchat.com/article/camera-information-use\",\n version: \"1\",\n timestamp: defaultLegalDocumentDate,\n }),\n ],\n // By default, we adopt a fail-open approach, which means that if COF fails,\n // we do not display ToS for the following reasons:\n // 1. It provides better experince for big partners with ToS disabled\n // 2. It has minimal risk\n disabled: true,\n});\n\nconst defaultInitConfig = GetInitializationConfigResponse.fromPartial({});\n\nconst hasAnyValue = (c: ConfigResult): c is ConfigResult & { value: { anyValue: { value: Uint8Array } } } => {\n return c.value?.anyValue?.value instanceof Uint8Array;\n};\n\nconst getDocumentOrDefault =\n (documents: LegalDocument[]) =>\n <T extends SupportedDocumentType>(type: T): LegalDocument & { type: T } => {\n return (documents.find((d) => d.type === type) ??\n defaultLegalPrompt.documents.find((d) => d.type === type)!) as LegalDocument & { type: T };\n };\n\nexport type LegalState = ReturnType<typeof createLegalState>;\n\n/**\n * We maintain the state of the user's acceptance of Snap's various legal documents. Other components may require that\n * the legal state be \"accepted\" before proceeding (e.g. to apply a lens).\n *\n * On page load, the legal state starts as \"unknown.\" If a request is made to determine the legal state, the following\n * business logic is implemented:\n *\n * 1. Download remote COF config value containing the legal documents + a `disabled` field to optionally skip the legal\n * requirement.\n * 2. Check for a `lastAcceptedTosContentHash` stored in IndexedDB.\n * 3. Prompt the user to accept/reject the legal documents.\n *\n * ┌────────────────────────────────────────────────────────┐\n * │ COF config value includes \"disabled: true\" │\n * └────────────────────────────────────────────────────────┘\n * │\n * │\n * ┌────────No────────────┴────────────Yes──────────────────┐\n * │ │\n * ▼ │\n * ┌────────────────────────────────────┐ ▼\n * │\"lastAcceptedTosContentHash\" exists │ ┌────────────┐\n * └────────────────────────────────────┘ │ Skip ToS │\n * │ └────────────┘\n * │ ▲\n * ┌─────────────No───┴───────Yes────────────┐ │\n * │ │ │\n * │ │ │\n * ▼ ▼ │\n * ┌────────────┐ ┌────────────────────────────────────────┐ │\n * │ Show ToS │ │ Hash of ToS content from COF matches │ │\n * └────────────┘ │ \"lastAcceptedTosContentHash\" │ │\n * ▲ └────────────────────────────────────────┘ │\n * │ │ │\n * │ │ │\n * └──────────────────No─────────────────────┴───────────────────Yes───────────┘\n *\n * @internal\n */\nexport const legalStateFactory = Injectable(\n \"legalState\",\n [remoteConfigurationFactory.token, legalPromptFactory.token] as const,\n (remoteConfig: RemoteConfiguration, legalPrompt: LegalPromptFactory): LegalState => {\n const persistance = new ExpiringPersistence<string>(\n () => tosContentHashExpiry,\n new IndexedDBPersistence({ databaseName: \"Legal\" })\n );\n const getLastAcceptedTosContentHash = () =>\n from(persistance.retrieve(tosContentHashKey).catch((error) => logger.warn(error)));\n\n const setLastAcceptedTosContentHash = (hash: string) =>\n persistance.store(tosContentHashKey, hash).catch((error) => logger.warn(error));\n\n const legalState = createLegalState();\n\n legalState.events\n .pipe(\n inStates(\"unknown\"),\n forActions(\"requestLegalPrompt\"),\n switchMap(() =>\n forkJoin({\n cofConfig: remoteConfig.get(\"CAMERA_KIT_LEGAL_PROMPT\").pipe(\n map((configResults) => {\n const config = configResults.find(hasAnyValue);\n if (!config) return defaultLegalPrompt;\n return LegalPromptProto.decode(config.value.anyValue.value);\n }),\n catchError((error) => {\n logger.error(error);\n return of(defaultLegalPrompt);\n })\n ),\n initConfig: remoteConfig.getInitializationConfig().pipe(\n catchError((error) => {\n logger.error(error);\n return of(defaultInitConfig);\n })\n ),\n })\n ),\n switchMap(({ cofConfig, initConfig }) => {\n // NOTE: Currently, we check two sources to determine whether ToS is disabled or not:\n // COF and initConfig. Legal document links are pulled only from COF (or defaults),\n // because initConfig has not been implemented yet. In the future, we may choose\n // to exclusively use initConfig, which could incorporate the COF call internally:\n // https://jira.sc-corp.net/browse/CAMKIT-4791\n\n if (initConfig.legalPrompt?.disabled) {\n return of(legalState.actions.accept(\"disabled\"));\n }\n\n if (cofConfig.disabled) {\n return of(legalState.actions.accept(\"disabled\"));\n }\n\n const documentOfType = getDocumentOrDefault(cofConfig.documents);\n const prompt = legalPrompt(\n documentOfType(LegalDocument_Type.PRIVACY_POLICY),\n documentOfType(LegalDocument_Type.TERMS_OF_SERVICE),\n documentOfType(LegalDocument_Type.LEARN_MORE),\n initConfig.childrenProtectionActRestricted\n );\n\n return getLastAcceptedTosContentHash().pipe(\n switchMap((lastAcceptedTosContentHash) => {\n if (prompt.contentHash === lastAcceptedTosContentHash) return of(true);\n\n // Delegate prompting the end-user to accept/reject the legal documents. This returns with\n // a Promise<boolean> indicating accept/reject.\n return prompt.show();\n }),\n map((didAccept) => {\n if (!didAccept) return legalState.actions.reject(prompt.contentHash);\n setLastAcceptedTosContentHash(prompt.contentHash);\n return legalState.actions.accept(prompt.contentHash);\n })\n );\n }),\n dispatch(legalState)\n )\n .subscribe({\n error: logger.error,\n });\n\n return legalState;\n }\n);\n"]}
@@ -1,6 +1,18 @@
1
1
  import { __awaiter } from "tslib";
2
+ import { encodeKnownAnyJson } from "../common/any";
2
3
  import { isGetGroupResponse, isLensProto } from "./Lens";
3
4
  const relativePath = "/com.snap.camerakit.v3.Lenses";
5
+ function fixAny(lens) {
6
+ // The Lens is serialized into JSON by the CameraKit backend, which is vulnerable
7
+ // to serialization discrepancies between the backend and ts-proto generated serializers.
8
+ // See packages/web-sdk/src/common/any.ts
9
+ const featureMetadata = lens.featureMetadata.reduce((fixedAnys, anyToFix) => {
10
+ // Safety: anyToFix is actually AnyJson, due to how our backend serializes it
11
+ const fixedAny = encodeKnownAnyJson(anyToFix);
12
+ return fixedAny ? [...fixedAnys, fixedAny] : fixedAnys;
13
+ }, []);
14
+ return Object.assign(Object.assign({}, lens), { featureMetadata });
15
+ }
4
16
  function getRequestId(res) {
5
17
  return res.headers.get("x-request-id");
6
18
  }
@@ -10,10 +22,15 @@ export function retrieveCameraKitLens(httpClient, lensId, groupId, apiHostname)
10
22
  const response = yield httpClient(url, { credentials: "include" });
11
23
  const body = yield response.json();
12
24
  const lens = body.lens;
25
+ if (!response.ok) {
26
+ throw new Error(`Cannot load lens ${lensId} in group ${groupId}. GetGroupLens responded with status ` +
27
+ `${response.status} and body:\n\t${JSON.stringify(body)} for requestId ${getRequestId(response)}`);
28
+ }
13
29
  if (!isLensProto(lens)) {
14
- throw new Error(`Expected request to ${url} to return a Lens. Got:\n\n${JSON.stringify(body)} with request-id of "${getRequestId(response)}"`);
30
+ throw new Error(`Cannot load lens ${lensId} in group ${groupId}. The response was not a Lens:` +
31
+ `\n\t${JSON.stringify(body)} for requestId ${getRequestId(response)}`);
15
32
  }
16
- return lens;
33
+ return fixAny(lens);
17
34
  });
18
35
  }
19
36
  export function retrieveCameraKitLensGroup(httpClient, groupId, apiHostname) {
@@ -21,10 +38,15 @@ export function retrieveCameraKitLensGroup(httpClient, groupId, apiHostname) {
21
38
  const url = `https://${apiHostname}${relativePath}/groups/${groupId}`;
22
39
  const response = yield httpClient(url, { credentials: "include" });
23
40
  const body = yield response.json();
41
+ if (!response.ok) {
42
+ throw new Error(`Cannot load lens group ${groupId}. GetGroup responded with status ` +
43
+ `${response.status} and body:\n\t${JSON.stringify(body)} for requestId ${getRequestId(response)}`);
44
+ }
24
45
  if (!isGetGroupResponse(body)) {
25
- throw new Error(`Expected request to ${url} to return a LensGroup. Got:\n\n${JSON.stringify(body)} with request-id of "${getRequestId(response)}"`);
46
+ throw new Error(`Cannot load lens group ${groupId}. The response was not a LensGroup:` +
47
+ `\n\t${JSON.stringify(body)} for requestId ${getRequestId(response)}`);
26
48
  }
27
- return body.lenses;
49
+ return body.lenses.map(fixAny);
28
50
  });
29
51
  }
30
52
  //# sourceMappingURL=lensHttpUtil.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lensHttpUtil.js","sourceRoot":"","sources":["../../src/lens/lensHttpUtil.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAa,MAAM,QAAQ,CAAC;AAEpE,MAAM,YAAY,GAAG,+BAA+B,CAAC;AAErD,SAAS,YAAY,CAAC,GAAa;IAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAgB,qBAAqB,CACvC,UAAwB,EACxB,MAAc,EACd,OAAe,EACf,WAAiC;;QAEjC,MAAM,GAAG,GAAG,WAAW,WAAW,GAAG,YAAY,WAAW,OAAO,WAAW,MAAM,EAAE,CAAC;QACvF,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACpB,MAAM,IAAI,KAAK,CACX,uBAAuB,GAAG,8BAA8B,IAAI,CAAC,SAAS,CAClE,IAAI,CACP,wBAAwB,YAAY,CAAC,QAAQ,CAAC,GAAG,CACrD,CAAC;SACL;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CAAA;AAED,MAAM,UAAgB,0BAA0B,CAC5C,UAAwB,EACxB,OAAe,EACf,WAAiC;;QAEjC,MAAM,GAAG,GAAG,WAAW,WAAW,GAAG,YAAY,WAAW,OAAO,EAAE,CAAC;QACtE,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CACX,uBAAuB,GAAG,mCAAmC,IAAI,CAAC,SAAS,CACvE,IAAI,CACP,wBAAwB,YAAY,CAAC,QAAQ,CAAC,GAAG,CACrD,CAAC;SACL;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CAAA","sourcesContent":["import { CameraKitApiHostname } from \"../configuration\";\nimport { FetchHandler } from \"../handlers/defaultFetchHandler\";\nimport { isGetGroupResponse, isLensProto, LensProto } from \"./Lens\";\n\nconst relativePath = \"/com.snap.camerakit.v3.Lenses\";\n\nfunction getRequestId(res: Response) {\n return res.headers.get(\"x-request-id\");\n}\n\nexport async function retrieveCameraKitLens(\n httpClient: FetchHandler,\n lensId: string,\n groupId: string,\n apiHostname: CameraKitApiHostname\n): Promise<LensProto> {\n const url = `https://${apiHostname}${relativePath}/groups/${groupId}/lenses/${lensId}`;\n const response = await httpClient(url, { credentials: \"include\" });\n const body = await response.json();\n const lens = body.lens;\n if (!isLensProto(lens)) {\n throw new Error(\n `Expected request to ${url} to return a Lens. Got:\\n\\n${JSON.stringify(\n body\n )} with request-id of \"${getRequestId(response)}\"`\n );\n }\n return lens;\n}\n\nexport async function retrieveCameraKitLensGroup(\n httpClient: FetchHandler,\n groupId: string,\n apiHostname: CameraKitApiHostname\n): Promise<LensProto[]> {\n const url = `https://${apiHostname}${relativePath}/groups/${groupId}`;\n const response = await httpClient(url, { credentials: \"include\" });\n const body = await response.json();\n if (!isGetGroupResponse(body)) {\n throw new Error(\n `Expected request to ${url} to return a LensGroup. Got:\\n\\n${JSON.stringify(\n body\n )} with request-id of \"${getRequestId(response)}\"`\n );\n }\n return body.lenses;\n}\n"]}
1
+ {"version":3,"file":"lensHttpUtil.js","sourceRoot":"","sources":["../../src/lens/lensHttpUtil.ts"],"names":[],"mappings":"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","sourcesContent":["import { AnyJson, encodeKnownAnyJson } from \"../common/any\";\nimport { Any } from \"../generated-proto/pb_schema/google/protobuf/any\";\nimport { CameraKitApiHostname } from \"../configuration\";\nimport { FetchHandler } from \"../handlers/defaultFetchHandler\";\nimport { isGetGroupResponse, isLensProto, LensProto } from \"./Lens\";\n\nconst relativePath = \"/com.snap.camerakit.v3.Lenses\";\n\nfunction fixAny(lens: LensProto): LensProto {\n // The Lens is serialized into JSON by the CameraKit backend, which is vulnerable\n // to serialization discrepancies between the backend and ts-proto generated serializers.\n // See packages/web-sdk/src/common/any.ts\n const featureMetadata = lens.featureMetadata.reduce((fixedAnys, anyToFix) => {\n // Safety: anyToFix is actually AnyJson, due to how our backend serializes it\n const fixedAny = encodeKnownAnyJson(anyToFix as unknown as AnyJson);\n return fixedAny ? [...fixedAnys, fixedAny] : fixedAnys;\n }, [] as Any[]);\n\n return {\n ...lens,\n featureMetadata,\n };\n}\n\nfunction getRequestId(res: Response) {\n return res.headers.get(\"x-request-id\");\n}\n\nexport async function retrieveCameraKitLens(\n httpClient: FetchHandler,\n lensId: string,\n groupId: string,\n apiHostname: CameraKitApiHostname\n): Promise<LensProto> {\n const url = `https://${apiHostname}${relativePath}/groups/${groupId}/lenses/${lensId}`;\n const response = await httpClient(url, { credentials: \"include\" });\n const body = await response.json();\n const lens = body.lens;\n\n if (!response.ok) {\n throw new Error(\n `Cannot load lens ${lensId} in group ${groupId}. GetGroupLens responded with status ` +\n `${response.status} and body:\\n\\t${JSON.stringify(body)} for requestId ${getRequestId(response)}`\n );\n }\n\n if (!isLensProto(lens)) {\n throw new Error(\n `Cannot load lens ${lensId} in group ${groupId}. The response was not a Lens:` +\n `\\n\\t${JSON.stringify(body)} for requestId ${getRequestId(response)}`\n );\n }\n return fixAny(lens);\n}\n\nexport async function retrieveCameraKitLensGroup(\n httpClient: FetchHandler,\n groupId: string,\n apiHostname: CameraKitApiHostname\n): Promise<LensProto[]> {\n const url = `https://${apiHostname}${relativePath}/groups/${groupId}`;\n const response = await httpClient(url, { credentials: \"include\" });\n const body = await response.json();\n\n if (!response.ok) {\n throw new Error(\n `Cannot load lens group ${groupId}. GetGroup responded with status ` +\n `${response.status} and body:\\n\\t${JSON.stringify(body)} for requestId ${getRequestId(response)}`\n );\n }\n\n if (!isGetGroupResponse(body)) {\n throw new Error(\n `Cannot load lens group ${groupId}. The response was not a LensGroup:` +\n `\\n\\t${JSON.stringify(body)} for requestId ${getRequestId(response)}`\n );\n }\n return body.lenses.map(fixAny);\n}\n"]}
@@ -1,3 +1,4 @@
1
+ /// <reference types="webxr" />
1
2
  /// <reference types="dom-webcodecs" />
2
3
  export type DefaultEventHandler = (...data: any[]) => void;
3
4
  export type DefaultErrorHandler = (err: LensCoreError) => void;
@@ -47,12 +48,17 @@ export interface ClearAllLensesInput {
47
48
  export interface OnFrameProcessedParam {
48
49
  processingTimeMs: number;
49
50
  }
51
+ export interface XrCapabilities {
52
+ sixDofSupported: boolean;
53
+ sceneDepthSupported: boolean;
54
+ }
50
55
  export interface InitializeInput {
51
56
  canvas?: HTMLCanvasElement | string;
52
57
  outputResolution?: Dimensions;
53
58
  showFpsPanel?: boolean;
54
59
  shouldUseWorker?: boolean;
55
60
  onFrameProcessed?: (arg: OnFrameProcessedParam) => void;
61
+ xrCapabilities?: XrCapabilities;
56
62
  onFailure?: DefaultErrorHandler;
57
63
  onSuccess?: DefaultEventHandler;
58
64
  exceptionHandler?: (error: LensCoreError) => void;
@@ -174,7 +180,7 @@ export interface AssetDescriptor {
174
180
  assetType: AssetType;
175
181
  avatarId?: string;
176
182
  effectId?: string;
177
- encryptionKey?: string;
183
+ encryptionKey?: ArrayBuffer;
178
184
  }
179
185
  export interface AssetUploadDescriptor {
180
186
  requestId: number;
@@ -182,8 +188,8 @@ export interface AssetUploadDescriptor {
182
188
  assetType: AssetType;
183
189
  effectId: string;
184
190
  assetBuffer: ArrayBuffer;
185
- encryptionKey?: string;
186
- encryptionIv?: string;
191
+ encryptionKey?: ArrayBuffer;
192
+ encryptionIv?: ArrayBuffer;
187
193
  assetBatchId?: string;
188
194
  }
189
195
  export interface ProvideRemoteAssetsResponseInput {
@@ -199,8 +205,14 @@ export interface ProvideRemoteAssetsUploadResponseInput {
199
205
  assetUrl?: string;
200
206
  assetUploadMetadata?: ArrayBuffer;
201
207
  }
208
+ export interface XRInput {
209
+ layer: XRWebGLLayer;
210
+ binding: XRWebGLBinding;
211
+ frame: XRFrame;
212
+ referenceSpace: XRReferenceSpace;
213
+ }
202
214
  export interface ProcessFrameInput {
203
- inputFrame: ImageBitmap | HTMLCanvasElement | HTMLImageElement | VideoFrame;
215
+ inputFrame: ImageBitmap | HTMLCanvasElement | HTMLImageElement | VideoFrame | XRInput;
204
216
  timestampMillis: number;
205
217
  onSuccess?: DefaultEventHandler;
206
218
  onFailure?: DefaultErrorHandler;
@@ -323,6 +335,12 @@ export interface ProcessAudioSampleBufferInput {
323
335
  onSuccess?: DefaultEventHandler;
324
336
  onFailure?: DefaultErrorHandler;
325
337
  }
338
+ export interface BeginWebXrInput {
339
+ glContext: WebGL2RenderingContext;
340
+ requestConfig: {
341
+ requiredFeatures?: string[];
342
+ };
343
+ }
326
344
  export interface InitialEmscriptenModule {
327
345
  mainScriptUrlOrBlob: string;
328
346
  compiledModule?: WebAssembly.Module;
@@ -441,6 +459,8 @@ export interface LensCoreModule extends InitialEmscriptenModule {
441
459
  setSystemFonts: (config: SetSystemFontsInput) => void;
442
460
  setAudioParameters: (config: SetAudioParametersInput) => void;
443
461
  processAudioSampleBuffer: (config: ProcessAudioSampleBufferInput) => void;
462
+ registerBeginWebXrHandler: (handler: (config: BeginWebXrInput) => void) => void;
463
+ registerEndWebXrHandler: (handler: () => void) => void;
444
464
  }
445
465
  declare global {
446
466
  function createLensesModule(module: InitialEmscriptenModule): Promise<InitialEmscriptenModule & LensCoreModule>;