@dbx-tools/email 0.6.57 → 0.6.58

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
@@ -152,6 +152,24 @@ the same information in both parts - a text alternative that disagrees with the
152
152
  HTML reads as phishing to spam filters. See
153
153
  [`@dbx-tools/cli-tunnel`](../../cli/tunnel) for a gate that does this.
154
154
 
155
+ ### Control the preheader (and the push notification)
156
+
157
+ The same options object takes a `preview`, the preheader: the snippet a client
158
+ shows beside the subject in an inbox list, and the body of the PUSH NOTIFICATION
159
+ a mobile mail app posts. It defaults to the subject.
160
+
161
+ ```ts
162
+ await transport.sendEmail(message, from, undefined, {
163
+ preview: `Your verification code is: ${code}`,
164
+ });
165
+ ```
166
+
167
+ It matters for anything a phone reads off a notification rather than out of the
168
+ open message. Mobile one-time-code autofill is the case in point: the notification
169
+ carries the sender, the subject, and this snippet, so a code that appears only in
170
+ the body is never offered. Put the important text in the subject and the preheader
171
+ and the body becomes what a human reads, not what a heuristic depends on.
172
+
155
173
  The plugin export is equivalent and resolves the sender for you when the caller
156
174
  is a Databricks user:
157
175
 
@@ -383,7 +401,7 @@ handed to SMTP. The constants and the plugin's interceptor settings live in the
383
401
  `SEND_EMAIL_DESCRIPTION`.
384
402
  - `transport` - shared runtime, `getEmailRuntime()`, `resetEmailRuntime()`,
385
403
  `verifyEmailTransport()`, `sendEmail()`, its `SendEmailOptions` (an explicit
386
- `text/plain` alternative), and the executor slot
404
+ `text/plain` alternative and the `preview` preheader), and the executor slot
387
405
  (`setEmailExecutor()`, `executeWrite()`) that puts every send on AppKit's
388
406
  interceptor chain.
389
407
  - `config` - SMTP/outbox config types, sender policy, JSON schema, and
@@ -111,6 +111,17 @@ export interface SendEmailOptions {
111
111
  * with the HTML reads as phishing to spam filters.
112
112
  */
113
113
  text?: string;
114
+ /**
115
+ * Preheader text for the HTML part - the snippet shown beside the subject in an
116
+ * inbox list, and the body of the PUSH NOTIFICATION a mobile mail app posts.
117
+ * Defaults to the subject.
118
+ *
119
+ * Delivery-time rather than part of {@link EmailMessage} for the same reason as
120
+ * `text`: it is presentation the sending CODE chooses, not content a model
121
+ * composes. The one-time-code path sets it so the code itself rides in the
122
+ * notification, which is the only text iOS autofill gets to read.
123
+ */
124
+ preview?: string;
114
125
  }
115
126
  /**
116
127
  * Send (SMTP mode) or persist (file/outbox mode) one message from the
@@ -298,4 +298,4 @@ export async function sendEmail(message, from, signal, options) {
298
298
  assertSenderAllowed(from, getEmailRuntime().config.allowedSenders);
299
299
  return executeWrite("send", EMAIL_SEND_SETTINGS, (executeSignal) => dispatch(message, from, executeSignal, options), signal);
300
300
  }
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGVBQWUsR0FFaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE9BQU8sVUFBc0QsTUFBTSxZQUFZLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFvRCxNQUFNLGFBQWEsQ0FBQztBQUNuRyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzNCLGNBQWMsR0FFZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVsRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFvQjdDOzs7O0dBSUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsY0FBYyxFQUEwQixDQUFDO0FBRXpFLElBQUksT0FBaUMsQ0FBQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBNkI7SUFDM0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsT0FBTyxHQUFHO1lBQ1IsTUFBTTtZQUNOLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLEdBQUcsQ0FBQyxNQUFN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QyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RFLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUN4QyxDQUFDLEVBQ0YsTUFBTSxDQUNQLENBQUM7SUFDRixPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUk7UUFDVixTQUFTO1FBQ1QsSUFBSTtRQUNKLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUN6RCxDQUFDO0FBQ0osQ0FBQztBQThCRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsU0FBUyxDQUM3QixPQUFxQixFQUNyQixJQUFZLEVBQ1osTUFBb0IsRUFDcEIsT0FBMEI7SUFFMUIsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLG1CQUFtQixDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkUsT0FBTyxZQUFZLENBQ2pCLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsRUFDbEUsTUFBTSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgZW1haWwgcnVudGltZTogYSBsYXppbHktYnVpbHQsIHByb2Nlc3Mtd2lkZSBkaXNwYXRjaGVyIHBsdXMgaXRzXG4gKiByZXNvbHZlZCBjb25maWcsIGFuZCB7QGxpbmsgc2VuZEVtYWlsfSB3aGljaCBzZW5kcyBvbmVcbiAqIHtAbGluayBFbWFpbE1lc3NhZ2V9IHRocm91Z2ggaXQuIEluIFNNVFAgbW9kZSB0aGUgcnVudGltZSBob2xkcyBhXG4gKiBtZW1vaXplZCBub2RlbWFpbGVyIHRyYW5zcG9ydCAoc2hhcmVkIGJ5IHRoZSBwbHVnaW4ncyBzZXR1cCBhbmQgdGhlXG4gKiBhZ2VudCB0b29sLCBzbyB0aGV5IHJldXNlIG9uZSBjb25uZWN0aW9uIHBvb2wpOyBpbiBmaWxlL291dGJveCBtb2RlIGl0XG4gKiBob2xkcyBubyB0cmFuc3BvcnQgYW5kIHtAbGluayBzZW5kRW1haWx9IHdyaXRlcyBIVE1MIHRvIGRpc2sgaW5zdGVhZC5cbiAqIFRoZSBmaXJzdCBjYWxsZXIgKG5vcm1hbGx5IHRoZSBwbHVnaW4gYXQgc2V0dXApIHByaW1lcyBpdCB3aXRoIHRoZVxuICogcGx1Z2luJ3MgY29uZmlnOyBsYXRlciBjYWxsZXJzIHJldXNlIGl0LlxuICpcbiAqIFRoZSBydW50aW1lIGFsc28gY2FycmllcyB0aGUge0BsaW5rIEVtYWlsRXhlY3V0b3J9IGV2ZXJ5IG91dGJvdW5kIHNlbmQgcnVuc1xuICogdGhyb3VnaC4gVGhlIHBsdWdpbiBpbnN0YWxscyBpdHMgb3duIGBleGVjdXRlKClgIHRoZXJlIGF0IHNldHVwLCB3aGljaCBpc1xuICogaG93IHRoZSBNYXN0cmEgdG9vbCAtIGEgcGxhaW4gZnVuY3Rpb24gd2l0aCBubyBwbHVnaW4gaW5zdGFuY2UgaW4gc2NvcGUgLVxuICogc3RpbGwgZ2V0cyBBcHBLaXQncyByZXRyeSAvIHRpbWVvdXQgLyB0ZWxlbWV0cnkgY2hhaW4uIFdpdGhvdXQgYSByZWdpc3RlcmVkXG4gKiBwbHVnaW4gKGEgZGlyZWN0IGNhbGwgZnJvbSBhIHNjcmlwdCBvciBhIHRlc3QpIHRoZSBzZW5kIHN0aWxsIHJ1bnMsIGp1c3RcbiAqIHdpdGhvdXQgaW50ZXJjZXB0b3JzLlxuICpcbiAqIEV2ZXJ5IGVudHJ5IHBvaW50IHRha2VzIGFuIG9wdGlvbmFsIHtAbGluayBBYm9ydFNpZ25hbH0gc28gdGhlIHBsdWdpbidzXG4gKiBgZXhlY3V0ZSgpYCB0aW1lb3V0IGFuZCBhIGNsaWVudCBkaXNjb25uZWN0IGJvdGggc3RvcCB0aGUgY2FsbGVyIHdhaXRpbmdcbiAqIG9uIFNNVFAuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgRXhlY3V0aW9uRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgdHlwZSBFeGVjdXRpb25SZXN1bHQsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGV4ZWN1dGlvbiwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgRW1haWxBdHRhY2htZW50LCBFbWFpbE1lc3NhZ2UsIEVtYWlsUmVzdWx0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWVtYWlsXCI7XG5pbXBvcnQgbm9kZW1haWxlciwgeyB0eXBlIFNlbmRNYWlsT3B0aW9ucywgdHlwZSBUcmFuc3BvcnRlciB9IGZyb20gXCJub2RlbWFpbGVyXCI7XG5pbXBvcnQgeyByZXNvbHZlRW1haWxDb25maWcsIHR5cGUgRW1haWxQbHVnaW5Db25maWcsIHR5cGUgUmVzb2x2ZWRFbWFpbENvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHtcbiAgRU1BSUxfU0VORF9TRVRUSU5HUyxcbiAgTUFYX0FUVEFDSE1FTlRfQllURVMsXG4gIE1BWF9BVFRBQ0hNRU5UX0NPVU5ULFxuICBNQVhfQVRUQUNITUVOVFNfVE9UQUxfQllURVMsXG4gIE1BWF9CT0RZX0NIQVJTLFxuICB0eXBlIEVtYWlsRXhlY3V0aW9uU2V0dGluZ3MsXG59IGZyb20gXCIuL2RlZmF1bHRzLnRzXCI7XG5pbXBvcnQgeyByZW5kZXJFbWFpbCB9IGZyb20gXCIuL2VtYWlsLWh0bWwudHNcIjtcbmltcG9ydCB7IHdyaXRlT3V0Ym94RW1haWwgfSBmcm9tIFwiLi9vdXRib3gudHNcIjtcbmltcG9ydCB7IGFzc2VydFNlbmRlckFsbG93ZWQgfSBmcm9tIFwiLi9zZW5kZXIudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImVtYWlsL3RyYW5zcG9ydFwiKTtcblxuLyoqXG4gKiBSdW5zIG9uZSBvdXRib3VuZCBzZW5kIHRocm91Z2ggQXBwS2l0J3MgaW50ZXJjZXB0b3IgY2hhaW4uIE1hdGNoZXNcbiAqIGBQbHVnaW4uZXhlY3V0ZSgpYCwgd2hpY2ggbmV2ZXIgdGhyb3dzOiBhIGZhaWx1cmUgY29tZXMgYmFjayBhc1xuICogYHsgb2s6IGZhbHNlIH1gLlxuICovXG5leHBvcnQgdHlwZSBFbWFpbEV4ZWN1dG9yID0gPFQ+KFxuICBmbjogKHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPFQ+LFxuICBzZXR0aW5nczogRW1haWxFeGVjdXRpb25TZXR0aW5ncyxcbikgPT4gUHJvbWlzZTxFeGVjdXRpb25SZXN1bHQ8VD4+O1xuXG4vKiogVGhlIHNoYXJlZCBkaXNwYXRjaGVyLCBpdHMgcmVzb2x2ZWQgY29uZmlnLCBhbmQgdGhlIHNlbmQgZXhlY3V0b3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsUnVudGltZSB7XG4gIC8qKiBQcmVzZW50IG9ubHkgaW4gU01UUCBtb2RlLiAqL1xuICB0cmFuc3BvcnRlcj86IFRyYW5zcG9ydGVyO1xuICBjb25maWc6IFJlc29sdmVkRW1haWxDb25maWc7XG4gIGV4ZWN1dGU6IEVtYWlsRXhlY3V0b3I7XG59XG5cbi8qKlxuICogRXhlY3V0b3IgdXNlZCB1bnRpbCAob3IgdW5sZXNzKSB0aGUgcGx1Z2luIGluc3RhbGxzIGl0cyBvd246IHJ1biB0aGUgc2VuZFxuICogZGlyZWN0bHksIG1hcHBpbmcgYSB0aHJvdyBvbnRvIHRoZSBzYW1lIHtAbGluayBFeGVjdXRpb25SZXN1bHR9IHNoYXBlIHNvXG4gKiBjYWxsIHNpdGVzIGJyYW5jaCBvbiBgb2tgIGVpdGhlciB3YXkuXG4gKi9cbmNvbnN0IGRpcmVjdEV4ZWN1dGUgPSBleGVjdXRpb24uZGlyZWN0RXhlY3V0b3I8RW1haWxFeGVjdXRpb25TZXR0aW5ncz4oKTtcblxubGV0IHJ1bnRpbWU6IEVtYWlsUnVudGltZSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHNoYXJlZCBydW50aW1lLCBidWlsZGluZyBpdCBvbiBmaXJzdCB1c2UgYnkgcmVzb2x2aW5nXG4gKiBgb3ZlcnJpZGVzYCBvdmVyIHRoZSBlbnZpcm9ubWVudCAoYFNNVFBfSE9TVGAsIGBTTVRQX1BPUlRgLFxuICogYFNNVFBfU0VDVVJFYCwgYFNNVFBfVVNFUmAsIGBTTVRQX1BBU1NXT1JEYCwgYEVNQUlMX0RPTUFJTmAsXG4gKiBgRU1BSUxfRlJPTWAsIGBFTUFJTF9BTExPV0VEX1NFTkRFUlNgLCBgRU1BSUxfU0VOREVSX1BPTElDWWAsXG4gKiBgRU1BSUxfT1VUQk9YX01PREVgLCBgRU1BSUxfT1VUQk9YX0RJUmApIHRocm91Z2hcbiAqIHtAbGluayByZXNvbHZlRW1haWxDb25maWd9LiBXaXRoIFNNVFAgY3JlZGVudGlhbHMgcHJlc2VudCBpdCBob2xkcyBhXG4gKiBub2RlbWFpbGVyIHRyYW5zcG9ydCBhbmQgaXRzIGNvbm5lY3Rpb24gcG9vbDsgb3RoZXJ3aXNlIGl0IGlzIGluXG4gKiBmaWxlL291dGJveCBtb2RlIGFuZCBob2xkcyBub25lLlxuICpcbiAqIGBvdmVycmlkZXNgIGlzIHJlYWQgb25seSBvbiB0aGUgY2FsbCB0aGF0IGJ1aWxkcyB0aGUgcnVudGltZSwgc28gcHJpbWUgaXRcbiAqIGZyb20gdGhlIHBsdWdpbidzIGNvbmZpZyBhdCBzZXR1cDsgbGF0ZXIgY2FsbGVycyAodGhlIHRvb2wncyBgZXhlY3V0ZWAsXG4gKiB0aGUgc2VuZGVyLW9wdGlvbnMgcm91dGUpIHBhc3Mgbm90aGluZyBhbmQgZ2V0IHRoZSBzYW1lIGluc3RhbmNlLiBUaHJvd3NcbiAqIHdoYXRldmVyIHtAbGluayByZXNvbHZlRW1haWxDb25maWd9IHRocm93cyBmb3IgYW4gdW51c2FibGUgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVtYWlsUnVudGltZShvdmVycmlkZXM/OiBFbWFpbFBsdWdpbkNvbmZpZyk6IEVtYWlsUnVudGltZSB7XG4gIGlmICghcnVudGltZSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlc29sdmVFbWFpbENvbmZpZyhvdmVycmlkZXMpO1xuICAgIHJ1bnRpbWUgPSB7XG4gICAgICBjb25maWcsXG4gICAgICBleGVjdXRlOiBkaXJlY3RFeGVjdXRlLFxuICAgICAgLi4uKGNvbmZpZy5tb2RlID09PSBcInNtdHBcIlxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHRyYW5zcG9ydGVyOiBub2RlbWFpbGVyLmNyZWF0ZVRyYW5zcG9ydCh7XG4gICAgICAgICAgICAgIGhvc3Q6IGNvbmZpZy5ob3N0LFxuICAgICAgICAgICAgICBwb3J0OiBjb25maWcucG9ydCxcbiAgICAgICAgICAgICAgc2VjdXJlOiBjb25maWcuc2VjdXJlLFxuICAgICAgICAgICAgICBhdXRoOiBjb25maWcuYXV0aCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gcnVudGltZTtcbn1cblxuLyoqXG4gKiBJbnN0YWxsIHRoZSBleGVjdXRvciBvdXRib3VuZCBzZW5kcyBydW4gdGhyb3VnaC4gVGhlIHBsdWdpbiBjYWxscyB0aGlzIGF0XG4gKiBzZXR1cCB3aXRoIGl0cyBvd24gYGV4ZWN1dGUoKWA7IGEgc2Vjb25kIGNhbGwgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG9uZSwgc29cbiAqIGEgcmUtcmVnaXN0ZXJlZCBwbHVnaW4gZG9lcyBub3QgbGVhdmUgdGhlIHRvb2xzIGJvdW5kIHRvIGEgZGVhZCBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVtYWlsRXhlY3V0b3IoZXhlY3V0ZTogRW1haWxFeGVjdXRvcik6IHZvaWQge1xuICBnZXRFbWFpbFJ1bnRpbWUoKS5leGVjdXRlID0gZXhlY3V0ZTtcbn1cblxuLyoqXG4gKiBEcm9wIHRoZSBtZW1vaXplZCBydW50aW1lLCBjbG9zaW5nIHRoZSBTTVRQIGNvbm5lY3Rpb24gcG9vbCwgc28gdGhlIG5leHRcbiAqIHtAbGluayBnZXRFbWFpbFJ1bnRpbWV9IHJlYnVpbGRzIGl0IGZyb20gZnJlc2ggY29uZmlnIGFuZCBzdG9wcyBjYWxsaW5nXG4gKiB0aHJvdWdoIGEgdG9ybi1kb3duIHBsdWdpbidzIGBleGVjdXRlKClgLiBJZGVtcG90ZW50LCBhbmQgdGhlIHBsdWdpbidzXG4gKiBgc2h1dGRvd24oKWAgaG9vay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0RW1haWxSdW50aW1lKCk6IHZvaWQge1xuICBydW50aW1lPy50cmFuc3BvcnRlcj8uY2xvc2UoKTtcbiAgcnVudGltZSA9IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSdW4gb25lIG5vbi1pZGVtcG90ZW50IHdyaXRlIHRocm91Z2ggdGhlIHNoYXJlZCBleGVjdXRvciBhbmQgdW53cmFwIGl0LlxuICpcbiAqIGBleGVjdXRlKClgIG5ldmVyIHRocm93cywgc28gYSBmYWlsZWQgc2VuZCBhcnJpdmVzIGFzIGB7IG9rOiBmYWxzZSB9YCB3aXRoIGFcbiAqIHN0YXR1cyB0aGUgaW50ZXJjZXB0b3JzIGFscmVhZHkgc2FuaXRpemVkOyBpdCBpcyBsb2dnZWQgaGVyZSBhbmQgcmUtcmFpc2VkXG4gKiBhcyBhIHN0YWJsZSB7QGxpbmsgRXhlY3V0aW9uRXJyb3J9IHNvIGFuIHVwc3RyZWFtIG1lc3NhZ2UgbmV2ZXIgYmVjb21lcyB0aGVcbiAqIGNhbGxlcidzIGVycm9yIHRleHQuIGBzaWduYWxgIGlzIHRoZSBjYWxsZXIncyBvd24gY2FuY2VsbGF0aW9uIChhbiBhZ2VudFxuICogcnVuLCBhIHJlcXVlc3QgdGVhcmRvd24pOyBpdCBpcyBtZXJnZWQgd2l0aCB0aGUgc2lnbmFsIHRoZSB0aW1lb3V0XG4gKiBpbnRlcmNlcHRvciBzdXBwbGllcyBzbyBlaXRoZXIgb25lIHVud2luZHMgdGhlIEkvTy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVXcml0ZTxUPihcbiAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gIHNldHRpbmdzOiBFbWFpbEV4ZWN1dGlvblNldHRpbmdzLFxuICBmbjogKHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPFQ+LFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCB7IGV4ZWN1dGUgfSA9IGdldEVtYWlsUnVudGltZSgpO1xuICByZXR1cm4gZXhlY3V0aW9uLnJ1bih7XG4gICAgb3BlcmF0aW9uLFxuICAgIHNldHRpbmdzLFxuICAgIGV4ZWN1dGUsXG4gICAgZm4sXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbGVkOiBFeGVjdXRpb25FcnJvci5jYW5jZWxlZCxcbiAgICBmYWlsZWQ6IChmYWlsdXJlKSA9PiB7XG4gICAgICBsb2dnZXIud2FybihcImV4ZWN1dGlvbi1mYWlsZWRcIiwge1xuICAgICAgICBvcGVyYXRpb246IGZhaWx1cmUub3BlcmF0aW9uLFxuICAgICAgICBzdGF0dXM6IGZhaWx1cmUuc3RhdHVzLFxuICAgICAgICBlcnJvcjogZmFpbHVyZS5tZXNzYWdlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IEV4ZWN1dGlvbkVycm9yKGBlbWFpbDogJHtmYWlsdXJlLm9wZXJhdGlvbn0gZmFpbGVkYCwge1xuICAgICAgICBjb250ZXh0OiB7IG9wZXJhdGlvbjogZmFpbHVyZS5vcGVyYXRpb24sIHN0YXR1czogZmFpbHVyZS5zdGF0dXMgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW4gYW5kIHRlYXIgZG93biBvbmUgU01UUCBjb25uZWN0aW9uIHRvIHByb3ZlIHRoZSBob3N0LCBwb3J0LCBhbmRcbiAqIGNyZWRlbnRpYWxzIHdvcmsuIENhbGxlZCBhdCBwbHVnaW4gc2V0dXAgc28gYSBiYWQgcmVsYXkgc2hvd3MgdXAgaW4gdGhlXG4gKiBib290IGxvZ3MgcmF0aGVyIHRoYW4gb24gdGhlIGZpcnN0IGFwcHJvdmVkIHNlbmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlFbWFpbFRyYW5zcG9ydChcbiAgdHJhbnNwb3J0ZXI6IFRyYW5zcG9ydGVyIHwgdW5kZWZpbmVkLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIXRyYW5zcG9ydGVyKSB7XG4gICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLmludmFsaWRDb25uZWN0aW9uKFxuICAgICAgXCJTTVRQXCIsXG4gICAgICBcIlRoZSBydW50aW1lIHJlc29sdmVkIHRvIG91dGJveCBtb2RlLCBzbyB0aGVyZSBpcyBubyB0cmFuc3BvcnQgdG8gdmVyaWZ5LlwiLFxuICAgICk7XG4gIH1cbiAgYXdhaXQgYWJvcnRhYmxlKHRyYW5zcG9ydGVyLnZlcmlmeSgpLCBzaWduYWwpO1xufVxuXG4vKipcbiAqIFN0b3AgYXdhaXRpbmcgYHByb21pc2VgIGFzIHNvb24gYXMgYHNpZ25hbGAgYWJvcnRzLiBub2RlbWFpbGVyIGV4cG9zZXMgbm9cbiAqIGNhbmNlbGxhdGlvbiBob29rLCBzbyB0aGUgU01UUCBjb252ZXJzYXRpb24gaXRzZWxmIGZpbmlzaGVzIG9uIGl0cyBvd25cbiAqIGNvbm5lY3Rpb247IHdoYXQgdW53aW5kcyBpcyB0aGUgY2FsbGVyIGFuZCBldmVyeXRoaW5nIGRvd25zdHJlYW0gb2YgaXQuXG4gKi9cbmZ1bmN0aW9uIGFib3J0YWJsZTxUPihwcm9taXNlOiBQcm9taXNlPFQ+LCBzaWduYWw6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxUPiB7XG4gIGlmICghc2lnbmFsKSByZXR1cm4gcHJvbWlzZTtcbiAgc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIC8vIFRoZSBsaXN0ZW5lciBpcyBkZXRhY2hlZCBvbmNlIHRoZSByYWNlIHNldHRsZXMgc28gYSBsb25nLWxpdmVkIHJ1biBzaWduYWxcbiAgLy8gZG9lcyBub3QgYWNjdW11bGF0ZSBvbmUgcGVyIHNlbmQuXG4gIGNvbnN0IGxpc3RlbmVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCBhYm9ydGVkID0gbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+IHtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHJlamVjdChzaWduYWwucmVhc29uKSwge1xuICAgICAgb25jZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogbGlzdGVuZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIFByb21pc2UucmFjZShbcHJvbWlzZSwgYWJvcnRlZF0pLmZpbmFsbHkoKCkgPT4gbGlzdGVuZXIuYWJvcnQoKSk7XG59XG5cbi8qKiBUaGUgY29tbWEtam9pbmVkIHJlY2lwaWVudCBzdHJpbmcgZWNob2VkIGJhY2sgaW4ge0BsaW5rIEVtYWlsUmVzdWx0fS4gKi9cbmZ1bmN0aW9uIHJlY2lwaWVudEVjaG8odG86IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRvLmpvaW4oXCIsIFwiKTtcbn1cblxuLyoqXG4gKiBOb2RlIGJ1ZmZlciBlbmNvZGluZ3MgYSB3aXJlIGF0dGFjaG1lbnQgbWF5IG5hbWUgZm9yIGl0cyBpbmxpbmUgYGNvbnRlbnRgLlxuICogQW55dGhpbmcgZWxzZSBpcyBtZWFzdXJlZCBhcyBVVEYtOCwgd2hpY2ggb3Zlci1jb3VudHMgcmF0aGVyIHRoYW4gbGV0dGluZ1xuICogYW4gdW5yZWNvZ25pemVkIGVuY29kaW5nIHNsaXAgcGFzdCB0aGUgc2l6ZSBjYXAuXG4gKi9cbmNvbnN0IENPTlRFTlRfRU5DT0RJTkdTOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gIFwiYXNjaWlcIixcbiAgXCJiYXNlNjRcIixcbiAgXCJiYXNlNjR1cmxcIixcbiAgXCJiaW5hcnlcIixcbiAgXCJoZXhcIixcbiAgXCJsYXRpbjFcIixcbiAgXCJ1Y3MyXCIsXG4gIFwidWNzLTJcIixcbiAgXCJ1dGY4XCIsXG4gIFwidXRmLThcIixcbiAgXCJ1dGYxNmxlXCIsXG4gIFwidXRmLTE2bGVcIixcbl0pO1xuXG4vKipcbiAqIERlY29kZWQgYnl0ZSBzaXplIG9mIG9uZSBhdHRhY2htZW50J3MgaW5saW5lIGNvbnRlbnQuIEEgYHBhdGhgIGF0dGFjaG1lbnRcbiAqIGNvbnRyaWJ1dGVzIG5vdGhpbmc6IG5vZGVtYWlsZXIgc3RyZWFtcyBpdCwgc28gaXRzIGJ5dGVzIG5ldmVyIHNpdCBpbiB0aGlzXG4gKiBwcm9jZXNzIGFuZCBjYW5ub3QgYmUgbWVhc3VyZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gYXR0YWNobWVudEJ5dGVzKGF0dGFjaG1lbnQ6IEVtYWlsQXR0YWNobWVudCk6IG51bWJlciB7XG4gIGNvbnN0IHsgY29udGVudCwgZW5jb2RpbmcgfSA9IGF0dGFjaG1lbnQ7XG4gIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICBjb25zdCBkZWNsYXJlZCA9IGVuY29kaW5nPy50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCByZXNvbHZlZCA9XG4gICAgZGVjbGFyZWQgJiYgQ09OVEVOVF9FTkNPRElOR1MuaGFzKGRlY2xhcmVkKSA/IChkZWNsYXJlZCBhcyBCdWZmZXJFbmNvZGluZykgOiBcInV0ZjhcIjtcbiAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKGNvbnRlbnQsIHJlc29sdmVkKTtcbn1cblxuLyoqXG4gKiBSZWplY3QgYSBtZXNzYWdlIHdob3NlIGJvZHkgb3IgYXR0YWNobWVudHMgZXhjZWVkIHRoZSBwbHVnaW4ncyBjYXBzLiBUaGVcbiAqIGJvZHkgYW5kIGF0dGFjaG1lbnQgbGlzdCBhcnJpdmUgZnJvbSBhIG1vZGVsLCBzbyB0aGV5IGFyZSB1bmJvdW5kZWQgdW50aWxcbiAqIHNvbWV0aGluZyBib3VuZHMgdGhlbTsgbW9zdCBTTVRQIHJlbGF5cyBhbHNvIHJlamVjdCBhbiBvdmVyc2l6ZWQgbWVzc2FnZVxuICogb25seSBhZnRlciB0aGUgd2hvbGUgcGF5bG9hZCBoYXMgYmVlbiB1cGxvYWRlZC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0TWVzc2FnZVdpdGhpbkNhcHMobWVzc2FnZTogRW1haWxNZXNzYWdlKTogdm9pZCB7XG4gIGlmIChtZXNzYWdlLmJvZHkubGVuZ3RoID4gTUFYX0JPRFlfQ0hBUlMpIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgXCJib2R5XCIsXG4gICAgICBtZXNzYWdlLmJvZHkubGVuZ3RoLFxuICAgICAgYGF0IG1vc3QgJHtNQVhfQk9EWV9DSEFSU30gY2hhcmFjdGVyc2AsXG4gICAgKTtcbiAgfVxuICBjb25zdCBhdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHMgPz8gW107XG4gIGlmIChhdHRhY2htZW50cy5sZW5ndGggPiBNQVhfQVRUQUNITUVOVF9DT1VOVCkge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICBcImF0dGFjaG1lbnRzXCIsXG4gICAgICBhdHRhY2htZW50cy5sZW5ndGgsXG4gICAgICBgYXQgbW9zdCAke01BWF9BVFRBQ0hNRU5UX0NPVU5UfSBmaWxlc2AsXG4gICAgKTtcbiAgfVxuICBsZXQgdG90YWwgPSAwO1xuICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICBjb25zdCBieXRlcyA9IGF0dGFjaG1lbnRCeXRlcyhhdHRhY2htZW50KTtcbiAgICBpZiAoYnl0ZXMgPiBNQVhfQVRUQUNITUVOVF9CWVRFUykge1xuICAgICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgICAgXCJhdHRhY2htZW50c1tdLmNvbnRlbnRcIixcbiAgICAgICAgYnl0ZXMsXG4gICAgICAgIGBhdCBtb3N0ICR7TUFYX0FUVEFDSE1FTlRfQllURVN9IGJ5dGVzIHBlciBmaWxlYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRvdGFsICs9IGJ5dGVzO1xuICB9XG4gIGlmICh0b3RhbCA+IE1BWF9BVFRBQ0hNRU5UU19UT1RBTF9CWVRFUykge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICBcImF0dGFjaG1lbnRzXCIsXG4gICAgICB0b3RhbCxcbiAgICAgIGBhdCBtb3N0ICR7TUFYX0FUVEFDSE1FTlRTX1RPVEFMX0JZVEVTfSBieXRlcyBhY3Jvc3MgYWxsIGZpbGVzYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTWFwIHRoZSB3aXJlLWZvcm1hdCB7QGxpbmsgRW1haWxBdHRhY2htZW50fXMgb250byBub2RlbWFpbGVyJ3NcbiAqIGF0dGFjaG1lbnQgc2hhcGUsIGRyb3BwaW5nIHVuc2V0IG9wdGlvbmFsIGtleXMgc28gbm9kZW1haWxlciBhcHBsaWVzXG4gKiBpdHMgb3duIGRlZmF1bHRzICh1dGYtOCBlbmNvZGluZywgZmlsZW5hbWUtaW5mZXJyZWQgY29udGVudCB0eXBlKS4gVGhlXG4gKiB3aXJlIGZpZWxkcyBhcmUgYSBkZWxpYmVyYXRlIHN1YnNldCBvZiBub2RlbWFpbGVyJ3MsIHNvIHRoaXMgaXMgYVxuICogc3RyYWlnaHQgc3RydWN0dXJhbCBwYXNzLXRocm91Z2guXG4gKi9cbmZ1bmN0aW9uIHRvTWFpbEF0dGFjaG1lbnRzKFxuICBhdHRhY2htZW50czogRW1haWxBdHRhY2htZW50W10gfCB1bmRlZmluZWQsXG4pOiBTZW5kTWFpbE9wdGlvbnNbXCJhdHRhY2htZW50c1wiXSB7XG4gIGlmICghYXR0YWNobWVudHMgfHwgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gYXR0YWNobWVudHMubWFwKChhdHQpID0+ICh7XG4gICAgZmlsZW5hbWU6IGF0dC5maWxlbmFtZSxcbiAgICAuLi4oYXR0LmNvbnRlbnQgIT09IHVuZGVmaW5lZCA/IHsgY29udGVudDogYXR0LmNvbnRlbnQgfSA6IHt9KSxcbiAgICAuLi4oYXR0LmVuY29kaW5nICE9PSB1bmRlZmluZWQgPyB7IGVuY29kaW5nOiBhdHQuZW5jb2RpbmcgfSA6IHt9KSxcbiAgICAuLi4oYXR0LnBhdGggIT09IHVuZGVmaW5lZCA/IHsgcGF0aDogYXR0LnBhdGggfSA6IHt9KSxcbiAgICAuLi4oYXR0LmNvbnRlbnRUeXBlICE9PSB1bmRlZmluZWQgPyB7IGNvbnRlbnRUeXBlOiBhdHQuY29udGVudFR5cGUgfSA6IHt9KSxcbiAgfSkpO1xufVxuXG4vKipcbiAqIEhhbmQgb25lIGFscmVhZHktdmFsaWRhdGVkIG1lc3NhZ2UgdG8gU01UUCwgb3Igd3JpdGUgaXQgdG8gdGhlIG91dGJveCB3aGVuXG4gKiBubyBjcmVkZW50aWFscyBhcmUgY29uZmlndXJlZC4gVGhlIGhhbGYgb2YgYSBzZW5kIHRoYXQgcGVyZm9ybXMgSS9PLCBzbyBpdFxuICogaXMgd2hhdCBydW5zIGluc2lkZSB0aGUgaW50ZXJjZXB0b3IgY2hhaW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRpc3BhdGNoKFxuICBtZXNzYWdlOiBFbWFpbE1lc3NhZ2UsXG4gIGZyb206IHN0cmluZyxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gIG9wdGlvbnM/OiBTZW5kRW1haWxPcHRpb25zLFxuKTogUHJvbWlzZTxFbWFpbFJlc3VsdD4ge1xuICBjb25zdCB7IGNvbmZpZywgdHJhbnNwb3J0ZXIgfSA9IGdldEVtYWlsUnVudGltZSgpO1xuICBjb25zdCByZWNpcGllbnQgPSByZWNpcGllbnRFY2hvKG1lc3NhZ2UudG8pO1xuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgaWYgKGNvbmZpZy5tb2RlID09PSBcImZpbGVcIikge1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCB3cml0ZU91dGJveEVtYWlsKG1lc3NhZ2UsIGZyb20sIGNvbmZpZy5vdXREaXIsIGNvbmZpZy5icmFuZCk7XG4gICAgcmV0dXJuIHsgc2VudDogdHJ1ZSwgcmVjaXBpZW50LCBmcm9tLCBtZXNzYWdlSWQ6IHBhdGggfTtcbiAgfVxuXG4gIGlmICghdHJhbnNwb3J0ZXIpIHtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IuaW52YWxpZENvbm5lY3Rpb24oXG4gICAgICBcIlNNVFBcIixcbiAgICAgIFwiTm8gdHJhbnNwb3J0IHdhcyBidWlsdCBmb3IgdGhlIHJlc29sdmVkIGNvbmZpZ3VyYXRpb24uXCIsXG4gICAgKTtcbiAgfVxuICBjb25zdCBhdHRhY2htZW50cyA9IHRvTWFpbEF0dGFjaG1lbnRzKG1lc3NhZ2UuYXR0YWNobWVudHMpO1xuICBjb25zdCByZW5kZXJlZCA9IGF3YWl0IHJlbmRlckVtYWlsKHtcbiAgICBzdWJqZWN0OiBtZXNzYWdlLnN1YmplY3QsXG4gICAgYm9keTogbWVzc2FnZS5ib2R5LFxuICAgIGJyYW5kOiBjb25maWcuYnJhbmQsXG4gIH0pO1xuICBjb25zdCBpbmZvID0gYXdhaXQgYWJvcnRhYmxlKFxuICAgIHRyYW5zcG9ydGVyLnNlbmRNYWlsKHtcbiAgICAgIGZyb20sXG4gICAgICB0bzogbWVzc2FnZS50byxcbiAgICAgIHN1YmplY3Q6IG1lc3NhZ2Uuc3ViamVjdCxcbiAgICAgIC8vIEEgY2FsbGVyLXN1cHBsaWVkIHBsYWluLXRleHQgcGFydCBXSU5TIG92ZXIgdGhlIGdlbmVyYXRlZCBvbmUuIEJvdGggcGFydHNcbiAgICAgIC8vIHN0aWxsIGNvbWUgZnJvbSB0aGUgc2FtZSBjb250ZW50OyB0aGlzIG9ubHkgbGV0cyBhIGNhbGxlciBjb250cm9sIHRoZVxuICAgICAgLy8gdGV4dCBhbHRlcm5hdGl2ZSdzIGV4YWN0IGxpbmUgbGF5b3V0LCB3aGljaCBzb21lIGNsaWVudHMgcGFyc2UgKHNlZVxuICAgICAgLy8gYFNlbmRFbWFpbE9wdGlvbnMudGV4dGApLlxuICAgICAgdGV4dDogb3B0aW9ucz8udGV4dCA/PyByZW5kZXJlZC50ZXh0LFxuICAgICAgaHRtbDogcmVuZGVyZWQuaHRtbCxcbiAgICAgIC4uLihtZXNzYWdlLmNjICYmIG1lc3NhZ2UuY2MubGVuZ3RoID4gMCA/IHsgY2M6IG1lc3NhZ2UuY2MgfSA6IHt9KSxcbiAgICAgIC4uLihtZXNzYWdlLmJjYyAmJiBtZXNzYWdlLmJjYy5sZW5ndGggPiAwID8geyBiY2M6IG1lc3NhZ2UuYmNjIH0gOiB7fSksXG4gICAgICAuLi4oYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgfSksXG4gICAgc2lnbmFsLFxuICApO1xuICByZXR1cm4ge1xuICAgIHNlbnQ6IHRydWUsXG4gICAgcmVjaXBpZW50LFxuICAgIGZyb20sXG4gICAgLi4uKGluZm8ubWVzc2FnZUlkID8geyBtZXNzYWdlSWQ6IGluZm8ubWVzc2FnZUlkIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKlxuICogRGVsaXZlcnktdGltZSBvcHRpb25zIHRoYXQgYXJlIE5PVCBwYXJ0IG9mIHRoZSBtZXNzYWdlIGEgbW9kZWwgY29tcG9zZXMuXG4gKlxuICogRGVsaWJlcmF0ZWx5IHNlcGFyYXRlIGZyb20ge0BsaW5rIEVtYWlsTWVzc2FnZX06IHRoYXQgc2NoZW1hIGlzIHRoZSBhZ2VudFxuICogdG9vbCdzIGlucHV0LCBzbyBhbnl0aGluZyBhZGRlZCB0byBpdCBiZWNvbWVzIGEgZmllbGQgYSBtb2RlbCBjYW4gc2V0LiBUaGVzZVxuICogZGVzY3JpYmUgaG93IGEgbWVzc2FnZSBpcyBERUxJVkVSRUQsIHNvIHRoZXkgYXJlIHRoZSBjYWxsZXIncyB0byBzdXBwbHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZEVtYWlsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBleHBsaWNpdCBgdGV4dC9wbGFpbmAgYWx0ZXJuYXRpdmUsIHJlcGxhY2luZyB0aGUgb25lIGdlbmVyYXRlZCBmcm9tIHRoZVxuICAgKiBSZWFjdCBFbWFpbCB0cmVlLiBUaGUgSFRNTCBwYXJ0IGlzIHVudG91Y2hlZCwgc28gdGhlIHJlY2lwaWVudCBzdGlsbCBnZXRzIHRoZVxuICAgKiBmdWxsIGJyYW5kZWQgdGVtcGxhdGUuXG4gICAqXG4gICAqIFRoaXMgZXhpc3RzIGJlY2F1c2UgdGhlIGdlbmVyYXRlZCB0ZXh0IHBhcnQgaXMgYSBSRU5ERVJJTkcgb2YgdGhlIEhUTUw6IGl0XG4gICAqIGNhcnJpZXMgdGhlIGJyYW5kIGhlYWRlciBhbmQgZm9vdGVyLCBhbmQgaXQgdHVybnMgQ1NTIG1hcmdpbiBpbnRvIGJsYW5rXG4gICAqIGxpbmVzLiBUaGF0IGlzIGZpbmUgZm9yIHByb3NlIGFuZCB3cm9uZyBmb3IgY29udGVudCBhIG1hY2hpbmUgcGFyc2VzLiBBXG4gICAqIG9uZS10aW1lLWNvZGUgZW1haWwgaXMgdGhlIGNhc2UgaW4gcG9pbnQgLSBjbGllbnRzIGxvb2sgZm9yIHRoZSBjb2RlIG9uIHRoZVxuICAgKiBsaW5lIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBwcm9tcHQsIGFuZCBhIHN0eWxlZCBgPGgyPmAgY29kZSBsYW5kcyB0d28gYmxhbmtcbiAgICogbGluZXMgYmVsb3cgaXQsIHNvIGF1dG9maWxsIHN0b3BzIGJlaW5nIG9mZmVyZWQgZXZlbiB0aG91Z2ggdGhlIEhUTUwgbG9va3NcbiAgICogcGVyZmVjdC4gU3VwcGx5aW5nIHRoZSB0ZXh0IHBhcnQgZGlyZWN0bHkga2VlcHMgdGhlIG5pY2UgdGVtcGxhdGUgQU5EIHRoZVxuICAgKiBsYXlvdXQgdGhvc2UgY2xpZW50cyBleHBlY3QuXG4gICAqXG4gICAqIEtlZXAgdGhlIHNhbWUgaW5mb3JtYXRpb24gaW4gYm90aCBwYXJ0czsgYSB0ZXh0IGFsdGVybmF0aXZlIHRoYXQgZGlzYWdyZWVzXG4gICAqIHdpdGggdGhlIEhUTUwgcmVhZHMgYXMgcGhpc2hpbmcgdG8gc3BhbSBmaWx0ZXJzLlxuICAgKi9cbiAgdGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZW5kIChTTVRQIG1vZGUpIG9yIHBlcnNpc3QgKGZpbGUvb3V0Ym94IG1vZGUpIG9uZSBtZXNzYWdlIGZyb20gdGhlXG4gKiByZXNvbHZlZCBgZnJvbWAgYWRkcmVzcy4gYHRvYCAoYW5kIG9wdGlvbmFsIGBjY2AgLyBgYmNjYCkgZWFjaCBhY2NlcHRcbiAqIG9uZSBvciBtb3JlIGFkZHJlc3NlcywgYW5kIGBhdHRhY2htZW50c2AgYXJlIGZvcndhcmRlZCBhcyBmaWxlcy4gVGhlXG4gKiBib2R5IGlzIHJlbmRlcmVkIGJ5IFJlYWN0IEVtYWlsIGludG8gbWF0Y2hpbmcgcGxhaW4tdGV4dCBhbmQgSFRNTCBNSU1FXG4gKiBhbHRlcm5hdGl2ZXMsIGFuZCB0aGUgb3V0Ym94IGVtYmVkcyB0aGVcbiAqIHJlbmRlcmVkIEhUTUwgaW4gYSBkb2N1bWVudC4gSW4gZmlsZSBtb2RlIHRoZSByZXR1cm5lZCBgbWVzc2FnZUlkYCBpc1xuICogdGhlIHBhdGggd3JpdHRlbi4gVGhyb3dzIHdoZW4gYHRvYCBjYXJyaWVzIG5vIHJlY2lwaWVudCwgd2hlbiB0aGUgYm9keVxuICogb3IgYXR0YWNobWVudHMgZXhjZWVkIHRoZSBwbHVnaW4ncyBjYXBzLCBvciB3aGVuIGBmcm9tYCBpcyBub3QgcGVybWl0dGVkXG4gKiBieSB0aGUgZWZmZWN0aXZlIHNlbmRlciBhbGxvdy1saXN0LlxuICpcbiAqIFRoZSByZWNpcGllbnQsIGNhcCwgYW5kIHNlbmRlciBjaGVja3MgcnVuIGJlZm9yZSB0aGUgaW50ZXJjZXB0b3IgY2hhaW4gc29cbiAqIHRoZWlyIHNwZWNpZmljIHN0YXR1cyBhbmQgYWN0aW9uYWJsZSBtZXNzYWdlIHJlYWNoIHRoZSBjYWxsZXIgaW5zdGVhZCBvZlxuICogdGhlIGNoYWluJ3Mgc3RhYmxlIGZhaWx1cmUgdGV4dC4gYHNpZ25hbGAgY2FuY2VscyB0aGUgc2VuZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRFbWFpbChcbiAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICBmcm9tOiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICBvcHRpb25zPzogU2VuZEVtYWlsT3B0aW9ucyxcbik6IFByb21pc2U8RW1haWxSZXN1bHQ+IHtcbiAgaWYgKG1lc3NhZ2UudG8ubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLm1pc3NpbmdGaWVsZChcInRvXCIpO1xuICB9XG4gIGFzc2VydE1lc3NhZ2VXaXRoaW5DYXBzKG1lc3NhZ2UpO1xuICBhc3NlcnRTZW5kZXJBbGxvd2VkKGZyb20sIGdldEVtYWlsUnVudGltZSgpLmNvbmZpZy5hbGxvd2VkU2VuZGVycyk7XG4gIHJldHVybiBleGVjdXRlV3JpdGUoXG4gICAgXCJzZW5kXCIsXG4gICAgRU1BSUxfU0VORF9TRVRUSU5HUyxcbiAgICAoZXhlY3V0ZVNpZ25hbCkgPT4gZGlzcGF0Y2gobWVzc2FnZSwgZnJvbSwgZXhlY3V0ZVNpZ25hbCwgb3B0aW9ucyksXG4gICAgc2lnbmFsLFxuICApO1xufVxuIl19
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGVBQWUsR0FFaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE9BQU8sVUFBc0QsTUFBTSxZQUFZLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFvRCxNQUFNLGFBQWEsQ0FBQztBQUNuRyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzNCLGNBQWMsR0FFZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVsRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFvQjdDOzs7O0dBSUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsY0FBYyxFQUEwQixDQUFDO0FBRXpFLElBQUksT0FBaUMsQ0FBQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBNkI7SUFDM0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsT0FBTyxHQUFHO1lBQ1IsTUFBTTtZQUNOLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLEdBQUcsQ0FBQyxNQUFN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QyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RFLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUN4QyxDQUFDLEVBQ0YsTUFBTSxDQUNQLENBQUM7SUFDRixPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUk7UUFDVixTQUFTO1FBQ1QsSUFBSTtRQUNKLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUN6RCxDQUFDO0FBQ0osQ0FBQztBQXlDRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsU0FBUyxDQUM3QixPQUFxQixFQUNyQixJQUFZLEVBQ1osTUFBb0IsRUFDcEIsT0FBMEI7SUFFMUIsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLG1CQUFtQixDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkUsT0FBTyxZQUFZLENBQ2pCLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsRUFDbEUsTUFBTSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgZW1haWwgcnVudGltZTogYSBsYXppbHktYnVpbHQsIHByb2Nlc3Mtd2lkZSBkaXNwYXRjaGVyIHBsdXMgaXRzXG4gKiByZXNvbHZlZCBjb25maWcsIGFuZCB7QGxpbmsgc2VuZEVtYWlsfSB3aGljaCBzZW5kcyBvbmVcbiAqIHtAbGluayBFbWFpbE1lc3NhZ2V9IHRocm91Z2ggaXQuIEluIFNNVFAgbW9kZSB0aGUgcnVudGltZSBob2xkcyBhXG4gKiBtZW1vaXplZCBub2RlbWFpbGVyIHRyYW5zcG9ydCAoc2hhcmVkIGJ5IHRoZSBwbHVnaW4ncyBzZXR1cCBhbmQgdGhlXG4gKiBhZ2VudCB0b29sLCBzbyB0aGV5IHJldXNlIG9uZSBjb25uZWN0aW9uIHBvb2wpOyBpbiBmaWxlL291dGJveCBtb2RlIGl0XG4gKiBob2xkcyBubyB0cmFuc3BvcnQgYW5kIHtAbGluayBzZW5kRW1haWx9IHdyaXRlcyBIVE1MIHRvIGRpc2sgaW5zdGVhZC5cbiAqIFRoZSBmaXJzdCBjYWxsZXIgKG5vcm1hbGx5IHRoZSBwbHVnaW4gYXQgc2V0dXApIHByaW1lcyBpdCB3aXRoIHRoZVxuICogcGx1Z2luJ3MgY29uZmlnOyBsYXRlciBjYWxsZXJzIHJldXNlIGl0LlxuICpcbiAqIFRoZSBydW50aW1lIGFsc28gY2FycmllcyB0aGUge0BsaW5rIEVtYWlsRXhlY3V0b3J9IGV2ZXJ5IG91dGJvdW5kIHNlbmQgcnVuc1xuICogdGhyb3VnaC4gVGhlIHBsdWdpbiBpbnN0YWxscyBpdHMgb3duIGBleGVjdXRlKClgIHRoZXJlIGF0IHNldHVwLCB3aGljaCBpc1xuICogaG93IHRoZSBNYXN0cmEgdG9vbCAtIGEgcGxhaW4gZnVuY3Rpb24gd2l0aCBubyBwbHVnaW4gaW5zdGFuY2UgaW4gc2NvcGUgLVxuICogc3RpbGwgZ2V0cyBBcHBLaXQncyByZXRyeSAvIHRpbWVvdXQgLyB0ZWxlbWV0cnkgY2hhaW4uIFdpdGhvdXQgYSByZWdpc3RlcmVkXG4gKiBwbHVnaW4gKGEgZGlyZWN0IGNhbGwgZnJvbSBhIHNjcmlwdCBvciBhIHRlc3QpIHRoZSBzZW5kIHN0aWxsIHJ1bnMsIGp1c3RcbiAqIHdpdGhvdXQgaW50ZXJjZXB0b3JzLlxuICpcbiAqIEV2ZXJ5IGVudHJ5IHBvaW50IHRha2VzIGFuIG9wdGlvbmFsIHtAbGluayBBYm9ydFNpZ25hbH0gc28gdGhlIHBsdWdpbidzXG4gKiBgZXhlY3V0ZSgpYCB0aW1lb3V0IGFuZCBhIGNsaWVudCBkaXNjb25uZWN0IGJvdGggc3RvcCB0aGUgY2FsbGVyIHdhaXRpbmdcbiAqIG9uIFNNVFAuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgRXhlY3V0aW9uRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgdHlwZSBFeGVjdXRpb25SZXN1bHQsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGV4ZWN1dGlvbiwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgRW1haWxBdHRhY2htZW50LCBFbWFpbE1lc3NhZ2UsIEVtYWlsUmVzdWx0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWVtYWlsXCI7XG5pbXBvcnQgbm9kZW1haWxlciwgeyB0eXBlIFNlbmRNYWlsT3B0aW9ucywgdHlwZSBUcmFuc3BvcnRlciB9IGZyb20gXCJub2RlbWFpbGVyXCI7XG5pbXBvcnQgeyByZXNvbHZlRW1haWxDb25maWcsIHR5cGUgRW1haWxQbHVnaW5Db25maWcsIHR5cGUgUmVzb2x2ZWRFbWFpbENvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHtcbiAgRU1BSUxfU0VORF9TRVRUSU5HUyxcbiAgTUFYX0FUVEFDSE1FTlRfQllURVMsXG4gIE1BWF9BVFRBQ0hNRU5UX0NPVU5ULFxuICBNQVhfQVRUQUNITUVOVFNfVE9UQUxfQllURVMsXG4gIE1BWF9CT0RZX0NIQVJTLFxuICB0eXBlIEVtYWlsRXhlY3V0aW9uU2V0dGluZ3MsXG59IGZyb20gXCIuL2RlZmF1bHRzLnRzXCI7XG5pbXBvcnQgeyByZW5kZXJFbWFpbCB9IGZyb20gXCIuL2VtYWlsLWh0bWwudHNcIjtcbmltcG9ydCB7IHdyaXRlT3V0Ym94RW1haWwgfSBmcm9tIFwiLi9vdXRib3gudHNcIjtcbmltcG9ydCB7IGFzc2VydFNlbmRlckFsbG93ZWQgfSBmcm9tIFwiLi9zZW5kZXIudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImVtYWlsL3RyYW5zcG9ydFwiKTtcblxuLyoqXG4gKiBSdW5zIG9uZSBvdXRib3VuZCBzZW5kIHRocm91Z2ggQXBwS2l0J3MgaW50ZXJjZXB0b3IgY2hhaW4uIE1hdGNoZXNcbiAqIGBQbHVnaW4uZXhlY3V0ZSgpYCwgd2hpY2ggbmV2ZXIgdGhyb3dzOiBhIGZhaWx1cmUgY29tZXMgYmFjayBhc1xuICogYHsgb2s6IGZhbHNlIH1gLlxuICovXG5leHBvcnQgdHlwZSBFbWFpbEV4ZWN1dG9yID0gPFQ+KFxuICBmbjogKHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPFQ+LFxuICBzZXR0aW5nczogRW1haWxFeGVjdXRpb25TZXR0aW5ncyxcbikgPT4gUHJvbWlzZTxFeGVjdXRpb25SZXN1bHQ8VD4+O1xuXG4vKiogVGhlIHNoYXJlZCBkaXNwYXRjaGVyLCBpdHMgcmVzb2x2ZWQgY29uZmlnLCBhbmQgdGhlIHNlbmQgZXhlY3V0b3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsUnVudGltZSB7XG4gIC8qKiBQcmVzZW50IG9ubHkgaW4gU01UUCBtb2RlLiAqL1xuICB0cmFuc3BvcnRlcj86IFRyYW5zcG9ydGVyO1xuICBjb25maWc6IFJlc29sdmVkRW1haWxDb25maWc7XG4gIGV4ZWN1dGU6IEVtYWlsRXhlY3V0b3I7XG59XG5cbi8qKlxuICogRXhlY3V0b3IgdXNlZCB1bnRpbCAob3IgdW5sZXNzKSB0aGUgcGx1Z2luIGluc3RhbGxzIGl0cyBvd246IHJ1biB0aGUgc2VuZFxuICogZGlyZWN0bHksIG1hcHBpbmcgYSB0aHJvdyBvbnRvIHRoZSBzYW1lIHtAbGluayBFeGVjdXRpb25SZXN1bHR9IHNoYXBlIHNvXG4gKiBjYWxsIHNpdGVzIGJyYW5jaCBvbiBgb2tgIGVpdGhlciB3YXkuXG4gKi9cbmNvbnN0IGRpcmVjdEV4ZWN1dGUgPSBleGVjdXRpb24uZGlyZWN0RXhlY3V0b3I8RW1haWxFeGVjdXRpb25TZXR0aW5ncz4oKTtcblxubGV0IHJ1bnRpbWU6IEVtYWlsUnVudGltZSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHNoYXJlZCBydW50aW1lLCBidWlsZGluZyBpdCBvbiBmaXJzdCB1c2UgYnkgcmVzb2x2aW5nXG4gKiBgb3ZlcnJpZGVzYCBvdmVyIHRoZSBlbnZpcm9ubWVudCAoYFNNVFBfSE9TVGAsIGBTTVRQX1BPUlRgLFxuICogYFNNVFBfU0VDVVJFYCwgYFNNVFBfVVNFUmAsIGBTTVRQX1BBU1NXT1JEYCwgYEVNQUlMX0RPTUFJTmAsXG4gKiBgRU1BSUxfRlJPTWAsIGBFTUFJTF9BTExPV0VEX1NFTkRFUlNgLCBgRU1BSUxfU0VOREVSX1BPTElDWWAsXG4gKiBgRU1BSUxfT1VUQk9YX01PREVgLCBgRU1BSUxfT1VUQk9YX0RJUmApIHRocm91Z2hcbiAqIHtAbGluayByZXNvbHZlRW1haWxDb25maWd9LiBXaXRoIFNNVFAgY3JlZGVudGlhbHMgcHJlc2VudCBpdCBob2xkcyBhXG4gKiBub2RlbWFpbGVyIHRyYW5zcG9ydCBhbmQgaXRzIGNvbm5lY3Rpb24gcG9vbDsgb3RoZXJ3aXNlIGl0IGlzIGluXG4gKiBmaWxlL291dGJveCBtb2RlIGFuZCBob2xkcyBub25lLlxuICpcbiAqIGBvdmVycmlkZXNgIGlzIHJlYWQgb25seSBvbiB0aGUgY2FsbCB0aGF0IGJ1aWxkcyB0aGUgcnVudGltZSwgc28gcHJpbWUgaXRcbiAqIGZyb20gdGhlIHBsdWdpbidzIGNvbmZpZyBhdCBzZXR1cDsgbGF0ZXIgY2FsbGVycyAodGhlIHRvb2wncyBgZXhlY3V0ZWAsXG4gKiB0aGUgc2VuZGVyLW9wdGlvbnMgcm91dGUpIHBhc3Mgbm90aGluZyBhbmQgZ2V0IHRoZSBzYW1lIGluc3RhbmNlLiBUaHJvd3NcbiAqIHdoYXRldmVyIHtAbGluayByZXNvbHZlRW1haWxDb25maWd9IHRocm93cyBmb3IgYW4gdW51c2FibGUgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVtYWlsUnVudGltZShvdmVycmlkZXM/OiBFbWFpbFBsdWdpbkNvbmZpZyk6IEVtYWlsUnVudGltZSB7XG4gIGlmICghcnVudGltZSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlc29sdmVFbWFpbENvbmZpZyhvdmVycmlkZXMpO1xuICAgIHJ1bnRpbWUgPSB7XG4gICAgICBjb25maWcsXG4gICAgICBleGVjdXRlOiBkaXJlY3RFeGVjdXRlLFxuICAgICAgLi4uKGNvbmZpZy5tb2RlID09PSBcInNtdHBcIlxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHRyYW5zcG9ydGVyOiBub2RlbWFpbGVyLmNyZWF0ZVRyYW5zcG9ydCh7XG4gICAgICAgICAgICAgIGhvc3Q6IGNvbmZpZy5ob3N0LFxuICAgICAgICAgICAgICBwb3J0OiBjb25maWcucG9ydCxcbiAgICAgICAgICAgICAgc2VjdXJlOiBjb25maWcuc2VjdXJlLFxuICAgICAgICAgICAgICBhdXRoOiBjb25maWcuYXV0aCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gcnVudGltZTtcbn1cblxuLyoqXG4gKiBJbnN0YWxsIHRoZSBleGVjdXRvciBvdXRib3VuZCBzZW5kcyBydW4gdGhyb3VnaC4gVGhlIHBsdWdpbiBjYWxscyB0aGlzIGF0XG4gKiBzZXR1cCB3aXRoIGl0cyBvd24gYGV4ZWN1dGUoKWA7IGEgc2Vjb25kIGNhbGwgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG9uZSwgc29cbiAqIGEgcmUtcmVnaXN0ZXJlZCBwbHVnaW4gZG9lcyBub3QgbGVhdmUgdGhlIHRvb2xzIGJvdW5kIHRvIGEgZGVhZCBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVtYWlsRXhlY3V0b3IoZXhlY3V0ZTogRW1haWxFeGVjdXRvcik6IHZvaWQge1xuICBnZXRFbWFpbFJ1bnRpbWUoKS5leGVjdXRlID0gZXhlY3V0ZTtcbn1cblxuLyoqXG4gKiBEcm9wIHRoZSBtZW1vaXplZCBydW50aW1lLCBjbG9zaW5nIHRoZSBTTVRQIGNvbm5lY3Rpb24gcG9vbCwgc28gdGhlIG5leHRcbiAqIHtAbGluayBnZXRFbWFpbFJ1bnRpbWV9IHJlYnVpbGRzIGl0IGZyb20gZnJlc2ggY29uZmlnIGFuZCBzdG9wcyBjYWxsaW5nXG4gKiB0aHJvdWdoIGEgdG9ybi1kb3duIHBsdWdpbidzIGBleGVjdXRlKClgLiBJZGVtcG90ZW50LCBhbmQgdGhlIHBsdWdpbidzXG4gKiBgc2h1dGRvd24oKWAgaG9vay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0RW1haWxSdW50aW1lKCk6IHZvaWQge1xuICBydW50aW1lPy50cmFuc3BvcnRlcj8uY2xvc2UoKTtcbiAgcnVudGltZSA9IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSdW4gb25lIG5vbi1pZGVtcG90ZW50IHdyaXRlIHRocm91Z2ggdGhlIHNoYXJlZCBleGVjdXRvciBhbmQgdW53cmFwIGl0LlxuICpcbiAqIGBleGVjdXRlKClgIG5ldmVyIHRocm93cywgc28gYSBmYWlsZWQgc2VuZCBhcnJpdmVzIGFzIGB7IG9rOiBmYWxzZSB9YCB3aXRoIGFcbiAqIHN0YXR1cyB0aGUgaW50ZXJjZXB0b3JzIGFscmVhZHkgc2FuaXRpemVkOyBpdCBpcyBsb2dnZWQgaGVyZSBhbmQgcmUtcmFpc2VkXG4gKiBhcyBhIHN0YWJsZSB7QGxpbmsgRXhlY3V0aW9uRXJyb3J9IHNvIGFuIHVwc3RyZWFtIG1lc3NhZ2UgbmV2ZXIgYmVjb21lcyB0aGVcbiAqIGNhbGxlcidzIGVycm9yIHRleHQuIGBzaWduYWxgIGlzIHRoZSBjYWxsZXIncyBvd24gY2FuY2VsbGF0aW9uIChhbiBhZ2VudFxuICogcnVuLCBhIHJlcXVlc3QgdGVhcmRvd24pOyBpdCBpcyBtZXJnZWQgd2l0aCB0aGUgc2lnbmFsIHRoZSB0aW1lb3V0XG4gKiBpbnRlcmNlcHRvciBzdXBwbGllcyBzbyBlaXRoZXIgb25lIHVud2luZHMgdGhlIEkvTy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVXcml0ZTxUPihcbiAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gIHNldHRpbmdzOiBFbWFpbEV4ZWN1dGlvblNldHRpbmdzLFxuICBmbjogKHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPFQ+LFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCB7IGV4ZWN1dGUgfSA9IGdldEVtYWlsUnVudGltZSgpO1xuICByZXR1cm4gZXhlY3V0aW9uLnJ1bih7XG4gICAgb3BlcmF0aW9uLFxuICAgIHNldHRpbmdzLFxuICAgIGV4ZWN1dGUsXG4gICAgZm4sXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbGVkOiBFeGVjdXRpb25FcnJvci5jYW5jZWxlZCxcbiAgICBmYWlsZWQ6IChmYWlsdXJlKSA9PiB7XG4gICAgICBsb2dnZXIud2FybihcImV4ZWN1dGlvbi1mYWlsZWRcIiwge1xuICAgICAgICBvcGVyYXRpb246IGZhaWx1cmUub3BlcmF0aW9uLFxuICAgICAgICBzdGF0dXM6IGZhaWx1cmUuc3RhdHVzLFxuICAgICAgICBlcnJvcjogZmFpbHVyZS5tZXNzYWdlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IEV4ZWN1dGlvbkVycm9yKGBlbWFpbDogJHtmYWlsdXJlLm9wZXJhdGlvbn0gZmFpbGVkYCwge1xuICAgICAgICBjb250ZXh0OiB7IG9wZXJhdGlvbjogZmFpbHVyZS5vcGVyYXRpb24sIHN0YXR1czogZmFpbHVyZS5zdGF0dXMgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW4gYW5kIHRlYXIgZG93biBvbmUgU01UUCBjb25uZWN0aW9uIHRvIHByb3ZlIHRoZSBob3N0LCBwb3J0LCBhbmRcbiAqIGNyZWRlbnRpYWxzIHdvcmsuIENhbGxlZCBhdCBwbHVnaW4gc2V0dXAgc28gYSBiYWQgcmVsYXkgc2hvd3MgdXAgaW4gdGhlXG4gKiBib290IGxvZ3MgcmF0aGVyIHRoYW4gb24gdGhlIGZpcnN0IGFwcHJvdmVkIHNlbmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlFbWFpbFRyYW5zcG9ydChcbiAgdHJhbnNwb3J0ZXI6IFRyYW5zcG9ydGVyIHwgdW5kZWZpbmVkLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIXRyYW5zcG9ydGVyKSB7XG4gICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLmludmFsaWRDb25uZWN0aW9uKFxuICAgICAgXCJTTVRQXCIsXG4gICAgICBcIlRoZSBydW50aW1lIHJlc29sdmVkIHRvIG91dGJveCBtb2RlLCBzbyB0aGVyZSBpcyBubyB0cmFuc3BvcnQgdG8gdmVyaWZ5LlwiLFxuICAgICk7XG4gIH1cbiAgYXdhaXQgYWJvcnRhYmxlKHRyYW5zcG9ydGVyLnZlcmlmeSgpLCBzaWduYWwpO1xufVxuXG4vKipcbiAqIFN0b3AgYXdhaXRpbmcgYHByb21pc2VgIGFzIHNvb24gYXMgYHNpZ25hbGAgYWJvcnRzLiBub2RlbWFpbGVyIGV4cG9zZXMgbm9cbiAqIGNhbmNlbGxhdGlvbiBob29rLCBzbyB0aGUgU01UUCBjb252ZXJzYXRpb24gaXRzZWxmIGZpbmlzaGVzIG9uIGl0cyBvd25cbiAqIGNvbm5lY3Rpb247IHdoYXQgdW53aW5kcyBpcyB0aGUgY2FsbGVyIGFuZCBldmVyeXRoaW5nIGRvd25zdHJlYW0gb2YgaXQuXG4gKi9cbmZ1bmN0aW9uIGFib3J0YWJsZTxUPihwcm9taXNlOiBQcm9taXNlPFQ+LCBzaWduYWw6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxUPiB7XG4gIGlmICghc2lnbmFsKSByZXR1cm4gcHJvbWlzZTtcbiAgc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIC8vIFRoZSBsaXN0ZW5lciBpcyBkZXRhY2hlZCBvbmNlIHRoZSByYWNlIHNldHRsZXMgc28gYSBsb25nLWxpdmVkIHJ1biBzaWduYWxcbiAgLy8gZG9lcyBub3QgYWNjdW11bGF0ZSBvbmUgcGVyIHNlbmQuXG4gIGNvbnN0IGxpc3RlbmVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCBhYm9ydGVkID0gbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+IHtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHJlamVjdChzaWduYWwucmVhc29uKSwge1xuICAgICAgb25jZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogbGlzdGVuZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIFByb21pc2UucmFjZShbcHJvbWlzZSwgYWJvcnRlZF0pLmZpbmFsbHkoKCkgPT4gbGlzdGVuZXIuYWJvcnQoKSk7XG59XG5cbi8qKiBUaGUgY29tbWEtam9pbmVkIHJlY2lwaWVudCBzdHJpbmcgZWNob2VkIGJhY2sgaW4ge0BsaW5rIEVtYWlsUmVzdWx0fS4gKi9cbmZ1bmN0aW9uIHJlY2lwaWVudEVjaG8odG86IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRvLmpvaW4oXCIsIFwiKTtcbn1cblxuLyoqXG4gKiBOb2RlIGJ1ZmZlciBlbmNvZGluZ3MgYSB3aXJlIGF0dGFjaG1lbnQgbWF5IG5hbWUgZm9yIGl0cyBpbmxpbmUgYGNvbnRlbnRgLlxuICogQW55dGhpbmcgZWxzZSBpcyBtZWFzdXJlZCBhcyBVVEYtOCwgd2hpY2ggb3Zlci1jb3VudHMgcmF0aGVyIHRoYW4gbGV0dGluZ1xuICogYW4gdW5yZWNvZ25pemVkIGVuY29kaW5nIHNsaXAgcGFzdCB0aGUgc2l6ZSBjYXAuXG4gKi9cbmNvbnN0IENPTlRFTlRfRU5DT0RJTkdTOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gIFwiYXNjaWlcIixcbiAgXCJiYXNlNjRcIixcbiAgXCJiYXNlNjR1cmxcIixcbiAgXCJiaW5hcnlcIixcbiAgXCJoZXhcIixcbiAgXCJsYXRpbjFcIixcbiAgXCJ1Y3MyXCIsXG4gIFwidWNzLTJcIixcbiAgXCJ1dGY4XCIsXG4gIFwidXRmLThcIixcbiAgXCJ1dGYxNmxlXCIsXG4gIFwidXRmLTE2bGVcIixcbl0pO1xuXG4vKipcbiAqIERlY29kZWQgYnl0ZSBzaXplIG9mIG9uZSBhdHRhY2htZW50J3MgaW5saW5lIGNvbnRlbnQuIEEgYHBhdGhgIGF0dGFjaG1lbnRcbiAqIGNvbnRyaWJ1dGVzIG5vdGhpbmc6IG5vZGVtYWlsZXIgc3RyZWFtcyBpdCwgc28gaXRzIGJ5dGVzIG5ldmVyIHNpdCBpbiB0aGlzXG4gKiBwcm9jZXNzIGFuZCBjYW5ub3QgYmUgbWVhc3VyZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gYXR0YWNobWVudEJ5dGVzKGF0dGFjaG1lbnQ6IEVtYWlsQXR0YWNobWVudCk6IG51bWJlciB7XG4gIGNvbnN0IHsgY29udGVudCwgZW5jb2RpbmcgfSA9IGF0dGFjaG1lbnQ7XG4gIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICBjb25zdCBkZWNsYXJlZCA9IGVuY29kaW5nPy50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCByZXNvbHZlZCA9XG4gICAgZGVjbGFyZWQgJiYgQ09OVEVOVF9FTkNPRElOR1MuaGFzKGRlY2xhcmVkKSA/IChkZWNsYXJlZCBhcyBCdWZmZXJFbmNvZGluZykgOiBcInV0ZjhcIjtcbiAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKGNvbnRlbnQsIHJlc29sdmVkKTtcbn1cblxuLyoqXG4gKiBSZWplY3QgYSBtZXNzYWdlIHdob3NlIGJvZHkgb3IgYXR0YWNobWVudHMgZXhjZWVkIHRoZSBwbHVnaW4ncyBjYXBzLiBUaGVcbiAqIGJvZHkgYW5kIGF0dGFjaG1lbnQgbGlzdCBhcnJpdmUgZnJvbSBhIG1vZGVsLCBzbyB0aGV5IGFyZSB1bmJvdW5kZWQgdW50aWxcbiAqIHNvbWV0aGluZyBib3VuZHMgdGhlbTsgbW9zdCBTTVRQIHJlbGF5cyBhbHNvIHJlamVjdCBhbiBvdmVyc2l6ZWQgbWVzc2FnZVxuICogb25seSBhZnRlciB0aGUgd2hvbGUgcGF5bG9hZCBoYXMgYmVlbiB1cGxvYWRlZC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0TWVzc2FnZVdpdGhpbkNhcHMobWVzc2FnZTogRW1haWxNZXNzYWdlKTogdm9pZCB7XG4gIGlmIChtZXNzYWdlLmJvZHkubGVuZ3RoID4gTUFYX0JPRFlfQ0hBUlMpIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgXCJib2R5XCIsXG4gICAgICBtZXNzYWdlLmJvZHkubGVuZ3RoLFxuICAgICAgYGF0IG1vc3QgJHtNQVhfQk9EWV9DSEFSU30gY2hhcmFjdGVyc2AsXG4gICAgKTtcbiAgfVxuICBjb25zdCBhdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHMgPz8gW107XG4gIGlmIChhdHRhY2htZW50cy5sZW5ndGggPiBNQVhfQVRUQUNITUVOVF9DT1VOVCkge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICBcImF0dGFjaG1lbnRzXCIsXG4gICAgICBhdHRhY2htZW50cy5sZW5ndGgsXG4gICAgICBgYXQgbW9zdCAke01BWF9BVFRBQ0hNRU5UX0NPVU5UfSBmaWxlc2AsXG4gICAgKTtcbiAgfVxuICBsZXQgdG90YWwgPSAwO1xuICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICBjb25zdCBieXRlcyA9IGF0dGFjaG1lbnRCeXRlcyhhdHRhY2htZW50KTtcbiAgICBpZiAoYnl0ZXMgPiBNQVhfQVRUQUNITUVOVF9CWVRFUykge1xuICAgICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgICAgXCJhdHRhY2htZW50c1tdLmNvbnRlbnRcIixcbiAgICAgICAgYnl0ZXMsXG4gICAgICAgIGBhdCBtb3N0ICR7TUFYX0FUVEFDSE1FTlRfQllURVN9IGJ5dGVzIHBlciBmaWxlYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRvdGFsICs9IGJ5dGVzO1xuICB9XG4gIGlmICh0b3RhbCA+IE1BWF9BVFRBQ0hNRU5UU19UT1RBTF9CWVRFUykge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICBcImF0dGFjaG1lbnRzXCIsXG4gICAgICB0b3RhbCxcbiAgICAgIGBhdCBtb3N0ICR7TUFYX0FUVEFDSE1FTlRTX1RPVEFMX0JZVEVTfSBieXRlcyBhY3Jvc3MgYWxsIGZpbGVzYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTWFwIHRoZSB3aXJlLWZvcm1hdCB7QGxpbmsgRW1haWxBdHRhY2htZW50fXMgb250byBub2RlbWFpbGVyJ3NcbiAqIGF0dGFjaG1lbnQgc2hhcGUsIGRyb3BwaW5nIHVuc2V0IG9wdGlvbmFsIGtleXMgc28gbm9kZW1haWxlciBhcHBsaWVzXG4gKiBpdHMgb3duIGRlZmF1bHRzICh1dGYtOCBlbmNvZGluZywgZmlsZW5hbWUtaW5mZXJyZWQgY29udGVudCB0eXBlKS4gVGhlXG4gKiB3aXJlIGZpZWxkcyBhcmUgYSBkZWxpYmVyYXRlIHN1YnNldCBvZiBub2RlbWFpbGVyJ3MsIHNvIHRoaXMgaXMgYVxuICogc3RyYWlnaHQgc3RydWN0dXJhbCBwYXNzLXRocm91Z2guXG4gKi9cbmZ1bmN0aW9uIHRvTWFpbEF0dGFjaG1lbnRzKFxuICBhdHRhY2htZW50czogRW1haWxBdHRhY2htZW50W10gfCB1bmRlZmluZWQsXG4pOiBTZW5kTWFpbE9wdGlvbnNbXCJhdHRhY2htZW50c1wiXSB7XG4gIGlmICghYXR0YWNobWVudHMgfHwgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gYXR0YWNobWVudHMubWFwKChhdHQpID0+ICh7XG4gICAgZmlsZW5hbWU6IGF0dC5maWxlbmFtZSxcbiAgICAuLi4oYXR0LmNvbnRlbnQgIT09IHVuZGVmaW5lZCA/IHsgY29udGVudDogYXR0LmNvbnRlbnQgfSA6IHt9KSxcbiAgICAuLi4oYXR0LmVuY29kaW5nICE9PSB1bmRlZmluZWQgPyB7IGVuY29kaW5nOiBhdHQuZW5jb2RpbmcgfSA6IHt9KSxcbiAgICAuLi4oYXR0LnBhdGggIT09IHVuZGVmaW5lZCA/IHsgcGF0aDogYXR0LnBhdGggfSA6IHt9KSxcbiAgICAuLi4oYXR0LmNvbnRlbnRUeXBlICE9PSB1bmRlZmluZWQgPyB7IGNvbnRlbnRUeXBlOiBhdHQuY29udGVudFR5cGUgfSA6IHt9KSxcbiAgfSkpO1xufVxuXG4vKipcbiAqIEhhbmQgb25lIGFscmVhZHktdmFsaWRhdGVkIG1lc3NhZ2UgdG8gU01UUCwgb3Igd3JpdGUgaXQgdG8gdGhlIG91dGJveCB3aGVuXG4gKiBubyBjcmVkZW50aWFscyBhcmUgY29uZmlndXJlZC4gVGhlIGhhbGYgb2YgYSBzZW5kIHRoYXQgcGVyZm9ybXMgSS9PLCBzbyBpdFxuICogaXMgd2hhdCBydW5zIGluc2lkZSB0aGUgaW50ZXJjZXB0b3IgY2hhaW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRpc3BhdGNoKFxuICBtZXNzYWdlOiBFbWFpbE1lc3NhZ2UsXG4gIGZyb206IHN0cmluZyxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gIG9wdGlvbnM/OiBTZW5kRW1haWxPcHRpb25zLFxuKTogUHJvbWlzZTxFbWFpbFJlc3VsdD4ge1xuICBjb25zdCB7IGNvbmZpZywgdHJhbnNwb3J0ZXIgfSA9IGdldEVtYWlsUnVudGltZSgpO1xuICBjb25zdCByZWNpcGllbnQgPSByZWNpcGllbnRFY2hvKG1lc3NhZ2UudG8pO1xuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgaWYgKGNvbmZpZy5tb2RlID09PSBcImZpbGVcIikge1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCB3cml0ZU91dGJveEVtYWlsKG1lc3NhZ2UsIGZyb20sIGNvbmZpZy5vdXREaXIsIGNvbmZpZy5icmFuZCk7XG4gICAgcmV0dXJuIHsgc2VudDogdHJ1ZSwgcmVjaXBpZW50LCBmcm9tLCBtZXNzYWdlSWQ6IHBhdGggfTtcbiAgfVxuXG4gIGlmICghdHJhbnNwb3J0ZXIpIHtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IuaW52YWxpZENvbm5lY3Rpb24oXG4gICAgICBcIlNNVFBcIixcbiAgICAgIFwiTm8gdHJhbnNwb3J0IHdhcyBidWlsdCBmb3IgdGhlIHJlc29sdmVkIGNvbmZpZ3VyYXRpb24uXCIsXG4gICAgKTtcbiAgfVxuICBjb25zdCBhdHRhY2htZW50cyA9IHRvTWFpbEF0dGFjaG1lbnRzKG1lc3NhZ2UuYXR0YWNobWVudHMpO1xuICBjb25zdCByZW5kZXJlZCA9IGF3YWl0IHJlbmRlckVtYWlsKHtcbiAgICBzdWJqZWN0OiBtZXNzYWdlLnN1YmplY3QsXG4gICAgYm9keTogbWVzc2FnZS5ib2R5LFxuICAgIGJyYW5kOiBjb25maWcuYnJhbmQsXG4gIH0pO1xuICBjb25zdCBpbmZvID0gYXdhaXQgYWJvcnRhYmxlKFxuICAgIHRyYW5zcG9ydGVyLnNlbmRNYWlsKHtcbiAgICAgIGZyb20sXG4gICAgICB0bzogbWVzc2FnZS50byxcbiAgICAgIHN1YmplY3Q6IG1lc3NhZ2Uuc3ViamVjdCxcbiAgICAgIC8vIEEgY2FsbGVyLXN1cHBsaWVkIHBsYWluLXRleHQgcGFydCBXSU5TIG92ZXIgdGhlIGdlbmVyYXRlZCBvbmUuIEJvdGggcGFydHNcbiAgICAgIC8vIHN0aWxsIGNvbWUgZnJvbSB0aGUgc2FtZSBjb250ZW50OyB0aGlzIG9ubHkgbGV0cyBhIGNhbGxlciBjb250cm9sIHRoZVxuICAgICAgLy8gdGV4dCBhbHRlcm5hdGl2ZSdzIGV4YWN0IGxpbmUgbGF5b3V0LCB3aGljaCBzb21lIGNsaWVudHMgcGFyc2UgKHNlZVxuICAgICAgLy8gYFNlbmRFbWFpbE9wdGlvbnMudGV4dGApLlxuICAgICAgdGV4dDogb3B0aW9ucz8udGV4dCA/PyByZW5kZXJlZC50ZXh0LFxuICAgICAgaHRtbDogcmVuZGVyZWQuaHRtbCxcbiAgICAgIC4uLihtZXNzYWdlLmNjICYmIG1lc3NhZ2UuY2MubGVuZ3RoID4gMCA/IHsgY2M6IG1lc3NhZ2UuY2MgfSA6IHt9KSxcbiAgICAgIC4uLihtZXNzYWdlLmJjYyAmJiBtZXNzYWdlLmJjYy5sZW5ndGggPiAwID8geyBiY2M6IG1lc3NhZ2UuYmNjIH0gOiB7fSksXG4gICAgICAuLi4oYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgfSksXG4gICAgc2lnbmFsLFxuICApO1xuICByZXR1cm4ge1xuICAgIHNlbnQ6IHRydWUsXG4gICAgcmVjaXBpZW50LFxuICAgIGZyb20sXG4gICAgLi4uKGluZm8ubWVzc2FnZUlkID8geyBtZXNzYWdlSWQ6IGluZm8ubWVzc2FnZUlkIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKlxuICogRGVsaXZlcnktdGltZSBvcHRpb25zIHRoYXQgYXJlIE5PVCBwYXJ0IG9mIHRoZSBtZXNzYWdlIGEgbW9kZWwgY29tcG9zZXMuXG4gKlxuICogRGVsaWJlcmF0ZWx5IHNlcGFyYXRlIGZyb20ge0BsaW5rIEVtYWlsTWVzc2FnZX06IHRoYXQgc2NoZW1hIGlzIHRoZSBhZ2VudFxuICogdG9vbCdzIGlucHV0LCBzbyBhbnl0aGluZyBhZGRlZCB0byBpdCBiZWNvbWVzIGEgZmllbGQgYSBtb2RlbCBjYW4gc2V0LiBUaGVzZVxuICogZGVzY3JpYmUgaG93IGEgbWVzc2FnZSBpcyBERUxJVkVSRUQsIHNvIHRoZXkgYXJlIHRoZSBjYWxsZXIncyB0byBzdXBwbHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZEVtYWlsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBleHBsaWNpdCBgdGV4dC9wbGFpbmAgYWx0ZXJuYXRpdmUsIHJlcGxhY2luZyB0aGUgb25lIGdlbmVyYXRlZCBmcm9tIHRoZVxuICAgKiBSZWFjdCBFbWFpbCB0cmVlLiBUaGUgSFRNTCBwYXJ0IGlzIHVudG91Y2hlZCwgc28gdGhlIHJlY2lwaWVudCBzdGlsbCBnZXRzIHRoZVxuICAgKiBmdWxsIGJyYW5kZWQgdGVtcGxhdGUuXG4gICAqXG4gICAqIFRoaXMgZXhpc3RzIGJlY2F1c2UgdGhlIGdlbmVyYXRlZCB0ZXh0IHBhcnQgaXMgYSBSRU5ERVJJTkcgb2YgdGhlIEhUTUw6IGl0XG4gICAqIGNhcnJpZXMgdGhlIGJyYW5kIGhlYWRlciBhbmQgZm9vdGVyLCBhbmQgaXQgdHVybnMgQ1NTIG1hcmdpbiBpbnRvIGJsYW5rXG4gICAqIGxpbmVzLiBUaGF0IGlzIGZpbmUgZm9yIHByb3NlIGFuZCB3cm9uZyBmb3IgY29udGVudCBhIG1hY2hpbmUgcGFyc2VzLiBBXG4gICAqIG9uZS10aW1lLWNvZGUgZW1haWwgaXMgdGhlIGNhc2UgaW4gcG9pbnQgLSBjbGllbnRzIGxvb2sgZm9yIHRoZSBjb2RlIG9uIHRoZVxuICAgKiBsaW5lIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBwcm9tcHQsIGFuZCBhIHN0eWxlZCBgPGgyPmAgY29kZSBsYW5kcyB0d28gYmxhbmtcbiAgICogbGluZXMgYmVsb3cgaXQsIHNvIGF1dG9maWxsIHN0b3BzIGJlaW5nIG9mZmVyZWQgZXZlbiB0aG91Z2ggdGhlIEhUTUwgbG9va3NcbiAgICogcGVyZmVjdC4gU3VwcGx5aW5nIHRoZSB0ZXh0IHBhcnQgZGlyZWN0bHkga2VlcHMgdGhlIG5pY2UgdGVtcGxhdGUgQU5EIHRoZVxuICAgKiBsYXlvdXQgdGhvc2UgY2xpZW50cyBleHBlY3QuXG4gICAqXG4gICAqIEtlZXAgdGhlIHNhbWUgaW5mb3JtYXRpb24gaW4gYm90aCBwYXJ0czsgYSB0ZXh0IGFsdGVybmF0aXZlIHRoYXQgZGlzYWdyZWVzXG4gICAqIHdpdGggdGhlIEhUTUwgcmVhZHMgYXMgcGhpc2hpbmcgdG8gc3BhbSBmaWx0ZXJzLlxuICAgKi9cbiAgdGV4dD86IHN0cmluZztcbiAgLyoqXG4gICAqIFByZWhlYWRlciB0ZXh0IGZvciB0aGUgSFRNTCBwYXJ0IC0gdGhlIHNuaXBwZXQgc2hvd24gYmVzaWRlIHRoZSBzdWJqZWN0IGluIGFuXG4gICAqIGluYm94IGxpc3QsIGFuZCB0aGUgYm9keSBvZiB0aGUgUFVTSCBOT1RJRklDQVRJT04gYSBtb2JpbGUgbWFpbCBhcHAgcG9zdHMuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzdWJqZWN0LlxuICAgKlxuICAgKiBEZWxpdmVyeS10aW1lIHJhdGhlciB0aGFuIHBhcnQgb2Yge0BsaW5rIEVtYWlsTWVzc2FnZX0gZm9yIHRoZSBzYW1lIHJlYXNvbiBhc1xuICAgKiBgdGV4dGA6IGl0IGlzIHByZXNlbnRhdGlvbiB0aGUgc2VuZGluZyBDT0RFIGNob29zZXMsIG5vdCBjb250ZW50IGEgbW9kZWxcbiAgICogY29tcG9zZXMuIFRoZSBvbmUtdGltZS1jb2RlIHBhdGggc2V0cyBpdCBzbyB0aGUgY29kZSBpdHNlbGYgcmlkZXMgaW4gdGhlXG4gICAqIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXMgdGhlIG9ubHkgdGV4dCBpT1MgYXV0b2ZpbGwgZ2V0cyB0byByZWFkLlxuICAgKi9cbiAgcHJldmlldz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZW5kIChTTVRQIG1vZGUpIG9yIHBlcnNpc3QgKGZpbGUvb3V0Ym94IG1vZGUpIG9uZSBtZXNzYWdlIGZyb20gdGhlXG4gKiByZXNvbHZlZCBgZnJvbWAgYWRkcmVzcy4gYHRvYCAoYW5kIG9wdGlvbmFsIGBjY2AgLyBgYmNjYCkgZWFjaCBhY2NlcHRcbiAqIG9uZSBvciBtb3JlIGFkZHJlc3NlcywgYW5kIGBhdHRhY2htZW50c2AgYXJlIGZvcndhcmRlZCBhcyBmaWxlcy4gVGhlXG4gKiBib2R5IGlzIHJlbmRlcmVkIGJ5IFJlYWN0IEVtYWlsIGludG8gbWF0Y2hpbmcgcGxhaW4tdGV4dCBhbmQgSFRNTCBNSU1FXG4gKiBhbHRlcm5hdGl2ZXMsIGFuZCB0aGUgb3V0Ym94IGVtYmVkcyB0aGVcbiAqIHJlbmRlcmVkIEhUTUwgaW4gYSBkb2N1bWVudC4gSW4gZmlsZSBtb2RlIHRoZSByZXR1cm5lZCBgbWVzc2FnZUlkYCBpc1xuICogdGhlIHBhdGggd3JpdHRlbi4gVGhyb3dzIHdoZW4gYHRvYCBjYXJyaWVzIG5vIHJlY2lwaWVudCwgd2hlbiB0aGUgYm9keVxuICogb3IgYXR0YWNobWVudHMgZXhjZWVkIHRoZSBwbHVnaW4ncyBjYXBzLCBvciB3aGVuIGBmcm9tYCBpcyBub3QgcGVybWl0dGVkXG4gKiBieSB0aGUgZWZmZWN0aXZlIHNlbmRlciBhbGxvdy1saXN0LlxuICpcbiAqIFRoZSByZWNpcGllbnQsIGNhcCwgYW5kIHNlbmRlciBjaGVja3MgcnVuIGJlZm9yZSB0aGUgaW50ZXJjZXB0b3IgY2hhaW4gc29cbiAqIHRoZWlyIHNwZWNpZmljIHN0YXR1cyBhbmQgYWN0aW9uYWJsZSBtZXNzYWdlIHJlYWNoIHRoZSBjYWxsZXIgaW5zdGVhZCBvZlxuICogdGhlIGNoYWluJ3Mgc3RhYmxlIGZhaWx1cmUgdGV4dC4gYHNpZ25hbGAgY2FuY2VscyB0aGUgc2VuZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRFbWFpbChcbiAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICBmcm9tOiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICBvcHRpb25zPzogU2VuZEVtYWlsT3B0aW9ucyxcbik6IFByb21pc2U8RW1haWxSZXN1bHQ+IHtcbiAgaWYgKG1lc3NhZ2UudG8ubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLm1pc3NpbmdGaWVsZChcInRvXCIpO1xuICB9XG4gIGFzc2VydE1lc3NhZ2VXaXRoaW5DYXBzKG1lc3NhZ2UpO1xuICBhc3NlcnRTZW5kZXJBbGxvd2VkKGZyb20sIGdldEVtYWlsUnVudGltZSgpLmNvbmZpZy5hbGxvd2VkU2VuZGVycyk7XG4gIHJldHVybiBleGVjdXRlV3JpdGUoXG4gICAgXCJzZW5kXCIsXG4gICAgRU1BSUxfU0VORF9TRVRUSU5HUyxcbiAgICAoZXhlY3V0ZVNpZ25hbCkgPT4gZGlzcGF0Y2gobWVzc2FnZSwgZnJvbSwgZXhlY3V0ZVNpZ25hbCwgb3B0aW9ucyksXG4gICAgc2lnbmFsLFxuICApO1xufVxuIl19
package/package.json CHANGED
@@ -27,9 +27,9 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@databricks/appkit": "^0.43.0",
30
- "@dbx-tools/shared-core": "0.6.57",
31
- "@dbx-tools/shared-email": "0.6.57",
32
- "@dbx-tools/shared-email-template": "0.6.57",
30
+ "@dbx-tools/shared-core": "0.6.58",
31
+ "@dbx-tools/shared-email": "0.6.58",
32
+ "@dbx-tools/shared-email-template": "0.6.58",
33
33
  "@mastra/core": "^1.47.0",
34
34
  "@react-email/render": "^2.1.0",
35
35
  "nodemailer": "^7.0.13",
@@ -50,7 +50,7 @@
50
50
  "./package.json": "./package.json"
51
51
  }
52
52
  },
53
- "version": "0.6.57",
53
+ "version": "0.6.58",
54
54
  "types": "./lib/index.d.ts",
55
55
  "type": "module",
56
56
  "exports": {
package/src/transport.ts CHANGED
@@ -389,6 +389,17 @@ export interface SendEmailOptions {
389
389
  * with the HTML reads as phishing to spam filters.
390
390
  */
391
391
  text?: string;
392
+ /**
393
+ * Preheader text for the HTML part - the snippet shown beside the subject in an
394
+ * inbox list, and the body of the PUSH NOTIFICATION a mobile mail app posts.
395
+ * Defaults to the subject.
396
+ *
397
+ * Delivery-time rather than part of {@link EmailMessage} for the same reason as
398
+ * `text`: it is presentation the sending CODE chooses, not content a model
399
+ * composes. The one-time-code path sets it so the code itself rides in the
400
+ * notification, which is the only text iOS autofill gets to read.
401
+ */
402
+ preview?: string;
392
403
  }
393
404
 
394
405
  /**