@memberjunction/ng-record-process-studio 6.2.0-edge.0 → 6.2.0-edge.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. package/dist/lib/feature-pipeline-builder/feature-pipeline-builder.component.d.ts +211 -11
  2. package/dist/lib/feature-pipeline-builder/feature-pipeline-builder.component.d.ts.map +1 -1
  3. package/dist/lib/feature-pipeline-builder/feature-pipeline-builder.component.js +1639 -400
  4. package/dist/lib/feature-pipeline-builder/feature-pipeline-builder.component.js.map +1 -1
  5. package/dist/lib/record-process-editor/record-process-editor.component.d.ts +10 -0
  6. package/dist/lib/record-process-editor/record-process-editor.component.d.ts.map +1 -1
  7. package/dist/lib/record-process-editor/record-process-editor.component.js +25 -5
  8. package/dist/lib/record-process-editor/record-process-editor.component.js.map +1 -1
  9. package/dist/lib/record-process-history/record-process-history.component.d.ts +10 -0
  10. package/dist/lib/record-process-history/record-process-history.component.d.ts.map +1 -1
  11. package/dist/lib/record-process-history/record-process-history.component.js +30 -10
  12. package/dist/lib/record-process-history/record-process-history.component.js.map +1 -1
  13. package/dist/lib/record-process-studio/record-process-studio.component.d.ts +12 -0
  14. package/dist/lib/record-process-studio/record-process-studio.component.d.ts.map +1 -1
  15. package/dist/lib/record-process-studio/record-process-studio.component.js +31 -7
  16. package/dist/lib/record-process-studio/record-process-studio.component.js.map +1 -1
  17. package/dist/lib/run-detail.d.ts +4 -0
  18. package/dist/lib/run-detail.d.ts.map +1 -1
  19. package/dist/lib/run-detail.js +10 -2
  20. package/dist/lib/run-detail.js.map +1 -1
  21. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"feature-pipeline-builder.component.js","sourceRoot":"","sources":["../../../src/lib/feature-pipeline-builder/feature-pipeline-builder.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Visual authoring component for a Feature Pipeline (Infer Record Process).\n * Configures the DataFeatureSpec (Context, Outputs & Constraints, Caching) and binds\n * prompt, output mapping, and watermark strategy directly on the MJRecordProcessEntity.\n *\n * @module @memberjunction/ng-record-process-studio\n */\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { EntityInfo, EntityFieldInfo, LogError, RunView, UserInfo } from '@memberjunction/core';\nimport { MJRecordProcessEntity, MJAIPromptEntity, MJEntityDocumentEntity } from '@memberjunction/core-entities';\nimport {\n DataFeatureSpec,\n DataFeatureOutput,\n ValueConstraint,\n OutputTarget,\n ViolationPolicy,\n renderConstraintBlock,\n validateSpec,\n type SpecValidationIssue,\n type EntityMetadataStub,\n} from '@memberjunction/feature-pipelines';\nimport { SafeJSONParse, UUIDsEqual } from '@memberjunction/global';\nimport { MJButtonDirective } from '@memberjunction/ng-ui-components';\n\nexport type PromptOption = Pick<MJAIPromptEntity, 'ID' | 'Name' | 'Description'>;\n\nexport type EntityDocOption = Pick<MJEntityDocumentEntity, 'ID' | 'Name' | 'EntityID'>;\n\n@Component({\n selector: 'mj-feature-pipeline-builder',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, MJButtonDirective],\n template: `\n <div class=\"fpb\">\n <!-- STAGE 1: CONTEXT SOURCE -->\n <section class=\"rpe-sec\">\n <div class=\"rpe-sec-h\">\n <span class=\"num\">1</span>\n <h3>Context Source</h3>\n </div>\n <p class=\"rpe-desc\">Choose how data from each record is extracted and formatted before being sent to the LLM prompt.</p>\n\n <div class=\"rpe-grid3\">\n <div class=\"field\">\n <label>Context Mode</label>\n <select class=\"mj-input\" [value]=\"contextMode\" (change)=\"onContextModeChange($event)\">\n <option value=\"fields\">Record Fields</option>\n <option value=\"document\">Entity Document (Template)</option>\n <option value=\"query\">Query (Graph Traversal)</option>\n </select>\n </div>\n\n @if (contextMode === 'document') {\n <div class=\"field\">\n <label>Entity Document</label>\n <select class=\"mj-input\" [value]=\"spec.Context.EntityDocumentID || ''\" (change)=\"onEntityDocChange($event)\">\n <option value=\"\" disabled>— Select Entity Document —</option>\n @for (doc of availableDocs; track doc.ID) {\n <option [value]=\"doc.ID\">{{ doc.Name }}</option>\n }\n </select>\n </div>\n }\n\n @if (contextMode === 'query') {\n <div class=\"field\">\n <label>Query ID</label>\n <input class=\"mj-input mono\" [value]=\"spec.Context.QueryID || ''\" (input)=\"onQueryIDChange($event)\" placeholder=\"UUID of approved Query\">\n </div>\n }\n\n <div class=\"field\">\n <label>Field Filter (optional)</label>\n <input class=\"mj-input\" [value]=\"fieldsCsv\" (input)=\"onFieldsCsvChange($event)\" placeholder=\"e.g. FirstName, LastName, Title\">\n </div>\n </div>\n </section>\n\n <!-- STAGE 2: PROMPT & INJECTED CONSTRAINTS -->\n <section class=\"rpe-sec\">\n <div class=\"rpe-sec-h\">\n <span class=\"num\">2</span>\n <h3>AI Prompt</h3>\n </div>\n <div class=\"rpe-grid2\">\n <div class=\"field\">\n <label>Prompt</label>\n <select class=\"mj-input\" [value]=\"Record?.PromptID || ''\" (change)=\"onPromptChange($event)\">\n <option value=\"\" disabled>— Select AI Prompt —</option>\n @for (p of availablePrompts; track p.ID) {\n <option [value]=\"p.ID\">{{ p.Name }}</option>\n }\n </select>\n </div>\n @if (selectedPrompt) {\n <div class=\"field\">\n <label>Prompt Description</label>\n <div class=\"rpe-static-text\">{{ selectedPrompt.Description || 'No description provided' }}</div>\n </div>\n }\n </div>\n\n @if (renderedConstraintPreview) {\n <div class=\"field rpe-mt\">\n <label>Injected Constraint Block <span class=\"muted\">— automatically appended to prompt instructions</span></label>\n <pre class=\"fpb-code-preview\">{{ renderedConstraintPreview }}</pre>\n </div>\n }\n </section>\n\n <!-- STAGE 3: OUTPUTS & CONSTRAINTS -->\n <section class=\"rpe-sec\">\n <div class=\"rpe-sec-h fpb-split-h\">\n <div class=\"fpb-title-group\">\n <span class=\"num\">3</span>\n <h3>Outputs & Constraints</h3>\n </div>\n <button mjButton size=\"sm\" variant=\"secondary\" (click)=\"addOutput()\">\n <i class=\"fa-solid fa-plus\"></i> Add Output\n </button>\n </div>\n <p class=\"rpe-desc\">Define the structured outputs produced by the LLM, their type constraints, and target write-back destinations.</p>\n\n @if (!spec.Outputs || spec.Outputs.length === 0) {\n <div class=\"fpb-empty-outputs\">\n <i class=\"fa-solid fa-arrow-turn-up\"></i>\n <span>No outputs defined. Click <strong>Add Output</strong> to configure at least one output attribute.</span>\n </div>\n } @else {\n <div class=\"fpb-outputs-list\">\n @for (output of spec.Outputs; track $index) {\n <div class=\"fpb-output-card\">\n <div class=\"fpb-output-head\">\n <h4>Output #{{ $index + 1 }}: {{ output.Name || '(unnamed)' }}</h4>\n <button mjButton size=\"sm\" variant=\"flat\" (click)=\"removeOutput($index)\">\n <i class=\"fa-solid fa-trash\"></i> Remove\n </button>\n </div>\n\n <div class=\"rpe-grid3\">\n <div class=\"field\">\n <label>Output Name</label>\n <input class=\"mj-input\" [value]=\"output.Name\" (input)=\"updateOutputProp($index, 'Name', $event)\" placeholder=\"e.g. SentimentScore\">\n </div>\n <div class=\"field\">\n <label>JSON Path / Ref</label>\n <input class=\"mj-input mono\" [value]=\"output.Ref\" (input)=\"updateOutputProp($index, 'Ref', $event)\" placeholder=\"e.g. $.sentiment or $\">\n </div>\n <div class=\"field\">\n <label>Target Mode</label>\n <select class=\"mj-input\" [value]=\"output.Target.Mode\" (change)=\"updateTargetMode($index, $event)\">\n <option value=\"field\">Entity Column (field)</option>\n <option value=\"child\">Child Rows (child)</option>\n <option value=\"tags\">Taxonomy Tags (tags)</option>\n </select>\n </div>\n </div>\n\n <!-- Target details -->\n <div class=\"rpe-grid3 rpe-mt\">\n @if (output.Target.Mode === 'field') {\n <div class=\"field\">\n <label>Target Field</label>\n <select class=\"mj-input\" [value]=\"output.Target.EntityFieldName\" (change)=\"updateFieldTarget($index, $event)\">\n <option value=\"\" disabled>— Select Column —</option>\n @for (f of entityFields; track f.Name) {\n <option [value]=\"f.Name\">{{ f.DisplayName || f.Name }} ({{ f.TSType }})</option>\n }\n </select>\n </div>\n }\n\n @if (output.Target.Mode === 'child') {\n <div class=\"field\">\n <label>Child Entity</label>\n <select class=\"mj-input\" [value]=\"output.Target.EntityName\" (change)=\"updateChildTargetEntity($index, $event)\">\n <option value=\"\" disabled>— Select Entity —</option>\n @for (e of availableEntities; track e.ID) {\n <option [value]=\"e.Name\">{{ e.DisplayName || e.Name }}</option>\n }\n </select>\n </div>\n }\n\n <!-- Constraint details -->\n <div class=\"field\">\n <label>Constraint Type</label>\n <select class=\"mj-input\" [value]=\"output.Constraint?.Type || 'none'\" (change)=\"updateConstraintType($index, $event)\">\n <option value=\"none\">None / Unconstrained</option>\n <option value=\"enum\">Enum (Allowed Values)</option>\n <option value=\"numeric\">Numeric (Min/Max)</option>\n <option value=\"boolean\">Boolean</option>\n <option value=\"freetext\">Free Text</option>\n </select>\n </div>\n\n @if (output.Constraint) {\n <div class=\"field\">\n <label>Violation Policy</label>\n <select class=\"mj-input\" [value]=\"output.Constraint.OnViolation || 'fail'\" (change)=\"updateViolationPolicy($index, $event)\">\n <option value=\"fail\">Fail Row</option>\n <option value=\"null\">Set Output to Null</option>\n <option value=\"coerce-to-other\">Coerce / Fallback</option>\n </select>\n </div>\n }\n </div>\n\n <!-- Constraint params -->\n @if (output.Constraint?.Type === 'enum') {\n <div class=\"field rpe-mt\">\n <label>Allowed Values (comma separated)</label>\n <input class=\"mj-input\" [value]=\"getEnumValuesCsv(output.Constraint)\" (input)=\"updateEnumValues($index, $event)\" placeholder=\"e.g. Positive, Neutral, Negative\">\n </div>\n }\n @if (output.Constraint?.Type === 'numeric') {\n <div class=\"rpe-grid2 rpe-mt\">\n <div class=\"field\">\n <label>Min Value</label>\n <input class=\"mj-input\" type=\"number\" [value]=\"getNumericMin(output.Constraint)\" (input)=\"updateNumericMin($index, $event)\">\n </div>\n <div class=\"field\">\n <label>Max Value</label>\n <input class=\"mj-input\" type=\"number\" [value]=\"getNumericMax(output.Constraint)\" (input)=\"updateNumericMax($index, $event)\">\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </section>\n\n <!-- STAGE 4: MATERIALIZATION & WATERMARK -->\n <section class=\"rpe-sec\">\n <div class=\"rpe-sec-h\">\n <span class=\"num\">4</span>\n <h3>Caching & Watermarks</h3>\n </div>\n <div class=\"rpe-grid3\">\n <div class=\"field\">\n <label>Watermark Strategy</label>\n <select class=\"mj-input\" [value]=\"Record?.WatermarkStrategy || 'Checksum'\" (change)=\"updateWatermarkStrategy($event)\">\n <option value=\"Checksum\">Checksum (Content Hash + Prompt Hash)</option>\n <option value=\"UpdatedAt\">UpdatedAt (Compare modified timestamp)</option>\n <option value=\"None\">None (Always process all records)</option>\n </select>\n </div>\n\n <div class=\"field\">\n <label>Skip Unchanged Records</label>\n <select class=\"mj-input\" [value]=\"Record?.SkipUnchanged ? 'true' : 'false'\" (change)=\"updateSkipUnchanged($event)\">\n <option value=\"true\">Yes — Skip unchanged rows</option>\n <option value=\"false\">No — Recompute every time</option>\n </select>\n </div>\n\n <div class=\"field\">\n <label>Enable Result Cache</label>\n <select class=\"mj-input\" [value]=\"spec.Caching.Cacheable ? 'true' : 'false'\" (change)=\"updateCacheable($event)\">\n <option value=\"true\">Yes — Cache outputs by distinct key</option>\n <option value=\"false\">No — Compute per row</option>\n </select>\n </div>\n </div>\n\n @if (spec.Caching.Cacheable) {\n <div class=\"rpe-grid3 rpe-mt\">\n <div class=\"field\">\n <label>Cache Key Fields (comma separated)</label>\n <input class=\"mj-input\" [value]=\"cacheKeyFieldsCsv\" (input)=\"updateCacheKeyFields($event)\" placeholder=\"e.g. CurrentJobTitle\">\n </div>\n <div class=\"field\">\n <label>Cache TTL (Seconds)</label>\n <input class=\"mj-input\" type=\"number\" [value]=\"spec.Caching.TTLSeconds ?? 86400\" (input)=\"updateCacheTTL($event)\">\n </div>\n <div class=\"field\">\n <label>Cache Scope</label>\n <select class=\"mj-input\" [value]=\"spec.Caching.Scope || 'pipeline'\" (change)=\"updateCacheScope($event)\">\n <option value=\"pipeline\">Pipeline (Isolated to this process)</option>\n <option value=\"prompt\">Prompt (Shared across processes with same prompt)</option>\n </select>\n </div>\n </div>\n }\n </section>\n\n <!-- VALIDATION ISSUES -->\n @if (validationErrors.length > 0) {\n <div class=\"fpb-issues-card fpb-issues-card--error\">\n <h4><i class=\"fa-solid fa-triangle-exclamation\"></i> Specification Issues</h4>\n <ul>\n @for (issue of validationErrors; track $index) {\n <li><strong>{{ issue.Field ? issue.Field + ': ' : '' }}</strong>{{ issue.Message }} @if (issue.FixRecommendation) { <span class=\"muted\">(Fix: {{ issue.FixRecommendation }})</span> }</li>\n }\n </ul>\n </div>\n }\n </div>\n `,\n styles: [`\n .fpb { display: flex; flex-direction: column; gap: 20px; }\n .rpe-desc { font-size: 13px; color: var(--mj-text-secondary); margin: -6px 0 16px 0; }\n .rpe-sec { background: var(--mj-bg-surface-card); border: 1px solid var(--mj-border-subtle); border-radius: var(--mj-radius-md, 10px); padding: 18px 20px; }\n .rpe-sec-h { display: flex; align-items: center; gap: 11px; margin-bottom: 14px; }\n .rpe-sec-h h3 { margin: 0; font-size: 16px; font-weight: 700; color: var(--mj-text-primary); }\n .rpe-sec-h .num { width: 24px; height: 24px; border-radius: 50%; background: var(--mj-brand-primary); color: #fff; display: grid; place-items: center; font-size: 12px; font-weight: 800; }\n .fpb-split-h { justify-content: space-between; }\n .fpb-title-group { display: flex; align-items: center; gap: 11px; }\n .rpe-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }\n .rpe-grid3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; }\n .field { display: flex; flex-direction: column; gap: 6px; }\n .field label { font-size: 12.5px; font-weight: 600; color: var(--mj-text-secondary); }\n .rpe-mt { margin-top: 14px; }\n .mono { font-family: monospace; font-size: 12.5px; }\n .muted { color: var(--mj-text-muted); font-weight: 400; }\n .rpe-static-text { font-size: 13px; color: var(--mj-text-muted); padding: 7px 0; }\n .fpb-code-preview { background: var(--mj-bg-surface-sunken, #0f172a); color: var(--mj-text-code, var(--mj-text-primary, #e2e8f0)); border: 1px solid var(--mj-border-subtle, #334155); padding: 12px; border-radius: 6px; font-size: 12px; font-family: var(--mj-font-mono, monospace); white-space: pre-wrap; word-break: break-word; max-height: 160px; overflow-y: auto; margin: 0; }\n .fpb-empty-outputs { display: flex; align-items: center; gap: 10px; padding: 20px; border: 1px dashed var(--mj-border-subtle); border-radius: 8px; color: var(--mj-text-muted); font-size: 13px; }\n .fpb-outputs-list { display: flex; flex-direction: column; gap: 16px; }\n .fpb-output-card { border: 1px solid var(--mj-border-subtle); border-radius: 8px; padding: 14px 16px; background: var(--mj-bg-surface); }\n .fpb-output-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; border-bottom: 1px solid var(--mj-border-subtle); padding-bottom: 8px; }\n .fpb-output-head h4 { margin: 0; font-size: 14px; font-weight: 600; }\n .fpb-issues-card { border-radius: 8px; padding: 12px 16px; font-size: 13px; }\n .fpb-issues-card--error { background: rgba(239, 68, 68, 0.08); border: 1px solid var(--mj-status-error); color: var(--mj-status-error-text); }\n .fpb-issues-card h4 { margin: 0 0 8px 0; font-size: 14px; display: flex; align-items: center; gap: 8px; }\n .fpb-issues-card ul { margin: 0; padding-left: 20px; }\n `],\n})\nexport class FeaturePipelineBuilderComponent extends BaseAngularComponent implements OnInit, OnChanges {\n private cdr = inject(ChangeDetectorRef);\n\n @Input() Record: MJRecordProcessEntity | null = null;\n @Input() EntityID: string | null = null;\n\n @Output() SpecChange = new EventEmitter<DataFeatureSpec>();\n @Output() ValidChange = new EventEmitter<boolean>();\n\n public spec: DataFeatureSpec = {\n Name: '',\n Description: '',\n PromptID: '',\n Context: {},\n Outputs: [],\n Caching: { Cacheable: false },\n };\n\n public availablePrompts: PromptOption[] = [];\n public availableDocs: EntityDocOption[] = [];\n public availableEntities: EntityInfo[] = [];\n public entityFields: EntityFieldInfo[] = [];\n public selectedPrompt: PromptOption | null = null;\n\n public contextMode: 'fields' | 'document' | 'query' = 'fields';\n public fieldsCsv = '';\n public cacheKeyFieldsCsv = '';\n public validationErrors: SpecValidationIssue[] = [];\n public renderedConstraintPreview = '';\n\n async ngOnInit(): Promise<void> {\n this.availableEntities = [...this.ProviderToUse.Entities].sort((a, b) =>\n (a.DisplayName || a.Name).localeCompare(b.DisplayName || b.Name)\n );\n await this.loadPrompts();\n await this.loadEntityDocs();\n this.syncFromRecord();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['Record'] || changes['EntityID']) {\n this.syncFromRecord();\n }\n }\n\n public syncFromRecord(): void {\n if (this.Record) {\n this.spec.Name = this.Record.Name || '';\n this.spec.Description = this.Record.Description || '';\n this.spec.PromptID = this.Record.PromptID || '';\n\n if (this.Record.Configuration) {\n const parsed = SafeJSONParse<DataFeatureSpec>(this.Record.Configuration);\n if (parsed && typeof parsed === 'object') {\n this.spec.Outputs = Array.isArray(parsed.Outputs) ? parsed.Outputs : [];\n this.spec.Context = parsed.Context ?? {};\n this.spec.Caching = parsed.Caching ?? { Cacheable: false };\n this.spec.ProcessorExtensionKey = parsed.ProcessorExtensionKey;\n }\n }\n }\n\n if (!this.spec.Outputs) {\n this.spec.Outputs = [];\n }\n if (!this.spec.Context) {\n this.spec.Context = {};\n }\n\n if (this.spec.Context.EntityDocumentID) {\n this.contextMode = 'document';\n } else if (this.spec.Context.QueryID) {\n this.contextMode = 'query';\n } else {\n this.contextMode = 'fields';\n }\n\n this.fieldsCsv = (this.spec.Context.Fields ?? []).join(', ');\n this.cacheKeyFieldsCsv = (this.spec.Caching.KeyFields ?? []).join(', ');\n\n const targetEntityID = this.Record?.EntityID || this.EntityID;\n if (targetEntityID) {\n const entity = this.ProviderToUse.EntityByID(targetEntityID);\n this.entityFields = entity?.Fields ? [...entity.Fields].sort((a, b) => a.Name.localeCompare(b.Name)) : [];\n } else {\n this.entityFields = [];\n }\n\n if (this.Record?.PromptID) {\n this.selectedPrompt = this.availablePrompts.find((p) => UUIDsEqual(p.ID, this.Record?.PromptID)) ?? null;\n }\n\n this.recomputeValidation();\n this.cdr.detectChanges();\n }\n\n private async loadPrompts(): Promise<void> {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const res = await rv.RunView<PromptOption>({\n EntityName: 'MJ: AI Prompts',\n Fields: ['ID', 'Name', 'Description'],\n ResultType: 'simple',\n });\n if (res.Success && Array.isArray(res.Results)) {\n this.availablePrompts = res.Results;\n } else {\n this.availablePrompts = [];\n LogError(`Failed to load AI Prompts: ${res.ErrorMessage || 'unknown error'}`);\n }\n } catch (error) {\n this.availablePrompts = [];\n LogError('Error loading AI Prompts', undefined, error);\n }\n }\n\n private async loadEntityDocs(): Promise<void> {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const res = await rv.RunView<EntityDocOption>({\n EntityName: 'MJ: Entity Documents',\n Fields: ['ID', 'Name', 'EntityID'],\n ResultType: 'simple',\n });\n if (res.Success && Array.isArray(res.Results)) {\n this.availableDocs = res.Results;\n } else {\n this.availableDocs = [];\n LogError(`Failed to load Entity Documents: ${res.ErrorMessage || 'unknown error'}`);\n }\n } catch (error) {\n this.availableDocs = [];\n LogError('Error loading Entity Documents', undefined, error);\n }\n }\n\n public onContextModeChange(event: Event): void {\n this.contextMode = (event.target as HTMLSelectElement).value as 'fields' | 'document' | 'query';\n if (!this.spec.Context) this.spec.Context = {};\n if (this.contextMode === 'fields') {\n this.spec.Context.EntityDocumentID = undefined;\n this.spec.Context.QueryID = undefined;\n } else if (this.contextMode === 'document') {\n this.spec.Context.QueryID = undefined;\n } else if (this.contextMode === 'query') {\n this.spec.Context.EntityDocumentID = undefined;\n }\n this.emitChanges();\n }\n\n public onEntityDocChange(event: Event): void {\n if (!this.spec.Context) this.spec.Context = {};\n this.spec.Context.EntityDocumentID = (event.target as HTMLSelectElement).value;\n this.emitChanges();\n }\n\n public onQueryIDChange(event: Event): void {\n if (!this.spec.Context) this.spec.Context = {};\n this.spec.Context.QueryID = (event.target as HTMLInputElement).value;\n this.emitChanges();\n }\n\n public onFieldsCsvChange(event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.fieldsCsv = val;\n if (!this.spec.Context) this.spec.Context = {};\n this.spec.Context.Fields = val\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n this.emitChanges();\n }\n\n public onPromptChange(event: Event): void {\n const promptID = (event.target as HTMLSelectElement).value;\n if (this.Record) {\n this.Record.PromptID = promptID;\n }\n this.spec.PromptID = promptID;\n this.selectedPrompt = this.availablePrompts.find((p) => UUIDsEqual(p.ID, promptID)) ?? null;\n this.emitChanges();\n }\n\n public addOutput(): void {\n const newOutput: DataFeatureOutput = {\n Name: `Output_${this.spec.Outputs.length + 1}`,\n Ref: '$',\n Target: {\n Mode: 'field',\n EntityFieldName: this.entityFields.length > 0 ? this.entityFields[0].Name : '',\n },\n };\n this.spec.Outputs.push(newOutput);\n this.emitChanges();\n }\n\n public removeOutput(index: number): void {\n this.spec.Outputs.splice(index, 1);\n this.emitChanges();\n }\n\n public updateOutputProp(index: number, prop: 'Name' | 'Ref', event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.spec.Outputs[index][prop] = val;\n this.emitChanges();\n }\n\n public updateTargetMode(index: number, event: Event): void {\n const mode = (event.target as HTMLSelectElement).value as OutputTarget['Mode'];\n const current = this.spec.Outputs[index];\n if (mode === 'field') {\n current.Target = {\n Mode: 'field',\n EntityFieldName: this.entityFields.length > 0 ? this.entityFields[0].Name : '',\n };\n } else if (mode === 'child') {\n current.Target = {\n Mode: 'child',\n EntityName: this.availableEntities.length > 0 ? this.availableEntities[0].Name : '',\n ParentField: 'ParentID',\n Map: {},\n };\n } else if (mode === 'tags') {\n current.Target = {\n Mode: 'tags',\n RootTagID: '',\n };\n }\n this.emitChanges();\n }\n\n public updateFieldTarget(index: number, event: Event): void {\n const fieldName = (event.target as HTMLSelectElement).value;\n const target = this.spec.Outputs[index].Target;\n if (target.Mode === 'field') {\n target.EntityFieldName = fieldName;\n }\n this.emitChanges();\n }\n\n public updateChildTargetEntity(index: number, event: Event): void {\n const entityName = (event.target as HTMLSelectElement).value;\n const target = this.spec.Outputs[index].Target;\n if (target.Mode === 'child') {\n target.EntityName = entityName;\n }\n this.emitChanges();\n }\n\n public updateConstraintType(index: number, event: Event): void {\n const type = (event.target as HTMLSelectElement).value;\n const output = this.spec.Outputs[index];\n if (type === 'none') {\n output.Constraint = undefined;\n } else if (type === 'enum') {\n output.Constraint = { Type: 'enum', Values: [], OnViolation: 'fail' };\n } else if (type === 'numeric') {\n output.Constraint = { Type: 'numeric', Min: 0, Max: 100, OnViolation: 'fail' };\n } else if (type === 'boolean') {\n output.Constraint = { Type: 'boolean', OnViolation: 'fail' };\n } else if (type === 'freetext') {\n output.Constraint = { Type: 'freetext', MaxLength: 500, OnViolation: 'fail' };\n }\n this.emitChanges();\n }\n\n public updateViolationPolicy(index: number, event: Event): void {\n const policy = (event.target as HTMLSelectElement).value as ViolationPolicy;\n if (this.spec.Outputs[index].Constraint) {\n this.spec.Outputs[index].Constraint.OnViolation = policy;\n }\n this.emitChanges();\n }\n\n public getEnumValuesCsv(constraint?: ValueConstraint): string {\n if (!constraint || constraint.Type !== 'enum' || !Array.isArray(constraint.Values)) {\n return '';\n }\n return constraint.Values.join(', ');\n }\n\n public getNumericMin(constraint?: ValueConstraint): number | string {\n return constraint && constraint.Type === 'numeric' && constraint.Min !== undefined ? constraint.Min : '';\n }\n\n public getNumericMax(constraint?: ValueConstraint): number | string {\n return constraint && constraint.Type === 'numeric' && constraint.Max !== undefined ? constraint.Max : '';\n }\n\n public updateEnumValues(index: number, event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n const output = this.spec.Outputs[index];\n if (!output.Constraint || output.Constraint.Type !== 'enum') {\n output.Constraint = { Type: 'enum', Values: [], OnViolation: 'fail' };\n }\n output.Constraint.Values = val\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n this.emitChanges();\n }\n\n public updateNumericMin(index: number, event: Event): void {\n const val = parseFloat((event.target as HTMLInputElement).value);\n const output = this.spec.Outputs[index];\n if (output.Constraint && output.Constraint.Type === 'numeric') {\n output.Constraint.Min = isNaN(val) ? undefined : val;\n }\n this.emitChanges();\n }\n\n public updateNumericMax(index: number, event: Event): void {\n const val = parseFloat((event.target as HTMLInputElement).value);\n const output = this.spec.Outputs[index];\n if (output.Constraint && output.Constraint.Type === 'numeric') {\n output.Constraint.Max = isNaN(val) ? undefined : val;\n }\n this.emitChanges();\n }\n\n public updateWatermarkStrategy(event: Event): void {\n if (this.Record) {\n this.Record.WatermarkStrategy = (event.target as HTMLSelectElement).value as MJRecordProcessEntity['WatermarkStrategy'];\n }\n }\n\n public updateSkipUnchanged(event: Event): void {\n if (this.Record) {\n this.Record.SkipUnchanged = (event.target as HTMLSelectElement).value === 'true';\n }\n }\n\n public updateCacheable(event: Event): void {\n if (!this.spec.Caching) this.spec.Caching = { Cacheable: false };\n this.spec.Caching.Cacheable = (event.target as HTMLSelectElement).value === 'true';\n this.emitChanges();\n }\n\n public updateCacheKeyFields(event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.cacheKeyFieldsCsv = val;\n if (!this.spec.Caching) this.spec.Caching = { Cacheable: true };\n this.spec.Caching.KeyFields = val\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n this.emitChanges();\n }\n\n public updateCacheTTL(event: Event): void {\n const val = parseInt((event.target as HTMLInputElement).value, 10);\n if (!this.spec.Caching) this.spec.Caching = { Cacheable: true };\n this.spec.Caching.TTLSeconds = isNaN(val) ? 86400 : val;\n this.emitChanges();\n }\n\n public updateCacheScope(event: Event): void {\n const val = (event.target as HTMLSelectElement).value as 'pipeline' | 'prompt';\n if (!this.spec.Caching) this.spec.Caching = { Cacheable: true };\n this.spec.Caching.Scope = val;\n this.emitChanges();\n }\n\n private emitChanges(): void {\n if (this.Record) {\n this.spec.Name = this.Record.Name || '';\n this.spec.Description = this.Record.Description || '';\n this.spec.PromptID = this.Record.PromptID || '';\n this.Record.Configuration = JSON.stringify(this.spec);\n this.syncOutputMappingToRecord();\n }\n this.recomputeValidation();\n this.SpecChange.emit(this.spec);\n this.cdr.detectChanges();\n }\n\n /**\n * Automatically projects spec.Outputs into the record's OutputMapping JSON\n * so that WriteBackProcessor works out of the box without duplicate manual config.\n */\n private syncOutputMappingToRecord(): void {\n if (!this.Record) return;\n const fields: Record<string, string> = Object.create(null);\n for (const out of this.spec.Outputs) {\n if (out.Target.Mode === 'field' && out.Target.EntityFieldName) {\n fields[out.Target.EntityFieldName] = out.Ref;\n }\n }\n this.Record.OutputMapping = JSON.stringify({ fields });\n }\n\n private recomputeValidation(): void {\n this.renderedConstraintPreview = renderConstraintBlock(this.spec.Outputs);\n const entity = this.Record?.EntityID ? this.ProviderToUse.EntityByID(this.Record.EntityID) : null;\n if (entity) {\n const stub: EntityMetadataStub = {\n Name: entity.Name,\n Fields: (entity.Fields ?? []).map((f) => ({\n Name: f.Name,\n TSType: f.TSType,\n IsVirtual: f.IsVirtual,\n AllowsNull: f.AllowsNull,\n RelatedEntity: f.RelatedEntity,\n RelatedEntityID: f.RelatedEntityID,\n EntityFieldValues: f.EntityFieldValues ? f.EntityFieldValues.map((v) => ({ Value: v.Value, Code: v.Code })) : undefined,\n })),\n };\n this.validationErrors = validateSpec(this.spec, stub);\n } else {\n this.validationErrors = this.spec.Outputs.length === 0\n ? [{\n Path: 'Outputs',\n Severity: 'error',\n Message: 'At least one output attribute must be configured',\n FixRecommendation: 'Click Add Output to configure an output attribute',\n }]\n : [];\n }\n const hasErrors = this.validationErrors.some((i) => i.Severity === 'error');\n this.ValidChange.emit(!hasErrors);\n }\n}\n"]}
1
+ {"version":3,"file":"feature-pipeline-builder.component.js","sourceRoot":"","sources":["../../../src/lib/feature-pipeline-builder/feature-pipeline-builder.component.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACH,uBAAuB,EACvB,iBAAiB,EACjB,SAAS,EACT,YAAY,EACZ,KAAK,EAGL,MAAM,EAEN,MAAM,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAA+B,QAAQ,EAAE,OAAO,EAAY,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAIH,0BAA0B,GAE7B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAMH,qBAAqB,EACrB,YAAY,EACZ,8BAA8B,EAC9B,kCAAkC,EAClC,8BAA8B,EAC9B,+BAA+B,GAMlC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;;;;;;;IA0C/D,iCAAoE;IAAA,YAA6B;IAAA,iBAAS;;;;IAAjF,AAAjB,iCAAgB,qDAA2C;IAAC,cAA6B;IAA7B,mDAA6B;;;;IAYrG,AADJ,AADJ,8BAA8B,aACP,YACR;IAAA,iCAAiB;IAAA,iBAAQ;IAChC,kCAA2I;IAA1C,4MAAU,qCAA8B,KAAC;IACtI,kCAAqB;IAAA,6EAAwD;IAAA,iBAAS;IACtF,kCAAsB;IAAA,kBAAE;IAGpC,AADI,AADI,AAD4B,iBAAS,EAC5B,EACP,EACJ;;;IALgD,eAAkD;IAAlD,uEAAkD;;;IAiCxF,iCAA4D;IAAA,YAAc;IAAA,iBAAS;;;;IAA1D,AAAjB,iCAAgB,6CAAmC;IAAC,cAAc;IAAd,iCAAc;;;;IAJlF,AADJ,8BAAmB,YACR;IAAA,+BAAe;IAAA,iBAAQ;IAC9B,iCAA8D;IAArC,4MAAU,gCAAyB,KAAC;IACzD,kCAA6D;IAAA,oDAA0B;IAAA,iBAAS;IAChG,oHAEC;IAET,AADI,iBAAS,EACP;;;IAL4B,eAAkC;IAAlC,uDAAkC;IAC5D,eAEC;IAFD,mCAEC;;;;IAOL,AADJ,8BAAmB,YACR;IAAA,wBAAQ;IAAA,iBAAQ;IACvB,iCAAyI;IAAvE,yMAAS,8BAAuB,KAAC;IACvG,AADI,iBAAyI,EACvI;;;IAD2B,eAAoC;IAApC,yDAAoC;;;IAuB7D,iCAAqD;IAAA,YAAY;IAAA,iBAAS;;;;IAAnD,AAAf,+BAAc,wCAA8B;IAAC,cAAY;IAAZ,+BAAY;;;IAMrE,AADJ,8BAAmB,YACR;IAAA,kCAAkB;IAAA,iBAAQ;IACjC,8BAA6B;IAAA,YAA6D;IAC9F,AAD8F,iBAAM,EAC9F;;;IAD2B,eAA6D;IAA7D,oFAA6D;;;IAO9F,AADJ,+BAA0B,YACf;IAAA,0CAA0B;IAAA,gCAAoB;IAAA,oEAA+C;IAAO,AAAP,iBAAO,EAAQ;IACnH,+BAA8B;IAAA,YAA+B;IACjE,AADiE,iBAAM,EACjE;;;IAD4B,eAA+B;IAA/B,sDAA+B;;;IAmBjE,+BAA+B;IAC3B,wBAAyC;IACzC,4BAAM;IAAA,0CAA0B;IAAA,8BAAQ;IAAA,0BAAU;IAAA,iBAAS;IAAC,4DAA2C;IAC3G,AAD2G,iBAAO,EAC5G;;;IAyBsB,kCAA4C;IAAA,gDAAsB;IAAA,iBAAS;;IAAjD,+BAAiB;;;IAG3C,iCAAsE;IAAA,YAAa;IAAA,iBAAS;;;;IAAlE,AAAlB,mCAAiB,oDAA4C;IAAC,cAAa;IAAb,iCAAa;;;IAc/E,iCAA+E;IAAA,YAA8C;IAAA,iBAAS;;;;IAA7G,AAAjB,kCAAgB,8DAAsD;IAAC,cAA8C;IAA9C,mFAA8C;;;;IAJrI,AADJ,8BAAmB,YACR;IAAA,4BAAY;IAAA,iBAAQ;IAC3B,iCAA2E;IAAlD,qRAAU,gDAAsC,KAAC;IACtE,kCAA2F;IAAA,2CAAiB;IAAA,iBAAS;IACrH,yIAEC;IAET,AADI,iBAAS,EACP;;;;IAL4B,eAAgE;IAAhE,yFAAgE;IAC1F,eAEC;IAFD,kCAEC;;;IAWG,iCAA0E;IAAA,YAA6B;IAAA,iBAAS;;;;IAAvF,AAAjB,kCAAgB,yDAAiD;IAAC,cAA6B;IAA7B,qDAA6B;;;;IAJ/G,AADJ,8BAAmB,YACR;IAAA,4BAAY;IAAA,iBAAQ;IAC3B,iCAAiF;IAAxD,qRAAU,sDAA4C,KAAC;IAC5E,kCAAiF;IAAA,2CAAiB;IAAA,iBAAS;IAC3G,yIAEC;IAET,AADI,iBAAS,EACP;;;;IAL4B,eAAsD;IAAtD,+EAAsD;IAChF,eAEC;IAFD,uCAEC;;;IAUD,kCAAgD;IAAA,+CAAqB;IAAA,iBAAS;;IAAhD,+BAAiB;;;IAG/C,iCAA+E;IAAA,YAAa;IAAA,iBAAS;;;;;IAA3E,AAAlB,mCAAiB,oEAAqD;IAAC,cAAa;IAAb,iCAAa;;;;IAOhG,AADJ,8BAAmB,YACR;IAAA,gCAAgB;IAAA,iBAAQ;IAC/B,kCAAiI;IAAtD,qRAAU,oDAA0C,KAAC;IAC5H,kCAAqB;IAAA,wBAAQ;IAAA,iBAAS;IACtC,kCAAqB;IAAA,kCAAkB;IAAA,iBAAS;IAChD,kCAAgC;IAAA,iCAAiB;IAEzD,AADI,AADqD,iBAAS,EACrD,EACP;;;IALuB,eAAiD;IAAjD,mEAAiD;;;;IAqB9D,AADJ,+BAA+B,eACM;IAAA,YAAS;IAAA,iBAAO;IACjD,iCAI6C;IADzC,iUAAS,kEAAoD,KAAC;IAEtE,AALI,iBAI6C,EAC3C;;;;;IAN+B,eAAS;IAAT,6BAAS;IAGtC,cAA8C;IAE9C,AAFA,2EAA8C,6CAEN;;;IATxD,AADJ,+BAA0B,YACf;IAAA,mCAAmB;IAAA,gCAAoB;IAAA,oFAA+D;IAAO,AAAP,iBAAO,EAAQ;IAC5H,+BAAmC;IAC/B,uKASC;IAET,AADI,iBAAM,EACJ;;;;IAXE,eASC;IATD,cAAA,gCAAqB,CASpB;;;;IAhBT,AADJ,+BAA0B,YACf;IAAA,gDAAgC;IAAA,iBAAQ;IAC/C,iCAAqK;IAA/F,kRAAS,+CAAqC,KAAC;IACzH,AADI,iBAAqK,EACnK;IACN,sIAA8D;;;;IAFlC,eAA6C;IAA7C,sEAA6C;IAEzE,cAgBC;IAhBD,mGAgBC;;;;IAoBmB,AADJ,+BAA2B,eACK;IAAA,YAAgB;IAAA,iBAAO;IACnD,iCAIuD;IADnD,uUAAS,kEAA+C,KAAC;IAH7D,iBAIuD;IACvD,kCAOoB;IADhB,kUAAS,yDAAsC,IAAI,CAAC,KAAC;IAErD,wBAAoC;IACxC,iBAAS;IACT,kCAOsB;IADlB,kUAAS,yDAAsC,MAAM,CAAC,KAAC;IAEvD,wBAAsC;IAC1C,iBAAS;IACT,kCAOyB;IADrB,kUAAS,0DAAuC,KAAC;IAEjD,wBAAiC;IAEzC,AADI,iBAAS,EACP;;;;;;;IApC0B,eAAgB;IAAhB,yCAAgB;IAGxC,cAAa;IAAb,+BAAa;IAQb,cAAkB;IAAlB,gDAAkB;IAUlB,eAAiB;IAAjB,kEAAiB;IAUjB,eAAiD;IAAjD,0EAAiD;;;;IA7C7D,AADJ,AADJ,+BAA0B,cACS,YACpB;IAAA,+BAAe;IAAA,gCAAoB;IAAA,4DAA4C;IAAO,AAAP,iBAAO,EAAQ;IACrG,kCAM2C;IAAvC,4RAAS,sCAA4B,KAAC;IACtC,wBAAgC;IAAC,2BACrC;IACJ,AADI,iBAAS,EACP;IACN,+BAA6B;IACzB,uKAuCC;IAET,AADI,iBAAM,EACJ;;;;IA/CM,eAAkD;IAAlD,2EAAkD;IAMtD,eAuCC;IAvCD,cAAA,mCAAwB,CAuCvB;;;;IAMD,AADJ,AADJ,8BAA8B,aACP,YACR;IAAA,yBAAS;IAAA,iBAAQ;IACxB,iCAAiI;IAAhD,iSAAS,+CAAqC,KAAC;IACpI,AADI,iBAAiI,EAC/H;IAEF,AADJ,8BAAmB,YACR;IAAA,yBAAS;IAAA,iBAAQ;IACxB,iCAAiI;IAAhD,iSAAS,+CAAqC,KAAC;IAExI,AADI,AADI,iBAAiI,EAC/H,EACJ;;;;IANwC,eAA0C;IAA1C,mEAA0C;IAI1C,eAA0C;IAA1C,mEAA0C;;;IAR1F,AAzDF,uIAA0B,+GAyDjB;;;IAzDT,mDAoEC;;;;IAIG,AADJ,+BAA0B,YACf;IAAA,gDAAgC;IAAA,gCAAoB;IAAA,gEAA2C;IAAO,AAAP,iBAAO,EAAQ;IACrH,iCAQ0D;IAAtD,kRAAS,qDAA2C,KAAC;IAC7D,AATI,iBAQ0D,EACxD;;;;IAFE,eAA2C;IAA3C,oEAA2C;;;;IAxLnD,AADJ,AADJ,+BAA6B,cACI,SACrB;IAAA,YAA+D;IAAA,iBAAK;IACxE,kCAA8E;IAApC,yOAAS,mCAAyB,KAAC;IACzE,wBAAiC;IAAC,wBACtC;IACJ,AADI,iBAAS,EACP;IAIE,AADJ,AADJ,+BAAuB,aACA,YACR;IAAA,4BAAW;IAAA,iBAAQ;IAC1B,kCAAwI;IAA1F,+OAAS,wCAA8B,MAAM,SAAS,KAAC;IACzG,AADI,iBAAwI,EACtI;IAEF,AADJ,+BAAmB,aACR;IAAA,gCAAe;IAAA,iBAAQ;IAC9B,kCAA6I;IAA3F,+OAAS,wCAA8B,KAAK,SAAS,KAAC;IAC5G,AADI,iBAA6I,EAC3I;IAEF,AADJ,+BAAmB,aACR;IAAA,4BAAW;IAAA,iBAAQ;IAC1B,kCAA0E;IAAjD,kPAAU,+CAAqC,KAAC;IACrE,4HAAoC;IAGpC,4HAEC;IAGb,AADI,AADI,iBAAS,EACP,EACJ;IAGN,gCAA8B;IAC1B,wHAAsC;IAYtC,wHAAsC;IAclC,AADJ,+BAAmB,aACR;IAAA,gCAAe;IAAA,iBAAQ;IAC9B,kCAA8E;IAArD,kPAAU,mDAAyC,KAAC;IACzE,4HAAwC;IAGxC,4HAEC;IAET,AADI,iBAAS,EACP;IAEN,yHAAyB;IAU7B,iBAAM;IAGN,8GAA0C;IAuB1C,8GAA6C;IAuE7C,yHAAmE;IAcvE,iBAAM;;;;;IA5LM,eAA+D;IAA/D,2FAA+D;IASvC,eAAqB;IAArB,uCAAqB;IAIhB,eAAoB;IAApB,sCAAoB;IAK7C,eAEC;IAFD,mEAEC;IACD,cAEC;IAFD,0CAEC;IAOT,eAUC;IAVD,8DAUC;IAED,cAUC;IAVD,8DAUC;IAMO,eAEC;IAFD,uEAEC;IACD,cAEC;IAFD,8CAEC;IAIT,eASC;IATD,iDASC;IAIL,cAsBC;IAtBD,0GAsBC;IACD,cAsEC;IAtED,6GAsEC;IACD,cAaC;IAbD,0IAaC;;;IA/Lb,+BAA8B;IAC1B,mIAgMC;IACL,iBAAM;;;IAjMF,cAgMC;IAhMD,kCAgMC;;;IA+Be,kCAAiH;IAC7G,YACJ;IAAA,iBAAS;;;;IAF2D,AAAxC,AAApB,qCAAmB,mDAAwC,wDAA6C;IAC5G,cACJ;IADI,iJACJ;;;;IANR,AADJ,AADJ,8BAA8B,aACP,YACR;IAAA,mCAAmB;IAAA,iBAAQ;IAClC,iCAAqE;IAA5C,6NAAU,uCAAgC,KAAC;IAChE,kCAAoE;IAAA,YAAkC;IAAA,iBAAS;IAC/G,oIAIC;IAET,AADI,iBAAS,EACP;IAGF,AADJ,8BAAmB,aACR;IAAA,8CAA6B;IAAA,iBAAQ;IAC5C,kCAQ8C;IAA1C,2NAAS,sCAA+B,KAAC;IAErD,AADI,AATI,iBAQ8C,EAC5C,EACJ;;;IArBgC,eAAyC;IAAzC,8DAAyC;IAAC,cAAkC;IAAlC,yDAAkC;IACtG,cAIC;IAJD,gDAIC;IAaD,eAAgD;IAAhD,8GAAgD;;;;IAvChE,AADJ,mCAA4C,aACjB;IACnB,wBAAsD;IACtD,0BAAI;IAAA,qCAAqB;IAC7B,AAD6B,iBAAK,EAC5B;IACN,6BAAoB;IAAA,uKAAuJ;IAAA,iBAAI;IAIvK,AADJ,AADJ,+BAAuC,gBACD,gBAIY;IAAtC,4MAAU,iCAA0B,KAAC;IAHzC,iBAG0C;IAC1C,6BAAM;IAAA,+DAA8C;IAE5D,AADI,AADwD,iBAAO,EACvD,EACN;IAEN,mHAA2B;IA4B/B,iBAAU;;;IAlCM,eAA+B;IAA/B,oDAA+B;IAM3C,eA2BC;IA3BD,sDA2BC;;;;IAwCO,AADJ,AADJ,+BAA8B,aACP,YACR;IAAA,kDAAkC;IAAA,iBAAQ;IACjD,iCAA8H;IAA1E,2MAAS,mCAA4B,KAAC;IAC9F,AADI,iBAA8H,EAC5H;IAEF,AADJ,8BAAmB,YACR;IAAA,mCAAmB;IAAA,iBAAQ;IAClC,iCAAkH;IAAjC,2MAAS,6BAAsB,KAAC;IACrH,AADI,iBAAkH,EAChH;IAEF,AADJ,8BAAmB,aACR;IAAA,4BAAW;IAAA,iBAAQ;IAC1B,mCAAwG;IAApC,+MAAU,+BAAwB,KAAC;IACnG,mCAAyB;IAAA,oDAAmC;IAAA,iBAAS;IACrE,mCAAuB;IAAA,kEAAiD;IAGpF,AADI,AADI,AAD4E,iBAAS,EAC5E,EACP,EACJ;;;IAb0B,eAA2B;IAA3B,gDAA2B;IAIb,eAA0C;IAA1C,+DAA0C;IAIvD,eAA0C;IAA1C,+DAA0C;;;IAeiD,gCAAoB;IAAA,YAAoC;IAAA,iBAAO;;;IAA3C,cAAoC;IAApC,iEAAoC;;;IAAxK,AAAJ,0BAAI,aAAQ;IAAA,YAA2C;IAAA,iBAAS;IAAA,YAAoB;IAAA,yHAA+B;IAAkE,iBAAK;;;IAA9K,eAA2C;IAA3C,mEAA2C;IAAS,cAAoB;IAApB,iDAAoB;IAAA,cAAiG;IAAjG,sDAAiG;;;IAH7L,AADJ,+BAAoD,SAC5C;IAAA,wBAAgD;IAAC,qCAAoB;IAAA,iBAAK;IAC9E,0BAAI;IACA,mIAEC;IAET,AADI,iBAAK,EACH;;;IAJE,eAEC;IAFD,sCAEC;;;IAiBD,0BAAI;IAAA,YAAW;IAAA,iBAAK;;;IAAhB,cAAW;IAAX,+BAAW;;AAndvC;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACxB,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AA2fD,MAAM,OAAO,+BAAgC,SAAQ,oBAAoB;IAC7D,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE/B,MAAM,GAAiC,IAAI,CAAC;IAC5C,QAAQ,GAAkB,IAAI,CAAC;IAE9B,UAAU,GAAG,IAAI,YAAY,EAAmB,CAAC;IACjD,WAAW,GAAG,IAAI,YAAY,EAAW,CAAC;IAE7C,IAAI,GAAoB;QAC3B,IAAI,EAAE,EAAE;QACR,WAAW,EAAE,EAAE;QACf,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;KAChC,CAAC;IAEK,sBAAsB,GAAyB;QAClD,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;KACrC,CAAC;IACK,qBAAqB,GAAG,KAAK,CAAC;IAC9B,mBAAmB,GAAkB,IAAI,CAAC;IAC1C,gBAAgB,GAAa,EAAE,CAAC;IAEvC,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC;IACnD,CAAC;IAED,IAAW,mBAAmB;QAC1B,OAAO,8BAA8B,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACxE,CAAC;IAED,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC;IACrE,CAAC;IAEM,0BAA0B,GAAgC,EAAE,CAAC;IACpE,oGAAoG;IAC7F,uBAAuB,GAAG,KAAK,CAAC;IACvC,+EAA+E;IACxE,0BAA0B,GAAkB,IAAI,CAAC;IACxD,uFAAuF;IAC/E,wBAAwB,GAAG,CAAC,CAAC;IAErC,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC;IAC/E,CAAC;IAED,uFAAuF;IACvF,IAAW,4BAA4B;QACnC,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAClC,OAAO,mCAAmC,CAAC;QAC/C,CAAC;QACD,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,6CAA6C,CAAC;IAClI,CAAC;IAED,kHAAkH;IAC3G,uBAAuB,CAAC,MAAiC;QAC5D,OAAO,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACnE,CAAC;IAED,iJAAiJ;IACjJ,IAAW,2BAA2B;QAClC,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED;;;OAGG;IACH,IAAW,oBAAoB;QAC3B,OAAO,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC;IAC7F,CAAC;IAED,IAAW,+BAA+B;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;QAClF,OAAO,GAAG,EAAE,WAAW,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,IAAW,oBAAoB;QAC3B,MAAM,GAAG,GAA0D;YAC/D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE;YAClD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE;YAC/C,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAE;SACnD,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;QACvD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,IAAW,wBAAwB;QAC/B,MAAM,OAAO,GAA4C,EAAE,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAClH,CAAC;QACD,IAAI,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,6GAA6G;IAC7G,8GAA8G;IAC9G,8GAA8G;IAC9G,+GAA+G;IAC/G,gDAAgD;IAEhD,wHAAwH;IACjH,qBAAqB,CAAC,IAAY;QACrC,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,CAAC;IAC7E,CAAC;IAED,uGAAuG;IAChG,mBAAmB,CAAC,MAAyB;QAChD,OAAO,MAAM,CAAC,UAAU,EAAE,IAAI,IAAI,MAAM,CAAC;IAC7C,CAAC;IAED,yJAAyJ;IAClJ,uBAAuB,CAAC,MAAyB;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IACxE,CAAC;IAED,oEAAoE;IAC7D,mBAAmB,CAAC,MAAyB;QAChD,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC;IAED,kEAAkE;IAC3D,mBAAmB,CAAC,IAAwB;QAC/C,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,oEAAoE;IAC7D,cAAc,CAAC,IAAwB;QAC1C,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,uDAAuD;IAChD,aAAa,CAAC,MAAoB;QACrC,OAAO,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1F,CAAC;IAED,mEAAmE;IACnE,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,yDAAyD;IAClD,gBAAgB,CAAC,GAAoB;QACxC,OAAO,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClE,CAAC;IAED,0EAA0E;IAC1E,IAAW,oBAAoB;QAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAEM,gBAAgB,GAAmB,EAAE,CAAC;IAE7C,gDAAgD;IAChD,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IACD,gDAAgD;IAChD,IAAW,gBAAgB,CAAC,KAAqB;QAC7C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAClC,CAAC;IACM,aAAa,GAAsB,EAAE,CAAC;IAE7C,6CAA6C;IAC7C,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IACD,6CAA6C;IAC7C,IAAW,aAAa,CAAC,KAAwB;QAC7C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC/B,CAAC;IACM,iBAAiB,GAAiB,EAAE,CAAC;IAE5C,iDAAiD;IACjD,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IACD,iDAAiD;IACjD,IAAW,iBAAiB,CAAC,KAAmB;QAC5C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACnC,CAAC;IACM,YAAY,GAAsB,EAAE,CAAC;IAE5C,4CAA4C;IAC5C,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IACD,4CAA4C;IAC5C,IAAW,YAAY,CAAC,KAAwB;QAC5C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC9B,CAAC;IACM,cAAc,GAAwB,IAAI,CAAC;IAElD,8CAA8C;IAC9C,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IACD,8CAA8C;IAC9C,IAAW,cAAc,CAAC,KAA0B;QAChD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAChC,CAAC;IAEM,WAAW,GAAoC,QAAQ,CAAC;IAE/D,2CAA2C;IAC3C,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IACD,2CAA2C;IAC3C,IAAW,WAAW,CAAC,KAAsC;QACzD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;IACM,SAAS,GAAG,EAAE,CAAC;IAEtB,yCAAyC;IACzC,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IACD,yCAAyC;IACzC,IAAW,SAAS,CAAC,KAAK;QACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IACM,iBAAiB,GAAG,EAAE,CAAC;IAE9B,iDAAiD;IACjD,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IACD,iDAAiD;IACjD,IAAW,iBAAiB,CAAC,KAAK;QAC9B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACnC,CAAC;IACM,gBAAgB,GAA0B,EAAE,CAAC;IAEpD,gDAAgD;IAChD,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IACD,gDAAgD;IAChD,IAAW,gBAAgB,CAAC,KAA4B;QACpD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAClC,CAAC;IACM,yBAAyB,GAAG,EAAE,CAAC;IAEtC,yDAAyD;IACzD,IAAW,yBAAyB;QAChC,OAAO,IAAI,CAAC,yBAAyB,CAAC;IAC1C,CAAC;IACD,yDAAyD;IACzD,IAAW,yBAAyB,CAAC,KAAK;QACtC,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACpE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,CACnE,CAAC;QACF,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED,WAAW,CAAC,OAAsB;QAC9B,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,6GAA6G;YAC7G,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAClF,IAAI,CAAC,YAAY,EAAE,CAAC;gBAChB,KAAK,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACtC,CAAC;QACL,CAAC;IACL,CAAC;IAEM,cAAc;QACjB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;YAEhD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,aAAa,CAAkB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBACzE,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACvC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;oBACzC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;oBAC3D,IAAI,CAAC,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;oBAC/D,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;oBAC7C,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;wBACpB,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;oBACpD,CAAC;yBAAM,CAAC;wBACJ,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;oBAChC,CAAC;oBACD,2FAA2F;oBAC3F,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;oBACrD,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;gBAC3C,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAClC,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC/B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExE,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC9D,IAAI,cAAc,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAC7D,IAAI,CAAC,YAAY,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9G,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC;QAC7G,CAAC;QAED,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,8CAA8C;IACvC,cAAc;QACjB,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC3B,IAAI,UAAU,GAAkC,EAAE,CAAC;QACnD,IAAI,CAAC;YACD,MAAM,0BAA0B,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5G,MAAM,WAAW,GAAG,0BAA0B,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7B,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;YAClE,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,QAAQ,CAAC,sEAAsE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACvG,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjD,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,IAAI;aACrC,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;gBAC3E,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;oBAChC,IAAI,EAAE,KAAK;oBACX,WAAW,EAAE,IAAI;iBACpB,CAAC,CAAC;YACP,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,sBAAsB,GAAG;gBAC1B;oBACI,IAAI,EAAE,KAAK;oBACX,WAAW,EAAE,IAAI;iBACpB;aACJ,CAAC;QACN,CAAC;QACD,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACpC,CAAC;IAEO,wBAAwB;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;YAChD,OAAO;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACxG,IAAI,MAAM,EAAE,CAAC;YACT,OAAO;QACX,CAAC;QAED,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,GAAkB,IAAI,CAAC;QAC/B,IAAI,CAAC;YACD,MAAM,WAAW,GAAG,0BAA0B,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC/F,IAAI,KAAK,EAAE,CAAC;oBACR,UAAU,GAAG,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;oBACvC,IAAI,GAAG,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC;gBACrC,CAAC;YACL,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,SAAS;QACb,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,iBAAiB,CAAC;QACnF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC7B,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,KAAK;YAClB,WAAW,EAAE,IAAI;SACpB,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,WAAW;QACrB,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAAe;gBACvC,UAAU,EAAE,gBAAgB;gBAC5B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC;gBACrC,UAAU,EAAE,QAAQ;aACvB,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;gBAC3B,QAAQ,CAAC,8BAA8B,GAAG,CAAC,YAAY,IAAI,eAAe,EAAE,CAAC,CAAC;YAClF,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC3B,QAAQ,CAAC,0BAA0B,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,cAAc;QACxB,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAAkB;gBAC1C,UAAU,EAAE,sBAAsB;gBAClC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC;gBAClC,UAAU,EAAE,QAAQ;aACvB,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;gBACxB,QAAQ,CAAC,oCAAoC,GAAG,CAAC,YAAY,IAAI,eAAe,EAAE,CAAC,CAAC;YACxF,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YACxB,QAAQ,CAAC,gCAAgC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,qBAAqB;QAC9B,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,wBAAwB,CAAC;QAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC9D,MAAM,OAAO,GAAG,cAAc;YAC1B,CAAC,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC;YACnD,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACnC,IAAI,GAAG,KAAK,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACxC,OAAO,CAAC,sEAAsE;QAClF,CAAC;QACD,IAAI,CAAC,0BAA0B,GAAG,OAAO,CAAC,OAAO,CAAC;QAClD,IAAI,CAAC,0BAA0B,GAAG,OAAO,CAAC,KAAK,CAAC;QAChD,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;QACtD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,wHAAwH;IAChH,KAAK,CAAC,sBAAsB,CAAC,QAAgB;QACjD,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAA4B;gBACpD,UAAU,EAAE,sBAAsB;gBAClC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC;gBAC9G,WAAW,EAAE,kCAAkC,eAAe,CAAC,QAAQ,CAAC,GAAG;gBAC3E,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;aACvB,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBACf,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,IAAI,eAAe,CAAC;gBACnD,QAAQ,CAAC,sCAAsC,MAAM,EAAE,CAAC,CAAC;gBACzD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC1C,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;iBAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;iBACzD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,QAAQ,CAAC,kCAAkC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAC/D,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1F,CAAC;IACL,CAAC;IAED,8FAA8F;IACtF,eAAe,CAAC,aAAwC;QAC5D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAkB,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpF,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC;IAED;;;OAGG;IACI,gBAAgB,CAAC,MAAiC;QACrD,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACpE,MAAM,UAAU,GAAG,8BAA8B,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC1E,IAAI,UAAU,EAAE,CAAC;YACb,OAAO,UAAU,CAAC;QACtB,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9H,IAAI,SAAS,EAAE,CAAC;YACZ,OAAO,wBAAwB,SAAS,CAAC,OAAO,EAAE,CAAC;QACvD,CAAC;QACD,OAAO,+BAA+B,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACvF,CAAC;IAEM,kBAAkB,CAAC,KAAY;QAClC,MAAM,OAAO,GAAI,KAAK,CAAC,MAA2B,CAAC,OAAO,CAAC;QAC3D,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG;gBACnB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,IAAI,EAAE;gBAClD,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,IAAI,GAAG;aAChE,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAEM,wBAAwB,CAAC,KAAY;QACxC,MAAM,GAAG,GAAI,KAAK,CAAC,MAA4B,CAAC,KAAK,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG;gBACnB,UAAU,EAAE,GAAG;gBACf,eAAe,EAAE,GAAG;aACvB,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,4HAA4H;IACrH,uBAAuB,CAAC,KAAY;QACvC,MAAM,KAAK,GAAG,oBAAoB,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAC;QAC7E,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,IAAI,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;QACtG,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAEM,mBAAmB,CAAC,KAAY;QACnC,IAAI,CAAC,WAAW,GAAI,KAAK,CAAC,MAA4B,CAAC,KAAwC,CAAC;QAChG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;QAC1C,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;QAC1C,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,mDAAmD;IAC5C,mBAAmB,CAAC,KAAY;QACnC,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAEM,iBAAiB,CAAC,KAAY;QACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAI,KAAK,CAAC,MAA4B,CAAC,KAAK,CAAC;QAC/E,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,iDAAiD;IAC1C,iBAAiB,CAAC,KAAY;QACjC,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAEM,eAAe,CAAC,KAAY;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACrE,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,+CAA+C;IACxC,eAAe,CAAC,KAAY;QAC/B,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAEM,iBAAiB,CAAC,KAAY;QACjC,MAAM,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG;aACzB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,iDAAiD;IAC1C,iBAAiB,CAAC,KAAY;QACjC,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAEM,cAAc,CAAC,KAAY;QAC9B,MAAM,QAAQ,GAAI,KAAK,CAAC,MAA4B,CAAC,KAAK,CAAC;QAC3D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC;QAC5F,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,8CAA8C;IACvC,cAAc,CAAC,KAAY;QAC9B,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAEM,SAAS;QACZ,MAAM,SAAS,GAAsB;YACjC,IAAI,EAAE,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9C,GAAG,EAAE,GAAG;YACR,MAAM,EAAE;gBACJ,IAAI,EAAE,OAAO;gBACb,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;aACjF;SACJ,CAAC;QACF,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,SAAS,CAAC,UAAU,GAAG;gBACnB,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,MAAM;aACtB,CAAC;QACN,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAEM,YAAY,CAAC,KAAa;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,4CAA4C;IACrC,YAAY,CAAC,KAAa;QAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAEM,gBAAgB,CAAC,KAAa,EAAE,IAAoB,EAAE,KAAY;QACrE,MAAM,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QACrC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,gDAAgD;IACzC,gBAAgB,CAAC,KAAa,EAAE,IAAoB,EAAE,KAAY;QACrE,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAEM,gBAAgB,CAAC,KAAa,EAAE,KAAY;QAC/C,MAAM,IAAI,GAAI,KAAK,CAAC,MAA4B,CAAC,KAA6B,CAAC;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,GAAG;gBACb,IAAI,EAAE,OAAO;gBACb,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;aACjF,CAAC;QACN,CAAC;aAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,OAAO,CAAC,MAAM,GAAG;gBACb,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACnF,WAAW,EAAE,UAAU;gBACvB,GAAG,EAAE,EAAE;aACV,CAAC;QACN,CAAC;aAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,MAAM,GAAG;gBACb,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,EAAE;aAChB,CAAC;QACN,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,gDAAgD;IACzC,gBAAgB,CAAC,KAAa,EAAE,KAAY;QAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAEM,iBAAiB,CAAC,KAAa,EAAE,KAAY;QAChD,MAAM,SAAS,GAAI,KAAK,CAAC,MAA4B,CAAC,KAAK,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QAC/C,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC;YACnC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;gBACvD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,iDAAiD;IAC1C,iBAAiB,CAAC,KAAa,EAAE,KAAY;QAChD,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAEM,uBAAuB,CAAC,KAAa,EAAE,KAAY;QACtD,MAAM,UAAU,GAAI,KAAK,CAAC,MAA4B,CAAC,KAAK,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QAC/C,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,uDAAuD;IAChD,uBAAuB,CAAC,KAAa,EAAE,KAAY;QACtD,OAAO,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAEM,oBAAoB,CAAC,KAAa,EAAE,KAAY;QACnD,MAAM,IAAI,GAAI,KAAK,CAAC,MAA4B,CAAC,KAAK,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAClB,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;QAClC,CAAC;aAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;YACtE,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,MAAM,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;YACpG,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;YACnF,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QACjE,CAAC;aAAM,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YAC7B,MAAM,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,oDAAoD;IAC7C,oBAAoB,CAAC,KAAa,EAAE,KAAY;QACnD,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAEM,qBAAqB,CAAC,KAAa,EAAE,KAAY;QACpD,MAAM,MAAM,GAAI,KAAK,CAAC,MAA4B,CAAC,KAAwB,CAAC;QAC5E,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,WAAW,GAAG,MAAM,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,qDAAqD;IAC9C,qBAAqB,CAAC,KAAa,EAAE,KAAY;QACpD,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAEM,gBAAgB,CAAC,UAA4B;QAChD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACjF,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,gDAAgD;IACzC,gBAAgB,CAAC,UAA4B;QAChD,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAEM,aAAa,CAAC,UAA4B;QAC7C,OAAO,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7G,CAAC;IAED,6CAA6C;IACtC,aAAa,CAAC,UAA4B;QAC7C,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAEM,aAAa,CAAC,UAA4B;QAC7C,OAAO,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7G,CAAC;IAED,6CAA6C;IACtC,aAAa,CAAC,UAA4B;QAC7C,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAEM,gBAAgB,CAAC,KAAa,EAAE,KAAY;QAC/C,MAAM,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1D,MAAM,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAC1E,CAAC;QACD,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG;aACzB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,gDAAgD;IACzC,gBAAgB,CAAC,KAAa,EAAE,KAAY;QAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAEM,gBAAgB,CAAC,KAAa,EAAE,KAAY;QAC/C,MAAM,GAAG,GAAG,UAAU,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5D,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,gDAAgD;IACzC,gBAAgB,CAAC,KAAa,EAAE,KAAY;QAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAEM,gBAAgB,CAAC,KAAa,EAAE,KAAY;QAC/C,MAAM,GAAG,GAAG,UAAU,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5D,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,gDAAgD;IACzC,gBAAgB,CAAC,KAAa,EAAE,KAAY;QAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAEM,uBAAuB,CAAC,KAAY;QACvC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAI,KAAK,CAAC,MAA4B,CAAC,KAAmD,CAAC;QAC5H,CAAC;IACL,CAAC;IAED,uDAAuD;IAChD,uBAAuB,CAAC,KAAY;QACvC,OAAO,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAEM,mBAAmB,CAAC,KAAY;QACnC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,aAAa,GAAI,KAAK,CAAC,MAA4B,CAAC,KAAK,KAAK,MAAM,CAAC;QACrF,CAAC;IACL,CAAC;IAED,mDAAmD;IAC5C,mBAAmB,CAAC,KAAY;QACnC,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAEM,eAAe,CAAC,KAAY;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,GAAI,KAAK,CAAC,MAA4B,CAAC,KAAK,KAAK,MAAM,CAAC;QACnF,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,+CAA+C;IACxC,eAAe,CAAC,KAAY;QAC/B,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAEM,oBAAoB,CAAC,KAAY;QACpC,MAAM,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACrD,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG;aAC5B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,oDAAoD;IAC7C,oBAAoB,CAAC,KAAY;QACpC,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAEM,cAAc,CAAC,KAAY;QAC9B,MAAM,GAAG,GAAG,QAAQ,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;QACxD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,8CAA8C;IACvC,cAAc,CAAC,KAAY;QAC9B,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAEM,gBAAgB,CAAC,KAAY;QAChC,MAAM,GAAG,GAAI,KAAK,CAAC,MAA4B,CAAC,KAA8B,CAAC;QAC/E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC;QAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,gDAAgD;IACzC,gBAAgB,CAAC,KAAY;QAChC,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,0HAA0H;IACnH,sBAAsB,CAAC,KAAY;QACtC,IAAK,KAAK,CAAC,MAA4B,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACtC,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAEM,oBAAoB,CAAC,KAAY;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAA2B,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC;QACjD,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;YACtD,OAAO;QACX,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;QAC5D,MAAM,aAAa,GAAoB;YACnC,GAAG,IAAI,CAAC,IAAI;YACZ,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE;SAC1D,CAAC;QACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE,CAAC;YAC9C,OAAO,aAAa,CAAC,UAAU,CAAC;QACpC,CAAC;QAED,MAAM,eAAe,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,kCAAkC,CAAC,aAAa,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;QAE7F,IAAI,UAAU,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClG,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,IAAI,GAAuB;gBAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,aAAa,EAAE,CAAC,CAAC,aAAa;oBAC9B,eAAe,EAAE,CAAC,CAAC,eAAe;oBAClC,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;iBAC1H,CAAC,CAAC;aACN,CAAC;YACF,UAAU,GAAG,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/G,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAErE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;YAC3B,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC;YACnC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;YAClC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC;IAEM,qBAAqB;QACxB,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACnC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACvD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAEM,qBAAqB;QACxB,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAEM,uBAAuB,CAAC,OAAe;QAC1C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QAClC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAEM,gBAAgB,CAAC,MAAyB;QAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACzG,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;IACpC,CAAC;IAEM,eAAe,CAAC,KAAa;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,UAAU,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpF,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACrD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,OAAO;YACX,CAAC;YACD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACvC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC9E,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC;QACL,CAAC;IACL,CAAC;IAEM,kBAAkB,CAAC,WAAmB,EAAE,UAAkB;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,UAAU,EAAE,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACpF,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC;QACL,CAAC;IACL,CAAC;IAEM,kBAAkB,CAAC,WAAmB,EAAE,UAAkB,EAAE,KAAY;QAC3E,MAAM,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,UAAU,EAAE,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACpF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;YAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAEM,gBAAgB,CAAC,WAAmB,EAAE,UAAkB,EAAE,SAAwB;QACrF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,UAAU,EAAE,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACpF,MAAM,WAAW,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;YACzE,IAAI,WAAW,IAAI,CAAC,IAAI,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACpE,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/D,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBACtD,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC;QACL,CAAC;IACL,CAAC;IAEM,aAAa,CAAC,MAAyB;QAC1C,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACpG,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QACpC,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAEM,uBAAuB,CAAC,MAAyB,EAAE,GAAW;QACjE,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzD,OAAO,MAAM,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAEM,0BAA0B,CAAC,WAAmB,EAAE,GAAW,EAAE,KAAY;QAC5E,MAAM,IAAI,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;gBACvC,MAAM,CAAC,UAAU,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC7C,CAAC;YACD,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAChD,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAEM,mBAAmB,CAAC,MAAyB;QAChD,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACzG,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,sBAAsB,CAAC,WAAmB,EAAE,KAAY;QAC3D,MAAM,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7D,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;gBACb,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACJ,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM,CAAC,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;YAC/D,CAAC;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAEO,0BAA0B,CAAC,MAAyB;QACxD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;YACvE,OAAO;QACX,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;QAChD,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO;QACX,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAClE,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrE,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;oBACvC,MAAM,CAAC,UAAU,CAAC,iBAAiB,GAAG,EAAE,CAAC;gBAC7C,CAAC;gBACD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBACtC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;wBACjE,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;oBACjE,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEO,WAAW;QACf,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;YAClF,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACK,yBAAyB;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,MAAM,MAAM,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC5D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;YACjD,CAAC;QACL,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3D,CAAC;IAEO,sBAAsB;QAC1B,OAAO,CAAC,SAAiB,EAAE,EAAE;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YAC9F,OAAO,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvI,CAAC,CAAC;IACN,CAAC;IAEO,mBAAmB;QACvB,IAAI,CAAC,yBAAyB,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClG,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,IAAI,GAAuB;gBAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,aAAa,EAAE,CAAC,CAAC,aAAa;oBAC9B,eAAe,EAAE,CAAC,CAAC,eAAe;oBAClC,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;iBAC1H,CAAC,CAAC;aACN,CAAC;YACF,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,kCAAkC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QAClG,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACvB,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,QAAQ;gBACjB,iBAAiB,EAAE,0EAA0E;aAChG,CAAC,CAAC;QACP,CAAC;QAED,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACxH,8FAA8F;YAC9F,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACvB,IAAI,EAAE,uBAAuB;gBAC7B,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,iGAAiG,IAAI,CAAC,0BAA0B,IAAI;gBAC7I,iBAAiB,EAAE,mFAAmF;aACzG,CAAC,CAAC;QACP,CAAC;aAAM,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YACjD,IAAI,QAAQ,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACtF,IAAI,CAAC,KAAK,EAAE,CAAC;oBACT,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;wBACvB,IAAI,EAAE,uBAAuB;wBAC7B,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,+BAA+B,QAAQ,iCAAiC;wBACjF,iBAAiB,EAAE,4DAA4D;qBAClF,CAAC,CAAC;gBACP,CAAC;qBAAM,CAAC;oBACJ,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC7C,IAAI,OAAO,EAAE,CAAC;wBACV,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;4BACvB,IAAI,EAAE,uBAAuB;4BAC7B,QAAQ,EAAE,OAAO;4BACjB,OAAO,EAAE,+BAA+B,KAAK,CAAC,IAAI,KAAK,OAAO,GAAG;4BACjE,iBAAiB,EAAE,6FAA6F;yBACnH,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;QAC5E,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;ySAvuCQ,+BAA+B,yBAA/B,+BAA+B;6DAA/B,+BAA+B;YA9epB,AADJ,AADJ,AADJ,AAFJ,8BAAiB,iBAEyB,aACX,aACA,YACR;YAAA,6BAAa;YAAA,iBAAQ;YAC5B,iCAAiE;YAAxC,oHAAU,gCAA4B,IAAC;YAC5D,qGAEC;YAET,AADI,iBAAS,EACP;YAEF,AADJ,8BAAmB,aACR;YAAA,iCAAgB;YAAA,iBAAQ;YAC/B,+BAA6B;YAAA,aAA4C;YAEjF,AADI,AAD6E,iBAAM,EAC7E,EACJ;YACN,mGAA4B;YAWhC,iBAAU;YAKF,AADJ,AADJ,mCAAyB,cACE,gBACD;YAAA,kBAAC;YAAA,iBAAO;YAC1B,2BAAI;YAAA,+BAAc;YACtB,AADsB,iBAAK,EACrB;YACN,8BAAoB;YAAA,iHAAgG;YAAA,iBAAI;YAIhH,AADJ,AADJ,gCAAuB,cACA,aACR;YAAA,6BAAY;YAAA,iBAAQ;YAC3B,mCAAsF;YAAvC,qHAAU,+BAA2B,IAAC;YACjF,mCAAuB;YAAA,8BAAa;YAAA,iBAAS;YAC7C,mCAAyB;YAAA,2CAA0B;YAAA,iBAAS;YAC5D,mCAAsB;YAAA,wCAAuB;YAErD,AADI,AADiD,iBAAS,EACjD,EACP;YAEN,mGAAkC;YAYlC,mGAA+B;YAQ3B,AADJ,+BAAmB,aACR;YAAA,wCAAuB;YAAA,iBAAQ;YACtC,kCAA8H;YAAlF,kHAAS,6BAAyB,IAAC;YAG3F,AADI,AADI,AADI,iBAA8H,EAC5H,EACJ,EACA;YAKF,AADJ,AADJ,mCAAyB,cACE,gBACD;YAAA,kBAAC;YAAA,iBAAO;YAC1B,2BAAI;YAAA,0BAAS;YACjB,AADiB,iBAAK,EAChB;YAGE,AADJ,AADJ,+BAAuB,cACA,aACR;YAAA,uBAAM;YAAA,iBAAQ;YACrB,kCAA2D;YAAlC,qHAAU,0BAAsB,IAAC;YACtD,mCAA0D;YAAA,+CAAoB;YAAA,iBAAS;YACvF,uGAEC;YAET,AADI,iBAAS,EACP;YACN,mGAAsB;YAM1B,iBAAM;YAEN,oGAAiC;YAMrC,iBAAU;YAME,AADJ,AADJ,AADJ,mCAAyB,eACc,eACF,gBACP;YAAA,kBAAC;YAAA,iBAAO;YAC1B,2BAAI;YAAA,sCAAqB;YAC7B,AAD6B,iBAAK,EAC5B;YACN,mCAAqE;YAAtB,6GAAS,eAAW,IAAC;YAChE,yBAAgC;YAAC,6BACrC;YACJ,AADI,iBAAS,EACP;YACN,8BAAoB;YAAA,oIAAmH;YAAA,iBAAI;YAOzI,AALF,oGAAkD,8EAKzC;YAqMb,iBAAU;YAGV,yGAA0B;YAoDlB,AADJ,AADJ,mCAAyB,cACE,gBACD;YAAA,kBAAC;YAAA,iBAAO;YAC1B,2BAAI;YAAA,qCAAoB;YAC5B,AAD4B,iBAAK,EAC3B;YAGE,AADJ,AADJ,gCAAuB,cACA,aACR;YAAA,mCAAkB;YAAA,iBAAQ;YACjC,mCAAsH;YAA3C,qHAAU,mCAA+B,IAAC;YACjH,mCAAyB;YAAA,sDAAqC;YAAA,iBAAS;YACvE,mCAA0B;YAAA,uDAAsC;YAAA,iBAAS;YACzE,mCAAqB;YAAA,kDAAiC;YAE9D,AADI,AAD0D,iBAAS,EAC1D,EACP;YAGF,AADJ,+BAAmB,aACR;YAAA,uCAAsB;YAAA,iBAAQ;YACrC,mCAAmH;YAAvC,qHAAU,+BAA2B,IAAC;YAC9G,mCAAqB;YAAA,+CAAyB;YAAA,iBAAS;YACvD,mCAAsB;YAAA,+CAAyB;YAEvD,AADI,AADmD,iBAAS,EACnD,EACP;YAGF,AADJ,+BAAmB,aACR;YAAA,oCAAmB;YAAA,iBAAQ;YAClC,oCAAgH;YAAnC,sHAAU,2BAAuB,IAAC;YAC3G,oCAAqB;YAAA,0DAAmC;YAAA,iBAAS;YACjE,oCAAsB;YAAA,2CAAoB;YAGtD,AADI,AADI,AAD8C,iBAAS,EAC9C,EACP,EACJ;YAEN,uGAA8B;YAmBlC,iBAAU;YAGV,sGAAmC;YAYnC,+CAQ0C;YAPtC,iQAAmC;YAOnC,AADA,iIAAa,2BAAuB,IAAC,oHACxB,2BAAuB,IAAC;YACrC,gCAA+B;YAC3B,uHAEC;YAGb,AADI,AADI,iBAAK,EACW,EAClB;;YAhcc,eAEC;YAFD,yCAEC;YAKwB,eAA4C;YAA5C,qEAA4C;YAGjF,cAUC;YAVD,oDAUC;YAcgC,gBAAqB;YAArB,uCAAqB;YAOlD,eAUC;YAVD,0DAUC;YAED,cAKC;YALD,uDAKC;YAI2B,eAAmB;YAAnB,qCAAmB;YAeb,gBAA+B;YAA/B,iDAA+B;YACzD,eAEC;YAFD,mCAEC;YAGT,eAKC;YALD,8CAKC;YAGL,cAKC;YALD,yDAKC;YAgBD,gBAyMC;YAzMD,8EAyMC;YAIL,eA+CC;YA/CD,kDA+CC;YAWoC,gBAAiD;YAAjD,gGAAiD;YASjD,gBAAkD;YAAlD,iGAAkD;YAQlD,eAAmD;YAAnD,qEAAmD;YAOpF,eAkBC;YAlBD,uDAkBC;YAIL,cASC;YATD,4DASC;YAIG,cAAmC;YAAnC,yDAAmC;YAGnC,2HAAyG;YAMrG,eAEC;YAFD,mCAEC;4BAtcP,YAAY,EAAE,WAAW,iDAAE,iBAAiB,EAAE,wBAAwB;;iFAqfvE,+BAA+B;cAzf3C,SAAS;2BACI,6BAA6B,cAC3B,IAAI,mBACC,uBAAuB,CAAC,MAAM,WACtC,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,wBAAwB,CAAC,YACvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAycT;;kBA8CA,KAAK;;kBACL,KAAK;;kBAEL,MAAM;;kBACN,MAAM;;kFAPE,+BAA+B","sourcesContent":["/**\n * @fileoverview Visual authoring component for a Feature Pipeline (Infer Record Process).\n * Configures the DataFeatureSpec (Context, Outputs & Constraints, Caching) and binds\n * prompt, output mapping, and watermark strategy directly on the MJRecordProcessEntity.\n *\n * @module @memberjunction/ng-record-process-studio\n */\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { EntityInfo, EntityFieldInfo, LogError, RunView, UserInfo } from '@memberjunction/core';\nimport {\n MJRecordProcessEntity,\n MJAIPromptEntity,\n MJEntityDocumentEntity,\n KnowledgeHubMetadataEngine,\n MJFeaturePipelineTypeEntity,\n} from '@memberjunction/core-entities';\nimport {\n DataFeatureSpec,\n DataFeatureOutput,\n ValueConstraint,\n OutputTarget,\n ViolationPolicy,\n renderConstraintBlock,\n validateSpec,\n GetFeaturePipelineCapabilities,\n ValidateOutputsAgainstCapabilities,\n FindEscalationTargetRowProblem,\n FindEscalationTargetSpecProblem,\n type FeaturePipelineDriverCapabilities,\n type FeaturePipelineFieldValueLookup,\n type SpecValidationIssue,\n type EntityMetadataStub,\n type MinimalEscalationTargetRow,\n} from '@memberjunction/feature-pipelines';\nimport { EscapeSQLString, SafeJSONParse, UUIDsEqual } from '@memberjunction/global';\nimport { MJButtonDirective, MJConfirmDialogComponent } from '@memberjunction/ng-ui-components';\n\nexport type PromptOption = Pick<MJAIPromptEntity, 'ID' | 'Name' | 'Description'>;\n\nexport type EntityDocOption = Pick<MJEntityDocumentEntity, 'ID' | 'Name' | 'EntityID'>;\n\nexport interface PipelineTypeOption {\n Name: string;\n DisplayName?: string;\n Description?: string | null;\n}\n\nexport interface EscalationTargetCandidate extends MinimalEscalationTargetRow {\n Description?: string | null;\n Configuration?: string | null;\n ParsedSpec?: DataFeatureSpec;\n}\n\n/**\n * The confidence floor typed into the builder, as a number. A blank or non-numeric entry is NaN, so the spec\n * check reports it (\"must be a number greater than 0 and less than 1, but is NaN\") instead of the builder\n * guessing a value; an out-of-range number is kept as typed, for the same check to report.\n */\nexport function ParseConfidenceFloor(raw: string): number {\n const text = raw.trim();\n return text.length === 0 ? Number.NaN : Number(text);\n}\n\n@Component({\n selector: 'mj-feature-pipeline-builder',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, MJButtonDirective, MJConfirmDialogComponent],\n template: `\n <div class=\"fpb\">\n <!-- PIPELINE TYPE SELECTOR -->\n <section class=\"rpe-sec fpb-type-sec\">\n <div class=\"rpe-grid2\">\n <div class=\"field\">\n <label>Pipeline Type</label>\n <select class=\"mj-input\" (change)=\"OnPipelineTypeSelect($event)\">\n @for (t of AvailablePipelineTypes; track t.Name) {\n <option [value]=\"t.Name\" [selected]=\"IsCurrentPipelineType(t.Name)\">{{ t.DisplayName || t.Name }}</option>\n }\n </select>\n </div>\n <div class=\"field\">\n <label>Type Description</label>\n <div class=\"rpe-static-text\">{{ SelectedPipelineTypeDescription || '—' }}</div>\n </div>\n </div>\n @if (ShowCaptureReasoning) {\n <div class=\"rpe-grid2 rpe-mt\">\n <div class=\"field\">\n <label>Capture Reasoning</label>\n <select class=\"mj-input fpb-reasoning-select\" [value]=\"spec.CaptureReasoning ? 'true' : 'false'\" (change)=\"UpdateCaptureReasoning($event)\">\n <option value=\"true\">Yes — Keep the model's rationale with each Feature Value</option>\n <option value=\"false\">No</option>\n </select>\n </div>\n </div>\n }\n </section>\n\n <!-- STAGE 1: CONTEXT SOURCE -->\n <section class=\"rpe-sec\">\n <div class=\"rpe-sec-h\">\n <span class=\"num\">1</span>\n <h3>Context Source</h3>\n </div>\n <p class=\"rpe-desc\">Choose how data from each record is extracted and formatted before being sent to the LLM prompt.</p>\n\n <div class=\"rpe-grid3\">\n <div class=\"field\">\n <label>Context Mode</label>\n <select class=\"mj-input\" [value]=\"contextMode\" (change)=\"onContextModeChange($event)\">\n <option value=\"fields\">Record Fields</option>\n <option value=\"document\">Entity Document (Template)</option>\n <option value=\"query\">Query (Graph Traversal)</option>\n </select>\n </div>\n\n @if (contextMode === 'document') {\n <div class=\"field\">\n <label>Entity Document</label>\n <select class=\"mj-input\" (change)=\"onEntityDocChange($event)\">\n <option value=\"\" disabled [selected]=\"!SavedEntityDocListed\">— Select Entity Document —</option>\n @for (doc of availableDocs; track doc.ID) {\n <option [value]=\"doc.ID\" [selected]=\"IsSavedEntityDoc(doc)\">{{ doc.Name }}</option>\n }\n </select>\n </div>\n }\n\n @if (contextMode === 'query') {\n <div class=\"field\">\n <label>Query ID</label>\n <input class=\"mj-input mono\" [value]=\"spec.Context.QueryID || ''\" (input)=\"onQueryIDChange($event)\" placeholder=\"UUID of approved Query\">\n </div>\n }\n\n <div class=\"field\">\n <label>Field Filter (optional)</label>\n <input class=\"mj-input\" [value]=\"fieldsCsv\" (input)=\"onFieldsCsvChange($event)\" placeholder=\"e.g. FirstName, LastName, Title\">\n </div>\n </div>\n </section>\n\n <!-- STAGE 2: PROMPT & INJECTED CONSTRAINTS -->\n <section class=\"rpe-sec\">\n <div class=\"rpe-sec-h\">\n <span class=\"num\">2</span>\n <h3>AI Prompt</h3>\n </div>\n <div class=\"rpe-grid2\">\n <div class=\"field\">\n <label>Prompt</label>\n <select class=\"mj-input\" (change)=\"onPromptChange($event)\">\n <option value=\"\" disabled [selected]=\"!SavedPromptListed\">— Select AI Prompt —</option>\n @for (p of availablePrompts; track p.ID) {\n <option [value]=\"p.ID\" [selected]=\"IsSavedPrompt(p)\">{{ p.Name }}</option>\n }\n </select>\n </div>\n @if (selectedPrompt) {\n <div class=\"field\">\n <label>Prompt Description</label>\n <div class=\"rpe-static-text\">{{ selectedPrompt.Description || 'No description provided' }}</div>\n </div>\n }\n </div>\n\n @if (renderedConstraintPreview) {\n <div class=\"field rpe-mt\">\n <label>Injected Constraint Block <span class=\"muted\">— automatically appended to prompt instructions</span></label>\n <pre class=\"fpb-code-preview\">{{ renderedConstraintPreview }}</pre>\n </div>\n }\n </section>\n\n <!-- STAGE 3: OUTPUTS & CONSTRAINTS -->\n <section class=\"rpe-sec\">\n <div class=\"rpe-sec-h fpb-split-h\">\n <div class=\"fpb-title-group\">\n <span class=\"num\">3</span>\n <h3>Outputs & Constraints</h3>\n </div>\n <button mjButton size=\"sm\" variant=\"secondary\" (click)=\"addOutput()\">\n <i class=\"fa-solid fa-plus\"></i> Add Output\n </button>\n </div>\n <p class=\"rpe-desc\">Define the structured outputs produced by the pipeline, their type constraints, and target write-back destinations.</p>\n\n @if (!spec.Outputs || spec.Outputs.length === 0) {\n <div class=\"fpb-empty-outputs\">\n <i class=\"fa-solid fa-arrow-turn-up\"></i>\n <span>No outputs defined. Click <strong>Add Output</strong> to configure at least one output attribute.</span>\n </div>\n } @else {\n <div class=\"fpb-outputs-list\">\n @for (output of spec.Outputs; track $index; let outputIndex = $index) {\n <div class=\"fpb-output-card\">\n <div class=\"fpb-output-head\">\n <h4>Output #{{ outputIndex + 1 }}: {{ output.Name || '(unnamed)' }}</h4>\n <button mjButton size=\"sm\" variant=\"flat\" (click)=\"removeOutput(outputIndex)\">\n <i class=\"fa-solid fa-trash\"></i> Remove\n </button>\n </div>\n\n <div class=\"rpe-grid3\">\n <div class=\"field\">\n <label>Output Name</label>\n <input class=\"mj-input\" [value]=\"output.Name\" (input)=\"updateOutputProp(outputIndex, 'Name', $event)\" placeholder=\"e.g. SentimentScore\">\n </div>\n <div class=\"field\">\n <label>JSON Path / Ref</label>\n <input class=\"mj-input mono\" [value]=\"output.Ref\" (input)=\"updateOutputProp(outputIndex, 'Ref', $event)\" placeholder=\"e.g. $.sentiment or $\">\n </div>\n <div class=\"field\">\n <label>Target Mode</label>\n <select class=\"mj-input\" (change)=\"updateTargetMode(outputIndex, $event)\">\n @if (!IsTargetModeOffered(output)) {\n <option value=\"\" disabled [selected]=\"true\">— Select Target Mode —</option>\n }\n @for (m of AvailableTargetModes; track m.Value) {\n <option [value]=\"m.Value\" [selected]=\"m.Value === output.Target.Mode\">{{ m.Label }}</option>\n }\n </select>\n </div>\n </div>\n\n <!-- Target details -->\n <div class=\"rpe-grid3 rpe-mt\">\n @if (output.Target.Mode === 'field') {\n <div class=\"field\">\n <label>Target Field</label>\n <select class=\"mj-input\" (change)=\"updateFieldTarget(outputIndex, $event)\">\n <option value=\"\" disabled [selected]=\"!IsEntityFieldListed(output.Target.EntityFieldName)\">— Select Column —</option>\n @for (f of entityFields; track f.Name) {\n <option [value]=\"f.Name\" [selected]=\"f.Name === output.Target.EntityFieldName\">{{ f.DisplayName || f.Name }} ({{ f.TSType }})</option>\n }\n </select>\n </div>\n }\n\n @if (output.Target.Mode === 'child') {\n <div class=\"field\">\n <label>Child Entity</label>\n <select class=\"mj-input\" (change)=\"updateChildTargetEntity(outputIndex, $event)\">\n <option value=\"\" disabled [selected]=\"!IsEntityListed(output.Target.EntityName)\">— Select Entity —</option>\n @for (e of availableEntities; track e.ID) {\n <option [value]=\"e.Name\" [selected]=\"e.Name === output.Target.EntityName\">{{ e.DisplayName || e.Name }}</option>\n }\n </select>\n </div>\n }\n\n <!-- Constraint details -->\n <div class=\"field\">\n <label>Constraint Type</label>\n <select class=\"mj-input\" (change)=\"updateConstraintType(outputIndex, $event)\">\n @if (!IsConstraintTypeOffered(output)) {\n <option value=\"none\" disabled [selected]=\"true\">— Select Constraint —</option>\n }\n @for (t of AvailableConstraintTypes; track t.Value) {\n <option [value]=\"t.Value\" [selected]=\"t.Value === SavedConstraintType(output)\">{{ t.Label }}</option>\n }\n </select>\n </div>\n\n @if (output.Constraint) {\n <div class=\"field\">\n <label>Violation Policy</label>\n <select class=\"mj-input\" [value]=\"output.Constraint.OnViolation || 'fail'\" (change)=\"updateViolationPolicy(outputIndex, $event)\">\n <option value=\"fail\">Fail Row</option>\n <option value=\"null\">Set Output to Null</option>\n <option value=\"coerce-to-other\">Coerce / Fallback</option>\n </select>\n </div>\n }\n </div>\n\n <!-- Constraint params -->\n @if (output.Constraint?.Type === 'enum') {\n <div class=\"field rpe-mt\">\n <label>Allowed Values (comma separated)</label>\n <input class=\"mj-input\" [value]=\"getEnumValuesCsv(output.Constraint)\" (input)=\"updateEnumValues(outputIndex, $event)\" placeholder=\"e.g. Positive, Neutral, Negative\">\n </div>\n @if (IsDecisionPipeline && GetEnumValues(output).length > 0) {\n <div class=\"field rpe-mt\">\n <label>Value Descriptions <span class=\"muted\">— Decision models require a description for every choice option</span></label>\n <div class=\"fpb-enum-descriptions\">\n @for (val of GetEnumValues(output); track val) {\n <div class=\"fpb-enum-desc-row\">\n <span class=\"fpb-enum-val-badge\">{{ val }}</span>\n <input\n class=\"mj-input\"\n [value]=\"GetEnumValueDescription(output, val)\"\n (input)=\"UpdateEnumValueDescription(outputIndex, val, $event)\"\n [placeholder]=\"'Description for ' + val\">\n </div>\n }\n </div>\n </div>\n }\n }\n @if (output.Constraint?.Type === 'numeric') {\n @if (IsDecisionPipeline) {\n <div class=\"field rpe-mt\">\n <div class=\"fpb-levels-header\">\n <label>Numeric Levels <span class=\"muted\">(Ordered: lowest to highest, 2 to 10 levels)</span></label>\n <button\n mjButton\n size=\"sm\"\n variant=\"secondary\"\n type=\"button\"\n [disabled]=\"GetNumericLevels(output).length >= 10\"\n (click)=\"AddNumericLevel(outputIndex)\">\n <i class=\"fa-solid fa-plus\"></i> Add Level\n </button>\n </div>\n <div class=\"fpb-levels-list\">\n @for (lvl of GetNumericLevels(output); track $index; let lvlIdx = $index; let first = $first; let last = $last) {\n <div class=\"fpb-level-row\">\n <span class=\"fpb-level-num\">{{ lvlIdx + 1 }}</span>\n <input\n class=\"mj-input\"\n [value]=\"lvl\"\n (input)=\"UpdateNumericLevel(outputIndex, lvlIdx, $event)\"\n placeholder=\"Level label (e.g. Low, Medium, High)\">\n <button\n mjButton\n size=\"sm\"\n variant=\"flat\"\n type=\"button\"\n [disabled]=\"first\"\n (click)=\"MoveNumericLevel(outputIndex, lvlIdx, 'up')\"\n title=\"Move Up\">\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n mjButton\n size=\"sm\"\n variant=\"flat\"\n type=\"button\"\n [disabled]=\"last\"\n (click)=\"MoveNumericLevel(outputIndex, lvlIdx, 'down')\"\n title=\"Move Down\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n <button\n mjButton\n size=\"sm\"\n variant=\"flat\"\n type=\"button\"\n [disabled]=\"GetNumericLevels(output).length <= 2\"\n (click)=\"RemoveNumericLevel(outputIndex, lvlIdx)\"\n title=\"Remove Level\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"rpe-grid2 rpe-mt\">\n <div class=\"field\">\n <label>Min Value</label>\n <input class=\"mj-input\" type=\"number\" [value]=\"getNumericMin(output.Constraint)\" (input)=\"updateNumericMin(outputIndex, $event)\">\n </div>\n <div class=\"field\">\n <label>Max Value</label>\n <input class=\"mj-input\" type=\"number\" [value]=\"getNumericMax(output.Constraint)\" (input)=\"updateNumericMax(outputIndex, $event)\">\n </div>\n </div>\n }\n }\n @if (output.Constraint?.Type === 'boolean' && IsDecisionPipeline) {\n <div class=\"field rpe-mt\">\n <label>Decision Threshold (0.0 to 1.0) <span class=\"muted\">— calibrated probability threshold for true</span></label>\n <input\n class=\"mj-input\"\n type=\"number\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n placeholder=\"0.5\"\n [value]=\"GetBooleanThreshold(output) ?? ''\"\n (input)=\"UpdateBooleanThreshold(outputIndex, $event)\">\n </div>\n }\n </div>\n }\n </div>\n }\n </section>\n\n <!-- ESCALATION (DECISION PIPELINES ONLY) -->\n @if (IsDecisionPipeline) {\n <section class=\"rpe-sec fpb-escalation-sec\">\n <div class=\"rpe-sec-h\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n <h3>Borderline Escalation</h3>\n </div>\n <p class=\"rpe-desc\">Records any output of which the decision model answers below this confidence are re-run through the chosen LLM pipeline. Only those records are re-run.</p>\n\n <div class=\"fpb-escalation-toggle-row\">\n <label class=\"fpb-checkbox-label\">\n <input\n type=\"checkbox\"\n [checked]=\"IsEscalationEnabled\"\n (change)=\"OnEscalationToggle($event)\">\n <span>Escalate borderline records to an LLM pipeline</span>\n </label>\n </div>\n\n @if (IsEscalationEnabled) {\n <div class=\"rpe-grid2 rpe-mt\">\n <div class=\"field\">\n <label>Target LLM Pipeline</label>\n <select class=\"mj-input\" (change)=\"OnEscalationTargetChange($event)\">\n <option value=\"\" disabled [selected]=\"!SavedEscalationTargetListed\">{{ EscalationTargetsPlaceholder }}</option>\n @for (target of AvailableEscalationTargets; track target.ID) {\n <option [value]=\"target.ID\" [disabled]=\"!!GetTargetProblem(target)\" [selected]=\"IsSavedEscalationTarget(target)\">\n {{ target.Name }}{{ GetTargetProblem(target) ? ' (' + GetTargetProblem(target) + ')' : '' }}\n </option>\n }\n </select>\n </div>\n\n <div class=\"field\">\n <label>Confidence Floor (0.0 to 1.0)</label>\n <input\n class=\"mj-input\"\n type=\"number\"\n min=\"0\"\n max=\"1\"\n step=\"0.05\"\n placeholder=\"0.7\"\n [value]=\"spec.Escalation?.BelowConfidence ?? ''\"\n (input)=\"OnEscalationFloorChange($event)\">\n </div>\n </div>\n }\n </section>\n }\n\n <!-- STAGE 4: MATERIALIZATION & WATERMARK -->\n <section class=\"rpe-sec\">\n <div class=\"rpe-sec-h\">\n <span class=\"num\">4</span>\n <h3>Caching & Watermarks</h3>\n </div>\n <div class=\"rpe-grid3\">\n <div class=\"field\">\n <label>Watermark Strategy</label>\n <select class=\"mj-input\" [value]=\"Record?.WatermarkStrategy || 'Checksum'\" (change)=\"updateWatermarkStrategy($event)\">\n <option value=\"Checksum\">Checksum (Content Hash + Prompt Hash)</option>\n <option value=\"UpdatedAt\">UpdatedAt (Compare modified timestamp)</option>\n <option value=\"None\">None (Always process all records)</option>\n </select>\n </div>\n\n <div class=\"field\">\n <label>Skip Unchanged Records</label>\n <select class=\"mj-input\" [value]=\"Record?.SkipUnchanged ? 'true' : 'false'\" (change)=\"updateSkipUnchanged($event)\">\n <option value=\"true\">Yes — Skip unchanged rows</option>\n <option value=\"false\">No — Recompute every time</option>\n </select>\n </div>\n\n <div class=\"field\">\n <label>Enable Result Cache</label>\n <select class=\"mj-input\" [value]=\"spec.Caching.Cacheable ? 'true' : 'false'\" (change)=\"updateCacheable($event)\">\n <option value=\"true\">Yes — Cache outputs by distinct key</option>\n <option value=\"false\">No — Compute per row</option>\n </select>\n </div>\n </div>\n\n @if (spec.Caching.Cacheable) {\n <div class=\"rpe-grid3 rpe-mt\">\n <div class=\"field\">\n <label>Cache Key Fields (comma separated)</label>\n <input class=\"mj-input\" [value]=\"cacheKeyFieldsCsv\" (input)=\"updateCacheKeyFields($event)\" placeholder=\"e.g. CurrentJobTitle\">\n </div>\n <div class=\"field\">\n <label>Cache TTL (Seconds)</label>\n <input class=\"mj-input\" type=\"number\" [value]=\"spec.Caching.TTLSeconds ?? 86400\" (input)=\"updateCacheTTL($event)\">\n </div>\n <div class=\"field\">\n <label>Cache Scope</label>\n <select class=\"mj-input\" [value]=\"spec.Caching.Scope || 'pipeline'\" (change)=\"updateCacheScope($event)\">\n <option value=\"pipeline\">Pipeline (Isolated to this process)</option>\n <option value=\"prompt\">Prompt (Shared across processes with same prompt)</option>\n </select>\n </div>\n </div>\n }\n </section>\n\n <!-- VALIDATION ISSUES -->\n @if (validationErrors.length > 0) {\n <div class=\"fpb-issues-card fpb-issues-card--error\">\n <h4><i class=\"fa-solid fa-triangle-exclamation\"></i> Specification Issues</h4>\n <ul>\n @for (issue of validationErrors; track $index) {\n <li><strong>{{ issue.Field ? issue.Field + ': ' : '' }}</strong>{{ issue.Message }} @if (issue.FixRecommendation) { <span class=\"muted\">(Fix: {{ issue.FixRecommendation }})</span> }</li>\n }\n </ul>\n </div>\n }\n\n <!-- TYPE SWITCH CONFIRMATION DIALOG -->\n <mj-confirm-dialog\n [(Visible)]=\"ShowTypeSwitchConfirm\"\n Type=\"warning\"\n Title=\"Switch Pipeline Type\"\n [Message]=\"'Switching to ' + (PendingPipelineType || 'selected type') + ' will affect existing outputs:'\"\n ConfirmText=\"Switch Anyway\"\n CancelText=\"Cancel\"\n (Confirmed)=\"OnTypeSwitchConfirmed()\"\n (Cancelled)=\"OnTypeSwitchCancelled()\">\n <ul class=\"fpb-confirm-issues\">\n @for (issue of TypeSwitchIssues; track $index) {\n <li>{{ issue }}</li>\n }\n </ul>\n </mj-confirm-dialog>\n </div>\n `,\n styles: [`\n .fpb { display: flex; flex-direction: column; gap: 20px; }\n .rpe-desc { font-size: 13px; color: var(--mj-text-secondary); margin: -6px 0 16px 0; }\n .rpe-sec { background: var(--mj-bg-surface-card); border: 1px solid var(--mj-border-subtle); border-radius: var(--mj-radius-md, 10px); padding: 18px 20px; }\n .fpb-type-sec { border-left: 3px solid var(--mj-brand-primary); }\n .rpe-sec-h { display: flex; align-items: center; gap: 11px; margin-bottom: 14px; }\n .rpe-sec-h h3 { margin: 0; font-size: 16px; font-weight: 700; color: var(--mj-text-primary); }\n .rpe-sec-h .num { width: 24px; height: 24px; border-radius: 50%; background: var(--mj-brand-primary); color: #fff; display: grid; place-items: center; font-size: 12px; font-weight: 800; }\n .fpb-split-h { justify-content: space-between; }\n .fpb-title-group { display: flex; align-items: center; gap: 11px; }\n .rpe-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }\n .rpe-grid3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; }\n .field { display: flex; flex-direction: column; gap: 6px; }\n .field label { font-size: 12.5px; font-weight: 600; color: var(--mj-text-secondary); }\n .rpe-mt { margin-top: 14px; }\n .mono { font-family: monospace; font-size: 12.5px; }\n .muted { color: var(--mj-text-muted); font-weight: 400; }\n .rpe-static-text { font-size: 13px; color: var(--mj-text-muted); padding: 7px 0; }\n .fpb-code-preview { background: var(--mj-bg-surface-sunken, #0f172a); color: var(--mj-text-code, var(--mj-text-primary, #e2e8f0)); border: 1px solid var(--mj-border-subtle, #334155); padding: 12px; border-radius: 6px; font-size: 12px; font-family: var(--mj-font-mono, monospace); white-space: pre-wrap; word-break: break-word; max-height: 160px; overflow-y: auto; margin: 0; }\n .fpb-empty-outputs { display: flex; align-items: center; gap: 10px; padding: 20px; border: 1px dashed var(--mj-border-subtle); border-radius: 8px; color: var(--mj-text-muted); font-size: 13px; }\n .fpb-outputs-list { display: flex; flex-direction: column; gap: 16px; }\n .fpb-output-card { border: 1px solid var(--mj-border-subtle); border-radius: 8px; padding: 14px 16px; background: var(--mj-bg-surface); }\n .fpb-output-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; border-bottom: 1px solid var(--mj-border-subtle); padding-bottom: 8px; }\n .fpb-output-head h4 { margin: 0; font-size: 14px; font-weight: 600; }\n .fpb-issues-card { border-radius: 8px; padding: 12px 16px; font-size: 13px; }\n .fpb-issues-card--error { background: rgba(239, 68, 68, 0.08); border: 1px solid var(--mj-status-error); color: var(--mj-status-error-text); }\n .fpb-issues-card h4 { margin: 0 0 8px 0; font-size: 14px; display: flex; align-items: center; gap: 8px; }\n .fpb-issues-card ul { margin: 0; padding-left: 20px; }\n .fpb-confirm-issues { margin: 10px 0 0 0; padding-left: 20px; color: var(--mj-status-error-text, var(--mj-text-primary)); font-size: 13px; }\n .fpb-confirm-issues li { margin-bottom: 4px; }\n .fpb-levels-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }\n .fpb-levels-list { display: flex; flex-direction: column; gap: 8px; }\n .fpb-level-row { display: flex; align-items: center; gap: 8px; }\n .fpb-level-num { width: 22px; height: 22px; display: grid; place-items: center; font-size: 11px; font-weight: 700; border-radius: var(--mj-radius-sm, 4px); background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary); flex-shrink: 0; }\n .fpb-enum-descriptions { display: flex; flex-direction: column; gap: 8px; margin-top: 6px; }\n .fpb-enum-desc-row { display: flex; align-items: center; gap: 10px; }\n .fpb-enum-val-badge { min-width: 90px; padding: 4px 8px; background: var(--mj-bg-surface-sunken); color: var(--mj-text-primary); border: 1px solid var(--mj-border-subtle); border-radius: var(--mj-radius-sm, 4px); font-size: 12px; font-weight: 600; text-align: center; flex-shrink: 0; }\n .fpb-escalation-toggle-row { display: flex; align-items: center; gap: 8px; margin-top: 10px; }\n .fpb-checkbox-label { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; font-size: 13px; font-weight: 500; color: var(--mj-text-primary); user-select: none; }\n .fpb-checkbox-label input[type=\"checkbox\"] { width: 16px; height: 16px; cursor: pointer; accent-color: var(--mj-brand-primary); }\n `],\n})\nexport class FeaturePipelineBuilderComponent extends BaseAngularComponent implements OnInit, OnChanges {\n private cdr = inject(ChangeDetectorRef);\n\n @Input() Record: MJRecordProcessEntity | null = null;\n @Input() EntityID: string | null = null;\n\n @Output() SpecChange = new EventEmitter<DataFeatureSpec>();\n @Output() ValidChange = new EventEmitter<boolean>();\n\n public spec: DataFeatureSpec = {\n Name: '',\n Description: '',\n PromptID: '',\n Context: {},\n Outputs: [],\n Caching: { Cacheable: false },\n };\n\n public AvailablePipelineTypes: PipelineTypeOption[] = [\n { Name: 'LLM', Description: null },\n ];\n public ShowTypeSwitchConfirm = false;\n public PendingPipelineType: string | null = null;\n public TypeSwitchIssues: string[] = [];\n\n public get CurrentPipelineTypeName(): string {\n return this.spec.PipelineType?.trim() || 'LLM';\n }\n\n public get CurrentCapabilities(): FeaturePipelineDriverCapabilities {\n return GetFeaturePipelineCapabilities(this.CurrentPipelineTypeName);\n }\n\n public get IsDecisionPipeline(): boolean {\n return this.CurrentPipelineTypeName.toLowerCase() === 'decision';\n }\n\n public AvailableEscalationTargets: EscalationTargetCandidate[] = [];\n /** Whether the escalation targets were loaded. False until a load succeeds, and after one fails. */\n public EscalationTargetsLoaded = false;\n /** Why the last load of escalation targets failed, or null when it did not. */\n public EscalationTargetsLoadError: string | null = null;\n /** Numbers each target load, so a slower earlier load cannot overwrite a later one. */\n private escalationTargetsLoadSeq = 0;\n\n public get IsEscalationEnabled(): boolean {\n return this.spec.Escalation !== undefined && this.spec.Escalation !== null;\n }\n\n /** The target picker's empty option: what to pick, or why there is nothing to pick. */\n public get EscalationTargetsPlaceholder(): string {\n if (this.EscalationTargetsLoadError) {\n return '— Pipelines could not be loaded —';\n }\n return this.AvailableEscalationTargets.length > 0 ? '— Select LLM Pipeline —' : '— No other Infer pipelines on this entity —';\n }\n\n /** Whether `target` is the spec's escalation target. IDs compare through UUIDsEqual, as the target check does. */\n public IsSavedEscalationTarget(target: EscalationTargetCandidate): boolean {\n return UUIDsEqual(target.ID, this.spec.Escalation?.PipelineID);\n }\n\n /** Whether the target picker lists the spec's escalation target. Until the targets load, or when it is not among them, the placeholder shows. */\n public get SavedEscalationTargetListed(): boolean {\n return this.AvailableEscalationTargets.some((t) => this.IsSavedEscalationTarget(t));\n }\n\n /**\n * Whether to offer the Capture Reasoning setting: for a type that produces reasoning, and for any spec\n * that already asks for it, so a pipeline switched to a type without reasoning can turn it off.\n */\n public get ShowCaptureReasoning(): boolean {\n return this.CurrentCapabilities.ProducesReasoning || this.spec.CaptureReasoning === true;\n }\n\n public get SelectedPipelineTypeDescription(): string {\n const cur = this.CurrentPipelineTypeName.toLowerCase();\n const opt = this.AvailablePipelineTypes.find((t) => t.Name.toLowerCase() === cur);\n return opt?.Description ?? '';\n }\n\n public get AvailableTargetModes(): Array<{ Value: OutputTarget['Mode']; Label: string }> {\n const all: Array<{ Value: OutputTarget['Mode']; Label: string }> = [\n { Value: 'field', Label: 'Entity Column (field)' },\n { Value: 'child', Label: 'Child Rows (child)' },\n { Value: 'tags', Label: 'Taxonomy Tags (tags)' },\n ];\n const supported = this.CurrentCapabilities.TargetModes;\n return all.filter((m) => supported.includes(m.Value));\n }\n\n public get AvailableConstraintTypes(): Array<{ Value: string; Label: string }> {\n const options: Array<{ Value: string; Label: string }> = [];\n if (!this.IsDecisionPipeline) {\n options.push({ Value: 'none', Label: 'None / Unconstrained' });\n }\n if (this.CurrentCapabilities.ConstraintTypes.includes('boolean')) {\n options.push({ Value: 'boolean', Label: 'Boolean' });\n }\n if (this.CurrentCapabilities.ConstraintTypes.includes('enum')) {\n options.push({ Value: 'enum', Label: 'Enum (Allowed Values)' });\n }\n if (this.CurrentCapabilities.ConstraintTypes.includes('numeric')) {\n options.push({ Value: 'numeric', Label: this.IsDecisionPipeline ? 'Numeric (Levels)' : 'Numeric (Min/Max)' });\n }\n if (this.CurrentCapabilities.ConstraintTypes.includes('freetext')) {\n options.push({ Value: 'freetext', Label: 'Free Text' });\n }\n return options;\n }\n\n // The pickers mark the saved option with [selected] on each <option>, not [value] on the <select>. A [value]\n // binding runs before @for creates the options, matches nothing, and does not run again, so the browser shows\n // the first option. When the saved value is not listed, the placeholder is selected. A placeholder inside @if\n // binds [selected] instead of carrying the attribute, because on a live type switch the attribute loses to the\n // option still selected, which is then removed.\n\n /** Whether `name` is the spec's pipeline type. Names compare case-insensitively, as {@link IsDecisionPipeline} does. */\n public IsCurrentPipelineType(name: string): boolean {\n return name.toLowerCase() === this.CurrentPipelineTypeName.toLowerCase();\n }\n\n /** The output's saved constraint type as the constraint picker names it: `'none'` when it has none. */\n public SavedConstraintType(output: DataFeatureOutput): string {\n return output.Constraint?.Type || 'none';\n }\n\n /** Whether the constraint picker lists the output's saved type. A Decision output with no constraint, or one this type cannot produce, is not listed. */\n public IsConstraintTypeOffered(output: DataFeatureOutput): boolean {\n const saved = this.SavedConstraintType(output);\n return this.AvailableConstraintTypes.some((t) => t.Value === saved);\n }\n\n /** Whether the target mode picker lists the output's saved mode. */\n public IsTargetModeOffered(output: DataFeatureOutput): boolean {\n return this.AvailableTargetModes.some((m) => m.Value === output.Target.Mode);\n }\n\n /** Whether the target field picker lists a field named `name`. */\n public IsEntityFieldListed(name: string | undefined): boolean {\n return !!name && this.EntityFields.some((f) => f.Name === name);\n }\n\n /** Whether the child entity picker lists an entity named `name`. */\n public IsEntityListed(name: string | undefined): boolean {\n return !!name && this.AvailableEntities.some((e) => e.Name === name);\n }\n\n /** Whether `prompt` is the pipeline's saved prompt. */\n public IsSavedPrompt(prompt: PromptOption): boolean {\n return UUIDsEqual(prompt.ID, this.Record ? this.Record.PromptID : this.spec.PromptID);\n }\n\n /** Whether the prompt picker lists the pipeline's saved prompt. */\n public get SavedPromptListed(): boolean {\n return this.AvailablePrompts.some((p) => this.IsSavedPrompt(p));\n }\n\n /** Whether `doc` is the spec's saved entity document. */\n public IsSavedEntityDoc(doc: EntityDocOption): boolean {\n return UUIDsEqual(doc.ID, this.spec.Context.EntityDocumentID);\n }\n\n /** Whether the entity document picker lists the spec's saved document. */\n public get SavedEntityDocListed(): boolean {\n return this.AvailableDocs.some((d) => this.IsSavedEntityDoc(d));\n }\n\n public AvailablePrompts: PromptOption[] = [];\n\n /** @deprecated Use {@link AvailablePrompts}. */\n public get availablePrompts(): PromptOption[] {\n return this.AvailablePrompts;\n }\n /** @deprecated Use {@link AvailablePrompts}. */\n public set availablePrompts(value: PromptOption[]) {\n this.AvailablePrompts = value;\n }\n public AvailableDocs: EntityDocOption[] = [];\n\n /** @deprecated Use {@link AvailableDocs}. */\n public get availableDocs(): EntityDocOption[] {\n return this.AvailableDocs;\n }\n /** @deprecated Use {@link AvailableDocs}. */\n public set availableDocs(value: EntityDocOption[]) {\n this.AvailableDocs = value;\n }\n public AvailableEntities: EntityInfo[] = [];\n\n /** @deprecated Use {@link AvailableEntities}. */\n public get availableEntities(): EntityInfo[] {\n return this.AvailableEntities;\n }\n /** @deprecated Use {@link AvailableEntities}. */\n public set availableEntities(value: EntityInfo[]) {\n this.AvailableEntities = value;\n }\n public EntityFields: EntityFieldInfo[] = [];\n\n /** @deprecated Use {@link EntityFields}. */\n public get entityFields(): EntityFieldInfo[] {\n return this.EntityFields;\n }\n /** @deprecated Use {@link EntityFields}. */\n public set entityFields(value: EntityFieldInfo[]) {\n this.EntityFields = value;\n }\n public SelectedPrompt: PromptOption | null = null;\n\n /** @deprecated Use {@link SelectedPrompt}. */\n public get selectedPrompt(): PromptOption | null {\n return this.SelectedPrompt;\n }\n /** @deprecated Use {@link SelectedPrompt}. */\n public set selectedPrompt(value: PromptOption | null) {\n this.SelectedPrompt = value;\n }\n\n public ContextMode: 'fields' | 'document' | 'query' = 'fields';\n\n /** @deprecated Use {@link ContextMode}. */\n public get contextMode(): 'fields' | 'document' | 'query' {\n return this.ContextMode;\n }\n /** @deprecated Use {@link ContextMode}. */\n public set contextMode(value: 'fields' | 'document' | 'query') {\n this.ContextMode = value;\n }\n public FieldsCsv = '';\n\n /** @deprecated Use {@link FieldsCsv}. */\n public get fieldsCsv() {\n return this.FieldsCsv;\n }\n /** @deprecated Use {@link FieldsCsv}. */\n public set fieldsCsv(value) {\n this.FieldsCsv = value;\n }\n public CacheKeyFieldsCsv = '';\n\n /** @deprecated Use {@link CacheKeyFieldsCsv}. */\n public get cacheKeyFieldsCsv() {\n return this.CacheKeyFieldsCsv;\n }\n /** @deprecated Use {@link CacheKeyFieldsCsv}. */\n public set cacheKeyFieldsCsv(value) {\n this.CacheKeyFieldsCsv = value;\n }\n public ValidationErrors: SpecValidationIssue[] = [];\n\n /** @deprecated Use {@link ValidationErrors}. */\n public get validationErrors(): SpecValidationIssue[] {\n return this.ValidationErrors;\n }\n /** @deprecated Use {@link ValidationErrors}. */\n public set validationErrors(value: SpecValidationIssue[]) {\n this.ValidationErrors = value;\n }\n public RenderedConstraintPreview = '';\n\n /** @deprecated Use {@link RenderedConstraintPreview}. */\n public get renderedConstraintPreview() {\n return this.RenderedConstraintPreview;\n }\n /** @deprecated Use {@link RenderedConstraintPreview}. */\n public set renderedConstraintPreview(value) {\n this.RenderedConstraintPreview = value;\n }\n\n async ngOnInit(): Promise<void> {\n this.AvailableEntities = [...this.ProviderToUse.Entities].sort((a, b) =>\n (a.DisplayName || a.Name).localeCompare(b.DisplayName || b.Name)\n );\n await this.loadPipelineTypes();\n await this.loadPrompts();\n await this.loadEntityDocs();\n await this.LoadEscalationTargets();\n this.SyncFromRecord();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['Record'] || changes['EntityID']) {\n this.SyncFromRecord();\n // ngOnInit loads the targets for the first binding; reload only when the pipeline or entity changes after it\n const firstBinding = Object.values(changes).every((change) => change.firstChange);\n if (!firstBinding) {\n void this.LoadEscalationTargets();\n }\n }\n }\n\n public SyncFromRecord(): void {\n if (this.Record) {\n this.spec.Name = this.Record.Name || '';\n this.spec.Description = this.Record.Description || '';\n this.spec.PromptID = this.Record.PromptID || '';\n\n if (this.Record.Configuration) {\n const parsed = SafeJSONParse<DataFeatureSpec>(this.Record.Configuration);\n if (parsed && typeof parsed === 'object') {\n this.spec.Outputs = Array.isArray(parsed.Outputs) ? parsed.Outputs : [];\n this.spec.Context = parsed.Context ?? {};\n this.spec.Caching = parsed.Caching ?? { Cacheable: false };\n this.spec.ProcessorExtensionKey = parsed.ProcessorExtensionKey;\n this.spec.PipelineType = parsed.PipelineType;\n if (parsed.Escalation) {\n this.spec.Escalation = { ...parsed.Escalation };\n } else {\n delete this.spec.Escalation;\n }\n // Carried so the capability check sees what the runtime sees, and the next edit keeps them\n this.spec.CaptureReasoning = parsed.CaptureReasoning;\n this.spec.Watermark = parsed.Watermark;\n }\n }\n }\n\n if (!this.spec.Outputs) {\n this.spec.Outputs = [];\n }\n if (!this.spec.Context) {\n this.spec.Context = {};\n }\n\n if (this.spec.Context.EntityDocumentID) {\n this.ContextMode = 'document';\n } else if (this.spec.Context.QueryID) {\n this.ContextMode = 'query';\n } else {\n this.ContextMode = 'fields';\n }\n\n this.FieldsCsv = (this.spec.Context.Fields ?? []).join(', ');\n this.CacheKeyFieldsCsv = (this.spec.Caching.KeyFields ?? []).join(', ');\n\n const targetEntityID = this.Record?.EntityID || this.EntityID;\n if (targetEntityID) {\n const entity = this.ProviderToUse.EntityByID(targetEntityID);\n this.EntityFields = entity?.Fields ? [...entity.Fields].sort((a, b) => a.Name.localeCompare(b.Name)) : [];\n } else {\n this.EntityFields = [];\n }\n\n if (this.Record?.PromptID) {\n this.SelectedPrompt = this.AvailablePrompts.find((p) => UUIDsEqual(p.ID, this.Record?.PromptID)) ?? null;\n }\n\n this.ensureLoadedTypeIncluded();\n this.recomputeValidation();\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link SyncFromRecord}. */\n public syncFromRecord(): void {\n return this.SyncFromRecord();\n }\n\n private async loadPipelineTypes(): Promise<void> {\n let activeRows: MJFeaturePipelineTypeEntity[] = [];\n try {\n await KnowledgeHubMetadataEngine.Instance.Config(false, this.ProviderToUse.CurrentUser, this.ProviderToUse);\n const engineTypes = KnowledgeHubMetadataEngine.Instance.FeaturePipelineTypes;\n if (Array.isArray(engineTypes)) {\n activeRows = engineTypes.filter((t) => t.Status === 'Active');\n }\n } catch (error) {\n LogError('Error loading Feature Pipeline Types from KnowledgeHubMetadataEngine', undefined, error);\n }\n\n if (activeRows.length > 0) {\n this.AvailablePipelineTypes = activeRows.map((t) => ({\n Name: t.Name,\n Description: t.Description || null,\n }));\n if (!this.AvailablePipelineTypes.some((t) => t.Name.toLowerCase() === 'llm')) {\n this.AvailablePipelineTypes.unshift({\n Name: 'LLM',\n Description: null,\n });\n }\n } else {\n this.AvailablePipelineTypes = [\n {\n Name: 'LLM',\n Description: null,\n },\n ];\n }\n this.ensureLoadedTypeIncluded();\n }\n\n private ensureLoadedTypeIncluded(): void {\n const typeName = this.spec.PipelineType?.trim();\n if (!typeName || typeName.toLowerCase() === 'llm') {\n return;\n }\n const exists = this.AvailablePipelineTypes.some((t) => t.Name.toLowerCase() === typeName.toLowerCase());\n if (exists) {\n return;\n }\n\n let isInactive = false;\n let desc: string | null = null;\n try {\n const engineTypes = KnowledgeHubMetadataEngine.Instance.FeaturePipelineTypes;\n if (Array.isArray(engineTypes)) {\n const match = engineTypes.find((t) => t.Name?.trim().toLowerCase() === typeName.toLowerCase());\n if (match) {\n isInactive = match.Status !== 'Active';\n desc = match.Description || null;\n }\n }\n } catch {\n // Ignore\n }\n\n const label = isInactive ? `${typeName} (inactive)` : `${typeName} (unrecognized)`;\n this.AvailablePipelineTypes.push({\n Name: typeName,\n DisplayName: label,\n Description: desc,\n });\n }\n\n private async loadPrompts(): Promise<void> {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const res = await rv.RunView<PromptOption>({\n EntityName: 'MJ: AI Prompts',\n Fields: ['ID', 'Name', 'Description'],\n ResultType: 'simple',\n });\n if (res.Success && Array.isArray(res.Results)) {\n this.AvailablePrompts = res.Results;\n } else {\n this.AvailablePrompts = [];\n LogError(`Failed to load AI Prompts: ${res.ErrorMessage || 'unknown error'}`);\n }\n } catch (error) {\n this.AvailablePrompts = [];\n LogError('Error loading AI Prompts', undefined, error);\n }\n }\n\n private async loadEntityDocs(): Promise<void> {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const res = await rv.RunView<EntityDocOption>({\n EntityName: 'MJ: Entity Documents',\n Fields: ['ID', 'Name', 'EntityID'],\n ResultType: 'simple',\n });\n if (res.Success && Array.isArray(res.Results)) {\n this.AvailableDocs = res.Results;\n } else {\n this.AvailableDocs = [];\n LogError(`Failed to load Entity Documents: ${res.ErrorMessage || 'unknown error'}`);\n }\n } catch (error) {\n this.AvailableDocs = [];\n LogError('Error loading Entity Documents', undefined, error);\n }\n }\n\n /**\n * Loads the Infer pipelines on this pipeline's entity that it could escalate to. With no entity there is\n * nothing to offer, so nothing is loaded. A failed load is recorded in {@link EscalationTargetsLoadError},\n * not taken to mean there are no targets. Only the latest load's result is kept.\n */\n public async LoadEscalationTargets(): Promise<void> {\n const seq = ++this.escalationTargetsLoadSeq;\n const targetEntityID = this.Record?.EntityID || this.EntityID;\n const outcome = targetEntityID\n ? await this.fetchEscalationTargets(targetEntityID)\n : { Targets: [], Error: null };\n if (seq !== this.escalationTargetsLoadSeq) {\n return; // a later load, for a later Record or entity, has superseded this one\n }\n this.AvailableEscalationTargets = outcome.Targets;\n this.EscalationTargetsLoadError = outcome.Error;\n this.EscalationTargetsLoaded = outcome.Error === null;\n this.recomputeValidation();\n this.cdr.detectChanges();\n }\n\n /** The Infer pipelines on the entity, other than this one, each with its parsed spec; or why they could not be read. */\n private async fetchEscalationTargets(entityID: string): Promise<{ Targets: EscalationTargetCandidate[]; Error: string | null }> {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const res = await rv.RunView<EscalationTargetCandidate>({\n EntityName: 'MJ: Record Processes',\n Fields: ['ID', 'Name', 'Description', 'Entity', 'EntityID', 'WorkType', 'Status', 'PromptID', 'Configuration'],\n ExtraFilter: `WorkType='Infer' AND EntityID='${EscapeSQLString(entityID)}'`,\n OrderBy: 'Name',\n ResultType: 'simple',\n });\n if (!res.Success) {\n const reason = res.ErrorMessage || 'unknown error';\n LogError(`Failed to load Escalation Targets: ${reason}`);\n return { Targets: [], Error: reason };\n }\n const currentID = this.Record?.ID;\n const targets = (res.Results ?? [])\n .filter((r) => !currentID || !UUIDsEqual(r.ID, currentID))\n .map((r) => ({ ...r, ParsedSpec: this.parseTargetSpec(r.Configuration) }));\n return { Targets: targets, Error: null };\n } catch (error) {\n LogError('Error loading Escalation Targets', undefined, error);\n return { Targets: [], Error: error instanceof Error ? error.message : String(error) };\n }\n }\n\n /** A target's Configuration as a spec, or undefined when it is empty or not a JSON object. */\n private parseTargetSpec(configuration: string | null | undefined): DataFeatureSpec | undefined {\n const parsed = configuration ? SafeJSONParse<DataFeatureSpec>(configuration) : null;\n return parsed && typeof parsed === 'object' ? parsed : undefined;\n }\n\n /**\n * Why a pipeline cannot be this pipeline's escalation target, or null when it can. Beyond the shared row and\n * output checks, its own spec must pass `ValidateSpec`, as the engine requires before it builds the target.\n */\n public GetTargetProblem(target: EscalationTargetCandidate): string | null {\n const targetEntityID = this.Record?.EntityID || this.EntityID || '';\n const rowProblem = FindEscalationTargetRowProblem(target, targetEntityID);\n if (rowProblem) {\n return rowProblem;\n }\n const specError = target.ParsedSpec ? validateSpec(target.ParsedSpec).find((issue) => issue.Severity === 'error') : undefined;\n if (specError) {\n return `has an invalid spec: ${specError.Message}`;\n }\n return FindEscalationTargetSpecProblem(target.ParsedSpec, this.spec.Outputs ?? []);\n }\n\n public OnEscalationToggle(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n if (checked) {\n this.spec.Escalation = {\n PipelineID: this.spec.Escalation?.PipelineID || '',\n BelowConfidence: this.spec.Escalation?.BelowConfidence ?? 0.7,\n };\n } else {\n delete this.spec.Escalation;\n }\n this.emitChanges();\n }\n\n public OnEscalationTargetChange(event: Event): void {\n const val = (event.target as HTMLSelectElement).value;\n if (!this.spec.Escalation) {\n this.spec.Escalation = {\n PipelineID: val,\n BelowConfidence: 0.7,\n };\n } else {\n this.spec.Escalation.PipelineID = val;\n }\n this.emitChanges();\n }\n\n /** Sets the confidence floor from its input, as a number; a blank or invalid entry is NaN, which the spec check reports. */\n public OnEscalationFloorChange(event: Event): void {\n const floor = ParseConfidenceFloor((event.target as HTMLInputElement).value);\n this.spec.Escalation = { PipelineID: this.spec.Escalation?.PipelineID ?? '', BelowConfidence: floor };\n this.emitChanges();\n }\n\n public OnContextModeChange(event: Event): void {\n this.ContextMode = (event.target as HTMLSelectElement).value as 'fields' | 'document' | 'query';\n if (!this.spec.Context) this.spec.Context = {};\n if (this.ContextMode === 'fields') {\n this.spec.Context.EntityDocumentID = undefined;\n this.spec.Context.QueryID = undefined;\n } else if (this.ContextMode === 'document') {\n this.spec.Context.QueryID = undefined;\n } else if (this.ContextMode === 'query') {\n this.spec.Context.EntityDocumentID = undefined;\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link OnContextModeChange}. */\n public onContextModeChange(event: Event): void {\n return this.OnContextModeChange(event);\n }\n\n public OnEntityDocChange(event: Event): void {\n if (!this.spec.Context) this.spec.Context = {};\n this.spec.Context.EntityDocumentID = (event.target as HTMLSelectElement).value;\n this.emitChanges();\n }\n\n /** @deprecated Use {@link OnEntityDocChange}. */\n public onEntityDocChange(event: Event): void {\n return this.OnEntityDocChange(event);\n }\n\n public OnQueryIDChange(event: Event): void {\n if (!this.spec.Context) this.spec.Context = {};\n this.spec.Context.QueryID = (event.target as HTMLInputElement).value;\n this.emitChanges();\n }\n\n /** @deprecated Use {@link OnQueryIDChange}. */\n public onQueryIDChange(event: Event): void {\n return this.OnQueryIDChange(event);\n }\n\n public OnFieldsCsvChange(event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.FieldsCsv = val;\n if (!this.spec.Context) this.spec.Context = {};\n this.spec.Context.Fields = val\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n this.emitChanges();\n }\n\n /** @deprecated Use {@link OnFieldsCsvChange}. */\n public onFieldsCsvChange(event: Event): void {\n return this.OnFieldsCsvChange(event);\n }\n\n public OnPromptChange(event: Event): void {\n const promptID = (event.target as HTMLSelectElement).value;\n if (this.Record) {\n this.Record.PromptID = promptID;\n }\n this.spec.PromptID = promptID;\n this.SelectedPrompt = this.AvailablePrompts.find((p) => UUIDsEqual(p.ID, promptID)) ?? null;\n this.emitChanges();\n }\n\n /** @deprecated Use {@link OnPromptChange}. */\n public onPromptChange(event: Event): void {\n return this.OnPromptChange(event);\n }\n\n public addOutput(): void {\n const newOutput: DataFeatureOutput = {\n Name: `Output_${this.spec.Outputs.length + 1}`,\n Ref: '$',\n Target: {\n Mode: 'field',\n EntityFieldName: this.EntityFields.length > 0 ? this.EntityFields[0].Name : '',\n },\n };\n if (this.IsDecisionPipeline) {\n newOutput.Constraint = {\n Type: 'boolean',\n OnViolation: 'fail',\n };\n }\n this.spec.Outputs.push(newOutput);\n this.emitChanges();\n }\n\n public RemoveOutput(index: number): void {\n this.spec.Outputs.splice(index, 1);\n this.emitChanges();\n }\n\n /** @deprecated Use {@link RemoveOutput}. */\n public removeOutput(index: number): void {\n return this.RemoveOutput(index);\n }\n\n public UpdateOutputProp(index: number, prop: 'Name' | 'Ref', event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.spec.Outputs[index][prop] = val;\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateOutputProp}. */\n public updateOutputProp(index: number, prop: 'Name' | 'Ref', event: Event): void {\n return this.UpdateOutputProp(index, prop, event);\n }\n\n public UpdateTargetMode(index: number, event: Event): void {\n const mode = (event.target as HTMLSelectElement).value as OutputTarget['Mode'];\n const current = this.spec.Outputs[index];\n if (mode === 'field') {\n current.Target = {\n Mode: 'field',\n EntityFieldName: this.EntityFields.length > 0 ? this.EntityFields[0].Name : '',\n };\n } else if (mode === 'child') {\n current.Target = {\n Mode: 'child',\n EntityName: this.AvailableEntities.length > 0 ? this.AvailableEntities[0].Name : '',\n ParentField: 'ParentID',\n Map: {},\n };\n } else if (mode === 'tags') {\n current.Target = {\n Mode: 'tags',\n RootTagID: '',\n };\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateTargetMode}. */\n public updateTargetMode(index: number, event: Event): void {\n return this.UpdateTargetMode(index, event);\n }\n\n public UpdateFieldTarget(index: number, event: Event): void {\n const fieldName = (event.target as HTMLSelectElement).value;\n const target = this.spec.Outputs[index].Target;\n if (target.Mode === 'field') {\n target.EntityFieldName = fieldName;\n if (this.spec.Outputs[index].Constraint?.Type === 'enum') {\n this.prefillEnumValuesFromField(this.spec.Outputs[index]);\n }\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateFieldTarget}. */\n public updateFieldTarget(index: number, event: Event): void {\n return this.UpdateFieldTarget(index, event);\n }\n\n public UpdateChildTargetEntity(index: number, event: Event): void {\n const entityName = (event.target as HTMLSelectElement).value;\n const target = this.spec.Outputs[index].Target;\n if (target.Mode === 'child') {\n target.EntityName = entityName;\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateChildTargetEntity}. */\n public updateChildTargetEntity(index: number, event: Event): void {\n return this.UpdateChildTargetEntity(index, event);\n }\n\n public UpdateConstraintType(index: number, event: Event): void {\n const type = (event.target as HTMLSelectElement).value;\n const output = this.spec.Outputs[index];\n if (type === 'none') {\n output.Constraint = undefined;\n } else if (type === 'enum') {\n output.Constraint = { Type: 'enum', Values: [], OnViolation: 'fail' };\n this.prefillEnumValuesFromField(output);\n } else if (type === 'numeric') {\n if (this.IsDecisionPipeline) {\n output.Constraint = { Type: 'numeric', Levels: ['Low', 'Medium', 'High'], OnViolation: 'fail' };\n } else {\n output.Constraint = { Type: 'numeric', Min: 0, Max: 100, OnViolation: 'fail' };\n }\n } else if (type === 'boolean') {\n output.Constraint = { Type: 'boolean', OnViolation: 'fail' };\n } else if (type === 'freetext') {\n output.Constraint = { Type: 'freetext', MaxLength: 500, OnViolation: 'fail' };\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateConstraintType}. */\n public updateConstraintType(index: number, event: Event): void {\n return this.UpdateConstraintType(index, event);\n }\n\n public UpdateViolationPolicy(index: number, event: Event): void {\n const policy = (event.target as HTMLSelectElement).value as ViolationPolicy;\n if (this.spec.Outputs[index].Constraint) {\n this.spec.Outputs[index].Constraint.OnViolation = policy;\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateViolationPolicy}. */\n public updateViolationPolicy(index: number, event: Event): void {\n return this.UpdateViolationPolicy(index, event);\n }\n\n public GetEnumValuesCsv(constraint?: ValueConstraint): string {\n if (!constraint || constraint.Type !== 'enum' || !Array.isArray(constraint.Values)) {\n return '';\n }\n return constraint.Values.join(', ');\n }\n\n /** @deprecated Use {@link GetEnumValuesCsv}. */\n public getEnumValuesCsv(constraint?: ValueConstraint): string {\n return this.GetEnumValuesCsv(constraint);\n }\n\n public GetNumericMin(constraint?: ValueConstraint): number | string {\n return constraint && constraint.Type === 'numeric' && constraint.Min !== undefined ? constraint.Min : '';\n }\n\n /** @deprecated Use {@link GetNumericMin}. */\n public getNumericMin(constraint?: ValueConstraint): number | string {\n return this.GetNumericMin(constraint);\n }\n\n public GetNumericMax(constraint?: ValueConstraint): number | string {\n return constraint && constraint.Type === 'numeric' && constraint.Max !== undefined ? constraint.Max : '';\n }\n\n /** @deprecated Use {@link GetNumericMax}. */\n public getNumericMax(constraint?: ValueConstraint): number | string {\n return this.GetNumericMax(constraint);\n }\n\n public UpdateEnumValues(index: number, event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n const output = this.spec.Outputs[index];\n if (!output.Constraint || output.Constraint.Type !== 'enum') {\n output.Constraint = { Type: 'enum', Values: [], OnViolation: 'fail' };\n }\n output.Constraint.Values = val\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateEnumValues}. */\n public updateEnumValues(index: number, event: Event): void {\n return this.UpdateEnumValues(index, event);\n }\n\n public UpdateNumericMin(index: number, event: Event): void {\n const val = parseFloat((event.target as HTMLInputElement).value);\n const output = this.spec.Outputs[index];\n if (output.Constraint && output.Constraint.Type === 'numeric') {\n output.Constraint.Min = isNaN(val) ? undefined : val;\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateNumericMin}. */\n public updateNumericMin(index: number, event: Event): void {\n return this.UpdateNumericMin(index, event);\n }\n\n public UpdateNumericMax(index: number, event: Event): void {\n const val = parseFloat((event.target as HTMLInputElement).value);\n const output = this.spec.Outputs[index];\n if (output.Constraint && output.Constraint.Type === 'numeric') {\n output.Constraint.Max = isNaN(val) ? undefined : val;\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateNumericMax}. */\n public updateNumericMax(index: number, event: Event): void {\n return this.UpdateNumericMax(index, event);\n }\n\n public UpdateWatermarkStrategy(event: Event): void {\n if (this.Record) {\n this.Record.WatermarkStrategy = (event.target as HTMLSelectElement).value as MJRecordProcessEntity['WatermarkStrategy'];\n }\n }\n\n /** @deprecated Use {@link UpdateWatermarkStrategy}. */\n public updateWatermarkStrategy(event: Event): void {\n return this.UpdateWatermarkStrategy(event);\n }\n\n public UpdateSkipUnchanged(event: Event): void {\n if (this.Record) {\n this.Record.SkipUnchanged = (event.target as HTMLSelectElement).value === 'true';\n }\n }\n\n /** @deprecated Use {@link UpdateSkipUnchanged}. */\n public updateSkipUnchanged(event: Event): void {\n return this.UpdateSkipUnchanged(event);\n }\n\n public UpdateCacheable(event: Event): void {\n if (!this.spec.Caching) this.spec.Caching = { Cacheable: false };\n this.spec.Caching.Cacheable = (event.target as HTMLSelectElement).value === 'true';\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateCacheable}. */\n public updateCacheable(event: Event): void {\n return this.UpdateCacheable(event);\n }\n\n public UpdateCacheKeyFields(event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.CacheKeyFieldsCsv = val;\n if (!this.spec.Caching) this.spec.Caching = { Cacheable: true };\n this.spec.Caching.KeyFields = val\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateCacheKeyFields}. */\n public updateCacheKeyFields(event: Event): void {\n return this.UpdateCacheKeyFields(event);\n }\n\n public UpdateCacheTTL(event: Event): void {\n const val = parseInt((event.target as HTMLInputElement).value, 10);\n if (!this.spec.Caching) this.spec.Caching = { Cacheable: true };\n this.spec.Caching.TTLSeconds = isNaN(val) ? 86400 : val;\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateCacheTTL}. */\n public updateCacheTTL(event: Event): void {\n return this.UpdateCacheTTL(event);\n }\n\n public UpdateCacheScope(event: Event): void {\n const val = (event.target as HTMLSelectElement).value as 'pipeline' | 'prompt';\n if (!this.spec.Caching) this.spec.Caching = { Cacheable: true };\n this.spec.Caching.Scope = val;\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateCacheScope}. */\n public updateCacheScope(event: Event): void {\n return this.UpdateCacheScope(event);\n }\n\n /** Turns capture of the model's rationale on or off. Off removes the flag, so a spec that never set it keeps its hash. */\n public UpdateCaptureReasoning(event: Event): void {\n if ((event.target as HTMLSelectElement).value === 'true') {\n this.spec.CaptureReasoning = true;\n } else {\n delete this.spec.CaptureReasoning;\n }\n this.emitChanges();\n }\n\n public OnPipelineTypeSelect(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const newType = target.value;\n const currentType = this.CurrentPipelineTypeName;\n if (newType.toLowerCase() === currentType.toLowerCase()) {\n return;\n }\n\n const isNewTypeLLM = newType.trim().toLowerCase() === 'llm';\n const candidateSpec: DataFeatureSpec = {\n ...this.spec,\n PipelineType: isNewTypeLLM ? undefined : newType.trim(),\n };\n if (newType.trim().toLowerCase() !== 'decision') {\n delete candidateSpec.Escalation;\n }\n\n const newCapabilities = GetFeaturePipelineCapabilities(newType);\n const lookup = this.buildFieldValuesLookup();\n const capIssues = ValidateOutputsAgainstCapabilities(candidateSpec, newCapabilities, lookup);\n\n let specIssues: string[] = [];\n const entity = this.Record?.EntityID ? this.ProviderToUse.EntityByID(this.Record.EntityID) : null;\n if (entity) {\n const stub: EntityMetadataStub = {\n Name: entity.Name,\n Fields: (entity.Fields ?? []).map((f) => ({\n Name: f.Name,\n TSType: f.TSType,\n IsVirtual: f.IsVirtual,\n AllowsNull: f.AllowsNull,\n RelatedEntity: f.RelatedEntity,\n RelatedEntityID: f.RelatedEntityID,\n EntityFieldValues: f.EntityFieldValues ? f.EntityFieldValues.map((v) => ({ Value: v.Value, Code: v.Code })) : undefined,\n })),\n };\n specIssues = validateSpec(candidateSpec, stub).filter((i) => i.Severity === 'error').map((i) => i.Message);\n }\n\n const allIssues = Array.from(new Set([...capIssues, ...specIssues]));\n\n if (allIssues.length > 0) {\n target.value = currentType;\n this.PendingPipelineType = newType;\n this.TypeSwitchIssues = allIssues;\n this.ShowTypeSwitchConfirm = true;\n this.cdr.detectChanges();\n } else {\n this.ApplyPipelineTypeChange(newType);\n }\n }\n\n public OnTypeSwitchConfirmed(): void {\n this.ShowTypeSwitchConfirm = false;\n if (this.PendingPipelineType) {\n this.ApplyPipelineTypeChange(this.PendingPipelineType);\n this.PendingPipelineType = null;\n }\n this.TypeSwitchIssues = [];\n this.cdr.detectChanges();\n }\n\n public OnTypeSwitchCancelled(): void {\n this.ShowTypeSwitchConfirm = false;\n this.PendingPipelineType = null;\n this.TypeSwitchIssues = [];\n this.cdr.detectChanges();\n }\n\n public ApplyPipelineTypeChange(newType: string): void {\n if (newType.trim().toLowerCase() === 'llm') {\n delete this.spec.PipelineType;\n } else {\n this.spec.PipelineType = newType.trim();\n }\n if (!this.IsDecisionPipeline) {\n delete this.spec.Escalation;\n }\n this.emitChanges();\n }\n\n public GetNumericLevels(output: DataFeatureOutput): string[] {\n if (!output.Constraint || output.Constraint.Type !== 'numeric' || !Array.isArray(output.Constraint.Levels)) {\n return [];\n }\n return output.Constraint.Levels;\n }\n\n public AddNumericLevel(index: number): void {\n const output = this.spec.Outputs[index];\n if (output?.Constraint?.Type === 'numeric') {\n if (!Array.isArray(output.Constraint.Levels) || output.Constraint.Levels.length === 0) {\n output.Constraint.Levels = ['Low', 'Medium', 'High'];\n this.emitChanges();\n return;\n }\n if (output.Constraint.Levels.length < 10) {\n output.Constraint.Levels.push(`Level ${output.Constraint.Levels.length + 1}`);\n this.emitChanges();\n }\n }\n }\n\n public RemoveNumericLevel(outputIndex: number, levelIndex: number): void {\n const output = this.spec.Outputs[outputIndex];\n if (output?.Constraint?.Type === 'numeric' && Array.isArray(output.Constraint.Levels)) {\n if (output.Constraint.Levels.length > 2) {\n output.Constraint.Levels.splice(levelIndex, 1);\n this.emitChanges();\n }\n }\n }\n\n public UpdateNumericLevel(outputIndex: number, levelIndex: number, event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n const output = this.spec.Outputs[outputIndex];\n if (output?.Constraint?.Type === 'numeric' && Array.isArray(output.Constraint.Levels)) {\n output.Constraint.Levels[levelIndex] = val;\n this.emitChanges();\n }\n }\n\n public MoveNumericLevel(outputIndex: number, levelIndex: number, direction: 'up' | 'down'): void {\n const output = this.spec.Outputs[outputIndex];\n if (output?.Constraint?.Type === 'numeric' && Array.isArray(output.Constraint.Levels)) {\n const targetIndex = direction === 'up' ? levelIndex - 1 : levelIndex + 1;\n if (targetIndex >= 0 && targetIndex < output.Constraint.Levels.length) {\n const item = output.Constraint.Levels.splice(levelIndex, 1)[0];\n output.Constraint.Levels.splice(targetIndex, 0, item);\n this.emitChanges();\n }\n }\n }\n\n public GetEnumValues(output: DataFeatureOutput): string[] {\n if (output.Constraint && output.Constraint.Type === 'enum' && Array.isArray(output.Constraint.Values)) {\n return output.Constraint.Values;\n }\n return [];\n }\n\n public GetEnumValueDescription(output: DataFeatureOutput, val: string): string {\n if (output.Constraint && output.Constraint.Type === 'enum') {\n return output.Constraint.ValueDescriptions?.[val] ?? '';\n }\n return '';\n }\n\n public UpdateEnumValueDescription(outputIndex: number, val: string, event: Event): void {\n const desc = (event.target as HTMLInputElement).value;\n const output = this.spec.Outputs[outputIndex];\n if (output?.Constraint && output.Constraint.Type === 'enum') {\n if (!output.Constraint.ValueDescriptions) {\n output.Constraint.ValueDescriptions = {};\n }\n output.Constraint.ValueDescriptions[val] = desc;\n this.emitChanges();\n }\n }\n\n public GetBooleanThreshold(output: DataFeatureOutput): number | null {\n if (output.Constraint && output.Constraint.Type === 'boolean' && output.Constraint.Threshold !== undefined) {\n return output.Constraint.Threshold;\n }\n return null;\n }\n\n public UpdateBooleanThreshold(outputIndex: number, event: Event): void {\n const raw = (event.target as HTMLInputElement).value.trim();\n const output = this.spec.Outputs[outputIndex];\n if (output?.Constraint && output.Constraint.Type === 'boolean') {\n if (raw === '') {\n delete output.Constraint.Threshold;\n } else {\n const val = parseFloat(raw);\n output.Constraint.Threshold = isNaN(val) ? undefined : val;\n }\n this.emitChanges();\n }\n }\n\n private prefillEnumValuesFromField(output: DataFeatureOutput): void {\n if (output.Target.Mode !== 'field' || output.Constraint?.Type !== 'enum') {\n return;\n }\n const fieldName = output.Target.EntityFieldName;\n if (!fieldName) {\n return;\n }\n const field = this.EntityFields.find((f) => f.Name === fieldName);\n if (field && Array.isArray(field.EntityFieldValues) && field.EntityFieldValues.length > 0) {\n if (!output.Constraint.Values || output.Constraint.Values.length === 0) {\n output.Constraint.Values = field.EntityFieldValues.map((v) => v.Value);\n }\n if (this.IsDecisionPipeline) {\n if (!output.Constraint.ValueDescriptions) {\n output.Constraint.ValueDescriptions = {};\n }\n for (const v of field.EntityFieldValues) {\n if (!output.Constraint.ValueDescriptions[v.Value] && v.Description) {\n output.Constraint.ValueDescriptions[v.Value] = v.Description;\n }\n }\n }\n }\n }\n\n private emitChanges(): void {\n if (this.spec.PipelineType && this.spec.PipelineType.trim().toLowerCase() === 'llm') {\n delete this.spec.PipelineType;\n }\n if (!this.IsDecisionPipeline) {\n delete this.spec.Escalation;\n }\n if (this.Record) {\n this.spec.Name = this.Record.Name || '';\n this.spec.Description = this.Record.Description || '';\n this.spec.PromptID = this.Record.PromptID || '';\n this.Record.Configuration = JSON.stringify(this.spec);\n this.syncOutputMappingToRecord();\n }\n this.recomputeValidation();\n this.SpecChange.emit(this.spec);\n this.cdr.detectChanges();\n }\n\n /**\n * Automatically projects spec.Outputs into the record's OutputMapping JSON\n * so that WriteBackProcessor works out of the box without duplicate manual config.\n */\n private syncOutputMappingToRecord(): void {\n if (!this.Record) return;\n const fields: Record<string, string> = Object.create(null);\n for (const out of this.spec.Outputs) {\n if (out.Target.Mode === 'field' && out.Target.EntityFieldName) {\n fields[out.Target.EntityFieldName] = out.Ref;\n }\n }\n this.Record.OutputMapping = JSON.stringify({ fields });\n }\n\n private buildFieldValuesLookup(): FeaturePipelineFieldValueLookup {\n return (fieldName: string) => {\n const field = this.EntityFields.find((f) => f.Name.toLowerCase() === fieldName.toLowerCase());\n return field?.EntityFieldValues ? field.EntityFieldValues.map((v) => ({ Value: v.Value, Description: v.Description })) : undefined;\n };\n }\n\n private recomputeValidation(): void {\n this.RenderedConstraintPreview = renderConstraintBlock(this.spec.Outputs);\n const entity = this.Record?.EntityID ? this.ProviderToUse.EntityByID(this.Record.EntityID) : null;\n if (entity) {\n const stub: EntityMetadataStub = {\n Name: entity.Name,\n Fields: (entity.Fields ?? []).map((f) => ({\n Name: f.Name,\n TSType: f.TSType,\n IsVirtual: f.IsVirtual,\n AllowsNull: f.AllowsNull,\n RelatedEntity: f.RelatedEntity,\n RelatedEntityID: f.RelatedEntityID,\n EntityFieldValues: f.EntityFieldValues ? f.EntityFieldValues.map((v) => ({ Value: v.Value, Code: v.Code })) : undefined,\n })),\n };\n this.ValidationErrors = validateSpec(this.spec, stub);\n } else {\n this.ValidationErrors = validateSpec(this.spec);\n }\n\n const lookup = this.buildFieldValuesLookup();\n const capIssues = ValidateOutputsAgainstCapabilities(this.spec, this.CurrentCapabilities, lookup);\n for (const capIssue of capIssues) {\n this.ValidationErrors.push({\n Path: 'Outputs',\n Severity: 'error',\n Message: capIssue,\n FixRecommendation: 'Adjust output configuration to match the selected pipeline capabilities.',\n });\n }\n\n if (this.IsDecisionPipeline && this.spec.Escalation && this.spec.Escalation.PipelineID && this.EscalationTargetsLoadError) {\n // The targets are unknown, not absent: say so, and leave the target to be checked at run time\n this.ValidationErrors.push({\n Path: 'Escalation.PipelineID',\n Severity: 'warning',\n Message: `The escalation target could not be checked: the pipelines on this entity could not be loaded (${this.EscalationTargetsLoadError}).`,\n FixRecommendation: 'Reopen the pipeline to retry. The target is still checked when the pipeline runs.',\n });\n } else if (this.IsDecisionPipeline && this.spec.Escalation) {\n const targetID = this.spec.Escalation.PipelineID;\n if (targetID && this.EscalationTargetsLoaded) {\n const match = this.AvailableEscalationTargets.find((t) => UUIDsEqual(t.ID, targetID));\n if (!match) {\n this.ValidationErrors.push({\n Path: 'Escalation.PipelineID',\n Severity: 'error',\n Message: `Escalation target pipeline '${targetID}' was not found on this entity.`,\n FixRecommendation: 'Select a valid Active LLM Feature Pipeline on this entity.',\n });\n } else {\n const problem = this.GetTargetProblem(match);\n if (problem) {\n this.ValidationErrors.push({\n Path: 'Escalation.PipelineID',\n Severity: 'error',\n Message: `Escalation target pipeline '${match.Name}' ${problem}.`,\n FixRecommendation: 'Select an Active LLM Feature Pipeline that produces every output of this Decision pipeline.',\n });\n }\n }\n }\n }\n\n const hasErrors = this.ValidationErrors.some((i) => i.Severity === 'error');\n this.ValidChange.emit(!hasErrors);\n }\n}\n"]}
@@ -52,14 +52,24 @@ export declare class RecordProcessEditorComponent extends BaseAngularComponent i
52
52
  /** Resolves the record to edit: passed instance → by ID → a fresh draft. */
53
53
  private loadRecord;
54
54
  /** Generic setter for the simple string/enum fields, driven by the template inputs. */
55
+ Set(field: 'Name' | 'Description' | 'Status' | 'ScopeType' | 'ScopeFilter' | 'WorkType', event: Event): void;
56
+ /** @deprecated Use {@link Set}. */
55
57
  set(field: 'Name' | 'Description' | 'Status' | 'ScopeType' | 'ScopeFilter' | 'WorkType', event: Event): void;
58
+ OnEntityChange(event: Event): void;
59
+ /** @deprecated Use {@link OnEntityChange}. */
56
60
  onEntityChange(event: Event): void;
61
+ OnRulesChange(ruleSet: FieldRuleSet): void;
62
+ /** @deprecated Use {@link OnRulesChange}. */
57
63
  onRulesChange(ruleSet: FieldRuleSet): void;
64
+ OnFeaturePipelineSpecChange(spec: DataFeatureSpec): void;
65
+ /** @deprecated Use {@link OnFeaturePipelineSpecChange}. */
58
66
  onFeaturePipelineSpecChange(spec: DataFeatureSpec): void;
59
67
  /** Saves the record (and emits). Returns success. */
60
68
  Save(): Promise<boolean>;
61
69
  /** Saves (if needed) then mounts the dry-run runner against the process's default scope. */
62
70
  Preview(): Promise<void>;
71
+ OnPreviewDone(_result: EntityActionUXResult): void;
72
+ /** @deprecated Use {@link OnPreviewDone}. */
63
73
  onPreviewDone(_result: EntityActionUXResult): void;
64
74
  Cancel(): void;
65
75
  private resolveEntityName;
@@ -1 +1 @@
1
- {"version":3,"file":"record-process-editor.component.d.ts","sourceRoot":"","sources":["../../../src/lib/record-process-editor/record-process-editor.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAyD,YAAY,EAAS,MAAM,EAAkB,MAAM,eAAe,CAAC;AACnI,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAA2D,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAErK,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,mCAAmC,CAAC;;AAKzE,qBA+Ha,4BAA6B,SAAQ,oBAAqB,YAAW,MAAM;IACpF,OAAO,CAAC,GAAG,CAA6B;IAExC,6FAA6F;IACpF,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAQ;IACrD,wEAAwE;IAC/D,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/C,mFAAmF;IAC1E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/C,kGAAkG;IACzF,eAAe,EAAE,qBAAqB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAQ;IAC1E,sFAAsF;IAC7E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACjD,iGAAiG;IACxF,WAAW,UAAQ;IAE5B,8DAA8D;IACpD,KAAK,sCAA6C;IAC5D,qCAAqC;IAC3B,SAAS,qBAA4B;IAExC,QAAQ,EAAE,UAAU,EAAE,CAAM;IAC5B,kBAAkB,SAAM;IACxB,OAAO,EAAE,YAAY,CAAiB;IACtC,UAAU,UAAQ;IAClB,oBAAoB,UAAQ;IAC5B,mBAAmB,EAAE,eAAe,GAAG,IAAI,CAAQ;IACnD,MAAM,UAAS;IACf,YAAY,SAAM;IAClB,aAAa,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,qBAAqB,CAAA;KAAE,GAAG,IAAI,CAAQ;IAE5F,IAAI,OAAO,IAAI,OAAO,CAKrB;IACD,IAAI,UAAU,IAAI,OAAO,CAIxB;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,4EAA4E;YAC9D,UAAU;IAwBxB,uFAAuF;IACvF,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAe5G,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAOlC,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAM1C,2BAA2B,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAQxD,qDAAqD;IAC/C,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAmB9B,4FAA4F;IACtF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB9B,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAKlD,MAAM,IAAI,IAAI;IAEd,OAAO,CAAC,iBAAiB;yCAnKhB,4BAA4B;2CAA5B,4BAA4B;CAsKxC"}
1
+ {"version":3,"file":"record-process-editor.component.d.ts","sourceRoot":"","sources":["../../../src/lib/record-process-editor/record-process-editor.component.ts"],"names":[],"mappings":"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"}