@magicx-eng/ai-autocomplete-angular 0.30.0 → 0.31.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/esm2020/lib/ai-autocomplete/ai-autocomplete.component.mjs +3 -3
- package/esm2020/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.mjs +6 -4
- package/esm2020/lib/controller/ai-autocomplete.controller.mjs +4 -4
- package/esm2020/lib/internal/pill-list/pill-list.component.mjs +2 -2
- package/esm2020/lib/shared/types.mjs +1 -1
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs +11 -9
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs +11 -9
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.d.ts.map +1 -1
- package/lib/internal/pill-list/pill-list.component.d.ts.map +1 -1
- package/lib/shared/types.d.ts +1 -1
- package/lib/shared/types.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -83,7 +83,7 @@ export class SearchComponent {
|
|
|
83
83
|
handleSubmit(result: AutocompleteResult): void {
|
|
84
84
|
console.log(result.query); // "Create a email"
|
|
85
85
|
console.log(result.raw_query); // "Create a {{TASK_1}}"
|
|
86
|
-
console.log(result.completed_params); // [{ placeholder: "{{TASK_1}}",
|
|
86
|
+
console.log(result.completed_params); // [{ placeholder: "{{TASK_1}}", parameter: "task", ... }]
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
```
|
|
@@ -559,7 +559,7 @@ carry it too:
|
|
|
559
559
|
<ai-autocomplete (resultChange)="report = $event.custom_fields ?? null"></ai-autocomplete>
|
|
560
560
|
|
|
561
561
|
<p *ngIf="report">{{ report.items.total }} results</p>
|
|
562
|
-
<!-- e.g. {
|
|
562
|
+
<!-- e.g. { parameter: "Color", value: "Chartreuse", op: "eq" } — the shopper asked
|
|
563
563
|
for a colour no item carries, so the results ignore it. Say so. -->
|
|
564
564
|
<p *ngIf="report?.dropped_filters?.length">
|
|
565
565
|
No match for
|
|
@@ -570,7 +570,7 @@ carry it too:
|
|
|
570
570
|
```
|
|
571
571
|
|
|
572
572
|
- `applied_filters` / `dropped_filters` — the constraints the server read out
|
|
573
|
-
of the query as `{
|
|
573
|
+
of the query as `{ parameter, value, op }` (`op` is one of `eq`, `ne`, `lt`,
|
|
574
574
|
`lte`, `gt`, `gte`), split into the ones the catalog answered and the ones it
|
|
575
575
|
could not (a parameter it does not have, a bound that is not a number, a
|
|
576
576
|
value no item carries). The items answer the applied set, so the dropped
|
|
@@ -884,9 +884,9 @@ The structured query as the SDK currently understands it. The same object is emi
|
|
|
884
884
|
| `query` | `string` | Plain text as the user sees it, trimmed. |
|
|
885
885
|
| `raw_query` | `string` | `query` with each completed param replaced by its placeholder token (e.g. `"Create a {{TASK_1}}"`). |
|
|
886
886
|
| `completed_params` | `CompletedParam[]` | Filled parameter values in query order, followed by any the user skipped (see below). |
|
|
887
|
-
| `identified_params` | `IdentifiedParam[]` | Parameters the server recognised in the user's own words, as `{
|
|
887
|
+
| `identified_params` | `IdentifiedParam[]` | Parameters the server recognised in the user's own words, as `{ parameter, text }` — e.g. `{ parameter: "due_date", text: "Friday" }` when the user typed "by Friday" instead of picking a date. They are not tokenized in `raw_query`, and they are tentative: each response replaces the set, and an entry drops out as soon as its text is edited away. |
|
|
888
888
|
| `is_ready` | `boolean` | Whether the server considers the query complete enough to act on. |
|
|
889
|
-
| `custom_fields?` | `CustomFieldsReport` | What catalog grounding did for the latest applied response, when it read a catalog at all — see [Product strip](#product-strip). `applied_filters` and `dropped_filters` list the query's constraints as `{
|
|
889
|
+
| `custom_fields?` | `CustomFieldsReport` | What catalog grounding did for the latest applied response, when it read a catalog at all — see [Product strip](#product-strip). `applied_filters` and `dropped_filters` list the query's constraints as `{ parameter, value, op }`; `items.total` is how many items the applied ones left standing and `items.matched` the ones the strip renders. Absent (no key) when the response carried no report. |
|
|
890
890
|
|
|
891
891
|
#### Reading the query as it's built
|
|
892
892
|
|
|
@@ -922,12 +922,12 @@ What "every successful round-trip" means in practice:
|
|
|
922
922
|
Pressing <kbd>→</kbd> at the end of the input dismisses the active pill. The dismissal is reported to the server — and included in `completed_params` here — as an entry with no placeholder and the sentinel text `"skipped"`:
|
|
923
923
|
|
|
924
924
|
```ts
|
|
925
|
-
{ placeholder: "",
|
|
925
|
+
{ placeholder: "", parameter: "goal", text: "skipped", kind: null }
|
|
926
926
|
```
|
|
927
927
|
|
|
928
928
|
Tier 2 consumers who build their own submit payload get the raw skips from the controller (`skippedParams$`, or `getState().skippedParams`) and can fold them in the same way with the exported `buildSubmitResult(text, completedParams, skippedParams, { identifiedParams, isReady })` — the last argument carries `identifiedParams$` / `isReady$` (or their `getState()` fields) so a hand-rolled submit reports the same `identified_params` and `is_ready` the SDK's own results do.
|
|
929
929
|
|
|
930
|
-
> **Reading `skippedParams$` directly:** the array is append-only until `reset()`. The "drop a skip whose
|
|
930
|
+
> **Reading `skippedParams$` directly:** the array is append-only until `reset()`. The "drop a skip whose parameter got filled" rule is applied when the payload is built, not by pruning the array — so if the user skips `goal` and later fills one, the raw array still holds the `goal` entry. That's deliberate: the filter self-heals if they then delete that param's text, where pruning would discard the signal for good. `buildSubmitResult` applies the rule for you; to apply it elsewhere (say, a "you skipped X" badge), use the exported `withSkippedParams(completedParams, skippedParams)`.
|
|
931
931
|
|
|
932
932
|
---
|
|
933
933
|
|
|
@@ -1076,7 +1076,7 @@ Submits from Enter and from `<ai-autocomplete>`'s built-in button are recorded f
|
|
|
1076
1076
|
|
|
1077
1077
|
## Option Overrides
|
|
1078
1078
|
|
|
1079
|
-
Supply the options for a parameter yourself instead of taking the server's. Each entry is keyed by the suggestion `
|
|
1079
|
+
Supply the options for a parameter yourself instead of taking the server's. Each entry is keyed by the suggestion `parameter` and is a function of the phrase the user has typed for that parameter — return an array for a fixed or computed list, or a promise for one that lives behind a request (the dropdown shows its loading skeleton until it settles). Bind a component field, not an inline literal: the input is forwarded on reference change.
|
|
1080
1080
|
|
|
1081
1081
|
```ts
|
|
1082
1082
|
import type { OptionOverrides } from "@magicx-eng/ai-autocomplete-angular";
|
|
@@ -416,7 +416,7 @@ AIAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
|
|
|
416
416
|
useExisting: forwardRef(() => AIAutocompleteComponent),
|
|
417
417
|
multi: true,
|
|
418
418
|
},
|
|
419
|
-
], viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, static: true }, { propertyName: "editorRef", first: true, predicate: ["editor"], descendants: true }, { propertyName: "pillContainerRef", first: true, predicate: ["pillContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #container\n class=\"magicx-aia magicx-aia-container\"\n [attr.data-pill-placement]=\"pillPlacement\"\n [attr.data-options-position]=\"optionsPosition\"\n [attr.data-animations]=\"animations ? 'on' : 'off'\"\n [attr.data-mode]=\"resolvedMode\"\n>\n <ai-autocomplete-dropdown\n *ngIf=\"controller\"\n [controller]=\"controller\"\n [showPills]=\"showDropdownPills\"\n [showSkipButton]=\"showSkipButton\"\n [showOptionIcons]=\"showOptionIcons\"\n [showOptionImages]=\"showOptionImages\"\n [showOptionCounts]=\"showOptionCounts\"\n [productsLayout]=\"productsLayout\"\n [productImageFallback]=\"productImageFallback\"\n ></ai-autocomplete-dropdown>\n\n <div\n class=\"magicx-aia-input-wrapper\"\n data-aia-input-wrapper=\"\"\n (click)=\"onWrapperClick($event)\"\n (keyup)=\"$event.stopPropagation()\"\n >\n <div class=\"magicx-aia-editor-area\" data-aia-editor=\"\">\n <div\n #editor\n *ngIf=\"controller\"\n [aiaEditorHost]=\"controller\"\n [autoFocus]=\"autoFocus\"\n [showChipIcons]=\"showChipIcons\"\n [showChipImages]=\"showChipImages\"\n class=\"magicx-aia-input\"\n data-aia-input=\"\"\n ></div>\n\n <ng-container *ngIf=\"controller && showInlinePills\">\n <span\n #pillContainer\n class=\"magicx-aia-pill-list-container\"\n data-aia-pill-list-container=\"\"\n *ngIf=\"\n (controller.isLoading$ | async) ||\n ((controller.suggestionPills$ | async)?.length ?? 0) > 0\n \"\n >\n <aia-pill-list\n [pills]=\"(controller.suggestionPills$ | async) ?? []\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"(controller.isActivePillSelected$ | async) ?? false\"\n [loading]=\"(controller.isLoading$ | async) ?? false\"\n (selectPill)=\"onSelectPill($event)\"\n ></aia-pill-list>\n </span>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"submitButtonState\">\n <aia-submit-button\n *ngSwitchCase=\"'default'\"\n [disabled]=\"\n !(\n controller &&\n canSubmit({\n segments: (controller.segments$ | async) ?? [],\n completedParams: (controller.completedParams$ | async) ?? []\n })\n )\n \"\n (submit)=\"onSubmitButtonClick($event)\"\n ></aia-submit-button>\n\n <span\n *ngSwitchCase=\"'custom'\"\n data-aia-submit=\"\"\n data-aia-submit-slot=\"\"\n class=\"magicx-aia-submit-slot\"\n (click)=\"onSubmitSlotClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"customSubmitTemplate\"></ng-container>\n </span>\n </ng-container>\n </div>\n</div>\n", styles: [":where(.magicx-aia){box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html),:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):before,:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):after{all:revert;box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-dropdown]):not(html):not(html):not(html):not(html):not(html){line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-align:start;text-shadow:none;font-style:normal;font-variant:normal;white-space:normal;visibility:visible;cursor:auto}:where([data-aia-input-wrapper] svg,[data-aia-dropdown] svg):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){display:revert;vertical-align:revert;position:revert;inset:revert;float:revert;margin:revert;padding:revert;border:revert;border-radius:revert;outline:revert;background:revert;box-shadow:revert;min-width:revert;max-width:revert;min-height:revert;max-height:revert;flex:revert;transition:revert;animation:revert;rotate:revert;scale:revert;translate:revert}:where([data-aia-input-wrapper] svg *,[data-aia-dropdown] svg *):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){transition:revert;animation:revert}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: #ffffff;--aia-border: #b0b0b0;--aia-dropdown-border: rgba(231, 231, 231, .5);--aia-dropdown-shadow: none;--aia-pill-bg: #bdbdbd;--aia-pill-color: #333539;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .105);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #000000;--aia-option-bg: #eef2ff;--aia-option-color: #1a1b1d;--aia-option-color-selected: #000000;--aia-option-font-size: 16px;--aia-written-text-color: #000000;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: #000000;--aia-submit-color: #ffffff;--aia-color-text-muted: #6b7280;--aia-skeleton-bg: rgba(189, 189, 189, .083);--aia-streak-rgb: 99, 102, 241;--aia-footer-hint-color: #505050;--aia-footer-brand-color: #b0b0b0;--aia-footer-badge-border: rgba(189, 189, 189, .51)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: #000000;--aia-border: #505050;--aia-dropdown-border: rgba(72, 72, 72, .5);--aia-dropdown-shadow: none;--aia-pill-bg: #bdbdbd;--aia-pill-color: #b0b0b0;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .15);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #ffffff;--aia-option-bg: #323232;--aia-option-color: #e7e7e7;--aia-option-color-selected: #ffffff;--aia-option-font-size: 16px;--aia-written-text-color: #ffffff;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: #ffffff;--aia-submit-color: #000000;--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: #1a1b1d;--aia-streak-rgb: 255, 255, 255;--aia-footer-hint-color: #b0b0b0;--aia-footer-brand-color: #505050;--aia-footer-badge-border: #505050}[data-aia-dropdown]{--aia-footer-row-height: 23px;--aia-footer-band: calc(var(--aia-footer-gap, 12px) + var(--aia-footer-row-height, 23px));--aia-grid-scroll-bottom: var(--aia-footer-band);--aia-grid-overlap-bottom: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-lead: 20px;--aia-footer-fade-inset: calc(-1 * var(--aia-footer-fade-lead)) 0 0}[data-aia-dropdown] [data-aia-pillbar] .aia-pill-list{padding-inline:10px}[data-aia-dropdown] [data-aia-pillbar] .aia-pill{justify-content:flex-start;border-inline-width:0;padding-inline:0}[data-aia-dropdown][data-aia-has-products]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: 0px;--aia-grid-overlap-top: 0px;--aia-footer-fade-lead: 0px}[data-aia-dropdown] .aia-grid[data-scroll]{padding-top:var(--aia-grid-scroll-top, 0);padding-bottom:var(--aia-grid-scroll-bottom, 0);margin-top:var(--aia-grid-overlap-top, 0);margin-bottom:var(--aia-grid-overlap-bottom, 0)}[data-aia-dropdown] [data-aia-footer]:before{content:\"\";position:absolute;inset:var(--aia-footer-fade-inset, -20px 0 0);z-index:-1;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--aia-surface, #ffffff))}[data-aia-dropdown][data-aia-surface=glass]{--aia-footer-chip-bg: transparent}[data-aia-dropdown][data-aia-surface=glass] [data-aia-footer]:before{display:none}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: var(--aia-footer-band);--aia-grid-overlap-top: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-inset: 0 0 calc(-1 * var(--aia-footer-fade-lead));transform-origin:50% 100%;top:auto;bottom:100%;margin-top:0;margin-bottom:6px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]{padding:0 0 var(--aia-footer-gap, 12px) 8px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{background:linear-gradient(to top,transparent,var(--aia-surface, #ffffff))}:where(.magicx-aia[data-animations=\"off\"]) *,:where(.magicx-aia[data-animations=\"off\"]) *:before,:where(.magicx-aia[data-animations=\"off\"]) *:after{animation-duration:0s!important;transition-duration:0s!important}.magicx-aia-container{position:relative;font-family:var(--aia-font-family, inherit);container-type:inline-size}.magicx-aia-input-wrapper{padding:12px 16px 12px max(10px,var(--aia-content-inset-left, 16px));border:1px solid var(--aia-border, #b0b0b0);border-radius:10px;background:var(--aia-surface, #ffffff);box-shadow:var(--aia-shadow, none);overflow:hidden;display:flex;align-items:flex-start;gap:12px}.magicx-aia-editor-area{position:relative;flex:1;min-width:0;min-height:22px;line-height:var(--aia-editor-line-height, 1.9);font-family:inherit;font-size:var(--aia-written-text-font-size, 14px);white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;max-height:var(--aia-editor-max-height, calc(var(--aia-editor-line-height, 1.9) * 5em));overflow-y:auto;scrollbar-width:none}.magicx-aia-editor-area::-webkit-scrollbar{display:none}.magicx-aia-input{display:inline;outline:none;background:transparent;color:var(--aia-written-text-color, var(--aia-color-text-default, #fff));caret-color:var( --aia-caret-color, var(--aia-written-text-color, var(--aia-color-text-default, #fff)) );font-weight:300;vertical-align:middle}.magicx-aia-input[contenteditable=true]{-webkit-user-modify:read-write}.magicx-aia-input[contenteditable=plaintext-only]{-webkit-user-modify:read-write-plaintext-only}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]{display:inline;padding:3px 6px;border-radius:6px;-webkit-box-decoration-break:clone;box-decoration-break:clone;background:var(--aia-completed-pill-bg, rgba(189, 189, 189, .105));color:var(--aia-completed-pill-color, var(--aia-written-text-color, #fff));font-size:var(--aia-pill-font-size, 14px);font-weight:400;line-height:normal;white-space:normal;letter-spacing:var(--aia-completed-pill-tracking, -.02em);cursor:pointer;transition:background-color .15s ease}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]:hover{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35))}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon]{display:inline-block;width:1em;height:1em;margin-right:4px;vertical-align:-.125em;pointer-events:none;-webkit-user-select:none;user-select:none;will-change:transform}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon] svg{display:block;width:100%;height:100%}:where(.magicx-aia-input) span[class~=magicx-aia-segment-image]{display:inline;padding-left:var(--aia-chip-image-size, 1.25em);margin-right:5px;border-radius:var(--aia-chip-image-radius, 4px);background:var(--aia-chip-image, none) center / cover no-repeat,var(--aia-chip-image-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .083)));pointer-events:none;-webkit-user-select:none;user-select:none}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35));caret-color:transparent;cursor:text}.magicx-aia-input:has(strong[class~=\"magicx-aia-segment--editing\"]){caret-color:transparent}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::selection{background:transparent;color:inherit}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::-moz-selection{background:transparent;color:inherit}.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{content:attr(data-placeholder);color:var(--aia-color-text-muted, #c1c4cb);opacity:.7;pointer-events:none;transition:opacity var(--aia-placeholder-fade, .12s) ease-out}.magicx-aia-input[data-aia-placeholder-leaving]:before{opacity:0}@media (prefers-reduced-motion: reduce){.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{transition-duration:0s}}.magicx-aia-input[data-aia-empty=true]{display:inline-block;min-width:1px}.magicx-aia-pill-list-container{display:inline;margin-left:8px}.magicx-aia-pill-list-container:empty,.magicx-aia-pill-list-container[data-aia-pill-wrapped]{margin-left:0}.magicx-aia-submit-slot{display:contents}:where(.magicx-aia-input) strong[class~=magicx-aia-shimmer-sweep]{animation:aiaPillReveal .4s cubic-bezier(.4,0,.2,1) forwards}@keyframes aiaPillReveal{0%{opacity:0}}@media (min-width: 769px){[data-aia-dropdown] [data-aia-footer]:before,[data-aia-dropdown][data-options-position=above] [data-aia-footer]:before,:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{inset:0;background:var(--aia-surface, #ffffff)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: AIAutocompleteDropdownComponent, selector: "ai-autocomplete-dropdown", inputs: ["controller", "showPills", "showSkipButton", "showOptionIcons", "showOptionImages", "showOptionCounts", "productsLayout", "productImageFallback", "className", "mode"] }, { kind: "directive", type: AIAutocompleteEditorHostDirective, selector: "[aiaEditorHost]", inputs: ["aiaEditorHost", "autoFocus", "showChipIcons", "showChipImages"] }, { kind: "component", type: PillListComponent, selector: "aia-pill-list", inputs: ["pills", "activePillIndex", "rounded", "loading", "activeSelected"], outputs: ["selectPill"] }, { kind: "component", type: SubmitButtonComponent, selector: "aia-submit-button", inputs: ["disabled"], outputs: ["submit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
419
|
+
], viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, static: true }, { propertyName: "editorRef", first: true, predicate: ["editor"], descendants: true }, { propertyName: "pillContainerRef", first: true, predicate: ["pillContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #container\n class=\"magicx-aia magicx-aia-container\"\n [attr.data-pill-placement]=\"pillPlacement\"\n [attr.data-options-position]=\"optionsPosition\"\n [attr.data-animations]=\"animations ? 'on' : 'off'\"\n [attr.data-mode]=\"resolvedMode\"\n>\n <ai-autocomplete-dropdown\n *ngIf=\"controller\"\n [controller]=\"controller\"\n [showPills]=\"showDropdownPills\"\n [showSkipButton]=\"showSkipButton\"\n [showOptionIcons]=\"showOptionIcons\"\n [showOptionImages]=\"showOptionImages\"\n [showOptionCounts]=\"showOptionCounts\"\n [productsLayout]=\"productsLayout\"\n [productImageFallback]=\"productImageFallback\"\n ></ai-autocomplete-dropdown>\n\n <div\n class=\"magicx-aia-input-wrapper\"\n data-aia-input-wrapper=\"\"\n (click)=\"onWrapperClick($event)\"\n (keyup)=\"$event.stopPropagation()\"\n >\n <div class=\"magicx-aia-editor-area\" data-aia-editor=\"\">\n <div\n #editor\n *ngIf=\"controller\"\n [aiaEditorHost]=\"controller\"\n [autoFocus]=\"autoFocus\"\n [showChipIcons]=\"showChipIcons\"\n [showChipImages]=\"showChipImages\"\n class=\"magicx-aia-input\"\n data-aia-input=\"\"\n ></div>\n\n <ng-container *ngIf=\"controller && showInlinePills\">\n <span\n #pillContainer\n class=\"magicx-aia-pill-list-container\"\n data-aia-pill-list-container=\"\"\n *ngIf=\"\n (controller.isLoading$ | async) ||\n ((controller.suggestionPills$ | async)?.length ?? 0) > 0\n \"\n >\n <aia-pill-list\n [pills]=\"(controller.suggestionPills$ | async) ?? []\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"(controller.isActivePillSelected$ | async) ?? false\"\n [loading]=\"(controller.isLoading$ | async) ?? false\"\n (selectPill)=\"onSelectPill($event)\"\n ></aia-pill-list>\n </span>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"submitButtonState\">\n <aia-submit-button\n *ngSwitchCase=\"'default'\"\n [disabled]=\"\n !(\n controller &&\n canSubmit({\n segments: (controller.segments$ | async) ?? [],\n completedParams: (controller.completedParams$ | async) ?? []\n })\n )\n \"\n (submit)=\"onSubmitButtonClick($event)\"\n ></aia-submit-button>\n\n <span\n *ngSwitchCase=\"'custom'\"\n data-aia-submit=\"\"\n data-aia-submit-slot=\"\"\n class=\"magicx-aia-submit-slot\"\n (click)=\"onSubmitSlotClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"customSubmitTemplate\"></ng-container>\n </span>\n </ng-container>\n </div>\n</div>\n", styles: [":where(.magicx-aia){box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html),:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):before,:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):after{all:revert;box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-dropdown]):not(html):not(html):not(html):not(html):not(html){line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-align:start;text-shadow:none;font-style:normal;font-variant:normal;white-space:normal;visibility:visible;cursor:auto}:where([data-aia-input-wrapper] svg,[data-aia-dropdown] svg):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){display:revert;vertical-align:revert;position:revert;inset:revert;float:revert;margin:revert;padding:revert;border:revert;border-radius:revert;outline:revert;background:revert;box-shadow:revert;min-width:revert;max-width:revert;min-height:revert;max-height:revert;flex:revert;transition:revert;animation:revert;rotate:revert;scale:revert;translate:revert}:where([data-aia-input-wrapper] svg *,[data-aia-dropdown] svg *):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){transition:revert;animation:revert}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: #ffffff;--aia-border: #b0b0b0;--aia-dropdown-border: rgba(231, 231, 231, .5);--aia-dropdown-shadow: none;--aia-pill-bg: #bdbdbd;--aia-pill-color: #333539;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .105);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #000000;--aia-option-bg: #eef2ff;--aia-option-color: #1a1b1d;--aia-option-color-selected: #000000;--aia-option-font-size: 16px;--aia-written-text-color: #000000;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: #000000;--aia-submit-color: #ffffff;--aia-color-text-muted: #6b7280;--aia-skeleton-bg: rgba(189, 189, 189, .083);--aia-streak-rgb: 99, 102, 241;--aia-footer-hint-color: #505050;--aia-footer-brand-color: #b0b0b0;--aia-footer-badge-border: rgba(189, 189, 189, .51)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: #000000;--aia-border: #505050;--aia-dropdown-border: rgba(72, 72, 72, .5);--aia-dropdown-shadow: none;--aia-pill-bg: #bdbdbd;--aia-pill-color: #b0b0b0;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .15);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #ffffff;--aia-option-bg: #323232;--aia-option-color: #e7e7e7;--aia-option-color-selected: #ffffff;--aia-option-font-size: 16px;--aia-written-text-color: #ffffff;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: #ffffff;--aia-submit-color: #000000;--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: #1a1b1d;--aia-streak-rgb: 255, 255, 255;--aia-footer-hint-color: #b0b0b0;--aia-footer-brand-color: #505050;--aia-footer-badge-border: #505050}[data-aia-dropdown]{--aia-footer-row-height: 23px;--aia-footer-band: calc(var(--aia-footer-gap, 12px) + var(--aia-footer-row-height, 23px));--aia-grid-scroll-bottom: var(--aia-footer-band);--aia-grid-overlap-bottom: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-lead: 20px;--aia-footer-fade-inset: calc(-1 * var(--aia-footer-fade-lead)) 0 0}[data-aia-dropdown] [data-aia-pillbar] .aia-pill-list{padding-inline:10px}[data-aia-dropdown] [data-aia-pillbar] .aia-pill{justify-content:flex-start;border-inline-width:0;padding-inline:0}[data-aia-dropdown][data-aia-has-products]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: 0px;--aia-grid-overlap-top: 0px;--aia-footer-fade-lead: 0px;--aia-footer-row-min-height: 0px}[data-aia-dropdown] .aia-grid[data-scroll]{padding-top:var(--aia-grid-scroll-top, 0);padding-bottom:var(--aia-grid-scroll-bottom, 0);margin-top:var(--aia-grid-overlap-top, 0);margin-bottom:var(--aia-grid-overlap-bottom, 0)}[data-aia-dropdown] [data-aia-footer]:before{content:\"\";position:absolute;inset:var(--aia-footer-fade-inset, -20px 0 0);z-index:-1;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--aia-surface, #ffffff))}[data-aia-dropdown][data-aia-surface=glass]{--aia-footer-chip-bg: transparent}[data-aia-dropdown][data-aia-surface=glass] [data-aia-footer]:before{display:none}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: var(--aia-footer-band);--aia-grid-overlap-top: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-inset: 0 0 calc(-1 * var(--aia-footer-fade-lead));transform-origin:50% 100%;top:auto;bottom:100%;margin-top:0;margin-bottom:6px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]{padding:0 0 var(--aia-footer-gap, 12px) 8px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{background:linear-gradient(to top,transparent,var(--aia-surface, #ffffff))}:where(.magicx-aia[data-animations=\"off\"]) *,:where(.magicx-aia[data-animations=\"off\"]) *:before,:where(.magicx-aia[data-animations=\"off\"]) *:after{animation-duration:0s!important;transition-duration:0s!important}.magicx-aia-container{position:relative;font-family:var(--aia-font-family, inherit);container-type:inline-size}.magicx-aia-input-wrapper{padding:12px 16px 12px max(10px,var(--aia-content-inset-left, 16px));border:1px solid var(--aia-border, #b0b0b0);border-radius:10px;background:var(--aia-surface, #ffffff);box-shadow:var(--aia-shadow, none);overflow:hidden;display:flex;align-items:flex-start;gap:12px}.magicx-aia-editor-area{position:relative;flex:1;min-width:0;min-height:22px;line-height:var(--aia-editor-line-height, 1.9);font-family:inherit;font-size:var(--aia-written-text-font-size, 14px);white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;max-height:var(--aia-editor-max-height, calc(var(--aia-editor-line-height, 1.9) * 5em));overflow-y:auto;scrollbar-width:none}.magicx-aia-editor-area::-webkit-scrollbar{display:none}.magicx-aia-input{display:inline;outline:none;background:transparent;color:var(--aia-written-text-color, var(--aia-color-text-default, #fff));caret-color:var( --aia-caret-color, var(--aia-written-text-color, var(--aia-color-text-default, #fff)) );font-weight:300;vertical-align:middle}.magicx-aia-input[contenteditable=true]{-webkit-user-modify:read-write}.magicx-aia-input[contenteditable=plaintext-only]{-webkit-user-modify:read-write-plaintext-only}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]{display:inline;padding:3px 6px;border-radius:6px;-webkit-box-decoration-break:clone;box-decoration-break:clone;background:var(--aia-completed-pill-bg, rgba(189, 189, 189, .105));color:var(--aia-completed-pill-color, var(--aia-written-text-color, #fff));font-size:var(--aia-pill-font-size, 14px);font-weight:400;line-height:normal;white-space:normal;letter-spacing:var(--aia-completed-pill-tracking, -.02em);cursor:pointer;transition:background-color .15s ease}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]:hover{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35))}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon]{display:inline-block;width:1em;height:1em;margin-right:4px;vertical-align:-.125em;pointer-events:none;-webkit-user-select:none;user-select:none;will-change:transform}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon] svg{display:block;width:100%;height:100%}:where(.magicx-aia-input) span[class~=magicx-aia-segment-image]{display:inline;padding-left:var(--aia-chip-image-size, 1.25em);margin-right:5px;border-radius:var(--aia-chip-image-radius, 4px);background:var(--aia-chip-image, none) center / cover no-repeat,var(--aia-chip-image-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .083)));pointer-events:none;-webkit-user-select:none;user-select:none}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35));caret-color:transparent;cursor:text}.magicx-aia-input:has(strong[class~=\"magicx-aia-segment--editing\"]){caret-color:transparent}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::selection{background:transparent;color:inherit}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::-moz-selection{background:transparent;color:inherit}.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{content:attr(data-placeholder);color:var(--aia-color-text-muted, #c1c4cb);opacity:.7;pointer-events:none;transition:opacity var(--aia-placeholder-fade, .12s) ease-out}.magicx-aia-input[data-aia-placeholder-leaving]:before{opacity:0}@media (prefers-reduced-motion: reduce){.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{transition-duration:0s}}.magicx-aia-input[data-aia-empty=true]{display:inline-block;min-width:1px}.magicx-aia-pill-list-container{display:inline;margin-left:8px}.magicx-aia-pill-list-container:empty,.magicx-aia-pill-list-container[data-aia-pill-wrapped]{margin-left:0}.magicx-aia-submit-slot{display:contents}:where(.magicx-aia-input) strong[class~=magicx-aia-shimmer-sweep]{animation:aiaPillReveal .4s cubic-bezier(.4,0,.2,1) forwards}@keyframes aiaPillReveal{0%{opacity:0}}@media (min-width: 769px){[data-aia-dropdown] [data-aia-footer]:before,[data-aia-dropdown][data-options-position=above] [data-aia-footer]:before,:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{inset:0;background:var(--aia-surface, #ffffff)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: AIAutocompleteDropdownComponent, selector: "ai-autocomplete-dropdown", inputs: ["controller", "showPills", "showSkipButton", "showOptionIcons", "showOptionImages", "showOptionCounts", "productsLayout", "productImageFallback", "className", "mode"] }, { kind: "directive", type: AIAutocompleteEditorHostDirective, selector: "[aiaEditorHost]", inputs: ["aiaEditorHost", "autoFocus", "showChipIcons", "showChipImages"] }, { kind: "component", type: PillListComponent, selector: "aia-pill-list", inputs: ["pills", "activePillIndex", "rounded", "loading", "activeSelected"], outputs: ["selectPill"] }, { kind: "component", type: SubmitButtonComponent, selector: "aia-submit-button", inputs: ["disabled"], outputs: ["submit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
420
420
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteComponent, decorators: [{
|
|
421
421
|
type: Component,
|
|
422
422
|
args: [{ selector: "ai-autocomplete", standalone: true, imports: [
|
|
@@ -432,7 +432,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
432
432
|
useExisting: forwardRef(() => AIAutocompleteComponent),
|
|
433
433
|
multi: true,
|
|
434
434
|
},
|
|
435
|
-
], template: "<div\n #container\n class=\"magicx-aia magicx-aia-container\"\n [attr.data-pill-placement]=\"pillPlacement\"\n [attr.data-options-position]=\"optionsPosition\"\n [attr.data-animations]=\"animations ? 'on' : 'off'\"\n [attr.data-mode]=\"resolvedMode\"\n>\n <ai-autocomplete-dropdown\n *ngIf=\"controller\"\n [controller]=\"controller\"\n [showPills]=\"showDropdownPills\"\n [showSkipButton]=\"showSkipButton\"\n [showOptionIcons]=\"showOptionIcons\"\n [showOptionImages]=\"showOptionImages\"\n [showOptionCounts]=\"showOptionCounts\"\n [productsLayout]=\"productsLayout\"\n [productImageFallback]=\"productImageFallback\"\n ></ai-autocomplete-dropdown>\n\n <div\n class=\"magicx-aia-input-wrapper\"\n data-aia-input-wrapper=\"\"\n (click)=\"onWrapperClick($event)\"\n (keyup)=\"$event.stopPropagation()\"\n >\n <div class=\"magicx-aia-editor-area\" data-aia-editor=\"\">\n <div\n #editor\n *ngIf=\"controller\"\n [aiaEditorHost]=\"controller\"\n [autoFocus]=\"autoFocus\"\n [showChipIcons]=\"showChipIcons\"\n [showChipImages]=\"showChipImages\"\n class=\"magicx-aia-input\"\n data-aia-input=\"\"\n ></div>\n\n <ng-container *ngIf=\"controller && showInlinePills\">\n <span\n #pillContainer\n class=\"magicx-aia-pill-list-container\"\n data-aia-pill-list-container=\"\"\n *ngIf=\"\n (controller.isLoading$ | async) ||\n ((controller.suggestionPills$ | async)?.length ?? 0) > 0\n \"\n >\n <aia-pill-list\n [pills]=\"(controller.suggestionPills$ | async) ?? []\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"(controller.isActivePillSelected$ | async) ?? false\"\n [loading]=\"(controller.isLoading$ | async) ?? false\"\n (selectPill)=\"onSelectPill($event)\"\n ></aia-pill-list>\n </span>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"submitButtonState\">\n <aia-submit-button\n *ngSwitchCase=\"'default'\"\n [disabled]=\"\n !(\n controller &&\n canSubmit({\n segments: (controller.segments$ | async) ?? [],\n completedParams: (controller.completedParams$ | async) ?? []\n })\n )\n \"\n (submit)=\"onSubmitButtonClick($event)\"\n ></aia-submit-button>\n\n <span\n *ngSwitchCase=\"'custom'\"\n data-aia-submit=\"\"\n data-aia-submit-slot=\"\"\n class=\"magicx-aia-submit-slot\"\n (click)=\"onSubmitSlotClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"customSubmitTemplate\"></ng-container>\n </span>\n </ng-container>\n </div>\n</div>\n", styles: [":where(.magicx-aia){box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html),:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):before,:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):after{all:revert;box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-dropdown]):not(html):not(html):not(html):not(html):not(html){line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-align:start;text-shadow:none;font-style:normal;font-variant:normal;white-space:normal;visibility:visible;cursor:auto}:where([data-aia-input-wrapper] svg,[data-aia-dropdown] svg):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){display:revert;vertical-align:revert;position:revert;inset:revert;float:revert;margin:revert;padding:revert;border:revert;border-radius:revert;outline:revert;background:revert;box-shadow:revert;min-width:revert;max-width:revert;min-height:revert;max-height:revert;flex:revert;transition:revert;animation:revert;rotate:revert;scale:revert;translate:revert}:where([data-aia-input-wrapper] svg *,[data-aia-dropdown] svg *):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){transition:revert;animation:revert}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: #ffffff;--aia-border: #b0b0b0;--aia-dropdown-border: rgba(231, 231, 231, .5);--aia-dropdown-shadow: none;--aia-pill-bg: #bdbdbd;--aia-pill-color: #333539;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .105);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #000000;--aia-option-bg: #eef2ff;--aia-option-color: #1a1b1d;--aia-option-color-selected: #000000;--aia-option-font-size: 16px;--aia-written-text-color: #000000;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: #000000;--aia-submit-color: #ffffff;--aia-color-text-muted: #6b7280;--aia-skeleton-bg: rgba(189, 189, 189, .083);--aia-streak-rgb: 99, 102, 241;--aia-footer-hint-color: #505050;--aia-footer-brand-color: #b0b0b0;--aia-footer-badge-border: rgba(189, 189, 189, .51)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: #000000;--aia-border: #505050;--aia-dropdown-border: rgba(72, 72, 72, .5);--aia-dropdown-shadow: none;--aia-pill-bg: #bdbdbd;--aia-pill-color: #b0b0b0;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .15);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #ffffff;--aia-option-bg: #323232;--aia-option-color: #e7e7e7;--aia-option-color-selected: #ffffff;--aia-option-font-size: 16px;--aia-written-text-color: #ffffff;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: #ffffff;--aia-submit-color: #000000;--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: #1a1b1d;--aia-streak-rgb: 255, 255, 255;--aia-footer-hint-color: #b0b0b0;--aia-footer-brand-color: #505050;--aia-footer-badge-border: #505050}[data-aia-dropdown]{--aia-footer-row-height: 23px;--aia-footer-band: calc(var(--aia-footer-gap, 12px) + var(--aia-footer-row-height, 23px));--aia-grid-scroll-bottom: var(--aia-footer-band);--aia-grid-overlap-bottom: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-lead: 20px;--aia-footer-fade-inset: calc(-1 * var(--aia-footer-fade-lead)) 0 0}[data-aia-dropdown] [data-aia-pillbar] .aia-pill-list{padding-inline:10px}[data-aia-dropdown] [data-aia-pillbar] .aia-pill{justify-content:flex-start;border-inline-width:0;padding-inline:0}[data-aia-dropdown][data-aia-has-products]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: 0px;--aia-grid-overlap-top: 0px;--aia-footer-fade-lead: 0px}[data-aia-dropdown] .aia-grid[data-scroll]{padding-top:var(--aia-grid-scroll-top, 0);padding-bottom:var(--aia-grid-scroll-bottom, 0);margin-top:var(--aia-grid-overlap-top, 0);margin-bottom:var(--aia-grid-overlap-bottom, 0)}[data-aia-dropdown] [data-aia-footer]:before{content:\"\";position:absolute;inset:var(--aia-footer-fade-inset, -20px 0 0);z-index:-1;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--aia-surface, #ffffff))}[data-aia-dropdown][data-aia-surface=glass]{--aia-footer-chip-bg: transparent}[data-aia-dropdown][data-aia-surface=glass] [data-aia-footer]:before{display:none}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: var(--aia-footer-band);--aia-grid-overlap-top: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-inset: 0 0 calc(-1 * var(--aia-footer-fade-lead));transform-origin:50% 100%;top:auto;bottom:100%;margin-top:0;margin-bottom:6px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]{padding:0 0 var(--aia-footer-gap, 12px) 8px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{background:linear-gradient(to top,transparent,var(--aia-surface, #ffffff))}:where(.magicx-aia[data-animations=\"off\"]) *,:where(.magicx-aia[data-animations=\"off\"]) *:before,:where(.magicx-aia[data-animations=\"off\"]) *:after{animation-duration:0s!important;transition-duration:0s!important}.magicx-aia-container{position:relative;font-family:var(--aia-font-family, inherit);container-type:inline-size}.magicx-aia-input-wrapper{padding:12px 16px 12px max(10px,var(--aia-content-inset-left, 16px));border:1px solid var(--aia-border, #b0b0b0);border-radius:10px;background:var(--aia-surface, #ffffff);box-shadow:var(--aia-shadow, none);overflow:hidden;display:flex;align-items:flex-start;gap:12px}.magicx-aia-editor-area{position:relative;flex:1;min-width:0;min-height:22px;line-height:var(--aia-editor-line-height, 1.9);font-family:inherit;font-size:var(--aia-written-text-font-size, 14px);white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;max-height:var(--aia-editor-max-height, calc(var(--aia-editor-line-height, 1.9) * 5em));overflow-y:auto;scrollbar-width:none}.magicx-aia-editor-area::-webkit-scrollbar{display:none}.magicx-aia-input{display:inline;outline:none;background:transparent;color:var(--aia-written-text-color, var(--aia-color-text-default, #fff));caret-color:var( --aia-caret-color, var(--aia-written-text-color, var(--aia-color-text-default, #fff)) );font-weight:300;vertical-align:middle}.magicx-aia-input[contenteditable=true]{-webkit-user-modify:read-write}.magicx-aia-input[contenteditable=plaintext-only]{-webkit-user-modify:read-write-plaintext-only}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]{display:inline;padding:3px 6px;border-radius:6px;-webkit-box-decoration-break:clone;box-decoration-break:clone;background:var(--aia-completed-pill-bg, rgba(189, 189, 189, .105));color:var(--aia-completed-pill-color, var(--aia-written-text-color, #fff));font-size:var(--aia-pill-font-size, 14px);font-weight:400;line-height:normal;white-space:normal;letter-spacing:var(--aia-completed-pill-tracking, -.02em);cursor:pointer;transition:background-color .15s ease}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]:hover{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35))}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon]{display:inline-block;width:1em;height:1em;margin-right:4px;vertical-align:-.125em;pointer-events:none;-webkit-user-select:none;user-select:none;will-change:transform}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon] svg{display:block;width:100%;height:100%}:where(.magicx-aia-input) span[class~=magicx-aia-segment-image]{display:inline;padding-left:var(--aia-chip-image-size, 1.25em);margin-right:5px;border-radius:var(--aia-chip-image-radius, 4px);background:var(--aia-chip-image, none) center / cover no-repeat,var(--aia-chip-image-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .083)));pointer-events:none;-webkit-user-select:none;user-select:none}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35));caret-color:transparent;cursor:text}.magicx-aia-input:has(strong[class~=\"magicx-aia-segment--editing\"]){caret-color:transparent}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::selection{background:transparent;color:inherit}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::-moz-selection{background:transparent;color:inherit}.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{content:attr(data-placeholder);color:var(--aia-color-text-muted, #c1c4cb);opacity:.7;pointer-events:none;transition:opacity var(--aia-placeholder-fade, .12s) ease-out}.magicx-aia-input[data-aia-placeholder-leaving]:before{opacity:0}@media (prefers-reduced-motion: reduce){.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{transition-duration:0s}}.magicx-aia-input[data-aia-empty=true]{display:inline-block;min-width:1px}.magicx-aia-pill-list-container{display:inline;margin-left:8px}.magicx-aia-pill-list-container:empty,.magicx-aia-pill-list-container[data-aia-pill-wrapped]{margin-left:0}.magicx-aia-submit-slot{display:contents}:where(.magicx-aia-input) strong[class~=magicx-aia-shimmer-sweep]{animation:aiaPillReveal .4s cubic-bezier(.4,0,.2,1) forwards}@keyframes aiaPillReveal{0%{opacity:0}}@media (min-width: 769px){[data-aia-dropdown] [data-aia-footer]:before,[data-aia-dropdown][data-options-position=above] [data-aia-footer]:before,:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{inset:0;background:var(--aia-surface, #ffffff)}}\n"] }]
|
|
435
|
+
], template: "<div\n #container\n class=\"magicx-aia magicx-aia-container\"\n [attr.data-pill-placement]=\"pillPlacement\"\n [attr.data-options-position]=\"optionsPosition\"\n [attr.data-animations]=\"animations ? 'on' : 'off'\"\n [attr.data-mode]=\"resolvedMode\"\n>\n <ai-autocomplete-dropdown\n *ngIf=\"controller\"\n [controller]=\"controller\"\n [showPills]=\"showDropdownPills\"\n [showSkipButton]=\"showSkipButton\"\n [showOptionIcons]=\"showOptionIcons\"\n [showOptionImages]=\"showOptionImages\"\n [showOptionCounts]=\"showOptionCounts\"\n [productsLayout]=\"productsLayout\"\n [productImageFallback]=\"productImageFallback\"\n ></ai-autocomplete-dropdown>\n\n <div\n class=\"magicx-aia-input-wrapper\"\n data-aia-input-wrapper=\"\"\n (click)=\"onWrapperClick($event)\"\n (keyup)=\"$event.stopPropagation()\"\n >\n <div class=\"magicx-aia-editor-area\" data-aia-editor=\"\">\n <div\n #editor\n *ngIf=\"controller\"\n [aiaEditorHost]=\"controller\"\n [autoFocus]=\"autoFocus\"\n [showChipIcons]=\"showChipIcons\"\n [showChipImages]=\"showChipImages\"\n class=\"magicx-aia-input\"\n data-aia-input=\"\"\n ></div>\n\n <ng-container *ngIf=\"controller && showInlinePills\">\n <span\n #pillContainer\n class=\"magicx-aia-pill-list-container\"\n data-aia-pill-list-container=\"\"\n *ngIf=\"\n (controller.isLoading$ | async) ||\n ((controller.suggestionPills$ | async)?.length ?? 0) > 0\n \"\n >\n <aia-pill-list\n [pills]=\"(controller.suggestionPills$ | async) ?? []\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"(controller.isActivePillSelected$ | async) ?? false\"\n [loading]=\"(controller.isLoading$ | async) ?? false\"\n (selectPill)=\"onSelectPill($event)\"\n ></aia-pill-list>\n </span>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"submitButtonState\">\n <aia-submit-button\n *ngSwitchCase=\"'default'\"\n [disabled]=\"\n !(\n controller &&\n canSubmit({\n segments: (controller.segments$ | async) ?? [],\n completedParams: (controller.completedParams$ | async) ?? []\n })\n )\n \"\n (submit)=\"onSubmitButtonClick($event)\"\n ></aia-submit-button>\n\n <span\n *ngSwitchCase=\"'custom'\"\n data-aia-submit=\"\"\n data-aia-submit-slot=\"\"\n class=\"magicx-aia-submit-slot\"\n (click)=\"onSubmitSlotClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"customSubmitTemplate\"></ng-container>\n </span>\n </ng-container>\n </div>\n</div>\n", styles: [":where(.magicx-aia){box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html),:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):before,:where([data-aia-input-wrapper],[data-aia-input-wrapper] *,[data-aia-dropdown],[data-aia-dropdown] *):not(:where(svg,svg *,[data-aia-submit-slot],[data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html):after{all:revert;box-sizing:border-box}:where([data-aia-input-wrapper],[data-aia-dropdown]):not(html):not(html):not(html):not(html):not(html){line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-align:start;text-shadow:none;font-style:normal;font-variant:normal;white-space:normal;visibility:visible;cursor:auto}:where([data-aia-input-wrapper] svg,[data-aia-dropdown] svg):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){display:revert;vertical-align:revert;position:revert;inset:revert;float:revert;margin:revert;padding:revert;border:revert;border-radius:revert;outline:revert;background:revert;box-shadow:revert;min-width:revert;max-width:revert;min-height:revert;max-height:revert;flex:revert;transition:revert;animation:revert;rotate:revert;scale:revert;translate:revert}:where([data-aia-input-wrapper] svg *,[data-aia-dropdown] svg *):not(:where([data-aia-submit-slot] *)):not(html):not(html):not(html):not(html):not(html){transition:revert;animation:revert}:where(.magicx-aia),:where(.magicx-aia[data-mode=\"light\"]){--aia-surface: #ffffff;--aia-border: #b0b0b0;--aia-dropdown-border: rgba(231, 231, 231, .5);--aia-dropdown-shadow: none;--aia-pill-bg: #bdbdbd;--aia-pill-color: #333539;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .105);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #000000;--aia-option-bg: #eef2ff;--aia-option-color: #1a1b1d;--aia-option-color-selected: #000000;--aia-option-font-size: 16px;--aia-written-text-color: #000000;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #000000);--aia-submit-bg: #000000;--aia-submit-color: #ffffff;--aia-color-text-muted: #6b7280;--aia-skeleton-bg: rgba(189, 189, 189, .083);--aia-streak-rgb: 99, 102, 241;--aia-footer-hint-color: #505050;--aia-footer-brand-color: #b0b0b0;--aia-footer-badge-border: rgba(189, 189, 189, .51)}:where(.magicx-aia[data-mode=\"dark\"]){--aia-surface: #000000;--aia-border: #505050;--aia-dropdown-border: rgba(72, 72, 72, .5);--aia-dropdown-shadow: none;--aia-pill-bg: #bdbdbd;--aia-pill-color: #b0b0b0;--aia-pill-font-size: 16px;--aia-completed-pill-bg: rgba(189, 189, 189, .15);--aia-completed-pill-bg-active: rgba(189, 189, 189, .35);--aia-completed-pill-color: #ffffff;--aia-option-bg: #323232;--aia-option-color: #e7e7e7;--aia-option-color-selected: #ffffff;--aia-option-font-size: 16px;--aia-written-text-color: #ffffff;--aia-written-text-font-size: 16px;--aia-caret-color: var(--aia-written-text-color, #ffffff);--aia-submit-bg: #ffffff;--aia-submit-color: #000000;--aia-color-text-muted: #c1c4cb;--aia-skeleton-bg: #1a1b1d;--aia-streak-rgb: 255, 255, 255;--aia-footer-hint-color: #b0b0b0;--aia-footer-brand-color: #505050;--aia-footer-badge-border: #505050}[data-aia-dropdown]{--aia-footer-row-height: 23px;--aia-footer-band: calc(var(--aia-footer-gap, 12px) + var(--aia-footer-row-height, 23px));--aia-grid-scroll-bottom: var(--aia-footer-band);--aia-grid-overlap-bottom: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-lead: 20px;--aia-footer-fade-inset: calc(-1 * var(--aia-footer-fade-lead)) 0 0}[data-aia-dropdown] [data-aia-pillbar] .aia-pill-list{padding-inline:10px}[data-aia-dropdown] [data-aia-pillbar] .aia-pill{justify-content:flex-start;border-inline-width:0;padding-inline:0}[data-aia-dropdown][data-aia-has-products]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: 0px;--aia-grid-overlap-top: 0px;--aia-footer-fade-lead: 0px;--aia-footer-row-min-height: 0px}[data-aia-dropdown] .aia-grid[data-scroll]{padding-top:var(--aia-grid-scroll-top, 0);padding-bottom:var(--aia-grid-scroll-bottom, 0);margin-top:var(--aia-grid-overlap-top, 0);margin-bottom:var(--aia-grid-overlap-bottom, 0)}[data-aia-dropdown] [data-aia-footer]:before{content:\"\";position:absolute;inset:var(--aia-footer-fade-inset, -20px 0 0);z-index:-1;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--aia-surface, #ffffff))}[data-aia-dropdown][data-aia-surface=glass]{--aia-footer-chip-bg: transparent}[data-aia-dropdown][data-aia-surface=glass] [data-aia-footer]:before{display:none}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown]{--aia-grid-scroll-bottom: 0px;--aia-grid-overlap-bottom: 0px;--aia-grid-scroll-top: var(--aia-footer-band);--aia-grid-overlap-top: calc(-1 * (var(--aia-footer-band) + 8px));--aia-footer-fade-inset: 0 0 calc(-1 * var(--aia-footer-fade-lead));transform-origin:50% 100%;top:auto;bottom:100%;margin-top:0;margin-bottom:6px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] .aia-stack{flex-direction:column-reverse}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]{padding:0 0 var(--aia-footer-gap, 12px) 8px}:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{background:linear-gradient(to top,transparent,var(--aia-surface, #ffffff))}:where(.magicx-aia[data-animations=\"off\"]) *,:where(.magicx-aia[data-animations=\"off\"]) *:before,:where(.magicx-aia[data-animations=\"off\"]) *:after{animation-duration:0s!important;transition-duration:0s!important}.magicx-aia-container{position:relative;font-family:var(--aia-font-family, inherit);container-type:inline-size}.magicx-aia-input-wrapper{padding:12px 16px 12px max(10px,var(--aia-content-inset-left, 16px));border:1px solid var(--aia-border, #b0b0b0);border-radius:10px;background:var(--aia-surface, #ffffff);box-shadow:var(--aia-shadow, none);overflow:hidden;display:flex;align-items:flex-start;gap:12px}.magicx-aia-editor-area{position:relative;flex:1;min-width:0;min-height:22px;line-height:var(--aia-editor-line-height, 1.9);font-family:inherit;font-size:var(--aia-written-text-font-size, 14px);white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;max-height:var(--aia-editor-max-height, calc(var(--aia-editor-line-height, 1.9) * 5em));overflow-y:auto;scrollbar-width:none}.magicx-aia-editor-area::-webkit-scrollbar{display:none}.magicx-aia-input{display:inline;outline:none;background:transparent;color:var(--aia-written-text-color, var(--aia-color-text-default, #fff));caret-color:var( --aia-caret-color, var(--aia-written-text-color, var(--aia-color-text-default, #fff)) );font-weight:300;vertical-align:middle}.magicx-aia-input[contenteditable=true]{-webkit-user-modify:read-write}.magicx-aia-input[contenteditable=plaintext-only]{-webkit-user-modify:read-write-plaintext-only}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]{display:inline;padding:3px 6px;border-radius:6px;-webkit-box-decoration-break:clone;box-decoration-break:clone;background:var(--aia-completed-pill-bg, rgba(189, 189, 189, .105));color:var(--aia-completed-pill-color, var(--aia-written-text-color, #fff));font-size:var(--aia-pill-font-size, 14px);font-weight:400;line-height:normal;white-space:normal;letter-spacing:var(--aia-completed-pill-tracking, -.02em);cursor:pointer;transition:background-color .15s ease}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--completed]:hover{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35))}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon]{display:inline-block;width:1em;height:1em;margin-right:4px;vertical-align:-.125em;pointer-events:none;-webkit-user-select:none;user-select:none;will-change:transform}:where(.magicx-aia-input) span[class~=magicx-aia-segment-icon] svg{display:block;width:100%;height:100%}:where(.magicx-aia-input) span[class~=magicx-aia-segment-image]{display:inline;padding-left:var(--aia-chip-image-size, 1.25em);margin-right:5px;border-radius:var(--aia-chip-image-radius, 4px);background:var(--aia-chip-image, none) center / cover no-repeat,var(--aia-chip-image-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .083)));pointer-events:none;-webkit-user-select:none;user-select:none}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]{background:var(--aia-completed-pill-bg-active, rgba(189, 189, 189, .35));caret-color:transparent;cursor:text}.magicx-aia-input:has(strong[class~=\"magicx-aia-segment--editing\"]){caret-color:transparent}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::selection{background:transparent;color:inherit}:where(.magicx-aia-input) strong[class~=magicx-aia-segment--editing]::-moz-selection{background:transparent;color:inherit}.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{content:attr(data-placeholder);color:var(--aia-color-text-muted, #c1c4cb);opacity:.7;pointer-events:none;transition:opacity var(--aia-placeholder-fade, .12s) ease-out}.magicx-aia-input[data-aia-placeholder-leaving]:before{opacity:0}@media (prefers-reduced-motion: reduce){.magicx-aia-input[data-aia-empty=true][data-placeholder]:before{transition-duration:0s}}.magicx-aia-input[data-aia-empty=true]{display:inline-block;min-width:1px}.magicx-aia-pill-list-container{display:inline;margin-left:8px}.magicx-aia-pill-list-container:empty,.magicx-aia-pill-list-container[data-aia-pill-wrapped]{margin-left:0}.magicx-aia-submit-slot{display:contents}:where(.magicx-aia-input) strong[class~=magicx-aia-shimmer-sweep]{animation:aiaPillReveal .4s cubic-bezier(.4,0,.2,1) forwards}@keyframes aiaPillReveal{0%{opacity:0}}@media (min-width: 769px){[data-aia-dropdown] [data-aia-footer]:before,[data-aia-dropdown][data-options-position=above] [data-aia-footer]:before,:where(.magicx-aia[data-options-position=\"above\"]) [data-aia-dropdown] [data-aia-footer]:before{inset:0;background:var(--aia-surface, #ffffff)}}\n"] }]
|
|
436
436
|
}], propDecorators: { apiConfig: [{
|
|
437
437
|
type: Input
|
|
438
438
|
}], additionalContext: [{
|
|
@@ -531,4 +531,4 @@ function resolveInitialMode(mode) {
|
|
|
531
531
|
return "dark";
|
|
532
532
|
return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
533
533
|
}
|
|
534
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUlOLE1BQU0sRUFDTixXQUFXLEVBR1gsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTZCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUlMLGlCQUFpQixFQUVqQixnQkFBZ0IsRUFDaEIsY0FBYyxFQU1kLGVBQWUsR0FDaEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7O0FBRTFGOzs7Ozs7O0dBT0c7QUF3QkgsTUFBTSxPQUFPLHVCQUF1QjtJQXZCcEM7UUE0Q1csc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLHdEQUF3RDtRQUMvQyxr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ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICB0eXBlIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICB0eXBlIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIGluamVjdCxcbiAgTmdab25lLFxuICB0eXBlIE9uQ2hhbmdlcyxcbiAgdHlwZSBPbkRlc3Ryb3ksXG4gIHR5cGUgT25Jbml0LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICB0eXBlIFNpbXBsZUNoYW5nZXMsXG4gIHR5cGUgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyB0eXBlIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBBUElDb25maWcsXG4gIHR5cGUgQXBwZWFyYW5jZU1vZGUsXG4gIHR5cGUgQXV0b2NvbXBsZXRlUmVzdWx0LFxuICBidWlsZFN1Ym1pdFJlc3VsdCxcbiAgdHlwZSBDb21wbGV0ZWRQYXJhbVN0YXRlLFxuICBleHRyYWN0UGxhaW5UZXh0LFxuICBNb2RlQ29udHJvbGxlcixcbiAgdHlwZSBPcHRpb25PdmVycmlkZXMsXG4gIHR5cGUgUHJvZHVjdCxcbiAgdHlwZSBQcm9kdWN0SW1hZ2VGYWxsYmFjayxcbiAgdHlwZSBQcm9kdWN0c0NvbmZpZyxcbiAgdHlwZSBQcm9kdWN0c0xheW91dCxcbiAgc2V0Q3Vyc29yT2Zmc2V0LFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcbmltcG9ydCB7IEFJQXV0b2NvbXBsZXRlRHJvcGRvd25Db21wb25lbnQgfSBmcm9tIFwiLi4vYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnRcIjtcbmltcG9ydCB7IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciB9IGZyb20gXCIuLi9jb250cm9sbGVyL2FpLWF1dG9jb21wbGV0ZS5jb250cm9sbGVyXCI7XG5pbXBvcnQgeyBBSUF1dG9jb21wbGV0ZUVkaXRvckhvc3REaXJlY3RpdmUgfSBmcm9tIFwiLi4vaW50ZXJuYWwvZWRpdG9yLWhvc3QvZWRpdG9yLWhvc3QuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBQaWxsTGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9waWxsLWxpc3QvcGlsbC1saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3VibWl0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL3N1Ym1pdC1idXR0b24vc3VibWl0LWJ1dHRvbi5jb21wb25lbnRcIjtcblxuLyoqXG4gKiBUaWVyIDEgY29tcG9uZW50IOKAlCBgPGFpLWF1dG9jb21wbGV0ZT5gLiBUaGUgQW5ndWxhciBlcXVpdmFsZW50IG9mIFJlYWN0J3NcbiAqIGA8QUlBdXRvY29tcGxldGUgLz5gLiBPd25zIHRoZSBjb250ZW50RWRpdGFibGUgZWRpdG9yLCBpbmxpbmUgcGlsbHMsIG1vZGVcbiAqIGNvbnRyb2xsZXIsIHN1Ym1pdCBidXR0b24gc2xvdCwgYW5kIGFuIGVtYmVkZGVkXG4gKiB7QGxpbmsgQUlBdXRvY29tcGxldGVDb250cm9sbGVyfSB0aGF0IGRyaXZlcyB0aGUgZHJvcGRvd24uXG4gKlxuICogQHB1YmxpY1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYWktYXV0b2NvbXBsZXRlXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQUlBdXRvY29tcGxldGVEcm9wZG93bkNvbXBvbmVudCxcbiAgICBBSUF1dG9jb21wbGV0ZUVkaXRvckhvc3REaXJlY3RpdmUsXG4gICAgUGlsbExpc3RDb21wb25lbnQsXG4gICAgU3VibWl0QnV0dG9uQ29tcG9uZW50LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuY3NzXCJdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFJQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgLy8gPT09IElucHV0cyAobWlycm9ycyBSZWFjdCdzIEFJQXV0b2NvbXBsZXRlUHJvcHMpID09PVxuXG4gIEBJbnB1dCgpIGFwaUNvbmZpZz86IEFQSUNvbmZpZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHVzZXIgY29udGV4dC4gSW5jbHVkZSB3aGF0ZXZlciB5b3Uga25vdyBhYm91dCB0aGUgdXNlciDigJQgYVxuICAgKiBwcm9maWxlLCBwcmVmZXJlbmNlcywgd29ya3NwYWNlLCBhbnl0aGluZyDigJQgdG8gcGVyc29uYWxpemUgc3VnZ2VzdGVkXG4gICAqIHBhcmFtZXRlcnMgYW5kIG9wdGlvbnMgdG8gdGhlbS4gQmluZCBhIHN0YWJsZSByZWZlcmVuY2U7IHRoZSBzYW1lIHN3YXBcbiAgICogcnVsZSB0aGF0IGFwcGxpZXMgdG8gYGFwaUNvbmZpZ2AgYXBwbGllcyBoZXJlLlxuICAgKi9cbiAgQElucHV0KCkgYWRkaXRpb25hbENvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIFN0YWJsZSBpZCBmb3IgdGhpcyB2aXNpdG9yLCBrZXB0IGJ5IHRoZSBob3N0IGFjcm9zcyBwYWdlIGxvYWRzLiBSaWRlcyBvblxuICAgKiB0ZWxlbWV0cnkgZXZlbnRzIHNvIHNlYXJjaGVzIGNhbiBiZSBqb2luZWQgdG8gd2hhdCB0aGUgdmlzaXRvciBkb2VzXG4gICAqIGFmdGVyd2FyZHMuIE11c3QgYmUgYSBVVUlEIHY0OyBvbWl0IHRvIHNlbmQgbm9uZS4gQSBmdW5jdGlvbiBpcyBjYWxsZWRcbiAgICogb25seSBvbmNlIHRoZSBzZXJ2ZXIgaGFzIGZ1bm5lbCB0ZWxlbWV0cnkgb24uXG4gICAqL1xuICBASW5wdXQoKSB2aXNpdG9ySWQ/OiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgQElucHV0KCkgb3B0aW9uT3ZlcnJpZGVzPzogT3B0aW9uT3ZlcnJpZGVzO1xuICBASW5wdXQoKSBtYXNrQ29tcGxldGVkVGV4dCA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2x1bW5zPzogbnVtYmVyO1xuICAvKiogV2hlcmUgdW5maWxsZWQgcGlsbHMgcmVuZGVyLiBEZWZhdWx0OiBcImRyb3Bkb3duXCIuICovXG4gIEBJbnB1dCgpIHBpbGxQbGFjZW1lbnQ6IFwiaW5saW5lXCIgfCBcImRyb3Bkb3duXCIgfCBcImhpZGRlblwiID0gXCJkcm9wZG93blwiO1xuICAvKiogQ29sb3IgbW9kZS4gXCJhdXRvXCIgZm9sbG93cyBwcmVmZXJzLWNvbG9yLXNjaGVtZS4gRGVmYXVsdDogXCJhdXRvXCIuICovXG4gIEBJbnB1dCgpIG1vZGU6IEFwcGVhcmFuY2VNb2RlID0gXCJhdXRvXCI7XG4gIEBJbnB1dCgpIG9wdGlvbnNQb3NpdGlvbjogXCJhYm92ZVwiIHwgXCJiZWxvd1wiID0gXCJiZWxvd1wiO1xuICBASW5wdXQoKSBhbmltYXRpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgZHJvcGRvd25UcmlnZ2VyPzogXCJhdXRvXCIgfCBcIm1hbnVhbFwiIHwgXCJoaWRkZW5cIjtcbiAgQElucHV0KCkgY2xvc2VEcm9wZG93bk9uQmx1cj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dOb25UYXBwYWJsZU9wdGlvbnM/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIGRyb3Bkb3duJ3MgcGlsbCBiYXIgZW5kcyBpbiBhIHNtYWxsIFwic2tpcFwiIGJ1dHRvblxuICAgKiB0aGF0IGRpc21pc3NlcyB0aGUgYWN0aXZlIHBpbGwg4oCUIHNhbWUgYWN0aW9uIGFzIHByZXNzaW5nIOKGkiBhdCB0aGUgZW5kIG9mXG4gICAqIHRoZSBpbnB1dC4gU2V0IHRvIGZhbHNlIHRvIGhpZGUgaXQuIFdoZW4gcGlsbHMgcmVuZGVyIGVsc2V3aGVyZVxuICAgKiAoYHBpbGxQbGFjZW1lbnQ6IFwiaW5saW5lXCJgIC8gYFwiaGlkZGVuXCJgKSB0aGUgYmFyIHJlbmRlcnMgYXMgYSBza2lwLW9ubHlcbiAgICogcm93IGhvbGRpbmcganVzdCB0aGUgYnV0dG9uLiBIaWRkZW4gd2hpbGUgdGhlIGlucHV0IGlzIGVtcHR5IOKAlCBpdCBhcHBlYXJzXG4gICAqIGFsb25nc2lkZSB0aGUgZm9vdGVyJ3MgXCLihpIgdG8gc2tpcFwiIGhpbnQgb25jZSB0aGUgdXNlciBoYXMgdHlwZWQuXG4gICAqL1xuICBASW5wdXQoKSBzaG93U2tpcEJ1dHRvbiA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbiBvcHRpb24gdGhhdCBjYXJyaWVzIGFuIGBpY29uX3N2Z2AgZHJhd3MgaXRzIGljb24gYmVmb3JlIGl0cyB0ZXh0IGluIHRoZSBkcm9wZG93bi4gU2V0IHRvIGZhbHNlIHRvIHJlbmRlciBvcHRpb24gcm93cyBhcyB0ZXh0IG9ubHkuICovXG4gIEBJbnB1dCgpIHNob3dPcHRpb25JY29ucyA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbiBvcHRpb24gdGhhdCBjYXJyaWVzIGFuIGBpbWFnZV91cmxgIGRyYXdzIGl0IGFzIGEgc3F1YXJlIHRodW1ibmFpbCBiZWZvcmUgaXRzIHRleHQgaW4gdGhlIGRyb3Bkb3duIChpbiBwbGFjZSBvZiBpdHMgYGljb25fc3ZnYCkuIFNldCB0byBmYWxzZSB0byByZW5kZXIgb3B0aW9uIHJvd3Mgd2l0aG91dCBwaWN0dXJlcy4gKi9cbiAgQElucHV0KCkgc2hvd09wdGlvbkltYWdlcyA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbiBvcHRpb24gdGhhdCBjYXJyaWVzIGFuIGBpdGVtX2NvdW50YCBzaG93cyBpdCBhcyBhIG11dGVkIGxhYmVsIGF0IHRoZSByb3cncyB0cmFpbGluZyBlZGdlIChcIjEyIGl0ZW1zXCIpLiBTZXQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgY291bnRzLiAqL1xuICBASW5wdXQoKSBzaG93T3B0aW9uQ291bnRzID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEhvdyB0aGUgcHJvZHVjdCBzdHJpcCBsYXlzIGl0cyBjYXJkcyBvdXQuIGBcInJvd1wiYCAodGhlIGRlZmF1bHQpIGlzIGFcbiAgICogaG9yaXpvbnRhbGx5IHNjcm9sbGluZyBzaGVsZiBvZiBjYXJkcy4gYFwibGlzdFwiYCBzdGFja3MgdGhlIHNhbWUgY2FyZHMgYXNcbiAgICogZnVsbC13aWR0aCByb3dzIOKAlCB0aHVtYm5haWwgb24gdGhlIGxlZnQsIHRpdGxlLCB2ZW5kb3IgYW5kIHByaWNlIG9uIHRoZVxuICAgKiByaWdodCDigJQgZm9yIHJlc3VsdHMgdGhhdCByZWFkIGFzIGEgbGlzdCAoY291cnNlcywgbGlzdGluZ3MsIGRvY3VtZW50cylcbiAgICogcmF0aGVyIHRoYW4gcHJvZHVjdHMgb24gYSBzaGVsZjsgdGhlIGNvbHVtbiBzY3JvbGxzIHZlcnRpY2FsbHkgaW5zaWRlXG4gICAqIGAtLWFpYS1wcm9kdWN0LWxpc3QtbWF4LWhlaWdodGAuXG4gICAqL1xuICBASW5wdXQoKSBwcm9kdWN0c0xheW91dDogUHJvZHVjdHNMYXlvdXQgPSBcInJvd1wiO1xuICAvKiogTWlzc2luZy9mYWlsZWQgaW1hZ2UgZmFsbGJhY2suIFN0eWxlIGluaXRpYWxzIHdpdGggYFtkYXRhLWFpYS1wcm9kdWN0LWluaXRpYWxdYC4gKi9cbiAgQElucHV0KCkgcHJvZHVjdEltYWdlRmFsbGJhY2s6IFByb2R1Y3RJbWFnZUZhbGxiYWNrID0gXCJpbWFnZVwiO1xuICAvKiogV2hlbiB0cnVlIChkZWZhdWx0KSwgYSBjb21wbGV0ZWQgY2hpcCBpbiB0aGUgaW5wdXQgZHJhd3MgdGhlIGljb24gb2YgdGhlIG9wdGlvbiB0aGF0IGFuc3dlcmVkIGl0LiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIGNoaXBzIGFzIHRleHQgb25seS4gKi9cbiAgQElucHV0KCkgc2hvd0NoaXBJY29ucyA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhIGNvbXBsZXRlZCBjaGlwIGluIHRoZSBpbnB1dCBkcmF3cyB0aGUgcGljdHVyZSAoYGltYWdlX3VybGApIG9mIHRoZSBvcHRpb24gdGhhdCBhbnN3ZXJlZCBpdCwgaW4gcGxhY2Ugb2YgaXRzIGljb24uIFNldCB0byBmYWxzZSB0byByZW5kZXIgY2hpcHMgd2l0aG91dCBwaWN0dXJlcy4gKi9cbiAgQElucHV0KCkgc2hvd0NoaXBJbWFnZXMgPSB0cnVlO1xuICAvKiogRm9jdXMgdGhlIGVkaXRvciBvbiBtb3VudC4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgQElucHV0KCkgYXV0b0ZvY3VzID0gdHJ1ZTtcbiAgLyoqIENvbnRyb2xsZWQtbW9kZSB0ZXh0IHZhbHVlLiAqL1xuICBASW5wdXQoKSB2YWx1ZT86IHN0cmluZztcbiAgLyoqIENvbnRyb2xsZWQtbW9kZSBjb21wbGV0ZWQgcGFyYW1zLiAqL1xuICBASW5wdXQoKSBjb21wbGV0ZWRQYXJhbXM/OiBDb21wbGV0ZWRQYXJhbVN0YXRlW107XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZHJvcGRvd24gcmVuZGVycyBhIGhvcml6b250YWwgcm93IG9mIHByb2R1Y3RcbiAgICogY2FyZHMgYmVsb3cgdGhlIG9wdGlvbnMgZ3JpZCB3aGVuZXZlciBpdCBoYXMgcHJvZHVjdHMgdG8gc2hvdzogYnkgZGVmYXVsdFxuICAgKiB0aGUgaXRlbXMgdGhlIGAvc3VnZ2VzdGAgcmVzcG9uc2UgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIG9yIHRoZVxuICAgKiByZXN1bHRzIG9mIGEgY3VzdG9tIGBwcm9kdWN0c2Agc2VhcmNoLiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIG5vIHN0cmlwXG4gICAqIGFuZCBydW4gbm8gY3VzdG9tIHNlYXJjaC5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dQcm9kdWN0cyA9IHRydWU7XG4gIC8qKlxuICAgKiBDdXN0b20gc291cmNlIGZvciB0aGUgcHJvZHVjdCBzdHJpcC4gT21pdCBpdCBhbmQgdGhlIHN0cmlwIHNob3dzIHRoZVxuICAgKiBpdGVtcyB0aGUgYC9zdWdnZXN0YCByZXNwb25zZSBpdHNlbGYgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIHdpdGhcbiAgICogbm8gZXh0cmEgcmVxdWVzdC4gU2V0IGl0IGFuZCB0aGUgZHJvcGRvd24gaXMgZmVkIGJ5IHlvdXIgb3duIHNlYXJjaFxuICAgKiBlbmRwb2ludCBvbiB0aGUgU0RLJ3MgZXhpc3RpbmcgZmV0Y2ggY2FkZW5jZSBpbnN0ZWFkOyB0aGUgc2VydmVyJ3MgaXRlbXNcbiAgICogYXJlIHRoZW4gbm90IHJlbmRlcmVkLlxuICAgKlxuICAgKiBCaW5kIGEgc3RhYmxlIHJlZmVyZW5jZSAoYSBjb21wb25lbnQgZmllbGQsIG5vdCBhbiBpbmxpbmUgb2JqZWN0IGxpdGVyYWwpOlxuICAgKiBhIG5ldyBvYmplY3Qgb24gZWFjaCBjaGFuZ2UtZGV0ZWN0aW9uIHBhc3MgcmVhZHMgYXMgYSBzd2FwcGVkIGludGVncmF0aW9uXG4gICAqIGFuZCBjbGVhcnMgdGhlIGN1cnJlbnQgY2FyZHMg4oCUIHRoZSBzYW1lIHJ1bGUgdGhhdCBhbHJlYWR5IGFwcGxpZXMgdG9cbiAgICogYGFwaUNvbmZpZ2AgYW5kIGBvcHRpb25PdmVycmlkZXNgLlxuICAgKi9cbiAgQElucHV0KCkgcHJvZHVjdHM/OiBQcm9kdWN0c0NvbmZpZztcbiAgLyoqXG4gICAqIEN1c3RvbSBzdWJtaXQgYnV0dG9uLiBQYXNzIGEgYDxuZy10ZW1wbGF0ZT5gIHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgYXJyb3dcbiAgICogYnV0dG9uLiBQYXNzIGBudWxsYCB0byByZW5kZXIgbm8gYnV0dG9uLiBEZWZhdWx0IChgdW5kZWZpbmVkYCkgcmVuZGVyc1xuICAgKiB0aGUgYnVpbHQtaW4gYXJyb3cuXG4gICAqL1xuICBASW5wdXQoKSBzdWJtaXRCdXR0b24/OiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZWRpdG9yIGlzIGNsZWFyZWQgYW5kIGEgbmV3IHNlc3Npb24gc3RhcnRzIGFmdGVyXG4gICAqIGBzdWJtaXR0ZWRgIGVtaXRzIOKAlCBvbiBFbnRlciBhbmQgb24gdGhlIHN1Ym1pdCBidXR0b24uIFNldCB0byBmYWxzZSB0b1xuICAgKiBsZWF2ZSB0aGUgcXVlcnkgaW4gcGxhY2U6IHdoZW4gdGhlIGhhbmRsZXIgbmF2aWdhdGVzIGF3YXksIGEgY2xlYXJlZCBmaWVsZFxuICAgKiBmbGFzaGVzIGVtcHR5IHVudGlsIHRoZSBuZXh0IHBhZ2UgcGFpbnRzLiBDYWxsIGByZXNldCgpYCB5b3Vyc2VsZiB3aGVuIHlvdVxuICAgKiB3YW50IGEgZnJlc2ggc2Vzc2lvbi5cbiAgICovXG4gIEBJbnB1dCgpIHJlc2V0T25TdWJtaXQgPSB0cnVlO1xuXG4gIC8vID09PSBPdXRwdXRzID09PVxuXG4gIC8qKiBDYWxsZWQgb24gRW50ZXIgb3Igc3VibWl0LWJ1dHRvbiBjbGljay4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHN1Ym1pdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QXV0b2NvbXBsZXRlUmVzdWx0PigpO1xuICAvKipcbiAgICogRmlyZXMgYWZ0ZXIgZXZlcnkgc3VjY2Vzc2Z1bCBzdWdnZXN0aW9uIHJvdW5kLXRyaXAgd2l0aCB0aGUgc3RydWN0dXJlZFxuICAgKiBxdWVyeSBhcyB0aGUgU0RLIG5vdyB1bmRlcnN0YW5kcyBpdCDigJQgdGhlIHNhbWUgYEF1dG9jb21wbGV0ZVJlc3VsdGAgc2hhcGVcbiAgICogYHN1Ym1pdHRlZGAgY2Fycmllcywgc28geW91IGNhbiBtaXJyb3IgdGhlIHF1ZXJ5IGFzIGl0IGlzIGJ1aWx0IChhIGxpdmVcbiAgICogcHJldmlldywgYSBkcmFmdCwgYW5hbHl0aWNzKSB3aXRob3V0IHdhaXRpbmcgZm9yIHN1Ym1pdC4gRmlyZXMgb25jZSBwZXJcbiAgICogYXBwbGllZCByZXNwb25zZSwgaW5jbHVkaW5nIHRoZSBpbml0aWFsIHJlcXVlc3Qgb24gaW5pdCAoYW4gZW1wdHlcbiAgICogcmVzdWx0KTsgbmV2ZXIgZm9yIGEgZmFpbGVkLCBhYm9ydGVkIG9yIHN1cGVyc2VkZWQgcmVxdWVzdC5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSByZXN1bHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEF1dG9jb21wbGV0ZVJlc3VsdD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGVycm9yZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEVycm9yPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbXBsZXRlZFBhcmFtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tcGxldGVkUGFyYW1TdGF0ZVtdPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGJsdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgYWN0aXZhdGVzIGEgcHJvZHVjdCBjYXJkLiBUaGUgU0RLIGRvZXMgbm90XG4gICAqIG5hdmlnYXRlIOKAlCB5b3UgZGVjaWRlIHdoYXQgYSBzZWxlY3Rpb24gbWVhbnMuIE1vZGlmaWVyIC8gbWlkZGxlIGNsaWNrcyBhcmVcbiAgICogbGVmdCB0byB0aGUgYnJvd3NlciAoY21kLWNsaWNrIHN0aWxsIG9wZW5zIGEgdGFiKSBhbmQgZG9uJ3QgZW1pdC5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBwcm9kdWN0U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9kdWN0PigpO1xuXG4gIC8vID09PSBWaWV3IHJlZnMgPT09XG5cbiAgQFZpZXdDaGlsZChcImNvbnRhaW5lclwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250YWluZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChcImVkaXRvclwiLCB7IHN0YXRpYzogZmFsc2UgfSkgZWRpdG9yUmVmPzogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoXCJwaWxsQ29udGFpbmVyXCIpIHBpbGxDb250YWluZXJSZWY/OiBFbGVtZW50UmVmPEhUTUxTcGFuRWxlbWVudD47XG5cbiAgLy8gPT09IFB1YmxpYyBzdGF0ZSBmb3IgdGhlIHRlbXBsYXRlID09PVxuXG4gIGNvbnRyb2xsZXIhOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXI7XG4gIC8qKlxuICAgKiBDb25jcmV0ZSBsaWdodC9kYXJrIHZhbHVlIGJvdW5kIHRvIGBbYXR0ci5kYXRhLW1vZGVdYC4gU2VlZGVkIGluIG5nT25Jbml0XG4gICAqIHNvIHRoZSBhdHRyaWJ1dGUgaXMgcHJlc2VudCBkdXJpbmcgU1NSICh3aGVyZSBNb2RlQ29udHJvbGxlciwgZ2F0ZWQgYmVoaW5kXG4gICAqIGlzUGxhdGZvcm1Ccm93c2VyIGluIG5nQWZ0ZXJWaWV3SW5pdCwgbmV2ZXIgcnVucykuIE9uIHRoZSBicm93c2VyIHRoZVxuICAgKiBNb2RlQ29udHJvbGxlcidzIHJlc29sdmUgY2FsbGJhY2sga2VlcHMgdGhpcyBpbiBzeW5jIOKAlCBzbyBpdHMgcnVudGltZVxuICAgKiBwcmVmZXJzLWNvbG9yLXNjaGVtZSB1cGRhdGVzIGFuZCB0aGlzIGJpbmRpbmcgYWx3YXlzIGFncmVlIChubyBjbG9iYmVyKS5cbiAgICovXG4gIHJlc29sdmVkTW9kZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgPSBcImRhcmtcIjtcblxuICAvLyA9PT0gSW50ZXJuYWwgPT09XG5cbiAgcHJpdmF0ZSBtb2RlQ29udHJvbGxlcj86IE1vZGVDb250cm9sbGVyO1xuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyPzogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgb25DaGFuZ2VGbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIG9uVG91Y2hlZEZuOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgLy8gSG9sZHMgYSB2YWx1ZSB3cml0dGVuIGJ5IFJlYWN0aXZlIEZvcm1zIGJlZm9yZSBuZ09uSW5pdCByYW4uIFJlYWN0aXZlXG4gIC8vIEZvcm1zIGNhbiBjYWxsIHdyaXRlVmFsdWUoKSBkdXJpbmcgZHluYW1pYyBmb3JtIGNvbnN0cnVjdGlvbiAoZS5nLiB3aGVuXG4gIC8vIGEgRm9ybUNvbnRyb2wgYWxyZWFkeSBob2xkcyBhIHZhbHVlIGF0IHRoZSBtb21lbnQgdGhlIGRpcmVjdGl2ZSBpc1xuICAvLyBjcmVhdGVkKS4gV2Ugc3Rhc2ggdGhlIHZhbHVlIGhlcmUgYW5kIGZsdXNoIGl0IGluIG5nT25Jbml0ICphZnRlcipcbiAgLy8gdGhlIGNvbnRyb2xsZXIgZXhpc3RzIOKAlCBvdGhlcndpc2UgdGhlIGVkaXRvciByZW5kZXJzIGVtcHR5IGV2ZW4gdGhvdWdoXG4gIC8vIHRoZSBmb3JtIGhhZCBhIHZhbHVlLiBgdW5kZWZpbmVkYCBtZWFucyBcIm5vIHBlbmRpbmcgd3JpdGVcIi5cbiAgcHJpdmF0ZSBwZW5kaW5nV3JpdGVWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8vIMKnMTYuOTogcHJlZmVyIGBpbmplY3QoKWAgb3ZlciBjb25zdHJ1Y3Rvci1wYXJhbWV0ZXIgREkgZm9yIGNvbXBvbmVudHMuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gU2VlZCBiZWZvcmUgdGhlIGJyb3dzZXIgZ3VhcmQgc28gU1NSIHJlbmRlcnMgYSBjb25jcmV0ZSBkYXRhLW1vZGUuXG4gICAgdGhpcy5yZXNvbHZlZE1vZGUgPSByZXNvbHZlSW5pdGlhbE1vZGUodGhpcy5tb2RlKTtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgIHRoaXMuY29udHJvbGxlciA9IG5ldyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIoe1xuICAgICAgYXBpQ29uZmlnOiB0aGlzLmFwaUNvbmZpZyxcbiAgICAgIGFkZGl0aW9uYWxDb250ZXh0OiB0aGlzLmFkZGl0aW9uYWxDb250ZXh0LFxuICAgICAgdmlzaXRvcklkOiB0aGlzLnZpc2l0b3JJZCxcbiAgICAgIG9wdGlvbk92ZXJyaWRlczogdGhpcy5vcHRpb25PdmVycmlkZXMsXG4gICAgICBtYXNrQ29tcGxldGVkVGV4dDogdGhpcy5tYXNrQ29tcGxldGVkVGV4dCxcbiAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgIGRyb3Bkb3duVHJpZ2dlcjogdGhpcy5kcm9wZG93blRyaWdnZXIsXG4gICAgICBvcHRpb25zUG9zaXRpb246IHRoaXMub3B0aW9uc1Bvc2l0aW9uLFxuICAgICAgY2xvc2VEcm9wZG93bk9uQmx1cjogdGhpcy5jbG9zZURyb3Bkb3duT25CbHVyLFxuICAgICAgc2hvd05vblRhcHBhYmxlT3B0aW9uczogdGhpcy5zaG93Tm9uVGFwcGFibGVPcHRpb25zLFxuICAgICAgc2hvd1Byb2R1Y3RzOiB0aGlzLnNob3dQcm9kdWN0cyxcbiAgICAgIHNvdXJjZTogXCJmdWxsLXNka1wiLFxuICAgICAgcHJvZHVjdHM6IHRoaXMucHJvZHVjdHMsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGNvbXBsZXRlZFBhcmFtczogdGhpcy5jb21wbGV0ZWRQYXJhbXMsXG4gICAgICBvblN1Ym1pdDogKHJlc3VsdCkgPT4gdGhpcy5oYW5kbGVTdWJtaXQocmVzdWx0KSxcbiAgICAgIG9uUmVzdWx0OiAocmVzdWx0KSA9PiB0aGlzLnJlc3VsdENoYW5nZS5lbWl0KHJlc3VsdCksXG4gICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHRoaXMuZXJyb3JlZC5lbWl0KGVycm9yKSxcbiAgICAgIG9uQ2hhbmdlOiAodGV4dCkgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGV4dCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbih0ZXh0KTtcbiAgICAgIH0sXG4gICAgICBvblBhcmFtc0NoYW5nZTogKHBhcmFtcykgPT4gdGhpcy5jb21wbGV0ZWRQYXJhbXNDaGFuZ2UuZW1pdChwYXJhbXMpLFxuICAgICAgb25Gb2N1czogKCkgPT4gdGhpcy5mb2N1c2VkLmVtaXQoKSxcbiAgICAgIG9uUHJvZHVjdFNlbGVjdDogKHByb2R1Y3QpID0+IHRoaXMucHJvZHVjdFNlbGVjdC5lbWl0KHByb2R1Y3QpLFxuICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KCk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgIH0sXG4gICAgICBzZXRDdXJzb3I6IChvZmZzZXQpID0+IHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICghZWRpdG9yKSByZXR1cm47XG4gICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICBzZXRDdXJzb3JPZmZzZXQoZWRpdG9yLCBvZmZzZXQpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnBlbmRpbmdXcml0ZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udHJvbGxlci5zZXRWYWx1ZSh0aGlzLnBlbmRpbmdXcml0ZVZhbHVlKTtcbiAgICAgIHRoaXMucGVuZGluZ1dyaXRlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgIC8vIE1vZGVDb250cm9sbGVyIHdyaXRlcyBgZGF0YS1tb2RlYCB0byB0aGUgZWxlbWVudCBpdCdzIGdpdmVuLiBUaGUgQ1NTXG4gICAgLy8gc2VsZWN0b3JzIGFyZSBzY29wZWQgdG8gYC5tYWdpY3gtYWlhW2RhdGEtbW9kZT1cIi4uLlwiXWAg4oCUIHdoaWNoIGxpdmVzIG9uXG4gICAgLy8gdGhlIGlubmVyIGA8ZGl2IGNsYXNzPVwibWFnaWN4LWFpYSBtYWdpY3gtYWlhLWNvbnRhaW5lclwiICNjb250YWluZXI+YCxcbiAgICAvLyBOT1QgdGhlIGhvc3QgYDxhaS1hdXRvY29tcGxldGU+YCBlbGVtZW50LiBUaGUgcmVzb2x2ZSBjYWxsYmFjayBtaXJyb3JzXG4gICAgLy8gdGhlIHZhbHVlIGludG8gYHJlc29sdmVkTW9kZWAgc28gdGhlIGBbYXR0ci5kYXRhLW1vZGVdYCBiaW5kaW5nIHN0YXlzIGluXG4gICAgLy8gbG9ja3N0ZXAgd2l0aCBNb2RlQ29udHJvbGxlciDigJQgdGhlIGJpbmRpbmcgaGFuZGxlcyBTU1IsIE1vZGVDb250cm9sbGVyXG4gICAgLy8gaGFuZGxlcyBydW50aW1lIHByZWZlcnMtY29sb3Itc2NoZW1lIHN3aXRjaGVzLCBhbmQgYmVjYXVzZSB0aGV5IGFsd2F5c1xuICAgIC8vIGFncmVlIG5laXRoZXIgY2xvYmJlcnMgdGhlIG90aGVyLlxuICAgIHRoaXMubW9kZUNvbnRyb2xsZXIgPSBuZXcgTW9kZUNvbnRyb2xsZXIoXG4gICAgICB0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5tb2RlLFxuICAgICAgKHJlc29sdmVkKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gUGlsbC13cmFwIGRldGVjdGlvbiDigJQgd2hlbiB0aGUgcGlsbCBsaXN0IHdyYXBzIGJlbG93IHRoZSBlZGl0b3IncyBsYXN0XG4gICAgLy8gbGluZSwgZHJvcCBpdHMgOHB4IGxlZnQgbWFyZ2luIHZpYSBhIGRhdGEgYXR0cmlidXRlIHRoZSBDU1Mga2V5cyBvZmYuXG4gICAgLy8gTWlycm9ycyB0aGUgUmVhY3QgY29tcG9uZW50J3MgdXNlTGF5b3V0RWZmZWN0LlxuICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdGhpcy5tZWFzdXJlUGlsbFdyYXAoKSk7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZWRpdG9yKSB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZWRpdG9yKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tZWFzdXJlUGlsbFdyYXAoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2xsZXIpIHJldHVybjtcbiAgICAvLyBgU2ltcGxlQ2hhbmdlc2AgaXMgYHsgW2tleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH1gLCBzbyBwZXJcbiAgICAvLyBgbm9Qcm9wZXJ0eUFjY2Vzc0Zyb21JbmRleFNpZ25hdHVyZWAgZWFjaCBrZXkgbG9va3VwIHVzZXMgYnJhY2tldFxuICAgIC8vIG5vdGF0aW9uIOKAlCB0aGlzIGtlZXBzIHRoZSBzdHJpY3RuZXNzIGNvbnRyYWN0IHRoYXQgdGhlIHJlc3Qgb2YgdGhlXG4gICAgLy8gd29ya3NwYWNlIGVuZm9yY2VzLlxuICAgIC8vIENvbnRyb2xsZWQtbW9kZSBwcm9wYWdhdGlvblxuICAgIGlmIChjaGFuZ2VzW1widmFsdWVcIl0gJiYgdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wiY29tcGxldGVkUGFyYW1zXCJdICYmIHRoaXMuY29tcGxldGVkUGFyYW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udHJvbGxlci5zZXRDb21wbGV0ZWRQYXJhbXModGhpcy5jb21wbGV0ZWRQYXJhbXMpO1xuICAgIH1cbiAgICAvLyBSZWFjdGl2ZSBvcHRpb25zXG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1tcImFwaUNvbmZpZ1wiXSB8fFxuICAgICAgY2hhbmdlc1tcImFkZGl0aW9uYWxDb250ZXh0XCJdIHx8XG4gICAgICBjaGFuZ2VzW1widmlzaXRvcklkXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wib3B0aW9uT3ZlcnJpZGVzXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wiZHJvcGRvd25UcmlnZ2VyXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wib3B0aW9uc1Bvc2l0aW9uXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wiY2xvc2VEcm9wZG93bk9uQmx1clwiXSB8fFxuICAgICAgY2hhbmdlc1tcInNob3dOb25UYXBwYWJsZU9wdGlvbnNcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJzaG93UHJvZHVjdHNcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJwcm9kdWN0c1wiXVxuICAgICkge1xuICAgICAgdGhpcy5jb250cm9sbGVyLnVwZGF0ZSh7XG4gICAgICAgIGFwaUNvbmZpZzogdGhpcy5hcGlDb25maWcsXG4gICAgICAgIGFkZGl0aW9uYWxDb250ZXh0OiB0aGlzLmFkZGl0aW9uYWxDb250ZXh0LFxuICAgICAgICB2aXNpdG9ySWQ6IHRoaXMudmlzaXRvcklkLFxuICAgICAgICBvcHRpb25PdmVycmlkZXM6IHRoaXMub3B0aW9uT3ZlcnJpZGVzLFxuICAgICAgICBkcm9wZG93blRyaWdnZXI6IHRoaXMuZHJvcGRvd25UcmlnZ2VyLFxuICAgICAgICBvcHRpb25zUG9zaXRpb246IHRoaXMub3B0aW9uc1Bvc2l0aW9uLFxuICAgICAgICBjbG9zZURyb3Bkb3duT25CbHVyOiB0aGlzLmNsb3NlRHJvcGRvd25PbkJsdXIsXG4gICAgICAgIHNob3dOb25UYXBwYWJsZU9wdGlvbnM6IHRoaXMuc2hvd05vblRhcHBhYmxlT3B0aW9ucyxcbiAgICAgICAgc2hvd1Byb2R1Y3RzOiB0aGlzLnNob3dQcm9kdWN0cyxcbiAgICAgICAgLy8gU2FtZSByZWZlcmVuY2Ugb24gYW4gdW5yZWxhdGVkIGNoYW5nZSBpcyBhIG5vLW9wIGluIHRoZSBjb3JlOyBvbmx5IGFcbiAgICAgICAgLy8gZ2VudWluZWx5IHN3YXBwZWQgKG9yIHJlbW92ZWQpIGludGVncmF0aW9uIGNsZWFycyB0aGUgc3RyaXAuXG4gICAgICAgIHByb2R1Y3RzOiB0aGlzLnByb2R1Y3RzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wibW9kZVwiXSkge1xuICAgICAgLy8gS2VlcCB0aGUgYmluZGluZyBjb3JyZWN0IGV2ZW4gd2hlbiBNb2RlQ29udHJvbGxlciBkb2Vzbid0IGV4aXN0IHlldFxuICAgICAgLy8gKFNTUiAvIHByZS1uZ0FmdGVyVmlld0luaXQpLiBPbiB0aGUgYnJvd3Nlciwgc2V0TW9kZSB0cmlnZ2VycyB0aGVcbiAgICAgIC8vIHJlc29sdmUgY2FsbGJhY2sgd2hpY2ggc2V0cyB0aGUgc2FtZSB2YWx1ZS5cbiAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZUluaXRpYWxNb2RlKHRoaXMubW9kZSk7XG4gICAgICB0aGlzLm1vZGVDb250cm9sbGVyPy5zZXRNb2RlKHRoaXMubW9kZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMubW9kZUNvbnRyb2xsZXI/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmNvbnRyb2xsZXI/LmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8vID09PSBJbXBlcmF0aXZlIEFQSSAoZXhwb3NlZCBvbiB0aGUgY29tcG9uZW50IGluc3RhbmNlIHZpYSBAVmlld0NoaWxkKSA9PT1cblxuICAvKiogUHJvZ3JhbW1hdGljYWxseSBmb2N1cyB0aGUgZWRpdG9yLiAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgLyoqIFByb2dyYW1tYXRpY2FsbHkgYmx1ciB0aGUgZWRpdG9yLiAqL1xuICBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgfVxuXG4gIC8qKiBDbGVhciBhbGwgc3RhdGUsIHJvdGF0ZSBzZXNzaW9uLCBhbmQgcmUtZmV0Y2guICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlcj8ucmVzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTa2lwIHRoZSBhY3RpdmUgcGlsbCDigJQgc2FtZSBhY3Rpb24gYXMgdGhlIGRyb3Bkb3duJ3Mgc2tpcCBidXR0b24gLyDihpIuXG4gICAqIExldHMgYSBjb25zdW1lciB3aG8gaGlkZXMgdGhlIGJ1aWx0LWluIGJ1dHRvbiAoYHNob3dTa2lwQnV0dG9uPWZhbHNlYClcbiAgICogZHJpdmUgc2tpcHBpbmcgZnJvbSB0aGVpciBvd24gVUkuXG4gICAqL1xuICBza2lwQWN0aXZlUGlsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXI/LnNraXBBY3RpdmVQaWxsKCk7XG4gIH1cblxuICAvKiogU3dpdGNoIGNvbG9yIG1vZGUgYXQgcnVudGltZS4gKi9cbiAgc2V0TW9kZShtb2RlOiBBcHBlYXJhbmNlTW9kZSk6IHZvaWQge1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgdGhpcy5yZXNvbHZlZE1vZGUgPSByZXNvbHZlSW5pdGlhbE1vZGUobW9kZSk7XG4gICAgdGhpcy5tb2RlQ29udHJvbGxlcj8uc2V0TW9kZShtb2RlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vID09PSBUZW1wbGF0ZSBoZWxwZXJzID09PVxuXG4gIC8qKlxuICAgKiAnZGVmYXVsdCcg4oaSIHJlbmRlciB0aGUgYnVpbHQtaW4gYXJyb3cgYnV0dG9uLlxuICAgKiAnY3VzdG9tJyAg4oaSIHByb2plY3QgdGhlIGNvbnN1bWVyLXN1cHBsaWVkIFRlbXBsYXRlUmVmLlxuICAgKiAnaGlkZGVuJyAg4oaSIG5vIGJ1dHRvbi5cbiAgICovXG4gIGdldCBzdWJtaXRCdXR0b25TdGF0ZSgpOiBcImRlZmF1bHRcIiB8IFwiY3VzdG9tXCIgfCBcImhpZGRlblwiIHtcbiAgICBpZiAodGhpcy5zdWJtaXRCdXR0b24gPT09IG51bGwpIHJldHVybiBcImhpZGRlblwiO1xuICAgIGlmICh0aGlzLnN1Ym1pdEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gXCJkZWZhdWx0XCI7XG4gICAgcmV0dXJuIFwiY3VzdG9tXCI7XG4gIH1cblxuICAvKiogTmFycm93ZWQgYWNjZXNzb3IgZm9yICpuZ1RlbXBsYXRlT3V0bGV0IOKAlCBuZXZlciB1bmRlZmluZWQuICovXG4gIGdldCBjdXN0b21TdWJtaXRUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnN1Ym1pdEJ1dHRvbiA/PyBudWxsO1xuICB9XG5cbiAgZ2V0IHNob3dJbmxpbmVQaWxscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5waWxsUGxhY2VtZW50ID09PSBcImlubGluZVwiO1xuICB9XG5cbiAgZ2V0IHNob3dEcm9wZG93blBpbGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBpbGxQbGFjZW1lbnQgPT09IFwiZHJvcGRvd25cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBgdHJ1ZWAgd2hlbiB0aGVyZSdzIHNvbWV0aGluZyB0byBzdWJtaXQg4oCUIGRyaXZlbiBieSBjdXJyZW50IHNlZ21lbnRzXG4gICAqIGFuZCBjb21wbGV0ZWQgcGFyYW1zLiBSZWFkIG9mZiB0aGUgbGl2ZSBlZGl0b3IgdmlhIHRoZSBjb250cm9sbGVyIHN0YXRlLlxuICAgKi9cbiAgY2FuU3VibWl0KHN0YXRlOiB7IHNlZ21lbnRzOiB7IGxlbmd0aDogbnVtYmVyIH07IGNvbXBsZXRlZFBhcmFtczogeyBsZW5ndGg6IG51bWJlciB9IH0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUuc2VnbWVudHMubGVuZ3RoID4gMCB8fCBzdGF0ZS5jb21wbGV0ZWRQYXJhbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIG9uV3JhcHBlckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gQ2xpY2tpbmcgYSBwaWxsIHNob3VsZCBhY3RpdmF0ZSBpdCB3aXRob3V0IHN0ZWFsaW5nIGZvY3VzIGVsc2V3aGVyZS5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICh0YXJnZXQ/LmNsb3Nlc3QoXCJbZGF0YS1haWEtcGlsbF1cIikpIHJldHVybjtcbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBvblN1Ym1pdEJ1dHRvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5oYW5kbGVTdWJtaXRGcm9tVXNlckFjdGlvbigpO1xuICB9XG5cbiAgb25TdWJtaXRTbG90Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmhhbmRsZVN1Ym1pdEZyb21Vc2VyQWN0aW9uKCk7XG4gIH1cblxuICBvblNlbGVjdFBpbGwoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRBY3RpdmVQaWxsKGluZGV4KTtcbiAgfVxuXG4gIC8vID09PSBDb250cm9sVmFsdWVBY2Nlc3NvciA9PT1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHZhbHVlID8/IFwiXCI7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2xsZXIpIHtcbiAgICAgIC8vIFJlYWN0aXZlIEZvcm1zIGNhbiBjYWxsIHdyaXRlVmFsdWUoKSBiZWZvcmUgbmdPbkluaXQgY3JlYXRlcyB0aGVcbiAgICAgIC8vIGNvbnRyb2xsZXIgKGR5bmFtaWMgZm9ybSBjb25zdHJ1Y3Rpb24sIG9yIGEgRm9ybUNvbnRyb2wgdGhhdCBhbHJlYWR5XG4gICAgICAvLyBoYWQgYSB2YWx1ZSBhdCBkaXJlY3RpdmUtY3JlYXRpb24gdGltZSkuIEJ1ZmZlciB0aGUgdmFsdWU7IG5nT25Jbml0XG4gICAgICAvLyBmbHVzaGVzIGl0IGFzIHNvb24gYXMgdGhlIGNvbnRyb2xsZXIgZXhpc3RzLlxuICAgICAgdGhpcy5wZW5kaW5nV3JpdGVWYWx1ZSA9IG5leHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29udHJvbGxlci5zZXRWYWx1ZShuZXh0KTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZUZuID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkRm4gPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoX2Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gVGhlIGNvbnRlbnRFZGl0YWJsZSBob3N0IGRvZXNuJ3QgaGF2ZSBhIG5hdGl2ZSBkaXNhYmxlZCBhdHRyaWJ1dGUuIEZvclxuICAgIC8vIHYwLjEgd2UgYWNjZXB0IHRoZSBjYWxsIHNvIEFuZ3VsYXIncyBmb3JtcyBsYXllciBkb2Vzbid0IHRocm93LCBidXRcbiAgICAvLyB0aGUgZWRpdG9yIHN0YXlzIGludGVyYWN0aXZlLiBBIGZ1dHVyZSBlbmhhbmNlbWVudCBjYW4gdG9nZ2xlXG4gICAgLy8gY29udGVudEVkaXRhYmxlICsgQVJJQSBkaXNhYmxlZCBoZXJlLlxuICB9XG5cbiAgLy8gPT09IFN1Ym1pdCBmbG93ID09PVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIGNvbnRyb2xsZXIncyBvblN1Ym1pdCBjYWxsYmFjayAod2hpY2ggZmlyZXMgZnJvbSB0aGVcbiAgICoga2V5Ym9hcmQgY29udHJvbGxlciBvbiBFbnRlcikuIFJlYWRzIHRoZSBsaXZlIGVkaXRvciB0ZXh0IOKAlCBzYW1lIHRyaWNrXG4gICAqIHRoZSBSZWFjdCBjb21wb25lbnQgdXNlcyDigJQgc28gdGhlIGVtaXR0ZWQgcXVlcnkgcmVmbGVjdHMgd2hhdGV2ZXIncyBpblxuICAgKiB0aGUgRE9NIHJpZ2h0IG5vdywgbm90IGEgcG9zc2libHktc3RhbGUgc3RhdGUgc25hcHNob3QuXG4gICAqL1xuICAvLyBgZnJvbUJ1dHRvbmA6IHRoZSBTREsgcmVjb3JkcyBhbiBFbnRlciBzdWJtaXQgaXRzZWxmIGJlZm9yZSBpdCBjYWxscyBiYWNrXG4gIC8vIGhlcmU7IGEgY2xpY2sgb24gb3VyIG93biBidXR0b24gbmV2ZXIgcGFzc2VzIHRocm91Z2ggaXQuXG4gIHByaXZhdGUgaGFuZGxlU3VibWl0KF9yZXN1bHQ6IEF1dG9jb21wbGV0ZVJlc3VsdCwgZnJvbUJ1dHRvbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0ID0gZXh0cmFjdFBsYWluVGV4dChlZGl0b3IpO1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb250cm9sbGVyLmdldFN0YXRlKCk7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5jb21wbGV0ZWRQYXJhbXMgPz8gc3RhdGUuY29tcGxldGVkUGFyYW1zO1xuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkU3VibWl0UmVzdWx0KHRleHQsIHBhcmFtcywgc3RhdGUuc2tpcHBlZFBhcmFtcywge1xuICAgICAgaWRlbnRpZmllZFBhcmFtczogc3RhdGUuaWRlbnRpZmllZFBhcmFtcyxcbiAgICAgIGlzUmVhZHk6IHN0YXRlLmlzUmVhZHksXG4gICAgICBjdXN0b21GaWVsZHM6IHN0YXRlLmN1c3RvbUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZnJvbUJ1dHRvbikgdGhpcy5jb250cm9sbGVyLnJlY29yZFN1Ym1pdChyZXN1bHQpO1xuICAgIHRoaXMuc3VibWl0dGVkLmVtaXQocmVzdWx0KTtcbiAgICBpZiAodGhpcy5yZXNldE9uU3VibWl0KSB0aGlzLmNvbnRyb2xsZXIucmVzZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3VibWl0RnJvbVVzZXJBY3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNvbnRyb2xsZXIuZ2V0U3RhdGUoKTtcbiAgICBpZiAoIXRoaXMuY2FuU3VibWl0KHN0YXRlKSkgcmV0dXJuO1xuICAgIC8vIFN5bnRoZXNpemUgdGhlIHJlc3VsdCBmb3IgdGhlIHN1Ym1pdC1idXR0b24gY2xpY2sgcGF0aDsgc2FtZSBzaGFwZVxuICAgIC8vIHRoZSBjb250cm9sbGVyIHdvdWxkIGRlbGl2ZXIgZnJvbSBhIGtleWJvYXJkIEVudGVyLCBzbyBoYW5kbGVTdWJtaXRcbiAgICAvLyBjYW4gdGFrZSBlaXRoZXIgZW50cnkgcG9pbnQuXG4gICAgdGhpcy5oYW5kbGVTdWJtaXQoXG4gICAgICB7XG4gICAgICAgIHF1ZXJ5OiBzdGF0ZS50ZXh0LnRyaW0oKSxcbiAgICAgICAgcmF3X3F1ZXJ5OiBcIlwiLFxuICAgICAgICBjb21wbGV0ZWRfcGFyYW1zOiBbXSxcbiAgICAgICAgaWRlbnRpZmllZF9wYXJhbXM6IFtdLFxuICAgICAgICBpc19yZWFkeTogc3RhdGUuaXNSZWFkeSxcbiAgICAgIH0sXG4gICAgICB0cnVlLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG1lYXN1cmVQaWxsV3JhcCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnBpbGxDb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWVkaXRvcikgcmV0dXJuO1xuICAgIGNvbnN0IGlubmVyID0gY29udGFpbmVyLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoIWlubmVyKSByZXR1cm47XG4gICAgLy8gV3JhcCBkZXRlY3Rpb246IHRoZSBwaWxsIHJvdydzIHRvcCB2cyB0aGUgZWRpdG9yJ3MgYm90dG9tLiBXaGVuIHRoZVxuICAgIC8vIHBpbGxzIHNpdCBvbiAob3IgYWJvdmUpIHRoZSBlZGl0b3IncyBsYXN0IGxpbmUgdGhleSdyZSBOT1Qgd3JhcHBlZCDigJRcbiAgICAvLyBrZWVwIHRoZSA4cHggbWFyZ2luIHNvIHRoZXkgZG9uJ3QgYnV0dCBhZ2FpbnN0IHR5cGVkIHRleHQgb3IgdGhlXG4gICAgLy8gcGxhY2Vob2xkZXIuIFRoaXMgaGFuZGxlcyB0aGUgZW1wdHktZWRpdG9yICsgcGxhY2Vob2xkZXIgY2FzZVxuICAgIC8vIG5hdHVyYWxseTogdGhlIHBsYWNlaG9sZGVyIHN0aWxsIG9jY3VwaWVzIHRoZSBlZGl0b3IncyBsaW5lIGJveC5cbiAgICBjb25zdCBjUmVjdCA9IGlubmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGVSZWN0ID0gZWRpdG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHdyYXBwZWQgPSBjUmVjdC50b3AgPj0gZVJlY3QuYm90dG9tIC0gMjtcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgIGlmICh3cmFwcGVkKSBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1haWEtcGlsbC13cmFwcGVkXCIsIFwiXCIpO1xuICAgICAgZWxzZSBjb250YWluZXIucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1haWEtcGlsbC13cmFwcGVkXCIpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG4gIC8vIERlZmF1bHQgbm8tb3AgZm9yIENWQSBjYWxsYmFja3MuXG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGNvbmNyZXRlIGxpZ2h0L2RhcmsgdmFsdWUgZnJvbSB0aGUgY29uZmlndXJlZCBtb2RlLiBVc2VkIHRvIHNlZWRcbiAqIHRoZSBgZGF0YS1tb2RlYCBhdHRyaWJ1dGUgc3luY2hyb25vdXNseSAoaW5jbHVkaW5nIGR1cmluZyBTU1IsIHdoZXJlXG4gKiBNb2RlQ29udHJvbGxlciBuZXZlciBydW5zKS4gT24gdGhlIHNlcnZlciBgd2luZG93YCBpcyB1bmRlZmluZWQg4oaSIGRlZmF1bHRzXG4gKiB0byBcImRhcmtcIiAobWF0Y2hlcyB0aGUgdmFuaWxsYS9SZWFjdCBiZWhhdmlvcikuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVJbml0aWFsTW9kZShtb2RlOiBBcHBlYXJhbmNlTW9kZSk6IFwibGlnaHRcIiB8IFwiZGFya1wiIHtcbiAgaWYgKG1vZGUgIT09IFwiYXV0b1wiKSByZXR1cm4gbW9kZTtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcImRhcmtcIjtcbiAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiKS5tYXRjaGVzID8gXCJkYXJrXCIgOiBcImxpZ2h0XCI7XG59XG4iLCI8ZGl2XG4gICNjb250YWluZXJcbiAgY2xhc3M9XCJtYWdpY3gtYWlhIG1hZ2ljeC1haWEtY29udGFpbmVyXCJcbiAgW2F0dHIuZGF0YS1waWxsLXBsYWNlbWVudF09XCJwaWxsUGxhY2VtZW50XCJcbiAgW2F0dHIuZGF0YS1vcHRpb25zLXBvc2l0aW9uXT1cIm9wdGlvbnNQb3NpdGlvblwiXG4gIFthdHRyLmRhdGEtYW5pbWF0aW9uc109XCJhbmltYXRpb25zID8gJ29uJyA6ICdvZmYnXCJcbiAgW2F0dHIuZGF0YS1tb2RlXT1cInJlc29sdmVkTW9kZVwiXG4+XG4gIDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd25cbiAgICAqbmdJZj1cImNvbnRyb2xsZXJcIlxuICAgIFtjb250cm9sbGVyXT1cImNvbnRyb2xsZXJcIlxuICAgIFtzaG93UGlsbHNdPVwic2hvd0Ryb3Bkb3duUGlsbHNcIlxuICAgIFtzaG93U2tpcEJ1dHRvbl09XCJzaG93U2tpcEJ1dHRvblwiXG4gICAgW3Nob3dPcHRpb25JY29uc109XCJzaG93T3B0aW9uSWNvbnNcIlxuICAgIFtzaG93T3B0aW9uSW1hZ2VzXT1cInNob3dPcHRpb25JbWFnZXNcIlxuICAgIFtzaG93T3B0aW9uQ291bnRzXT1cInNob3dPcHRpb25Db3VudHNcIlxuICAgIFtwcm9kdWN0c0xheW91dF09XCJwcm9kdWN0c0xheW91dFwiXG4gICAgW3Byb2R1Y3RJbWFnZUZhbGxiYWNrXT1cInByb2R1Y3RJbWFnZUZhbGxiYWNrXCJcbiAgPjwvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cIm1hZ2ljeC1haWEtaW5wdXQtd3JhcHBlclwiXG4gICAgZGF0YS1haWEtaW5wdXQtd3JhcHBlcj1cIlwiXG4gICAgKGNsaWNrKT1cIm9uV3JhcHBlckNsaWNrKCRldmVudClcIlxuICAgIChrZXl1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZWRpdG9yLWFyZWFcIiBkYXRhLWFpYS1lZGl0b3I9XCJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgI2VkaXRvclxuICAgICAgICAqbmdJZj1cImNvbnRyb2xsZXJcIlxuICAgICAgICBbYWlhRWRpdG9ySG9zdF09XCJjb250cm9sbGVyXCJcbiAgICAgICAgW2F1dG9Gb2N1c109XCJhdXRvRm9jdXNcIlxuICAgICAgICBbc2hvd0NoaXBJY29uc109XCJzaG93Q2hpcEljb25zXCJcbiAgICAgICAgW3Nob3dDaGlwSW1hZ2VzXT1cInNob3dDaGlwSW1hZ2VzXCJcbiAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWlucHV0XCJcbiAgICAgICAgZGF0YS1haWEtaW5wdXQ9XCJcIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbGxlciAmJiBzaG93SW5saW5lUGlsbHNcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAjcGlsbENvbnRhaW5lclxuICAgICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1waWxsLWxpc3QtY29udGFpbmVyXCJcbiAgICAgICAgICBkYXRhLWFpYS1waWxsLWxpc3QtY29udGFpbmVyPVwiXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKGNvbnRyb2xsZXIuaXNMb2FkaW5nJCB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAoKGNvbnRyb2xsZXIuc3VnZ2VzdGlvblBpbGxzJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDApID4gMFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YWlhLXBpbGwtbGlzdFxuICAgICAgICAgICAgW3BpbGxzXT1cIihjb250cm9sbGVyLnN1Z2dlc3Rpb25QaWxscyQgfCBhc3luYykgPz8gW11cIlxuICAgICAgICAgICAgW2FjdGl2ZVBpbGxJbmRleF09XCIwXCJcbiAgICAgICAgICAgIFthY3RpdmVTZWxlY3RlZF09XCIoY29udHJvbGxlci5pc0FjdGl2ZVBpbGxTZWxlY3RlZCQgfCBhc3luYykgPz8gZmFsc2VcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiKGNvbnRyb2xsZXIuaXNMb2FkaW5nJCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICAgICAgICAoc2VsZWN0UGlsbCk9XCJvblNlbGVjdFBpbGwoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYWlhLXBpbGwtbGlzdD5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzdWJtaXRCdXR0b25TdGF0ZVwiPlxuICAgICAgPGFpYS1zdWJtaXQtYnV0dG9uXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGVmYXVsdCdcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgJiZcbiAgICAgICAgICAgIGNhblN1Ym1pdCh7XG4gICAgICAgICAgICAgIHNlZ21lbnRzOiAoY29udHJvbGxlci5zZWdtZW50cyQgfCBhc3luYykgPz8gW10sXG4gICAgICAgICAgICAgIGNvbXBsZXRlZFBhcmFtczogKGNvbnRyb2xsZXIuY29tcGxldGVkUGFyYW1zJCB8IGFzeW5jKSA/PyBbXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIFwiXG4gICAgICAgIChzdWJtaXQpPVwib25TdWJtaXRCdXR0b25DbGljaygkZXZlbnQpXCJcbiAgICAgID48L2FpYS1zdWJtaXQtYnV0dG9uPlxuXG4gICAgICA8c3BhblxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2N1c3RvbSdcIlxuICAgICAgICBkYXRhLWFpYS1zdWJtaXQ9XCJcIlxuICAgICAgICBkYXRhLWFpYS1zdWJtaXQtc2xvdD1cIlwiXG4gICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1zdWJtaXQtc2xvdFwiXG4gICAgICAgIChjbGljayk9XCJvblN1Ym1pdFNsb3RDbGljaygkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVN1Ym1pdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
534
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUlOLE1BQU0sRUFDTixXQUFXLEVBR1gsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTZCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUlMLGlCQUFpQixFQUVqQixnQkFBZ0IsRUFDaEIsY0FBYyxFQU1kLGVBQWUsR0FDaEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7O0FBRTFGOzs7Ozs7O0dBT0c7QUF3QkgsTUFBTSxPQUFPLHVCQUF1QjtJQXZCcEM7UUE0Q1csc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLHdEQUF3RDtRQUMvQyxr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ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICB0eXBlIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICB0eXBlIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIGluamVjdCxcbiAgTmdab25lLFxuICB0eXBlIE9uQ2hhbmdlcyxcbiAgdHlwZSBPbkRlc3Ryb3ksXG4gIHR5cGUgT25Jbml0LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICB0eXBlIFNpbXBsZUNoYW5nZXMsXG4gIHR5cGUgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyB0eXBlIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBBUElDb25maWcsXG4gIHR5cGUgQXBwZWFyYW5jZU1vZGUsXG4gIHR5cGUgQXV0b2NvbXBsZXRlUmVzdWx0LFxuICBidWlsZFN1Ym1pdFJlc3VsdCxcbiAgdHlwZSBDb21wbGV0ZWRQYXJhbVN0YXRlLFxuICBleHRyYWN0UGxhaW5UZXh0LFxuICBNb2RlQ29udHJvbGxlcixcbiAgdHlwZSBPcHRpb25PdmVycmlkZXMsXG4gIHR5cGUgUHJvZHVjdCxcbiAgdHlwZSBQcm9kdWN0SW1hZ2VGYWxsYmFjayxcbiAgdHlwZSBQcm9kdWN0c0NvbmZpZyxcbiAgdHlwZSBQcm9kdWN0c0xheW91dCxcbiAgc2V0Q3Vyc29yT2Zmc2V0LFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcbmltcG9ydCB7IEFJQXV0b2NvbXBsZXRlRHJvcGRvd25Db21wb25lbnQgfSBmcm9tIFwiLi4vYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnRcIjtcbmltcG9ydCB7IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciB9IGZyb20gXCIuLi9jb250cm9sbGVyL2FpLWF1dG9jb21wbGV0ZS5jb250cm9sbGVyXCI7XG5pbXBvcnQgeyBBSUF1dG9jb21wbGV0ZUVkaXRvckhvc3REaXJlY3RpdmUgfSBmcm9tIFwiLi4vaW50ZXJuYWwvZWRpdG9yLWhvc3QvZWRpdG9yLWhvc3QuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBQaWxsTGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9waWxsLWxpc3QvcGlsbC1saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3VibWl0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL3N1Ym1pdC1idXR0b24vc3VibWl0LWJ1dHRvbi5jb21wb25lbnRcIjtcblxuLyoqXG4gKiBUaWVyIDEgY29tcG9uZW50IOKAlCBgPGFpLWF1dG9jb21wbGV0ZT5gLiBUaGUgQW5ndWxhciBlcXVpdmFsZW50IG9mIFJlYWN0J3NcbiAqIGA8QUlBdXRvY29tcGxldGUgLz5gLiBPd25zIHRoZSBjb250ZW50RWRpdGFibGUgZWRpdG9yLCBpbmxpbmUgcGlsbHMsIG1vZGVcbiAqIGNvbnRyb2xsZXIsIHN1Ym1pdCBidXR0b24gc2xvdCwgYW5kIGFuIGVtYmVkZGVkXG4gKiB7QGxpbmsgQUlBdXRvY29tcGxldGVDb250cm9sbGVyfSB0aGF0IGRyaXZlcyB0aGUgZHJvcGRvd24uXG4gKlxuICogQHB1YmxpY1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYWktYXV0b2NvbXBsZXRlXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQUlBdXRvY29tcGxldGVEcm9wZG93bkNvbXBvbmVudCxcbiAgICBBSUF1dG9jb21wbGV0ZUVkaXRvckhvc3REaXJlY3RpdmUsXG4gICAgUGlsbExpc3RDb21wb25lbnQsXG4gICAgU3VibWl0QnV0dG9uQ29tcG9uZW50LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuY3NzXCJdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFJQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgLy8gPT09IElucHV0cyAobWlycm9ycyBSZWFjdCdzIEFJQXV0b2NvbXBsZXRlUHJvcHMpID09PVxuXG4gIEBJbnB1dCgpIGFwaUNvbmZpZz86IEFQSUNvbmZpZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHVzZXIgY29udGV4dC4gSW5jbHVkZSB3aGF0ZXZlciB5b3Uga25vdyBhYm91dCB0aGUgdXNlciDigJQgYVxuICAgKiBwcm9maWxlLCBwcmVmZXJlbmNlcywgd29ya3NwYWNlLCBhbnl0aGluZyDigJQgdG8gcGVyc29uYWxpemUgc3VnZ2VzdGVkXG4gICAqIHBhcmFtZXRlcnMgYW5kIG9wdGlvbnMgdG8gdGhlbS4gQmluZCBhIHN0YWJsZSByZWZlcmVuY2U7IHRoZSBzYW1lIHN3YXBcbiAgICogcnVsZSB0aGF0IGFwcGxpZXMgdG8gYGFwaUNvbmZpZ2AgYXBwbGllcyBoZXJlLlxuICAgKi9cbiAgQElucHV0KCkgYWRkaXRpb25hbENvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIFN0YWJsZSBpZCBmb3IgdGhpcyB2aXNpdG9yLCBrZXB0IGJ5IHRoZSBob3N0IGFjcm9zcyBwYWdlIGxvYWRzLiBSaWRlcyBvblxuICAgKiB0ZWxlbWV0cnkgZXZlbnRzIHNvIHNlYXJjaGVzIGNhbiBiZSBqb2luZWQgdG8gd2hhdCB0aGUgdmlzaXRvciBkb2VzXG4gICAqIGFmdGVyd2FyZHMuIE11c3QgYmUgYSBVVUlEIHY0OyBvbWl0IHRvIHNlbmQgbm9uZS4gQSBmdW5jdGlvbiBpcyBjYWxsZWRcbiAgICogb25seSBvbmNlIHRoZSBzZXJ2ZXIgaGFzIGZ1bm5lbCB0ZWxlbWV0cnkgb24uXG4gICAqL1xuICBASW5wdXQoKSB2aXNpdG9ySWQ/OiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgQElucHV0KCkgb3B0aW9uT3ZlcnJpZGVzPzogT3B0aW9uT3ZlcnJpZGVzO1xuICBASW5wdXQoKSBtYXNrQ29tcGxldGVkVGV4dCA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2x1bW5zPzogbnVtYmVyO1xuICAvKiogV2hlcmUgdW5maWxsZWQgcGlsbHMgcmVuZGVyLiBEZWZhdWx0OiBcImRyb3Bkb3duXCIuICovXG4gIEBJbnB1dCgpIHBpbGxQbGFjZW1lbnQ6IFwiaW5saW5lXCIgfCBcImRyb3Bkb3duXCIgfCBcImhpZGRlblwiID0gXCJkcm9wZG93blwiO1xuICAvKiogQ29sb3IgbW9kZS4gXCJhdXRvXCIgZm9sbG93cyBwcmVmZXJzLWNvbG9yLXNjaGVtZS4gRGVmYXVsdDogXCJhdXRvXCIuICovXG4gIEBJbnB1dCgpIG1vZGU6IEFwcGVhcmFuY2VNb2RlID0gXCJhdXRvXCI7XG4gIEBJbnB1dCgpIG9wdGlvbnNQb3NpdGlvbjogXCJhYm92ZVwiIHwgXCJiZWxvd1wiID0gXCJiZWxvd1wiO1xuICBASW5wdXQoKSBhbmltYXRpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgZHJvcGRvd25UcmlnZ2VyPzogXCJhdXRvXCIgfCBcIm1hbnVhbFwiIHwgXCJoaWRkZW5cIjtcbiAgQElucHV0KCkgY2xvc2VEcm9wZG93bk9uQmx1cj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dOb25UYXBwYWJsZU9wdGlvbnM/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIGRyb3Bkb3duJ3MgcGlsbCBiYXIgZW5kcyBpbiBhIHNtYWxsIFwic2tpcFwiIGJ1dHRvblxuICAgKiB0aGF0IGRpc21pc3NlcyB0aGUgYWN0aXZlIHBpbGwg4oCUIHNhbWUgYWN0aW9uIGFzIHByZXNzaW5nIOKGkiBhdCB0aGUgZW5kIG9mXG4gICAqIHRoZSBpbnB1dC4gU2V0IHRvIGZhbHNlIHRvIGhpZGUgaXQuIFdoZW4gcGlsbHMgcmVuZGVyIGVsc2V3aGVyZVxuICAgKiAoYHBpbGxQbGFjZW1lbnQ6IFwiaW5saW5lXCJgIC8gYFwiaGlkZGVuXCJgKSB0aGUgYmFyIHJlbmRlcnMgYXMgYSBza2lwLW9ubHlcbiAgICogcm93IGhvbGRpbmcganVzdCB0aGUgYnV0dG9uLiBIaWRkZW4gd2hpbGUgdGhlIGlucHV0IGlzIGVtcHR5IOKAlCBpdCBhcHBlYXJzXG4gICAqIGFsb25nc2lkZSB0aGUgZm9vdGVyJ3MgXCLihpIgdG8gc2tpcFwiIGhpbnQgb25jZSB0aGUgdXNlciBoYXMgdHlwZWQuXG4gICAqL1xuICBASW5wdXQoKSBzaG93U2tpcEJ1dHRvbiA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbiBvcHRpb24gdGhhdCBjYXJyaWVzIGFuIGBpY29uX3N2Z2AgZHJhd3MgaXRzIGljb24gYmVmb3JlIGl0cyB0ZXh0IGluIHRoZSBkcm9wZG93bi4gU2V0IHRvIGZhbHNlIHRvIHJlbmRlciBvcHRpb24gcm93cyBhcyB0ZXh0IG9ubHkuICovXG4gIEBJbnB1dCgpIHNob3dPcHRpb25JY29ucyA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbiBvcHRpb24gdGhhdCBjYXJyaWVzIGFuIGBpbWFnZV91cmxgIGRyYXdzIGl0IGFzIGEgc3F1YXJlIHRodW1ibmFpbCBiZWZvcmUgaXRzIHRleHQgaW4gdGhlIGRyb3Bkb3duIChpbiBwbGFjZSBvZiBpdHMgYGljb25fc3ZnYCkuIFNldCB0byBmYWxzZSB0byByZW5kZXIgb3B0aW9uIHJvd3Mgd2l0aG91dCBwaWN0dXJlcy4gKi9cbiAgQElucHV0KCkgc2hvd09wdGlvbkltYWdlcyA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbiBvcHRpb24gdGhhdCBjYXJyaWVzIGFuIGBpdGVtX2NvdW50YCBzaG93cyBpdCBhcyBhIG11dGVkIGxhYmVsIGF0IHRoZSByb3cncyB0cmFpbGluZyBlZGdlIChcIjEyIGl0ZW1zXCIpLiBTZXQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgY291bnRzLiAqL1xuICBASW5wdXQoKSBzaG93T3B0aW9uQ291bnRzID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEhvdyB0aGUgcHJvZHVjdCBzdHJpcCBsYXlzIGl0cyBjYXJkcyBvdXQuIGBcInJvd1wiYCAodGhlIGRlZmF1bHQpIGlzIGFcbiAgICogaG9yaXpvbnRhbGx5IHNjcm9sbGluZyBzaGVsZiBvZiBjYXJkcy4gYFwibGlzdFwiYCBzdGFja3MgdGhlIHNhbWUgY2FyZHMgYXNcbiAgICogZnVsbC13aWR0aCByb3dzIOKAlCB0aHVtYm5haWwgb24gdGhlIGxlZnQsIHRpdGxlLCB2ZW5kb3IgYW5kIHByaWNlIG9uIHRoZVxuICAgKiByaWdodCDigJQgZm9yIHJlc3VsdHMgdGhhdCByZWFkIGFzIGEgbGlzdCAoY291cnNlcywgbGlzdGluZ3MsIGRvY3VtZW50cylcbiAgICogcmF0aGVyIHRoYW4gcHJvZHVjdHMgb24gYSBzaGVsZjsgdGhlIGNvbHVtbiBzY3JvbGxzIHZlcnRpY2FsbHkgaW5zaWRlXG4gICAqIGAtLWFpYS1wcm9kdWN0LWxpc3QtbWF4LWhlaWdodGAuXG4gICAqL1xuICBASW5wdXQoKSBwcm9kdWN0c0xheW91dDogUHJvZHVjdHNMYXlvdXQgPSBcInJvd1wiO1xuICAvKiogTWlzc2luZy9mYWlsZWQgaW1hZ2UgZmFsbGJhY2suIFN0eWxlIGluaXRpYWxzIHdpdGggYFtkYXRhLWFpYS1wcm9kdWN0LWluaXRpYWxdYC4gKi9cbiAgQElucHV0KCkgcHJvZHVjdEltYWdlRmFsbGJhY2s6IFByb2R1Y3RJbWFnZUZhbGxiYWNrID0gXCJpbWFnZVwiO1xuICAvKiogV2hlbiB0cnVlIChkZWZhdWx0KSwgYSBjb21wbGV0ZWQgY2hpcCBpbiB0aGUgaW5wdXQgZHJhd3MgdGhlIGljb24gb2YgdGhlIG9wdGlvbiB0aGF0IGFuc3dlcmVkIGl0LiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIGNoaXBzIGFzIHRleHQgb25seS4gKi9cbiAgQElucHV0KCkgc2hvd0NoaXBJY29ucyA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhIGNvbXBsZXRlZCBjaGlwIGluIHRoZSBpbnB1dCBkcmF3cyB0aGUgcGljdHVyZSAoYGltYWdlX3VybGApIG9mIHRoZSBvcHRpb24gdGhhdCBhbnN3ZXJlZCBpdCwgaW4gcGxhY2Ugb2YgaXRzIGljb24uIFNldCB0byBmYWxzZSB0byByZW5kZXIgY2hpcHMgd2l0aG91dCBwaWN0dXJlcy4gKi9cbiAgQElucHV0KCkgc2hvd0NoaXBJbWFnZXMgPSB0cnVlO1xuICAvKiogRm9jdXMgdGhlIGVkaXRvciBvbiBtb3VudC4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgQElucHV0KCkgYXV0b0ZvY3VzID0gdHJ1ZTtcbiAgLyoqIENvbnRyb2xsZWQtbW9kZSB0ZXh0IHZhbHVlLiAqL1xuICBASW5wdXQoKSB2YWx1ZT86IHN0cmluZztcbiAgLyoqIENvbnRyb2xsZWQtbW9kZSBjb21wbGV0ZWQgcGFyYW1zLiAqL1xuICBASW5wdXQoKSBjb21wbGV0ZWRQYXJhbXM/OiBDb21wbGV0ZWRQYXJhbVN0YXRlW107XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZHJvcGRvd24gcmVuZGVycyBhIGhvcml6b250YWwgcm93IG9mIHByb2R1Y3RcbiAgICogY2FyZHMgYmVsb3cgdGhlIG9wdGlvbnMgZ3JpZCB3aGVuZXZlciBpdCBoYXMgcHJvZHVjdHMgdG8gc2hvdzogYnkgZGVmYXVsdFxuICAgKiB0aGUgaXRlbXMgdGhlIGAvc3VnZ2VzdGAgcmVzcG9uc2UgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIG9yIHRoZVxuICAgKiByZXN1bHRzIG9mIGEgY3VzdG9tIGBwcm9kdWN0c2Agc2VhcmNoLiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIG5vIHN0cmlwXG4gICAqIGFuZCBydW4gbm8gY3VzdG9tIHNlYXJjaC5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dQcm9kdWN0cyA9IHRydWU7XG4gIC8qKlxuICAgKiBDdXN0b20gc291cmNlIGZvciB0aGUgcHJvZHVjdCBzdHJpcC4gT21pdCBpdCBhbmQgdGhlIHN0cmlwIHNob3dzIHRoZVxuICAgKiBpdGVtcyB0aGUgYC9zdWdnZXN0YCByZXNwb25zZSBpdHNlbGYgcmVwb3J0cyBhcyBtYXRjaGluZyB0aGUgcXVlcnksIHdpdGhcbiAgICogbm8gZXh0cmEgcmVxdWVzdC4gU2V0IGl0IGFuZCB0aGUgZHJvcGRvd24gaXMgZmVkIGJ5IHlvdXIgb3duIHNlYXJjaFxuICAgKiBlbmRwb2ludCBvbiB0aGUgU0RLJ3MgZXhpc3RpbmcgZmV0Y2ggY2FkZW5jZSBpbnN0ZWFkOyB0aGUgc2VydmVyJ3MgaXRlbXNcbiAgICogYXJlIHRoZW4gbm90IHJlbmRlcmVkLlxuICAgKlxuICAgKiBCaW5kIGEgc3RhYmxlIHJlZmVyZW5jZSAoYSBjb21wb25lbnQgZmllbGQsIG5vdCBhbiBpbmxpbmUgb2JqZWN0IGxpdGVyYWwpOlxuICAgKiBhIG5ldyBvYmplY3Qgb24gZWFjaCBjaGFuZ2UtZGV0ZWN0aW9uIHBhc3MgcmVhZHMgYXMgYSBzd2FwcGVkIGludGVncmF0aW9uXG4gICAqIGFuZCBjbGVhcnMgdGhlIGN1cnJlbnQgY2FyZHMg4oCUIHRoZSBzYW1lIHJ1bGUgdGhhdCBhbHJlYWR5IGFwcGxpZXMgdG9cbiAgICogYGFwaUNvbmZpZ2AgYW5kIGBvcHRpb25PdmVycmlkZXNgLlxuICAgKi9cbiAgQElucHV0KCkgcHJvZHVjdHM/OiBQcm9kdWN0c0NvbmZpZztcbiAgLyoqXG4gICAqIEN1c3RvbSBzdWJtaXQgYnV0dG9uLiBQYXNzIGEgYDxuZy10ZW1wbGF0ZT5gIHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgYXJyb3dcbiAgICogYnV0dG9uLiBQYXNzIGBudWxsYCB0byByZW5kZXIgbm8gYnV0dG9uLiBEZWZhdWx0IChgdW5kZWZpbmVkYCkgcmVuZGVyc1xuICAgKiB0aGUgYnVpbHQtaW4gYXJyb3cuXG4gICAqL1xuICBASW5wdXQoKSBzdWJtaXRCdXR0b24/OiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCB0aGUgZWRpdG9yIGlzIGNsZWFyZWQgYW5kIGEgbmV3IHNlc3Npb24gc3RhcnRzIGFmdGVyXG4gICAqIGBzdWJtaXR0ZWRgIGVtaXRzIOKAlCBvbiBFbnRlciBhbmQgb24gdGhlIHN1Ym1pdCBidXR0b24uIFNldCB0byBmYWxzZSB0b1xuICAgKiBsZWF2ZSB0aGUgcXVlcnkgaW4gcGxhY2U6IHdoZW4gdGhlIGhhbmRsZXIgbmF2aWdhdGVzIGF3YXksIGEgY2xlYXJlZCBmaWVsZFxuICAgKiBmbGFzaGVzIGVtcHR5IHVudGlsIHRoZSBuZXh0IHBhZ2UgcGFpbnRzLiBDYWxsIGByZXNldCgpYCB5b3Vyc2VsZiB3aGVuIHlvdVxuICAgKiB3YW50IGEgZnJlc2ggc2Vzc2lvbi5cbiAgICovXG4gIEBJbnB1dCgpIHJlc2V0T25TdWJtaXQgPSB0cnVlO1xuXG4gIC8vID09PSBPdXRwdXRzID09PVxuXG4gIC8qKiBDYWxsZWQgb24gRW50ZXIgb3Igc3VibWl0LWJ1dHRvbiBjbGljay4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHN1Ym1pdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QXV0b2NvbXBsZXRlUmVzdWx0PigpO1xuICAvKipcbiAgICogRmlyZXMgYWZ0ZXIgZXZlcnkgc3VjY2Vzc2Z1bCBzdWdnZXN0aW9uIHJvdW5kLXRyaXAgd2l0aCB0aGUgc3RydWN0dXJlZFxuICAgKiBxdWVyeSBhcyB0aGUgU0RLIG5vdyB1bmRlcnN0YW5kcyBpdCDigJQgdGhlIHNhbWUgYEF1dG9jb21wbGV0ZVJlc3VsdGAgc2hhcGVcbiAgICogYHN1Ym1pdHRlZGAgY2Fycmllcywgc28geW91IGNhbiBtaXJyb3IgdGhlIHF1ZXJ5IGFzIGl0IGlzIGJ1aWx0IChhIGxpdmVcbiAgICogcHJldmlldywgYSBkcmFmdCwgYW5hbHl0aWNzKSB3aXRob3V0IHdhaXRpbmcgZm9yIHN1Ym1pdC4gRmlyZXMgb25jZSBwZXJcbiAgICogYXBwbGllZCByZXNwb25zZSwgaW5jbHVkaW5nIHRoZSBpbml0aWFsIHJlcXVlc3Qgb24gaW5pdCAoYW4gZW1wdHlcbiAgICogcmVzdWx0KTsgbmV2ZXIgZm9yIGEgZmFpbGVkLCBhYm9ydGVkIG9yIHN1cGVyc2VkZWQgcmVxdWVzdC5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSByZXN1bHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEF1dG9jb21wbGV0ZVJlc3VsdD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGVycm9yZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEVycm9yPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbXBsZXRlZFBhcmFtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tcGxldGVkUGFyYW1TdGF0ZVtdPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGJsdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgYWN0aXZhdGVzIGEgcHJvZHVjdCBjYXJkLiBUaGUgU0RLIGRvZXMgbm90XG4gICAqIG5hdmlnYXRlIOKAlCB5b3UgZGVjaWRlIHdoYXQgYSBzZWxlY3Rpb24gbWVhbnMuIE1vZGlmaWVyIC8gbWlkZGxlIGNsaWNrcyBhcmVcbiAgICogbGVmdCB0byB0aGUgYnJvd3NlciAoY21kLWNsaWNrIHN0aWxsIG9wZW5zIGEgdGFiKSBhbmQgZG9uJ3QgZW1pdC5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBwcm9kdWN0U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9kdWN0PigpO1xuXG4gIC8vID09PSBWaWV3IHJlZnMgPT09XG5cbiAgQFZpZXdDaGlsZChcImNvbnRhaW5lclwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250YWluZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChcImVkaXRvclwiLCB7IHN0YXRpYzogZmFsc2UgfSkgZWRpdG9yUmVmPzogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoXCJwaWxsQ29udGFpbmVyXCIpIHBpbGxDb250YWluZXJSZWY/OiBFbGVtZW50UmVmPEhUTUxTcGFuRWxlbWVudD47XG5cbiAgLy8gPT09IFB1YmxpYyBzdGF0ZSBmb3IgdGhlIHRlbXBsYXRlID09PVxuXG4gIGNvbnRyb2xsZXIhOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXI7XG4gIC8qKlxuICAgKiBDb25jcmV0ZSBsaWdodC9kYXJrIHZhbHVlIGJvdW5kIHRvIGBbYXR0ci5kYXRhLW1vZGVdYC4gU2VlZGVkIGluIG5nT25Jbml0XG4gICAqIHNvIHRoZSBhdHRyaWJ1dGUgaXMgcHJlc2VudCBkdXJpbmcgU1NSICh3aGVyZSBNb2RlQ29udHJvbGxlciwgZ2F0ZWQgYmVoaW5kXG4gICAqIGlzUGxhdGZvcm1Ccm93c2VyIGluIG5nQWZ0ZXJWaWV3SW5pdCwgbmV2ZXIgcnVucykuIE9uIHRoZSBicm93c2VyIHRoZVxuICAgKiBNb2RlQ29udHJvbGxlcidzIHJlc29sdmUgY2FsbGJhY2sga2VlcHMgdGhpcyBpbiBzeW5jIOKAlCBzbyBpdHMgcnVudGltZVxuICAgKiBwcmVmZXJzLWNvbG9yLXNjaGVtZSB1cGRhdGVzIGFuZCB0aGlzIGJpbmRpbmcgYWx3YXlzIGFncmVlIChubyBjbG9iYmVyKS5cbiAgICovXG4gIHJlc29sdmVkTW9kZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgPSBcImRhcmtcIjtcblxuICAvLyA9PT0gSW50ZXJuYWwgPT09XG5cbiAgcHJpdmF0ZSBtb2RlQ29udHJvbGxlcj86IE1vZGVDb250cm9sbGVyO1xuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyPzogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgb25DaGFuZ2VGbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIG9uVG91Y2hlZEZuOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgLy8gSG9sZHMgYSB2YWx1ZSB3cml0dGVuIGJ5IFJlYWN0aXZlIEZvcm1zIGJlZm9yZSBuZ09uSW5pdCByYW4uIFJlYWN0aXZlXG4gIC8vIEZvcm1zIGNhbiBjYWxsIHdyaXRlVmFsdWUoKSBkdXJpbmcgZHluYW1pYyBmb3JtIGNvbnN0cnVjdGlvbiAoZS5nLiB3aGVuXG4gIC8vIGEgRm9ybUNvbnRyb2wgYWxyZWFkeSBob2xkcyBhIHZhbHVlIGF0IHRoZSBtb21lbnQgdGhlIGRpcmVjdGl2ZSBpc1xuICAvLyBjcmVhdGVkKS4gV2Ugc3Rhc2ggdGhlIHZhbHVlIGhlcmUgYW5kIGZsdXNoIGl0IGluIG5nT25Jbml0ICphZnRlcipcbiAgLy8gdGhlIGNvbnRyb2xsZXIgZXhpc3RzIOKAlCBvdGhlcndpc2UgdGhlIGVkaXRvciByZW5kZXJzIGVtcHR5IGV2ZW4gdGhvdWdoXG4gIC8vIHRoZSBmb3JtIGhhZCBhIHZhbHVlLiBgdW5kZWZpbmVkYCBtZWFucyBcIm5vIHBlbmRpbmcgd3JpdGVcIi5cbiAgcHJpdmF0ZSBwZW5kaW5nV3JpdGVWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8vIMKnMTYuOTogcHJlZmVyIGBpbmplY3QoKWAgb3ZlciBjb25zdHJ1Y3Rvci1wYXJhbWV0ZXIgREkgZm9yIGNvbXBvbmVudHMuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gU2VlZCBiZWZvcmUgdGhlIGJyb3dzZXIgZ3VhcmQgc28gU1NSIHJlbmRlcnMgYSBjb25jcmV0ZSBkYXRhLW1vZGUuXG4gICAgdGhpcy5yZXNvbHZlZE1vZGUgPSByZXNvbHZlSW5pdGlhbE1vZGUodGhpcy5tb2RlKTtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgIHRoaXMuY29udHJvbGxlciA9IG5ldyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIoe1xuICAgICAgYXBpQ29uZmlnOiB0aGlzLmFwaUNvbmZpZyxcbiAgICAgIGFkZGl0aW9uYWxDb250ZXh0OiB0aGlzLmFkZGl0aW9uYWxDb250ZXh0LFxuICAgICAgdmlzaXRvcklkOiB0aGlzLnZpc2l0b3JJZCxcbiAgICAgIG9wdGlvbk92ZXJyaWRlczogdGhpcy5vcHRpb25PdmVycmlkZXMsXG4gICAgICBtYXNrQ29tcGxldGVkVGV4dDogdGhpcy5tYXNrQ29tcGxldGVkVGV4dCxcbiAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgIGRyb3Bkb3duVHJpZ2dlcjogdGhpcy5kcm9wZG93blRyaWdnZXIsXG4gICAgICBvcHRpb25zUG9zaXRpb246IHRoaXMub3B0aW9uc1Bvc2l0aW9uLFxuICAgICAgY2xvc2VEcm9wZG93bk9uQmx1cjogdGhpcy5jbG9zZURyb3Bkb3duT25CbHVyLFxuICAgICAgc2hvd05vblRhcHBhYmxlT3B0aW9uczogdGhpcy5zaG93Tm9uVGFwcGFibGVPcHRpb25zLFxuICAgICAgc2hvd1Byb2R1Y3RzOiB0aGlzLnNob3dQcm9kdWN0cyxcbiAgICAgIHNvdXJjZTogXCJmdWxsLXNka1wiLFxuICAgICAgcHJvZHVjdHM6IHRoaXMucHJvZHVjdHMsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGNvbXBsZXRlZFBhcmFtczogdGhpcy5jb21wbGV0ZWRQYXJhbXMsXG4gICAgICBvblN1Ym1pdDogKHJlc3VsdCkgPT4gdGhpcy5oYW5kbGVTdWJtaXQocmVzdWx0KSxcbiAgICAgIG9uUmVzdWx0OiAocmVzdWx0KSA9PiB0aGlzLnJlc3VsdENoYW5nZS5lbWl0KHJlc3VsdCksXG4gICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHRoaXMuZXJyb3JlZC5lbWl0KGVycm9yKSxcbiAgICAgIG9uQ2hhbmdlOiAodGV4dCkgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGV4dCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbih0ZXh0KTtcbiAgICAgIH0sXG4gICAgICBvblBhcmFtc0NoYW5nZTogKHBhcmFtcykgPT4gdGhpcy5jb21wbGV0ZWRQYXJhbXNDaGFuZ2UuZW1pdChwYXJhbXMpLFxuICAgICAgb25Gb2N1czogKCkgPT4gdGhpcy5mb2N1c2VkLmVtaXQoKSxcbiAgICAgIG9uUHJvZHVjdFNlbGVjdDogKHByb2R1Y3QpID0+IHRoaXMucHJvZHVjdFNlbGVjdC5lbWl0KHByb2R1Y3QpLFxuICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KCk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgIH0sXG4gICAgICBzZXRDdXJzb3I6IChvZmZzZXQpID0+IHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICghZWRpdG9yKSByZXR1cm47XG4gICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICBzZXRDdXJzb3JPZmZzZXQoZWRpdG9yLCBvZmZzZXQpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnBlbmRpbmdXcml0ZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udHJvbGxlci5zZXRWYWx1ZSh0aGlzLnBlbmRpbmdXcml0ZVZhbHVlKTtcbiAgICAgIHRoaXMucGVuZGluZ1dyaXRlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgIC8vIE1vZGVDb250cm9sbGVyIHdyaXRlcyBgZGF0YS1tb2RlYCB0byB0aGUgZWxlbWVudCBpdCdzIGdpdmVuLiBUaGUgQ1NTXG4gICAgLy8gc2VsZWN0b3JzIGFyZSBzY29wZWQgdG8gYC5tYWdpY3gtYWlhW2RhdGEtbW9kZT1cIi4uLlwiXWAg4oCUIHdoaWNoIGxpdmVzIG9uXG4gICAgLy8gdGhlIGlubmVyIGA8ZGl2IGNsYXNzPVwibWFnaWN4LWFpYSBtYWdpY3gtYWlhLWNvbnRhaW5lclwiICNjb250YWluZXI+YCxcbiAgICAvLyBOT1QgdGhlIGhvc3QgYDxhaS1hdXRvY29tcGxldGU+YCBlbGVtZW50LiBUaGUgcmVzb2x2ZSBjYWxsYmFjayBtaXJyb3JzXG4gICAgLy8gdGhlIHZhbHVlIGludG8gYHJlc29sdmVkTW9kZWAgc28gdGhlIGBbYXR0ci5kYXRhLW1vZGVdYCBiaW5kaW5nIHN0YXlzIGluXG4gICAgLy8gbG9ja3N0ZXAgd2l0aCBNb2RlQ29udHJvbGxlciDigJQgdGhlIGJpbmRpbmcgaGFuZGxlcyBTU1IsIE1vZGVDb250cm9sbGVyXG4gICAgLy8gaGFuZGxlcyBydW50aW1lIHByZWZlcnMtY29sb3Itc2NoZW1lIHN3aXRjaGVzLCBhbmQgYmVjYXVzZSB0aGV5IGFsd2F5c1xuICAgIC8vIGFncmVlIG5laXRoZXIgY2xvYmJlcnMgdGhlIG90aGVyLlxuICAgIHRoaXMubW9kZUNvbnRyb2xsZXIgPSBuZXcgTW9kZUNvbnRyb2xsZXIoXG4gICAgICB0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5tb2RlLFxuICAgICAgKHJlc29sdmVkKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gUGlsbC13cmFwIGRldGVjdGlvbiDigJQgd2hlbiB0aGUgcGlsbCBsaXN0IHdyYXBzIGJlbG93IHRoZSBlZGl0b3IncyBsYXN0XG4gICAgLy8gbGluZSwgZHJvcCBpdHMgOHB4IGxlZnQgbWFyZ2luIHZpYSBhIGRhdGEgYXR0cmlidXRlIHRoZSBDU1Mga2V5cyBvZmYuXG4gICAgLy8gTWlycm9ycyB0aGUgUmVhY3QgY29tcG9uZW50J3MgdXNlTGF5b3V0RWZmZWN0LlxuICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdGhpcy5tZWFzdXJlUGlsbFdyYXAoKSk7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZWRpdG9yKSB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZWRpdG9yKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tZWFzdXJlUGlsbFdyYXAoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2xsZXIpIHJldHVybjtcbiAgICAvLyBgU2ltcGxlQ2hhbmdlc2AgaXMgYHsgW2tleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH1gLCBzbyBwZXJcbiAgICAvLyBgbm9Qcm9wZXJ0eUFjY2Vzc0Zyb21JbmRleFNpZ25hdHVyZWAgZWFjaCBrZXkgbG9va3VwIHVzZXMgYnJhY2tldFxuICAgIC8vIG5vdGF0aW9uIOKAlCB0aGlzIGtlZXBzIHRoZSBzdHJpY3RuZXNzIGNvbnRyYWN0IHRoYXQgdGhlIHJlc3Qgb2YgdGhlXG4gICAgLy8gd29ya3NwYWNlIGVuZm9yY2VzLlxuICAgIC8vIENvbnRyb2xsZWQtbW9kZSBwcm9wYWdhdGlvblxuICAgIGlmIChjaGFuZ2VzW1widmFsdWVcIl0gJiYgdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wiY29tcGxldGVkUGFyYW1zXCJdICYmIHRoaXMuY29tcGxldGVkUGFyYW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udHJvbGxlci5zZXRDb21wbGV0ZWRQYXJhbXModGhpcy5jb21wbGV0ZWRQYXJhbXMpO1xuICAgIH1cbiAgICAvLyBSZWFjdGl2ZSBvcHRpb25zXG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1tcImFwaUNvbmZpZ1wiXSB8fFxuICAgICAgY2hhbmdlc1tcImFkZGl0aW9uYWxDb250ZXh0XCJdIHx8XG4gICAgICBjaGFuZ2VzW1widmlzaXRvcklkXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wib3B0aW9uT3ZlcnJpZGVzXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wiZHJvcGRvd25UcmlnZ2VyXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wib3B0aW9uc1Bvc2l0aW9uXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wiY2xvc2VEcm9wZG93bk9uQmx1clwiXSB8fFxuICAgICAgY2hhbmdlc1tcInNob3dOb25UYXBwYWJsZU9wdGlvbnNcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJzaG93UHJvZHVjdHNcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJwcm9kdWN0c1wiXVxuICAgICkge1xuICAgICAgdGhpcy5jb250cm9sbGVyLnVwZGF0ZSh7XG4gICAgICAgIGFwaUNvbmZpZzogdGhpcy5hcGlDb25maWcsXG4gICAgICAgIGFkZGl0aW9uYWxDb250ZXh0OiB0aGlzLmFkZGl0aW9uYWxDb250ZXh0LFxuICAgICAgICB2aXNpdG9ySWQ6IHRoaXMudmlzaXRvcklkLFxuICAgICAgICBvcHRpb25PdmVycmlkZXM6IHRoaXMub3B0aW9uT3ZlcnJpZGVzLFxuICAgICAgICBkcm9wZG93blRyaWdnZXI6IHRoaXMuZHJvcGRvd25UcmlnZ2VyLFxuICAgICAgICBvcHRpb25zUG9zaXRpb246IHRoaXMub3B0aW9uc1Bvc2l0aW9uLFxuICAgICAgICBjbG9zZURyb3Bkb3duT25CbHVyOiB0aGlzLmNsb3NlRHJvcGRvd25PbkJsdXIsXG4gICAgICAgIHNob3dOb25UYXBwYWJsZU9wdGlvbnM6IHRoaXMuc2hvd05vblRhcHBhYmxlT3B0aW9ucyxcbiAgICAgICAgc2hvd1Byb2R1Y3RzOiB0aGlzLnNob3dQcm9kdWN0cyxcbiAgICAgICAgLy8gU2FtZSByZWZlcmVuY2Ugb24gYW4gdW5yZWxhdGVkIGNoYW5nZSBpcyBhIG5vLW9wIGluIHRoZSBjb3JlOyBvbmx5IGFcbiAgICAgICAgLy8gZ2VudWluZWx5IHN3YXBwZWQgKG9yIHJlbW92ZWQpIGludGVncmF0aW9uIGNsZWFycyB0aGUgc3RyaXAuXG4gICAgICAgIHByb2R1Y3RzOiB0aGlzLnByb2R1Y3RzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wibW9kZVwiXSkge1xuICAgICAgLy8gS2VlcCB0aGUgYmluZGluZyBjb3JyZWN0IGV2ZW4gd2hlbiBNb2RlQ29udHJvbGxlciBkb2Vzbid0IGV4aXN0IHlldFxuICAgICAgLy8gKFNTUiAvIHByZS1uZ0FmdGVyVmlld0luaXQpLiBPbiB0aGUgYnJvd3Nlciwgc2V0TW9kZSB0cmlnZ2VycyB0aGVcbiAgICAgIC8vIHJlc29sdmUgY2FsbGJhY2sgd2hpY2ggc2V0cyB0aGUgc2FtZSB2YWx1ZS5cbiAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZUluaXRpYWxNb2RlKHRoaXMubW9kZSk7XG4gICAgICB0aGlzLm1vZGVDb250cm9sbGVyPy5zZXRNb2RlKHRoaXMubW9kZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMubW9kZUNvbnRyb2xsZXI/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmNvbnRyb2xsZXI/LmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8vID09PSBJbXBlcmF0aXZlIEFQSSAoZXhwb3NlZCBvbiB0aGUgY29tcG9uZW50IGluc3RhbmNlIHZpYSBAVmlld0NoaWxkKSA9PT1cblxuICAvKiogUHJvZ3JhbW1hdGljYWxseSBmb2N1cyB0aGUgZWRpdG9yLiAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgLyoqIFByb2dyYW1tYXRpY2FsbHkgYmx1ciB0aGUgZWRpdG9yLiAqL1xuICBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgfVxuXG4gIC8qKiBDbGVhciBhbGwgc3RhdGUsIHJvdGF0ZSBzZXNzaW9uLCBhbmQgcmUtZmV0Y2guICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlcj8ucmVzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTa2lwIHRoZSBhY3RpdmUgcGlsbCDigJQgc2FtZSBhY3Rpb24gYXMgdGhlIGRyb3Bkb3duJ3Mgc2tpcCBidXR0b24gLyDihpIuXG4gICAqIExldHMgYSBjb25zdW1lciB3aG8gaGlkZXMgdGhlIGJ1aWx0LWluIGJ1dHRvbiAoYHNob3dTa2lwQnV0dG9uPWZhbHNlYClcbiAgICogZHJpdmUgc2tpcHBpbmcgZnJvbSB0aGVpciBvd24gVUkuXG4gICAqL1xuICBza2lwQWN0aXZlUGlsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXI/LnNraXBBY3RpdmVQaWxsKCk7XG4gIH1cblxuICAvKiogU3dpdGNoIGNvbG9yIG1vZGUgYXQgcnVudGltZS4gKi9cbiAgc2V0TW9kZShtb2RlOiBBcHBlYXJhbmNlTW9kZSk6IHZvaWQge1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgdGhpcy5yZXNvbHZlZE1vZGUgPSByZXNvbHZlSW5pdGlhbE1vZGUobW9kZSk7XG4gICAgdGhpcy5tb2RlQ29udHJvbGxlcj8uc2V0TW9kZShtb2RlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vID09PSBUZW1wbGF0ZSBoZWxwZXJzID09PVxuXG4gIC8qKlxuICAgKiAnZGVmYXVsdCcg4oaSIHJlbmRlciB0aGUgYnVpbHQtaW4gYXJyb3cgYnV0dG9uLlxuICAgKiAnY3VzdG9tJyAg4oaSIHByb2plY3QgdGhlIGNvbnN1bWVyLXN1cHBsaWVkIFRlbXBsYXRlUmVmLlxuICAgKiAnaGlkZGVuJyAg4oaSIG5vIGJ1dHRvbi5cbiAgICovXG4gIGdldCBzdWJtaXRCdXR0b25TdGF0ZSgpOiBcImRlZmF1bHRcIiB8IFwiY3VzdG9tXCIgfCBcImhpZGRlblwiIHtcbiAgICBpZiAodGhpcy5zdWJtaXRCdXR0b24gPT09IG51bGwpIHJldHVybiBcImhpZGRlblwiO1xuICAgIGlmICh0aGlzLnN1Ym1pdEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gXCJkZWZhdWx0XCI7XG4gICAgcmV0dXJuIFwiY3VzdG9tXCI7XG4gIH1cblxuICAvKiogTmFycm93ZWQgYWNjZXNzb3IgZm9yICpuZ1RlbXBsYXRlT3V0bGV0IOKAlCBuZXZlciB1bmRlZmluZWQuICovXG4gIGdldCBjdXN0b21TdWJtaXRUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnN1Ym1pdEJ1dHRvbiA/PyBudWxsO1xuICB9XG5cbiAgZ2V0IHNob3dJbmxpbmVQaWxscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5waWxsUGxhY2VtZW50ID09PSBcImlubGluZVwiO1xuICB9XG5cbiAgZ2V0IHNob3dEcm9wZG93blBpbGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBpbGxQbGFjZW1lbnQgPT09IFwiZHJvcGRvd25cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBgdHJ1ZWAgd2hlbiB0aGVyZSdzIHNvbWV0aGluZyB0byBzdWJtaXQg4oCUIGRyaXZlbiBieSBjdXJyZW50IHNlZ21lbnRzXG4gICAqIGFuZCBjb21wbGV0ZWQgcGFyYW1zLiBSZWFkIG9mZiB0aGUgbGl2ZSBlZGl0b3IgdmlhIHRoZSBjb250cm9sbGVyIHN0YXRlLlxuICAgKi9cbiAgY2FuU3VibWl0KHN0YXRlOiB7IHNlZ21lbnRzOiB7IGxlbmd0aDogbnVtYmVyIH07IGNvbXBsZXRlZFBhcmFtczogeyBsZW5ndGg6IG51bWJlciB9IH0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUuc2VnbWVudHMubGVuZ3RoID4gMCB8fCBzdGF0ZS5jb21wbGV0ZWRQYXJhbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIG9uV3JhcHBlckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gQ2xpY2tpbmcgYSBwaWxsIHNob3VsZCBhY3RpdmF0ZSBpdCB3aXRob3V0IHN0ZWFsaW5nIGZvY3VzIGVsc2V3aGVyZS5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICh0YXJnZXQ/LmNsb3Nlc3QoXCJbZGF0YS1haWEtcGlsbF1cIikpIHJldHVybjtcbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBvblN1Ym1pdEJ1dHRvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5oYW5kbGVTdWJtaXRGcm9tVXNlckFjdGlvbigpO1xuICB9XG5cbiAgb25TdWJtaXRTbG90Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmhhbmRsZVN1Ym1pdEZyb21Vc2VyQWN0aW9uKCk7XG4gIH1cblxuICBvblNlbGVjdFBpbGwoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRBY3RpdmVQaWxsKGluZGV4KTtcbiAgfVxuXG4gIC8vID09PSBDb250cm9sVmFsdWVBY2Nlc3NvciA9PT1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHZhbHVlID8/IFwiXCI7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2xsZXIpIHtcbiAgICAgIC8vIFJlYWN0aXZlIEZvcm1zIGNhbiBjYWxsIHdyaXRlVmFsdWUoKSBiZWZvcmUgbmdPbkluaXQgY3JlYXRlcyB0aGVcbiAgICAgIC8vIGNvbnRyb2xsZXIgKGR5bmFtaWMgZm9ybSBjb25zdHJ1Y3Rpb24sIG9yIGEgRm9ybUNvbnRyb2wgdGhhdCBhbHJlYWR5XG4gICAgICAvLyBoYWQgYSB2YWx1ZSBhdCBkaXJlY3RpdmUtY3JlYXRpb24gdGltZSkuIEJ1ZmZlciB0aGUgdmFsdWU7IG5nT25Jbml0XG4gICAgICAvLyBmbHVzaGVzIGl0IGFzIHNvb24gYXMgdGhlIGNvbnRyb2xsZXIgZXhpc3RzLlxuICAgICAgdGhpcy5wZW5kaW5nV3JpdGVWYWx1ZSA9IG5leHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29udHJvbGxlci5zZXRWYWx1ZShuZXh0KTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZUZuID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkRm4gPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoX2Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gVGhlIGNvbnRlbnRFZGl0YWJsZSBob3N0IGRvZXNuJ3QgaGF2ZSBhIG5hdGl2ZSBkaXNhYmxlZCBhdHRyaWJ1dGUuIEZvclxuICAgIC8vIHYwLjEgd2UgYWNjZXB0IHRoZSBjYWxsIHNvIEFuZ3VsYXIncyBmb3JtcyBsYXllciBkb2Vzbid0IHRocm93LCBidXRcbiAgICAvLyB0aGUgZWRpdG9yIHN0YXlzIGludGVyYWN0aXZlLiBBIGZ1dHVyZSBlbmhhbmNlbWVudCBjYW4gdG9nZ2xlXG4gICAgLy8gY29udGVudEVkaXRhYmxlICsgQVJJQSBkaXNhYmxlZCBoZXJlLlxuICB9XG5cbiAgLy8gPT09IFN1Ym1pdCBmbG93ID09PVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIGNvbnRyb2xsZXIncyBvblN1Ym1pdCBjYWxsYmFjayAod2hpY2ggZmlyZXMgZnJvbSB0aGVcbiAgICoga2V5Ym9hcmQgY29udHJvbGxlciBvbiBFbnRlcikuIFJlYWRzIHRoZSBsaXZlIGVkaXRvciB0ZXh0IOKAlCBzYW1lIHRyaWNrXG4gICAqIHRoZSBSZWFjdCBjb21wb25lbnQgdXNlcyDigJQgc28gdGhlIGVtaXR0ZWQgcXVlcnkgcmVmbGVjdHMgd2hhdGV2ZXIncyBpblxuICAgKiB0aGUgRE9NIHJpZ2h0IG5vdywgbm90IGEgcG9zc2libHktc3RhbGUgc3RhdGUgc25hcHNob3QuXG4gICAqL1xuICAvLyBgZnJvbUJ1dHRvbmA6IHRoZSBTREsgcmVjb3JkcyBhbiBFbnRlciBzdWJtaXQgaXRzZWxmIGJlZm9yZSBpdCBjYWxscyBiYWNrXG4gIC8vIGhlcmU7IGEgY2xpY2sgb24gb3VyIG93biBidXR0b24gbmV2ZXIgcGFzc2VzIHRocm91Z2ggaXQuXG4gIHByaXZhdGUgaGFuZGxlU3VibWl0KF9yZXN1bHQ6IEF1dG9jb21wbGV0ZVJlc3VsdCwgZnJvbUJ1dHRvbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0ID0gZXh0cmFjdFBsYWluVGV4dChlZGl0b3IpO1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb250cm9sbGVyLmdldFN0YXRlKCk7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5jb21wbGV0ZWRQYXJhbXMgPz8gc3RhdGUuY29tcGxldGVkUGFyYW1zO1xuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkU3VibWl0UmVzdWx0KHRleHQsIHBhcmFtcywgc3RhdGUuc2tpcHBlZFBhcmFtcywge1xuICAgICAgaWRlbnRpZmllZFBhcmFtczogc3RhdGUuaWRlbnRpZmllZFBhcmFtcyxcbiAgICAgIGlzUmVhZHk6IHN0YXRlLmlzUmVhZHksXG4gICAgICBjdXN0b21GaWVsZHM6IHN0YXRlLmN1c3RvbUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZnJvbUJ1dHRvbikgdGhpcy5jb250cm9sbGVyLnJlY29yZFN1Ym1pdChyZXN1bHQpO1xuICAgIHRoaXMuc3VibWl0dGVkLmVtaXQocmVzdWx0KTtcbiAgICBpZiAodGhpcy5yZXNldE9uU3VibWl0KSB0aGlzLmNvbnRyb2xsZXIucmVzZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3VibWl0RnJvbVVzZXJBY3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNvbnRyb2xsZXIuZ2V0U3RhdGUoKTtcbiAgICBpZiAoIXRoaXMuY2FuU3VibWl0KHN0YXRlKSkgcmV0dXJuO1xuICAgIC8vIFN5bnRoZXNpemUgdGhlIHJlc3VsdCBmb3IgdGhlIHN1Ym1pdC1idXR0b24gY2xpY2sgcGF0aDsgc2FtZSBzaGFwZVxuICAgIC8vIHRoZSBjb250cm9sbGVyIHdvdWxkIGRlbGl2ZXIgZnJvbSBhIGtleWJvYXJkIEVudGVyLCBzbyBoYW5kbGVTdWJtaXRcbiAgICAvLyBjYW4gdGFrZSBlaXRoZXIgZW50cnkgcG9pbnQuXG4gICAgdGhpcy5oYW5kbGVTdWJtaXQoXG4gICAgICB7XG4gICAgICAgIHF1ZXJ5OiBzdGF0ZS50ZXh0LnRyaW0oKSxcbiAgICAgICAgcmF3X3F1ZXJ5OiBcIlwiLFxuICAgICAgICBjb21wbGV0ZWRfcGFyYW1zOiBbXSxcbiAgICAgICAgaWRlbnRpZmllZF9wYXJhbXM6IFtdLFxuICAgICAgICBpc19yZWFkeTogc3RhdGUuaXNSZWFkeSxcbiAgICAgIH0sXG4gICAgICB0cnVlLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG1lYXN1cmVQaWxsV3JhcCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnBpbGxDb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWVkaXRvcikgcmV0dXJuO1xuICAgIGNvbnN0IGlubmVyID0gY29udGFpbmVyLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoIWlubmVyKSByZXR1cm47XG4gICAgLy8gV3JhcCBkZXRlY3Rpb246IHRoZSBwaWxsIHJvdydzIHRvcCB2cyB0aGUgZWRpdG9yJ3MgYm90dG9tLiBXaGVuIHRoZVxuICAgIC8vIHBpbGxzIHNpdCBvbiAob3IgYWJvdmUpIHRoZSBlZGl0b3IncyBsYXN0IGxpbmUgdGhleSdyZSBOT1Qgd3JhcHBlZCDigJRcbiAgICAvLyBrZWVwIHRoZSA4cHggbWFyZ2luIHNvIHRoZXkgZG9uJ3QgYnV0dCBhZ2FpbnN0IHR5cGVkIHRleHQgb3IgdGhlXG4gICAgLy8gcGxhY2Vob2xkZXIuIFRoaXMgaGFuZGxlcyB0aGUgZW1wdHktZWRpdG9yICsgcGxhY2Vob2xkZXIgY2FzZVxuICAgIC8vIG5hdHVyYWxseTogdGhlIHBsYWNlaG9sZGVyIHN0aWxsIG9jY3VwaWVzIHRoZSBlZGl0b3IncyBsaW5lIGJveC5cbiAgICBjb25zdCBjUmVjdCA9IGlubmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGVSZWN0ID0gZWRpdG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHdyYXBwZWQgPSBjUmVjdC50b3AgPj0gZVJlY3QuYm90dG9tIC0gMjtcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgIGlmICh3cmFwcGVkKSBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1haWEtcGlsbC13cmFwcGVkXCIsIFwiXCIpO1xuICAgICAgZWxzZSBjb250YWluZXIucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1haWEtcGlsbC13cmFwcGVkXCIpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG4gIC8vIERlZmF1bHQgbm8tb3AgZm9yIENWQSBjYWxsYmFja3MuXG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGNvbmNyZXRlIGxpZ2h0L2RhcmsgdmFsdWUgZnJvbSB0aGUgY29uZmlndXJlZCBtb2RlLiBVc2VkIHRvIHNlZWRcbiAqIHRoZSBgZGF0YS1tb2RlYCBhdHRyaWJ1dGUgc3luY2hyb25vdXNseSAoaW5jbHVkaW5nIGR1cmluZyBTU1IsIHdoZXJlXG4gKiBNb2RlQ29udHJvbGxlciBuZXZlciBydW5zKS4gT24gdGhlIHNlcnZlciBgd2luZG93YCBpcyB1bmRlZmluZWQg4oaSIGRlZmF1bHRzXG4gKiB0byBcImRhcmtcIiAobWF0Y2hlcyB0aGUgdmFuaWxsYS9SZWFjdCBiZWhhdmlvcikuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVJbml0aWFsTW9kZShtb2RlOiBBcHBlYXJhbmNlTW9kZSk6IFwibGlnaHRcIiB8IFwiZGFya1wiIHtcbiAgaWYgKG1vZGUgIT09IFwiYXV0b1wiKSByZXR1cm4gbW9kZTtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcImRhcmtcIjtcbiAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiKS5tYXRjaGVzID8gXCJkYXJrXCIgOiBcImxpZ2h0XCI7XG59XG4iLCI8ZGl2XG4gICNjb250YWluZXJcbiAgY2xhc3M9XCJtYWdpY3gtYWlhIG1hZ2ljeC1haWEtY29udGFpbmVyXCJcbiAgW2F0dHIuZGF0YS1waWxsLXBsYWNlbWVudF09XCJwaWxsUGxhY2VtZW50XCJcbiAgW2F0dHIuZGF0YS1vcHRpb25zLXBvc2l0aW9uXT1cIm9wdGlvbnNQb3NpdGlvblwiXG4gIFthdHRyLmRhdGEtYW5pbWF0aW9uc109XCJhbmltYXRpb25zID8gJ29uJyA6ICdvZmYnXCJcbiAgW2F0dHIuZGF0YS1tb2RlXT1cInJlc29sdmVkTW9kZVwiXG4+XG4gIDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd25cbiAgICAqbmdJZj1cImNvbnRyb2xsZXJcIlxuICAgIFtjb250cm9sbGVyXT1cImNvbnRyb2xsZXJcIlxuICAgIFtzaG93UGlsbHNdPVwic2hvd0Ryb3Bkb3duUGlsbHNcIlxuICAgIFtzaG93U2tpcEJ1dHRvbl09XCJzaG93U2tpcEJ1dHRvblwiXG4gICAgW3Nob3dPcHRpb25JY29uc109XCJzaG93T3B0aW9uSWNvbnNcIlxuICAgIFtzaG93T3B0aW9uSW1hZ2VzXT1cInNob3dPcHRpb25JbWFnZXNcIlxuICAgIFtzaG93T3B0aW9uQ291bnRzXT1cInNob3dPcHRpb25Db3VudHNcIlxuICAgIFtwcm9kdWN0c0xheW91dF09XCJwcm9kdWN0c0xheW91dFwiXG4gICAgW3Byb2R1Y3RJbWFnZUZhbGxiYWNrXT1cInByb2R1Y3RJbWFnZUZhbGxiYWNrXCJcbiAgPjwvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cIm1hZ2ljeC1haWEtaW5wdXQtd3JhcHBlclwiXG4gICAgZGF0YS1haWEtaW5wdXQtd3JhcHBlcj1cIlwiXG4gICAgKGNsaWNrKT1cIm9uV3JhcHBlckNsaWNrKCRldmVudClcIlxuICAgIChrZXl1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZWRpdG9yLWFyZWFcIiBkYXRhLWFpYS1lZGl0b3I9XCJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgI2VkaXRvclxuICAgICAgICAqbmdJZj1cImNvbnRyb2xsZXJcIlxuICAgICAgICBbYWlhRWRpdG9ySG9zdF09XCJjb250cm9sbGVyXCJcbiAgICAgICAgW2F1dG9Gb2N1c109XCJhdXRvRm9jdXNcIlxuICAgICAgICBbc2hvd0NoaXBJY29uc109XCJzaG93Q2hpcEljb25zXCJcbiAgICAgICAgW3Nob3dDaGlwSW1hZ2VzXT1cInNob3dDaGlwSW1hZ2VzXCJcbiAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWlucHV0XCJcbiAgICAgICAgZGF0YS1haWEtaW5wdXQ9XCJcIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbGxlciAmJiBzaG93SW5saW5lUGlsbHNcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAjcGlsbENvbnRhaW5lclxuICAgICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1waWxsLWxpc3QtY29udGFpbmVyXCJcbiAgICAgICAgICBkYXRhLWFpYS1waWxsLWxpc3QtY29udGFpbmVyPVwiXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKGNvbnRyb2xsZXIuaXNMb2FkaW5nJCB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAoKGNvbnRyb2xsZXIuc3VnZ2VzdGlvblBpbGxzJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDApID4gMFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YWlhLXBpbGwtbGlzdFxuICAgICAgICAgICAgW3BpbGxzXT1cIihjb250cm9sbGVyLnN1Z2dlc3Rpb25QaWxscyQgfCBhc3luYykgPz8gW11cIlxuICAgICAgICAgICAgW2FjdGl2ZVBpbGxJbmRleF09XCIwXCJcbiAgICAgICAgICAgIFthY3RpdmVTZWxlY3RlZF09XCIoY29udHJvbGxlci5pc0FjdGl2ZVBpbGxTZWxlY3RlZCQgfCBhc3luYykgPz8gZmFsc2VcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiKGNvbnRyb2xsZXIuaXNMb2FkaW5nJCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICAgICAgICAoc2VsZWN0UGlsbCk9XCJvblNlbGVjdFBpbGwoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYWlhLXBpbGwtbGlzdD5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzdWJtaXRCdXR0b25TdGF0ZVwiPlxuICAgICAgPGFpYS1zdWJtaXQtYnV0dG9uXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGVmYXVsdCdcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgJiZcbiAgICAgICAgICAgIGNhblN1Ym1pdCh7XG4gICAgICAgICAgICAgIHNlZ21lbnRzOiAoY29udHJvbGxlci5zZWdtZW50cyQgfCBhc3luYykgPz8gW10sXG4gICAgICAgICAgICAgIGNvbXBsZXRlZFBhcmFtczogKGNvbnRyb2xsZXIuY29tcGxldGVkUGFyYW1zJCB8IGFzeW5jKSA/PyBbXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIFwiXG4gICAgICAgIChzdWJtaXQpPVwib25TdWJtaXRCdXR0b25DbGljaygkZXZlbnQpXCJcbiAgICAgID48L2FpYS1zdWJtaXQtYnV0dG9uPlxuXG4gICAgICA8c3BhblxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2N1c3RvbSdcIlxuICAgICAgICBkYXRhLWFpYS1zdWJtaXQ9XCJcIlxuICAgICAgICBkYXRhLWFpYS1zdWJtaXQtc2xvdD1cIlwiXG4gICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1zdWJtaXQtc2xvdFwiXG4gICAgICAgIChjbGljayk9XCJvblN1Ym1pdFNsb3RDbGljaygkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVN1Ym1pdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|