flash-notifications 0.0.47 → 0.0.49

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.
package/README.md CHANGED
@@ -10,6 +10,14 @@ npm install flash-notifications
10
10
 
11
11
  For managed Expo projects, ensure your Expo SDK supports this module and follow the Expo install guidance for modules. For bare React Native projects, install and configure the `expo` package before continuing.
12
12
 
13
+ `expo` is an optional peer dependency: the runtime code never imports it (it is only used by the native module build config). Plain web apps can use this package by aliasing `react-native$` to `react-native-web` in their bundler, for example in webpack:
14
+
15
+ ```js
16
+ resolve: {
17
+ alias: {"react-native$": "react-native-web"}
18
+ }
19
+ ```
20
+
13
21
  ## Setup
14
22
 
15
23
  Render the notification container once near the root of your app so it can listen for events globally.
@@ -69,22 +77,46 @@ FlashNotifications.show({type: "info", text: "Heads up!"})
69
77
 
70
78
  ### FlashNotifications
71
79
 
72
- `FlashNotifications.alert(message)`
80
+ `FlashNotifications.alert(message, options?)`
73
81
  Shows an alert notification with a localized "Alert" title.
74
82
 
75
- `FlashNotifications.error(message)`
83
+ `FlashNotifications.error(message, options?)`
76
84
  Shows an error notification with a localized "Error" title.
77
85
 
78
- `FlashNotifications.success(message)`
86
+ `FlashNotifications.success(message, options?)`
79
87
  Shows a success notification with a localized "Success" title.
80
88
 
81
- `FlashNotifications.show({type, text})`
89
+ `FlashNotifications.activity({message})`
90
+ Shows a long-running activity notification with a localized "Activity" title and a loading bar. It does not auto-dismiss; the returned handle resolves it:
91
+
92
+ - `handle.update({progress})` moves the bar determinately. `progress` is a number in `[0, 1]` (clamped; non-numbers and `NaN` are ignored). Call it without a `progress` to go back to an indeterminate sweep.
93
+ - `handle.succeed(message?)` flashes the success tone, then dismisses.
94
+ - `handle.fail(message?)` flashes the error tone, then dismisses.
95
+ - `handle.done()` dismisses without a tone change.
96
+
97
+ `FlashNotifications.show({type, text, persistent?, presentation?})`
82
98
  Shows a notification with a localized title based on `type`. Unknown types fall back to the localized "Notification" title.
83
99
 
84
- `FlashNotifications.errorResponse(error)`
85
- Handles Api Maker validation and base errors, converting them into notifications. Unknown errors are logged and rethrown.
100
+ ### Notification options
101
+
102
+ `options` (second argument of `alert`/`error`/`success`/`errorResponse`, or extra keys in `show`) supports:
103
+
104
+ - `persistent: true` — the notification never auto-dismisses. It stays on screen until it is dismissed, like an activity notification, but without a progress bar.
105
+ - `presentation: "modal"` — the notification renders as a centered card over a full-screen backdrop that blocks interaction with the app underneath. It can only be dismissed via its explicit Dismiss button; backdrop clicks and Escape do not dismiss it. On web the dialog carries `role="alertdialog"` and `aria-modal`, focus moves into the dialog on open, and focus returns to the previously focused element on dismiss. The default is `"toast"` (the usual corner stack).
106
+
107
+ ```js
108
+ import {FlashNotifications} from "flash-notifications"
109
+
110
+ FlashNotifications.error("Registration could not be saved.", {
111
+ persistent: true,
112
+ presentation: "modal"
113
+ })
114
+ ```
115
+
116
+ Notifications auto-dismiss after 4 seconds and can be dismissed immediately by pressing them. Activity notifications are the exception: they stay on screen until the handle resolves them (or the card is pressed, which acts like `done()`). Notifications pushed with `persistent: true` stay until dismissed as well.
86
117
 
87
- Notifications auto-dismiss after 4 seconds and can be dismissed immediately by pressing them.
118
+ `FlashNotifications.errorResponse(error, options?)`
119
+ Handles Api Maker validation and base errors, converting them into notifications. Unknown errors are logged and rethrown. The options are passed through to the resulting notification.
88
120
 
89
121
  ### Container
90
122
 
@@ -2,22 +2,35 @@ declare const _default: React.NamedExoticComponent<FlashNotificationsContainerPr
2
2
  export default _default;
3
3
  export type NotificationObjectType = {
4
4
  count: number;
5
+ id: string | undefined;
5
6
  message: string;
7
+ persistent: boolean | undefined;
8
+ presentation: "toast" | "modal" | undefined;
6
9
  title: string;
7
10
  type: string;
8
11
  };
9
12
  export type StoredNotificationType = {
10
13
  count: number;
14
+ id: string | undefined;
11
15
  height: import("react-native").Animated.Value;
12
16
  marginBottom: import("react-native").Animated.Value;
13
17
  measuredHeight: number | undefined;
14
18
  message: string;
15
19
  opacity: import("react-native").Animated.Value;
20
+ persistent: boolean;
21
+ presentation: "toast" | "modal";
22
+ progress: number | undefined;
16
23
  removing: boolean;
17
- timeout: ReturnType<typeof setTimeout>;
24
+ timeout: ReturnType<typeof setTimeout> | undefined;
18
25
  title: string;
19
26
  type: string;
20
27
  };
28
+ export type ActivityNotificationDetailType = {
29
+ action: "update" | "succeed" | "fail" | "done";
30
+ id: string;
31
+ message?: string | undefined;
32
+ progress?: number | undefined;
33
+ };
21
34
  export type FlashNotificationsContainerProps = {
22
35
  insets?: {
23
36
  top?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"/src/","sources":["container/index.jsx"],"names":[],"mappings":";;;WAmBc,MAAM;aACN,MAAM;WACN,MAAM;UACN,MAAM;;;WAKN,MAAM;YACN,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;kBACrC,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;oBACrC,MAAM,GAAG,SAAS;aAClB,MAAM;aACN,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;cACrC,OAAO;aACP,UAAU,CAAC,OAAO,UAAU,CAAC;WAC7B,MAAM;UACN,MAAM;;;aAKN;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,YAAC;;;WAK9C,MAAM;mBACN,sBAAsB,EAAE;;kBAzCQ,OAAO"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"/src/","sources":["container/index.jsx"],"names":[],"mappings":";;;WAmBc,MAAM;QACN,MAAM,GAAG,SAAS;aAClB,MAAM;gBACN,OAAO,GAAG,SAAS;kBACnB,OAAO,GAAG,OAAO,GAAG,SAAS;WAC7B,MAAM;UACN,MAAM;;;WAKN,MAAM;QACN,MAAM,GAAG,SAAS;YAClB,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;kBACrC,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;oBACrC,MAAM,GAAG,SAAS;aAClB,MAAM;aACN,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;gBACrC,OAAO;kBACP,OAAO,GAAG,OAAO;cACjB,MAAM,GAAG,SAAS;cAClB,OAAO;aACP,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS;WACzC,MAAM;UACN,MAAM;;;YAKN,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM;QACtC,MAAM;cACN,MAAM,YAAC;eACP,MAAM,YAAC;;;aAKP;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,YAAC;;;WAK9C,MAAM;mBACN,sBAAsB,EAAE;;kBAxDQ,OAAO"}
@@ -1,5 +1,5 @@
1
1
  // @ts-check
2
- import { digg } from "diggerize";
2
+ import { dig, digg } from "diggerize";
3
3
  import PropTypes from "prop-types";
4
4
  // @ts-expect-error Package ships no .d.ts files.
5
5
  import propTypesExact from "prop-types-exact";
@@ -15,23 +15,37 @@ import FlashNotification from "./notification";
15
15
  /**
16
16
  * @typedef {object} NotificationObjectType
17
17
  * @property {number} count
18
+ * @property {string | undefined} id
18
19
  * @property {string} message
20
+ * @property {boolean | undefined} persistent
21
+ * @property {"toast" | "modal" | undefined} presentation
19
22
  * @property {string} title
20
23
  * @property {string} type
21
24
  */
22
25
  /**
23
26
  * @typedef {object} StoredNotificationType
24
27
  * @property {number} count
28
+ * @property {string | undefined} id
25
29
  * @property {import("react-native").Animated.Value} height
26
30
  * @property {import("react-native").Animated.Value} marginBottom
27
31
  * @property {number | undefined} measuredHeight
28
32
  * @property {string} message
29
33
  * @property {import("react-native").Animated.Value} opacity
34
+ * @property {boolean} persistent
35
+ * @property {"toast" | "modal"} presentation
36
+ * @property {number | undefined} progress
30
37
  * @property {boolean} removing
31
- * @property {ReturnType<typeof setTimeout>} timeout
38
+ * @property {ReturnType<typeof setTimeout> | undefined} timeout
32
39
  * @property {string} title
33
40
  * @property {string} type
34
41
  */
42
+ /**
43
+ * @typedef {object} ActivityNotificationDetailType
44
+ * @property {"update" | "succeed" | "fail" | "done"} action
45
+ * @property {string} id
46
+ * @property {string=} message
47
+ * @property {number=} progress
48
+ */
35
49
  /**
36
50
  * @typedef {object} FlashNotificationsContainerProps
37
51
  * @property {{top?: number, right?: number, left?: number}=} insets
@@ -59,6 +73,7 @@ class FlashNotificationsContainer extends ShapeComponent {
59
73
  notificationSpacing = 15;
60
74
  setup() {
61
75
  useEventEmitter(events, "pushNotification", this.onPushNotificationEvent);
76
+ useEventEmitter(events, "activityNotification", this.onActivityNotificationEvent);
62
77
  useEffect(() => {
63
78
  return () => {
64
79
  for (const timeout of this.timeouts) {
@@ -104,15 +119,43 @@ class FlashNotificationsContainer extends ShapeComponent {
104
119
  };
105
120
  return style;
106
121
  }, [isNative, smDown, mdUp, insets.top, insets.right, insets.left]);
107
- return (React.createElement(View
108
- // @ts-expect-error
109
- , {
122
+ // Modal notifications live in their own full-screen overlay instead of the
123
+ // stacked toast container: the overlay covers the whole viewport so the app
124
+ // underneath cannot be interacted with until the modal is dismissed.
125
+ const modalNotifications = notifications.filter(
126
+ /** @param {StoredNotificationType} notification */
127
+ (notification) => notification.presentation == "modal");
128
+ const toastNotifications = notifications.filter(
129
+ /** @param {StoredNotificationType} notification */
130
+ (notification) => notification.presentation == "toast");
131
+ /**
132
+ * @param {StoredNotificationType} notification
133
+ * @returns {React.ReactElement}
134
+ */
135
+ const renderNotification = (notification) => (React.createElement(FlashNotification, { count: notification.count, key: `notification-${notification.count}`, message: notification.message, notification: notification, onMeasured: this.onNotificationMeasured, onRemovedClicked: this.onRemovedClicked, persistent: notification.persistent, presentation: notification.presentation, progress: notification.progress, removing: notification.removing, title: notification.title, type: notification.type }));
136
+ return (React.createElement(React.Fragment, null,
137
+ React.createElement(View
110
138
  // @ts-expect-error
111
- dataSet: this.rootViewDataSet ||= { component: "flash-notifications-container" },
139
+ , {
140
+ // @ts-expect-error
141
+ dataSet: this.rootViewDataSet ||= { component: "flash-notifications-container" },
142
+ // @ts-expect-error React Native types do not include the web-only "fixed" position.
143
+ style: viewStyle, testID: "flash-notificaitons/container" }, toastNotifications.map(renderNotification)),
144
+ modalNotifications.length > 0 ? (React.createElement(View
112
145
  // @ts-expect-error React Native types do not include the web-only "fixed" position.
113
- style: viewStyle, testID: "flash-notificaitons/container" }, notifications.map(
114
- /** @param {StoredNotificationType} notification */
115
- (notification) => React.createElement(FlashNotification, { count: notification.count, key: `notification-${notification.count}`, message: notification.message, notification: notification, onMeasured: this.onNotificationMeasured, onRemovedClicked: this.onRemovedClicked, removing: notification.removing, title: notification.title, type: notification.type }))));
146
+ , {
147
+ // @ts-expect-error React Native types do not include the web-only "fixed" position.
148
+ style: {
149
+ // Unlike the toast container, this overlay swallows pointer events on purpose:
150
+ // a modal blocks interaction with the app underneath until it is dismissed.
151
+ pointerEvents: "auto",
152
+ position: isNative ? "absolute" : "fixed",
153
+ top: 0,
154
+ right: 0,
155
+ bottom: 0,
156
+ left: 0,
157
+ zIndex: 100000
158
+ }, testID: "flash-notifications/modal-overlay" }, modalNotifications.map(renderNotification))) : null));
116
159
  }
117
160
  /**
118
161
  * @param {...unknown} args
@@ -126,27 +169,47 @@ class FlashNotificationsContainer extends ShapeComponent {
126
169
  * @returns {void}
127
170
  */
128
171
  onPushNotification = (detail) => {
172
+ const type = digg(detail, "type");
173
+ // An activity notification without an id has no handle to resolve it and
174
+ // would stay on screen forever, so it is dropped.
175
+ if (type == "activity" && detail.id == undefined) {
176
+ debugLog("FlashNotifications: activity notification without id ignored");
177
+ return;
178
+ }
129
179
  const count = this.s.count + 1;
130
- const timeout = setTimeout(() => {
180
+ const persistent = dig(detail, "persistent") == true;
181
+ const presentation = dig(detail, "presentation") == "modal" ? "modal" : "toast";
182
+ // Activity notifications stay on screen until their handle resolves them, and
183
+ // persistent notifications stay until the user dismisses them. Both skip the
184
+ // auto-dismiss timer; only a plain toast gets one.
185
+ const timeout = type == "activity" || persistent ? undefined : setTimeout(() => {
131
186
  debugLog("FlashNotifications: notification timeout", { id: count });
132
187
  this.dismissNotificationByCount(count, "timeout");
133
188
  }, 4000);
134
- this.timeouts.push(timeout);
189
+ if (timeout) {
190
+ this.timeouts.push(timeout);
191
+ }
135
192
  /** @type {StoredNotificationType} */
136
193
  const notification = {
137
194
  count,
138
195
  height: new Animated.Value(0),
196
+ id: dig(detail, "id"),
139
197
  marginBottom: new Animated.Value(this.notificationSpacing),
140
198
  measuredHeight: undefined,
141
199
  message: digg(detail, "message"),
142
200
  opacity: new Animated.Value(1),
201
+ persistent,
202
+ presentation,
203
+ progress: undefined,
143
204
  removing: false,
144
205
  timeout,
145
206
  title: digg(detail, "title"),
146
- type: digg(detail, "type")
207
+ type
147
208
  };
148
209
  debugLog("FlashNotifications: notification added", {
149
210
  id: count,
211
+ persistent: notification.persistent,
212
+ presentation: notification.presentation,
150
213
  title: notification.title,
151
214
  type: notification.type
152
215
  });
@@ -160,6 +223,46 @@ class FlashNotificationsContainer extends ShapeComponent {
160
223
  debugLog("FlashNotifications: notification pressed", { id: notification.count });
161
224
  this.dismissNotification(notification, "press");
162
225
  };
226
+ /**
227
+ * @param {...unknown} args
228
+ * @returns {void}
229
+ */
230
+ onActivityNotificationEvent = (...args) => {
231
+ this.onActivityNotification(/** @type {ActivityNotificationDetailType} */ (args[0]));
232
+ };
233
+ /**
234
+ * @param {ActivityNotificationDetailType} detail
235
+ * @returns {void}
236
+ */
237
+ onActivityNotification = (detail) => {
238
+ const notification = /** @type {StoredNotificationType | undefined} */ (this.s.notifications.find(
239
+ /** @param {StoredNotificationType} item */
240
+ (item) => item.id === detail.id));
241
+ if (!notification || notification.removing) {
242
+ debugLog("FlashNotifications: activity notification not found", { id: detail.id, action: detail.action });
243
+ return;
244
+ }
245
+ if (detail.action == "update") {
246
+ debugLog("FlashNotifications: activity progress updated", { id: notification.count, progress: detail.progress });
247
+ notification.progress = detail.progress;
248
+ this.setState({ notifications: [...this.s.notifications] });
249
+ return;
250
+ }
251
+ if (detail.action == "succeed" || detail.action == "fail") {
252
+ debugLog("FlashNotifications: activity resolved", { id: notification.count, action: detail.action });
253
+ // Map the action verbs onto the canonical type names so the card
254
+ // renders the existing success/error tones during the dismiss flash.
255
+ notification.type = detail.action == "succeed" ? "success" : "error";
256
+ if (detail.message) {
257
+ notification.message = detail.message;
258
+ }
259
+ this.setState({ notifications: [...this.s.notifications] });
260
+ this.dismissNotification(notification, detail.action);
261
+ return;
262
+ }
263
+ debugLog("FlashNotifications: activity dismissed", { id: notification.count, action: detail.action });
264
+ this.dismissNotification(notification, "done");
265
+ };
163
266
  /**
164
267
  * @param {StoredNotificationType} notification
165
268
  * @param {number} measuredHeight
@@ -237,4 +340,4 @@ class FlashNotificationsContainer extends ShapeComponent {
237
340
  });
238
341
  };
239
342
  }));
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNvbnRhaW5lci9pbmRleC5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBO0FBQ2xDLGlEQUFpRDtBQUNqRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQ3JELE9BQU8sRUFBQyxjQUFjLEVBQUUsY0FBYyxFQUFDLE1BQU0sNENBQTRDLENBQUE7QUFDekYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sZUFBZSxNQUFNLHNCQUFzQixDQUFBO0FBQ2xELE9BQU8sV0FBVyxNQUFNLGtDQUFrQyxDQUFBO0FBQzFELE9BQU8sRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRTNDLE9BQU8sUUFBUSxNQUFNLGFBQWEsQ0FBQTtBQUNsQyxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxpQkFBaUIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU5Qzs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSDs7O0dBR0c7QUFFSDs7OztHQUlHO0FBRUgsZUFBZSxJQUFJLENBQUMsY0FBYztBQUNoQzs7R0FFRztBQUNILE1BQU0sMkJBQTRCLFNBQVEsY0FBYztJQUN4RCxNQUFNLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztRQUNoQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07S0FDekIsQ0FBQyxDQUFBO0lBRUYsS0FBSyxHQUFHO1FBQ04sS0FBSyxFQUFFLENBQUM7UUFDUix1Q0FBdUM7UUFDdkMsYUFBYSxFQUFFLEVBQUU7S0FDbEIsQ0FBQTtJQUVELHVCQUF1QjtJQUN2QixRQUFRLEdBQUcsRUFBRSxDQUFBO0lBQ2IsbUJBQW1CLEdBQUcsRUFBRSxDQUFBO0lBRXhCLEtBQUs7UUFDSCxlQUFlLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO1FBQ3pFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixPQUFPLEdBQUcsRUFBRTtnQkFDVixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDcEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQyxDQUFBO1FBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ1IsQ0FBQztJQUVELE1BQU07UUFDSixNQUFNLEVBQUMsYUFBYSxFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUE7UUFFdEMsTUFBTSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQTtRQUN0QyxNQUFNLEVBQUMsUUFBUSxFQUFDLEdBQUcsV0FBVyxFQUFFLENBQUE7UUFFaEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUM3QixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUE7WUFDWixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUE7WUFDYixJQUFJLElBQUksR0FBRyxTQUFTLENBQUE7WUFFcEIsSUFBSSxNQUFNLENBQUMsR0FBRztnQkFBRSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQTtZQUNqQyxJQUFJLE1BQU0sQ0FBQyxLQUFLO2dCQUFFLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFBO1lBRXZDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQTtnQkFFVCxJQUFJLE1BQU0sQ0FBQyxJQUFJO29CQUFFLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFBO2dCQUVwQyxLQUFLLElBQUksRUFBRSxDQUFBO1lBQ2IsQ0FBQztpQkFBTSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNoQixLQUFLLElBQUksRUFBRSxDQUFBO1lBQ2IsQ0FBQztZQUVELE1BQU0sS0FBSyxHQUFHO2dCQUNaLDRGQUE0RjtnQkFDNUYsc0ZBQXNGO2dCQUN0RiwyRkFBMkY7Z0JBQzNGLHlGQUF5RjtnQkFDekYsaUVBQWlFO2dCQUNqRSxhQUFhLEVBQUUsVUFBVTtnQkFDekIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPO2dCQUN6QyxHQUFHO2dCQUNILEtBQUs7Z0JBQ0wsSUFBSTtnQkFDSixNQUFNLEVBQUUsS0FBSzthQUNkLENBQUE7WUFFRCxPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUVuRSxPQUFPLENBQ0wsb0JBQUMsSUFBSTtRQUNILG1CQUFtQjs7WUFBbkIsbUJBQW1CO1lBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxLQUFLLEVBQUMsU0FBUyxFQUFFLCtCQUErQixFQUFDO1lBQzlFLG9GQUFvRjtZQUNwRixLQUFLLEVBQUUsU0FBUyxFQUNoQixNQUFNLEVBQUMsK0JBQStCLElBRXJDLGFBQWEsQ0FBQyxHQUFHO1FBQ2hCLG1EQUFtRDtRQUNuRCxDQUFDLFlBQVksRUFBRSxFQUFFLENBQ2pCLG9CQUFDLGlCQUFpQixJQUNoQixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFDekIsR0FBRyxFQUFFLGdCQUFnQixZQUFZLENBQUMsS0FBSyxFQUFFLEVBQ3pDLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTyxFQUM3QixZQUFZLEVBQUUsWUFBWSxFQUMxQixVQUFVLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUN2QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQ3ZDLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUMvQixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFDekIsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJLEdBQ3ZCLENBQ0gsQ0FDSSxDQUNSLENBQUE7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsdUJBQXVCLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDMUUsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUM5QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7UUFDOUIsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUM5QixRQUFRLENBQUMsMENBQTBDLEVBQUUsRUFBQyxFQUFFLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtZQUNqRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ25ELENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUVSLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRTNCLHFDQUFxQztRQUNyQyxNQUFNLFlBQVksR0FBRztZQUNuQixLQUFLO1lBQ0wsTUFBTSxFQUFFLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDN0IsWUFBWSxFQUFFLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDMUQsY0FBYyxFQUFFLFNBQVM7WUFDekIsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzlCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsT0FBTztZQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztZQUM1QixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7U0FDM0IsQ0FBQTtRQUVELFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRTtZQUNqRCxFQUFFLEVBQUUsS0FBSztZQUNULEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSztZQUN6QixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7U0FDeEIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUE7SUFDcEYsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRTtRQUNsQyxRQUFRLENBQUMsMENBQTBDLEVBQUUsRUFBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUE7UUFDOUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNqRCxDQUFDLENBQUE7SUFFRDs7OztPQUlHO0lBQ0gsc0JBQXNCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLEVBQUU7UUFDeEQsSUFBSSxZQUFZLENBQUMsY0FBYztZQUFFLE9BQU07UUFFdkMsUUFBUSxDQUFDLDJDQUEyQyxFQUFFLEVBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUE7UUFFdkcsWUFBWSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUE7UUFDNUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLGFBQWEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBQyxDQUFDLENBQUE7SUFDM0QsQ0FBQyxDQUFBO0lBRUQ7Ozs7TUFJRTtJQUNGLDBCQUEwQixHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQUUsRUFBRTtRQUN6RCxNQUFNLFlBQVksR0FBRyxpREFBaUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUk7UUFDL0YsMkNBQTJDO1FBQzNDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FDOUIsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLFFBQVEsQ0FBQyw0Q0FBNEMsRUFBRSxFQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtZQUMzRSxPQUFNO1FBQ1IsQ0FBQztRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDaEQsQ0FBQyxDQUFBO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQixHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQUUsRUFBRTtRQUN6RCxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixRQUFRLENBQUMsbURBQW1ELEVBQUUsRUFBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1lBQy9GLE9BQU07UUFDUixDQUFDO1FBRUQsWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFDNUIsSUFBSSxZQUFZLENBQUMsT0FBTztZQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNqQyxRQUFRLENBQUMsMERBQTBELEVBQUUsRUFBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUE7WUFDOUYsWUFBWSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUE7WUFDL0IsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakMsQ0FBQztRQUVELGdHQUFnRztRQUNoRyw2RkFBNkY7UUFDN0YsMkVBQTJFO1FBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1FBRXpELFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRTtZQUMvQyxFQUFFLEVBQUUsWUFBWSxDQUFDLEtBQUs7WUFDdEIsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUM7WUFDakQsTUFBTTtTQUNQLENBQUMsQ0FBQTtRQUNGLFFBQVEsQ0FBQywwQ0FBMEMsRUFBRSxFQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFFdEYsTUFBTSxlQUFlLEdBQUcsTUFBTSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUE7UUFFckQsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNoQixRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBQyxDQUFDO1lBQ3RHLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFDLENBQUM7WUFDckcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLEVBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUMsQ0FBQztTQUM1RyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNaLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtnQkFDN0MsRUFBRSxFQUFFLFlBQVksQ0FBQyxLQUFLO2dCQUN0QixVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQztnQkFDakQsTUFBTTthQUNQLENBQUMsQ0FBQTtZQUNGLFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxFQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7WUFFcEYsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDWixhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTTtnQkFDeEMsMkNBQTJDO2dCQUMzQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUMsS0FBSyxDQUMzQzthQUNGLENBQUMsQ0FBQTtZQUVGLFFBQVEsQ0FBQywwQ0FBMEMsRUFBRSxFQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDeEYsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUE7Q0FDRixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG4vLyBAdHMtZXhwZWN0LWVycm9yIFBhY2thZ2Ugc2hpcHMgbm8gLmQudHMgZmlsZXMuXG5pbXBvcnQgcHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuaW1wb3J0IFJlYWN0LCB7bWVtbywgdXNlRWZmZWN0LCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudCwgU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IHt1c2VCcmVha3BvaW50fSBmcm9tIFwicmVzcG9uc2l2ZS1icmVha3BvaW50c1wiXG5pbXBvcnQgdXNlRXZlbnRFbWl0dGVyIGZyb20gXCJ5YS11c2UtZXZlbnQtZW1pdHRlclwiXG5pbXBvcnQgdXNlRW52U2Vuc2UgZnJvbSBcImVudi1zZW5zZS9idWlsZC91c2UtZW52LXNlbnNlLmpzXCJcbmltcG9ydCB7QW5pbWF0ZWQsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuXG5pbXBvcnQgZGVidWdMb2cgZnJvbSBcIi4uL2RlYnVnLmpzXCJcbmltcG9ydCBldmVudHMgZnJvbSBcIi4uL2V2ZW50cy5qc1wiXG5pbXBvcnQgRmxhc2hOb3RpZmljYXRpb24gZnJvbSBcIi4vbm90aWZpY2F0aW9uXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb3RpZmljYXRpb25PYmplY3RUeXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTdG9yZWROb3RpZmljYXRpb25UeXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBtYXJnaW5Cb3R0b21cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBtZWFzdXJlZEhlaWdodFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBvcGFjaXR5XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlbW92aW5nXG4gKiBAcHJvcGVydHkge1JldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+fSB0aW1lb3V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGbGFzaE5vdGlmaWNhdGlvbnNDb250YWluZXJQcm9wc1xuICogQHByb3BlcnR5IHt7dG9wPzogbnVtYmVyLCByaWdodD86IG51bWJlciwgbGVmdD86IG51bWJlcn09fSBpbnNldHNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZsYXNoTm90aWZpY2F0aW9uc0NvbnRhaW5lclN0YXRlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZVtdfSBub3RpZmljYXRpb25zXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhzaGFwZUNvbXBvbmVudChcbiAgLyoqXG4gICAqIEBhdWdtZW50cyB7U2hhcGVDb21wb25lbnQ8Rmxhc2hOb3RpZmljYXRpb25zQ29udGFpbmVyUHJvcHMsIEZsYXNoTm90aWZpY2F0aW9uc0NvbnRhaW5lclN0YXRlPn1cbiAgICovXG4gIGNsYXNzIEZsYXNoTm90aWZpY2F0aW9uc0NvbnRhaW5lciBleHRlbmRzIFNoYXBlQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHByb3BUeXBlc0V4YWN0KHtcbiAgICBpbnNldHM6IFByb3BUeXBlcy5vYmplY3RcbiAgfSlcblxuICBzdGF0ZSA9IHtcbiAgICBjb3VudDogMCxcbiAgICAvKiogQHR5cGUge1N0b3JlZE5vdGlmaWNhdGlvblR5cGVbXX0gKi9cbiAgICBub3RpZmljYXRpb25zOiBbXVxuICB9XG5cbiAgLyoqIEB0eXBlIHtudW1iZXJbXX0gKi9cbiAgdGltZW91dHMgPSBbXVxuICBub3RpZmljYXRpb25TcGFjaW5nID0gMTVcblxuICBzZXR1cCgpIHtcbiAgICB1c2VFdmVudEVtaXR0ZXIoZXZlbnRzLCBcInB1c2hOb3RpZmljYXRpb25cIiwgdGhpcy5vblB1c2hOb3RpZmljYXRpb25FdmVudClcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB0aW1lb3V0IG9mIHRoaXMudGltZW91dHMpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIFtdKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtub3RpZmljYXRpb25zfSA9IHRoaXMuc1xuICAgIGNvbnN0IGluc2V0cyA9IHRoaXMucHJvcHMuaW5zZXRzIHx8IHt9XG5cbiAgICBjb25zdCB7c21Eb3duLCBtZFVwfSA9IHVzZUJyZWFrcG9pbnQoKVxuICAgIGNvbnN0IHtpc05hdGl2ZX0gPSB1c2VFbnZTZW5zZSgpXG5cbiAgICBjb25zdCB2aWV3U3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGxldCB0b3AgPSAyMFxuICAgICAgbGV0IHJpZ2h0ID0gMFxuICAgICAgbGV0IGxlZnQgPSB1bmRlZmluZWRcblxuICAgICAgaWYgKGluc2V0cy50b3ApIHRvcCArPSBpbnNldHMudG9wXG4gICAgICBpZiAoaW5zZXRzLnJpZ2h0KSByaWdodCArPSBpbnNldHMucmlnaHRcblxuICAgICAgaWYgKHNtRG93bikge1xuICAgICAgICBsZWZ0ID0gMjBcblxuICAgICAgICBpZiAoaW5zZXRzLmxlZnQpIGxlZnQgKz0gaW5zZXRzLmxlZnRcblxuICAgICAgICByaWdodCArPSAyMFxuICAgICAgfSBlbHNlIGlmIChtZFVwKSB7XG4gICAgICAgIHJpZ2h0ICs9IDIwXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgICAvLyBcImJveC1ub25lXCIgc28gdGhlIGZpeGVkLCBoaWdoLXpJbmRleCBjb250YWluZXIgbmV2ZXIgaW50ZXJjZXB0cyBwb2ludGVyIGV2ZW50cyBvbiBpdHMgb3duXG4gICAgICAgIC8vIGJvdW5kczogZW1wdHkgZ2FwcyBwYXNzIHRocm91Z2gsIGFuZCBhIGZhZGluZyBub3RpZmljYXRpb24gKHdob3NlIHdyYXBwZXIgaXMgc2V0IHRvXG4gICAgICAgIC8vIHBvaW50ZXJFdmVudHMgXCJub25lXCIgd2hpbGUgcmVtb3ZpbmcpIHBhc3NlcyB0aHJvdWdoIHRvbywgd2hpbGUgYSBsaXZlIG5vdGlmaWNhdGlvbiBzdGlsbFxuICAgICAgICAvLyByZWNlaXZlcyBpdHMgb3duIHByZXNzZXMuIFdpdGhvdXQgdGhpcyB0aGUgY29udGFpbmVyIGl0c2VsZiB3b3VsZCBzd2FsbG93IGNsaWNrcy9maWxsc1xuICAgICAgICAvLyBhaW1lZCBhdCB0aGUgZm9ybSBiZW5lYXRoIGl0IGR1cmluZyBhIG5vdGlmaWNhdGlvbidzIGZhZGUtb3V0LlxuICAgICAgICBwb2ludGVyRXZlbnRzOiBcImJveC1ub25lXCIsXG4gICAgICAgIHBvc2l0aW9uOiBpc05hdGl2ZSA/IFwiYWJzb2x1dGVcIiA6IFwiZml4ZWRcIixcbiAgICAgICAgdG9wLFxuICAgICAgICByaWdodCxcbiAgICAgICAgbGVmdCxcbiAgICAgICAgekluZGV4OiA5OTk5OVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3R5bGVcbiAgICB9LCBbaXNOYXRpdmUsIHNtRG93biwgbWRVcCwgaW5zZXRzLnRvcCwgaW5zZXRzLnJpZ2h0LCBpbnNldHMubGVmdF0pXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBkYXRhU2V0PXt0aGlzLnJvb3RWaWV3RGF0YVNldCB8fD0ge2NvbXBvbmVudDogXCJmbGFzaC1ub3RpZmljYXRpb25zLWNvbnRhaW5lclwifX1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBSZWFjdCBOYXRpdmUgdHlwZXMgZG8gbm90IGluY2x1ZGUgdGhlIHdlYi1vbmx5IFwiZml4ZWRcIiBwb3NpdGlvbi5cbiAgICAgICAgc3R5bGU9e3ZpZXdTdHlsZX1cbiAgICAgICAgdGVzdElEPVwiZmxhc2gtbm90aWZpY2FpdG9ucy9jb250YWluZXJcIlxuICAgICAgPlxuICAgICAgICB7bm90aWZpY2F0aW9ucy5tYXAoXG4gICAgICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gbm90aWZpY2F0aW9uICovXG4gICAgICAgICAgKG5vdGlmaWNhdGlvbikgPT5cbiAgICAgICAgICA8Rmxhc2hOb3RpZmljYXRpb25cbiAgICAgICAgICAgIGNvdW50PXtub3RpZmljYXRpb24uY291bnR9XG4gICAgICAgICAgICBrZXk9e2Bub3RpZmljYXRpb24tJHtub3RpZmljYXRpb24uY291bnR9YH1cbiAgICAgICAgICAgIG1lc3NhZ2U9e25vdGlmaWNhdGlvbi5tZXNzYWdlfVxuICAgICAgICAgICAgbm90aWZpY2F0aW9uPXtub3RpZmljYXRpb259XG4gICAgICAgICAgICBvbk1lYXN1cmVkPXt0aGlzLm9uTm90aWZpY2F0aW9uTWVhc3VyZWR9XG4gICAgICAgICAgICBvblJlbW92ZWRDbGlja2VkPXt0aGlzLm9uUmVtb3ZlZENsaWNrZWR9XG4gICAgICAgICAgICByZW1vdmluZz17bm90aWZpY2F0aW9uLnJlbW92aW5nfVxuICAgICAgICAgICAgdGl0bGU9e25vdGlmaWNhdGlvbi50aXRsZX1cbiAgICAgICAgICAgIHR5cGU9e25vdGlmaWNhdGlvbi50eXBlfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Li4udW5rbm93bn0gYXJnc1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uUHVzaE5vdGlmaWNhdGlvbkV2ZW50ID0gKC4uLmFyZ3MpID0+IHtcbiAgICB0aGlzLm9uUHVzaE5vdGlmaWNhdGlvbigvKiogQHR5cGUge05vdGlmaWNhdGlvbk9iamVjdFR5cGV9ICovIChhcmdzWzBdKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vdGlmaWNhdGlvbk9iamVjdFR5cGV9IGRldGFpbFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uUHVzaE5vdGlmaWNhdGlvbiA9IChkZXRhaWwpID0+IHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMucy5jb3VudCArIDFcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIHRpbWVvdXRcIiwge2lkOiBjb3VudH0pXG4gICAgICB0aGlzLmRpc21pc3NOb3RpZmljYXRpb25CeUNvdW50KGNvdW50LCBcInRpbWVvdXRcIilcbiAgICB9LCA0MDAwKVxuXG4gICAgdGhpcy50aW1lb3V0cy5wdXNoKHRpbWVvdXQpXG5cbiAgICAvKiogQHR5cGUge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9ICovXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0ge1xuICAgICAgY291bnQsXG4gICAgICBoZWlnaHQ6IG5ldyBBbmltYXRlZC5WYWx1ZSgwKSxcbiAgICAgIG1hcmdpbkJvdHRvbTogbmV3IEFuaW1hdGVkLlZhbHVlKHRoaXMubm90aWZpY2F0aW9uU3BhY2luZyksXG4gICAgICBtZWFzdXJlZEhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgbWVzc2FnZTogZGlnZyhkZXRhaWwsIFwibWVzc2FnZVwiKSxcbiAgICAgIG9wYWNpdHk6IG5ldyBBbmltYXRlZC5WYWx1ZSgxKSxcbiAgICAgIHJlbW92aW5nOiBmYWxzZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICB0aXRsZTogZGlnZyhkZXRhaWwsIFwidGl0bGVcIiksXG4gICAgICB0eXBlOiBkaWdnKGRldGFpbCwgXCJ0eXBlXCIpXG4gICAgfVxuXG4gICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbiBhZGRlZFwiLCB7XG4gICAgICBpZDogY291bnQsXG4gICAgICB0aXRsZTogbm90aWZpY2F0aW9uLnRpdGxlLFxuICAgICAgdHlwZTogbm90aWZpY2F0aW9uLnR5cGVcbiAgICB9KVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7Y291bnQsIG5vdGlmaWNhdGlvbnM6IHRoaXMucy5ub3RpZmljYXRpb25zLmNvbmNhdChbbm90aWZpY2F0aW9uXSl9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gbm90aWZpY2F0aW9uXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25SZW1vdmVkQ2xpY2tlZCA9IChub3RpZmljYXRpb24pID0+IHtcbiAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIHByZXNzZWRcIiwge2lkOiBub3RpZmljYXRpb24uY291bnR9KVxuICAgIHRoaXMuZGlzbWlzc05vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIFwicHJlc3NcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IG5vdGlmaWNhdGlvblxuICAgKiBAcGFyYW0ge251bWJlcn0gbWVhc3VyZWRIZWlnaHRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbk5vdGlmaWNhdGlvbk1lYXN1cmVkID0gKG5vdGlmaWNhdGlvbiwgbWVhc3VyZWRIZWlnaHQpID0+IHtcbiAgICBpZiAobm90aWZpY2F0aW9uLm1lYXN1cmVkSGVpZ2h0KSByZXR1cm5cblxuICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gbWVhc3VyZWRcIiwge2lkOiBub3RpZmljYXRpb24uY291bnQsIGhlaWdodDogbWVhc3VyZWRIZWlnaHR9KVxuXG4gICAgbm90aWZpY2F0aW9uLm1lYXN1cmVkSGVpZ2h0ID0gbWVhc3VyZWRIZWlnaHRcbiAgICBub3RpZmljYXRpb24uaGVpZ2h0LnNldFZhbHVlKG1lYXN1cmVkSGVpZ2h0KVxuICAgIHRoaXMuc2V0U3RhdGUoe25vdGlmaWNhdGlvbnM6IFsuLi50aGlzLnMubm90aWZpY2F0aW9uc119KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl1cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICovXG4gIGRpc21pc3NOb3RpZmljYXRpb25CeUNvdW50ID0gKGNvdW50LCByZWFzb24gPSBcInVua25vd25cIikgPT4ge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IC8qKiBAdHlwZSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZSB8IHVuZGVmaW5lZH0gKi8gKHRoaXMucy5ub3RpZmljYXRpb25zLmZpbmQoXG4gICAgICAvKiogQHBhcmFtIHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSBpdGVtICovXG4gICAgICAoaXRlbSkgPT4gaXRlbS5jb3VudCA9PSBjb3VudFxuICAgICkpXG4gICAgaWYgKCFub3RpZmljYXRpb24pIHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gbm90IGZvdW5kXCIsIHtpZDogY291bnQsIHJlYXNvbn0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmRpc21pc3NOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCByZWFzb24pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSBub3RpZmljYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZGlzbWlzc05vdGlmaWNhdGlvbiA9IChub3RpZmljYXRpb24sIHJlYXNvbiA9IFwidW5rbm93blwiKSA9PiB7XG4gICAgaWYgKG5vdGlmaWNhdGlvbi5yZW1vdmluZykge1xuICAgICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbiBhbHJlYWR5IHJlbW92aW5nXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCByZWFzb259KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbm90aWZpY2F0aW9uLnJlbW92aW5nID0gdHJ1ZVxuICAgIGlmIChub3RpZmljYXRpb24udGltZW91dCkgY2xlYXJUaW1lb3V0KG5vdGlmaWNhdGlvbi50aW1lb3V0KVxuXG4gICAgaWYgKCFub3RpZmljYXRpb24ubWVhc3VyZWRIZWlnaHQpIHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gbWlzc2luZyBtZWFzdXJlZCBoZWlnaHRcIiwge2lkOiBub3RpZmljYXRpb24uY291bnR9KVxuICAgICAgbm90aWZpY2F0aW9uLm1lYXN1cmVkSGVpZ2h0ID0gMVxuICAgICAgbm90aWZpY2F0aW9uLmhlaWdodC5zZXRWYWx1ZSgxKVxuICAgIH1cblxuICAgIC8vIFJlLXJlbmRlciBpbW1lZGlhdGVseSBzbyB0aGUgY2xvc2luZyBub3RpZmljYXRpb24gZHJvcHMgcG9pbnRlciBldmVudHMgKHBvaW50ZXJFdmVudHM9XCJub25lXCIpXG4gICAgLy8gdGhlIGluc3RhbnQgaXQgc3RhcnRzIGZhZGluZyBvdXQuIE90aGVyd2lzZSB0aGUgZmFkaW5nIG92ZXJsYXkga2VlcHMgaW50ZXJjZXB0aW5nIHRoZSBuZXh0XG4gICAgLy8gY2xpY2svZmlsbCBmb3IgdGhlIHdob2xlIGZhZGUgZHVyYXRpb24gZXZlbiB0aG91Z2ggaXQgaXMgb24gaXRzIHdheSBvdXQuXG4gICAgdGhpcy5zZXRTdGF0ZSh7bm90aWZpY2F0aW9uczogWy4uLnRoaXMucy5ub3RpZmljYXRpb25zXX0pXG5cbiAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYW5pbWF0aW9ucyBiZWdpblwiLCB7XG4gICAgICBpZDogbm90aWZpY2F0aW9uLmNvdW50LFxuICAgICAgYW5pbWF0aW9uczogW1wib3BhY2l0eVwiLCBcImhlaWdodFwiLCBcIm1hcmdpbkJvdHRvbVwiXSxcbiAgICAgIHJlYXNvblxuICAgIH0pXG4gICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IGZhZGUgYW5pbWF0aW9uIGJlZ2luXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCByZWFzb259KVxuXG4gICAgY29uc3QgZGlzbWlzc0R1cmF0aW9uID0gcmVhc29uID09PSBcInByZXNzXCIgPyA4MCA6IDIwMFxuXG4gICAgQW5pbWF0ZWQucGFyYWxsZWwoW1xuICAgICAgQW5pbWF0ZWQudGltaW5nKG5vdGlmaWNhdGlvbi5vcGFjaXR5LCB7dG9WYWx1ZTogMCwgZHVyYXRpb246IGRpc21pc3NEdXJhdGlvbiwgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZX0pLFxuICAgICAgQW5pbWF0ZWQudGltaW5nKG5vdGlmaWNhdGlvbi5oZWlnaHQsIHt0b1ZhbHVlOiAwLCBkdXJhdGlvbjogZGlzbWlzc0R1cmF0aW9uLCB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlfSksXG4gICAgICBBbmltYXRlZC50aW1pbmcobm90aWZpY2F0aW9uLm1hcmdpbkJvdHRvbSwge3RvVmFsdWU6IDAsIGR1cmF0aW9uOiBkaXNtaXNzRHVyYXRpb24sIHVzZU5hdGl2ZURyaXZlcjogZmFsc2V9KVxuICAgIF0pLnN0YXJ0KCgpID0+IHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBhbmltYXRpb25zIGVuZFwiLCB7XG4gICAgICAgIGlkOiBub3RpZmljYXRpb24uY291bnQsXG4gICAgICAgIGFuaW1hdGlvbnM6IFtcIm9wYWNpdHlcIiwgXCJoZWlnaHRcIiwgXCJtYXJnaW5Cb3R0b21cIl0sXG4gICAgICAgIHJlYXNvblxuICAgICAgfSlcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBmYWRlIGFuaW1hdGlvbiBlbmRcIiwge2lkOiBub3RpZmljYXRpb24uY291bnQsIHJlYXNvbn0pXG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBub3RpZmljYXRpb25zOiB0aGlzLnMubm90aWZpY2F0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gaXRlbSAqL1xuICAgICAgICAgIChpdGVtKSA9PiBpdGVtLmNvdW50ICE9IG5vdGlmaWNhdGlvbi5jb3VudFxuICAgICAgICApXG4gICAgICB9KVxuXG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIHJlbW92ZWRcIiwge2lkOiBub3RpZmljYXRpb24uY291bnQsIHJlYXNvbn0pXG4gICAgfSlcbiAgfVxufSkpXG4iXX0=
343
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNvbnRhaW5lci9pbmRleC5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxpREFBaUQ7QUFDakQsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFFLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRCxPQUFPLGVBQWUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNsRCxPQUFPLFdBQVcsTUFBTSxrQ0FBa0MsQ0FBQTtBQUMxRCxPQUFPLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUUzQyxPQUFPLFFBQVEsTUFBTSxhQUFhLENBQUE7QUFDbEMsT0FBTyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBQ2pDLE9BQU8saUJBQWlCLE1BQU0sZ0JBQWdCLENBQUE7QUFFOUM7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFFSDs7OztHQUlHO0FBRUgsZUFBZSxJQUFJLENBQUMsY0FBYztBQUNoQzs7R0FFRztBQUNILE1BQU0sMkJBQTRCLFNBQVEsY0FBYztJQUN4RCxNQUFNLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztRQUNoQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07S0FDekIsQ0FBQyxDQUFBO0lBRUYsS0FBSyxHQUFHO1FBQ04sS0FBSyxFQUFFLENBQUM7UUFDUix1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QkFDM0MsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLEtBQUssQ0FDM0M7YUFDRixDQUFDLENBQUE7WUFFRixRQUFRLENBQUMsMENBQTBDLEVBQUUsRUFBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ3hGLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0NBQ0YsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtkaWcsIGRpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG4vLyBAdHMtZXhwZWN0LWVycm9yIFBhY2thZ2Ugc2hpcHMgbm8gLmQudHMgZmlsZXMuXG5pbXBvcnQgcHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuaW1wb3J0IFJlYWN0LCB7bWVtbywgdXNlRWZmZWN0LCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudCwgU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IHt1c2VCcmVha3BvaW50fSBmcm9tIFwicmVzcG9uc2l2ZS1icmVha3BvaW50c1wiXG5pbXBvcnQgdXNlRXZlbnRFbWl0dGVyIGZyb20gXCJ5YS11c2UtZXZlbnQtZW1pdHRlclwiXG5pbXBvcnQgdXNlRW52U2Vuc2UgZnJvbSBcImVudi1zZW5zZS9idWlsZC91c2UtZW52LXNlbnNlLmpzXCJcbmltcG9ydCB7QW5pbWF0ZWQsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuXG5pbXBvcnQgZGVidWdMb2cgZnJvbSBcIi4uL2RlYnVnLmpzXCJcbmltcG9ydCBldmVudHMgZnJvbSBcIi4uL2V2ZW50cy5qc1wiXG5pbXBvcnQgRmxhc2hOb3RpZmljYXRpb24gZnJvbSBcIi4vbm90aWZpY2F0aW9uXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb3RpZmljYXRpb25PYmplY3RUeXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBpZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gcGVyc2lzdGVudFxuICogQHByb3BlcnR5IHtcInRvYXN0XCIgfCBcIm1vZGFsXCIgfCB1bmRlZmluZWR9IHByZXNlbnRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpdGxlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3RvcmVkTm90aWZpY2F0aW9uVHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gaWRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBtYXJnaW5Cb3R0b21cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBtZWFzdXJlZEhlaWdodFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBvcGFjaXR5XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBlcnNpc3RlbnRcbiAqIEBwcm9wZXJ0eSB7XCJ0b2FzdFwiIHwgXCJtb2RhbFwifSBwcmVzZW50YXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBwcm9ncmVzc1xuICogQHByb3BlcnR5IHtib29sZWFufSByZW1vdmluZ1xuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZH0gdGltZW91dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpdGxlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQWN0aXZpdHlOb3RpZmljYXRpb25EZXRhaWxUeXBlXG4gKiBAcHJvcGVydHkge1widXBkYXRlXCIgfCBcInN1Y2NlZWRcIiB8IFwiZmFpbFwiIHwgXCJkb25lXCJ9IGFjdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkXG4gKiBAcHJvcGVydHkge3N0cmluZz19IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyPX0gcHJvZ3Jlc3NcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZsYXNoTm90aWZpY2F0aW9uc0NvbnRhaW5lclByb3BzXG4gKiBAcHJvcGVydHkge3t0b3A/OiBudW1iZXIsIHJpZ2h0PzogbnVtYmVyLCBsZWZ0PzogbnVtYmVyfT19IGluc2V0c1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRmxhc2hOb3RpZmljYXRpb25zQ29udGFpbmVyU3RhdGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb3VudFxuICogQHByb3BlcnR5IHtTdG9yZWROb3RpZmljYXRpb25UeXBlW119IG5vdGlmaWNhdGlvbnNcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KFxuICAvKipcbiAgICogQGF1Z21lbnRzIHtTaGFwZUNvbXBvbmVudDxGbGFzaE5vdGlmaWNhdGlvbnNDb250YWluZXJQcm9wcywgRmxhc2hOb3RpZmljYXRpb25zQ29udGFpbmVyU3RhdGU+fVxuICAgKi9cbiAgY2xhc3MgRmxhc2hOb3RpZmljYXRpb25zQ29udGFpbmVyIGV4dGVuZHMgU2hhcGVDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0gcHJvcFR5cGVzRXhhY3Qoe1xuICAgIGluc2V0czogUHJvcFR5cGVzLm9iamVjdFxuICB9KVxuXG4gIHN0YXRlID0ge1xuICAgIGNvdW50OiAwLFxuICAgIC8qKiBAdHlwZSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZVtdfSAqL1xuICAgIG5vdGlmaWNhdGlvbnM6IFtdXG4gIH1cblxuICAvKiogQHR5cGUge251bWJlcltdfSAqL1xuICB0aW1lb3V0cyA9IFtdXG4gIG5vdGlmaWNhdGlvblNwYWNpbmcgPSAxNVxuXG4gIHNldHVwKCkge1xuICAgIHVzZUV2ZW50RW1pdHRlcihldmVudHMsIFwicHVzaE5vdGlmaWNhdGlvblwiLCB0aGlzLm9uUHVzaE5vdGlmaWNhdGlvbkV2ZW50KVxuICAgIHVzZUV2ZW50RW1pdHRlcihldmVudHMsIFwiYWN0aXZpdHlOb3RpZmljYXRpb25cIiwgdGhpcy5vbkFjdGl2aXR5Tm90aWZpY2F0aW9uRXZlbnQpXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgdGltZW91dCBvZiB0aGlzLnRpbWVvdXRzKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBbXSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7bm90aWZpY2F0aW9uc30gPSB0aGlzLnNcbiAgICBjb25zdCBpbnNldHMgPSB0aGlzLnByb3BzLmluc2V0cyB8fCB7fVxuXG4gICAgY29uc3Qge3NtRG93biwgbWRVcH0gPSB1c2VCcmVha3BvaW50KClcbiAgICBjb25zdCB7aXNOYXRpdmV9ID0gdXNlRW52U2Vuc2UoKVxuXG4gICAgY29uc3Qgdmlld1N0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBsZXQgdG9wID0gMjBcbiAgICAgIGxldCByaWdodCA9IDBcbiAgICAgIGxldCBsZWZ0ID0gdW5kZWZpbmVkXG5cbiAgICAgIGlmIChpbnNldHMudG9wKSB0b3AgKz0gaW5zZXRzLnRvcFxuICAgICAgaWYgKGluc2V0cy5yaWdodCkgcmlnaHQgKz0gaW5zZXRzLnJpZ2h0XG5cbiAgICAgIGlmIChzbURvd24pIHtcbiAgICAgICAgbGVmdCA9IDIwXG5cbiAgICAgICAgaWYgKGluc2V0cy5sZWZ0KSBsZWZ0ICs9IGluc2V0cy5sZWZ0XG5cbiAgICAgICAgcmlnaHQgKz0gMjBcbiAgICAgIH0gZWxzZSBpZiAobWRVcCkge1xuICAgICAgICByaWdodCArPSAyMFxuICAgICAgfVxuXG4gICAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgICAgLy8gXCJib3gtbm9uZVwiIHNvIHRoZSBmaXhlZCwgaGlnaC16SW5kZXggY29udGFpbmVyIG5ldmVyIGludGVyY2VwdHMgcG9pbnRlciBldmVudHMgb24gaXRzIG93blxuICAgICAgICAvLyBib3VuZHM6IGVtcHR5IGdhcHMgcGFzcyB0aHJvdWdoLCBhbmQgYSBmYWRpbmcgbm90aWZpY2F0aW9uICh3aG9zZSB3cmFwcGVyIGlzIHNldCB0b1xuICAgICAgICAvLyBwb2ludGVyRXZlbnRzIFwibm9uZVwiIHdoaWxlIHJlbW92aW5nKSBwYXNzZXMgdGhyb3VnaCB0b28sIHdoaWxlIGEgbGl2ZSBub3RpZmljYXRpb24gc3RpbGxcbiAgICAgICAgLy8gcmVjZWl2ZXMgaXRzIG93biBwcmVzc2VzLiBXaXRob3V0IHRoaXMgdGhlIGNvbnRhaW5lciBpdHNlbGYgd291bGQgc3dhbGxvdyBjbGlja3MvZmlsbHNcbiAgICAgICAgLy8gYWltZWQgYXQgdGhlIGZvcm0gYmVuZWF0aCBpdCBkdXJpbmcgYSBub3RpZmljYXRpb24ncyBmYWRlLW91dC5cbiAgICAgICAgcG9pbnRlckV2ZW50czogXCJib3gtbm9uZVwiLFxuICAgICAgICBwb3NpdGlvbjogaXNOYXRpdmUgPyBcImFic29sdXRlXCIgOiBcImZpeGVkXCIsXG4gICAgICAgIHRvcCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHpJbmRleDogOTk5OTlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlXG4gICAgfSwgW2lzTmF0aXZlLCBzbURvd24sIG1kVXAsIGluc2V0cy50b3AsIGluc2V0cy5yaWdodCwgaW5zZXRzLmxlZnRdKVxuXG4gICAgLy8gTW9kYWwgbm90aWZpY2F0aW9ucyBsaXZlIGluIHRoZWlyIG93biBmdWxsLXNjcmVlbiBvdmVybGF5IGluc3RlYWQgb2YgdGhlXG4gICAgLy8gc3RhY2tlZCB0b2FzdCBjb250YWluZXI6IHRoZSBvdmVybGF5IGNvdmVycyB0aGUgd2hvbGUgdmlld3BvcnQgc28gdGhlIGFwcFxuICAgIC8vIHVuZGVybmVhdGggY2Fubm90IGJlIGludGVyYWN0ZWQgd2l0aCB1bnRpbCB0aGUgbW9kYWwgaXMgZGlzbWlzc2VkLlxuICAgIGNvbnN0IG1vZGFsTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKFxuICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gbm90aWZpY2F0aW9uICovXG4gICAgICAobm90aWZpY2F0aW9uKSA9PiBub3RpZmljYXRpb24ucHJlc2VudGF0aW9uID09IFwibW9kYWxcIlxuICAgIClcbiAgICBjb25zdCB0b2FzdE5vdGlmaWNhdGlvbnMgPSBub3RpZmljYXRpb25zLmZpbHRlcihcbiAgICAgIC8qKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IG5vdGlmaWNhdGlvbiAqL1xuICAgICAgKG5vdGlmaWNhdGlvbikgPT4gbm90aWZpY2F0aW9uLnByZXNlbnRhdGlvbiA9PSBcInRvYXN0XCJcbiAgICApXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IG5vdGlmaWNhdGlvblxuICAgICAqIEByZXR1cm5zIHtSZWFjdC5SZWFjdEVsZW1lbnR9XG4gICAgICovXG4gICAgY29uc3QgcmVuZGVyTm90aWZpY2F0aW9uID0gKG5vdGlmaWNhdGlvbikgPT4gKFxuICAgICAgPEZsYXNoTm90aWZpY2F0aW9uXG4gICAgICAgIGNvdW50PXtub3RpZmljYXRpb24uY291bnR9XG4gICAgICAgIGtleT17YG5vdGlmaWNhdGlvbi0ke25vdGlmaWNhdGlvbi5jb3VudH1gfVxuICAgICAgICBtZXNzYWdlPXtub3RpZmljYXRpb24ubWVzc2FnZX1cbiAgICAgICAgbm90aWZpY2F0aW9uPXtub3RpZmljYXRpb259XG4gICAgICAgIG9uTWVhc3VyZWQ9e3RoaXMub25Ob3RpZmljYXRpb25NZWFzdXJlZH1cbiAgICAgICAgb25SZW1vdmVkQ2xpY2tlZD17dGhpcy5vblJlbW92ZWRDbGlja2VkfVxuICAgICAgICBwZXJzaXN0ZW50PXtub3RpZmljYXRpb24ucGVyc2lzdGVudH1cbiAgICAgICAgcHJlc2VudGF0aW9uPXtub3RpZmljYXRpb24ucHJlc2VudGF0aW9ufVxuICAgICAgICBwcm9ncmVzcz17bm90aWZpY2F0aW9uLnByb2dyZXNzfVxuICAgICAgICByZW1vdmluZz17bm90aWZpY2F0aW9uLnJlbW92aW5nfVxuICAgICAgICB0aXRsZT17bm90aWZpY2F0aW9uLnRpdGxlfVxuICAgICAgICB0eXBlPXtub3RpZmljYXRpb24udHlwZX1cbiAgICAgIC8+XG4gICAgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIGRhdGFTZXQ9e3RoaXMucm9vdFZpZXdEYXRhU2V0IHx8PSB7Y29tcG9uZW50OiBcImZsYXNoLW5vdGlmaWNhdGlvbnMtY29udGFpbmVyXCJ9fVxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUmVhY3QgTmF0aXZlIHR5cGVzIGRvIG5vdCBpbmNsdWRlIHRoZSB3ZWItb25seSBcImZpeGVkXCIgcG9zaXRpb24uXG4gICAgICAgICAgc3R5bGU9e3ZpZXdTdHlsZX1cbiAgICAgICAgICB0ZXN0SUQ9XCJmbGFzaC1ub3RpZmljYWl0b25zL2NvbnRhaW5lclwiXG4gICAgICAgID5cbiAgICAgICAgICB7dG9hc3ROb3RpZmljYXRpb25zLm1hcChyZW5kZXJOb3RpZmljYXRpb24pfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIHttb2RhbE5vdGlmaWNhdGlvbnMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBSZWFjdCBOYXRpdmUgdHlwZXMgZG8gbm90IGluY2x1ZGUgdGhlIHdlYi1vbmx5IFwiZml4ZWRcIiBwb3NpdGlvbi5cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIC8vIFVubGlrZSB0aGUgdG9hc3QgY29udGFpbmVyLCB0aGlzIG92ZXJsYXkgc3dhbGxvd3MgcG9pbnRlciBldmVudHMgb24gcHVycG9zZTpcbiAgICAgICAgICAgICAgLy8gYSBtb2RhbCBibG9ja3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYXBwIHVuZGVybmVhdGggdW50aWwgaXQgaXMgZGlzbWlzc2VkLlxuICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBcImF1dG9cIixcbiAgICAgICAgICAgICAgcG9zaXRpb246IGlzTmF0aXZlID8gXCJhYnNvbHV0ZVwiIDogXCJmaXhlZFwiLFxuICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgIHpJbmRleDogMTAwMDAwXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGVzdElEPVwiZmxhc2gtbm90aWZpY2F0aW9ucy9tb2RhbC1vdmVybGF5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bW9kYWxOb3RpZmljYXRpb25zLm1hcChyZW5kZXJOb3RpZmljYXRpb24pfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsuLi51bmtub3dufSBhcmdzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25QdXNoTm90aWZpY2F0aW9uRXZlbnQgPSAoLi4uYXJncykgPT4ge1xuICAgIHRoaXMub25QdXNoTm90aWZpY2F0aW9uKC8qKiBAdHlwZSB7Tm90aWZpY2F0aW9uT2JqZWN0VHlwZX0gKi8gKGFyZ3NbMF0pKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm90aWZpY2F0aW9uT2JqZWN0VHlwZX0gZGV0YWlsXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25QdXNoTm90aWZpY2F0aW9uID0gKGRldGFpbCkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBkaWdnKGRldGFpbCwgXCJ0eXBlXCIpXG5cbiAgICAvLyBBbiBhY3Rpdml0eSBub3RpZmljYXRpb24gd2l0aG91dCBhbiBpZCBoYXMgbm8gaGFuZGxlIHRvIHJlc29sdmUgaXQgYW5kXG4gICAgLy8gd291bGQgc3RheSBvbiBzY3JlZW4gZm9yZXZlciwgc28gaXQgaXMgZHJvcHBlZC5cbiAgICBpZiAodHlwZSA9PSBcImFjdGl2aXR5XCIgJiYgZGV0YWlsLmlkID09IHVuZGVmaW5lZCkge1xuICAgICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IGFjdGl2aXR5IG5vdGlmaWNhdGlvbiB3aXRob3V0IGlkIGlnbm9yZWRcIilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5zLmNvdW50ICsgMVxuICAgIGNvbnN0IHBlcnNpc3RlbnQgPSBkaWcoZGV0YWlsLCBcInBlcnNpc3RlbnRcIikgPT0gdHJ1ZVxuICAgIGNvbnN0IHByZXNlbnRhdGlvbiA9IGRpZyhkZXRhaWwsIFwicHJlc2VudGF0aW9uXCIpID09IFwibW9kYWxcIiA/IFwibW9kYWxcIiA6IFwidG9hc3RcIlxuICAgIC8vIEFjdGl2aXR5IG5vdGlmaWNhdGlvbnMgc3RheSBvbiBzY3JlZW4gdW50aWwgdGhlaXIgaGFuZGxlIHJlc29sdmVzIHRoZW0sIGFuZFxuICAgIC8vIHBlcnNpc3RlbnQgbm90aWZpY2F0aW9ucyBzdGF5IHVudGlsIHRoZSB1c2VyIGRpc21pc3NlcyB0aGVtLiBCb3RoIHNraXAgdGhlXG4gICAgLy8gYXV0by1kaXNtaXNzIHRpbWVyOyBvbmx5IGEgcGxhaW4gdG9hc3QgZ2V0cyBvbmUuXG4gICAgY29uc3QgdGltZW91dCA9IHR5cGUgPT0gXCJhY3Rpdml0eVwiIHx8IHBlcnNpc3RlbnQgPyB1bmRlZmluZWQgOiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gdGltZW91dFwiLCB7aWQ6IGNvdW50fSlcbiAgICAgIHRoaXMuZGlzbWlzc05vdGlmaWNhdGlvbkJ5Q291bnQoY291bnQsIFwidGltZW91dFwiKVxuICAgIH0sIDQwMDApXG5cbiAgICBpZiAodGltZW91dCkge1xuICAgICAgdGhpcy50aW1lb3V0cy5wdXNoKHRpbWVvdXQpXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSAqL1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHtcbiAgICAgIGNvdW50LFxuICAgICAgaGVpZ2h0OiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCksXG4gICAgICBpZDogZGlnKGRldGFpbCwgXCJpZFwiKSxcbiAgICAgIG1hcmdpbkJvdHRvbTogbmV3IEFuaW1hdGVkLlZhbHVlKHRoaXMubm90aWZpY2F0aW9uU3BhY2luZyksXG4gICAgICBtZWFzdXJlZEhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgbWVzc2FnZTogZGlnZyhkZXRhaWwsIFwibWVzc2FnZVwiKSxcbiAgICAgIG9wYWNpdHk6IG5ldyBBbmltYXRlZC5WYWx1ZSgxKSxcbiAgICAgIHBlcnNpc3RlbnQsXG4gICAgICBwcmVzZW50YXRpb24sXG4gICAgICBwcm9ncmVzczogdW5kZWZpbmVkLFxuICAgICAgcmVtb3Zpbmc6IGZhbHNlLFxuICAgICAgdGltZW91dCxcbiAgICAgIHRpdGxlOiBkaWdnKGRldGFpbCwgXCJ0aXRsZVwiKSxcbiAgICAgIHR5cGVcbiAgICB9XG5cbiAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIGFkZGVkXCIsIHtcbiAgICAgIGlkOiBjb3VudCxcbiAgICAgIHBlcnNpc3RlbnQ6IG5vdGlmaWNhdGlvbi5wZXJzaXN0ZW50LFxuICAgICAgcHJlc2VudGF0aW9uOiBub3RpZmljYXRpb24ucHJlc2VudGF0aW9uLFxuICAgICAgdGl0bGU6IG5vdGlmaWNhdGlvbi50aXRsZSxcbiAgICAgIHR5cGU6IG5vdGlmaWNhdGlvbi50eXBlXG4gICAgfSlcblxuICAgIHRoaXMuc2V0U3RhdGUoe2NvdW50LCBub3RpZmljYXRpb25zOiB0aGlzLnMubm90aWZpY2F0aW9ucy5jb25jYXQoW25vdGlmaWNhdGlvbl0pfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IG5vdGlmaWNhdGlvblxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uUmVtb3ZlZENsaWNrZWQgPSAobm90aWZpY2F0aW9uKSA9PiB7XG4gICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbiBwcmVzc2VkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50fSlcbiAgICB0aGlzLmRpc21pc3NOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBcInByZXNzXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsuLi51bmtub3dufSBhcmdzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25BY3Rpdml0eU5vdGlmaWNhdGlvbkV2ZW50ID0gKC4uLmFyZ3MpID0+IHtcbiAgICB0aGlzLm9uQWN0aXZpdHlOb3RpZmljYXRpb24oLyoqIEB0eXBlIHtBY3Rpdml0eU5vdGlmaWNhdGlvbkRldGFpbFR5cGV9ICovIChhcmdzWzBdKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FjdGl2aXR5Tm90aWZpY2F0aW9uRGV0YWlsVHlwZX0gZGV0YWlsXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25BY3Rpdml0eU5vdGlmaWNhdGlvbiA9IChkZXRhaWwpID0+IHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSAvKiogQHR5cGUge1N0b3JlZE5vdGlmaWNhdGlvblR5cGUgfCB1bmRlZmluZWR9ICovICh0aGlzLnMubm90aWZpY2F0aW9ucy5maW5kKFxuICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gaXRlbSAqL1xuICAgICAgKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGRldGFpbC5pZFxuICAgICkpXG4gICAgaWYgKCFub3RpZmljYXRpb24gfHwgbm90aWZpY2F0aW9uLnJlbW92aW5nKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYWN0aXZpdHkgbm90aWZpY2F0aW9uIG5vdCBmb3VuZFwiLCB7aWQ6IGRldGFpbC5pZCwgYWN0aW9uOiBkZXRhaWwuYWN0aW9ufSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChkZXRhaWwuYWN0aW9uID09IFwidXBkYXRlXCIpIHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBhY3Rpdml0eSBwcm9ncmVzcyB1cGRhdGVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCBwcm9ncmVzczogZGV0YWlsLnByb2dyZXNzfSlcbiAgICAgIG5vdGlmaWNhdGlvbi5wcm9ncmVzcyA9IGRldGFpbC5wcm9ncmVzc1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7bm90aWZpY2F0aW9uczogWy4uLnRoaXMucy5ub3RpZmljYXRpb25zXX0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoZGV0YWlsLmFjdGlvbiA9PSBcInN1Y2NlZWRcIiB8fCBkZXRhaWwuYWN0aW9uID09IFwiZmFpbFwiKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYWN0aXZpdHkgcmVzb2x2ZWRcIiwge2lkOiBub3RpZmljYXRpb24uY291bnQsIGFjdGlvbjogZGV0YWlsLmFjdGlvbn0pXG4gICAgICAvLyBNYXAgdGhlIGFjdGlvbiB2ZXJicyBvbnRvIHRoZSBjYW5vbmljYWwgdHlwZSBuYW1lcyBzbyB0aGUgY2FyZFxuICAgICAgLy8gcmVuZGVycyB0aGUgZXhpc3Rpbmcgc3VjY2Vzcy9lcnJvciB0b25lcyBkdXJpbmcgdGhlIGRpc21pc3MgZmxhc2guXG4gICAgICBub3RpZmljYXRpb24udHlwZSA9IGRldGFpbC5hY3Rpb24gPT0gXCJzdWNjZWVkXCIgPyBcInN1Y2Nlc3NcIiA6IFwiZXJyb3JcIlxuICAgICAgaWYgKGRldGFpbC5tZXNzYWdlKSB7XG4gICAgICAgIG5vdGlmaWNhdGlvbi5tZXNzYWdlID0gZGV0YWlsLm1lc3NhZ2VcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe25vdGlmaWNhdGlvbnM6IFsuLi50aGlzLnMubm90aWZpY2F0aW9uc119KVxuICAgICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgZGV0YWlsLmFjdGlvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBhY3Rpdml0eSBkaXNtaXNzZWRcIiwge2lkOiBub3RpZmljYXRpb24uY291bnQsIGFjdGlvbjogZGV0YWlsLmFjdGlvbn0pXG4gICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgXCJkb25lXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSBub3RpZmljYXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1lYXN1cmVkSGVpZ2h0XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25Ob3RpZmljYXRpb25NZWFzdXJlZCA9IChub3RpZmljYXRpb24sIG1lYXN1cmVkSGVpZ2h0KSA9PiB7XG4gICAgaWYgKG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCkgcmV0dXJuXG5cbiAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG1lYXN1cmVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCBoZWlnaHQ6IG1lYXN1cmVkSGVpZ2h0fSlcblxuICAgIG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCA9IG1lYXN1cmVkSGVpZ2h0XG4gICAgbm90aWZpY2F0aW9uLmhlaWdodC5zZXRWYWx1ZShtZWFzdXJlZEhlaWdodClcbiAgICB0aGlzLnNldFN0YXRlKHtub3RpZmljYXRpb25zOiBbLi4udGhpcy5zLm5vdGlmaWNhdGlvbnNdfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAqL1xuICBkaXNtaXNzTm90aWZpY2F0aW9uQnlDb3VudCA9IChjb3VudCwgcmVhc29uID0gXCJ1bmtub3duXCIpID0+IHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSAvKiogQHR5cGUge1N0b3JlZE5vdGlmaWNhdGlvblR5cGUgfCB1bmRlZmluZWR9ICovICh0aGlzLnMubm90aWZpY2F0aW9ucy5maW5kKFxuICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gaXRlbSAqL1xuICAgICAgKGl0ZW0pID0+IGl0ZW0uY291bnQgPT0gY291bnRcbiAgICApKVxuICAgIGlmICghbm90aWZpY2F0aW9uKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG5vdCBmb3VuZFwiLCB7aWQ6IGNvdW50LCByZWFzb259KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgcmVhc29uKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGRpc21pc3NOb3RpZmljYXRpb24gPSAobm90aWZpY2F0aW9uLCByZWFzb24gPSBcInVua25vd25cIikgPT4ge1xuICAgIGlmIChub3RpZmljYXRpb24ucmVtb3ZpbmcpIHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gYWxyZWFkeSByZW1vdmluZ1wiLCB7aWQ6IG5vdGlmaWNhdGlvbi5jb3VudCwgcmVhc29ufSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIG5vdGlmaWNhdGlvbi5yZW1vdmluZyA9IHRydWVcbiAgICBpZiAobm90aWZpY2F0aW9uLnRpbWVvdXQpIGNsZWFyVGltZW91dChub3RpZmljYXRpb24udGltZW91dClcblxuICAgIGlmICghbm90aWZpY2F0aW9uLm1lYXN1cmVkSGVpZ2h0KSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG1pc3NpbmcgbWVhc3VyZWQgaGVpZ2h0XCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50fSlcbiAgICAgIG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCA9IDFcbiAgICAgIG5vdGlmaWNhdGlvbi5oZWlnaHQuc2V0VmFsdWUoMSlcbiAgICB9XG5cbiAgICAvLyBSZS1yZW5kZXIgaW1tZWRpYXRlbHkgc28gdGhlIGNsb3Npbmcgbm90aWZpY2F0aW9uIGRyb3BzIHBvaW50ZXIgZXZlbnRzIChwb2ludGVyRXZlbnRzPVwibm9uZVwiKVxuICAgIC8vIHRoZSBpbnN0YW50IGl0IHN0YXJ0cyBmYWRpbmcgb3V0LiBPdGhlcndpc2UgdGhlIGZhZGluZyBvdmVybGF5IGtlZXBzIGludGVyY2VwdGluZyB0aGUgbmV4dFxuICAgIC8vIGNsaWNrL2ZpbGwgZm9yIHRoZSB3aG9sZSBmYWRlIGR1cmF0aW9uIGV2ZW4gdGhvdWdoIGl0IGlzIG9uIGl0cyB3YXkgb3V0LlxuICAgIHRoaXMuc2V0U3RhdGUoe25vdGlmaWNhdGlvbnM6IFsuLi50aGlzLnMubm90aWZpY2F0aW9uc119KVxuXG4gICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IGFuaW1hdGlvbnMgYmVnaW5cIiwge1xuICAgICAgaWQ6IG5vdGlmaWNhdGlvbi5jb3VudCxcbiAgICAgIGFuaW1hdGlvbnM6IFtcIm9wYWNpdHlcIiwgXCJoZWlnaHRcIiwgXCJtYXJnaW5Cb3R0b21cIl0sXG4gICAgICByZWFzb25cbiAgICB9KVxuICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBmYWRlIGFuaW1hdGlvbiBiZWdpblwiLCB7aWQ6IG5vdGlmaWNhdGlvbi5jb3VudCwgcmVhc29ufSlcblxuICAgIGNvbnN0IGRpc21pc3NEdXJhdGlvbiA9IHJlYXNvbiA9PT0gXCJwcmVzc1wiID8gODAgOiAyMDBcblxuICAgIEFuaW1hdGVkLnBhcmFsbGVsKFtcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhub3RpZmljYXRpb24ub3BhY2l0eSwge3RvVmFsdWU6IDAsIGR1cmF0aW9uOiBkaXNtaXNzRHVyYXRpb24sIHVzZU5hdGl2ZURyaXZlcjogZmFsc2V9KSxcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhub3RpZmljYXRpb24uaGVpZ2h0LCB7dG9WYWx1ZTogMCwgZHVyYXRpb246IGRpc21pc3NEdXJhdGlvbiwgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZX0pLFxuICAgICAgQW5pbWF0ZWQudGltaW5nKG5vdGlmaWNhdGlvbi5tYXJnaW5Cb3R0b20sIHt0b1ZhbHVlOiAwLCBkdXJhdGlvbjogZGlzbWlzc0R1cmF0aW9uLCB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlfSlcbiAgICBdKS5zdGFydCgoKSA9PiB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYW5pbWF0aW9ucyBlbmRcIiwge1xuICAgICAgICBpZDogbm90aWZpY2F0aW9uLmNvdW50LFxuICAgICAgICBhbmltYXRpb25zOiBbXCJvcGFjaXR5XCIsIFwiaGVpZ2h0XCIsIFwibWFyZ2luQm90dG9tXCJdLFxuICAgICAgICByZWFzb25cbiAgICAgIH0pXG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogZmFkZSBhbmltYXRpb24gZW5kXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCByZWFzb259KVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uczogdGhpcy5zLm5vdGlmaWNhdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIC8qKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IGl0ZW0gKi9cbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5jb3VudCAhPSBub3RpZmljYXRpb24uY291bnRcbiAgICAgICAgKVxuICAgICAgfSlcblxuICAgICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbiByZW1vdmVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCByZWFzb259KVxuICAgIH0pXG4gIH1cbn0pKVxuIl19
@@ -2,13 +2,17 @@ declare const _default: React.NamedExoticComponent<FlashNotificationsNotificatio
2
2
  export default _default;
3
3
  export type StoredNotificationType = {
4
4
  count: number;
5
+ id: string | undefined;
5
6
  height: import("react-native").Animated.Value;
6
7
  marginBottom: import("react-native").Animated.Value;
7
8
  measuredHeight: number | undefined;
8
9
  message: string;
9
10
  opacity: import("react-native").Animated.Value;
11
+ persistent: boolean;
12
+ presentation: "toast" | "modal";
13
+ progress: number | undefined;
10
14
  removing: boolean;
11
- timeout: ReturnType<typeof setTimeout>;
15
+ timeout: ReturnType<typeof setTimeout> | undefined;
12
16
  title: string;
13
17
  type: string;
14
18
  };
@@ -19,6 +23,9 @@ export type FlashNotificationsNotificationProps = {
19
23
  notification: StoredNotificationType;
20
24
  onMeasured: (notification: StoredNotificationType, measuredHeight: number) => void;
21
25
  onRemovedClicked: (notification: StoredNotificationType) => void;
26
+ persistent: boolean;
27
+ presentation: "toast" | "modal";
28
+ progress?: number | undefined;
22
29
  removing: boolean;
23
30
  title: string;
24
31
  type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"notification.d.ts","sourceRoot":"/src/","sources":["container/notification.jsx"],"names":[],"mappings":";;;WAYc,MAAM;YACN,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;kBACrC,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;oBACrC,MAAM,GAAG,SAAS;aAClB,MAAM;aACN,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;cACrC,OAAO;aACP,UAAU,CAAC,OAAO,UAAU,CAAC;WAC7B,MAAM;UACN,MAAM;;;gBAKN,MAAM,YAAC;WACP,MAAM;aACN,MAAM;kBACN,sBAAsB;gBACtB,CAAC,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI;sBACtE,CAAC,YAAY,EAAE,sBAAsB,KAAK,IAAI;cAC9C,OAAO;WACP,MAAM;UACN,MAAM;;kBA7Be,OAAO"}
1
+ {"version":3,"file":"notification.d.ts","sourceRoot":"/src/","sources":["container/notification.jsx"],"names":[],"mappings":";;;WAcc,MAAM;QACN,MAAM,GAAG,SAAS;YAClB,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;kBACrC,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;oBACrC,MAAM,GAAG,SAAS;aAClB,MAAM;aACN,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;gBACrC,OAAO;kBACP,OAAO,GAAG,OAAO;cACjB,MAAM,GAAG,SAAS;cAClB,OAAO;aACP,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS;WACzC,MAAM;UACN,MAAM;;;gBAKN,MAAM,YAAC;WACP,MAAM;aACN,MAAM;kBACN,sBAAsB;gBACtB,CAAC,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI;sBACtE,CAAC,YAAY,EAAE,sBAAsB,KAAK,IAAI;gBAC9C,OAAO;kBACP,OAAO,GAAG,OAAO;eACjB,MAAM,YAAC;cACP,OAAO;WACP,MAAM;UACN,MAAM;;kBAtCe,OAAO"}
@@ -6,16 +6,21 @@ import React, { memo, useMemo } from "react";
6
6
  import { Animated, Pressable, Text, View } from "react-native";
7
7
  import { shapeComponent, ShapeComponent } from "set-state-compare/build/shape-component.js";
8
8
  import { useBreakpoint } from "responsive-breakpoints";
9
+ import configuration from "../configuration.js";
9
10
  /**
10
11
  * @typedef {object} StoredNotificationType
11
12
  * @property {number} count
13
+ * @property {string | undefined} id
12
14
  * @property {import("react-native").Animated.Value} height
13
15
  * @property {import("react-native").Animated.Value} marginBottom
14
16
  * @property {number | undefined} measuredHeight
15
17
  * @property {string} message
16
18
  * @property {import("react-native").Animated.Value} opacity
19
+ * @property {boolean} persistent
20
+ * @property {"toast" | "modal"} presentation
21
+ * @property {number | undefined} progress
17
22
  * @property {boolean} removing
18
- * @property {ReturnType<typeof setTimeout>} timeout
23
+ * @property {ReturnType<typeof setTimeout> | undefined} timeout
19
24
  * @property {string} title
20
25
  * @property {string} type
21
26
  */
@@ -27,6 +32,9 @@ import { useBreakpoint } from "responsive-breakpoints";
27
32
  * @property {StoredNotificationType} notification
28
33
  * @property {(notification: StoredNotificationType, measuredHeight: number) => void} onMeasured
29
34
  * @property {(notification: StoredNotificationType) => void} onRemovedClicked
35
+ * @property {boolean} persistent
36
+ * @property {"toast" | "modal"} presentation
37
+ * @property {number=} progress
30
38
  * @property {boolean} removing
31
39
  * @property {string} title
32
40
  * @property {string} type
@@ -37,6 +45,8 @@ const dataSets = {};
37
45
  const viewStyles = {};
38
46
  /** @type {Record<string, import("react-native").TextStyle>} */
39
47
  const textStyles = {};
48
+ /** @type {import("react-native").ViewStyle} */
49
+ const barFillStyle = { backgroundColor: "#fff", borderRadius: 2, height: 4, width: "30%" };
40
50
  /**
41
51
  * @augments {ShapeComponent<FlashNotificationsNotificationProps>}
42
52
  */
@@ -48,14 +58,54 @@ class FlashNotificationsNotification extends ShapeComponent {
48
58
  notification: PropTypes.object.isRequired,
49
59
  onMeasured: PropTypes.func.isRequired,
50
60
  onRemovedClicked: PropTypes.func.isRequired,
61
+ persistent: PropTypes.bool.isRequired,
62
+ presentation: PropTypes.oneOf(["toast", "modal"]).isRequired,
63
+ progress: PropTypes.number,
51
64
  removing: PropTypes.bool.isRequired,
52
65
  title: PropTypes.string.isRequired,
53
66
  type: PropTypes.string.isRequired
54
67
  });
68
+ /** @type {import("react-native").Animated.Value} */
69
+ barSweep = new Animated.Value(0);
70
+ /** @type {import("react-native").Animated.CompositeAnimation | undefined} */
71
+ barSweepAnimation = undefined;
72
+ /** @type {number} */
73
+ barTrackWidth = 0;
74
+ /**
75
+ * The element that had focus when this modal notification mounted, so focus
76
+ * can be returned to it when the modal is dismissed.
77
+ * @type {HTMLElement | undefined}
78
+ */
79
+ focusReturnElement = undefined;
80
+ /** @type {{focus?: () => void} | undefined} */
81
+ cardRef = undefined;
82
+ componentDidMount() {
83
+ if (this.p.presentation != "modal")
84
+ return;
85
+ // Remember what had focus before the dialog opened so it can be restored
86
+ // on dismiss. On native there is no document; focus handling is a no-op.
87
+ if (typeof document != "undefined" && document.activeElement instanceof HTMLElement) {
88
+ this.focusReturnElement = document.activeElement;
89
+ }
90
+ // Move focus into the dialog. The card is focusable via tabIndex={-1}.
91
+ setTimeout(() => {
92
+ this.cardRef?.focus?.();
93
+ }, 0);
94
+ }
95
+ componentWillUnmount() {
96
+ this.barSweepAnimation?.stop();
97
+ if (this.p.presentation != "modal")
98
+ return;
99
+ // Return focus to whatever was focused before the modal opened.
100
+ this.focusReturnElement?.focus?.();
101
+ }
55
102
  render() {
56
- const { count, message, title, type } = this.p;
103
+ const { count, message, presentation, progress, title, type } = this.p;
57
104
  const { className } = this.props;
58
105
  const breakpoint = useBreakpoint();
106
+ if (presentation == "modal") {
107
+ return this.renderModal();
108
+ }
59
109
  const pressableDataSet = useMemo(() => ({
60
110
  class: className,
61
111
  role: "dialog",
@@ -81,6 +131,9 @@ class FlashNotificationsNotification extends ShapeComponent {
81
131
  else if (type == "alert") {
82
132
  return "1px solid rgba(204, 51, 0, 0.95)";
83
133
  }
134
+ else if (type == "activity") {
135
+ return "1px solid rgba(30, 41, 59, 0.95)";
136
+ }
84
137
  return undefined;
85
138
  })(),
86
139
  backgroundColor: (() => {
@@ -93,6 +146,9 @@ class FlashNotificationsNotification extends ShapeComponent {
93
146
  else if (type == "alert") {
94
147
  return "rgba(204, 51, 0, 0.87)";
95
148
  }
149
+ else if (type == "activity") {
150
+ return "rgba(30, 41, 59, 0.87)";
151
+ }
96
152
  return undefined;
97
153
  })()
98
154
  },
@@ -114,7 +170,109 @@ class FlashNotificationsNotification extends ShapeComponent {
114
170
  , {
115
171
  // @ts-expect-error React Native types do not include the web-only dataSet prop.
116
172
  dataSet: dataSets[`notificationMessage-${count}`] ||= { count: `${count}` }, testID: "notification-message" },
117
- React.createElement(Text, { style: textStyles.messageText ||= { color: "#fff" }, testID: `flash-notifications/notification-${count}/message` }, message)))));
173
+ React.createElement(Text, { style: textStyles.messageText ||= { color: "#fff" }, testID: `flash-notifications/notification-${count}/message` }, message)),
174
+ type == "activity" ? (React.createElement(View, { onLayout: this.tt.onBarLayout, style: viewStyles.barTrack ||= {
175
+ backgroundColor: "rgba(255, 255, 255, 0.3)",
176
+ borderRadius: 2,
177
+ height: 4,
178
+ marginTop: 10,
179
+ overflow: "hidden"
180
+ }, testID: "flash-notifications-notification-bar" }, progress == undefined ? (React.createElement(Animated.View, { style: {
181
+ ...barFillStyle,
182
+ transform: [{ translateX: this.barSweep }]
183
+ }, testID: "flash-notifications-notification-bar-fill" })) : (React.createElement(View, { style: {
184
+ ...barFillStyle,
185
+ width: `${progress * 100}%`
186
+ }, testID: "flash-notifications-notification-bar-fill" })))) : null)));
187
+ }
188
+ /**
189
+ * Modal presentation: a full-screen dimmed backdrop with the notification
190
+ * centered on top. The backdrop has no press handler on purpose — clicking
191
+ * it (or pressing Escape) must not dismiss the notification; only the
192
+ * explicit dismiss button does.
193
+ *
194
+ * @returns {React.ReactElement}
195
+ */
196
+ renderModal() {
197
+ const { count, message, title, type } = this.p;
198
+ const breakpoint = useBreakpoint();
199
+ const dismissLabel = configuration.translate("js.shared.dismiss", { defaultValue: "Dismiss" });
200
+ return (React.createElement(Animated.View, { style: this.tt.modalWrapperStyle, testID: "flash-notifications-modal-backdrop" },
201
+ React.createElement(Pressable, { "aria-modal": true, ref: /** @param {import("react-native").View | null} ref */ (ref) => {
202
+ this.cardRef = /** @type {{focus?: () => void} | undefined} */ (ref);
203
+ }, role: "alertdialog", style: breakpoint.styling({
204
+ base: {
205
+ padding: 15,
206
+ borderRadius: 11,
207
+ border: (() => {
208
+ if (type == "error") {
209
+ return "1px solid rgba(161, 34, 32, 0.95)";
210
+ }
211
+ else if (type == "success") {
212
+ return "1px solid rgba(0, 0, 0, 0.95)";
213
+ }
214
+ else if (type == "alert") {
215
+ return "1px solid rgba(204, 51, 0, 0.95)";
216
+ }
217
+ else if (type == "activity") {
218
+ return "1px solid rgba(30, 41, 59, 0.95)";
219
+ }
220
+ return undefined;
221
+ })(),
222
+ backgroundColor: (() => {
223
+ if (type == "error") {
224
+ return "rgba(161, 34, 32, 0.87)";
225
+ }
226
+ else if (type == "success") {
227
+ return "rgba(0, 0, 0, 0.87)";
228
+ }
229
+ else if (type == "alert") {
230
+ return "rgba(204, 51, 0, 0.87)";
231
+ }
232
+ else if (type == "activity") {
233
+ return "rgba(30, 41, 59, 0.87)";
234
+ }
235
+ return "rgba(0, 0, 0, 0.87)";
236
+ })()
237
+ },
238
+ smDown: {
239
+ marginLeft: 20,
240
+ marginRight: 20,
241
+ maxWidth: "100%"
242
+ },
243
+ mdUp: {
244
+ width: 400,
245
+ maxWidth: "80%"
246
+ }
247
+ }), tabIndex: -1, testID: "flash-notifications-notification" },
248
+ React.createElement(View, { style: viewStyles.titleView ||= { marginBottom: 5 }, testID: "notification-title" },
249
+ React.createElement(Text, { style: textStyles.titleText ||= {
250
+ color: "#fff",
251
+ fontWeight: 700
252
+ }, testID: `flash-notifications/notification-${count}/title` }, title)),
253
+ React.createElement(View
254
+ // @ts-expect-error React Native types do not include the web-only dataSet prop.
255
+ , {
256
+ // @ts-expect-error React Native types do not include the web-only dataSet prop.
257
+ dataSet: dataSets[`notificationMessage-${count}`] ||= { count: `${count}` }, testID: "notification-message" },
258
+ React.createElement(Text, { style: textStyles.messageText ||= { color: "#fff" }, testID: `flash-notifications/notification-${count}/message` }, message)),
259
+ React.createElement(Pressable, { onPress: this.tt.onRemovedClicked, style: breakpoint.styling({
260
+ base: {
261
+ alignSelf: "flex-start",
262
+ backgroundColor: "rgba(255, 255, 255, 0.15)",
263
+ borderRadius: 8,
264
+ borderWidth: 1,
265
+ borderColor: "rgba(255, 255, 255, 0.6)",
266
+ cursor: "pointer",
267
+ marginTop: 15,
268
+ paddingHorizontal: 14,
269
+ paddingVertical: 8
270
+ }
271
+ }), testID: "flash-notifications-modal-dismiss" },
272
+ React.createElement(Text, { style: textStyles.dismissText ||= {
273
+ color: "#fff",
274
+ fontWeight: 700
275
+ } }, dismissLabel)))));
118
276
  }
119
277
  get wrapperStyle() {
120
278
  const { notification, removing } = this.p;
@@ -126,6 +284,22 @@ class FlashNotificationsNotification extends ShapeComponent {
126
284
  pointerEvents: removing ? "none" : "auto"
127
285
  });
128
286
  }
287
+ get modalWrapperStyle() {
288
+ const { notification, removing } = this.p;
289
+ return /** @type {import("react-native").Animated.WithAnimatedObject<import("react-native").ViewStyle>} */ ({
290
+ // Dimmed full-screen backdrop with the card centered on top of it.
291
+ alignItems: "center",
292
+ backgroundColor: "rgba(0, 0, 0, 0.45)",
293
+ bottom: 0,
294
+ justifyContent: "center",
295
+ left: 0,
296
+ opacity: notification.opacity,
297
+ pointerEvents: removing ? "none" : "auto",
298
+ position: "absolute",
299
+ right: 0,
300
+ top: 0
301
+ });
302
+ }
129
303
  onRemovedClicked = () => this.p.onRemovedClicked(this.p.notification);
130
304
  /**
131
305
  * @param {import("react-native").LayoutChangeEvent} event
@@ -137,6 +311,43 @@ class FlashNotificationsNotification extends ShapeComponent {
137
311
  this.p.onMeasured(notification, event.nativeEvent.layout.height);
138
312
  }
139
313
  };
314
+ /**
315
+ * @param {FlashNotificationsNotificationProps} prevProps
316
+ * @returns {void}
317
+ */
318
+ componentDidUpdate(prevProps) {
319
+ if (prevProps.progress == undefined && this.p.progress != undefined) {
320
+ this.barSweepAnimation?.stop();
321
+ this.barSweepAnimation = undefined;
322
+ return;
323
+ }
324
+ if (prevProps.progress != undefined && this.p.progress == undefined && this.barTrackWidth) {
325
+ this.startBarSweep();
326
+ }
327
+ }
328
+ /**
329
+ * @returns {void}
330
+ */
331
+ startBarSweep() {
332
+ this.barSweepAnimation?.stop();
333
+ this.barSweep.setValue(-this.barTrackWidth * 0.3);
334
+ const sweep = Animated.loop(Animated.timing(this.barSweep, { duration: 1000, toValue: this.barTrackWidth, useNativeDriver: false }));
335
+ sweep.start();
336
+ this.barSweepAnimation = sweep;
337
+ }
338
+ /**
339
+ * @param {import("react-native").LayoutChangeEvent} event
340
+ * @returns {void}
341
+ */
342
+ onBarLayout = (event) => {
343
+ const trackWidth = event.nativeEvent.layout.width;
344
+ if (!trackWidth || this.barTrackWidth == trackWidth)
345
+ return;
346
+ this.barTrackWidth = trackWidth;
347
+ if (this.p.progress == undefined) {
348
+ this.startBarSweep();
349
+ }
350
+ };
140
351
  }
141
352
  export default memo(shapeComponent(FlashNotificationsNotification));
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJjb250YWluZXIvbm90aWZpY2F0aW9uLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBO0FBQ2xDLGlEQUFpRDtBQUNqRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDMUMsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFFLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUVwRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVILHFDQUFxQztBQUNyQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUE7QUFDbkIsK0RBQStEO0FBQy9ELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQTtBQUNyQiwrREFBK0Q7QUFDL0QsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO0FBRXJCOztHQUVHO0FBQ0gsTUFBTSw4QkFBK0IsU0FBUSxjQUFjO0lBQ3pELE1BQU0sQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTTtRQUMzQixLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ2xDLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVU7UUFDcEMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVTtRQUN6QyxVQUFVLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ3JDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVTtRQUMzQyxRQUFRLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ25DLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVU7UUFDbEMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVTtLQUNsQyxDQUFDLENBQUE7SUFFRixNQUFNO1FBQ0osTUFBTSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDNUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7UUFDOUIsTUFBTSxVQUFVLEdBQUcsYUFBYSxFQUFFLENBQUE7UUFFbEMsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQzlCLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDTCxLQUFLLEVBQUUsU0FBUztZQUNoQixJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUk7U0FDTCxDQUFDLEVBQ0YsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQ2xCLENBQUE7UUFDRCxPQUFPLENBQ0wsb0JBQUMsUUFBUSxDQUFDLElBQUksSUFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZO1lBRTNCLG9CQUFDLFNBQVM7WUFDUixnRkFBZ0Y7O2dCQUFoRixnRkFBZ0Y7Z0JBQ2hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUMxQixPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFDakMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7b0JBQ3hCLElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsRUFBRTt3QkFDWCxZQUFZLEVBQUUsRUFBRTt3QkFDaEIsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRTs0QkFDWixJQUFJLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztnQ0FDcEIsT0FBTyxtQ0FBbUMsQ0FBQTs0QkFDNUMsQ0FBQztpQ0FBTSxJQUFJLElBQUksSUFBSSxTQUFTLEVBQUUsQ0FBQztnQ0FDN0IsT0FBTywrQkFBK0IsQ0FBQTs0QkFDeEMsQ0FBQztpQ0FBTSxJQUFJLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztnQ0FDM0IsT0FBTyxrQ0FBa0MsQ0FBQTs0QkFDM0MsQ0FBQzs0QkFFRCxPQUFPLFNBQVMsQ0FBQTt3QkFDbEIsQ0FBQyxDQUFDLEVBQUU7d0JBQ0osZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFOzRCQUNyQixJQUFJLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztnQ0FDcEIsT0FBTyx5QkFBeUIsQ0FBQTs0QkFDbEMsQ0FBQztpQ0FBTSxJQUFJLElBQUksSUFBSSxTQUFTLEVBQUUsQ0FBQztnQ0FDN0IsT0FBTyxxQkFBcUIsQ0FBQTs0QkFDOUIsQ0FBQztpQ0FBTSxJQUFJLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztnQ0FDM0IsT0FBTyx3QkFBd0IsQ0FBQTs0QkFDakMsQ0FBQzs0QkFFRCxPQUFPLFNBQVMsQ0FBQTt3QkFDbEIsQ0FBQyxDQUFDLEVBQUU7cUJBQ0w7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLEtBQUssRUFBRSxNQUFNO3FCQUNkO29CQUNELElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsR0FBRzt3QkFDVixRQUFRLEVBQUUsTUFBTTtxQkFDakI7aUJBQ0YsQ0FBQyxFQUNGLE1BQU0sRUFBQyxrQ0FBa0M7Z0JBRXpDLG9CQUFDLElBQUksSUFDSCxLQUFLLEVBQUUsVUFBVSxDQUFDLFNBQVMsS0FBSyxFQUFDLFlBQVksRUFBRSxDQUFDLEVBQUMsRUFDakQsTUFBTSxFQUFDLG9CQUFvQjtvQkFFM0Isb0JBQUMsSUFBSSxJQUNILEtBQUssRUFBRSxVQUFVLENBQUMsU0FBUyxLQUFLOzRCQUM5QixLQUFLLEVBQUUsTUFBTTs0QkFDYixVQUFVLEVBQUUsR0FBRzt5QkFDaEIsRUFDRCxNQUFNLEVBQUUsb0NBQW9DLEtBQUssUUFBUSxJQUV4RCxLQUFLLENBQ0QsQ0FDRjtnQkFDUCxvQkFBQyxJQUFJO2dCQUNILGdGQUFnRjs7b0JBQWhGLGdGQUFnRjtvQkFDaEYsT0FBTyxFQUFFLFFBQVEsQ0FBQyx1QkFBdUIsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFDLEVBQ3pFLE1BQU0sRUFBQyxzQkFBc0I7b0JBRTdCLG9CQUFDLElBQUksSUFDSCxLQUFLLEVBQUUsVUFBVSxDQUFDLFdBQVcsS0FBSyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsRUFDakQsTUFBTSxFQUFFLG9DQUFvQyxLQUFLLFVBQVUsSUFFMUQsT0FBTyxDQUNILENBQ0YsQ0FDRyxDQUNFLENBQ2pCLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsTUFBTSxFQUFDLFlBQVksRUFBRSxRQUFRLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXZDLE9BQU8sbUdBQW1HLENBQUMsQ0FBQztZQUMxRyxNQUFNLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNyRSxZQUFZLEVBQUUsWUFBWSxDQUFDLFlBQVk7WUFDdkMsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPO1lBQzdCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUMxQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBRXJFOzs7T0FHRztJQUNILFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ25CLE1BQU0sRUFBQyxZQUFZLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRTdCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2xFLENBQUM7SUFDSCxDQUFDLENBQUE7O0FBR0gsZUFBZSxJQUFJLENBQUMsY0FBYyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbi8vIEB0cy1leHBlY3QtZXJyb3IgUGFja2FnZSBzaGlwcyBubyAuZC50cyBmaWxlcy5cbmltcG9ydCBQcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgUmVhY3QsIHttZW1vLCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtBbmltYXRlZCwgUHJlc3NhYmxlLCBUZXh0LCBWaWV3fSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnQsIFNoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvc2hhcGUtY29tcG9uZW50LmpzXCJcbmltcG9ydCB7dXNlQnJlYWtwb2ludH0gZnJvbSBcInJlc3BvbnNpdmUtYnJlYWtwb2ludHNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN0b3JlZE5vdGlmaWNhdGlvblR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb3VudFxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuQW5pbWF0ZWQuVmFsdWV9IGhlaWdodFxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuQW5pbWF0ZWQuVmFsdWV9IG1hcmdpbkJvdHRvbVxuICogQHByb3BlcnR5IHtudW1iZXIgfCB1bmRlZmluZWR9IG1lYXN1cmVkSGVpZ2h0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuQW5pbWF0ZWQuVmFsdWV9IG9wYWNpdHlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVtb3ZpbmdcbiAqIEBwcm9wZXJ0eSB7UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD59IHRpbWVvdXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aXRsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZsYXNoTm90aWZpY2F0aW9uc05vdGlmaWNhdGlvblByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZz19IGNsYXNzTmFtZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZVxuICogQHByb3BlcnR5IHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSBub3RpZmljYXRpb25cbiAqIEBwcm9wZXJ0eSB7KG5vdGlmaWNhdGlvbjogU3RvcmVkTm90aWZpY2F0aW9uVHlwZSwgbWVhc3VyZWRIZWlnaHQ6IG51bWJlcikgPT4gdm9pZH0gb25NZWFzdXJlZFxuICogQHByb3BlcnR5IHsobm90aWZpY2F0aW9uOiBTdG9yZWROb3RpZmljYXRpb25UeXBlKSA9PiB2b2lkfSBvblJlbW92ZWRDbGlja2VkXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlbW92aW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gKi9cblxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+fSAqL1xuY29uc3QgZGF0YVNldHMgPSB7fVxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVmlld1N0eWxlPn0gKi9cbmNvbnN0IHZpZXdTdHlsZXMgPSB7fVxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVGV4dFN0eWxlPn0gKi9cbmNvbnN0IHRleHRTdHlsZXMgPSB7fVxuXG4vKipcbiAqIEBhdWdtZW50cyB7U2hhcGVDb21wb25lbnQ8Rmxhc2hOb3RpZmljYXRpb25zTm90aWZpY2F0aW9uUHJvcHM+fVxuICovXG5jbGFzcyBGbGFzaE5vdGlmaWNhdGlvbnNOb3RpZmljYXRpb24gZXh0ZW5kcyBTaGFwZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBQcm9wVHlwZXNFeGFjdCh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvdW50OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgbWVzc2FnZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG5vdGlmaWNhdGlvbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIG9uTWVhc3VyZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25SZW1vdmVkQ2xpY2tlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZW1vdmluZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICB9KVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7Y291bnQsIG1lc3NhZ2UsIHRpdGxlLCB0eXBlfSA9IHRoaXMucFxuICAgIGNvbnN0IHtjbGFzc05hbWV9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IGJyZWFrcG9pbnQgPSB1c2VCcmVha3BvaW50KClcblxuICAgIGNvbnN0IHByZXNzYWJsZURhdGFTZXQgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICAgICAgcm9sZTogXCJkaWFsb2dcIixcbiAgICAgICAgdHlwZVxuICAgICAgfSksXG4gICAgICBbY2xhc3NOYW1lLCB0eXBlXVxuICAgIClcbiAgICByZXR1cm4gKFxuICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgc3R5bGU9e3RoaXMudHQud3JhcHBlclN0eWxlfVxuICAgICAgPlxuICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBSZWFjdCBOYXRpdmUgdHlwZXMgZG8gbm90IGluY2x1ZGUgdGhlIHdlYi1vbmx5IGRhdGFTZXQgcHJvcC5cbiAgICAgICAgICBkYXRhU2V0PXtwcmVzc2FibGVEYXRhU2V0fVxuICAgICAgICAgIG9uTGF5b3V0PXt0aGlzLnR0Lm9uTGF5b3V0fVxuICAgICAgICAgIG9uUHJlc3M9e3RoaXMudHQub25SZW1vdmVkQ2xpY2tlZH1cbiAgICAgICAgICBzdHlsZT17YnJlYWtwb2ludC5zdHlsaW5nKHtcbiAgICAgICAgICAgIGJhc2U6IHtcbiAgICAgICAgICAgICAgcGFkZGluZzogMTUsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTEsXG4gICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgICAgIGJvcmRlcjogKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIjFweCBzb2xpZCByZ2JhKDE2MSwgMzQsIDMyLCAwLjk1KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCIxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjk1KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiYWxlcnRcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiMXB4IHNvbGlkIHJnYmEoMjA0LCA1MSwgMCwgMC45NSlcIlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSkoKSxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmdiYSgxNjEsIDM0LCAzMiwgMC44NylcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmdiYSgwLCAwLCAwLCAwLjg3KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiYWxlcnRcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmdiYSgyMDQsIDUxLCAwLCAwLjg3KVwiXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KSgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc21Eb3duOiB7XG4gICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1kVXA6IHtcbiAgICAgICAgICAgICAgd2lkdGg6IDMwMCxcbiAgICAgICAgICAgICAgbWF4V2lkdGg6IFwiMTAwJVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSl9XG4gICAgICAgICAgdGVzdElEPVwiZmxhc2gtbm90aWZpY2F0aW9ucy1ub3RpZmljYXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt2aWV3U3R5bGVzLnRpdGxlVmlldyB8fD0ge21hcmdpbkJvdHRvbTogNX19XG4gICAgICAgICAgICB0ZXN0SUQ9XCJub3RpZmljYXRpb24tdGl0bGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN0eWxlPXt0ZXh0U3R5bGVzLnRpdGxlVGV4dCB8fD0ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBcIiNmZmZcIixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA3MDBcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdGVzdElEPXtgZmxhc2gtbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb24tJHtjb3VudH0vdGl0bGVgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFJlYWN0IE5hdGl2ZSB0eXBlcyBkbyBub3QgaW5jbHVkZSB0aGUgd2ViLW9ubHkgZGF0YVNldCBwcm9wLlxuICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHNbYG5vdGlmaWNhdGlvbk1lc3NhZ2UtJHtjb3VudH1gXSB8fD0ge2NvdW50OiBgJHtjb3VudH1gfX1cbiAgICAgICAgICAgIHRlc3RJRD1cIm5vdGlmaWNhdGlvbi1tZXNzYWdlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICBzdHlsZT17dGV4dFN0eWxlcy5tZXNzYWdlVGV4dCB8fD0ge2NvbG9yOiBcIiNmZmZcIn19XG4gICAgICAgICAgICAgIHRlc3RJRD17YGZsYXNoLW5vdGlmaWNhdGlvbnMvbm90aWZpY2F0aW9uLSR7Y291bnR9L21lc3NhZ2VgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bWVzc2FnZX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgPC9BbmltYXRlZC5WaWV3PlxuICAgIClcbiAgfVxuXG4gIGdldCB3cmFwcGVyU3R5bGUoKSB7XG4gICAgY29uc3Qge25vdGlmaWNhdGlvbiwgcmVtb3Zpbmd9ID0gdGhpcy5wXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuQW5pbWF0ZWQuV2l0aEFuaW1hdGVkT2JqZWN0PGltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5WaWV3U3R5bGU+fSAqLyAoe1xuICAgICAgaGVpZ2h0OiBub3RpZmljYXRpb24ubWVhc3VyZWRIZWlnaHQgPyBub3RpZmljYXRpb24uaGVpZ2h0IDogdW5kZWZpbmVkLFxuICAgICAgbWFyZ2luQm90dG9tOiBub3RpZmljYXRpb24ubWFyZ2luQm90dG9tLFxuICAgICAgb3BhY2l0eTogbm90aWZpY2F0aW9uLm9wYWNpdHksXG4gICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgIHBvaW50ZXJFdmVudHM6IHJlbW92aW5nID8gXCJub25lXCIgOiBcImF1dG9cIlxuICAgIH0pXG4gIH1cblxuICBvblJlbW92ZWRDbGlja2VkID0gKCkgPT4gdGhpcy5wLm9uUmVtb3ZlZENsaWNrZWQodGhpcy5wLm5vdGlmaWNhdGlvbilcblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuTGF5b3V0Q2hhbmdlRXZlbnR9IGV2ZW50XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25MYXlvdXQgPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB7bm90aWZpY2F0aW9ufSA9IHRoaXMucFxuXG4gICAgaWYgKCFub3RpZmljYXRpb24ubWVhc3VyZWRIZWlnaHQpIHtcbiAgICAgIHRoaXMucC5vbk1lYXN1cmVkKG5vdGlmaWNhdGlvbiwgZXZlbnQubmF0aXZlRXZlbnQubGF5b3V0LmhlaWdodClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhzaGFwZUNvbXBvbmVudChGbGFzaE5vdGlmaWNhdGlvbnNOb3RpZmljYXRpb24pKVxuIl19
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJjb250YWluZXIvbm90aWZpY2F0aW9uLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBO0FBQ2xDLGlEQUFpRDtBQUNqRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDMUMsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFFLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUVwRCxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQTtBQUUvQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVIOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgscUNBQXFDO0FBQ3JDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQTtBQUNuQiwrREFBK0Q7QUFDL0QsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO0FBQ3JCLCtEQUErRDtBQUMvRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUE7QUFDckIsK0NBQStDO0FBQy9DLE1BQU0sWUFBWSxHQUFHLEVBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFBO0FBRXhGOztHQUVHO0FBQ0gsTUFBTSw4QkFBK0IsU0FBUSxjQUFjO0lBQ3pELE1BQU0sQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTTtRQUMzQixLQUFLLEVBQUUsU0FB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QyxhQUFhLEVBQUUsQ0FBQztZQUMxRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUE7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFBO1FBRWpELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQ3pCLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQ3RHLENBQUE7UUFDRCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDYixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFBO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN0QixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUE7UUFFakQsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLFVBQVU7WUFBRSxPQUFNO1FBRTNELElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFBO1FBRS9CLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3RCLENBQUM7SUFDSCxDQUFDLENBQUE7O0FBR0gsZUFBZSxJQUFJLENBQUMsY0FBYyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbi8vIEB0cy1leHBlY3QtZXJyb3IgUGFja2FnZSBzaGlwcyBubyAuZC50cyBmaWxlcy5cbmltcG9ydCBQcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgUmVhY3QsIHttZW1vLCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtBbmltYXRlZCwgUHJlc3NhYmxlLCBUZXh0LCBWaWV3fSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnQsIFNoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvc2hhcGUtY29tcG9uZW50LmpzXCJcbmltcG9ydCB7dXNlQnJlYWtwb2ludH0gZnJvbSBcInJlc3BvbnNpdmUtYnJlYWtwb2ludHNcIlxuXG5pbXBvcnQgY29uZmlndXJhdGlvbiBmcm9tIFwiLi4vY29uZmlndXJhdGlvbi5qc1wiXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3RvcmVkTm90aWZpY2F0aW9uVHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gaWRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBtYXJnaW5Cb3R0b21cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBtZWFzdXJlZEhlaWdodFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBvcGFjaXR5XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBlcnNpc3RlbnRcbiAqIEBwcm9wZXJ0eSB7XCJ0b2FzdFwiIHwgXCJtb2RhbFwifSBwcmVzZW50YXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBwcm9ncmVzc1xuICogQHByb3BlcnR5IHtib29sZWFufSByZW1vdmluZ1xuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZH0gdGltZW91dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpdGxlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRmxhc2hOb3RpZmljYXRpb25zTm90aWZpY2F0aW9uUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nPX0gY2xhc3NOYW1lXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAcHJvcGVydHkge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IG5vdGlmaWNhdGlvblxuICogQHByb3BlcnR5IHsobm90aWZpY2F0aW9uOiBTdG9yZWROb3RpZmljYXRpb25UeXBlLCBtZWFzdXJlZEhlaWdodDogbnVtYmVyKSA9PiB2b2lkfSBvbk1lYXN1cmVkXG4gKiBAcHJvcGVydHkgeyhub3RpZmljYXRpb246IFN0b3JlZE5vdGlmaWNhdGlvblR5cGUpID0+IHZvaWR9IG9uUmVtb3ZlZENsaWNrZWRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGVyc2lzdGVudFxuICogQHByb3BlcnR5IHtcInRvYXN0XCIgfCBcIm1vZGFsXCJ9IHByZXNlbnRhdGlvblxuICogQHByb3BlcnR5IHtudW1iZXI9fSBwcm9ncmVzc1xuICogQHByb3BlcnR5IHtib29sZWFufSByZW1vdmluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpdGxlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICovXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgb2JqZWN0Pn0gKi9cbmNvbnN0IGRhdGFTZXRzID0ge31cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlZpZXdTdHlsZT59ICovXG5jb25zdCB2aWV3U3R5bGVzID0ge31cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlRleHRTdHlsZT59ICovXG5jb25zdCB0ZXh0U3R5bGVzID0ge31cbi8qKiBAdHlwZSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlZpZXdTdHlsZX0gKi9cbmNvbnN0IGJhckZpbGxTdHlsZSA9IHtiYWNrZ3JvdW5kQ29sb3I6IFwiI2ZmZlwiLCBib3JkZXJSYWRpdXM6IDIsIGhlaWdodDogNCwgd2lkdGg6IFwiMzAlXCJ9XG5cbi8qKlxuICogQGF1Z21lbnRzIHtTaGFwZUNvbXBvbmVudDxGbGFzaE5vdGlmaWNhdGlvbnNOb3RpZmljYXRpb25Qcm9wcz59XG4gKi9cbmNsYXNzIEZsYXNoTm90aWZpY2F0aW9uc05vdGlmaWNhdGlvbiBleHRlbmRzIFNoYXBlQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IFByb3BUeXBlc0V4YWN0KHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY291bnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBtZXNzYWdlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbm90aWZpY2F0aW9uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgb25NZWFzdXJlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZWRDbGlja2VkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHBlcnNpc3RlbnQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgcHJlc2VudGF0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9hc3RcIiwgXCJtb2RhbFwiXSkuaXNSZXF1aXJlZCxcbiAgICBwcm9ncmVzczogUHJvcFR5cGVzLm51bWJlcixcbiAgICByZW1vdmluZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICB9KVxuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSAqL1xuICBiYXJTd2VlcCA9IG5ldyBBbmltYXRlZC5WYWx1ZSgwKVxuICAvKiogQHR5cGUge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5Db21wb3NpdGVBbmltYXRpb24gfCB1bmRlZmluZWR9ICovXG4gIGJhclN3ZWVwQW5pbWF0aW9uID0gdW5kZWZpbmVkXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBiYXJUcmFja1dpZHRoID0gMFxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCBoYWQgZm9jdXMgd2hlbiB0aGlzIG1vZGFsIG5vdGlmaWNhdGlvbiBtb3VudGVkLCBzbyBmb2N1c1xuICAgKiBjYW4gYmUgcmV0dXJuZWQgdG8gaXQgd2hlbiB0aGUgbW9kYWwgaXMgZGlzbWlzc2VkLlxuICAgKiBAdHlwZSB7SFRNTEVsZW1lbnQgfCB1bmRlZmluZWR9XG4gICAqL1xuICBmb2N1c1JldHVybkVsZW1lbnQgPSB1bmRlZmluZWRcbiAgLyoqIEB0eXBlIHt7Zm9jdXM/OiAoKSA9PiB2b2lkfSB8IHVuZGVmaW5lZH0gKi9cbiAgY2FyZFJlZiA9IHVuZGVmaW5lZFxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICh0aGlzLnAucHJlc2VudGF0aW9uICE9IFwibW9kYWxcIikgcmV0dXJuXG5cbiAgICAvLyBSZW1lbWJlciB3aGF0IGhhZCBmb2N1cyBiZWZvcmUgdGhlIGRpYWxvZyBvcGVuZWQgc28gaXQgY2FuIGJlIHJlc3RvcmVkXG4gICAgLy8gb24gZGlzbWlzcy4gT24gbmF0aXZlIHRoZXJlIGlzIG5vIGRvY3VtZW50OyBmb2N1cyBoYW5kbGluZyBpcyBhIG5vLW9wLlxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZm9jdXNSZXR1cm5FbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgIH1cblxuICAgIC8vIE1vdmUgZm9jdXMgaW50byB0aGUgZGlhbG9nLiBUaGUgY2FyZCBpcyBmb2N1c2FibGUgdmlhIHRhYkluZGV4PXstMX0uXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNhcmRSZWY/LmZvY3VzPy4oKVxuICAgIH0sIDApXG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmJhclN3ZWVwQW5pbWF0aW9uPy5zdG9wKClcblxuICAgIGlmICh0aGlzLnAucHJlc2VudGF0aW9uICE9IFwibW9kYWxcIikgcmV0dXJuXG5cbiAgICAvLyBSZXR1cm4gZm9jdXMgdG8gd2hhdGV2ZXIgd2FzIGZvY3VzZWQgYmVmb3JlIHRoZSBtb2RhbCBvcGVuZWQuXG4gICAgdGhpcy5mb2N1c1JldHVybkVsZW1lbnQ/LmZvY3VzPy4oKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtjb3VudCwgbWVzc2FnZSwgcHJlc2VudGF0aW9uLCBwcm9ncmVzcywgdGl0bGUsIHR5cGV9ID0gdGhpcy5wXG4gICAgY29uc3Qge2NsYXNzTmFtZX0gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgYnJlYWtwb2ludCA9IHVzZUJyZWFrcG9pbnQoKVxuXG4gICAgaWYgKHByZXNlbnRhdGlvbiA9PSBcIm1vZGFsXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlck1vZGFsKClcbiAgICB9XG5cbiAgICBjb25zdCBwcmVzc2FibGVEYXRhU2V0ID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgICAgIHJvbGU6IFwiZGlhbG9nXCIsXG4gICAgICAgIHR5cGVcbiAgICAgIH0pLFxuICAgICAgW2NsYXNzTmFtZSwgdHlwZV1cbiAgICApXG4gICAgcmV0dXJuIChcbiAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgIHN0eWxlPXt0aGlzLnR0LndyYXBwZXJTdHlsZX1cbiAgICAgID5cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUmVhY3QgTmF0aXZlIHR5cGVzIGRvIG5vdCBpbmNsdWRlIHRoZSB3ZWItb25seSBkYXRhU2V0IHByb3AuXG4gICAgICAgICAgZGF0YVNldD17cHJlc3NhYmxlRGF0YVNldH1cbiAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbkxheW91dH1cbiAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uUmVtb3ZlZENsaWNrZWR9XG4gICAgICAgICAgc3R5bGU9e2JyZWFrcG9pbnQuc3R5bGluZyh7XG4gICAgICAgICAgICBiYXNlOiB7XG4gICAgICAgICAgICAgIHBhZGRpbmc6IDE1LFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDExLFxuICAgICAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiLFxuICAgICAgICAgICAgICBib3JkZXI6ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCIxcHggc29saWQgcmdiYSgxNjEsIDM0LCAzMiwgMC45NSlcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC45NSlcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImFsZXJ0XCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIjFweCBzb2xpZCByZ2JhKDIwNCwgNTEsIDAsIDAuOTUpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhY3Rpdml0eVwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCIxcHggc29saWQgcmdiYSgzMCwgNDEsIDU5LCAwLjk1KVwiXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KSgpLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDE2MSwgMzQsIDMyLCAwLjg3KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDAsIDAsIDAsIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhbGVydFwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDIwNCwgNTEsIDAsIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhY3Rpdml0eVwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDMwLCA0MSwgNTksIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzbURvd246IHtcbiAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWRVcDoge1xuICAgICAgICAgICAgICB3aWR0aDogMzAwLFxuICAgICAgICAgICAgICBtYXhXaWR0aDogXCIxMDAlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KX1cbiAgICAgICAgICB0ZXN0SUQ9XCJmbGFzaC1ub3RpZmljYXRpb25zLW5vdGlmaWNhdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3ZpZXdTdHlsZXMudGl0bGVWaWV3IHx8PSB7bWFyZ2luQm90dG9tOiA1fX1cbiAgICAgICAgICAgIHRlc3RJRD1cIm5vdGlmaWNhdGlvbi10aXRsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgc3R5bGU9e3RleHRTdHlsZXMudGl0bGVUZXh0IHx8PSB7XG4gICAgICAgICAgICAgICAgY29sb3I6IFwiI2ZmZlwiLFxuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDcwMFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0ZXN0SUQ9e2BmbGFzaC1ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbi0ke2NvdW50fS90aXRsZWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUmVhY3QgTmF0aXZlIHR5cGVzIGRvIG5vdCBpbmNsdWRlIHRoZSB3ZWItb25seSBkYXRhU2V0IHByb3AuXG4gICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0c1tgbm90aWZpY2F0aW9uTWVzc2FnZS0ke2NvdW50fWBdIHx8PSB7Y291bnQ6IGAke2NvdW50fWB9fVxuICAgICAgICAgICAgdGVzdElEPVwibm90aWZpY2F0aW9uLW1lc3NhZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN0eWxlPXt0ZXh0U3R5bGVzLm1lc3NhZ2VUZXh0IHx8PSB7Y29sb3I6IFwiI2ZmZlwifX1cbiAgICAgICAgICAgICAgdGVzdElEPXtgZmxhc2gtbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb24tJHtjb3VudH0vbWVzc2FnZWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHttZXNzYWdlfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICB7dHlwZSA9PSBcImFjdGl2aXR5XCIgPyAoXG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbkJhckxheW91dH1cbiAgICAgICAgICAgICAgc3R5bGU9e3ZpZXdTdHlsZXMuYmFyVHJhY2sgfHw9IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpXCIsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAyLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNCxcbiAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IDEwLFxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHRlc3RJRD1cImZsYXNoLW5vdGlmaWNhdGlvbnMtbm90aWZpY2F0aW9uLWJhclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtwcm9ncmVzcyA9PSB1bmRlZmluZWQgPyAoXG4gICAgICAgICAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIC4uLmJhckZpbGxTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBbe3RyYW5zbGF0ZVg6IHRoaXMuYmFyU3dlZXB9XVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHRlc3RJRD1cImZsYXNoLW5vdGlmaWNhdGlvbnMtbm90aWZpY2F0aW9uLWJhci1maWxsXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAuLi5iYXJGaWxsU3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBgJHtwcm9ncmVzcyAqIDEwMH0lYFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHRlc3RJRD1cImZsYXNoLW5vdGlmaWNhdGlvbnMtbm90aWZpY2F0aW9uLWJhci1maWxsXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgIDwvQW5pbWF0ZWQuVmlldz5cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogTW9kYWwgcHJlc2VudGF0aW9uOiBhIGZ1bGwtc2NyZWVuIGRpbW1lZCBiYWNrZHJvcCB3aXRoIHRoZSBub3RpZmljYXRpb25cbiAgICogY2VudGVyZWQgb24gdG9wLiBUaGUgYmFja2Ryb3AgaGFzIG5vIHByZXNzIGhhbmRsZXIgb24gcHVycG9zZSDigJQgY2xpY2tpbmdcbiAgICogaXQgKG9yIHByZXNzaW5nIEVzY2FwZSkgbXVzdCBub3QgZGlzbWlzcyB0aGUgbm90aWZpY2F0aW9uOyBvbmx5IHRoZVxuICAgKiBleHBsaWNpdCBkaXNtaXNzIGJ1dHRvbiBkb2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UmVhY3QuUmVhY3RFbGVtZW50fVxuICAgKi9cbiAgcmVuZGVyTW9kYWwoKSB7XG4gICAgY29uc3Qge2NvdW50LCBtZXNzYWdlLCB0aXRsZSwgdHlwZX0gPSB0aGlzLnBcbiAgICBjb25zdCBicmVha3BvaW50ID0gdXNlQnJlYWtwb2ludCgpXG5cbiAgICBjb25zdCBkaXNtaXNzTGFiZWwgPSBjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5kaXNtaXNzXCIsIHtkZWZhdWx0VmFsdWU6IFwiRGlzbWlzc1wifSlcblxuICAgIHJldHVybiAoXG4gICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICBzdHlsZT17dGhpcy50dC5tb2RhbFdyYXBwZXJTdHlsZX1cbiAgICAgICAgdGVzdElEPVwiZmxhc2gtbm90aWZpY2F0aW9ucy1tb2RhbC1iYWNrZHJvcFwiXG4gICAgICA+XG4gICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICBhcmlhLW1vZGFsXG4gICAgICAgICAgcmVmPXsvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVmlldyB8IG51bGx9IHJlZiAqLyAocmVmKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhcmRSZWYgPSAvKiogQHR5cGUge3tmb2N1cz86ICgpID0+IHZvaWR9IHwgdW5kZWZpbmVkfSAqLyAocmVmKVxuICAgICAgICAgIH19XG4gICAgICAgICAgcm9sZT1cImFsZXJ0ZGlhbG9nXCJcbiAgICAgICAgICBzdHlsZT17YnJlYWtwb2ludC5zdHlsaW5nKHtcbiAgICAgICAgICAgIGJhc2U6IHtcbiAgICAgICAgICAgICAgcGFkZGluZzogMTUsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTEsXG4gICAgICAgICAgICAgIGJvcmRlcjogKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIjFweCBzb2xpZCByZ2JhKDE2MSwgMzQsIDMyLCAwLjk1KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCIxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjk1KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiYWxlcnRcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiMXB4IHNvbGlkIHJnYmEoMjA0LCA1MSwgMCwgMC45NSlcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImFjdGl2aXR5XCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIjFweCBzb2xpZCByZ2JhKDMwLCA0MSwgNTksIDAuOTUpXCJcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pKCksXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInJnYmEoMTYxLCAzNCwgMzIsIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInJnYmEoMCwgMCwgMCwgMC44NylcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImFsZXJ0XCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInJnYmEoMjA0LCA1MSwgMCwgMC44NylcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImFjdGl2aXR5XCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInJnYmEoMzAsIDQxLCA1OSwgMC44NylcIlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBcInJnYmEoMCwgMCwgMCwgMC44NylcIlxuICAgICAgICAgICAgICB9KSgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc21Eb3duOiB7XG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IDIwLFxuICAgICAgICAgICAgICBtYXJnaW5SaWdodDogMjAsXG4gICAgICAgICAgICAgIG1heFdpZHRoOiBcIjEwMCVcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1kVXA6IHtcbiAgICAgICAgICAgICAgd2lkdGg6IDQwMCxcbiAgICAgICAgICAgICAgbWF4V2lkdGg6IFwiODAlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KX1cbiAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgdGVzdElEPVwiZmxhc2gtbm90aWZpY2F0aW9ucy1ub3RpZmljYXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt2aWV3U3R5bGVzLnRpdGxlVmlldyB8fD0ge21hcmdpbkJvdHRvbTogNX19XG4gICAgICAgICAgICB0ZXN0SUQ9XCJub3RpZmljYXRpb24tdGl0bGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN0eWxlPXt0ZXh0U3R5bGVzLnRpdGxlVGV4dCB8fD0ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBcIiNmZmZcIixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA3MDBcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdGVzdElEPXtgZmxhc2gtbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb24tJHtjb3VudH0vdGl0bGVgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFJlYWN0IE5hdGl2ZSB0eXBlcyBkbyBub3QgaW5jbHVkZSB0aGUgd2ViLW9ubHkgZGF0YVNldCBwcm9wLlxuICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHNbYG5vdGlmaWNhdGlvbk1lc3NhZ2UtJHtjb3VudH1gXSB8fD0ge2NvdW50OiBgJHtjb3VudH1gfX1cbiAgICAgICAgICAgIHRlc3RJRD1cIm5vdGlmaWNhdGlvbi1tZXNzYWdlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICBzdHlsZT17dGV4dFN0eWxlcy5tZXNzYWdlVGV4dCB8fD0ge2NvbG9yOiBcIiNmZmZcIn19XG4gICAgICAgICAgICAgIHRlc3RJRD17YGZsYXNoLW5vdGlmaWNhdGlvbnMvbm90aWZpY2F0aW9uLSR7Y291bnR9L21lc3NhZ2VgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bWVzc2FnZX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblJlbW92ZWRDbGlja2VkfVxuICAgICAgICAgICAgc3R5bGU9e2JyZWFrcG9pbnQuc3R5bGluZyh7XG4gICAgICAgICAgICAgIGJhc2U6IHtcbiAgICAgICAgICAgICAgICBhbGlnblNlbGY6IFwiZmxleC1zdGFydFwiLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpXCIsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KVwiLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAxNSxcbiAgICAgICAgICAgICAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTQsXG4gICAgICAgICAgICAgICAgcGFkZGluZ1ZlcnRpY2FsOiA4XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgdGVzdElEPVwiZmxhc2gtbm90aWZpY2F0aW9ucy1tb2RhbC1kaXNtaXNzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICBzdHlsZT17dGV4dFN0eWxlcy5kaXNtaXNzVGV4dCB8fD0ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBcIiNmZmZcIixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA3MDBcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rpc21pc3NMYWJlbH1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICA8L0FuaW1hdGVkLlZpZXc+XG4gICAgKVxuICB9XG5cbiAgZ2V0IHdyYXBwZXJTdHlsZSgpIHtcbiAgICBjb25zdCB7bm90aWZpY2F0aW9uLCByZW1vdmluZ30gPSB0aGlzLnBcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5XaXRoQW5pbWF0ZWRPYmplY3Q8aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlZpZXdTdHlsZT59ICovICh7XG4gICAgICBoZWlnaHQ6IG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCA/IG5vdGlmaWNhdGlvbi5oZWlnaHQgOiB1bmRlZmluZWQsXG4gICAgICBtYXJnaW5Cb3R0b206IG5vdGlmaWNhdGlvbi5tYXJnaW5Cb3R0b20sXG4gICAgICBvcGFjaXR5OiBub3RpZmljYXRpb24ub3BhY2l0eSxcbiAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgcG9pbnRlckV2ZW50czogcmVtb3ZpbmcgPyBcIm5vbmVcIiA6IFwiYXV0b1wiXG4gICAgfSlcbiAgfVxuXG4gIGdldCBtb2RhbFdyYXBwZXJTdHlsZSgpIHtcbiAgICBjb25zdCB7bm90aWZpY2F0aW9uLCByZW1vdmluZ30gPSB0aGlzLnBcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5XaXRoQW5pbWF0ZWRPYmplY3Q8aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlZpZXdTdHlsZT59ICovICh7XG4gICAgICAvLyBEaW1tZWQgZnVsbC1zY3JlZW4gYmFja2Ryb3Agd2l0aCB0aGUgY2FyZCBjZW50ZXJlZCBvbiB0b3Agb2YgaXQuXG4gICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInJnYmEoMCwgMCwgMCwgMC40NSlcIixcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgbGVmdDogMCxcbiAgICAgIG9wYWNpdHk6IG5vdGlmaWNhdGlvbi5vcGFjaXR5LFxuICAgICAgcG9pbnRlckV2ZW50czogcmVtb3ZpbmcgPyBcIm5vbmVcIiA6IFwiYXV0b1wiLFxuICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdG9wOiAwXG4gICAgfSlcbiAgfVxuXG4gIG9uUmVtb3ZlZENsaWNrZWQgPSAoKSA9PiB0aGlzLnAub25SZW1vdmVkQ2xpY2tlZCh0aGlzLnAubm90aWZpY2F0aW9uKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5MYXlvdXRDaGFuZ2VFdmVudH0gZXZlbnRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkxheW91dCA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHtub3RpZmljYXRpb259ID0gdGhpcy5wXG5cbiAgICBpZiAoIW5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCkge1xuICAgICAgdGhpcy5wLm9uTWVhc3VyZWQobm90aWZpY2F0aW9uLCBldmVudC5uYXRpdmVFdmVudC5sYXlvdXQuaGVpZ2h0KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0ZsYXNoTm90aWZpY2F0aW9uc05vdGlmaWNhdGlvblByb3BzfSBwcmV2UHJvcHNcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgaWYgKHByZXZQcm9wcy5wcm9ncmVzcyA9PSB1bmRlZmluZWQgJiYgdGhpcy5wLnByb2dyZXNzICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5iYXJTd2VlcEFuaW1hdGlvbj8uc3RvcCgpXG4gICAgICB0aGlzLmJhclN3ZWVwQW5pbWF0aW9uID0gdW5kZWZpbmVkXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocHJldlByb3BzLnByb2dyZXNzICE9IHVuZGVmaW5lZCAmJiB0aGlzLnAucHJvZ3Jlc3MgPT0gdW5kZWZpbmVkICYmIHRoaXMuYmFyVHJhY2tXaWR0aCkge1xuICAgICAgdGhpcy5zdGFydEJhclN3ZWVwKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzdGFydEJhclN3ZWVwKCkge1xuICAgIHRoaXMuYmFyU3dlZXBBbmltYXRpb24/LnN0b3AoKVxuICAgIHRoaXMuYmFyU3dlZXAuc2V0VmFsdWUoLXRoaXMuYmFyVHJhY2tXaWR0aCAqIDAuMylcblxuICAgIGNvbnN0IHN3ZWVwID0gQW5pbWF0ZWQubG9vcChcbiAgICAgIEFuaW1hdGVkLnRpbWluZyh0aGlzLmJhclN3ZWVwLCB7ZHVyYXRpb246IDEwMDAsIHRvVmFsdWU6IHRoaXMuYmFyVHJhY2tXaWR0aCwgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZX0pXG4gICAgKVxuICAgIHN3ZWVwLnN0YXJ0KClcbiAgICB0aGlzLmJhclN3ZWVwQW5pbWF0aW9uID0gc3dlZXBcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5MYXlvdXRDaGFuZ2VFdmVudH0gZXZlbnRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkJhckxheW91dCA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRyYWNrV2lkdGggPSBldmVudC5uYXRpdmVFdmVudC5sYXlvdXQud2lkdGhcblxuICAgIGlmICghdHJhY2tXaWR0aCB8fCB0aGlzLmJhclRyYWNrV2lkdGggPT0gdHJhY2tXaWR0aCkgcmV0dXJuXG5cbiAgICB0aGlzLmJhclRyYWNrV2lkdGggPSB0cmFja1dpZHRoXG5cbiAgICBpZiAodGhpcy5wLnByb2dyZXNzID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zdGFydEJhclN3ZWVwKClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhzaGFwZUNvbXBvbmVudChGbGFzaE5vdGlmaWNhdGlvbnNOb3RpZmljYXRpb24pKVxuIl19
@@ -1,33 +1,94 @@
1
1
  export default class FlashNotifications {
2
2
  /**
3
3
  * @param {string} message
4
+ * @param {NotificationOptions} [options]
4
5
  * @returns {void}
5
6
  */
6
- static alert(message: string): void;
7
+ static alert(message: string, options?: NotificationOptions): void;
7
8
  /**
8
9
  * @param {string} message
10
+ * @param {NotificationOptions} [options]
9
11
  * @returns {void}
10
12
  */
11
- static error(message: string): void;
13
+ static error(message: string, options?: NotificationOptions): void;
12
14
  /**
13
15
  * @param {unknown} error
16
+ * @param {NotificationOptions} [options]
14
17
  * @returns {void}
15
18
  */
16
- static errorResponse(error: unknown): void;
19
+ static errorResponse(error: unknown, options?: NotificationOptions): void;
17
20
  /**
18
21
  * @param {string} message
22
+ * @param {NotificationOptions} [options]
19
23
  * @returns {void}
20
24
  */
21
- static success(message: string): void;
25
+ static success(message: string, options?: NotificationOptions): void;
26
+ /**
27
+ * Shows a long-running activity notification with a loading bar. Unlike the
28
+ * other notification types it never auto-dismisses: the returned handle
29
+ * decides when the notification leaves the screen.
30
+ *
31
+ * @param {ActivityArgs} args
32
+ * @returns {ActivityHandle}
33
+ */
34
+ static activity({ message }: ActivityArgs): ActivityHandle;
22
35
  /**
23
36
  * @param {object} args
24
37
  * @param {string} args.text
25
38
  * @param {string} args.type
39
+ * @param {boolean=} args.persistent
40
+ * @param {"toast" | "modal"=} args.presentation
26
41
  * @returns {void}
27
42
  */
28
43
  static show(args: {
29
44
  text: string;
30
45
  type: string;
46
+ persistent?: boolean | undefined;
47
+ presentation?: ("toast" | "modal") | undefined;
31
48
  }): void;
32
49
  }
50
+ export type ActivityArgs = {
51
+ /**
52
+ * Translated display string shown while the activity runs.
53
+ */
54
+ message: string;
55
+ };
56
+ export type ActivityUpdateArgs = {
57
+ /**
58
+ * Determinate progress in [0, 1]. Omit to keep the bar indeterminate.
59
+ */
60
+ progress?: number | undefined;
61
+ };
62
+ export type ActivityHandle = {
63
+ /**
64
+ * Moves the loading bar; without a progress value it stays indeterminate.
65
+ */
66
+ update: (args?: ActivityUpdateArgs) => void;
67
+ /**
68
+ * Flashes the success tone, then dismisses the notification.
69
+ */
70
+ succeed: (message?: string) => void;
71
+ /**
72
+ * Flashes the error tone, then dismisses the notification.
73
+ */
74
+ fail: (message?: string) => void;
75
+ /**
76
+ * Dismisses the notification without a tone change.
77
+ */
78
+ done: () => void;
79
+ };
80
+ export type NotificationOptions = {
81
+ /**
82
+ * When true the notification never auto-dismisses. It stays on
83
+ * screen until it is dismissed, just like an activity notification, but without a progress bar.
84
+ */
85
+ persistent?: boolean | undefined;
86
+ /**
87
+ * "toast" (the default) renders the notification in the
88
+ * usual stacked toast container. "modal" renders it as a centered dialog over a backdrop that
89
+ * blocks interaction with the app underneath; it can only be left via its explicit dismiss
90
+ * button.
91
+ */
92
+ presentation?: ("toast" | "modal") | undefined;
93
+ };
33
94
  //# sourceMappingURL=flash-notifications.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flash-notifications.d.ts","sourceRoot":"/src/","sources":["flash-notifications.js"],"names":[],"mappings":"AAOA;IACE;;;OAGG;IACH,sBAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;OAGG;IACH,sBAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;OAGG;IACH,4BAHW,OAAO,GACL,IAAI,CAmDhB;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;;;OAKG;IACH,kBAJG;QAAqB,IAAI,EAAjB,MAAM;QACO,IAAI,EAAjB,MAAM;KACd,GAAU,IAAI,CAoBhB;CACF"}
1
+ {"version":3,"file":"flash-notifications.d.ts","sourceRoot":"/src/","sources":["flash-notifications.js"],"names":[],"mappings":"AAqCA;IACE;;;;OAIG;IACH,sBAJW,MAAM,YACN,mBAAmB,GACjB,IAAI,CAIhB;IAED;;;;OAIG;IACH,sBAJW,MAAM,YACN,mBAAmB,GACjB,IAAI,CAIhB;IAED;;;;OAIG;IACH,4BAJW,OAAO,YACP,mBAAmB,GACjB,IAAI,CAmDhB;IAED;;;;OAIG;IACH,wBAJW,MAAM,YACN,mBAAmB,GACjB,IAAI,CAIhB;IAED;;;;;;;OAOG;IACH,6BAHW,YAAY,GACV,cAAc,CAgD1B;IAED;;;;;;;OAOG;IACH,kBANG;QAAqB,IAAI,EAAjB,MAAM;QACO,IAAI,EAAjB,MAAM;QACS,UAAU,GAAzB,OAAO,YAAC;QACiB,YAAY,GAArC,CAAA,OAAO,GAAG,OAAO,aAAC;KAC1B,GAAU,IAAI,CAsBhB;CACF;;;;;aArMa,MAAM;;;;;;eAKN,MAAM,YAAC;;;;;;YAKP,CAAC,IAAI,CAAC,EAAE,kBAAkB,KAAK,IAAI;;;;aACnC,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI;;;;UAC1B,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI;;;;UAC1B,MAAM,IAAI;;;;;;;iBAKV,OAAO,YAAC;;;;;;;mBAER,CAAA,OAAO,GAAG,OAAO,aAAC"}
@@ -2,28 +2,56 @@
2
2
  import { digg } from "diggerize";
3
3
  import configuration from "./configuration.js";
4
4
  import events from "./events.js";
5
+ /**
6
+ * @typedef {object} ActivityArgs
7
+ * @property {string} message Translated display string shown while the activity runs.
8
+ */
9
+ /**
10
+ * @typedef {object} ActivityUpdateArgs
11
+ * @property {number=} progress Determinate progress in [0, 1]. Omit to keep the bar indeterminate.
12
+ */
13
+ /**
14
+ * @typedef {object} ActivityHandle
15
+ * @property {(args?: ActivityUpdateArgs) => void} update Moves the loading bar; without a progress value it stays indeterminate.
16
+ * @property {(message?: string) => void} succeed Flashes the success tone, then dismisses the notification.
17
+ * @property {(message?: string) => void} fail Flashes the error tone, then dismisses the notification.
18
+ * @property {() => void} done Dismisses the notification without a tone change.
19
+ */
20
+ /**
21
+ * @typedef {object} NotificationOptions
22
+ * @property {boolean=} persistent When true the notification never auto-dismisses. It stays on
23
+ * screen until it is dismissed, just like an activity notification, but without a progress bar.
24
+ * @property {"toast" | "modal"=} presentation "toast" (the default) renders the notification in the
25
+ * usual stacked toast container. "modal" renders it as a centered dialog over a backdrop that
26
+ * blocks interaction with the app underneath; it can only be left via its explicit dismiss
27
+ * button.
28
+ */
29
+ let activityNotificationCount = 0;
5
30
  export default class FlashNotifications {
6
31
  /**
7
32
  * @param {string} message
33
+ * @param {NotificationOptions} [options]
8
34
  * @returns {void}
9
35
  */
10
- static alert(message) {
11
- FlashNotifications.show({ type: "alert", text: message });
36
+ static alert(message, options) {
37
+ FlashNotifications.show({ type: "alert", text: message, ...options });
12
38
  }
13
39
  /**
14
40
  * @param {string} message
41
+ * @param {NotificationOptions} [options]
15
42
  * @returns {void}
16
43
  */
17
- static error(message) {
18
- FlashNotifications.show({ type: "error", text: message });
44
+ static error(message, options) {
45
+ FlashNotifications.show({ type: "error", text: message, ...options });
19
46
  }
20
47
  /**
21
48
  * @param {unknown} error
49
+ * @param {NotificationOptions} [options]
22
50
  * @returns {void}
23
51
  */
24
- static errorResponse(error) {
52
+ static errorResponse(error, options) {
25
53
  if (!(error instanceof Error)) {
26
- FlashNotifications.error(typeof error == "string" ? error : String(error));
54
+ FlashNotifications.error(typeof error == "string" ? error : String(error), options);
27
55
  return;
28
56
  }
29
57
  // @ts-expect-error
@@ -32,11 +60,11 @@ export default class FlashNotifications {
32
60
  if (error.hasUnhandledErrors()) {
33
61
  // @ts-expect-error
34
62
  const unhandledErrorMessages = error.getUnhandledErrors().map((subError) => subError.getFullErrorMessages()).flat();
35
- FlashNotifications.error(unhandledErrorMessages.join(". "));
63
+ FlashNotifications.error(unhandledErrorMessages.join(". "), options);
36
64
  }
37
65
  else {
38
66
  const defaultValue = "Couldn't submit because of validation errors.";
39
- FlashNotifications.alert(configuration.translate("js.notification.couldnt_submit_because_of_validation_errors", { defaultValue }));
67
+ FlashNotifications.alert(configuration.translate("js.notification.couldnt_submit_because_of_validation_errors", { defaultValue }), options);
40
68
  }
41
69
  // @ts-expect-error
42
70
  }
@@ -51,13 +79,13 @@ export default class FlashNotifications {
51
79
  }
52
80
  return digg(error, "message");
53
81
  });
54
- FlashNotifications.error(errorMessages.join(". "));
82
+ FlashNotifications.error(errorMessages.join(". "), options);
55
83
  }
56
84
  else if (error.message) {
57
- FlashNotifications.error(error.message);
85
+ FlashNotifications.error(error.message, options);
58
86
  }
59
87
  else {
60
- FlashNotifications.error(configuration.translate("js.shared.something_went_wrong", { defaultValue: "Something went wrong." }));
88
+ FlashNotifications.error(configuration.translate("js.shared.something_went_wrong", { defaultValue: "Something went wrong." }), options);
61
89
  }
62
90
  }
63
91
  else {
@@ -65,20 +93,71 @@ export default class FlashNotifications {
65
93
  const defaultErrorMessage = configuration.translate("js.shared.something_went_wrong", { defaultValue: "Something went wrong." });
66
94
  const message = digg(error, "message");
67
95
  console.error(`Didnt know what to do with that ${constructorName}: ${message}`);
68
- FlashNotifications.error(defaultErrorMessage);
96
+ FlashNotifications.error(defaultErrorMessage, options);
69
97
  }
70
98
  }
71
99
  /**
72
100
  * @param {string} message
101
+ * @param {NotificationOptions} [options]
73
102
  * @returns {void}
74
103
  */
75
- static success(message) {
76
- FlashNotifications.show({ type: "success", text: message });
104
+ static success(message, options) {
105
+ FlashNotifications.show({ type: "success", text: message, ...options });
106
+ }
107
+ /**
108
+ * Shows a long-running activity notification with a loading bar. Unlike the
109
+ * other notification types it never auto-dismisses: the returned handle
110
+ * decides when the notification leaves the screen.
111
+ *
112
+ * @param {ActivityArgs} args
113
+ * @returns {ActivityHandle}
114
+ */
115
+ static activity({ message }) {
116
+ activityNotificationCount += 1;
117
+ const id = `activity-${activityNotificationCount}`;
118
+ events.emit("pushNotification", {
119
+ id,
120
+ message,
121
+ title: configuration.translate("js.shared.activity", { defaultValue: "Activity" }),
122
+ type: "activity"
123
+ });
124
+ /**
125
+ * @param {"update" | "succeed" | "fail" | "done"} action
126
+ * @param {object} [payload]
127
+ * @returns {void}
128
+ */
129
+ const emitControl = (action, payload = {}) => {
130
+ events.emit("activityNotification", { action, id, ...payload });
131
+ };
132
+ return {
133
+ /**
134
+ * @param {ActivityUpdateArgs} [args]
135
+ * @returns {void}
136
+ */
137
+ update(args = {}) {
138
+ const { progress } = args;
139
+ const normalizedProgress = typeof progress == "number" && !Number.isNaN(progress)
140
+ ? Math.min(1, Math.max(0, progress))
141
+ : undefined;
142
+ emitControl("update", { progress: normalizedProgress });
143
+ },
144
+ succeed(message) {
145
+ emitControl("succeed", { message });
146
+ },
147
+ fail(message) {
148
+ emitControl("fail", { message });
149
+ },
150
+ done() {
151
+ emitControl("done");
152
+ }
153
+ };
77
154
  }
78
155
  /**
79
156
  * @param {object} args
80
157
  * @param {string} args.text
81
158
  * @param {string} args.type
159
+ * @param {boolean=} args.persistent
160
+ * @param {"toast" | "modal"=} args.presentation
82
161
  * @returns {void}
83
162
  */
84
163
  static show(args) {
@@ -97,9 +176,11 @@ export default class FlashNotifications {
97
176
  }
98
177
  events.emit("pushNotification", {
99
178
  message: args.text,
179
+ persistent: args.persistent,
180
+ presentation: args.presentation,
100
181
  title,
101
182
  type: args.type
102
183
  });
103
184
  }
104
185
  }
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhc2gtbm90aWZpY2F0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiZmxhc2gtbm90aWZpY2F0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUU5QixPQUFPLGFBQWEsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFFaEMsTUFBTSxDQUFDLE9BQU8sT0FBTyxrQkFBa0I7SUFDckM7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTztRQUNsQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3pELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUs7UUFDeEIsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUUxRSxPQUFNO1FBQ1IsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixJQUFJLEtBQUssQ0FBQyxZQUFZLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUM1QyxtQkFBbUI7WUFDbkIsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO2dCQUMvQixtQkFBbUI7Z0JBQ25CLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO2dCQUVuSCxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDN0QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sWUFBWSxHQUFHLCtDQUErQyxDQUFBO2dCQUVwRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyw2REFBNkQsRUFBRSxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMsQ0FBQTtZQUNsSSxDQUFDO1lBQ0gsbUJBQW1CO1FBQ25CLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLElBQUksV0FBVyxFQUFFLENBQUM7WUFDN0MsbUJBQW1CO1lBQ25CLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7WUFDbEQsTUFBTSxNQUFNLEdBQUcsOERBQThELENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBRTNHLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUN6QyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO3dCQUM3QixPQUFPLEtBQUssQ0FBQTtvQkFDZCxDQUFDO29CQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtnQkFDL0IsQ0FBQyxDQUFDLENBQUE7Z0JBRUYsa0JBQWtCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUNwRCxDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6QixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3pDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFDLFlBQVksRUFBRSx1QkFBdUIsRUFBQyxDQUFDLENBQUMsQ0FBQTtZQUM5SCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUMxRCxNQUFNLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsZ0NBQWdDLEVBQUUsRUFBQyxZQUFZLEVBQUUsdUJBQXVCLEVBQUMsQ0FBQyxDQUFBO1lBQzlILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUE7WUFFdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsZUFBZSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUE7WUFDL0Usa0JBQWtCLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUE7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU87UUFDcEIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUk7UUFDZCxJQUFJLEtBQUssQ0FBQTtRQUVULElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUN6QixLQUFLLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFDLFlBQVksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO1FBQzdFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7WUFDaEMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsRUFBQyxZQUFZLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtRQUM3RSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLEtBQUssR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLG1CQUFtQixFQUFFLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUE7UUFDakYsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFBO1FBQzNGLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNsQixLQUFLO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuXG5pbXBvcnQgY29uZmlndXJhdGlvbiBmcm9tIFwiLi9jb25maWd1cmF0aW9uLmpzXCJcbmltcG9ydCBldmVudHMgZnJvbSBcIi4vZXZlbnRzLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxhc2hOb3RpZmljYXRpb25zIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIGFsZXJ0KG1lc3NhZ2UpIHtcbiAgICBGbGFzaE5vdGlmaWNhdGlvbnMuc2hvdyh7dHlwZTogXCJhbGVydFwiLCB0ZXh0OiBtZXNzYWdlfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBlcnJvcihtZXNzYWdlKSB7XG4gICAgRmxhc2hOb3RpZmljYXRpb25zLnNob3coe3R5cGU6IFwiZXJyb3JcIiwgdGV4dDogbWVzc2FnZX0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt1bmtub3dufSBlcnJvclxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBlcnJvclJlc3BvbnNlKGVycm9yKSB7XG4gICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcih0eXBlb2YgZXJyb3IgPT0gXCJzdHJpbmdcIiA/IGVycm9yIDogU3RyaW5nKGVycm9yKSlcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGlmIChlcnJvci5hcGlNYWtlclR5cGUgPT0gXCJWYWxpZGF0aW9uRXJyb3JcIikge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgaWYgKGVycm9yLmhhc1VuaGFuZGxlZEVycm9ycygpKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgY29uc3QgdW5oYW5kbGVkRXJyb3JNZXNzYWdlcyA9IGVycm9yLmdldFVuaGFuZGxlZEVycm9ycygpLm1hcCgoc3ViRXJyb3IpID0+IHN1YkVycm9yLmdldEZ1bGxFcnJvck1lc3NhZ2VzKCkpLmZsYXQoKVxuXG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcih1bmhhbmRsZWRFcnJvck1lc3NhZ2VzLmpvaW4oXCIuIFwiKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IFwiQ291bGRuJ3Qgc3VibWl0IGJlY2F1c2Ugb2YgdmFsaWRhdGlvbiBlcnJvcnMuXCJcblxuICAgICAgICBGbGFzaE5vdGlmaWNhdGlvbnMuYWxlcnQoY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5ub3RpZmljYXRpb24uY291bGRudF9zdWJtaXRfYmVjYXVzZV9vZl92YWxpZGF0aW9uX2Vycm9yc1wiLCB7ZGVmYXVsdFZhbHVlfSkpXG4gICAgICB9XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIH0gZWxzZSBpZiAoZXJyb3IuYXBpTWFrZXJUeXBlID09IFwiQmFzZUVycm9yXCIpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gZXJyb3IuYXJncyAmJiBlcnJvci5hcmdzLnJlc3BvbnNlXG4gICAgICBjb25zdCBlcnJvcnMgPSAvKiogQHR5cGUge0FycmF5PHN0cmluZyB8IHttZXNzYWdlOiBzdHJpbmd9W10+IHwgdW5kZWZpbmVkfSAqLyAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZXJyb3JzKVxuXG4gICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSBlcnJvcnMubWFwKChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRpZ2coZXJyb3IsIFwibWVzc2FnZVwiKVxuICAgICAgICB9KVxuXG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihlcnJvck1lc3NhZ2VzLmpvaW4oXCIuIFwiKSlcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZSkge1xuICAgICAgICBGbGFzaE5vdGlmaWNhdGlvbnMuZXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5zb21ldGhpbmdfd2VudF93cm9uZ1wiLCB7ZGVmYXVsdFZhbHVlOiBcIlNvbWV0aGluZyB3ZW50IHdyb25nLlwifSkpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IGRpZ2coZXJyb3IsIFwiY29uc3RydWN0b3JcIiwgXCJuYW1lXCIpXG4gICAgICBjb25zdCBkZWZhdWx0RXJyb3JNZXNzYWdlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuc29tZXRoaW5nX3dlbnRfd3JvbmdcIiwge2RlZmF1bHRWYWx1ZTogXCJTb21ldGhpbmcgd2VudCB3cm9uZy5cIn0pXG4gICAgICBjb25zdCBtZXNzYWdlID0gZGlnZyhlcnJvciwgXCJtZXNzYWdlXCIpXG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoYERpZG50IGtub3cgd2hhdCB0byBkbyB3aXRoIHRoYXQgJHtjb25zdHJ1Y3Rvck5hbWV9OiAke21lc3NhZ2V9YClcbiAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihkZWZhdWx0RXJyb3JNZXNzYWdlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzdWNjZXNzKG1lc3NhZ2UpIHtcbiAgICBGbGFzaE5vdGlmaWNhdGlvbnMuc2hvdyh7dHlwZTogXCJzdWNjZXNzXCIsIHRleHQ6IG1lc3NhZ2V9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudHlwZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzaG93KGFyZ3MpIHtcbiAgICBsZXQgdGl0bGVcblxuICAgIGlmIChhcmdzLnR5cGUgPT0gXCJhbGVydFwiKSB7XG4gICAgICB0aXRsZSA9IGNvbmZpZ3VyYXRpb24udHJhbnNsYXRlKFwianMuc2hhcmVkLmFsZXJ0XCIsIHtkZWZhdWx0VmFsdWU6IFwiQWxlcnRcIn0pXG4gICAgfSBlbHNlIGlmIChhcmdzLnR5cGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICB0aXRsZSA9IGNvbmZpZ3VyYXRpb24udHJhbnNsYXRlKFwianMuc2hhcmVkLmVycm9yXCIsIHtkZWZhdWx0VmFsdWU6IFwiRXJyb3JcIn0pXG4gICAgfSBlbHNlIGlmIChhcmdzLnR5cGUgPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgIHRpdGxlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuc3VjY2Vzc1wiLCB7ZGVmYXVsdFZhbHVlOiBcIlN1Y2Nlc3NcIn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQubm90aWZpY2F0aW9uXCIsIHtkZWZhdWx0VmFsdWU6IFwiTm90aWZpY2F0aW9uXCJ9KVxuICAgIH1cblxuICAgIGV2ZW50cy5lbWl0KFwicHVzaE5vdGlmaWNhdGlvblwiLCB7XG4gICAgICBtZXNzYWdlOiBhcmdzLnRleHQsXG4gICAgICB0aXRsZSxcbiAgICAgIHR5cGU6IGFyZ3MudHlwZVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhc2gtbm90aWZpY2F0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiZmxhc2gtbm90aWZpY2F0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUU5QixPQUFPLGFBQWEsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFFaEM7OztHQUdHO0FBRUg7OztHQUdHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSCxJQUFJLHlCQUF5QixHQUFHLENBQUMsQ0FBQTtBQUVqQyxNQUFNLENBQUMsT0FBTyxPQUFPLGtCQUFrQjtJQUNyQzs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTztRQUMzQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTztRQUMzQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTztRQUNqQyxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxP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LElBQUk7WUFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMvQixLQUFLO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuXG5pbXBvcnQgY29uZmlndXJhdGlvbiBmcm9tIFwiLi9jb25maWd1cmF0aW9uLmpzXCJcbmltcG9ydCBldmVudHMgZnJvbSBcIi4vZXZlbnRzLmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBY3Rpdml0eUFyZ3NcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlIFRyYW5zbGF0ZWQgZGlzcGxheSBzdHJpbmcgc2hvd24gd2hpbGUgdGhlIGFjdGl2aXR5IHJ1bnMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBY3Rpdml0eVVwZGF0ZUFyZ3NcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyPX0gcHJvZ3Jlc3MgRGV0ZXJtaW5hdGUgcHJvZ3Jlc3MgaW4gWzAsIDFdLiBPbWl0IHRvIGtlZXAgdGhlIGJhciBpbmRldGVybWluYXRlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQWN0aXZpdHlIYW5kbGVcbiAqIEBwcm9wZXJ0eSB7KGFyZ3M/OiBBY3Rpdml0eVVwZGF0ZUFyZ3MpID0+IHZvaWR9IHVwZGF0ZSBNb3ZlcyB0aGUgbG9hZGluZyBiYXI7IHdpdGhvdXQgYSBwcm9ncmVzcyB2YWx1ZSBpdCBzdGF5cyBpbmRldGVybWluYXRlLlxuICogQHByb3BlcnR5IHsobWVzc2FnZT86IHN0cmluZykgPT4gdm9pZH0gc3VjY2VlZCBGbGFzaGVzIHRoZSBzdWNjZXNzIHRvbmUsIHRoZW4gZGlzbWlzc2VzIHRoZSBub3RpZmljYXRpb24uXG4gKiBAcHJvcGVydHkgeyhtZXNzYWdlPzogc3RyaW5nKSA9PiB2b2lkfSBmYWlsIEZsYXNoZXMgdGhlIGVycm9yIHRvbmUsIHRoZW4gZGlzbWlzc2VzIHRoZSBub3RpZmljYXRpb24uXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IGRvbmUgRGlzbWlzc2VzIHRoZSBub3RpZmljYXRpb24gd2l0aG91dCBhIHRvbmUgY2hhbmdlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTm90aWZpY2F0aW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFuPX0gcGVyc2lzdGVudCBXaGVuIHRydWUgdGhlIG5vdGlmaWNhdGlvbiBuZXZlciBhdXRvLWRpc21pc3Nlcy4gSXQgc3RheXMgb25cbiAqICAgc2NyZWVuIHVudGlsIGl0IGlzIGRpc21pc3NlZCwganVzdCBsaWtlIGFuIGFjdGl2aXR5IG5vdGlmaWNhdGlvbiwgYnV0IHdpdGhvdXQgYSBwcm9ncmVzcyBiYXIuXG4gKiBAcHJvcGVydHkge1widG9hc3RcIiB8IFwibW9kYWxcIj19IHByZXNlbnRhdGlvbiBcInRvYXN0XCIgKHRoZSBkZWZhdWx0KSByZW5kZXJzIHRoZSBub3RpZmljYXRpb24gaW4gdGhlXG4gKiAgIHVzdWFsIHN0YWNrZWQgdG9hc3QgY29udGFpbmVyLiBcIm1vZGFsXCIgcmVuZGVycyBpdCBhcyBhIGNlbnRlcmVkIGRpYWxvZyBvdmVyIGEgYmFja2Ryb3AgdGhhdFxuICogICBibG9ja3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYXBwIHVuZGVybmVhdGg7IGl0IGNhbiBvbmx5IGJlIGxlZnQgdmlhIGl0cyBleHBsaWNpdCBkaXNtaXNzXG4gKiAgIGJ1dHRvbi5cbiAqL1xuXG5sZXQgYWN0aXZpdHlOb3RpZmljYXRpb25Db3VudCA9IDBcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxhc2hOb3RpZmljYXRpb25zIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7Tm90aWZpY2F0aW9uT3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIGFsZXJ0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICBGbGFzaE5vdGlmaWNhdGlvbnMuc2hvdyh7dHlwZTogXCJhbGVydFwiLCB0ZXh0OiBtZXNzYWdlLCAuLi5vcHRpb25zfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAcGFyYW0ge05vdGlmaWNhdGlvbk9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBlcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgRmxhc2hOb3RpZmljYXRpb25zLnNob3coe3R5cGU6IFwiZXJyb3JcIiwgdGV4dDogbWVzc2FnZSwgLi4ub3B0aW9uc30pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt1bmtub3dufSBlcnJvclxuICAgKiBAcGFyYW0ge05vdGlmaWNhdGlvbk9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBlcnJvclJlc3BvbnNlKGVycm9yLCBvcHRpb25zKSB7XG4gICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcih0eXBlb2YgZXJyb3IgPT0gXCJzdHJpbmdcIiA/IGVycm9yIDogU3RyaW5nKGVycm9yKSwgb3B0aW9ucylcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGlmIChlcnJvci5hcGlNYWtlclR5cGUgPT0gXCJWYWxpZGF0aW9uRXJyb3JcIikge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgaWYgKGVycm9yLmhhc1VuaGFuZGxlZEVycm9ycygpKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgY29uc3QgdW5oYW5kbGVkRXJyb3JNZXNzYWdlcyA9IGVycm9yLmdldFVuaGFuZGxlZEVycm9ycygpLm1hcCgoc3ViRXJyb3IpID0+IHN1YkVycm9yLmdldEZ1bGxFcnJvck1lc3NhZ2VzKCkpLmZsYXQoKVxuXG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcih1bmhhbmRsZWRFcnJvck1lc3NhZ2VzLmpvaW4oXCIuIFwiKSwgb3B0aW9ucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IFwiQ291bGRuJ3Qgc3VibWl0IGJlY2F1c2Ugb2YgdmFsaWRhdGlvbiBlcnJvcnMuXCJcblxuICAgICAgICBGbGFzaE5vdGlmaWNhdGlvbnMuYWxlcnQoY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5ub3RpZmljYXRpb24uY291bGRudF9zdWJtaXRfYmVjYXVzZV9vZl92YWxpZGF0aW9uX2Vycm9yc1wiLCB7ZGVmYXVsdFZhbHVlfSksIG9wdGlvbnMpXG4gICAgICB9XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIH0gZWxzZSBpZiAoZXJyb3IuYXBpTWFrZXJUeXBlID09IFwiQmFzZUVycm9yXCIpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gZXJyb3IuYXJncyAmJiBlcnJvci5hcmdzLnJlc3BvbnNlXG4gICAgICBjb25zdCBlcnJvcnMgPSAvKiogQHR5cGUge0FycmF5PHN0cmluZyB8IHttZXNzYWdlOiBzdHJpbmd9W10+IHwgdW5kZWZpbmVkfSAqLyAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZXJyb3JzKVxuXG4gICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSBlcnJvcnMubWFwKChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRpZ2coZXJyb3IsIFwibWVzc2FnZVwiKVxuICAgICAgICB9KVxuXG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihlcnJvck1lc3NhZ2VzLmpvaW4oXCIuIFwiKSwgb3B0aW9ucylcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZSkge1xuICAgICAgICBGbGFzaE5vdGlmaWNhdGlvbnMuZXJyb3IoZXJyb3IubWVzc2FnZSwgb3B0aW9ucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5zb21ldGhpbmdfd2VudF93cm9uZ1wiLCB7ZGVmYXVsdFZhbHVlOiBcIlNvbWV0aGluZyB3ZW50IHdyb25nLlwifSksIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IGRpZ2coZXJyb3IsIFwiY29uc3RydWN0b3JcIiwgXCJuYW1lXCIpXG4gICAgICBjb25zdCBkZWZhdWx0RXJyb3JNZXNzYWdlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuc29tZXRoaW5nX3dlbnRfd3JvbmdcIiwge2RlZmF1bHRWYWx1ZTogXCJTb21ldGhpbmcgd2VudCB3cm9uZy5cIn0pXG4gICAgICBjb25zdCBtZXNzYWdlID0gZGlnZyhlcnJvciwgXCJtZXNzYWdlXCIpXG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoYERpZG50IGtub3cgd2hhdCB0byBkbyB3aXRoIHRoYXQgJHtjb25zdHJ1Y3Rvck5hbWV9OiAke21lc3NhZ2V9YClcbiAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihkZWZhdWx0RXJyb3JNZXNzYWdlLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAcGFyYW0ge05vdGlmaWNhdGlvbk9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzdWNjZXNzKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICBGbGFzaE5vdGlmaWNhdGlvbnMuc2hvdyh7dHlwZTogXCJzdWNjZXNzXCIsIHRleHQ6IG1lc3NhZ2UsIC4uLm9wdGlvbnN9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgbG9uZy1ydW5uaW5nIGFjdGl2aXR5IG5vdGlmaWNhdGlvbiB3aXRoIGEgbG9hZGluZyBiYXIuIFVubGlrZSB0aGVcbiAgICogb3RoZXIgbm90aWZpY2F0aW9uIHR5cGVzIGl0IG5ldmVyIGF1dG8tZGlzbWlzc2VzOiB0aGUgcmV0dXJuZWQgaGFuZGxlXG4gICAqIGRlY2lkZXMgd2hlbiB0aGUgbm90aWZpY2F0aW9uIGxlYXZlcyB0aGUgc2NyZWVuLlxuICAgKlxuICAgKiBAcGFyYW0ge0FjdGl2aXR5QXJnc30gYXJnc1xuICAgKiBAcmV0dXJucyB7QWN0aXZpdHlIYW5kbGV9XG4gICAqL1xuICBzdGF0aWMgYWN0aXZpdHkoe21lc3NhZ2V9KSB7XG4gICAgYWN0aXZpdHlOb3RpZmljYXRpb25Db3VudCArPSAxXG4gICAgY29uc3QgaWQgPSBgYWN0aXZpdHktJHthY3Rpdml0eU5vdGlmaWNhdGlvbkNvdW50fWBcblxuICAgIGV2ZW50cy5lbWl0KFwicHVzaE5vdGlmaWNhdGlvblwiLCB7XG4gICAgICBpZCxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICB0aXRsZTogY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuYWN0aXZpdHlcIiwge2RlZmF1bHRWYWx1ZTogXCJBY3Rpdml0eVwifSksXG4gICAgICB0eXBlOiBcImFjdGl2aXR5XCJcbiAgICB9KVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtcInVwZGF0ZVwiIHwgXCJzdWNjZWVkXCIgfCBcImZhaWxcIiB8IFwiZG9uZVwifSBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BheWxvYWRdXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgY29uc3QgZW1pdENvbnRyb2wgPSAoYWN0aW9uLCBwYXlsb2FkID0ge30pID0+IHtcbiAgICAgIGV2ZW50cy5lbWl0KFwiYWN0aXZpdHlOb3RpZmljYXRpb25cIiwge2FjdGlvbiwgaWQsIC4uLnBheWxvYWR9KVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSB7QWN0aXZpdHlVcGRhdGVBcmdzfSBbYXJnc11cbiAgICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAgICovXG4gICAgICB1cGRhdGUoYXJncyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHtwcm9ncmVzc30gPSBhcmdzXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm9ncmVzcyA9IHR5cGVvZiBwcm9ncmVzcyA9PSBcIm51bWJlclwiICYmICFOdW1iZXIuaXNOYU4ocHJvZ3Jlc3MpXG4gICAgICAgICAgPyBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBwcm9ncmVzcykpXG4gICAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgICBlbWl0Q29udHJvbChcInVwZGF0ZVwiLCB7cHJvZ3Jlc3M6IG5vcm1hbGl6ZWRQcm9ncmVzc30pXG4gICAgICB9LFxuXG4gICAgICBzdWNjZWVkKG1lc3NhZ2UpIHtcbiAgICAgICAgZW1pdENvbnRyb2woXCJzdWNjZWVkXCIsIHttZXNzYWdlfSlcbiAgICAgIH0sXG5cbiAgICAgIGZhaWwobWVzc2FnZSkge1xuICAgICAgICBlbWl0Q29udHJvbChcImZhaWxcIiwge21lc3NhZ2V9KVxuICAgICAgfSxcblxuICAgICAgZG9uZSgpIHtcbiAgICAgICAgZW1pdENvbnRyb2woXCJkb25lXCIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudHlwZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBhcmdzLnBlcnNpc3RlbnRcbiAgICogQHBhcmFtIHtcInRvYXN0XCIgfCBcIm1vZGFsXCI9fSBhcmdzLnByZXNlbnRhdGlvblxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzaG93KGFyZ3MpIHtcbiAgICBsZXQgdGl0bGVcblxuICAgIGlmIChhcmdzLnR5cGUgPT0gXCJhbGVydFwiKSB7XG4gICAgICB0aXRsZSA9IGNvbmZpZ3VyYXRpb24udHJhbnNsYXRlKFwianMuc2hhcmVkLmFsZXJ0XCIsIHtkZWZhdWx0VmFsdWU6IFwiQWxlcnRcIn0pXG4gICAgfSBlbHNlIGlmIChhcmdzLnR5cGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICB0aXRsZSA9IGNvbmZpZ3VyYXRpb24udHJhbnNsYXRlKFwianMuc2hhcmVkLmVycm9yXCIsIHtkZWZhdWx0VmFsdWU6IFwiRXJyb3JcIn0pXG4gICAgfSBlbHNlIGlmIChhcmdzLnR5cGUgPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgIHRpdGxlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuc3VjY2Vzc1wiLCB7ZGVmYXVsdFZhbHVlOiBcIlN1Y2Nlc3NcIn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQubm90aWZpY2F0aW9uXCIsIHtkZWZhdWx0VmFsdWU6IFwiTm90aWZpY2F0aW9uXCJ9KVxuICAgIH1cblxuICAgIGV2ZW50cy5lbWl0KFwicHVzaE5vdGlmaWNhdGlvblwiLCB7XG4gICAgICBtZXNzYWdlOiBhcmdzLnRleHQsXG4gICAgICBwZXJzaXN0ZW50OiBhcmdzLnBlcnNpc3RlbnQsXG4gICAgICBwcmVzZW50YXRpb246IGFyZ3MucHJlc2VudGF0aW9uLFxuICAgICAgdGl0bGUsXG4gICAgICB0eXBlOiBhcmdzLnR5cGVcbiAgICB9KVxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flash-notifications",
3
- "version": "0.0.47",
3
+ "version": "0.0.49",
4
4
  "description": "My new module",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -67,5 +67,10 @@
67
67
  "react-native": "*",
68
68
  "set-state-compare": "^1.0.84"
69
69
  },
70
+ "peerDependenciesMeta": {
71
+ "expo": {
72
+ "optional": true
73
+ }
74
+ },
70
75
  "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
71
76
  }