@archont561/qgis-sdk 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,75 @@
1
+ import "./shared/chunk-wtv4vt4q.js";
2
+ import "./shared/chunk-7tgzmz0m.js";
3
+ import { OperationMap2, StreamMap2, QgisSdkCore2, QgisSdk2 } from "./shared/chunk-a33y575v.js";
4
+ import { Store2, OperationState2, Operation2, OperationStore2, StreamTerminalLike2, StreamHandleLike2, StreamHandlersLike2, Stream2, StreamState2, StreamStore2, FormOptions2, FormStore2, HostQueryStore2 } from "./shared/chunk-3zscfm3y.js";
5
+ import { QgisSdkError2 } from "./shared/chunk-pdj2fxjb.js";
6
+ /** A helper was used outside the shape it needs. */
7
+ declare class QgisSdkBridgeSvelteError extends QgisSdkError2 {
8
+ constructor(message: string);
9
+ }
10
+ /** The context key `setQgisSdk` writes and `getQgisSdk` reads. */
11
+ declare const QGIS_SDK_CONTEXT: unique symbol;
12
+ /**
13
+ * Share a `QgisSdk` with the component subtree; call during component
14
+ * initialisation. The SDK is shared as given and never closed here.
15
+ */
16
+ declare function setQgisSdk<T extends QgisSdkCore2<unknown, unknown>>(qgis: T): T;
17
+ /**
18
+ * The `QgisSdk` the nearest `setQgisSdk` shared.
19
+ *
20
+ * The type parameters name the generated `Operations` and `Streams`; they are
21
+ * the caller's claim, the same way the ancestor's argument was the page's.
22
+ */
23
+ declare function getQgisSdk<
24
+ O = OperationMap2,
25
+ S = StreamMap2
26
+ >(): QgisSdk2<O, S>;
27
+ /**
28
+ * An operation store whose in-flight call is aborted when the component is
29
+ * destroyed; read it as `$op` or pass it to {@link toRune}.
30
+ */
31
+ declare function operation<
32
+ I,
33
+ R
34
+ >(operation: Operation2<I, R>): OperationStore2<I, R>;
35
+ /**
36
+ * A stream store closed when the component is destroyed. Pass the input now
37
+ * or later with `store.setInput(...)`; `$effect(() => store.setInput(input))`
38
+ * follows a reactive one, by content.
39
+ */
40
+ declare function stream<
41
+ I,
42
+ E
43
+ >(open: Stream2<I, E>, input?: I | null, handlers?: StreamHandlersLike2<E>): StreamStore2<I, E>;
44
+ type RequestOf<
45
+ O,
46
+ K extends keyof O
47
+ > = O[K] extends {
48
+ readonly request: infer Req;
49
+ } ? Req : never;
50
+ type ResultOf<
51
+ O,
52
+ K extends keyof O
53
+ > = O[K] extends {
54
+ readonly result: infer Res;
55
+ } ? Res : never;
56
+ /**
57
+ * The form of one declared action, disposed with the component: render
58
+ * `form.fields`, bind `$form.values`, call `form.submit()`.
59
+ */
60
+ declare function form<
61
+ O,
62
+ K extends keyof O & string
63
+ >(qgis: QgisSdkCore2<O, unknown>, id: K, options?: FormOptions2): FormStore2<RequestOf<O, K> & object, ResultOf<O, K>>;
64
+ /**
65
+ * A host query store refreshed now (unless `auto` is `false`) and aborted
66
+ * when the component is destroyed: `hostQuery(layersQuery(qgis))`.
67
+ */
68
+ declare function hostQuery<T>(store: HostQueryStore2<T>, options?: {
69
+ readonly auto?: boolean;
70
+ }): HostQueryStore2<T>;
71
+ /** A runes-friendly view of any store: `const op = toRune(store); op.current`. */
72
+ declare function toRune<T>(store: Store2<T>): {
73
+ readonly current: T;
74
+ };
75
+ export { Operation2 as Operation, OperationState2 as OperationState, QGIS_SDK_CONTEXT, QgisSdkBridgeSvelteError, Stream2 as Stream, StreamHandleLike2 as StreamHandleLike, StreamHandlersLike2 as StreamHandlersLike, StreamState2 as StreamState, StreamTerminalLike2 as StreamTerminalLike, form, getQgisSdk, hostQuery, operation, setQgisSdk, stream, toRune };
package/dist/svelte.js ADDED
@@ -0,0 +1,70 @@
1
+ import"./shared/chunk-8gawbn19.js";
2
+ import {
3
+ OperationStore2,
4
+ StreamStore2,
5
+ FormStore2
6
+ } from "./shared/chunk-t1vpt5yq.js";
7
+ import {
8
+ QgisSdkError2
9
+ } from "./shared/chunk-2hwva3a3.js";
10
+
11
+ // src/svelte.ts
12
+ import { getContext, onDestroy, setContext } from "svelte";
13
+ import { fromStore } from "svelte/store";
14
+ class QgisSdkBridgeSvelteError extends QgisSdkError2 {
15
+ constructor(message) {
16
+ super(message, "svelte_binding");
17
+ }
18
+ }
19
+ var QGIS_SDK_CONTEXT = Symbol("qgis-sdk");
20
+ function setQgisSdk(qgis) {
21
+ setContext(QGIS_SDK_CONTEXT, qgis);
22
+ return qgis;
23
+ }
24
+ function getQgisSdk() {
25
+ const qgis = getContext(QGIS_SDK_CONTEXT);
26
+ if (qgis === undefined) {
27
+ throw new QgisSdkBridgeSvelteError("getQgisSdk needs setQgisSdk in an ancestor component");
28
+ }
29
+ return qgis;
30
+ }
31
+ function operation(operation) {
32
+ const store = new OperationStore2(operation);
33
+ onDestroy(store.abort);
34
+ return store;
35
+ }
36
+ function stream(open, input = null, handlers = {}) {
37
+ const store = new StreamStore2(open, handlers);
38
+ store.setInput(input);
39
+ onDestroy(store.close);
40
+ return store;
41
+ }
42
+ function form(qgis, id, options) {
43
+ const store = new FormStore2(qgis, id, options);
44
+ onDestroy(() => store.dispose());
45
+ return store;
46
+ }
47
+ function hostQuery(store, options = {}) {
48
+ if (options.auto !== false) {
49
+ store.refresh();
50
+ }
51
+ onDestroy(store.abort);
52
+ return store;
53
+ }
54
+ function toRune(store) {
55
+ return fromStore(store);
56
+ }
57
+ export {
58
+ QGIS_SDK_CONTEXT,
59
+ QgisSdkBridgeSvelteError,
60
+ form,
61
+ getQgisSdk,
62
+ hostQuery,
63
+ operation,
64
+ setQgisSdk,
65
+ stream,
66
+ toRune
67
+ };
68
+
69
+ //# debugId=A88CE88B3B7681A364756E2164756E21
70
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3N2ZWx0ZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvKipcbiAqIFRoaW4gU3ZlbHRlIDUgYmluZGluZ3Mgb3ZlciB0aGUgc3RvcmUgY29yZSAoZGVjaXNpb24tNDcpLlxuICpcbiAqIFRoaXMgZW50cnkgcG9pbnQgaXMgb3B0aW9uYWwgYW5kIGlzIHRoZSBvbmx5IG9uZSB0aGF0IGltcG9ydHMgU3ZlbHRlLiBUaGVcbiAqIHN0b3JlcyBpbiBgLi9zdG9yZXNgIGFscmVhZHkgc2F0aXNmeSBTdmVsdGUncyBzdG9yZSBjb250cmFjdCAtIGBzdWJzY3JpYmVgXG4gKiBjYWxscyBhdCBvbmNlIGFuZCBvbiBldmVyeSBjaGFuZ2UgYW5kIHJldHVybnMgdGhlIHVuc3Vic2NyaWJlciAtIHNvIGFcbiAqIGNvbXBvbmVudCB3cml0ZXMgYCRzdGF0ZWAgb3ZlciBhbnkgb2YgdGhlbSB3aXRoIG5vIHdyYXBwZXIuIFdoYXQgdGhpc1xuICogbW9kdWxlIGFkZHMgaXMgdGhlIGxpdHRsZSBTdmVsdGUgYXNrcyBmb3IgYXJvdW5kIHRoYXQ6XG4gKlxuICogLSBgc2V0UWdpc1Nka2AvYGdldFFnaXNTZGtgLCBvbmUgYFFnaXNTZGtgIHRocm91Z2ggY29tcG9uZW50IGNvbnRleHQ7XG4gKiAtIGZhY3RvcmllcyB0aGF0IHRpZSBhIHN0b3JlJ3MgbGlmZXRpbWUgdG8gdGhlIGNvbXBvbmVudCB0aGF0IG1hZGUgaXRcbiAqICAgKGBvbkRlc3Ryb3lgIGFib3J0cyBhIGNhbGwsIGNsb3NlcyBhIHN0cmVhbSwgZGlzcG9zZXMgYSBmb3JtKSwgd2hpY2ggYVxuICogICBiYXJlIGBuZXcgT3BlcmF0aW9uU3RvcmUoLi4uKWAgaW4gYSBgPHNjcmlwdD5gIHdvdWxkIG5vdDtcbiAqIC0gYHRvUnVuZWAsIGEgYCRzdGF0ZWAtZnJpZW5kbHkgYHsgY3VycmVudCB9YCBvdmVyIGFueSBzdG9yZSwgdGhyb3VnaFxuICogICBgZnJvbVN0b3JlYCBvZiBgc3ZlbHRlL3N0b3JlYCwgZm9yIGEgY29tcG9uZW50IHRoYXQgcHJlZmVycyBydW5lcy5cbiAqL1xuXG5pbXBvcnQgeyBnZXRDb250ZXh0LCBvbkRlc3Ryb3ksIHNldENvbnRleHQgfSBmcm9tIFwic3ZlbHRlXCI7XG5pbXBvcnQgeyBmcm9tU3RvcmUgfSBmcm9tIFwic3ZlbHRlL3N0b3JlXCI7XG5pbXBvcnQgeyBRZ2lzU2RrRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgUWdpc1NkaywgUWdpc1Nka0NvcmUgfSBmcm9tIFwiLi9xZ2lzLXNka1wiO1xuaW1wb3J0IHR5cGUgeyBPcGVyYXRpb25NYXAsIFN0cmVhbU1hcCB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHtcblx0dHlwZSBGb3JtT3B0aW9ucyxcblx0Rm9ybVN0b3JlLFxuXHR0eXBlIEhvc3RRdWVyeVN0b3JlLFxuXHR0eXBlIE9wZXJhdGlvbixcblx0T3BlcmF0aW9uU3RvcmUsXG5cdHR5cGUgU3RvcmUsXG5cdHR5cGUgU3RyZWFtLFxuXHR0eXBlIFN0cmVhbUhhbmRsZXJzTGlrZSxcblx0U3RyZWFtU3RvcmUsXG59IGZyb20gXCIuL3N0b3Jlc1wiO1xuXG5leHBvcnQgdHlwZSB7XG5cdE9wZXJhdGlvbixcblx0T3BlcmF0aW9uU3RhdGUsXG5cdFN0cmVhbSxcblx0U3RyZWFtSGFuZGxlTGlrZSxcblx0U3RyZWFtSGFuZGxlcnNMaWtlLFxuXHRTdHJlYW1TdGF0ZSxcblx0U3RyZWFtVGVybWluYWxMaWtlLFxufSBmcm9tIFwiLi9zdG9yZXNcIjtcblxuLyoqIEEgaGVscGVyIHdhcyB1c2VkIG91dHNpZGUgdGhlIHNoYXBlIGl0IG5lZWRzLiAqL1xuZXhwb3J0IGNsYXNzIFFnaXNTZGtCcmlkZ2VTdmVsdGVFcnJvciBleHRlbmRzIFFnaXNTZGtFcnJvciB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcblx0XHRzdXBlcihtZXNzYWdlLCBcInN2ZWx0ZV9iaW5kaW5nXCIpO1xuXHR9XG59XG5cbi8qKiBUaGUgY29udGV4dCBrZXkgYHNldFFnaXNTZGtgIHdyaXRlcyBhbmQgYGdldFFnaXNTZGtgIHJlYWRzLiAqL1xuZXhwb3J0IGNvbnN0IFFHSVNfU0RLX0NPTlRFWFQ6IHVuaXF1ZSBzeW1ib2wgPSBTeW1ib2woXCJxZ2lzLXNka1wiKTtcblxuLyoqXG4gKiBTaGFyZSBhIGBRZ2lzU2RrYCB3aXRoIHRoZSBjb21wb25lbnQgc3VidHJlZTsgY2FsbCBkdXJpbmcgY29tcG9uZW50XG4gKiBpbml0aWFsaXNhdGlvbi4gVGhlIFNESyBpcyBzaGFyZWQgYXMgZ2l2ZW4gYW5kIG5ldmVyIGNsb3NlZCBoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UWdpc1NkazxUIGV4dGVuZHMgUWdpc1Nka0NvcmU8dW5rbm93biwgdW5rbm93bj4+KFxuXHRxZ2lzOiBULFxuKTogVCB7XG5cdHNldENvbnRleHQoUUdJU19TREtfQ09OVEVYVCwgcWdpcyk7XG5cdHJldHVybiBxZ2lzO1xufVxuXG4vKipcbiAqIFRoZSBgUWdpc1Nka2AgdGhlIG5lYXJlc3QgYHNldFFnaXNTZGtgIHNoYXJlZC5cbiAqXG4gKiBUaGUgdHlwZSBwYXJhbWV0ZXJzIG5hbWUgdGhlIGdlbmVyYXRlZCBgT3BlcmF0aW9uc2AgYW5kIGBTdHJlYW1zYDsgdGhleSBhcmVcbiAqIHRoZSBjYWxsZXIncyBjbGFpbSwgdGhlIHNhbWUgd2F5IHRoZSBhbmNlc3RvcidzIGFyZ3VtZW50IHdhcyB0aGUgcGFnZSdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UWdpc1NkazxPID0gT3BlcmF0aW9uTWFwLCBTID0gU3RyZWFtTWFwPigpOiBRZ2lzU2RrPE8sIFM+IHtcblx0Y29uc3QgcWdpcyA9IGdldENvbnRleHQ8UWdpc1Nka0NvcmU8dW5rbm93biwgdW5rbm93bj4gfCB1bmRlZmluZWQ+KFxuXHRcdFFHSVNfU0RLX0NPTlRFWFQsXG5cdCk7XG5cdGlmIChxZ2lzID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgUWdpc1Nka0JyaWRnZVN2ZWx0ZUVycm9yKFxuXHRcdFx0XCJnZXRRZ2lzU2RrIG5lZWRzIHNldFFnaXNTZGsgaW4gYW4gYW5jZXN0b3IgY29tcG9uZW50XCIsXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gcWdpcyBhcyB1bmtub3duIGFzIFFnaXNTZGs8TywgUz47XG59XG5cbi8qKlxuICogQW4gb3BlcmF0aW9uIHN0b3JlIHdob3NlIGluLWZsaWdodCBjYWxsIGlzIGFib3J0ZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzXG4gKiBkZXN0cm95ZWQ7IHJlYWQgaXQgYXMgYCRvcGAgb3IgcGFzcyBpdCB0byB7QGxpbmsgdG9SdW5lfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZXJhdGlvbjxJLCBSPihcblx0b3BlcmF0aW9uOiBPcGVyYXRpb248SSwgUj4sXG4pOiBPcGVyYXRpb25TdG9yZTxJLCBSPiB7XG5cdGNvbnN0IHN0b3JlID0gbmV3IE9wZXJhdGlvblN0b3JlKG9wZXJhdGlvbik7XG5cdG9uRGVzdHJveShzdG9yZS5hYm9ydCk7XG5cdHJldHVybiBzdG9yZTtcbn1cblxuLyoqXG4gKiBBIHN0cmVhbSBzdG9yZSBjbG9zZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC4gUGFzcyB0aGUgaW5wdXQgbm93XG4gKiBvciBsYXRlciB3aXRoIGBzdG9yZS5zZXRJbnB1dCguLi4pYDsgYCRlZmZlY3QoKCkgPT4gc3RvcmUuc2V0SW5wdXQoaW5wdXQpKWBcbiAqIGZvbGxvd3MgYSByZWFjdGl2ZSBvbmUsIGJ5IGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW08SSwgRT4oXG5cdG9wZW46IFN0cmVhbTxJLCBFPixcblx0aW5wdXQ6IEkgfCBudWxsID0gbnVsbCxcblx0aGFuZGxlcnM6IFN0cmVhbUhhbmRsZXJzTGlrZTxFPiA9IHt9LFxuKTogU3RyZWFtU3RvcmU8SSwgRT4ge1xuXHRjb25zdCBzdG9yZSA9IG5ldyBTdHJlYW1TdG9yZShvcGVuLCBoYW5kbGVycyk7XG5cdHN0b3JlLnNldElucHV0KGlucHV0KTtcblx0b25EZXN0cm95KHN0b3JlLmNsb3NlKTtcblx0cmV0dXJuIHN0b3JlO1xufVxuXG50eXBlIFJlcXVlc3RPZjxPLCBLIGV4dGVuZHMga2V5b2YgTz4gPSBPW0tdIGV4dGVuZHMge1xuXHRyZWFkb25seSByZXF1ZXN0OiBpbmZlciBSZXE7XG59XG5cdD8gUmVxXG5cdDogbmV2ZXI7XG50eXBlIFJlc3VsdE9mPE8sIEsgZXh0ZW5kcyBrZXlvZiBPPiA9IE9bS10gZXh0ZW5kcyB7XG5cdHJlYWRvbmx5IHJlc3VsdDogaW5mZXIgUmVzO1xufVxuXHQ/IFJlc1xuXHQ6IG5ldmVyO1xuXG4vKipcbiAqIFRoZSBmb3JtIG9mIG9uZSBkZWNsYXJlZCBhY3Rpb24sIGRpc3Bvc2VkIHdpdGggdGhlIGNvbXBvbmVudDogcmVuZGVyXG4gKiBgZm9ybS5maWVsZHNgLCBiaW5kIGAkZm9ybS52YWx1ZXNgLCBjYWxsIGBmb3JtLnN1Ym1pdCgpYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm08TywgSyBleHRlbmRzIGtleW9mIE8gJiBzdHJpbmc+KFxuXHRxZ2lzOiBRZ2lzU2RrQ29yZTxPLCB1bmtub3duPixcblx0aWQ6IEssXG5cdG9wdGlvbnM/OiBGb3JtT3B0aW9ucyxcbik6IEZvcm1TdG9yZTxSZXF1ZXN0T2Y8TywgSz4gJiBvYmplY3QsIFJlc3VsdE9mPE8sIEs+PiB7XG5cdGNvbnN0IHN0b3JlID0gbmV3IEZvcm1TdG9yZTxSZXF1ZXN0T2Y8TywgSz4gJiBvYmplY3QsIFJlc3VsdE9mPE8sIEs+Pihcblx0XHRxZ2lzIGFzIFFnaXNTZGtDb3JlPHVua25vd24sIHVua25vd24+LFxuXHRcdGlkLFxuXHRcdG9wdGlvbnMsXG5cdCk7XG5cdG9uRGVzdHJveSgoKSA9PiBzdG9yZS5kaXNwb3NlKCkpO1xuXHRyZXR1cm4gc3RvcmU7XG59XG5cbi8qKlxuICogQSBob3N0IHF1ZXJ5IHN0b3JlIHJlZnJlc2hlZCBub3cgKHVubGVzcyBgYXV0b2AgaXMgYGZhbHNlYCkgYW5kIGFib3J0ZWRcbiAqIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQ6IGBob3N0UXVlcnkobGF5ZXJzUXVlcnkocWdpcykpYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhvc3RRdWVyeTxUPihcblx0c3RvcmU6IEhvc3RRdWVyeVN0b3JlPFQ+LFxuXHRvcHRpb25zOiB7IHJlYWRvbmx5IGF1dG8/OiBib29sZWFuIH0gPSB7fSxcbik6IEhvc3RRdWVyeVN0b3JlPFQ+IHtcblx0aWYgKG9wdGlvbnMuYXV0byAhPT0gZmFsc2UpIHtcblx0XHR2b2lkIHN0b3JlLnJlZnJlc2goKTtcblx0fVxuXHRvbkRlc3Ryb3koc3RvcmUuYWJvcnQpO1xuXHRyZXR1cm4gc3RvcmU7XG59XG5cbi8qKiBBIHJ1bmVzLWZyaWVuZGx5IHZpZXcgb2YgYW55IHN0b3JlOiBgY29uc3Qgb3AgPSB0b1J1bmUoc3RvcmUpOyBvcC5jdXJyZW50YC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1J1bmU8VD4oc3RvcmU6IFN0b3JlPFQ+KTogeyByZWFkb25seSBjdXJyZW50OiBUIH0ge1xuXHRyZXR1cm4gZnJvbVN0b3JlKHN0b3JlKTtcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7O0FBaUJBO0FBQ0E7QUEyQk8sTUFBTSxpQ0FBaUMsY0FBYTtBQUFBLEVBQ25ELFdBQVcsQ0FBQyxTQUFpQjtBQUFBLElBQ25DLE1BQU0sU0FBUyxnQkFBZ0I7QUFBQTtBQUVqQztBQUdPLElBQU0sbUJBQWtDLE9BQU8sVUFBVTtBQU16RCxTQUFTLFVBQW1ELENBQ2xFLE1BQ0k7QUFBQSxFQUNKLFdBQVcsa0JBQWtCLElBQUk7QUFBQSxFQUNqQyxPQUFPO0FBQUE7QUFTRCxTQUFTLFVBQTJDLEdBQWtCO0FBQUEsRUFDNUUsTUFBTSxPQUFPLFdBQ1osZ0JBQ0Q7QUFBQSxFQUNBLElBQUksU0FBUyxXQUFXO0FBQUEsSUFDdkIsTUFBTSxJQUFJLHlCQUNULHNEQUNEO0FBQUEsRUFDRDtBQUFBLEVBQ0EsT0FBTztBQUFBO0FBT0QsU0FBUyxTQUFlLENBQzlCLFdBQ3VCO0FBQUEsRUFDdkIsTUFBTSxRQUFRLElBQUksZ0JBQWUsU0FBUztBQUFBLEVBQzFDLFVBQVUsTUFBTSxLQUFLO0FBQUEsRUFDckIsT0FBTztBQUFBO0FBUUQsU0FBUyxNQUFZLENBQzNCLE1BQ0EsUUFBa0IsTUFDbEIsV0FBa0MsQ0FBQyxHQUNmO0FBQUEsRUFDcEIsTUFBTSxRQUFRLElBQUksYUFBWSxNQUFNLFFBQVE7QUFBQSxFQUM1QyxNQUFNLFNBQVMsS0FBSztBQUFBLEVBQ3BCLFVBQVUsTUFBTSxLQUFLO0FBQUEsRUFDckIsT0FBTztBQUFBO0FBa0JELFNBQVMsSUFBbUMsQ0FDbEQsTUFDQSxJQUNBLFNBQ3NEO0FBQUEsRUFDdEQsTUFBTSxRQUFRLElBQUksV0FDakIsTUFDQSxJQUNBLE9BQ0Q7QUFBQSxFQUNBLFVBQVUsTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUFBLEVBQy9CLE9BQU87QUFBQTtBQU9ELFNBQVMsU0FBWSxDQUMzQixPQUNBLFVBQXVDLENBQUMsR0FDcEI7QUFBQSxFQUNwQixJQUFJLFFBQVEsU0FBUyxPQUFPO0FBQUEsSUFDdEIsTUFBTSxRQUFRO0FBQUEsRUFDcEI7QUFBQSxFQUNBLFVBQVUsTUFBTSxLQUFLO0FBQUEsRUFDckIsT0FBTztBQUFBO0FBSUQsU0FBUyxNQUFTLENBQUMsT0FBMEM7QUFBQSxFQUNuRSxPQUFPLFVBQVUsS0FBSztBQUFBOyIsCiAgImRlYnVnSWQiOiAiQTg4Q0U4OEIzQjc2ODFBMzY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
package/dist/testing.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { StreamEventKind2, BridgeStreamTerminal2, WireTransport2 } from "./shared/chunk-wtv4vt4q.js";
2
- import { HostOperationId2 } from "./shared/chunk-khemhx86.js";
3
- import { OperationShape2, StreamShape2, BridgeSchema2 } from "./shared/chunk-jjx14tgd.js";
2
+ import { HostOperationId2 } from "./shared/chunk-7tgzmz0m.js";
3
+ import { OperationShape2, StreamShape2, BridgeSchema2, QgisSdkHostTheme2 } from "./shared/chunk-a33y575v.js";
4
4
  import { QgisSdkError2 } from "./shared/chunk-pdj2fxjb.js";
5
5
  /** A scripted host failure, returned from an expectation's handler. */
6
6
  interface ScriptedFault {
@@ -55,11 +55,17 @@ interface HarnessOptions {
55
55
  /**
56
56
  * The host operation ids the scripted handshake advertises; every curated
57
57
  * id by default. A narrowed list is how a test proves a page respects
58
- * `qgis.host.granted` (TASK-66 AC #5). A call outside it is still answered
58
+ * `qgis.host.granted`. A call outside it is still answered
59
59
  * by whatever the test scripted - typically `fault("not_authorized", ...)` -
60
60
  * because that refusal is the host's, not the harness's.
61
61
  */
62
62
  readonly granted?: readonly HostOperationId2[];
63
+ /**
64
+ * The palette the scripted handshake carries as `theme`; none by default,
65
+ * which is what a page outside QGIS sees. The same shape the WebEngine
66
+ * adapter sends, so a test can prove a page takes the host's colours.
67
+ */
68
+ readonly theme?: QgisSdkHostTheme2;
63
69
  }
64
70
  /**
65
71
  * A test's script went wrong: an unmet or unexpected call, a leaked
package/dist/testing.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  HOST_SCHEMA_VERSION2,
3
3
  HOST_OPERATIONS2
4
- } from "./shared/chunk-vqyymknv.js";
4
+ } from "./shared/chunk-stre69mw.js";
5
5
  import {
6
6
  QgisSdkError2
7
7
  } from "./shared/chunk-2hwva3a3.js";
@@ -25,6 +25,7 @@ class QgisSdkBridgeHarnessError extends QgisSdkError2 {
25
25
 
26
26
  class Harness {
27
27
  granted;
28
+ theme;
28
29
  plugin;
29
30
  listenerSet = new Set;
30
31
  expectations = [];
@@ -37,6 +38,7 @@ class Harness {
37
38
  streamCounter = 0;
38
39
  constructor(options, plugin) {
39
40
  this.granted = Object.freeze([...options.granted ?? HOST_OPERATIONS2]);
41
+ this.theme = options.theme;
40
42
  this.plugin = plugin;
41
43
  }
42
44
  get calls() {
@@ -141,7 +143,8 @@ class Harness {
141
143
  operations: [...declared, ...this.granted].map((id) => ({
142
144
  id,
143
145
  title: id
144
- }))
146
+ })),
147
+ ...this.theme === undefined ? {} : { theme: this.theme }
145
148
  }
146
149
  });
147
150
  }
@@ -362,5 +365,5 @@ export {
362
365
  fault
363
366
  };
364
367
 
365
- //# debugId=A423121C49C80BCD64756E2164756E21
366
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3Rlc3RpbmcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLyoqXG4gKiBBbiBpbmplY3RlZCBwZXItY2xpZW50IGhhcm5lc3MgZm9yIHRoZSBicmlkZ2UgKFRBU0stMTgsIGRlY2lzaW9uLTIzKS5cbiAqXG4gKiBUaGUgaGFybmVzcyBpcyBhIHtAbGluayBXaXJlVHJhbnNwb3J0fTogYSBwYWdlJ3Mgb3duIGBCcmlkZ2VDbGllbnRgIHNwZWFrcyB0b1xuICogaXQgZXhhY3RseSBhcyBpdCB3b3VsZCB0byBhIFFXZWJDaGFubmVsLCBhbmQgYSB0ZXN0IHNjcmlwdHMgd2hhdCB0aGUgaG9zdFxuICogYW5zd2VycyAtIHR5cGVkIHJlcGxpZXMsIGZhdWx0cywgc2lsZW5jZSwgc3RyZWFtIGV2ZW50cywgdGVybWluYWxzLCBnYXBzIC1cbiAqIHdpdGhvdXQgdG91Y2hpbmcgYSBicm93c2VyIGdsb2JhbCBvciBhIHJ1bm5pbmcgUUdJUy4gVHdvIGhhcm5lc3NlcyBhcmUgdHdvXG4gKiBob3N0cywgc28gaXNvbGF0aW9uIGJldHdlZW4gY2xpZW50cyBpcyBhIGZhY3QgYSB0ZXN0IGNhbiBwcm92ZS5cbiAqXG4gKiBXaGF0IGl0IHByb3ZlcyBpcyBib3VuZGVkLiBBIGdyZWVuIHRlc3QgaGVyZSBzYXlzIHRoZSBwYWdlIGhhbmRsZXMgdGhlXG4gKiBmcmFtZXMgYSBob3N0ICpjb3VsZCogc2VuZDsgaXQgc2F5cyBub3RoaW5nIGFib3V0IHdoYXQgYSBRV2ViRW5naW5lVmlldyBvclxuICogYSByZWFsIGhvc3QgZG9lcy4gVGhhdCBldmlkZW5jZSBsaXZlcyBpbiB0aGUgUHl0aG9uIHN1aXRlIGFuZCBpbiB0aGVcbiAqIHF1YWxpZmljYXRpb24gaGFybmVzc2VzIHJlY29yZGVkIGluIGRvYy0xNC4gS2VlcCB0aGUgdHdvIGFwYXJ0IGluIHJlcG9ydHMuXG4gKlxuICogRXZlcnl0aGluZyB0aGUgaGFybmVzcyBzZW5kcyBpcyBkZWxpdmVyZWQgYXN5bmNocm9ub3VzbHksIG9uZSBtZXNzYWdlIHBlclxuICogbWljcm90YXNrLCBzbyBhIHJlcGx5IG5ldmVyIHJlLWVudGVycyB0aGUgY2xpZW50IGluc2lkZSBpdHMgb3duIGBzZW5kYC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG5cdEJyaWRnZVN0cmVhbVRlcm1pbmFsLFxuXHRTdHJlYW1FdmVudEtpbmQsXG5cdFdpcmVUcmFuc3BvcnQsXG59IGZyb20gXCIuL2JyaWRnZVwiO1xuaW1wb3J0IHsgUWdpc1Nka0Vycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQge1xuXHRIT1NUX09QRVJBVElPTlMsXG5cdEhPU1RfU0NIRU1BX1ZFUlNJT04sXG5cdHR5cGUgSG9zdE9wZXJhdGlvbklkLFxufSBmcm9tIFwiLi9nZW5lcmF0ZWQvaG9zdFwiO1xuaW1wb3J0IHR5cGUgeyBCcmlkZ2VTY2hlbWEsIE9wZXJhdGlvblNoYXBlLCBTdHJlYW1TaGFwZSB9IGZyb20gXCIuL3NjaGVtYVwiO1xuXG5jb25zdCBQUk9UT0NPTCA9IDE7XG5jb25zdCBTVUJTQ1JJUFRJT05fQ0FQQUNJVFkgPSA2NDtcblxuLyoqIEEgc2NyaXB0ZWQgaG9zdCBmYWlsdXJlLCByZXR1cm5lZCBmcm9tIGFuIGV4cGVjdGF0aW9uJ3MgaGFuZGxlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NyaXB0ZWRGYXVsdCB7XG5cdHJlYWRvbmx5IGZhdWx0OiB7IHJlYWRvbmx5IGNvZGU6IHN0cmluZzsgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nIH07XG59XG5cbi8qKiBTY3JpcHQgYSBmYWlsdXJlIHJlcGx5IHdpdGggdGhpcyBjb2RlIGFuZCBtZXNzYWdlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhdWx0KGNvZGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogU2NyaXB0ZWRGYXVsdCB7XG5cdHJldHVybiBPYmplY3QuZnJlZXplKHsgZmF1bHQ6IE9iamVjdC5mcmVlemUoeyBjb2RlLCBtZXNzYWdlIH0pIH0pO1xufVxuXG5mdW5jdGlvbiBpc0ZhdWx0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU2NyaXB0ZWRGYXVsdCB7XG5cdHJldHVybiAoXG5cdFx0dHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG5cdFx0dmFsdWUgIT09IG51bGwgJiZcblx0XHRcImZhdWx0XCIgaW4gdmFsdWUgJiZcblx0XHR0eXBlb2YgKHZhbHVlIGFzIFNjcmlwdGVkRmF1bHQpLmZhdWx0ID09PSBcIm9iamVjdFwiXG5cdCk7XG59XG5cbi8qKiBSZXR1cm4gdGhpcyBmcm9tIGEgaGFuZGxlciB0byBuZXZlciBhbnN3ZXIsIHNvIHRoZSBjbGllbnQncyB0aW1lb3V0IHNwZWFrcy4gKi9cbmV4cG9ydCBjb25zdCBTSUxFTkNFOiB1bmlxdWUgc3ltYm9sID0gU3ltYm9sKFwicWdpcy1zZGstaGFybmVzcy1zaWxlbmNlXCIpO1xuXG4vKiogQSBzdWJzY3JpcHRpb24gdGhlIHNjcmlwdCB0dXJucyBkb3duOiBhIGZhdWx0IHJlcGx5LCBvciBubyByZXBseSBhdCBhbGwuICovXG5leHBvcnQgdHlwZSBTY3JpcHRlZFJlZnVzYWwgPSBTY3JpcHRlZEZhdWx0IHwgdHlwZW9mIFNJTEVOQ0U7XG5cbi8qKlxuICogQSBzdWJzY3JpYmUgZXhwZWN0YXRpb24ncyBzY3JpcHQ6IGVtaXQgb24gYHN0cmVhbWAgbm93IG9yIGxhdGVyLCBvciByZXR1cm5cbiAqIGEgcmVmdXNhbCBpbnN0ZWFkIG9mIGFja25vd2xlZGdpbmcuXG4gKi9cbmV4cG9ydCB0eXBlIFN1YnNjcmliZVNjcmlwdDxSZXEgZXh0ZW5kcyBvYmplY3Q+ID0gKFxuXHRwYXlsb2FkOiBSZXEsXG5cdHN0cmVhbTogU2NyaXB0ZWRTdHJlYW0sXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9Db25mdXNpbmdWb2lkVHlwZTogYSBzY3JpcHQgdGhhdCBvbmx5IGVtaXRzIHJldHVybnMgbm90aGluZ1xuKSA9PiBTY3JpcHRlZFJlZnVzYWwgfCB2b2lkO1xuXG4vKiogV2hhdCBhbiBpbnZva2UgZXhwZWN0YXRpb24gbWF5IGFuc3dlciB3aXRoLiAqL1xuZXhwb3J0IHR5cGUgU2NyaXB0ZWRSZXBseTxSZXM+ID1cblx0fCBSZXNcblx0fCBTY3JpcHRlZEZhdWx0XG5cdHwgdHlwZW9mIFNJTEVOQ0Vcblx0fCBQcm9taXNlPFJlcyB8IFNjcmlwdGVkRmF1bHQgfCB0eXBlb2YgU0lMRU5DRT47XG5cbi8qKiBBIG1lc3NhZ2UgdGhlIGNsaWVudCBzZW50LCBhcyB0aGUgaGFybmVzcyByZWNvcmRlZCBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkZWRDYWxsIHtcblx0cmVhZG9ubHkgY2FsbElkOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGtpbmQ6IFwiaW52b2tlXCIgfCBcInN1YnNjcmliZVwiIHwgXCJ1bnN1YnNjcmliZVwiIHwgXCJoYW5kc2hha2VcIjtcblx0LyoqIEVtcHR5IGZvciBhIGhhbmRzaGFrZSwgd2hpY2ggbmFtZXMgbm8gb3BlcmF0aW9uLiAqL1xuXHRyZWFkb25seSBvcGVyYXRpb246IHN0cmluZztcblx0cmVhZG9ubHkgcGF5bG9hZD86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcblx0cmVhZG9ubHkgc3Vic2NyaXB0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT25lIHNjcmlwdGVkIHN1YnNjcmlwdGlvbi4gRnJhbWVzIGNhcnJ5IHRoZSBzZXF1ZW5jZSB0aGUga2VybmVsIGNoZWNrcywgc29cbiAqIGBza2lwYCBpcyB0aGUgb25lIHdheSB0byBzY3JpcHQgYSBnYXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NyaXB0ZWRTdHJlYW0ge1xuXHRyZWFkb25seSBpZDogc3RyaW5nO1xuXHRyZWFkb25seSBvcGVyYXRpb246IHN0cmluZztcblx0LyoqIGBmYWxzZWAgb25jZSB0aGUgaG9zdCBlbmRlZCBpdCBvciB0aGUgcGFnZSBjbG9zZWQgaXQuICovXG5cdHJlYWRvbmx5IG9wZW46IGJvb2xlYW47XG5cdGVtaXQoa2luZDogU3RyZWFtRXZlbnRLaW5kLCBwYXlsb2FkOiB1bmtub3duKTogdm9pZDtcblx0ZW5kKHRlcm1pbmFsOiBCcmlkZ2VTdHJlYW1UZXJtaW5hbCk6IHZvaWQ7XG5cdC8qKiBBZHZhbmNlIHRoZSBzZXF1ZW5jZSB3aXRob3V0IHNlbmRpbmcsIHNvIHRoZSBuZXh0IGZyYW1lIGlzIGEgZ2FwLiAqL1xuXHRza2lwKGZyYW1lczogbnVtYmVyKTogdm9pZDtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIGEgc3Vic2NyaWJlIGV4cGVjdGF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpYmVPcHRpb25zIHtcblx0LyoqIERlbGF5IHRoZSBhY2tub3dsZWRnZW1lbnQgdW50aWwgdGhpcyBwcm9taXNlIHNldHRsZXMuICovXG5cdHJlYWRvbmx5IGFjaz86ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgY3JlYXRlQnJpZGdlSGFybmVzc30uICovXG5leHBvcnQgaW50ZXJmYWNlIEhhcm5lc3NPcHRpb25zIHtcblx0LyoqXG5cdCAqIFRoZSBob3N0IG9wZXJhdGlvbiBpZHMgdGhlIHNjcmlwdGVkIGhhbmRzaGFrZSBhZHZlcnRpc2VzOyBldmVyeSBjdXJhdGVkXG5cdCAqIGlkIGJ5IGRlZmF1bHQuIEEgbmFycm93ZWQgbGlzdCBpcyBob3cgYSB0ZXN0IHByb3ZlcyBhIHBhZ2UgcmVzcGVjdHNcblx0ICogYHFnaXMuaG9zdC5ncmFudGVkYCAoVEFTSy02NiBBQyAjNSkuIEEgY2FsbCBvdXRzaWRlIGl0IGlzIHN0aWxsIGFuc3dlcmVkXG5cdCAqIGJ5IHdoYXRldmVyIHRoZSB0ZXN0IHNjcmlwdGVkIC0gdHlwaWNhbGx5IGBmYXVsdChcIm5vdF9hdXRob3JpemVkXCIsIC4uLilgIC1cblx0ICogYmVjYXVzZSB0aGF0IHJlZnVzYWwgaXMgdGhlIGhvc3Qncywgbm90IHRoZSBoYXJuZXNzJ3MuXG5cdCAqL1xuXHRyZWFkb25seSBncmFudGVkPzogcmVhZG9ubHkgSG9zdE9wZXJhdGlvbklkW107XG59XG5cbi8qKlxuICogQSB0ZXN0J3Mgc2NyaXB0IHdlbnQgd3Jvbmc6IGFuIHVubWV0IG9yIHVuZXhwZWN0ZWQgY2FsbCwgYSBsZWFrZWRcbiAqIHN1YnNjcmlwdGlvbiwgYSBoYW5kbGVyIHRoYXQgdGhyZXcsIG9yIGFuIGVudmVsb3BlIHRoYXQgaXMgbm90IHByb3RvY29sIDEuXG4gKi9cbmV4cG9ydCBjbGFzcyBRZ2lzU2RrQnJpZGdlSGFybmVzc0Vycm9yIGV4dGVuZHMgUWdpc1Nka0Vycm9yIHtcblx0cHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuXHRcdHN1cGVyKG1lc3NhZ2UsIFwiaGFybmVzc19lcnJvclwiKTtcblx0fVxufVxuXG5pbnRlcmZhY2UgSW52b2tlRXhwZWN0YXRpb24ge1xuXHRyZWFkb25seSBraW5kOiBcImludm9rZVwiO1xuXHRyZWFkb25seSBvcGVyYXRpb246IHN0cmluZztcblx0cmVhZG9ubHkgaGFuZGxlcjogKHBheWxvYWQ6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PikgPT4gdW5rbm93bjtcbn1cblxuaW50ZXJmYWNlIFN1YnNjcmliZUV4cGVjdGF0aW9uIHtcblx0cmVhZG9ubHkga2luZDogXCJzdWJzY3JpYmVcIjtcblx0cmVhZG9ubHkgb3BlcmF0aW9uOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHNjcmlwdDogU3Vic2NyaWJlU2NyaXB0PFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj47XG5cdHJlYWRvbmx5IG9wdGlvbnM6IFN1YnNjcmliZU9wdGlvbnM7XG59XG5cbnR5cGUgRXhwZWN0YXRpb24gPSBJbnZva2VFeHBlY3RhdGlvbiB8IFN1YnNjcmliZUV4cGVjdGF0aW9uO1xuXG5pbnRlcmZhY2UgT3BlblN0cmVhbSB7XG5cdHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cdHJlYWRvbmx5IG9wZXJhdGlvbjogc3RyaW5nO1xuXHRzZXE6IG51bWJlcjtcblx0b3BlbjogYm9vbGVhbjtcbn1cblxuLyoqIFRoZSBoYXJuZXNzIGEgdGVzdCBob2xkczsgYWxzbyB0aGUgdHJhbnNwb3J0IGl0cyBjbGllbnQgaXMgYnVpbHQgb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEJyaWRnZUhhcm5lc3M8T3AgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+XG5cdGV4dGVuZHMgV2lyZVRyYW5zcG9ydCB7XG5cdC8qKiBFdmVyeSBtZXNzYWdlIHRoZSBjbGllbnQgc2VudCwgaW4gb3JkZXIuICovXG5cdHJlYWRvbmx5IGNhbGxzOiByZWFkb25seSBSZWNvcmRlZENhbGxbXTtcblx0LyoqIENhbGxzIG5vIGV4cGVjdGF0aW9uIGNvdmVyZWQ7IGVhY2ggd2FzIGFuc3dlcmVkIGB1bmV4cGVjdGVkX2NhbGxgLiAqL1xuXHRyZWFkb25seSB1bmV4cGVjdGVkOiByZWFkb25seSBSZWNvcmRlZENhbGxbXTtcblx0LyoqIFN1YnNjcmlwdGlvbnMgbmVpdGhlciBlbmRlZCBieSBhIHNjcmlwdCBub3IgY2xvc2VkIGJ5IHRoZSBwYWdlLiAqL1xuXHRyZWFkb25seSBvcGVuU3Vic2NyaXB0aW9uczogcmVhZG9ubHkgc3RyaW5nW107XG5cdC8qKiBDbGllbnRzIGN1cnJlbnRseSBhdHRhY2hlZC4gKi9cblx0cmVhZG9ubHkgbGlzdGVuZXJzOiBudW1iZXI7XG5cdC8qKiBBbnN3ZXIgdGhlIG5leHQgYG9wZXJhdGlvbmAgY2FsbCB3aXRoIHdoYXQgYGhhbmRsZXJgIHJldHVybnMuICovXG5cdGV4cGVjdEludm9rZTxcblx0XHRSZXEgZXh0ZW5kcyBvYmplY3QgPSBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG5cdFx0UmVzID0gdW5rbm93bixcblx0PihvcGVyYXRpb246IE9wLCBoYW5kbGVyOiAocGF5bG9hZDogUmVxKSA9PiBTY3JpcHRlZFJlcGx5PFJlcz4pOiB2b2lkO1xuXHQvKipcblx0ICogQWNrbm93bGVkZ2UgdGhlIG5leHQgYG9wZXJhdGlvbmAgc3Vic2NyaXB0aW9uIGFuZCBoYW5kIGBzY3JpcHRgIHRoZVxuXHQgKiBzdHJlYW07IHJldHVybiBhIGZhdWx0IG9yIHtAbGluayBTSUxFTkNFfSBmcm9tIGl0IHRvIHJlZnVzZSBpbnN0ZWFkLlxuXHQgKi9cblx0ZXhwZWN0U3Vic2NyaWJlPFJlcSBleHRlbmRzIG9iamVjdCA9IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4oXG5cdFx0b3BlcmF0aW9uOiBPcCxcblx0XHRzY3JpcHQ6IFN1YnNjcmliZVNjcmlwdDxSZXE+LFxuXHRcdG9wdGlvbnM/OiBTdWJzY3JpYmVPcHRpb25zLFxuXHQpOiB2b2lkO1xuXHQvKiogUHVzaCBhbnkgcmF3IG1lc3NhZ2UsIGZvciB3aGF0IG5vIGV4cGVjdGF0aW9uIGNhbiBzY3JpcHQuICovXG5cdGRlbGl2ZXIocmF3OiB1bmtub3duKTogdm9pZDtcblx0LyoqIFJlc29sdmUgb25jZSBldmVyeXRoaW5nIHF1ZXVlZCBzbyBmYXIgaGFzIGJlZW4gZGVsaXZlcmVkLiAqL1xuXHRzZXR0bGVkKCk6IFByb21pc2U8dm9pZD47XG5cdC8qKiBUaHJvdyB1bmxlc3MgZXZlcnkgZXhwZWN0YXRpb24gd2FzIG1ldCBhbmQgbm90aGluZyBsZWFrZWQuICovXG5cdGFzc2VydFNhdGlzZmllZCgpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBoYXJuZXNzIHtAbGluayBjcmVhdGVCcmlkZ2VIYXJuZXNzfSByZXR1cm5zIGZvciBhIHNjaGVtYTogdGhlIHNhbWVcbiAqIGhhcm5lc3MsIHdpdGggYGV4cGVjdEludm9rZWAgYW5kIGBleHBlY3RTdWJzY3JpYmVgIHR5cGVkIGJ5IHRoZSBzY2hlbWEnc1xuICogYE9wZXJhdGlvbnNgIGFuZCBgU3RyZWFtc2AgLSBhIHBheWxvYWQgaXMgdGhlIGRlY2xhcmVkIHJlcXVlc3QsIGEgcmVwbHkgdGhlXG4gKiBkZWNsYXJlZCByZXN1bHQgLSBhbmQgYnkgdGhlIGN1cmF0ZWQgaG9zdCBpZHMsIHdob3NlIHNoYXBlcyB0aGUgaG9zdCBtb2R1bGVcbiAqIG93bnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hQnJpZGdlSGFybmVzczxPLCBTPlxuXHRleHRlbmRzIE9taXQ8XG5cdFx0QnJpZGdlSGFybmVzczxFeHRyYWN0PGtleW9mIE8gfCBrZXlvZiBTLCBzdHJpbmc+IHwgSG9zdE9wZXJhdGlvbklkPixcblx0XHRcImV4cGVjdEludm9rZVwiIHwgXCJleHBlY3RTdWJzY3JpYmVcIlxuXHQ+IHtcblx0ZXhwZWN0SW52b2tlPEsgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIE8sIHN0cmluZz4+KFxuXHRcdG9wZXJhdGlvbjogSyxcblx0XHRoYW5kbGVyOiAoXG5cdFx0XHRwYXlsb2FkOiBPW0tdIGV4dGVuZHMgT3BlcmF0aW9uU2hhcGUgPyBPW0tdW1wicmVxdWVzdFwiXSA6IG5ldmVyLFxuXHRcdCkgPT4gU2NyaXB0ZWRSZXBseTxPW0tdIGV4dGVuZHMgT3BlcmF0aW9uU2hhcGUgPyBPW0tdW1wicmVzdWx0XCJdIDogbmV2ZXI+LFxuXHQpOiB2b2lkO1xuXHRleHBlY3RJbnZva2U8XG5cdFx0UmVxIGV4dGVuZHMgb2JqZWN0ID0gUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuXHRcdFJlcyA9IHVua25vd24sXG5cdD4oXG5cdFx0b3BlcmF0aW9uOiBIb3N0T3BlcmF0aW9uSWQsXG5cdFx0aGFuZGxlcjogKHBheWxvYWQ6IFJlcSkgPT4gU2NyaXB0ZWRSZXBseTxSZXM+LFxuXHQpOiB2b2lkO1xuXHRleHBlY3RTdWJzY3JpYmU8SyBleHRlbmRzIEV4dHJhY3Q8a2V5b2YgUywgc3RyaW5nPj4oXG5cdFx0b3BlcmF0aW9uOiBLLFxuXHRcdHNjcmlwdDogU3Vic2NyaWJlU2NyaXB0PFNbS10gZXh0ZW5kcyBTdHJlYW1TaGFwZSA/IFNbS11bXCJyZXF1ZXN0XCJdIDogbmV2ZXI+LFxuXHRcdG9wdGlvbnM/OiBTdWJzY3JpYmVPcHRpb25zLFxuXHQpOiB2b2lkO1xuXHRleHBlY3RTdWJzY3JpYmU8UmVxIGV4dGVuZHMgb2JqZWN0ID0gUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+Pihcblx0XHRvcGVyYXRpb246IEhvc3RPcGVyYXRpb25JZCxcblx0XHRzY3JpcHQ6IFN1YnNjcmliZVNjcmlwdDxSZXE+LFxuXHRcdG9wdGlvbnM/OiBTdWJzY3JpYmVPcHRpb25zLFxuXHQpOiB2b2lkO1xufVxuXG5jbGFzcyBIYXJuZXNzPE9wIGV4dGVuZHMgc3RyaW5nPiBpbXBsZW1lbnRzIEJyaWRnZUhhcm5lc3M8T3A+IHtcblx0cHJpdmF0ZSByZWFkb25seSBncmFudGVkOiByZWFkb25seSBIb3N0T3BlcmF0aW9uSWRbXTtcblx0cHJpdmF0ZSByZWFkb25seSBwbHVnaW46IEJyaWRnZVNjaGVtYSB8IG51bGw7XG5cdHByaXZhdGUgcmVhZG9ubHkgbGlzdGVuZXJTZXQgPSBuZXcgU2V0PChtZXNzYWdlOiB1bmtub3duKSA9PiB2b2lkPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGV4cGVjdGF0aW9uczogRXhwZWN0YXRpb25bXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IHJlY29yZGVkOiBSZWNvcmRlZENhbGxbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IHVuZXhwZWN0ZWRDYWxsczogUmVjb3JkZWRDYWxsW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBzdHJlYW1zID0gbmV3IE1hcDxzdHJpbmcsIE9wZW5TdHJlYW0+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgcHJvYmxlbXM6IHN0cmluZ1tdID0gW107XG5cdHByaXZhdGUgcmVhZG9ubHkgb3V0Ym94OiB1bmtub3duW10gPSBbXTtcblx0cHJpdmF0ZSBkcmFpbmluZzogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIHN0cmVhbUNvdW50ZXIgPSAwO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBIYXJuZXNzT3B0aW9ucywgcGx1Z2luOiBCcmlkZ2VTY2hlbWEgfCBudWxsKSB7XG5cdFx0dGhpcy5ncmFudGVkID0gT2JqZWN0LmZyZWV6ZShbLi4uKG9wdGlvbnMuZ3JhbnRlZCA/PyBIT1NUX09QRVJBVElPTlMpXSk7XG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGNhbGxzKCk6IHJlYWRvbmx5IFJlY29yZGVkQ2FsbFtdIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMucmVjb3JkZWRdO1xuXHR9XG5cblx0cHVibGljIGdldCB1bmV4cGVjdGVkKCk6IHJlYWRvbmx5IFJlY29yZGVkQ2FsbFtdIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMudW5leHBlY3RlZENhbGxzXTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgb3BlblN1YnNjcmlwdGlvbnMoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuXHRcdHJldHVybiBbLi4udGhpcy5zdHJlYW1zLnZhbHVlcygpXVxuXHRcdFx0LmZpbHRlcigoc3RyZWFtKSA9PiBzdHJlYW0ub3Blbilcblx0XHRcdC5tYXAoKHN0cmVhbSkgPT4gc3RyZWFtLmlkKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgbGlzdGVuZXJzKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubGlzdGVuZXJTZXQuc2l6ZTtcblx0fVxuXG5cdHB1YmxpYyBzdWJzY3JpYmUobGlzdGVuZXI6IChtZXNzYWdlOiB1bmtub3duKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG5cdFx0dGhpcy5saXN0ZW5lclNldC5hZGQobGlzdGVuZXIpO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHR0aGlzLmxpc3RlbmVyU2V0LmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0XHRpZiAodGhpcy5saXN0ZW5lclNldC5zaXplID09PSAwKSB7XG5cdFx0XHRcdC8vIFRoZSBsYXN0IGNsaWVudCBkZXRhY2hlZDogdGhlIHZpZXcgaXMgZ29uZSwgYW5kIGEgaG9zdCBkaXNwb3Nlc1xuXHRcdFx0XHQvLyB0aGUgc3Vic2NyaXB0aW9ucyBvZiBhIHZpZXcgaXQgbG9zdCAoZGVjaXNpb24tMjMpLCBzbyB0aGV5IGFyZVxuXHRcdFx0XHQvLyBubyBsb25nZXIgbGVha3MuXG5cdFx0XHRcdGZvciAoY29uc3Qgc3RyZWFtIG9mIHRoaXMuc3RyZWFtcy52YWx1ZXMoKSkge1xuXHRcdFx0XHRcdHN0cmVhbS5vcGVuID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0cHVibGljIHNlbmQobWVzc2FnZTogdW5rbm93bik6IHZvaWQge1xuXHRcdGNvbnN0IGVudmVsb3BlID0gdGhpcy5wYXJzZUVudmVsb3BlKG1lc3NhZ2UpO1xuXHRcdGlmIChlbnZlbG9wZS5raW5kID09PSBcInVuc3Vic2NyaWJlXCIpIHtcblx0XHRcdHRoaXMuY2xvc2VGcm9tUGFnZShlbnZlbG9wZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChlbnZlbG9wZS5raW5kID09PSBcImhhbmRzaGFrZVwiKSB7XG5cdFx0XHR0aGlzLmFuc3dlckhhbmRzaGFrZShlbnZlbG9wZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGV4cGVjdGF0aW9uID0gdGhpcy50YWtlKGVudmVsb3BlLmtpbmQsIGVudmVsb3BlLm9wZXJhdGlvbik7XG5cdFx0aWYgKGV4cGVjdGF0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMudW5leHBlY3RlZENhbGxzLnB1c2goZW52ZWxvcGUpO1xuXHRcdFx0dGhpcy5kZWxpdmVyRmFpbHVyZShcblx0XHRcdFx0ZW52ZWxvcGUuY2FsbElkLFxuXHRcdFx0XHRcInVuZXhwZWN0ZWRfY2FsbFwiLFxuXHRcdFx0XHRgbm8gZXhwZWN0YXRpb24gY292ZXJzICR7ZW52ZWxvcGUua2luZH0gJHtKU09OLnN0cmluZ2lmeShlbnZlbG9wZS5vcGVyYXRpb24pfWAsXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoZXhwZWN0YXRpb24ua2luZCA9PT0gXCJpbnZva2VcIikge1xuXHRcdFx0dGhpcy5hbnN3ZXJJbnZva2UoZW52ZWxvcGUsIGV4cGVjdGF0aW9uKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5hbnN3ZXJTdWJzY3JpYmUoZW52ZWxvcGUsIGV4cGVjdGF0aW9uKTtcblx0fVxuXG5cdHB1YmxpYyBleHBlY3RJbnZva2U8UmVxIGV4dGVuZHMgb2JqZWN0LCBSZXM+KFxuXHRcdG9wZXJhdGlvbjogT3AsXG5cdFx0aGFuZGxlcjogKHBheWxvYWQ6IFJlcSkgPT4gU2NyaXB0ZWRSZXBseTxSZXM+LFxuXHQpOiB2b2lkIHtcblx0XHR0aGlzLmV4cGVjdGF0aW9ucy5wdXNoKHtcblx0XHRcdGtpbmQ6IFwiaW52b2tlXCIsXG5cdFx0XHRvcGVyYXRpb24sXG5cdFx0XHRoYW5kbGVyOiBoYW5kbGVyIGFzIEludm9rZUV4cGVjdGF0aW9uW1wiaGFuZGxlclwiXSxcblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBleHBlY3RTdWJzY3JpYmU8UmVxIGV4dGVuZHMgb2JqZWN0Pihcblx0XHRvcGVyYXRpb246IE9wLFxuXHRcdHNjcmlwdDogU3Vic2NyaWJlU2NyaXB0PFJlcT4sXG5cdFx0b3B0aW9uczogU3Vic2NyaWJlT3B0aW9ucyA9IHt9LFxuXHQpOiB2b2lkIHtcblx0XHR0aGlzLmV4cGVjdGF0aW9ucy5wdXNoKHtcblx0XHRcdGtpbmQ6IFwic3Vic2NyaWJlXCIsXG5cdFx0XHRvcGVyYXRpb24sXG5cdFx0XHRzY3JpcHQ6IHNjcmlwdCBhcyBTdWJzY3JpYmVFeHBlY3RhdGlvbltcInNjcmlwdFwiXSxcblx0XHRcdG9wdGlvbnMsXG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgZGVsaXZlcihyYXc6IHVua25vd24pOiB2b2lkIHtcblx0XHR0aGlzLm91dGJveC5wdXNoKHJhdyk7XG5cdFx0dGhpcy5kcmFpbigpO1xuXHR9XG5cblx0cHVibGljIHNldHRsZWQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuZHJhaW5pbmcgPz8gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRwdWJsaWMgYXNzZXJ0U2F0aXNmaWVkKCk6IHZvaWQge1xuXHRcdGNvbnN0IHByb2JsZW1zID0gWy4uLnRoaXMucHJvYmxlbXNdO1xuXHRcdGlmICh0aGlzLmV4cGVjdGF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCB1bm1ldCA9IHRoaXMuZXhwZWN0YXRpb25zLm1hcChcblx0XHRcdFx0KGV4cGVjdGF0aW9uKSA9PiBgJHtleHBlY3RhdGlvbi5raW5kfSAke2V4cGVjdGF0aW9uLm9wZXJhdGlvbn1gLFxuXHRcdFx0KTtcblx0XHRcdHByb2JsZW1zLnB1c2goYHVubWV0IGV4cGVjdGF0aW9uczogJHt1bm1ldC5qb2luKFwiLCBcIil9YCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnVuZXhwZWN0ZWRDYWxscy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCB1bmV4cGVjdGVkID0gdGhpcy51bmV4cGVjdGVkQ2FsbHMubWFwKFxuXHRcdFx0XHQoY2FsbCkgPT4gYCR7Y2FsbC5raW5kfSAke2NhbGwub3BlcmF0aW9ufWAsXG5cdFx0XHQpO1xuXHRcdFx0cHJvYmxlbXMucHVzaChgdW5leHBlY3RlZCBjYWxsczogJHt1bmV4cGVjdGVkLmpvaW4oXCIsIFwiKX1gKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BlbiA9IHRoaXMub3BlblN1YnNjcmlwdGlvbnM7XG5cdFx0aWYgKG9wZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJvYmxlbXMucHVzaChgb3BlbiBzdWJzY3JpcHRpb25zOiAke29wZW4uam9pbihcIiwgXCIpfWApO1xuXHRcdH1cblx0XHRpZiAocHJvYmxlbXMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhyb3cgbmV3IFFnaXNTZGtCcmlkZ2VIYXJuZXNzRXJyb3IocHJvYmxlbXMuam9pbihcIjsgXCIpKTtcblx0XHR9XG5cdH1cblxuXHQvLyAtLSBhbnN3ZXJpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0LyoqXG5cdCAqIEFuc3dlciB0aGUgaGFuZHNoYWtlIHRoZSB3YXkgYERpc3BhdGNoZXJgIGRvZXM6IHRoZSBwbHVnaW4gZGVzY3JpcHRpb25cblx0ICogdGhlIGhhcm5lc3Mgd2FzIGJ1aWx0IGZyb20gKG9yIG5vbmUpIGFuZCB0aGUgYWR2ZXJ0aXNlZCBvcGVyYXRpb24gaWRzIC1cblx0ICogdGhlIHBsdWdpbidzLCB0aGVuIHRoZSBncmFudGVkIGhvc3QgaWRzLiBObyBleHBlY3RhdGlvbiBpcyBjb25zdW1lZDogYVxuXHQgKiBoYW5kc2hha2UgaXMgdGhlIFNESydzIGZpcnN0IG1lc3NhZ2UsIG5vdCBzb21ldGhpbmcgYSB0ZXN0IHNjcmlwdHMuXG5cdCAqL1xuXHRwcml2YXRlIGFuc3dlckhhbmRzaGFrZShjYWxsOiBSZWNvcmRlZENhbGwpOiB2b2lkIHtcblx0XHRjb25zdCBkZWNsYXJlZCA9IFtcblx0XHRcdC4uLih0aGlzLnBsdWdpbj8uYWN0aW9ucyA/PyBbXSkubWFwKChhY3Rpb24pID0+IGFjdGlvbi5pZCksXG5cdFx0XHQuLi4odGhpcy5wbHVnaW4/LnN0cmVhbXMgPz8gW10pLm1hcCgoc3RyZWFtKSA9PiBzdHJlYW0uaWQpLFxuXHRcdF07XG5cdFx0dGhpcy5kZWxpdmVyKHtcblx0XHRcdHByb3RvY29sOiBQUk9UT0NPTCxcblx0XHRcdGNhbGxfaWQ6IGNhbGwuY2FsbElkLFxuXHRcdFx0b2s6IHRydWUsXG5cdFx0XHR2YWx1ZToge1xuXHRcdFx0XHRwcm90b2NvbDogUFJPVE9DT0wsXG5cdFx0XHRcdGdlbmVyYXRpb246IDAsXG5cdFx0XHRcdHBsdWdpbjogdGhpcy5wbHVnaW4sXG5cdFx0XHRcdGhvc3Rfc2NoZW1hX3ZlcnNpb246IEhPU1RfU0NIRU1BX1ZFUlNJT04sXG5cdFx0XHRcdG9wZXJhdGlvbnM6IFsuLi5kZWNsYXJlZCwgLi4udGhpcy5ncmFudGVkXS5tYXAoKGlkKSA9PiAoe1xuXHRcdFx0XHRcdGlkLFxuXHRcdFx0XHRcdHRpdGxlOiBpZCxcblx0XHRcdFx0fSkpLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYW5zd2VySW52b2tlKFxuXHRcdGNhbGw6IFJlY29yZGVkQ2FsbCxcblx0XHRleHBlY3RhdGlvbjogSW52b2tlRXhwZWN0YXRpb24sXG5cdCk6IHZvaWQge1xuXHRcdHRoaXMucmVzb2x2ZUhhbmRsZXIoY2FsbCwgKCkgPT5cblx0XHRcdGV4cGVjdGF0aW9uLmhhbmRsZXIoY2FsbC5wYXlsb2FkID8/IHt9KSxcblx0XHQpLnRoZW4oKHJlcGx5KSA9PiB7XG5cdFx0XHRpZiAocmVwbHkgPT09IFNJTEVOQ0UpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzRmF1bHQocmVwbHkpKSB7XG5cdFx0XHRcdHRoaXMuZGVsaXZlckZhaWx1cmUoY2FsbC5jYWxsSWQsIHJlcGx5LmZhdWx0LmNvZGUsIHJlcGx5LmZhdWx0Lm1lc3NhZ2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmRlbGl2ZXIoe1xuXHRcdFx0XHRwcm90b2NvbDogUFJPVE9DT0wsXG5cdFx0XHRcdGNhbGxfaWQ6IGNhbGwuY2FsbElkLFxuXHRcdFx0XHRvazogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IHJlcGx5LFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGFuc3dlclN1YnNjcmliZShcblx0XHRjYWxsOiBSZWNvcmRlZENhbGwsXG5cdFx0ZXhwZWN0YXRpb246IFN1YnNjcmliZUV4cGVjdGF0aW9uLFxuXHQpOiB2b2lkIHtcblx0XHR0aGlzLnN0cmVhbUNvdW50ZXIgKz0gMTtcblx0XHRjb25zdCBvcGVuOiBPcGVuU3RyZWFtID0ge1xuXHRcdFx0aWQ6IGBzJHt0aGlzLnN0cmVhbUNvdW50ZXJ9YCxcblx0XHRcdG9wZXJhdGlvbjogY2FsbC5vcGVyYXRpb24sXG5cdFx0XHRzZXE6IDAsXG5cdFx0XHRvcGVuOiBmYWxzZSxcblx0XHR9O1xuXHRcdC8vIEZyYW1lcyB0aGUgc2NyaXB0IGVtaXRzIGJlZm9yZSB0aGUgYWNrbm93bGVkZ2VtZW50IGlzIGRlY2lkZWQgYXJlIGhlbGRcblx0XHQvLyBiYWNrOiBhIHJlZnVzZWQgc3Vic2NyaXB0aW9uIHNlbmRzIG5vbmUsIGFuIGFjY2VwdGVkIG9uZSBzZW5kcyB0aGVtXG5cdFx0Ly8gYWZ0ZXIgdGhlIGFja25vd2xlZGdlbWVudCwgc28gdGhlIGtlcm5lbCBoYXMgcmVnaXN0ZXJlZCB0aGVcblx0XHQvLyBzdWJzY3JpcHRpb24gYnkgdGhlIHRpbWUgdGhlIGZpcnN0IGZyYW1lIHJlYWNoZXMgaXQuXG5cdFx0Y29uc3QgaGVsZDogdW5rbm93bltdID0gW107XG5cdFx0bGV0IHNpbmsgPSAoZnJhbWU6IHVua25vd24pOiB2b2lkID0+IHtcblx0XHRcdGhlbGQucHVzaChmcmFtZSk7XG5cdFx0fTtcblx0XHRjb25zdCBzdHJlYW0gPSB0aGlzLnNjcmlwdGVkKG9wZW4sIChmcmFtZSkgPT4gc2luayhmcmFtZSkpO1xuXHRcdGNvbnN0IGFjayA9IGV4cGVjdGF0aW9uLm9wdGlvbnMuYWNrID8/ICgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSk7XG5cdFx0YWNrKClcblx0XHRcdC50aGVuKCgpID0+XG5cdFx0XHRcdHRoaXMucmVzb2x2ZUhhbmRsZXIoY2FsbCwgKCkgPT4ge1xuXHRcdFx0XHRcdG9wZW4ub3BlbiA9IHRydWU7XG5cdFx0XHRcdFx0cmV0dXJuIGV4cGVjdGF0aW9uLnNjcmlwdChjYWxsLnBheWxvYWQgPz8ge30sIHN0cmVhbSk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0KVxuXHRcdFx0LnRoZW4oKG91dGNvbWUpID0+IHtcblx0XHRcdFx0aWYgKG91dGNvbWUgPT09IFNJTEVOQ0UgfHwgaXNGYXVsdChvdXRjb21lKSkge1xuXHRcdFx0XHRcdG9wZW4ub3BlbiA9IGZhbHNlO1xuXHRcdFx0XHRcdGhlbGQubGVuZ3RoID0gMDtcblx0XHRcdFx0XHRpZiAoaXNGYXVsdChvdXRjb21lKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5kZWxpdmVyRmFpbHVyZShcblx0XHRcdFx0XHRcdFx0Y2FsbC5jYWxsSWQsXG5cdFx0XHRcdFx0XHRcdG91dGNvbWUuZmF1bHQuY29kZSxcblx0XHRcdFx0XHRcdFx0b3V0Y29tZS5mYXVsdC5tZXNzYWdlLFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLmxpc3RlbmVyU2V0LnNpemUgPT09IDApIHtcblx0XHRcdFx0XHQvLyBUaGUgdmlldyBkZXRhY2hlZCB3aGlsZSB0aGUgaG9zdCB3YXMgZGVjaWRpbmc6IG5vdGhpbmcgdG9cblx0XHRcdFx0XHQvLyBhY2tub3dsZWRnZSB0bywgbm90aGluZyB0byBrZWVwIG9wZW4uXG5cdFx0XHRcdFx0b3Blbi5vcGVuID0gZmFsc2U7XG5cdFx0XHRcdFx0aGVsZC5sZW5ndGggPSAwO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnN0cmVhbXMuc2V0KG9wZW4uaWQsIG9wZW4pO1xuXHRcdFx0XHR0aGlzLmRlbGl2ZXIoe1xuXHRcdFx0XHRcdHByb3RvY29sOiBQUk9UT0NPTCxcblx0XHRcdFx0XHRjYWxsX2lkOiBjYWxsLmNhbGxJZCxcblx0XHRcdFx0XHRvazogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZToge1xuXHRcdFx0XHRcdFx0c3Vic2NyaXB0aW9uX2lkOiBvcGVuLmlkLFxuXHRcdFx0XHRcdFx0Y2FwYWNpdHk6IFNVQlNDUklQVElPTl9DQVBBQ0lUWSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2luayA9IChmcmFtZSkgPT4gdGhpcy5kZWxpdmVyKGZyYW1lKTtcblx0XHRcdFx0Zm9yIChjb25zdCBmcmFtZSBvZiBoZWxkKSB7XG5cdFx0XHRcdFx0c2luayhmcmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aGVsZC5sZW5ndGggPSAwO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVIYW5kbGVyKFxuXHRcdGNhbGw6IFJlY29yZGVkQ2FsbCxcblx0XHRydW46ICgpID0+IHVua25vd24sXG5cdCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZTx1bmtub3duPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0cmVzb2x2ZShydW4oKSk7XG5cdFx0fSkuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuXHRcdFx0dGhpcy5wcm9ibGVtcy5wdXNoKFxuXHRcdFx0XHRgaGFuZGxlciBmb3IgJHtjYWxsLmtpbmR9ICR7Y2FsbC5vcGVyYXRpb259IHRocmV3OiAke21lc3NhZ2V9YCxcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gZmF1bHQoXCJoYXJuZXNzX2Vycm9yXCIsIG1lc3NhZ2UpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBzY3JpcHRlZChcblx0XHRvcGVuOiBPcGVuU3RyZWFtLFxuXHRcdHNpbms6IChmcmFtZTogdW5rbm93bikgPT4gdm9pZCxcblx0KTogU2NyaXB0ZWRTdHJlYW0ge1xuXHRcdGNvbnN0IHJlcXVpcmVPcGVuID0gKHZlcmI6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRcdFx0aWYgKCFvcGVuLm9wZW4pIHtcblx0XHRcdFx0dGhyb3cgbmV3IFFnaXNTZGtCcmlkZ2VIYXJuZXNzRXJyb3IoXG5cdFx0XHRcdFx0YGNhbm5vdCAke3ZlcmJ9IG9uIHN1YnNjcmlwdGlvbiAke29wZW4uaWR9OiBpdCBpcyBub3Qgb3BlbmAsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aWQ6IG9wZW4uaWQsXG5cdFx0XHRvcGVyYXRpb246IG9wZW4ub3BlcmF0aW9uLFxuXHRcdFx0Z2V0IG9wZW4oKTogYm9vbGVhbiB7XG5cdFx0XHRcdHJldHVybiBvcGVuLm9wZW47XG5cdFx0XHR9LFxuXHRcdFx0ZW1pdDogKGtpbmQsIHBheWxvYWQpID0+IHtcblx0XHRcdFx0cmVxdWlyZU9wZW4oXCJlbWl0XCIpO1xuXHRcdFx0XHRzaW5rKHtcblx0XHRcdFx0XHRwcm90b2NvbDogUFJPVE9DT0wsXG5cdFx0XHRcdFx0c3Vic2NyaXB0aW9uX2lkOiBvcGVuLmlkLFxuXHRcdFx0XHRcdHNlcTogb3Blbi5zZXEsXG5cdFx0XHRcdFx0ZXZlbnQ6IHsga2luZCwgcGF5bG9hZCB9LFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0b3Blbi5zZXEgKz0gMTtcblx0XHRcdH0sXG5cdFx0XHRlbmQ6ICh0ZXJtaW5hbCkgPT4ge1xuXHRcdFx0XHRyZXF1aXJlT3BlbihcImVuZFwiKTtcblx0XHRcdFx0b3Blbi5vcGVuID0gZmFsc2U7XG5cdFx0XHRcdHNpbmsoe1xuXHRcdFx0XHRcdHByb3RvY29sOiBQUk9UT0NPTCxcblx0XHRcdFx0XHRzdWJzY3JpcHRpb25faWQ6IG9wZW4uaWQsXG5cdFx0XHRcdFx0c2VxOiBvcGVuLnNlcSxcblx0XHRcdFx0XHR0ZXJtaW5hbCxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdG9wZW4uc2VxICs9IDE7XG5cdFx0XHR9LFxuXHRcdFx0c2tpcDogKGZyYW1lcykgPT4ge1xuXHRcdFx0XHRyZXF1aXJlT3BlbihcInNraXBcIik7XG5cdFx0XHRcdG9wZW4uc2VxICs9IGZyYW1lcztcblx0XHRcdH0sXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgY2xvc2VGcm9tUGFnZShjYWxsOiBSZWNvcmRlZENhbGwpOiB2b2lkIHtcblx0XHRjb25zdCBvcGVuID1cblx0XHRcdGNhbGwuc3Vic2NyaXB0aW9uSWQgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHQ6IHRoaXMuc3RyZWFtcy5nZXQoY2FsbC5zdWJzY3JpcHRpb25JZCk7XG5cdFx0Y29uc3QgZGlzcG9zZWQgPSBvcGVuPy5vcGVuID09PSB0cnVlO1xuXHRcdGlmIChvcGVuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wZW4ub3BlbiA9IGZhbHNlO1xuXHRcdH1cblx0XHR0aGlzLmRlbGl2ZXIoe1xuXHRcdFx0cHJvdG9jb2w6IFBST1RPQ09MLFxuXHRcdFx0Y2FsbF9pZDogY2FsbC5jYWxsSWQsXG5cdFx0XHRvazogdHJ1ZSxcblx0XHRcdHZhbHVlOiB7IGRpc3Bvc2VkIH0sXG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGRlbGl2ZXJGYWlsdXJlKGNhbGxJZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuZGVsaXZlcih7XG5cdFx0XHRwcm90b2NvbDogUFJPVE9DT0wsXG5cdFx0XHRjYWxsX2lkOiBjYWxsSWQsXG5cdFx0XHRvazogZmFsc2UsXG5cdFx0XHRlcnJvcjogeyBjb2RlLCBtZXNzYWdlIH0sXG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGRyYWluKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmRyYWluaW5nICE9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuZHJhaW5pbmcgPSAoYXN5bmMgKCkgPT4ge1xuXHRcdFx0d2hpbGUgKHRoaXMub3V0Ym94Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSB0aGlzLm91dGJveC5zaGlmdCgpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIFsuLi50aGlzLmxpc3RlbmVyU2V0XSkge1xuXHRcdFx0XHRcdGxpc3RlbmVyKG1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmRyYWluaW5nID0gbnVsbDtcblx0XHR9KSgpO1xuXHR9XG5cblx0Ly8gLS0gcGFyc2luZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHJpdmF0ZSB0YWtlKFxuXHRcdGtpbmQ6IFwiaW52b2tlXCIgfCBcInN1YnNjcmliZVwiLFxuXHRcdG9wZXJhdGlvbjogc3RyaW5nLFxuXHQpOiBFeHBlY3RhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmV4cGVjdGF0aW9ucy5maW5kSW5kZXgoXG5cdFx0XHQoZXhwZWN0YXRpb24pID0+XG5cdFx0XHRcdGV4cGVjdGF0aW9uLmtpbmQgPT09IGtpbmQgJiYgZXhwZWN0YXRpb24ub3BlcmF0aW9uID09PSBvcGVyYXRpb24sXG5cdFx0KTtcblx0XHRpZiAoaW5kZXggPT09IC0xKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5leHBlY3RhdGlvbnMuc3BsaWNlKGluZGV4LCAxKVswXTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VFbnZlbG9wZShtZXNzYWdlOiB1bmtub3duKTogUmVjb3JkZWRDYWxsIHtcblx0XHRpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IFFnaXNTZGtCcmlkZ2VIYXJuZXNzRXJyb3IoXCJ0aGUgY2xpZW50IHNlbnQgYSBub24tb2JqZWN0XCIpO1xuXHRcdH1cblx0XHRjb25zdCByYXcgPSBtZXNzYWdlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGlmIChyYXcucHJvdG9jb2wgIT09IFBST1RPQ09MKSB7XG5cdFx0XHR0aHJvdyBuZXcgUWdpc1Nka0JyaWRnZUhhcm5lc3NFcnJvcihcblx0XHRcdFx0YHRoZSBjbGllbnQgc3BlYWtzIHByb3RvY29sICR7U3RyaW5nKHJhdy5wcm90b2NvbCl9OyB0aGUgaGFybmVzcyBmYWtlcyAke1BST1RPQ09MfWAsXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHJhdy5jYWxsX2lkICE9PSBcInN0cmluZ1wiIHx8IHJhdy5jYWxsX2lkLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhyb3cgbmV3IFFnaXNTZGtCcmlkZ2VIYXJuZXNzRXJyb3IoXCJ0aGUgY2xpZW50IHNlbnQgbm8gY2FsbF9pZFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgY2FsbElkID0gcmF3LmNhbGxfaWQ7XG5cdFx0aWYgKHJhdy5raW5kID09PSBcInVuc3Vic2NyaWJlXCIpIHtcblx0XHRcdGNvbnN0IHN1YnNjcmlwdGlvbklkID0gcmF3LnN1YnNjcmlwdGlvbl9pZDtcblx0XHRcdGlmICh0eXBlb2Ygc3Vic2NyaXB0aW9uSWQgIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFFnaXNTZGtCcmlkZ2VIYXJuZXNzRXJyb3IoXG5cdFx0XHRcdFx0YCR7Y2FsbElkfTogdW5zdWJzY3JpYmUgbmFtZXMgbm8gc3Vic2NyaXB0aW9uX2lkYCxcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNhbGw6IFJlY29yZGVkQ2FsbCA9IHtcblx0XHRcdFx0Y2FsbElkLFxuXHRcdFx0XHRraW5kOiBcInVuc3Vic2NyaWJlXCIsXG5cdFx0XHRcdG9wZXJhdGlvbjogdGhpcy5zdHJlYW1zLmdldChzdWJzY3JpcHRpb25JZCk/Lm9wZXJhdGlvbiA/PyBcIlwiLFxuXHRcdFx0XHRzdWJzY3JpcHRpb25JZCxcblx0XHRcdH07XG5cdFx0XHR0aGlzLnJlY29yZGVkLnB1c2goY2FsbCk7XG5cdFx0XHRyZXR1cm4gY2FsbDtcblx0XHR9XG5cdFx0aWYgKHJhdy5raW5kID09PSBcImhhbmRzaGFrZVwiKSB7XG5cdFx0XHRjb25zdCBjYWxsOiBSZWNvcmRlZENhbGwgPSB7IGNhbGxJZCwga2luZDogXCJoYW5kc2hha2VcIiwgb3BlcmF0aW9uOiBcIlwiIH07XG5cdFx0XHR0aGlzLnJlY29yZGVkLnB1c2goY2FsbCk7XG5cdFx0XHRyZXR1cm4gY2FsbDtcblx0XHR9XG5cdFx0aWYgKHJhdy5raW5kICE9PSBcImludm9rZVwiICYmIHJhdy5raW5kICE9PSBcInN1YnNjcmliZVwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgUWdpc1Nka0JyaWRnZUhhcm5lc3NFcnJvcihcblx0XHRcdFx0YCR7Y2FsbElkfTogJHtTdHJpbmcocmF3LmtpbmQpfSBpcyBub3QgYSBicmlkZ2UgZW52ZWxvcGUga2luZGAsXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHJhdy5vcGVyYXRpb24gIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHRocm93IG5ldyBRZ2lzU2RrQnJpZGdlSGFybmVzc0Vycm9yKFxuXHRcdFx0XHRgJHtjYWxsSWR9OiBvcGVyYXRpb24gbXVzdCBiZSBhIHN0cmluZ2AsXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRjb25zdCBwYXlsb2FkID1cblx0XHRcdHR5cGVvZiByYXcucGF5bG9hZCA9PT0gXCJvYmplY3RcIiAmJiByYXcucGF5bG9hZCAhPT0gbnVsbFxuXHRcdFx0XHQ/IChyYXcucGF5bG9hZCBhcyBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pXG5cdFx0XHRcdDoge307XG5cdFx0Y29uc3QgY2FsbDogUmVjb3JkZWRDYWxsID0ge1xuXHRcdFx0Y2FsbElkLFxuXHRcdFx0a2luZDogcmF3LmtpbmQsXG5cdFx0XHRvcGVyYXRpb246IHJhdy5vcGVyYXRpb24sXG5cdFx0XHRwYXlsb2FkLFxuXHRcdH07XG5cdFx0dGhpcy5yZWNvcmRlZC5wdXNoKGNhbGwpO1xuXHRcdHJldHVybiBjYWxsO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgaGFybmVzcy5cbiAqXG4gKiBHaXZlbiB0aGUgZ2VuZXJhdGVkIGBicmlkZ2Uuc2NoZW1hLnRzYCBkZWZhdWx0IGV4cG9ydCwgdGhlIGhhcm5lc3MgaXMgdHlwZWRcbiAqIGJ5IGl0OiBgZXhwZWN0SW52b2tlKFwic2l0ZXMuc3VtbWFyeVwiLCAocGF5bG9hZCkgPT4gLi4uKWAgc2VlcyB0aGUgZGVjbGFyZWRcbiAqIHJlcXVlc3QgYW5kIG11c3QgYW5zd2VyIHdpdGggdGhlIGRlY2xhcmVkIHJlc3VsdCwgYW5kIHRoZSBoYW5kc2hha2UgaXRcbiAqIGFuc3dlcnMgYWR2ZXJ0aXNlcyB0aGUgc2NoZW1hJ3Mgb3BlcmF0aW9ucy4gV2l0aG91dCBvbmUsIGBPcGAgbmFycm93cyB0aGVcbiAqIG9wZXJhdGlvbnMgYSB0ZXN0IG1heSBleHBlY3QsIHR5cGljYWxseSBhIGdlbmVyYXRlZCBgT3BlcmF0aW9uSWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQnJpZGdlSGFybmVzczxPcCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oXG5cdG9wdGlvbnM/OiBIYXJuZXNzT3B0aW9ucyxcbik6IEJyaWRnZUhhcm5lc3M8T3A+O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJyaWRnZUhhcm5lc3M8TywgUz4oXG5cdHNjaGVtYTogQnJpZGdlU2NoZW1hPE8sIFM+LFxuXHRvcHRpb25zPzogSGFybmVzc09wdGlvbnMsXG4pOiBTY2hlbWFCcmlkZ2VIYXJuZXNzPE8sIFM+O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJyaWRnZUhhcm5lc3MoXG5cdGZpcnN0OiBIYXJuZXNzT3B0aW9ucyB8IEJyaWRnZVNjaGVtYSA9IHt9LFxuXHRzZWNvbmQ6IEhhcm5lc3NPcHRpb25zID0ge30sXG4pOiBCcmlkZ2VIYXJuZXNzIHwgU2NoZW1hQnJpZGdlSGFybmVzczx1bmtub3duLCB1bmtub3duPiB7XG5cdGlmIChcInNjaGVtYV92ZXJzaW9uXCIgaW4gZmlyc3QpIHtcblx0XHRyZXR1cm4gbmV3IEhhcm5lc3M8c3RyaW5nPihzZWNvbmQsIGZpcnN0KSBhcyBTY2hlbWFCcmlkZ2VIYXJuZXNzPFxuXHRcdFx0dW5rbm93bixcblx0XHRcdHVua25vd25cblx0XHQ+O1xuXHR9XG5cdHJldHVybiBuZXcgSGFybmVzczxzdHJpbmc+KGZpcnN0LCBudWxsKTtcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7OztBQStCQSxJQUFNLFdBQVc7QUFDakIsSUFBTSx3QkFBd0I7QUFRdkIsU0FBUyxLQUFLLENBQUMsTUFBYyxTQUFnQztBQUFBLEVBQ25FLE9BQU8sT0FBTyxPQUFPLEVBQUUsT0FBTyxPQUFPLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFBQTtBQUdqRSxTQUFTLE9BQU8sQ0FBQyxPQUF3QztBQUFBLEVBQ3hELE9BQ0Ms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
368
+ //# debugId=8C3CD16BB44B1EC464756E2164756E21
369
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3Rlc3RpbmcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLyoqXG4gKiBBbiBpbmplY3RlZCBwZXItY2xpZW50IGhhcm5lc3MgZm9yIHRoZSBicmlkZ2UgKGRlY2lzaW9uLTIzKS5cbiAqXG4gKiBUaGUgaGFybmVzcyBpcyBhIHtAbGluayBXaXJlVHJhbnNwb3J0fTogYSBwYWdlJ3Mgb3duIGBCcmlkZ2VDbGllbnRgIHNwZWFrcyB0b1xuICogaXQgZXhhY3RseSBhcyBpdCB3b3VsZCB0byBhIFFXZWJDaGFubmVsLCBhbmQgYSB0ZXN0IHNjcmlwdHMgd2hhdCB0aGUgaG9zdFxuICogYW5zd2VycyAtIHR5cGVkIHJlcGxpZXMsIGZhdWx0cywgc2lsZW5jZSwgc3RyZWFtIGV2ZW50cywgdGVybWluYWxzLCBnYXBzIC1cbiAqIHdpdGhvdXQgdG91Y2hpbmcgYSBicm93c2VyIGdsb2JhbCBvciBhIHJ1bm5pbmcgUUdJUy4gVHdvIGhhcm5lc3NlcyBhcmUgdHdvXG4gKiBob3N0cywgc28gaXNvbGF0aW9uIGJldHdlZW4gY2xpZW50cyBpcyBhIGZhY3QgYSB0ZXN0IGNhbiBwcm92ZS5cbiAqXG4gKiBXaGF0IGl0IHByb3ZlcyBpcyBib3VuZGVkLiBBIGdyZWVuIHRlc3QgaGVyZSBzYXlzIHRoZSBwYWdlIGhhbmRsZXMgdGhlXG4gKiBmcmFtZXMgYSBob3N0ICpjb3VsZCogc2VuZDsgaXQgc2F5cyBub3RoaW5nIGFib3V0IHdoYXQgYSBRV2ViRW5naW5lVmlldyBvclxuICogYSByZWFsIGhvc3QgZG9lcy4gVGhhdCBldmlkZW5jZSBsaXZlcyBpbiB0aGUgUHl0aG9uIHN1aXRlIGFuZCBpbiB0aGVcbiAqIHF1YWxpZmljYXRpb24gaGFybmVzc2VzIHJlY29yZGVkIGluIHRoZSB3b3Jrc3BhY2UgZ3VpZGUuIEtlZXAgdGhlIHR3byBhcGFydCBpbiByZXBvcnRzLlxuICpcbiAqIEV2ZXJ5dGhpbmcgdGhlIGhhcm5lc3Mgc2VuZHMgaXMgZGVsaXZlcmVkIGFzeW5jaHJvbm91c2x5LCBvbmUgbWVzc2FnZSBwZXJcbiAqIG1pY3JvdGFzaywgc28gYSByZXBseSBuZXZlciByZS1lbnRlcnMgdGhlIGNsaWVudCBpbnNpZGUgaXRzIG93biBgc2VuZGAuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuXHRCcmlkZ2VTdHJlYW1UZXJtaW5hbCxcblx0U3RyZWFtRXZlbnRLaW5kLFxuXHRXaXJlVHJhbnNwb3J0LFxufSBmcm9tIFwiLi9icmlkZ2VcIjtcbmltcG9ydCB7IFFnaXNTZGtFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHtcblx0SE9TVF9PUEVSQVRJT05TLFxuXHRIT1NUX1NDSEVNQV9WRVJTSU9OLFxuXHR0eXBlIEhvc3RPcGVyYXRpb25JZCxcbn0gZnJvbSBcIi4vZ2VuZXJhdGVkL2hvc3RcIjtcbmltcG9ydCB0eXBlIHsgUWdpc1Nka0hvc3RUaGVtZSB9IGZyb20gXCIuL3FnaXMtc2RrXCI7XG5pbXBvcnQgdHlwZSB7IEJyaWRnZVNjaGVtYSwgT3BlcmF0aW9uU2hhcGUsIFN0cmVhbVNoYXBlIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmNvbnN0IFBST1RPQ09MID0gMTtcbmNvbnN0IFNVQlNDUklQVElPTl9DQVBBQ0lUWSA9IDY0O1xuXG4vKiogQSBzY3JpcHRlZCBob3N0IGZhaWx1cmUsIHJldHVybmVkIGZyb20gYW4gZXhwZWN0YXRpb24ncyBoYW5kbGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY3JpcHRlZEZhdWx0IHtcblx0cmVhZG9ubHkgZmF1bHQ6IHsgcmVhZG9ubHkgY29kZTogc3RyaW5nOyByZWFkb25seSBtZXNzYWdlOiBzdHJpbmcgfTtcbn1cblxuLyoqIFNjcmlwdCBhIGZhaWx1cmUgcmVwbHkgd2l0aCB0aGlzIGNvZGUgYW5kIG1lc3NhZ2UuICovXG5leHBvcnQgZnVuY3Rpb24gZmF1bHQoY29kZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBTY3JpcHRlZEZhdWx0IHtcblx0cmV0dXJuIE9iamVjdC5mcmVlemUoeyBmYXVsdDogT2JqZWN0LmZyZWV6ZSh7IGNvZGUsIG1lc3NhZ2UgfSkgfSk7XG59XG5cbmZ1bmN0aW9uIGlzRmF1bHQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTY3JpcHRlZEZhdWx0IHtcblx0cmV0dXJuIChcblx0XHR0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcblx0XHR2YWx1ZSAhPT0gbnVsbCAmJlxuXHRcdFwiZmF1bHRcIiBpbiB2YWx1ZSAmJlxuXHRcdHR5cGVvZiAodmFsdWUgYXMgU2NyaXB0ZWRGYXVsdCkuZmF1bHQgPT09IFwib2JqZWN0XCJcblx0KTtcbn1cblxuLyoqIFJldHVybiB0aGlzIGZyb20gYSBoYW5kbGVyIHRvIG5ldmVyIGFuc3dlciwgc28gdGhlIGNsaWVudCdzIHRpbWVvdXQgc3BlYWtzLiAqL1xuZXhwb3J0IGNvbnN0IFNJTEVOQ0U6IHVuaXF1ZSBzeW1ib2wgPSBTeW1ib2woXCJxZ2lzLXNkay1oYXJuZXNzLXNpbGVuY2VcIik7XG5cbi8qKiBBIHN1YnNjcmlwdGlvbiB0aGUgc2NyaXB0IHR1cm5zIGRvd246IGEgZmF1bHQgcmVwbHksIG9yIG5vIHJlcGx5IGF0IGFsbC4gKi9cbmV4cG9ydCB0eXBlIFNjcmlwdGVkUmVmdXNhbCA9IFNjcmlwdGVkRmF1bHQgfCB0eXBlb2YgU0lMRU5DRTtcblxuLyoqXG4gKiBBIHN1YnNjcmliZSBleHBlY3RhdGlvbidzIHNjcmlwdDogZW1pdCBvbiBgc3RyZWFtYCBub3cgb3IgbGF0ZXIsIG9yIHJldHVyblxuICogYSByZWZ1c2FsIGluc3RlYWQgb2YgYWNrbm93bGVkZ2luZy5cbiAqL1xuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU2NyaXB0PFJlcSBleHRlbmRzIG9iamVjdD4gPSAoXG5cdHBheWxvYWQ6IFJlcSxcblx0c3RyZWFtOiBTY3JpcHRlZFN0cmVhbSxcblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbmZ1c2luZ1ZvaWRUeXBlOiBhIHNjcmlwdCB0aGF0IG9ubHkgZW1pdHMgcmV0dXJucyBub3RoaW5nXG4pID0+IFNjcmlwdGVkUmVmdXNhbCB8IHZvaWQ7XG5cbi8qKiBXaGF0IGFuIGludm9rZSBleHBlY3RhdGlvbiBtYXkgYW5zd2VyIHdpdGguICovXG5leHBvcnQgdHlwZSBTY3JpcHRlZFJlcGx5PFJlcz4gPVxuXHR8IFJlc1xuXHR8IFNjcmlwdGVkRmF1bHRcblx0fCB0eXBlb2YgU0lMRU5DRVxuXHR8IFByb21pc2U8UmVzIHwgU2NyaXB0ZWRGYXVsdCB8IHR5cGVvZiBTSUxFTkNFPjtcblxuLyoqIEEgbWVzc2FnZSB0aGUgY2xpZW50IHNlbnQsIGFzIHRoZSBoYXJuZXNzIHJlY29yZGVkIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRlZENhbGwge1xuXHRyZWFkb25seSBjYWxsSWQ6IHN0cmluZztcblx0cmVhZG9ubHkga2luZDogXCJpbnZva2VcIiB8IFwic3Vic2NyaWJlXCIgfCBcInVuc3Vic2NyaWJlXCIgfCBcImhhbmRzaGFrZVwiO1xuXHQvKiogRW1wdHkgZm9yIGEgaGFuZHNoYWtlLCB3aGljaCBuYW1lcyBubyBvcGVyYXRpb24uICovXG5cdHJlYWRvbmx5IG9wZXJhdGlvbjogc3RyaW5nO1xuXHRyZWFkb25seSBwYXlsb2FkPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXHRyZWFkb25seSBzdWJzY3JpcHRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPbmUgc2NyaXB0ZWQgc3Vic2NyaXB0aW9uLiBGcmFtZXMgY2FycnkgdGhlIHNlcXVlbmNlIHRoZSBrZXJuZWwgY2hlY2tzLCBzb1xuICogYHNraXBgIGlzIHRoZSBvbmUgd2F5IHRvIHNjcmlwdCBhIGdhcC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY3JpcHRlZFN0cmVhbSB7XG5cdHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cdHJlYWRvbmx5IG9wZXJhdGlvbjogc3RyaW5nO1xuXHQvKiogYGZhbHNlYCBvbmNlIHRoZSBob3N0IGVuZGVkIGl0IG9yIHRoZSBwYWdlIGNsb3NlZCBpdC4gKi9cblx0cmVhZG9ubHkgb3BlbjogYm9vbGVhbjtcblx0ZW1pdChraW5kOiBTdHJlYW1FdmVudEtpbmQsIHBheWxvYWQ6IHVua25vd24pOiB2b2lkO1xuXHRlbmQodGVybWluYWw6IEJyaWRnZVN0cmVhbVRlcm1pbmFsKTogdm9pZDtcblx0LyoqIEFkdmFuY2UgdGhlIHNlcXVlbmNlIHdpdGhvdXQgc2VuZGluZywgc28gdGhlIG5leHQgZnJhbWUgaXMgYSBnYXAuICovXG5cdHNraXAoZnJhbWVzOiBudW1iZXIpOiB2b2lkO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgYSBzdWJzY3JpYmUgZXhwZWN0YXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmliZU9wdGlvbnMge1xuXHQvKiogRGVsYXkgdGhlIGFja25vd2xlZGdlbWVudCB1bnRpbCB0aGlzIHByb21pc2Ugc2V0dGxlcy4gKi9cblx0cmVhZG9ubHkgYWNrPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBjcmVhdGVCcmlkZ2VIYXJuZXNzfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFybmVzc09wdGlvbnMge1xuXHQvKipcblx0ICogVGhlIGhvc3Qgb3BlcmF0aW9uIGlkcyB0aGUgc2NyaXB0ZWQgaGFuZHNoYWtlIGFkdmVydGlzZXM7IGV2ZXJ5IGN1cmF0ZWRcblx0ICogaWQgYnkgZGVmYXVsdC4gQSBuYXJyb3dlZCBsaXN0IGlzIGhvdyBhIHRlc3QgcHJvdmVzIGEgcGFnZSByZXNwZWN0c1xuXHQgKiBgcWdpcy5ob3N0LmdyYW50ZWRgLiBBIGNhbGwgb3V0c2lkZSBpdCBpcyBzdGlsbCBhbnN3ZXJlZFxuXHQgKiBieSB3aGF0ZXZlciB0aGUgdGVzdCBzY3JpcHRlZCAtIHR5cGljYWxseSBgZmF1bHQoXCJub3RfYXV0aG9yaXplZFwiLCAuLi4pYCAtXG5cdCAqIGJlY2F1c2UgdGhhdCByZWZ1c2FsIGlzIHRoZSBob3N0J3MsIG5vdCB0aGUgaGFybmVzcydzLlxuXHQgKi9cblx0cmVhZG9ubHkgZ3JhbnRlZD86IHJlYWRvbmx5IEhvc3RPcGVyYXRpb25JZFtdO1xuXHQvKipcblx0ICogVGhlIHBhbGV0dGUgdGhlIHNjcmlwdGVkIGhhbmRzaGFrZSBjYXJyaWVzIGFzIGB0aGVtZWA7IG5vbmUgYnkgZGVmYXVsdCxcblx0ICogd2hpY2ggaXMgd2hhdCBhIHBhZ2Ugb3V0c2lkZSBRR0lTIHNlZXMuIFRoZSBzYW1lIHNoYXBlIHRoZSBXZWJFbmdpbmVcblx0ICogYWRhcHRlciBzZW5kcywgc28gYSB0ZXN0IGNhbiBwcm92ZSBhIHBhZ2UgdGFrZXMgdGhlIGhvc3QncyBjb2xvdXJzLlxuXHQgKi9cblx0cmVhZG9ubHkgdGhlbWU/OiBRZ2lzU2RrSG9zdFRoZW1lO1xufVxuXG4vKipcbiAqIEEgdGVzdCdzIHNjcmlwdCB3ZW50IHdyb25nOiBhbiB1bm1ldCBvciB1bmV4cGVjdGVkIGNhbGwsIGEgbGVha2VkXG4gKiBzdWJzY3JpcHRpb24sIGEgaGFuZGxlciB0aGF0IHRocmV3LCBvciBhbiBlbnZlbG9wZSB0aGF0IGlzIG5vdCBwcm90b2NvbCAxLlxuICovXG5leHBvcnQgY2xhc3MgUWdpc1Nka0JyaWRnZUhhcm5lc3NFcnJvciBleHRlbmRzIFFnaXNTZGtFcnJvciB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcblx0XHRzdXBlcihtZXNzYWdlLCBcImhhcm5lc3NfZXJyb3JcIik7XG5cdH1cbn1cblxuaW50ZXJmYWNlIEludm9rZUV4cGVjdGF0aW9uIHtcblx0cmVhZG9ubHkga2luZDogXCJpbnZva2VcIjtcblx0cmVhZG9ubHkgb3BlcmF0aW9uOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGhhbmRsZXI6IChwYXlsb2FkOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pID0+IHVua25vd247XG59XG5cbmludGVyZmFjZSBTdWJzY3JpYmVFeHBlY3RhdGlvbiB7XG5cdHJlYWRvbmx5IGtpbmQ6IFwic3Vic2NyaWJlXCI7XG5cdHJlYWRvbmx5IG9wZXJhdGlvbjogc3RyaW5nO1xuXHRyZWFkb25seSBzY3JpcHQ6IFN1YnNjcmliZVNjcmlwdDxSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+O1xuXHRyZWFkb25seSBvcHRpb25zOiBTdWJzY3JpYmVPcHRpb25zO1xufVxuXG50eXBlIEV4cGVjdGF0aW9uID0gSW52b2tlRXhwZWN0YXRpb24gfCBTdWJzY3JpYmVFeHBlY3RhdGlvbjtcblxuaW50ZXJmYWNlIE9wZW5TdHJlYW0ge1xuXHRyZWFkb25seSBpZDogc3RyaW5nO1xuXHRyZWFkb25seSBvcGVyYXRpb246IHN0cmluZztcblx0c2VxOiBudW1iZXI7XG5cdG9wZW46IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgaGFybmVzcyBhIHRlc3QgaG9sZHM7IGFsc28gdGhlIHRyYW5zcG9ydCBpdHMgY2xpZW50IGlzIGJ1aWx0IG9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmlkZ2VIYXJuZXNzPE9wIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPlxuXHRleHRlbmRzIFdpcmVUcmFuc3BvcnQge1xuXHQvKiogRXZlcnkgbWVzc2FnZSB0aGUgY2xpZW50IHNlbnQsIGluIG9yZGVyLiAqL1xuXHRyZWFkb25seSBjYWxsczogcmVhZG9ubHkgUmVjb3JkZWRDYWxsW107XG5cdC8qKiBDYWxscyBubyBleHBlY3RhdGlvbiBjb3ZlcmVkOyBlYWNoIHdhcyBhbnN3ZXJlZCBgdW5leHBlY3RlZF9jYWxsYC4gKi9cblx0cmVhZG9ubHkgdW5leHBlY3RlZDogcmVhZG9ubHkgUmVjb3JkZWRDYWxsW107XG5cdC8qKiBTdWJzY3JpcHRpb25zIG5laXRoZXIgZW5kZWQgYnkgYSBzY3JpcHQgbm9yIGNsb3NlZCBieSB0aGUgcGFnZS4gKi9cblx0cmVhZG9ubHkgb3BlblN1YnNjcmlwdGlvbnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXHQvKiogQ2xpZW50cyBjdXJyZW50bHkgYXR0YWNoZWQuICovXG5cdHJlYWRvbmx5IGxpc3RlbmVyczogbnVtYmVyO1xuXHQvKiogQW5zd2VyIHRoZSBuZXh0IGBvcGVyYXRpb25gIGNhbGwgd2l0aCB3aGF0IGBoYW5kbGVyYCByZXR1cm5zLiAqL1xuXHRleHBlY3RJbnZva2U8XG5cdFx0UmVxIGV4dGVuZHMgb2JqZWN0ID0gUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuXHRcdFJlcyA9IHVua25vd24sXG5cdD4ob3BlcmF0aW9uOiBPcCwgaGFuZGxlcjogKHBheWxvYWQ6IFJlcSkgPT4gU2NyaXB0ZWRSZXBseTxSZXM+KTogdm9pZDtcblx0LyoqXG5cdCAqIEFja25vd2xlZGdlIHRoZSBuZXh0IGBvcGVyYXRpb25gIHN1YnNjcmlwdGlvbiBhbmQgaGFuZCBgc2NyaXB0YCB0aGVcblx0ICogc3RyZWFtOyByZXR1cm4gYSBmYXVsdCBvciB7QGxpbmsgU0lMRU5DRX0gZnJvbSBpdCB0byByZWZ1c2UgaW5zdGVhZC5cblx0ICovXG5cdGV4cGVjdFN1YnNjcmliZTxSZXEgZXh0ZW5kcyBvYmplY3QgPSBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KFxuXHRcdG9wZXJhdGlvbjogT3AsXG5cdFx0c2NyaXB0OiBTdWJzY3JpYmVTY3JpcHQ8UmVxPixcblx0XHRvcHRpb25zPzogU3Vic2NyaWJlT3B0aW9ucyxcblx0KTogdm9pZDtcblx0LyoqIFB1c2ggYW55IHJhdyBtZXNzYWdlLCBmb3Igd2hhdCBubyBleHBlY3RhdGlvbiBjYW4gc2NyaXB0LiAqL1xuXHRkZWxpdmVyKHJhdzogdW5rbm93bik6IHZvaWQ7XG5cdC8qKiBSZXNvbHZlIG9uY2UgZXZlcnl0aGluZyBxdWV1ZWQgc28gZmFyIGhhcyBiZWVuIGRlbGl2ZXJlZC4gKi9cblx0c2V0dGxlZCgpOiBQcm9taXNlPHZvaWQ+O1xuXHQvKiogVGhyb3cgdW5sZXNzIGV2ZXJ5IGV4cGVjdGF0aW9uIHdhcyBtZXQgYW5kIG5vdGhpbmcgbGVha2VkLiAqL1xuXHRhc3NlcnRTYXRpc2ZpZWQoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgaGFybmVzcyB7QGxpbmsgY3JlYXRlQnJpZGdlSGFybmVzc30gcmV0dXJucyBmb3IgYSBzY2hlbWE6IHRoZSBzYW1lXG4gKiBoYXJuZXNzLCB3aXRoIGBleHBlY3RJbnZva2VgIGFuZCBgZXhwZWN0U3Vic2NyaWJlYCB0eXBlZCBieSB0aGUgc2NoZW1hJ3NcbiAqIGBPcGVyYXRpb25zYCBhbmQgYFN0cmVhbXNgIC0gYSBwYXlsb2FkIGlzIHRoZSBkZWNsYXJlZCByZXF1ZXN0LCBhIHJlcGx5IHRoZVxuICogZGVjbGFyZWQgcmVzdWx0IC0gYW5kIGJ5IHRoZSBjdXJhdGVkIGhvc3QgaWRzLCB3aG9zZSBzaGFwZXMgdGhlIGhvc3QgbW9kdWxlXG4gKiBvd25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYUJyaWRnZUhhcm5lc3M8TywgUz5cblx0ZXh0ZW5kcyBPbWl0PFxuXHRcdEJyaWRnZUhhcm5lc3M8RXh0cmFjdDxrZXlvZiBPIHwga2V5b2YgUywgc3RyaW5nPiB8IEhvc3RPcGVyYXRpb25JZD4sXG5cdFx0XCJleHBlY3RJbnZva2VcIiB8IFwiZXhwZWN0U3Vic2NyaWJlXCJcblx0PiB7XG5cdGV4cGVjdEludm9rZTxLIGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBPLCBzdHJpbmc+Pihcblx0XHRvcGVyYXRpb246IEssXG5cdFx0aGFuZGxlcjogKFxuXHRcdFx0cGF5bG9hZDogT1tLXSBleHRlbmRzIE9wZXJhdGlvblNoYXBlID8gT1tLXVtcInJlcXVlc3RcIl0gOiBuZXZlcixcblx0XHQpID0+IFNjcmlwdGVkUmVwbHk8T1tLXSBleHRlbmRzIE9wZXJhdGlvblNoYXBlID8gT1tLXVtcInJlc3VsdFwiXSA6IG5ldmVyPixcblx0KTogdm9pZDtcblx0ZXhwZWN0SW52b2tlPFxuXHRcdFJlcSBleHRlbmRzIG9iamVjdCA9IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pixcblx0XHRSZXMgPSB1bmtub3duLFxuXHQ+KFxuXHRcdG9wZXJhdGlvbjogSG9zdE9wZXJhdGlvbklkLFxuXHRcdGhhbmRsZXI6IChwYXlsb2FkOiBSZXEpID0+IFNjcmlwdGVkUmVwbHk8UmVzPixcblx0KTogdm9pZDtcblx0ZXhwZWN0U3Vic2NyaWJlPEsgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIFMsIHN0cmluZz4+KFxuXHRcdG9wZXJhdGlvbjogSyxcblx0XHRzY3JpcHQ6IFN1YnNjcmliZVNjcmlwdDxTW0tdIGV4dGVuZHMgU3RyZWFtU2hhcGUgPyBTW0tdW1wicmVxdWVzdFwiXSA6IG5ldmVyPixcblx0XHRvcHRpb25zPzogU3Vic2NyaWJlT3B0aW9ucyxcblx0KTogdm9pZDtcblx0ZXhwZWN0U3Vic2NyaWJlPFJlcSBleHRlbmRzIG9iamVjdCA9IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4oXG5cdFx0b3BlcmF0aW9uOiBIb3N0T3BlcmF0aW9uSWQsXG5cdFx0c2NyaXB0OiBTdWJzY3JpYmVTY3JpcHQ8UmVxPixcblx0XHRvcHRpb25zPzogU3Vic2NyaWJlT3B0aW9ucyxcblx0KTogdm9pZDtcbn1cblxuY2xhc3MgSGFybmVzczxPcCBleHRlbmRzIHN0cmluZz4gaW1wbGVtZW50cyBCcmlkZ2VIYXJuZXNzPE9wPiB7XG5cdHByaXZhdGUgcmVhZG9ubHkgZ3JhbnRlZDogcmVhZG9ubHkgSG9zdE9wZXJhdGlvbklkW107XG5cdHByaXZhdGUgcmVhZG9ubHkgdGhlbWU6IFFnaXNTZGtIb3N0VGhlbWUgfCB1bmRlZmluZWQ7XG5cdHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBCcmlkZ2VTY2hlbWEgfCBudWxsO1xuXHRwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVyU2V0ID0gbmV3IFNldDwobWVzc2FnZTogdW5rbm93bikgPT4gdm9pZD4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBleHBlY3RhdGlvbnM6IEV4cGVjdGF0aW9uW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSByZWNvcmRlZDogUmVjb3JkZWRDYWxsW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSB1bmV4cGVjdGVkQ2FsbHM6IFJlY29yZGVkQ2FsbFtdID0gW107XG5cdHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtcyA9IG5ldyBNYXA8c3RyaW5nLCBPcGVuU3RyZWFtPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IHByb2JsZW1zOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IG91dGJveDogdW5rbm93bltdID0gW107XG5cdHByaXZhdGUgZHJhaW5pbmc6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBzdHJlYW1Db3VudGVyID0gMDtcblxuXHRwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogSGFybmVzc09wdGlvbnMsIHBsdWdpbjogQnJpZGdlU2NoZW1hIHwgbnVsbCkge1xuXHRcdHRoaXMuZ3JhbnRlZCA9IE9iamVjdC5mcmVlemUoWy4uLihvcHRpb25zLmdyYW50ZWQgPz8gSE9TVF9PUEVSQVRJT05TKV0pO1xuXHRcdHRoaXMudGhlbWUgPSBvcHRpb25zLnRoZW1lO1xuXHRcdHRoaXMucGx1Z2luID0gcGx1Z2luO1xuXHR9XG5cblx0cHVibGljIGdldCBjYWxscygpOiByZWFkb25seSBSZWNvcmRlZENhbGxbXSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLnJlY29yZGVkXTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgdW5leHBlY3RlZCgpOiByZWFkb25seSBSZWNvcmRlZENhbGxbXSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLnVuZXhwZWN0ZWRDYWxsc107XG5cdH1cblxuXHRwdWJsaWMgZ2V0IG9wZW5TdWJzY3JpcHRpb25zKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuc3RyZWFtcy52YWx1ZXMoKV1cblx0XHRcdC5maWx0ZXIoKHN0cmVhbSkgPT4gc3RyZWFtLm9wZW4pXG5cdFx0XHQubWFwKChzdHJlYW0pID0+IHN0cmVhbS5pZCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGxpc3RlbmVycygpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmxpc3RlbmVyU2V0LnNpemU7XG5cdH1cblxuXHRwdWJsaWMgc3Vic2NyaWJlKGxpc3RlbmVyOiAobWVzc2FnZTogdW5rbm93bikgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuXHRcdHRoaXMubGlzdGVuZXJTZXQuYWRkKGxpc3RlbmVyKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dGhpcy5saXN0ZW5lclNldC5kZWxldGUobGlzdGVuZXIpO1xuXHRcdFx0aWYgKHRoaXMubGlzdGVuZXJTZXQuc2l6ZSA9PT0gMCkge1xuXHRcdFx0XHQvLyBUaGUgbGFzdCBjbGllbnQgZGV0YWNoZWQ6IHRoZSB2aWV3IGlzIGdvbmUsIGFuZCBhIGhvc3QgZGlzcG9zZXNcblx0XHRcdFx0Ly8gdGhlIHN1YnNjcmlwdGlvbnMgb2YgYSB2aWV3IGl0IGxvc3QgKGRlY2lzaW9uLTIzKSwgc28gdGhleSBhcmVcblx0XHRcdFx0Ly8gbm8gbG9uZ2VyIGxlYWtzLlxuXHRcdFx0XHRmb3IgKGNvbnN0IHN0cmVhbSBvZiB0aGlzLnN0cmVhbXMudmFsdWVzKCkpIHtcblx0XHRcdFx0XHRzdHJlYW0ub3BlbiA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHB1YmxpYyBzZW5kKG1lc3NhZ2U6IHVua25vd24pOiB2b2lkIHtcblx0XHRjb25zdCBlbnZlbG9wZSA9IHRoaXMucGFyc2VFbnZlbG9wZShtZXNzYWdlKTtcblx0XHRpZiAoZW52ZWxvcGUua2luZCA9PT0gXCJ1bnN1YnNjcmliZVwiKSB7XG5cdFx0XHR0aGlzLmNsb3NlRnJvbVBhZ2UoZW52ZWxvcGUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoZW52ZWxvcGUua2luZCA9PT0gXCJoYW5kc2hha2VcIikge1xuXHRcdFx0dGhpcy5hbnN3ZXJIYW5kc2hha2UoZW52ZWxvcGUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBleHBlY3RhdGlvbiA9IHRoaXMudGFrZShlbnZlbG9wZS5raW5kLCBlbnZlbG9wZS5vcGVyYXRpb24pO1xuXHRcdGlmIChleHBlY3RhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLnVuZXhwZWN0ZWRDYWxscy5wdXNoKGVudmVsb3BlKTtcblx0XHRcdHRoaXMuZGVsaXZlckZhaWx1cmUoXG5cdFx0XHRcdGVudmVsb3BlLmNhbGxJZCxcblx0XHRcdFx0XCJ1bmV4cGVjdGVkX2NhbGxcIixcblx0XHRcdFx0YG5vIGV4cGVjdGF0aW9uIGNvdmVycyAke2VudmVsb3BlLmtpbmR9ICR7SlNPTi5zdHJpbmdpZnkoZW52ZWxvcGUub3BlcmF0aW9uKX1gLFxuXHRcdFx0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGV4cGVjdGF0aW9uLmtpbmQgPT09IFwiaW52b2tlXCIpIHtcblx0XHRcdHRoaXMuYW5zd2VySW52b2tlKGVudmVsb3BlLCBleHBlY3RhdGlvbik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuYW5zd2VyU3Vic2NyaWJlKGVudmVsb3BlLCBleHBlY3RhdGlvbik7XG5cdH1cblxuXHRwdWJsaWMgZXhwZWN0SW52b2tlPFJlcSBleHRlbmRzIG9iamVjdCwgUmVzPihcblx0XHRvcGVyYXRpb246IE9wLFxuXHRcdGhhbmRsZXI6IChwYXlsb2FkOiBSZXEpID0+IFNjcmlwdGVkUmVwbHk8UmVzPixcblx0KTogdm9pZCB7XG5cdFx0dGhpcy5leHBlY3RhdGlvbnMucHVzaCh7XG5cdFx0XHRraW5kOiBcImludm9rZVwiLFxuXHRcdFx0b3BlcmF0aW9uLFxuXHRcdFx0aGFuZGxlcjogaGFuZGxlciBhcyBJbnZva2VFeHBlY3RhdGlvbltcImhhbmRsZXJcIl0sXG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgZXhwZWN0U3Vic2NyaWJlPFJlcSBleHRlbmRzIG9iamVjdD4oXG5cdFx0b3BlcmF0aW9uOiBPcCxcblx0XHRzY3JpcHQ6IFN1YnNjcmliZVNjcmlwdDxSZXE+LFxuXHRcdG9wdGlvbnM6IFN1YnNjcmliZU9wdGlvbnMgPSB7fSxcblx0KTogdm9pZCB7XG5cdFx0dGhpcy5leHBlY3RhdGlvbnMucHVzaCh7XG5cdFx0XHRraW5kOiBcInN1YnNjcmliZVwiLFxuXHRcdFx0b3BlcmF0aW9uLFxuXHRcdFx0c2NyaXB0OiBzY3JpcHQgYXMgU3Vic2NyaWJlRXhwZWN0YXRpb25bXCJzY3JpcHRcIl0sXG5cdFx0XHRvcHRpb25zLFxuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIGRlbGl2ZXIocmF3OiB1bmtub3duKTogdm9pZCB7XG5cdFx0dGhpcy5vdXRib3gucHVzaChyYXcpO1xuXHRcdHRoaXMuZHJhaW4oKTtcblx0fVxuXG5cdHB1YmxpYyBzZXR0bGVkKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmRyYWluaW5nID8/IFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0cHVibGljIGFzc2VydFNhdGlzZmllZCgpOiB2b2lkIHtcblx0XHRjb25zdCBwcm9ibGVtcyA9IFsuLi50aGlzLnByb2JsZW1zXTtcblx0XHRpZiAodGhpcy5leHBlY3RhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgdW5tZXQgPSB0aGlzLmV4cGVjdGF0aW9ucy5tYXAoXG5cdFx0XHRcdChleHBlY3RhdGlvbikgPT4gYCR7ZXhwZWN0YXRpb24ua2luZH0gJHtleHBlY3RhdGlvbi5vcGVyYXRpb259YCxcblx0XHRcdCk7XG5cdFx0XHRwcm9ibGVtcy5wdXNoKGB1bm1ldCBleHBlY3RhdGlvbnM6ICR7dW5tZXQuam9pbihcIiwgXCIpfWApO1xuXHRcdH1cblx0XHRpZiAodGhpcy51bmV4cGVjdGVkQ2FsbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgdW5leHBlY3RlZCA9IHRoaXMudW5leHBlY3RlZENhbGxzLm1hcChcblx0XHRcdFx0KGNhbGwpID0+IGAke2NhbGwua2luZH0gJHtjYWxsLm9wZXJhdGlvbn1gLFxuXHRcdFx0KTtcblx0XHRcdHByb2JsZW1zLnB1c2goYHVuZXhwZWN0ZWQgY2FsbHM6ICR7dW5leHBlY3RlZC5qb2luKFwiLCBcIil9YCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wZW4gPSB0aGlzLm9wZW5TdWJzY3JpcHRpb25zO1xuXHRcdGlmIChvcGVuLmxlbmd0aCA+IDApIHtcblx0XHRcdHByb2JsZW1zLnB1c2goYG9wZW4gc3Vic2NyaXB0aW9uczogJHtvcGVuLmpvaW4oXCIsIFwiKX1gKTtcblx0XHR9XG5cdFx0aWYgKHByb2JsZW1zLmxlbmd0aCA+IDApIHtcblx0XHRcdHRocm93IG5ldyBRZ2lzU2RrQnJpZGdlSGFybmVzc0Vycm9yKHByb2JsZW1zLmpvaW4oXCI7IFwiKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gLS0gYW5zd2VyaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdC8qKlxuXHQgKiBBbnN3ZXIgdGhlIGhhbmRzaGFrZSB0aGUgd2F5IGBEaXNwYXRjaGVyYCBkb2VzOiB0aGUgcGx1Z2luIGRlc2NyaXB0aW9uXG5cdCAqIHRoZSBoYXJuZXNzIHdhcyBidWlsdCBmcm9tIChvciBub25lKSBhbmQgdGhlIGFkdmVydGlzZWQgb3BlcmF0aW9uIGlkcyAtXG5cdCAqIHRoZSBwbHVnaW4ncywgdGhlbiB0aGUgZ3JhbnRlZCBob3N0IGlkcy4gTm8gZXhwZWN0YXRpb24gaXMgY29uc3VtZWQ6IGFcblx0ICogaGFuZHNoYWtlIGlzIHRoZSBTREsncyBmaXJzdCBtZXNzYWdlLCBub3Qgc29tZXRoaW5nIGEgdGVzdCBzY3JpcHRzLlxuXHQgKi9cblx0cHJpdmF0ZSBhbnN3ZXJIYW5kc2hha2UoY2FsbDogUmVjb3JkZWRDYWxsKTogdm9pZCB7XG5cdFx0Y29uc3QgZGVjbGFyZWQgPSBbXG5cdFx0XHQuLi4odGhpcy5wbHVnaW4/LmFjdGlvbnMgPz8gW10pLm1hcCgoYWN0aW9uKSA9PiBhY3Rpb24uaWQpLFxuXHRcdFx0Li4uKHRoaXMucGx1Z2luPy5zdHJlYW1zID8/IFtdKS5tYXAoKHN0cmVhbSkgPT4gc3RyZWFtLmlkKSxcblx0XHRdO1xuXHRcdHRoaXMuZGVsaXZlcih7XG5cdFx0XHRwcm90b2NvbDogUFJPVE9DT0wsXG5cdFx0XHRjYWxsX2lkOiBjYWxsLmNhbGxJZCxcblx0XHRcdG9rOiB0cnVlLFxuXHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0cHJvdG9jb2w6IFBST1RPQ09MLFxuXHRcdFx0XHRnZW5lcmF0aW9uOiAwLFxuXHRcdFx0XHRwbHVnaW46IHRoaXMucGx1Z2luLFxuXHRcdFx0XHRob3N0X3NjaGVtYV92ZXJzaW9uOiBIT1NUX1NDSEVNQV9WRVJTSU9OLFxuXHRcdFx0XHRvcGVyYXRpb25zOiBbLi4uZGVjbGFyZWQsIC4uLnRoaXMuZ3JhbnRlZF0ubWFwKChpZCkgPT4gKHtcblx0XHRcdFx0XHRpZCxcblx0XHRcdFx0XHR0aXRsZTogaWQsXG5cdFx0XHRcdH0pKSxcblx0XHRcdFx0Li4uKHRoaXMudGhlbWUgPT09IHVuZGVmaW5lZCA/IHt9IDogeyB0aGVtZTogdGhpcy50aGVtZSB9KSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGFuc3dlckludm9rZShcblx0XHRjYWxsOiBSZWNvcmRlZENhbGwsXG5cdFx0ZXhwZWN0YXRpb246IEludm9rZUV4cGVjdGF0aW9uLFxuXHQpOiB2b2lkIHtcblx0XHR0aGlzLnJlc29sdmVIYW5kbGVyKGNhbGwsICgpID0+XG5cdFx0XHRleHBlY3RhdGlvbi5oYW5kbGVyKGNhbGwucGF5bG9hZCA/PyB7fSksXG5cdFx0KS50aGVuKChyZXBseSkgPT4ge1xuXHRcdFx0aWYgKHJlcGx5ID09PSBTSUxFTkNFKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChpc0ZhdWx0KHJlcGx5KSkge1xuXHRcdFx0XHR0aGlzLmRlbGl2ZXJGYWlsdXJlKGNhbGwuY2FsbElkLCByZXBseS5mYXVsdC5jb2RlLCByZXBseS5mYXVsdC5tZXNzYWdlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5kZWxpdmVyKHtcblx0XHRcdFx0cHJvdG9jb2w6IFBST1RPQ09MLFxuXHRcdFx0XHRjYWxsX2lkOiBjYWxsLmNhbGxJZCxcblx0XHRcdFx0b2s6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiByZXBseSxcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhbnN3ZXJTdWJzY3JpYmUoXG5cdFx0Y2FsbDogUmVjb3JkZWRDYWxsLFxuXHRcdGV4cGVjdGF0aW9uOiBTdWJzY3JpYmVFeHBlY3RhdGlvbixcblx0KTogdm9pZCB7XG5cdFx0dGhpcy5zdHJlYW1Db3VudGVyICs9IDE7XG5cdFx0Y29uc3Qgb3BlbjogT3BlblN0cmVhbSA9IHtcblx0XHRcdGlkOiBgcyR7dGhpcy5zdHJlYW1Db3VudGVyfWAsXG5cdFx0XHRvcGVyYXRpb246IGNhbGwub3BlcmF0aW9uLFxuXHRcdFx0c2VxOiAwLFxuXHRcdFx0b3BlbjogZmFsc2UsXG5cdFx0fTtcblx0XHQvLyBGcmFtZXMgdGhlIHNjcmlwdCBlbWl0cyBiZWZvcmUgdGhlIGFja25vd2xlZGdlbWVudCBpcyBkZWNpZGVkIGFyZSBoZWxkXG5cdFx0Ly8gYmFjazogYSByZWZ1c2VkIHN1YnNjcmlwdGlvbiBzZW5kcyBub25lLCBhbiBhY2NlcHRlZCBvbmUgc2VuZHMgdGhlbVxuXHRcdC8vIGFmdGVyIHRoZSBhY2tub3dsZWRnZW1lbnQsIHNvIHRoZSBrZXJuZWwgaGFzIHJlZ2lzdGVyZWQgdGhlXG5cdFx0Ly8gc3Vic2NyaXB0aW9uIGJ5IHRoZSB0aW1lIHRoZSBmaXJzdCBmcmFtZSByZWFjaGVzIGl0LlxuXHRcdGNvbnN0IGhlbGQ6IHVua25vd25bXSA9IFtdO1xuXHRcdGxldCBzaW5rID0gKGZyYW1lOiB1bmtub3duKTogdm9pZCA9PiB7XG5cdFx0XHRoZWxkLnB1c2goZnJhbWUpO1xuXHRcdH07XG5cdFx0Y29uc3Qgc3RyZWFtID0gdGhpcy5zY3JpcHRlZChvcGVuLCAoZnJhbWUpID0+IHNpbmsoZnJhbWUpKTtcblx0XHRjb25zdCBhY2sgPSBleHBlY3RhdGlvbi5vcHRpb25zLmFjayA/PyAoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHRcdGFjaygpXG5cdFx0XHQudGhlbigoKSA9PlxuXHRcdFx0XHR0aGlzLnJlc29sdmVIYW5kbGVyKGNhbGwsICgpID0+IHtcblx0XHRcdFx0XHRvcGVuLm9wZW4gPSB0cnVlO1xuXHRcdFx0XHRcdHJldHVybiBleHBlY3RhdGlvbi5zY3JpcHQoY2FsbC5wYXlsb2FkID8/IHt9LCBzdHJlYW0pO1xuXHRcdFx0XHR9KSxcblx0XHRcdClcblx0XHRcdC50aGVuKChvdXRjb21lKSA9PiB7XG5cdFx0XHRcdGlmIChvdXRjb21lID09PSBTSUxFTkNFIHx8IGlzRmF1bHQob3V0Y29tZSkpIHtcblx0XHRcdFx0XHRvcGVuLm9wZW4gPSBmYWxzZTtcblx0XHRcdFx0XHRoZWxkLmxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0aWYgKGlzRmF1bHQob3V0Y29tZSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuZGVsaXZlckZhaWx1cmUoXG5cdFx0XHRcdFx0XHRcdGNhbGwuY2FsbElkLFxuXHRcdFx0XHRcdFx0XHRvdXRjb21lLmZhdWx0LmNvZGUsXG5cdFx0XHRcdFx0XHRcdG91dGNvbWUuZmF1bHQubWVzc2FnZSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5saXN0ZW5lclNldC5zaXplID09PSAwKSB7XG5cdFx0XHRcdFx0Ly8gVGhlIHZpZXcgZGV0YWNoZWQgd2hpbGUgdGhlIGhvc3Qgd2FzIGRlY2lkaW5nOiBub3RoaW5nIHRvXG5cdFx0XHRcdFx0Ly8gYWNrbm93bGVkZ2UgdG8sIG5vdGhpbmcgdG8ga2VlcCBvcGVuLlxuXHRcdFx0XHRcdG9wZW4ub3BlbiA9IGZhbHNlO1xuXHRcdFx0XHRcdGhlbGQubGVuZ3RoID0gMDtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zdHJlYW1zLnNldChvcGVuLmlkLCBvcGVuKTtcblx0XHRcdFx0dGhpcy5kZWxpdmVyKHtcblx0XHRcdFx0XHRwcm90b2NvbDogUFJPVE9DT0wsXG5cdFx0XHRcdFx0Y2FsbF9pZDogY2FsbC5jYWxsSWQsXG5cdFx0XHRcdFx0b2s6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0XHRcdHN1YnNjcmlwdGlvbl9pZDogb3Blbi5pZCxcblx0XHRcdFx0XHRcdGNhcGFjaXR5OiBTVUJTQ1JJUFRJT05fQ0FQQUNJVFksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNpbmsgPSAoZnJhbWUpID0+IHRoaXMuZGVsaXZlcihmcmFtZSk7XG5cdFx0XHRcdGZvciAoY29uc3QgZnJhbWUgb2YgaGVsZCkge1xuXHRcdFx0XHRcdHNpbmsoZnJhbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGhlbGQubGVuZ3RoID0gMDtcblx0XHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlSGFuZGxlcihcblx0XHRjYWxsOiBSZWNvcmRlZENhbGwsXG5cdFx0cnVuOiAoKSA9PiB1bmtub3duLFxuXHQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dW5rbm93bj4oKHJlc29sdmUpID0+IHtcblx0XHRcdHJlc29sdmUocnVuKCkpO1xuXHRcdH0pLmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcblx0XHRcdHRoaXMucHJvYmxlbXMucHVzaChcblx0XHRcdFx0YGhhbmRsZXIgZm9yICR7Y2FsbC5raW5kfSAke2NhbGwub3BlcmF0aW9ufSB0aHJldzogJHttZXNzYWdlfWAsXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGZhdWx0KFwiaGFybmVzc19lcnJvclwiLCBtZXNzYWdlKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc2NyaXB0ZWQoXG5cdFx0b3BlbjogT3BlblN0cmVhbSxcblx0XHRzaW5rOiAoZnJhbWU6IHVua25vd24pID0+IHZvaWQsXG5cdCk6IFNjcmlwdGVkU3RyZWFtIHtcblx0XHRjb25zdCByZXF1aXJlT3BlbiA9ICh2ZXJiOiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRcdGlmICghb3Blbi5vcGVuKSB7XG5cdFx0XHRcdHRocm93IG5ldyBRZ2lzU2RrQnJpZGdlSGFybmVzc0Vycm9yKFxuXHRcdFx0XHRcdGBjYW5ub3QgJHt2ZXJifSBvbiBzdWJzY3JpcHRpb24gJHtvcGVuLmlkfTogaXQgaXMgbm90IG9wZW5gLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiBvcGVuLmlkLFxuXHRcdFx0b3BlcmF0aW9uOiBvcGVuLm9wZXJhdGlvbixcblx0XHRcdGdldCBvcGVuKCk6IGJvb2xlYW4ge1xuXHRcdFx0XHRyZXR1cm4gb3Blbi5vcGVuO1xuXHRcdFx0fSxcblx0XHRcdGVtaXQ6IChraW5kLCBwYXlsb2FkKSA9PiB7XG5cdFx0XHRcdHJlcXVpcmVPcGVuKFwiZW1pdFwiKTtcblx0XHRcdFx0c2luayh7XG5cdFx0XHRcdFx0cHJvdG9jb2w6IFBST1RPQ09MLFxuXHRcdFx0XHRcdHN1YnNjcmlwdGlvbl9pZDogb3Blbi5pZCxcblx0XHRcdFx0XHRzZXE6IG9wZW4uc2VxLFxuXHRcdFx0XHRcdGV2ZW50OiB7IGtpbmQsIHBheWxvYWQgfSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdG9wZW4uc2VxICs9IDE7XG5cdFx0XHR9LFxuXHRcdFx0ZW5kOiAodGVybWluYWwpID0+IHtcblx0XHRcdFx0cmVxdWlyZU9wZW4oXCJlbmRcIik7XG5cdFx0XHRcdG9wZW4ub3BlbiA9IGZhbHNlO1xuXHRcdFx0XHRzaW5rKHtcblx0XHRcdFx0XHRwcm90b2NvbDogUFJPVE9DT0wsXG5cdFx0XHRcdFx0c3Vic2NyaXB0aW9uX2lkOiBvcGVuLmlkLFxuXHRcdFx0XHRcdHNlcTogb3Blbi5zZXEsXG5cdFx0XHRcdFx0dGVybWluYWwsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRvcGVuLnNlcSArPSAxO1xuXHRcdFx0fSxcblx0XHRcdHNraXA6IChmcmFtZXMpID0+IHtcblx0XHRcdFx0cmVxdWlyZU9wZW4oXCJza2lwXCIpO1xuXHRcdFx0XHRvcGVuLnNlcSArPSBmcmFtZXM7XG5cdFx0XHR9LFxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGNsb3NlRnJvbVBhZ2UoY2FsbDogUmVjb3JkZWRDYWxsKTogdm9pZCB7XG5cdFx0Y29uc3Qgb3BlbiA9XG5cdFx0XHRjYWxsLnN1YnNjcmlwdGlvbklkID09PSB1bmRlZmluZWRcblx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0OiB0aGlzLnN0cmVhbXMuZ2V0KGNhbGwuc3Vic2NyaXB0aW9uSWQpO1xuXHRcdGNvbnN0IGRpc3Bvc2VkID0gb3Blbj8ub3BlbiA9PT0gdHJ1ZTtcblx0XHRpZiAob3BlbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcGVuLm9wZW4gPSBmYWxzZTtcblx0XHR9XG5cdFx0dGhpcy5kZWxpdmVyKHtcblx0XHRcdHByb3RvY29sOiBQUk9UT0NPTCxcblx0XHRcdGNhbGxfaWQ6IGNhbGwuY2FsbElkLFxuXHRcdFx0b2s6IHRydWUsXG5cdFx0XHR2YWx1ZTogeyBkaXNwb3NlZCB9LFxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBkZWxpdmVyRmFpbHVyZShjYWxsSWQ6IHN0cmluZywgY29kZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLmRlbGl2ZXIoe1xuXHRcdFx0cHJvdG9jb2w6IFBST1RPQ09MLFxuXHRcdFx0Y2FsbF9pZDogY2FsbElkLFxuXHRcdFx0b2s6IGZhbHNlLFxuXHRcdFx0ZXJyb3I6IHsgY29kZSwgbWVzc2FnZSB9LFxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBkcmFpbigpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5kcmFpbmluZyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmRyYWluaW5nID0gKGFzeW5jICgpID0+IHtcblx0XHRcdHdoaWxlICh0aGlzLm91dGJveC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gdGhpcy5vdXRib3guc2hpZnQoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBsaXN0ZW5lciBvZiBbLi4udGhpcy5saXN0ZW5lclNldF0pIHtcblx0XHRcdFx0XHRsaXN0ZW5lcihtZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5kcmFpbmluZyA9IG51bGw7XG5cdFx0fSkoKTtcblx0fVxuXG5cdC8vIC0tIHBhcnNpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHByaXZhdGUgdGFrZShcblx0XHRraW5kOiBcImludm9rZVwiIHwgXCJzdWJzY3JpYmVcIixcblx0XHRvcGVyYXRpb246IHN0cmluZyxcblx0KTogRXhwZWN0YXRpb24gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5leHBlY3RhdGlvbnMuZmluZEluZGV4KFxuXHRcdFx0KGV4cGVjdGF0aW9uKSA9PlxuXHRcdFx0XHRleHBlY3RhdGlvbi5raW5kID09PSBraW5kICYmIGV4cGVjdGF0aW9uLm9wZXJhdGlvbiA9PT0gb3BlcmF0aW9uLFxuXHRcdCk7XG5cdFx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZXhwZWN0YXRpb25zLnNwbGljZShpbmRleCwgMSlbMF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlRW52ZWxvcGUobWVzc2FnZTogdW5rbm93bik6IFJlY29yZGVkQ2FsbCB7XG5cdFx0aWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBRZ2lzU2RrQnJpZGdlSGFybmVzc0Vycm9yKFwidGhlIGNsaWVudCBzZW50IGEgbm9uLW9iamVjdFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgcmF3ID0gbWVzc2FnZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRpZiAocmF3LnByb3RvY29sICE9PSBQUk9UT0NPTCkge1xuXHRcdFx0dGhyb3cgbmV3IFFnaXNTZGtCcmlkZ2VIYXJuZXNzRXJyb3IoXG5cdFx0XHRcdGB0aGUgY2xpZW50IHNwZWFrcyBwcm90b2NvbCAke1N0cmluZyhyYXcucHJvdG9jb2wpfTsgdGhlIGhhcm5lc3MgZmFrZXMgJHtQUk9UT0NPTH1gLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiByYXcuY2FsbF9pZCAhPT0gXCJzdHJpbmdcIiB8fCByYXcuY2FsbF9pZC5sZW5ndGggPT09IDApIHtcblx0XHRcdHRocm93IG5ldyBRZ2lzU2RrQnJpZGdlSGFybmVzc0Vycm9yKFwidGhlIGNsaWVudCBzZW50IG5vIGNhbGxfaWRcIik7XG5cdFx0fVxuXHRcdGNvbnN0IGNhbGxJZCA9IHJhdy5jYWxsX2lkO1xuXHRcdGlmIChyYXcua2luZCA9PT0gXCJ1bnN1YnNjcmliZVwiKSB7XG5cdFx0XHRjb25zdCBzdWJzY3JpcHRpb25JZCA9IHJhdy5zdWJzY3JpcHRpb25faWQ7XG5cdFx0XHRpZiAodHlwZW9mIHN1YnNjcmlwdGlvbklkICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHRocm93IG5ldyBRZ2lzU2RrQnJpZGdlSGFybmVzc0Vycm9yKFxuXHRcdFx0XHRcdGAke2NhbGxJZH06IHVuc3Vic2NyaWJlIG5hbWVzIG5vIHN1YnNjcmlwdGlvbl9pZGAsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjYWxsOiBSZWNvcmRlZENhbGwgPSB7XG5cdFx0XHRcdGNhbGxJZCxcblx0XHRcdFx0a2luZDogXCJ1bnN1YnNjcmliZVwiLFxuXHRcdFx0XHRvcGVyYXRpb246IHRoaXMuc3RyZWFtcy5nZXQoc3Vic2NyaXB0aW9uSWQpPy5vcGVyYXRpb24gPz8gXCJcIixcblx0XHRcdFx0c3Vic2NyaXB0aW9uSWQsXG5cdFx0XHR9O1xuXHRcdFx0dGhpcy5yZWNvcmRlZC5wdXNoKGNhbGwpO1xuXHRcdFx0cmV0dXJuIGNhbGw7XG5cdFx0fVxuXHRcdGlmIChyYXcua2luZCA9PT0gXCJoYW5kc2hha2VcIikge1xuXHRcdFx0Y29uc3QgY2FsbDogUmVjb3JkZWRDYWxsID0geyBjYWxsSWQsIGtpbmQ6IFwiaGFuZHNoYWtlXCIsIG9wZXJhdGlvbjogXCJcIiB9O1xuXHRcdFx0dGhpcy5yZWNvcmRlZC5wdXNoKGNhbGwpO1xuXHRcdFx0cmV0dXJuIGNhbGw7XG5cdFx0fVxuXHRcdGlmIChyYXcua2luZCAhPT0gXCJpbnZva2VcIiAmJiByYXcua2luZCAhPT0gXCJzdWJzY3JpYmVcIikge1xuXHRcdFx0dGhyb3cgbmV3IFFnaXNTZGtCcmlkZ2VIYXJuZXNzRXJyb3IoXG5cdFx0XHRcdGAke2NhbGxJZH06ICR7U3RyaW5nKHJhdy5raW5kKX0gaXMgbm90IGEgYnJpZGdlIGVudmVsb3BlIGtpbmRgLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiByYXcub3BlcmF0aW9uICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHR0aHJvdyBuZXcgUWdpc1Nka0JyaWRnZUhhcm5lc3NFcnJvcihcblx0XHRcdFx0YCR7Y2FsbElkfTogb3BlcmF0aW9uIG11c3QgYmUgYSBzdHJpbmdgLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Y29uc3QgcGF5bG9hZCA9XG5cdFx0XHR0eXBlb2YgcmF3LnBheWxvYWQgPT09IFwib2JqZWN0XCIgJiYgcmF3LnBheWxvYWQgIT09IG51bGxcblx0XHRcdFx0PyAocmF3LnBheWxvYWQgYXMgUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KVxuXHRcdFx0XHQ6IHt9O1xuXHRcdGNvbnN0IGNhbGw6IFJlY29yZGVkQ2FsbCA9IHtcblx0XHRcdGNhbGxJZCxcblx0XHRcdGtpbmQ6IHJhdy5raW5kLFxuXHRcdFx0b3BlcmF0aW9uOiByYXcub3BlcmF0aW9uLFxuXHRcdFx0cGF5bG9hZCxcblx0XHR9O1xuXHRcdHRoaXMucmVjb3JkZWQucHVzaChjYWxsKTtcblx0XHRyZXR1cm4gY2FsbDtcblx0fVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGhhcm5lc3MuXG4gKlxuICogR2l2ZW4gdGhlIGdlbmVyYXRlZCBgYnJpZGdlLnNjaGVtYS50c2AgZGVmYXVsdCBleHBvcnQsIHRoZSBoYXJuZXNzIGlzIHR5cGVkXG4gKiBieSBpdDogYGV4cGVjdEludm9rZShcInNpdGVzLnN1bW1hcnlcIiwgKHBheWxvYWQpID0+IC4uLilgIHNlZXMgdGhlIGRlY2xhcmVkXG4gKiByZXF1ZXN0IGFuZCBtdXN0IGFuc3dlciB3aXRoIHRoZSBkZWNsYXJlZCByZXN1bHQsIGFuZCB0aGUgaGFuZHNoYWtlIGl0XG4gKiBhbnN3ZXJzIGFkdmVydGlzZXMgdGhlIHNjaGVtYSdzIG9wZXJhdGlvbnMuIFdpdGhvdXQgb25lLCBgT3BgIG5hcnJvd3MgdGhlXG4gKiBvcGVyYXRpb25zIGEgdGVzdCBtYXkgZXhwZWN0LCB0eXBpY2FsbHkgYSBnZW5lcmF0ZWQgYE9wZXJhdGlvbklkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJyaWRnZUhhcm5lc3M8T3AgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KFxuXHRvcHRpb25zPzogSGFybmVzc09wdGlvbnMsXG4pOiBCcmlkZ2VIYXJuZXNzPE9wPjtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCcmlkZ2VIYXJuZXNzPE8sIFM+KFxuXHRzY2hlbWE6IEJyaWRnZVNjaGVtYTxPLCBTPixcblx0b3B0aW9ucz86IEhhcm5lc3NPcHRpb25zLFxuKTogU2NoZW1hQnJpZGdlSGFybmVzczxPLCBTPjtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCcmlkZ2VIYXJuZXNzKFxuXHRmaXJzdDogSGFybmVzc09wdGlvbnMgfCBCcmlkZ2VTY2hlbWEgPSB7fSxcblx0c2Vjb25kOiBIYXJuZXNzT3B0aW9ucyA9IHt9LFxuKTogQnJpZGdlSGFybmVzcyB8IFNjaGVtYUJyaWRnZUhhcm5lc3M8dW5rbm93biwgdW5rbm93bj4ge1xuXHRpZiAoXCJzY2hlbWFfdmVyc2lvblwiIGluIGZpcnN0KSB7XG5cdFx0cmV0dXJuIG5ldyBIYXJuZXNzPHN0cmluZz4oc2Vjb25kLCBmaXJzdCkgYXMgU2NoZW1hQnJpZGdlSGFybmVzczxcblx0XHRcdHVua25vd24sXG5cdFx0XHR1bmtub3duXG5cdFx0Pjtcblx0fVxuXHRyZXR1cm4gbmV3IEhhcm5lc3M8c3RyaW5nPihmaXJzdCwgbnVsbCk7XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7QUFnQ0EsSUFBTSxXQUFXO0FBQ2pCLElBQU0sd0JBQXdCO0FBUXZCLFNBQVMsS0FBSyxDQUFDLE1BQWMsU0FBZ0M7QUFBQSxFQUNuRSxPQUFPLE9BQU8sT0FBTyxFQUFFLE9BQU8sT0FBTyxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQUE7QUFHakUsU0FBUyxPQUFPLENBQUMsT0FBd0M7QUFBQSxFQUN4RCxPQUNDLE9BQU8sVUFBVSxZQUNqQixVQUFVLFFBQ1YsV0FBVyxTQUNYLE9BQVEsTUFBd0IsVUFBVTtBQUFBO0FBS3JDLElBQU0sVUFBeUIsT0FBTywwQkFBMEI7QUFBQTtBQTJFaEUsTUFBTSxrQ0FBa0MsY0FBYTtBQUFBLEVBQ3BELFdBQVcsQ0FBQyxTQUFpQjtBQUFBLElBQ25DLE1BQU0sU0FBUyxlQUFlO0FBQUE7QUFFaEM7QUFBQTtBQThGQSxNQUFNLFFBQXdEO0FBQUEsRUFDNUM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsY0FBYyxJQUFJO0FBQUEsRUFDbEIsZUFBOEIsQ0FBQztBQUFBLEVBQy9CLFdBQTJCLENBQUM7QUFBQSxFQUM1QixrQkFBa0MsQ0FBQztBQUFBLEVBQ25DLFVBQVUsSUFBSTtBQUFBLEVBQ2QsV0FBcUIsQ0FBQztBQUFBLEVBQ3RCLFNBQW9CLENBQUM7QUFBQSxFQUM5QixXQUFpQztBQUFBLEVBQ2pDLGdCQUFnQjtB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LEdBQUcsV0FBVyxPQUFPLElBQUksSUFBSSxpQ0FDOUI7QUFBQSxJQUNEO0FBQUEsSUFDQSxJQUFJLE9BQU8sSUFBSSxjQUFjLFVBQVU7QUFBQSxNQUN0QyxNQUFNLElBQUksMEJBQ1QsR0FBRyxvQ0FDSjtBQUFBLElBQ0Q7QUFBQSxJQUNBLE1BQU0sVUFDTCxPQUFPLElBQUksWUFBWSxZQUFZLElBQUksWUFBWSxPQUMvQyxJQUFJLFVBQ0wsQ0FBQztBQUFBLElBQ0wsTUFBTSxPQUFxQjtBQUFBLE1BQzFCO0FBQUEsTUFDQSxNQUFNLElBQUk7QUFBQSxNQUNWLFdBQVcsSUFBSTtBQUFBLE1BQ2Y7QUFBQSxJQUNEO0FBQUEsSUFDQSxLQUFLLFNBQVMsS0FBSyxJQUFJO0FBQUEsSUFDdkIsT0FBTztBQUFBO0FBRVQ7QUFrQk8sU0FBUyxtQkFBbUIsQ0FDbEMsUUFBdUMsQ0FBQyxHQUN4QyxTQUF5QixDQUFDLEdBQzhCO0FBQUEsRUFDeEQsSUFBSSxvQkFBb0IsT0FBTztBQUFBLElBQzlCLE9BQU8sSUFBSSxRQUFnQixRQUFRLEtBQUs7QUFBQSxFQUl6QztBQUFBLEVBQ0EsT0FBTyxJQUFJLFFBQWdCLE9BQU8sSUFBSTtBQUFBOyIsCiAgImRlYnVnSWQiOiAiOEMzQ0QxNkJCNDRCMUVDNDY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
package/dist/vue.d.ts ADDED
@@ -0,0 +1,106 @@
1
+ import "./shared/chunk-wtv4vt4q.js";
2
+ import "./shared/chunk-7tgzmz0m.js";
3
+ import { OperationMap2, StreamMap2, QgisSdkCore2, QgisSdk2 } from "./shared/chunk-a33y575v.js";
4
+ import { Store2, OperationState2, Operation2, OperationStore2, StreamTerminalLike2, StreamHandleLike2, StreamHandlersLike2, Stream2, StreamState2, StreamStore2, FormState2, FormOptions2, FormStore2, HostQueryState2, HostQueryStore2 } from "./shared/chunk-3zscfm3y.js";
5
+ import { QgisSdkError2 } from "./shared/chunk-pdj2fxjb.js";
6
+ import { InjectionKey, MaybeRefOrGetter, ShallowRef } from "vue";
7
+ /** A composable was used outside the shape it needs. */
8
+ declare class QgisSdkBridgeVueError extends QgisSdkError2 {
9
+ constructor(message: string);
10
+ }
11
+ /** The injection key `provideQgisSdk` writes and `useQgisSdk` reads. */
12
+ declare const QGIS_SDK_KEY: InjectionKey<QgisSdkCore2<unknown, unknown>>;
13
+ /**
14
+ * Share a `QgisSdk` with the component subtree; call in `setup()`.
15
+ *
16
+ * The SDK is shared as given, whatever its schema, and never closed here:
17
+ * the page that built it closes it.
18
+ */
19
+ declare function provideQgisSdk(qgis: QgisSdkCore2<unknown, unknown>): void;
20
+ /**
21
+ * The `QgisSdk` the nearest `provideQgisSdk` shared.
22
+ *
23
+ * The type parameters name the generated `Operations` and `Streams`; they are
24
+ * the caller's claim, the same way the provider's argument was the page's.
25
+ */
26
+ declare function useQgisSdk<
27
+ O = OperationMap2,
28
+ S = StreamMap2
29
+ >(): QgisSdk2<O, S>;
30
+ /**
31
+ * Follow any store as a shallow ref; the subscription ends with the scope.
32
+ */
33
+ declare function useStore<T>(store: Store2<T>): Readonly<ShallowRef<T>>;
34
+ /** What {@link useOperation} returns. */
35
+ interface UseOperation<
36
+ I,
37
+ R
38
+ > {
39
+ readonly state: Readonly<ShallowRef<OperationState2<R>>>;
40
+ /** Resolves with the value, or `undefined` when the state carries why not. */
41
+ run(input: I): Promise<R | undefined>;
42
+ /** Abort the in-flight call locally; the host may still run it. */
43
+ abort(): void;
44
+ /** Back to `idle`, aborting anything in flight. */
45
+ reset(): void;
46
+ readonly store: OperationStore2<I, R>;
47
+ }
48
+ /**
49
+ * Run a generated operation from a component; disposing the scope aborts
50
+ * whatever is in flight.
51
+ */
52
+ declare function useOperation<
53
+ I,
54
+ R
55
+ >(operation: Operation2<I, R>): UseOperation<I, R>;
56
+ /** A value, a ref or a getter: what `useStream` accepts as its input. */
57
+ type StreamInput<I> = MaybeRefOrGetter<I | null>;
58
+ /**
59
+ * Hold a generated stream open while the scope lives.
60
+ *
61
+ * `input` may be a value, a ref or a getter; the subscription follows its
62
+ * *content* - a new object with the same fields reopens nothing, a different
63
+ * one closes and reopens, `null` closes. Disposing the scope closes the
64
+ * stream, even before the host acknowledged it.
65
+ */
66
+ declare function useStream<
67
+ I,
68
+ E
69
+ >(open: Stream2<I, E>, input: StreamInput<I>, handlers?: StreamHandlersLike2<E>): Readonly<ShallowRef<StreamState2<E>>> & {
70
+ readonly store: StreamStore2<I, E>;
71
+ };
72
+ type RequestOf<
73
+ O,
74
+ K extends keyof O
75
+ > = O[K] extends {
76
+ readonly request: infer Req;
77
+ } ? Req : never;
78
+ type ResultOf<
79
+ O,
80
+ K extends keyof O
81
+ > = O[K] extends {
82
+ readonly result: infer Res;
83
+ } ? Res : never;
84
+ /**
85
+ * The form of one declared action: `qgis.<id>` with its fields, values,
86
+ * issues and submission; disposing the scope aborts a submission in flight.
87
+ */
88
+ declare function useForm<
89
+ O,
90
+ K extends keyof O & string
91
+ >(qgis: QgisSdkCore2<O, unknown>, id: K, options?: FormOptions2): {
92
+ readonly state: Readonly<ShallowRef<FormState2<ResultOf<O, K>>>>;
93
+ readonly form: FormStore2<RequestOf<O, K> & object, ResultOf<O, K>>;
94
+ };
95
+ /**
96
+ * Follow a host query store: `useHostQuery(layersQuery(qgis))` for a layer
97
+ * picker. `refresh` runs at once unless `auto` is `false`; disposing the
98
+ * scope aborts a load in flight.
99
+ */
100
+ declare function useHostQuery<T>(store: HostQueryStore2<T>, options?: {
101
+ readonly auto?: boolean;
102
+ }): {
103
+ readonly state: Readonly<ShallowRef<HostQueryState2<T>>>;
104
+ readonly query: HostQueryStore2<T>;
105
+ };
106
+ export { Operation2 as Operation, OperationState2 as OperationState, QGIS_SDK_KEY, QgisSdkBridgeVueError, Stream2 as Stream, StreamHandleLike2 as StreamHandleLike, StreamHandlersLike2 as StreamHandlersLike, StreamInput, StreamState2 as StreamState, StreamTerminalLike2 as StreamTerminalLike, UseOperation, provideQgisSdk, useForm, useHostQuery, useOperation, useQgisSdk, useStore, useStream };
package/dist/vue.js ADDED
@@ -0,0 +1,91 @@
1
+ import"./shared/chunk-8gawbn19.js";
2
+ import {
3
+ OperationStore2,
4
+ StreamStore2,
5
+ FormStore2
6
+ } from "./shared/chunk-t1vpt5yq.js";
7
+ import {
8
+ QgisSdkError2
9
+ } from "./shared/chunk-2hwva3a3.js";
10
+
11
+ // src/vue.ts
12
+ import {
13
+ inject,
14
+ onScopeDispose,
15
+ provide,
16
+ shallowRef,
17
+ toValue,
18
+ watch
19
+ } from "vue";
20
+ class QgisSdkBridgeVueError extends QgisSdkError2 {
21
+ constructor(message) {
22
+ super(message, "vue_binding");
23
+ }
24
+ }
25
+ var QGIS_SDK_KEY = Symbol("qgis-sdk");
26
+ function provideQgisSdk(qgis) {
27
+ provide(QGIS_SDK_KEY, qgis);
28
+ }
29
+ function useQgisSdk() {
30
+ const qgis = inject(QGIS_SDK_KEY, null) ?? null;
31
+ if (qgis === null) {
32
+ throw new QgisSdkBridgeVueError("useQgisSdk needs provideQgisSdk in an ancestor's setup()");
33
+ }
34
+ return qgis;
35
+ }
36
+ function useStore(store) {
37
+ const state = shallowRef(store.getSnapshot());
38
+ const stop = store.subscribe((snapshot) => {
39
+ state.value = snapshot;
40
+ });
41
+ onScopeDispose(stop);
42
+ return state;
43
+ }
44
+ function useOperation(operation) {
45
+ const store = new OperationStore2(operation);
46
+ onScopeDispose(store.abort);
47
+ return {
48
+ state: useStore(store),
49
+ run: store.run,
50
+ abort: store.abort,
51
+ reset: store.reset,
52
+ store
53
+ };
54
+ }
55
+ function useStream(open, input, handlers = {}) {
56
+ const store = new StreamStore2(open, handlers);
57
+ const state = useStore(store);
58
+ watch(() => toValue(input), (value) => store.setInput(value), {
59
+ immediate: true,
60
+ deep: true
61
+ });
62
+ onScopeDispose(store.close);
63
+ return Object.assign(state, { store });
64
+ }
65
+ function useForm(qgis, id, options) {
66
+ const form = new FormStore2(qgis, id, options);
67
+ onScopeDispose(() => form.dispose());
68
+ return { state: useStore(form), form };
69
+ }
70
+ function useHostQuery(store, options = {}) {
71
+ const state = useStore(store);
72
+ if (options.auto !== false) {
73
+ store.refresh();
74
+ }
75
+ onScopeDispose(store.abort);
76
+ return { state, query: store };
77
+ }
78
+ export {
79
+ QGIS_SDK_KEY,
80
+ QgisSdkBridgeVueError,
81
+ provideQgisSdk,
82
+ useForm,
83
+ useHostQuery,
84
+ useOperation,
85
+ useQgisSdk,
86
+ useStore,
87
+ useStream
88
+ };
89
+
90
+ //# debugId=A81518D4B333BE6C64756E2164756E21
91
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3Z1ZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvKipcbiAqIFRoaW4gVnVlIDMgYmluZGluZ3Mgb3ZlciB0aGUgc3RvcmUgY29yZSAoZGVjaXNpb24tNDcpLlxuICpcbiAqIFRoaXMgZW50cnkgcG9pbnQgaXMgb3B0aW9uYWwgYW5kIGlzIHRoZSBvbmx5IG9uZSB0aGF0IGltcG9ydHMgVnVlLiBJdCBhZGRzXG4gKiBubyBiZWhhdmlvdXI6IGV2ZXJ5IGNvbXBvc2FibGUgd3JhcHMgb25lIHN0b3JlIGZyb20gYC4vc3RvcmVzYCBpbiBhXG4gKiBgc2hhbGxvd1JlZmAgdGhhdCBmb2xsb3dzIHRoZSBzdG9yZSdzIHNuYXBzaG90cyBhbmQgc3RvcHMgZm9sbG93aW5nIHdoZW5cbiAqIHRoZSBlZmZlY3Qgc2NvcGUgdGhhdCBjcmVhdGVkIGl0IGlzIGRpc3Bvc2VkLiBUaGUgY29tcG9zYWJsZXMgdGFrZSB0aGVcbiAqIG1ldGhvZHMgYSBgUWdpc1Nka2AgYWxyZWFkeSBoYXMgLSBgcWdpcy5zaXRlcy5zdW1tYXJ5YCwgYHFnaXMuc2l0ZXMud2F0Y2hgXG4gKiAtIHNvIHRoZSB0eXBlZCBjb250cmFjdCBpcyB0aGUgZ2VuZXJhdGVkIG9uZSwgbm90IGEgVnVlIGNvcHkgb2YgaXQuXG4gKlxuICogYHByb3ZpZGVRZ2lzU2RrKHFnaXMpYCBpbiBgc2V0dXAoKWAgb2YgYW4gYW5jZXN0b3Igc2hhcmVzIG9uZSBgUWdpc1Nka2BcbiAqIHdpdGggYSBzdWJ0cmVlOyBgdXNlUWdpc1NkaygpYCBoYW5kcyBpdCBiYWNrIHVuZGVyIHRoZSBwYWdlJ3MgdHlwZXMuIFRoZVxuICogcHJvdmlkZXIgbmV2ZXIgY2xvc2VzIHdoYXQgaXQgd2FzIGdpdmVuLlxuICovXG5cbmltcG9ydCB7XG5cdHR5cGUgSW5qZWN0aW9uS2V5LFxuXHRpbmplY3QsXG5cdHR5cGUgTWF5YmVSZWZPckdldHRlcixcblx0b25TY29wZURpc3Bvc2UsXG5cdHByb3ZpZGUsXG5cdHR5cGUgU2hhbGxvd1JlZixcblx0c2hhbGxvd1JlZixcblx0dG9WYWx1ZSxcblx0d2F0Y2gsXG59IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFFnaXNTZGtFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBRZ2lzU2RrLCBRZ2lzU2RrQ29yZSB9IGZyb20gXCIuL3FnaXMtc2RrXCI7XG5pbXBvcnQgdHlwZSB7IE9wZXJhdGlvbk1hcCwgU3RyZWFtTWFwIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQge1xuXHR0eXBlIEZvcm1PcHRpb25zLFxuXHR0eXBlIEZvcm1TdGF0ZSxcblx0Rm9ybVN0b3JlLFxuXHR0eXBlIEhvc3RRdWVyeVN0YXRlLFxuXHR0eXBlIEhvc3RRdWVyeVN0b3JlLFxuXHR0eXBlIE9wZXJhdGlvbixcblx0dHlwZSBPcGVyYXRpb25TdGF0ZSxcblx0T3BlcmF0aW9uU3RvcmUsXG5cdHR5cGUgU3RvcmUsXG5cdHR5cGUgU3RyZWFtLFxuXHR0eXBlIFN0cmVhbUhhbmRsZXJzTGlrZSxcblx0dHlwZSBTdHJlYW1TdGF0ZSxcblx0U3RyZWFtU3RvcmUsXG59IGZyb20gXCIuL3N0b3Jlc1wiO1xuXG5leHBvcnQgdHlwZSB7XG5cdE9wZXJhdGlvbixcblx0T3BlcmF0aW9uU3RhdGUsXG5cdFN0cmVhbSxcblx0U3RyZWFtSGFuZGxlTGlrZSxcblx0U3RyZWFtSGFuZGxlcnNMaWtlLFxuXHRTdHJlYW1TdGF0ZSxcblx0U3RyZWFtVGVybWluYWxMaWtlLFxufSBmcm9tIFwiLi9zdG9yZXNcIjtcblxuLyoqIEEgY29tcG9zYWJsZSB3YXMgdXNlZCBvdXRzaWRlIHRoZSBzaGFwZSBpdCBuZWVkcy4gKi9cbmV4cG9ydCBjbGFzcyBRZ2lzU2RrQnJpZGdlVnVlRXJyb3IgZXh0ZW5kcyBRZ2lzU2RrRXJyb3Ige1xuXHRwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobWVzc2FnZSwgXCJ2dWVfYmluZGluZ1wiKTtcblx0fVxufVxuXG4vKiogVGhlIGluamVjdGlvbiBrZXkgYHByb3ZpZGVRZ2lzU2RrYCB3cml0ZXMgYW5kIGB1c2VRZ2lzU2RrYCByZWFkcy4gKi9cbmV4cG9ydCBjb25zdCBRR0lTX1NES19LRVk6IEluamVjdGlvbktleTxRZ2lzU2RrQ29yZTx1bmtub3duLCB1bmtub3duPj4gPVxuXHRTeW1ib2woXCJxZ2lzLXNka1wiKTtcblxuLyoqXG4gKiBTaGFyZSBhIGBRZ2lzU2RrYCB3aXRoIHRoZSBjb21wb25lbnQgc3VidHJlZTsgY2FsbCBpbiBgc2V0dXAoKWAuXG4gKlxuICogVGhlIFNESyBpcyBzaGFyZWQgYXMgZ2l2ZW4sIHdoYXRldmVyIGl0cyBzY2hlbWEsIGFuZCBuZXZlciBjbG9zZWQgaGVyZTpcbiAqIHRoZSBwYWdlIHRoYXQgYnVpbHQgaXQgY2xvc2VzIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVFnaXNTZGsocWdpczogUWdpc1Nka0NvcmU8dW5rbm93biwgdW5rbm93bj4pOiB2b2lkIHtcblx0cHJvdmlkZShRR0lTX1NES19LRVksIHFnaXMpO1xufVxuXG4vKipcbiAqIFRoZSBgUWdpc1Nka2AgdGhlIG5lYXJlc3QgYHByb3ZpZGVRZ2lzU2RrYCBzaGFyZWQuXG4gKlxuICogVGhlIHR5cGUgcGFyYW1ldGVycyBuYW1lIHRoZSBnZW5lcmF0ZWQgYE9wZXJhdGlvbnNgIGFuZCBgU3RyZWFtc2A7IHRoZXkgYXJlXG4gKiB0aGUgY2FsbGVyJ3MgY2xhaW0sIHRoZSBzYW1lIHdheSB0aGUgcHJvdmlkZXIncyBhcmd1bWVudCB3YXMgdGhlIHBhZ2Uncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVFnaXNTZGs8TyA9IE9wZXJhdGlvbk1hcCwgUyA9IFN0cmVhbU1hcD4oKTogUWdpc1NkazxPLCBTPiB7XG5cdC8vIE91dHNpZGUgYHNldHVwKClgIFZ1ZSB3YXJucyBhbmQgcmV0dXJucyB1bmRlZmluZWQ7IGluc2lkZSwgdGhlIGRlZmF1bHQuXG5cdGNvbnN0IHFnaXMgPSBpbmplY3QoUUdJU19TREtfS0VZLCBudWxsKSA/PyBudWxsO1xuXHRpZiAocWdpcyA9PT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyBRZ2lzU2RrQnJpZGdlVnVlRXJyb3IoXG5cdFx0XHRcInVzZVFnaXNTZGsgbmVlZHMgcHJvdmlkZVFnaXNTZGsgaW4gYW4gYW5jZXN0b3IncyBzZXR1cCgpXCIsXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gcWdpcyBhcyB1bmtub3duIGFzIFFnaXNTZGs8TywgUz47XG59XG5cbi8qKlxuICogRm9sbG93IGFueSBzdG9yZSBhcyBhIHNoYWxsb3cgcmVmOyB0aGUgc3Vic2NyaXB0aW9uIGVuZHMgd2l0aCB0aGUgc2NvcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdG9yZTxUPihzdG9yZTogU3RvcmU8VD4pOiBSZWFkb25seTxTaGFsbG93UmVmPFQ+PiB7XG5cdGNvbnN0IHN0YXRlID0gc2hhbGxvd1JlZihzdG9yZS5nZXRTbmFwc2hvdCgpKTtcblx0Y29uc3Qgc3RvcCA9IHN0b3JlLnN1YnNjcmliZSgoc25hcHNob3QpID0+IHtcblx0XHRzdGF0ZS52YWx1ZSA9IHNuYXBzaG90O1xuXHR9KTtcblx0b25TY29wZURpc3Bvc2Uoc3RvcCk7XG5cdHJldHVybiBzdGF0ZTtcbn1cblxuLyoqIFdoYXQge0BsaW5rIHVzZU9wZXJhdGlvbn0gcmV0dXJucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlT3BlcmF0aW9uPEksIFI+IHtcblx0cmVhZG9ubHkgc3RhdGU6IFJlYWRvbmx5PFNoYWxsb3dSZWY8T3BlcmF0aW9uU3RhdGU8Uj4+Pjtcblx0LyoqIFJlc29sdmVzIHdpdGggdGhlIHZhbHVlLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBzdGF0ZSBjYXJyaWVzIHdoeSBub3QuICovXG5cdHJ1bihpbnB1dDogSSk6IFByb21pc2U8UiB8IHVuZGVmaW5lZD47XG5cdC8qKiBBYm9ydCB0aGUgaW4tZmxpZ2h0IGNhbGwgbG9jYWxseTsgdGhlIGhvc3QgbWF5IHN0aWxsIHJ1biBpdC4gKi9cblx0YWJvcnQoKTogdm9pZDtcblx0LyoqIEJhY2sgdG8gYGlkbGVgLCBhYm9ydGluZyBhbnl0aGluZyBpbiBmbGlnaHQuICovXG5cdHJlc2V0KCk6IHZvaWQ7XG5cdHJlYWRvbmx5IHN0b3JlOiBPcGVyYXRpb25TdG9yZTxJLCBSPjtcbn1cblxuLyoqXG4gKiBSdW4gYSBnZW5lcmF0ZWQgb3BlcmF0aW9uIGZyb20gYSBjb21wb25lbnQ7IGRpc3Bvc2luZyB0aGUgc2NvcGUgYWJvcnRzXG4gKiB3aGF0ZXZlciBpcyBpbiBmbGlnaHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VPcGVyYXRpb248SSwgUj4oXG5cdG9wZXJhdGlvbjogT3BlcmF0aW9uPEksIFI+LFxuKTogVXNlT3BlcmF0aW9uPEksIFI+IHtcblx0Y29uc3Qgc3RvcmUgPSBuZXcgT3BlcmF0aW9uU3RvcmUob3BlcmF0aW9uKTtcblx0b25TY29wZURpc3Bvc2Uoc3RvcmUuYWJvcnQpO1xuXHRyZXR1cm4ge1xuXHRcdHN0YXRlOiB1c2VTdG9yZShzdG9yZSksXG5cdFx0cnVuOiBzdG9yZS5ydW4sXG5cdFx0YWJvcnQ6IHN0b3JlLmFib3J0LFxuXHRcdHJlc2V0OiBzdG9yZS5yZXNldCxcblx0XHRzdG9yZSxcblx0fTtcbn1cblxuLyoqIEEgdmFsdWUsIGEgcmVmIG9yIGEgZ2V0dGVyOiB3aGF0IGB1c2VTdHJlYW1gIGFjY2VwdHMgYXMgaXRzIGlucHV0LiAqL1xuZXhwb3J0IHR5cGUgU3RyZWFtSW5wdXQ8ST4gPSBNYXliZVJlZk9yR2V0dGVyPEkgfCBudWxsPjtcblxuLyoqXG4gKiBIb2xkIGEgZ2VuZXJhdGVkIHN0cmVhbSBvcGVuIHdoaWxlIHRoZSBzY29wZSBsaXZlcy5cbiAqXG4gKiBgaW5wdXRgIG1heSBiZSBhIHZhbHVlLCBhIHJlZiBvciBhIGdldHRlcjsgdGhlIHN1YnNjcmlwdGlvbiBmb2xsb3dzIGl0c1xuICogKmNvbnRlbnQqIC0gYSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgZmllbGRzIHJlb3BlbnMgbm90aGluZywgYSBkaWZmZXJlbnRcbiAqIG9uZSBjbG9zZXMgYW5kIHJlb3BlbnMsIGBudWxsYCBjbG9zZXMuIERpc3Bvc2luZyB0aGUgc2NvcGUgY2xvc2VzIHRoZVxuICogc3RyZWFtLCBldmVuIGJlZm9yZSB0aGUgaG9zdCBhY2tub3dsZWRnZWQgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdHJlYW08SSwgRT4oXG5cdG9wZW46IFN0cmVhbTxJLCBFPixcblx0aW5wdXQ6IFN0cmVhbUlucHV0PEk+LFxuXHRoYW5kbGVyczogU3RyZWFtSGFuZGxlcnNMaWtlPEU+ID0ge30sXG4pOiBSZWFkb25seTxTaGFsbG93UmVmPFN0cmVhbVN0YXRlPEU+Pj4gJiB7XG5cdHJlYWRvbmx5IHN0b3JlOiBTdHJlYW1TdG9yZTxJLCBFPjtcbn0ge1xuXHRjb25zdCBzdG9yZSA9IG5ldyBTdHJlYW1TdG9yZShvcGVuLCBoYW5kbGVycyk7XG5cdGNvbnN0IHN0YXRlID0gdXNlU3RvcmUoc3RvcmUpO1xuXHR3YXRjaChcblx0XHQoKSA9PiB0b1ZhbHVlKGlucHV0KSxcblx0XHQodmFsdWUpID0+IHN0b3JlLnNldElucHV0KHZhbHVlKSxcblx0XHR7XG5cdFx0XHRpbW1lZGlhdGU6IHRydWUsXG5cdFx0XHRkZWVwOiB0cnVlLFxuXHRcdH0sXG5cdCk7XG5cdG9uU2NvcGVEaXNwb3NlKHN0b3JlLmNsb3NlKTtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24oc3RhdGUsIHsgc3RvcmUgfSk7XG59XG5cbnR5cGUgUmVxdWVzdE9mPE8sIEsgZXh0ZW5kcyBrZXlvZiBPPiA9IE9bS10gZXh0ZW5kcyB7XG5cdHJlYWRvbmx5IHJlcXVlc3Q6IGluZmVyIFJlcTtcbn1cblx0PyBSZXFcblx0OiBuZXZlcjtcbnR5cGUgUmVzdWx0T2Y8TywgSyBleHRlbmRzIGtleW9mIE8+ID0gT1tLXSBleHRlbmRzIHtcblx0cmVhZG9ubHkgcmVzdWx0OiBpbmZlciBSZXM7XG59XG5cdD8gUmVzXG5cdDogbmV2ZXI7XG5cbi8qKlxuICogVGhlIGZvcm0gb2Ygb25lIGRlY2xhcmVkIGFjdGlvbjogYHFnaXMuPGlkPmAgd2l0aCBpdHMgZmllbGRzLCB2YWx1ZXMsXG4gKiBpc3N1ZXMgYW5kIHN1Ym1pc3Npb247IGRpc3Bvc2luZyB0aGUgc2NvcGUgYWJvcnRzIGEgc3VibWlzc2lvbiBpbiBmbGlnaHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VGb3JtPE8sIEsgZXh0ZW5kcyBrZXlvZiBPICYgc3RyaW5nPihcblx0cWdpczogUWdpc1Nka0NvcmU8TywgdW5rbm93bj4sXG5cdGlkOiBLLFxuXHRvcHRpb25zPzogRm9ybU9wdGlvbnMsXG4pOiB7XG5cdHJlYWRvbmx5IHN0YXRlOiBSZWFkb25seTxTaGFsbG93UmVmPEZvcm1TdGF0ZTxSZXN1bHRPZjxPLCBLPj4+Pjtcblx0cmVhZG9ubHkgZm9ybTogRm9ybVN0b3JlPFJlcXVlc3RPZjxPLCBLPiAmIG9iamVjdCwgUmVzdWx0T2Y8TywgSz4+O1xufSB7XG5cdGNvbnN0IGZvcm0gPSBuZXcgRm9ybVN0b3JlPFJlcXVlc3RPZjxPLCBLPiAmIG9iamVjdCwgUmVzdWx0T2Y8TywgSz4+KFxuXHRcdHFnaXMgYXMgUWdpc1Nka0NvcmU8dW5rbm93biwgdW5rbm93bj4sXG5cdFx0aWQsXG5cdFx0b3B0aW9ucyxcblx0KTtcblx0b25TY29wZURpc3Bvc2UoKCkgPT4gZm9ybS5kaXNwb3NlKCkpO1xuXHRyZXR1cm4geyBzdGF0ZTogdXNlU3RvcmUoZm9ybSksIGZvcm0gfTtcbn1cblxuLyoqXG4gKiBGb2xsb3cgYSBob3N0IHF1ZXJ5IHN0b3JlOiBgdXNlSG9zdFF1ZXJ5KGxheWVyc1F1ZXJ5KHFnaXMpKWAgZm9yIGEgbGF5ZXJcbiAqIHBpY2tlci4gYHJlZnJlc2hgIHJ1bnMgYXQgb25jZSB1bmxlc3MgYGF1dG9gIGlzIGBmYWxzZWA7IGRpc3Bvc2luZyB0aGVcbiAqIHNjb3BlIGFib3J0cyBhIGxvYWQgaW4gZmxpZ2h0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSG9zdFF1ZXJ5PFQ+KFxuXHRzdG9yZTogSG9zdFF1ZXJ5U3RvcmU8VD4sXG5cdG9wdGlvbnM6IHsgcmVhZG9ubHkgYXV0bz86IGJvb2xlYW4gfSA9IHt9LFxuKToge1xuXHRyZWFkb25seSBzdGF0ZTogUmVhZG9ubHk8U2hhbGxvd1JlZjxIb3N0UXVlcnlTdGF0ZTxUPj4+O1xuXHRyZWFkb25seSBxdWVyeTogSG9zdFF1ZXJ5U3RvcmU8VD47XG59IHtcblx0Y29uc3Qgc3RhdGUgPSB1c2VTdG9yZShzdG9yZSk7XG5cdGlmIChvcHRpb25zLmF1dG8gIT09IGZhbHNlKSB7XG5cdFx0dm9pZCBzdG9yZS5yZWZyZXNoKCk7XG5cdH1cblx0b25TY29wZURpc3Bvc2Uoc3RvcmUuYWJvcnQpO1xuXHRyZXR1cm4geyBzdGF0ZSwgcXVlcnk6IHN0b3JlIH07XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7OztBQWVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5Q08sTUFBTSw4QkFBOEIsY0FBYTtBQUFBLEVBQ2hELFdBQVcsQ0FBQyxTQUFpQjtBQUFBLElBQ25DLE1BQU0sU0FBUyxhQUFhO0FBQUE7QUFFOUI7QUFHTyxJQUFNLGVBQ1osT0FBTyxVQUFVO0FBUVgsU0FBUyxjQUFjLENBQUMsTUFBMkM7QUFBQSxFQUN6RSxRQUFRLGNBQWMsSUFBSTtBQUFBO0FBU3BCLFNBQVMsVUFBMkMsR0FBa0I7QUFBQSxFQUU1RSxNQUFNLE9BQU8sT0FBTyxjQUFjLElBQUksS0FBSztBQUFBLEVBQzNDLElBQUksU0FBUyxNQUFNO0FBQUEsSUFDbEIsTUFBTSxJQUFJLHNCQUNULDBEQUNEO0FBQUEsRUFDRDtBQUFBLEVBQ0EsT0FBTztBQUFBO0FBTUQsU0FBUyxRQUFXLENBQUMsT0FBMEM7QUFBQSxFQUNyRSxNQUFNLFFBQVEsV0FBVyxNQUFNLFlBQVksQ0FBQztBQUFBLEVBQzVDLE1BQU0sT0FBTyxNQUFNLFVBQVUsQ0FBQyxhQUFhO0FBQUEsSUFDMUMsTUFBTSxRQUFRO0FBQUEsR0FDZDtBQUFBLEVBQ0QsZUFBZSxJQUFJO0FBQUEsRUFDbkIsT0FBTztBQUFBO0FBbUJELFNBQVMsWUFBa0IsQ0FDakMsV0FDcUI7QUFBQSxFQUNyQixNQUFNLFFBQVEsSUFBSSxnQkFBZSxTQUFTO0FBQUEsRUFDMUMsZUFBZSxNQUFNLEtBQUs7QUFBQSxFQUMxQixPQUFPO0FBQUEsSUFDTixPQUFPLFNBQVMsS0FBSztBQUFBLElBQ3JCLEtBQUssTUFBTTtBQUFBLElBQ1gsT0FBTyxNQUFNO0FBQUEsSUFDYixPQUFPLE1BQU07QUFBQSxJQUNiO0FBQUEsRUFDRDtBQUFBO0FBY00sU0FBUyxTQUFlLENBQzlCLE1BQ0EsT0FDQSxXQUFrQyxDQUFDLEdBR2xDO0FBQUEsRUFDRCxNQUFNLFFBQVEsSUFBSSxhQUFZLE1BQU0sUUFBUTtBQUFBLEVBQzVDLE1BQU0sUUFBUSxTQUFTLEtBQUs7QUFBQSxFQUM1QixNQUNDLE1BQU0sUUFBUSxLQUFLLEdBQ25CLENBQUMsVUFBVSxNQUFNLFNBQVMsS0FBSyxHQUMvQjtBQUFBLElBQ0MsV0FBVztBQUFBLElBQ1gsTUFBTTtBQUFBLEVBQ1AsQ0FDRDtBQUFBLEVBQ0EsZUFBZSxNQUFNLEtBQUs7QUFBQSxFQUMxQixPQUFPLE9BQU8sT0FBTyxPQUFPLEVBQUUsTUFBTSxDQUFDO0FBQUE7QUFrQi9CLFNBQVMsT0FBc0MsQ0FDckQsTUFDQSxJQUNBLFNBSUM7QUFBQSxFQUNELE1BQU0sT0FBTyxJQUFJLFdBQ2hCLE1BQ0EsSUFDQSxPQUNEO0FBQUEsRUFDQSxlQUFlLE1BQU0sS0FBSyxRQUFRLENBQUM7QUFBQSxFQUNuQyxPQUFPLEVBQUUsT0FBTyxTQUFTLElBQUksR0FBRyxLQUFLO0FBQUE7QUFRL0IsU0FBUyxZQUFlLENBQzlCLE9BQ0EsVUFBdUMsQ0FBQyxHQUl2QztBQUFBLEVBQ0QsTUFBTSxRQUFRLFNBQVMsS0FBSztBQUFBLEVBQzVCLElBQUksUUFBUSxTQUFTLE9BQU87QUFBQSxJQUN0QixNQUFNLFFBQVE7QUFBQSxFQUNwQjtBQUFBLEVBQ0EsZUFBZSxNQUFNLEtBQUs7QUFBQSxFQUMxQixPQUFPLEVBQUUsT0FBTyxPQUFPLE1BQU07QUFBQTsiLAogICJkZWJ1Z0lkIjogIkE4MTUxOEQ0QjMzM0JFNkM2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9