@mmstack/form-core 20.4.0 → 20.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"mmstack-form-core.mjs","sources":["../tmp-esm2022/lib/util.js","../tmp-esm2022/lib/form-control.js","../tmp-esm2022/lib/form-array.js","../tmp-esm2022/lib/form-group.js","../tmp-esm2022/mmstack-form-core.js"],"sourcesContent":["/**\n * Merges two arrays element by element using the `mergeIfObject` logic.\n *\n * The resulting array will have the same length as the `next` array.\n * For each index `i`, the element in the resulting array is determined by:\n * `mergeIfObject(prev[i], next[i])`.\n * If `prev` is shorter than `next`, `prev[i]` will be `undefined` for the out-of-bounds indices.\n *\n * @template {any[]} T The array type being merged.\n * @param {T} prev The previous array.\n * @param {T} next The next array.\n * @returns {T} A new array containing the merged elements.\n * @example\n * const prev = [1, { id: 1, name: \"A\" }, [10], \"extraPrev\"];\n * const next = [2, { id: 1, status: \"B\" }, [20, 21], missing , { id: 2 }];\n *\n * mergeArray(prev, next);\n * // Result approx:\n * // [\n * // 2, // Primitive replaced\n * // { id: 1, name: \"A\", status: \"B\" }, // Objects shallow-merged\n * // [20, 21], // Arrays replaced (via mergeIfObject -> mergeArray)\n * // undefined, // Primitive replaced by missing item in sparse 'next' array\n * // { id: 2 } // Added from 'next' (prev[4] was undefined)\n * // ]\n */\nexport function mergeArray(prev, next) {\n return next.map((item, index) => mergeIfObject(prev[index], item));\n}\n/**\n * Merges two values (`prev`, `next`), prioritizing `next` in most cases.\n *\n * Behavior:\n * - If both `prev` and `next` are non-null, non-array objects, it performs a **shallow merge**\n * (`{ ...prev, ...next }`), where properties from `next` overwrite those in `prev`.\n * - If both `prev` and `next` are arrays, it delegates to `mergeArray` for element-wise merging.\n * - In all other scenarios (type mismatch, primitives, null involved, array mixed with object),\n * it simply returns the `next` value.\n *\n * @template T The type of the values being merged.\n * @param {T | undefined} prev The previous value (can be undefined if accessed out of array bounds).\n * @param {T} next The next value.\n * @returns {T} The merged result based on the rules above.\n */\nexport function mergeIfObject(prev, next) {\n if (typeof prev !== typeof next)\n return next;\n if (typeof prev !== 'object' || typeof next !== 'object')\n return next;\n if (prev === null || next === null)\n return next;\n if (Array.isArray(prev) && Array.isArray(next))\n return mergeArray(prev, next);\n if (Array.isArray(prev) || Array.isArray(next))\n return next;\n return { ...prev, ...next };\n}\n/**\n * Generates a unique ID using crypto.randomUUID if available,\n * otherwise falls back to a non-secure random string.\n * @returns {string}\n */\nexport function generateID() {\n if (globalThis.crypto?.randomUUID) {\n return globalThis.crypto.randomUUID();\n }\n return Math.random().toString(36).substring(2);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0vY29yZS9zcmMvbGliL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFrQixJQUFPLEVBQUUsSUFBTztJQUMxRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFhLEVBQUUsQ0FDekMsYUFBYSxDQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FDdkMsQ0FBQztBQUNULENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUksSUFBTyxFQUFFLElBQU87SUFDL0MsSUFBSSxPQUFPLElBQUksS0FBSyxPQUFPLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM3QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEUsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDaEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRTVELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFVBQVU7SUFDeEIsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZXJnZXMgdHdvIGFycmF5cyBlbGVtZW50IGJ5IGVsZW1lbnQgdXNpbmcgdGhlIGBtZXJnZUlmT2JqZWN0YCBsb2dpYy5cbiAqXG4gKiBUaGUgcmVzdWx0aW5nIGFycmF5IHdpbGwgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIGBuZXh0YCBhcnJheS5cbiAqIEZvciBlYWNoIGluZGV4IGBpYCwgdGhlIGVsZW1lbnQgaW4gdGhlIHJlc3VsdGluZyBhcnJheSBpcyBkZXRlcm1pbmVkIGJ5OlxuICogYG1lcmdlSWZPYmplY3QocHJldltpXSwgbmV4dFtpXSlgLlxuICogSWYgYHByZXZgIGlzIHNob3J0ZXIgdGhhbiBgbmV4dGAsIGBwcmV2W2ldYCB3aWxsIGJlIGB1bmRlZmluZWRgIGZvciB0aGUgb3V0LW9mLWJvdW5kcyBpbmRpY2VzLlxuICpcbiAqIEB0ZW1wbGF0ZSB7YW55W119IFQgVGhlIGFycmF5IHR5cGUgYmVpbmcgbWVyZ2VkLlxuICogQHBhcmFtIHtUfSBwcmV2IFRoZSBwcmV2aW91cyBhcnJheS5cbiAqIEBwYXJhbSB7VH0gbmV4dCBUaGUgbmV4dCBhcnJheS5cbiAqIEByZXR1cm5zIHtUfSBBIG5ldyBhcnJheSBjb250YWluaW5nIHRoZSBtZXJnZWQgZWxlbWVudHMuXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcHJldiA9IFsxLCB7IGlkOiAxLCBuYW1lOiBcIkFcIiB9LCBbMTBdLCAgICAgICAgXCJleHRyYVByZXZcIl07XG4gKiBjb25zdCBuZXh0ID0gWzIsIHsgaWQ6IDEsIHN0YXR1czogXCJCXCIgfSwgWzIwLCAyMV0sICBtaXNzaW5nICAsIHsgaWQ6IDIgfV07XG4gKlxuICogbWVyZ2VBcnJheShwcmV2LCBuZXh0KTtcbiAqIC8vIFJlc3VsdCBhcHByb3g6XG4gKiAvLyBbXG4gKiAvLyAgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByaW1pdGl2ZSByZXBsYWNlZFxuICogLy8gICB7IGlkOiAxLCBuYW1lOiBcIkFcIiwgc3RhdHVzOiBcIkJcIiB9LCAvLyBPYmplY3RzIHNoYWxsb3ctbWVyZ2VkXG4gKiAvLyAgIFsyMCwgMjFdLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXJyYXlzIHJlcGxhY2VkICh2aWEgbWVyZ2VJZk9iamVjdCAtPiBtZXJnZUFycmF5KVxuICogLy8gICB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByaW1pdGl2ZSByZXBsYWNlZCBieSBtaXNzaW5nIGl0ZW0gaW4gc3BhcnNlICduZXh0JyBhcnJheVxuICogLy8gICB7IGlkOiAyIH0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZGVkIGZyb20gJ25leHQnIChwcmV2WzRdIHdhcyB1bmRlZmluZWQpXG4gKiAvLyBdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFycmF5PFQgZXh0ZW5kcyBhbnlbXT4ocHJldjogVCwgbmV4dDogVCk6IFQge1xuICByZXR1cm4gbmV4dC5tYXAoKGl0ZW0sIGluZGV4KTogVFtudW1iZXJdID0+XG4gICAgbWVyZ2VJZk9iamVjdDxUW251bWJlcl0+KHByZXZbaW5kZXhdLCBpdGVtKSxcbiAgKSBhcyBUO1xufVxuXG4vKipcbiAqIE1lcmdlcyB0d28gdmFsdWVzIChgcHJldmAsIGBuZXh0YCksIHByaW9yaXRpemluZyBgbmV4dGAgaW4gbW9zdCBjYXNlcy5cbiAqXG4gKiBCZWhhdmlvcjpcbiAqIC0gSWYgYm90aCBgcHJldmAgYW5kIGBuZXh0YCBhcmUgbm9uLW51bGwsIG5vbi1hcnJheSBvYmplY3RzLCBpdCBwZXJmb3JtcyBhICoqc2hhbGxvdyBtZXJnZSoqXG4gKiAoYHsgLi4ucHJldiwgLi4ubmV4dCB9YCksIHdoZXJlIHByb3BlcnRpZXMgZnJvbSBgbmV4dGAgb3ZlcndyaXRlIHRob3NlIGluIGBwcmV2YC5cbiAqIC0gSWYgYm90aCBgcHJldmAgYW5kIGBuZXh0YCBhcmUgYXJyYXlzLCBpdCBkZWxlZ2F0ZXMgdG8gYG1lcmdlQXJyYXlgIGZvciBlbGVtZW50LXdpc2UgbWVyZ2luZy5cbiAqIC0gSW4gYWxsIG90aGVyIHNjZW5hcmlvcyAodHlwZSBtaXNtYXRjaCwgcHJpbWl0aXZlcywgbnVsbCBpbnZvbHZlZCwgYXJyYXkgbWl4ZWQgd2l0aCBvYmplY3QpLFxuICogaXQgc2ltcGx5IHJldHVybnMgdGhlIGBuZXh0YCB2YWx1ZS5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB0aGUgdmFsdWVzIGJlaW5nIG1lcmdlZC5cbiAqIEBwYXJhbSB7VCB8IHVuZGVmaW5lZH0gcHJldiBUaGUgcHJldmlvdXMgdmFsdWUgKGNhbiBiZSB1bmRlZmluZWQgaWYgYWNjZXNzZWQgb3V0IG9mIGFycmF5IGJvdW5kcykuXG4gKiBAcGFyYW0ge1R9IG5leHQgVGhlIG5leHQgdmFsdWUuXG4gKiBAcmV0dXJucyB7VH0gVGhlIG1lcmdlZCByZXN1bHQgYmFzZWQgb24gdGhlIHJ1bGVzIGFib3ZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJZk9iamVjdDxUPihwcmV2OiBULCBuZXh0OiBUKTogVCB7XG4gIGlmICh0eXBlb2YgcHJldiAhPT0gdHlwZW9mIG5leHQpIHJldHVybiBuZXh0O1xuICBpZiAodHlwZW9mIHByZXYgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXh0ICE9PSAnb2JqZWN0JykgcmV0dXJuIG5leHQ7XG4gIGlmIChwcmV2ID09PSBudWxsIHx8IG5leHQgPT09IG51bGwpIHJldHVybiBuZXh0O1xuICBpZiAoQXJyYXkuaXNBcnJheShwcmV2KSAmJiBBcnJheS5pc0FycmF5KG5leHQpKSByZXR1cm4gbWVyZ2VBcnJheShwcmV2LCBuZXh0KTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJldikgfHwgQXJyYXkuaXNBcnJheShuZXh0KSkgcmV0dXJuIG5leHQ7XG5cbiAgcmV0dXJuIHsgLi4ucHJldiwgLi4ubmV4dCB9O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBJRCB1c2luZyBjcnlwdG8ucmFuZG9tVVVJRCBpZiBhdmFpbGFibGUsXG4gKiBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBhIG5vbi1zZWN1cmUgcmFuZG9tIHN0cmluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUlEKCkge1xuICBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8/LnJhbmRvbVVVSUQpIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tVVVJRCgpO1xuICB9XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XG59XG4iXX0=","import { computed, isSignal, signal, untracked, } from '@angular/core';\nimport { generateID } from './util';\n/**\n * Creates a `FormControlSignal`, a reactive form control that holds a value and tracks its\n * validity, dirty state, touched state, and other metadata.\n *\n * @typeParam T - The type of the form control's value.\n * @typeParam TParent - The type of the parent form control's value (if this control is part of a group or array).\n * @typeParam TControlType - The type of the control. Defaults to `'control'`.\n * @typeParam TPartialValue - The type of value when patching\n * @param initial - The initial value of the control, or a `DerivedSignal` if this control is part of a `formGroup` or `formArray`.\n * @param options - Optional configuration options for the control.\n * @returns A `FormControlSignal` instance.\n *\n * @example\n * // Create a simple form control:\n * const name = formControl('Initial Name');\n *\n * // Create a form control with validation:\n * const age = formControl(0, {\n * validator: () => (value) => value >= 18 ? '' : 'Must be at least 18',\n * });\n *\n * // Create a derived form control (equivalent to the above, but more explicit):\n * const user = signal({ name: 'John Doe', age: 30 });\n * const name = formControl(derived(user, {\n * from: (u) => u.name,\n * onChange: (newName) => user.update(u => ({...u, name: newName}))\n * }));\n *\n * // Create a form group with nested controls:\n * const user = signal({ name: 'John Doe', age: 30 });\n * const form = formGroup(user, {\n * name: formControl(derived(user, 'name')),\n * age: formControl(derived(user, 'age')),\n * })\n */\nexport function formControl(initial, opt) {\n const value = isSignal(initial) ? initial : signal(initial, opt);\n const initialValue = signal(untracked(value), ...(ngDevMode ? [{ debugName: \"initialValue\" }] : []));\n const eq = opt?.equal ?? Object.is;\n const dirtyEq = opt?.dirtyEquality ?? eq;\n const disabled = computed(() => opt?.disable?.() ?? false, ...(ngDevMode ? [{ debugName: \"disabled\" }] : []));\n const readonly = computed(() => opt?.readonly?.() ?? false, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n const dirty = computed(() => !dirtyEq(value(), initialValue()), ...(ngDevMode ? [{ debugName: \"dirty\" }] : []));\n const touched = signal(false, ...(ngDevMode ? [{ debugName: \"touched\" }] : []));\n const validator = computed(() => opt?.validator?.() ?? (() => ''), ...(ngDevMode ? [{ debugName: \"validator\" }] : []));\n const error = computed(() => {\n if (opt?.overrideValidation)\n return opt.overrideValidation();\n if (disabled() || readonly())\n return '';\n return validator()(value());\n }, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n const markAsTouched = () => {\n touched.set(true);\n opt?.onTouched?.();\n };\n const markAllAsTouched = markAsTouched;\n const markAsPristine = () => touched.set(false);\n const markAllAsPristine = markAsPristine;\n const label = computed(() => opt?.label?.() ?? '', ...(ngDevMode ? [{ debugName: \"label\" }] : []));\n const partialValue = computed(() => (dirty() ? value() : undefined), ...(ngDevMode ? [{ debugName: \"partialValue\" }] : []));\n const internalReconcile = (newValue, force = false) => {\n const isDirty = untracked(dirty);\n if (!isDirty || force) {\n // very dangerous use of untracked here, don't do this everywhere :)\n // thanks to u/synalx for the idea to use untracked here\n untracked(() => {\n initialValue.set(newValue);\n value.set(newValue);\n });\n }\n };\n const pending = computed(() => opt?.pending?.() ?? false, ...(ngDevMode ? [{ debugName: \"pending\" }] : []));\n return {\n id: opt?.id?.() ?? generateID(),\n value,\n dirty,\n touched,\n error,\n label,\n required: computed(() => opt?.required?.() ?? false),\n disabled,\n readonly,\n pending,\n valid: computed(() => !pending() && !error()),\n hint: computed(() => opt?.hint?.() ?? ''),\n markAsTouched,\n markAllAsTouched,\n markAsPristine,\n markAllAsPristine,\n from: (isSignal(initial) ? initial.from : undefined),\n reconcile: (newValue) => internalReconcile(newValue),\n forceReconcile: (newValue) => internalReconcile(newValue, true),\n reset: () => {\n opt?.onReset?.();\n value.set(untracked(initialValue));\n },\n resetWithInitial: (initial) => {\n opt?.onReset?.();\n initialValue.set(initial);\n value.set(initial);\n },\n equal: eq,\n controlType: (opt?.controlType ?? 'control'),\n partialValue: partialValue,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybS9jb3JlL3NyYy9saWIvZm9ybS1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEdBS1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQTRHcEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQU16QixPQUFzQyxFQUN0QyxHQUErQztJQUUvQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyx3REFBQyxDQUFDO0lBQzlDLE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUVuQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQztJQUV6QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksS0FBSyxvREFBQyxDQUFDO0lBQzNELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxLQUFLLG9EQUFDLENBQUM7SUFFNUQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLFlB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QUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FJMUM7UUFDVCxTQUFTLEVBQUUsQ0FBQyxRQUFXLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUN2RCxjQUFjLEVBQUUsQ0FBQyxRQUFXLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFDbEUsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNWLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELGdCQUFnQixFQUFFLENBQUMsT0FBVSxFQUFFLEVBQUU7WUFDL0IsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxLQUFLLEVBQUUsRUFBRTtRQUNULFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxXQUFXLElBQUksU0FBUyxDQUFpQjtRQUM1RCxZQUFZLEVBQUUsWUFBcUM7S0FDcEQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIGlzU2lnbmFsLFxyXG4gIHNpZ25hbCxcclxuICB1bnRyYWNrZWQsXHJcbiAgdHlwZSBDcmVhdGVTaWduYWxPcHRpb25zLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHR5cGUgVmFsdWVFcXVhbGl0eUZuLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHR5cGUgRGVyaXZlZFNpZ25hbCB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG5pbXBvcnQgeyBnZW5lcmF0ZUlEIH0gZnJvbSAnLi91dGlsJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIHRoZSB0eXBlIG9mIGEgZm9ybSBjb250cm9sLlxyXG4gKiAtIGBjb250cm9sYDogQSBzaW5nbGUgZm9ybSBjb250cm9sIChlLmcuLCBhbiBpbnB1dCBmaWVsZCkuXHJcbiAqIC0gYGFycmF5YDogQW4gYXJyYXkgb2YgZm9ybSBjb250cm9scyAobGlrZSBBbmd1bGFyJ3MgYEZvcm1BcnJheWApLlxyXG4gKiAtIGBncm91cGA6IEEgZ3JvdXAgb2YgZm9ybSBjb250cm9scyAobGlrZSBBbmd1bGFyJ3MgYEZvcm1Hcm91cGApLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ29udHJvbFR5cGUgPSAnY29udHJvbCcgfCAnYXJyYXknIHwgJ2dyb3VwJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgcmVhY3RpdmUgZm9ybSBjb250cm9sLiAgSXQgaG9sZHMgdGhlIHZhbHVlLCB2YWxpZGF0aW9uIHN0YXR1cywgYW5kIG90aGVyXHJcbiAqIG1ldGFkYXRhIGZvciBhIGZvcm0gZmllbGQuICBUaGlzIGlzIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyByZWFjdGl2ZSBmb3Jtc1xyXG4gKiB3aXRoIHNpZ25hbHMuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBmb3JtIGNvbnRyb2wncyB2YWx1ZS5cclxuICogQHR5cGVQYXJhbSBUUGFyZW50IC0gVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGNvbnRyb2wncyB2YWx1ZSAoaWYgdGhpcyBjb250cm9sIGlzIHBhcnQgb2YgYSBncm91cCBvciBhcnJheSkuIERlZmF1bHRzIHRvIGB1bmRlZmluZWRgLlxyXG4gKiBAdHlwZVBhcmFtIFRDb250cm9sVHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBjb250cm9sICgnY29udHJvbCcsICdhcnJheScsIG9yICdncm91cCcpLiBEZWZhdWx0cyB0byAnY29udHJvbCcuXHJcbiAqIEB0eXBlUGFyYW0gVFBhcnRpYWxWYWx1ZSAtICBUaGUgdHlwZSBvZiB0aGUgcGFydGlhbCB2YWx1ZSwgdXNlZCBmb3IgcGF0Y2hpbmcuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBGb3JtQ29udHJvbFNpZ25hbDxcclxuICBULFxyXG4gIFRQYXJlbnQgPSB1bmRlZmluZWQsXHJcbiAgVENvbnRyb2xUeXBlIGV4dGVuZHMgQ29udHJvbFR5cGUgPSAnY29udHJvbCcsXHJcbiAgVFBhcnRpYWxWYWx1ZSA9IFQgfCB1bmRlZmluZWQsXHJcbj4gPSB7XHJcbiAgLyoqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb250cm9sLiBVc2VkIGZvciB0cmFja2luZyBpbiBgQGZvcmAgbG9vcHMuICovXHJcbiAgaWQ6IHN0cmluZztcclxuICAvKiogVGhlIG1haW4gdmFsdWUgc2lnbmFsIGZvciB0aGUgY29udHJvbC4gKi9cclxuICB2YWx1ZTogV3JpdGFibGVTaWduYWw8VD47XHJcbiAgLyoqIEEgc2lnbmFsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udHJvbCdzIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQuICovXHJcbiAgZGlydHk6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKiogQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250cm9sIGhhcyBiZWVuIGludGVyYWN0ZWQgd2l0aCAoZS5nLiwgYmx1cnJlZCkuICovXHJcbiAgdG91Y2hlZDogU2lnbmFsPGJvb2xlYW4+O1xyXG4gIC8qKiBBIHNpZ25hbCBjb250YWluaW5nIHRoZSBjdXJyZW50IHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZSAoZW1wdHkgc3RyaW5nIGlmIHZhbGlkKS4gKi9cclxuICBlcnJvcjogU2lnbmFsPHN0cmluZz47XHJcbiAgLyoqIEEgc2lnbmFsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udHJvbCBpcyBwZW5kaW5nICovXHJcbiAgcGVuZGluZzogU2lnbmFsPGJvb2xlYW4+O1xyXG4gIC8qKiBBIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuICovXHJcbiAgLyoqIEEgc2lnbmFsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udHJvbCBpcyBpbiBhIHZhbGlkIHN0YXRlICh3aXRob3V0IGVycm9ycyAmIG5vdCBwZW5kaW5nKSAqL1xyXG4gIHZhbGlkOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgZGlzYWJsZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKiogQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250cm9sIGlzIHJlYWQtb25seS4gKi9cclxuICByZWFkb25seTogU2lnbmFsPGJvb2xlYW4+O1xyXG4gIC8qKiBBIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgcmVxdWlyZWQuICovXHJcbiAgcmVxdWlyZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKiogQSBzaWduYWwgY29udGFpbmluZyB0aGUgbGFiZWwgZm9yIHRoZSBjb250cm9sLiAqL1xyXG4gIGxhYmVsOiBTaWduYWw8c3RyaW5nPjtcclxuICAvKiogQSBzaWduYWwgY29udGFpbmluZyB0aGUgaGludCB0ZXh0IGZvciB0aGUgY29udHJvbC4gKi9cclxuICBoaW50OiBTaWduYWw8c3RyaW5nPjtcclxuICAvKiogTWFya3MgdGhlIGNvbnRyb2wgYXMgdG91Y2hlZC4gKi9cclxuICBtYXJrQXNUb3VjaGVkOiAoKSA9PiB2b2lkO1xyXG4gIC8qKiBNYXJrcyB0aGUgY29udHJvbCBhbmQgYWxsIGl0cyBjaGlsZCBjb250cm9scyAoaWYgYW55KSBhcyB0b3VjaGVkLiAqL1xyXG4gIG1hcmtBbGxBc1RvdWNoZWQ6ICgpID0+IHZvaWQ7XHJcbiAgLyoqIE1hcmtzIHRoZSBjb250cm9sIGFzIHByaXN0aW5lIChub3QgdG91Y2hlZCkuICovXHJcbiAgbWFya0FzUHJpc3RpbmU6ICgpID0+IHZvaWQ7XHJcbiAgLyoqIE1hcmtzIHRoZSBjb250cm9sIGFuZCBhbGwgaXRzIGNoaWxkIGNvbnRyb2xzIChpZiBhbnkpIGFzIHByaXN0aW5lLiAqL1xyXG4gIG1hcmtBbGxBc1ByaXN0aW5lOiAoKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIFJlc2V0cyB0aGUgY29udHJvbCB0byBhIG5ldyB2YWx1ZSBhbmQgc2V0cyBhIG5ldyBpbml0aWFsIHZhbHVlLiBUaGlzIGlzIGludGVuZGVkIGZvclxyXG4gICAqIHNjZW5hcmlvcyB3aGVyZSB0aGUgdW5kZXJseWluZyBkYXRhIGlzIHVwZGF0ZWQgZXh0ZXJuYWxseSAoZS5nLiwgZGF0YSBjb21pbmcgZnJvbVxyXG4gICAqIHRoZSBzZXJ2ZXIpLiAgSWYgdGhlIGNvbnRyb2wgaXMgbm90IGRpcnR5LCB0aGUgdmFsdWUgaXMgdXBkYXRlZC4gSWYgdGhlIGNvbnRyb2wgKmlzKlxyXG4gICAqIGRpcnR5LCB0aGUgdmFsdWUgaXMgKm5vdCogdXBkYXRlZCAocHJlc2VydmluZyB1c2VyIGNoYW5nZXMpLlxyXG4gICAqL1xyXG4gIHJlY29uY2lsZTogKG5ld1ZhbHVlOiBUKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIFNpbWlsYXIgdG8gYHJlY29uY2lsZWAsIGJ1dCBmb3JjZXMgdGhlIHVwZGF0ZSBldmVuIGlmIHRoZSBjb250cm9sIGlzIGRpcnR5LlxyXG4gICAqL1xyXG4gIGZvcmNlUmVjb25jaWxlOiAobmV3VmFsdWU6IFQpID0+IHZvaWQ7XHJcbiAgLyoqIFJlc2V0cyB0aGUgY29udHJvbCdzIHZhbHVlIHRvIGl0cyBpbml0aWFsIHZhbHVlLiAqL1xyXG4gIHJlc2V0OiAoKSA9PiB2b2lkO1xyXG4gIC8qKiBSZXNldHMgdGhlIGNvbnRyb2wncyB2YWx1ZSBhbmQgaW5pdGlhbCB2YWx1ZS4gKi9cclxuICByZXNldFdpdGhJbml0aWFsOiAoaW5pdGlhbDogVCkgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBUaGUgZGVyaXZhdGlvbiBmdW5jdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGlzIGNvbnRyb2wgaWYgaXQncyBwYXJ0IG9mIGEgYGZvcm1Hcm91cGAgb3IgYGZvcm1BcnJheWAuXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZnJvbT86IERlcml2ZWRTaWduYWw8VFBhcmVudCwgVD5bJ2Zyb20nXTtcclxuICAvKiogVGhlIGVxdWFsaXR5IGZ1bmN0aW9uIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMuIERlZmF1bHRzIHRvIGBPYmplY3QuaXNgLiAqL1xyXG4gIGVxdWFsOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbjtcclxuICAvKiogVGhlIHR5cGUgb2YgdGhlIGNvbnRyb2wgKCdjb250cm9sJywgJ2FycmF5Jywgb3IgJ2dyb3VwJykuICovXHJcbiAgY29udHJvbFR5cGU6IFRDb250cm9sVHlwZTtcclxuICAvKipcclxuICAgKiBBIHNpZ25hbCByZXByZXNlbnRpbmcgdGhlIHBhcnRpYWwgdmFsdWUgb2YgdGhlIGNvbnRyb2wsIHN1aXRhYmxlIGZvciBwYXRjaGluZyBkYXRhIG9uIGEgc2VydmVyLlxyXG4gICAqIEl0IGNvbnRhaW5zIHRoZSBjaGFuZ2VkIHZhbHVlIGlmIGBkaXJ0eWAgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIHBhcnRpYWxWYWx1ZTogU2lnbmFsPFRQYXJ0aWFsVmFsdWU+O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zPFxyXG4gIFQsXHJcbiAgVENvbnRyb2xUeXBlIGV4dGVuZHMgQ29udHJvbFR5cGUgPSBDb250cm9sVHlwZSxcclxuPiA9IENyZWF0ZVNpZ25hbE9wdGlvbnM8VD4gJiB7XHJcbiAgdmFsaWRhdG9yPzogKCkgPT4gKHZhbHVlOiBUKSA9PiBzdHJpbmc7XHJcbiAgb25Ub3VjaGVkPzogKCkgPT4gdm9pZDtcclxuICBkaXNhYmxlPzogKCkgPT4gYm9vbGVhbjtcclxuICByZWFkb25seT86ICgpID0+IGJvb2xlYW47XHJcbiAgcmVxdWlyZWQ/OiAoKSA9PiBib29sZWFuO1xyXG4gIGxhYmVsPzogKCkgPT4gc3RyaW5nO1xyXG4gIGlkPzogKCkgPT4gc3RyaW5nO1xyXG4gIGhpbnQ/OiAoKSA9PiBzdHJpbmc7XHJcbiAgZGlydHlFcXVhbGl0eT86IFZhbHVlRXF1YWxpdHlGbjxUPjtcclxuICBvblJlc2V0PzogKCkgPT4gdm9pZDtcclxuICBjb250cm9sVHlwZT86IFRDb250cm9sVHlwZTtcclxuICBvdmVycmlkZVZhbGlkYXRpb24/OiAoKSA9PiBzdHJpbmc7XHJcbiAgcGVuZGluZz86ICgpID0+IGJvb2xlYW47XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGBGb3JtQ29udHJvbFNpZ25hbGAsIGEgcmVhY3RpdmUgZm9ybSBjb250cm9sIHRoYXQgaG9sZHMgYSB2YWx1ZSBhbmQgdHJhY2tzIGl0c1xyXG4gKiB2YWxpZGl0eSwgZGlydHkgc3RhdGUsIHRvdWNoZWQgc3RhdGUsIGFuZCBvdGhlciBtZXRhZGF0YS5cclxuICpcclxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGZvcm0gY29udHJvbCdzIHZhbHVlLlxyXG4gKiBAdHlwZVBhcmFtIFRQYXJlbnQgLSBUaGUgdHlwZSBvZiB0aGUgcGFyZW50IGZvcm0gY29udHJvbCdzIHZhbHVlIChpZiB0aGlzIGNvbnRyb2wgaXMgcGFydCBvZiBhIGdyb3VwIG9yIGFycmF5KS5cclxuICogQHR5cGVQYXJhbSBUQ29udHJvbFR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgY29udHJvbC4gRGVmYXVsdHMgdG8gYCdjb250cm9sJ2AuXHJcbiAqIEB0eXBlUGFyYW0gVFBhcnRpYWxWYWx1ZSAtIFRoZSB0eXBlIG9mIHZhbHVlIHdoZW4gcGF0Y2hpbmdcclxuICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgY29udHJvbCwgb3IgYSBgRGVyaXZlZFNpZ25hbGAgaWYgdGhpcyBjb250cm9sIGlzIHBhcnQgb2YgYSBgZm9ybUdyb3VwYCBvciBgZm9ybUFycmF5YC5cclxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBjb250cm9sLlxyXG4gKiBAcmV0dXJucyBBIGBGb3JtQ29udHJvbFNpZ25hbGAgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIENyZWF0ZSBhIHNpbXBsZSBmb3JtIGNvbnRyb2w6XHJcbiAqIGNvbnN0IG5hbWUgPSBmb3JtQ29udHJvbCgnSW5pdGlhbCBOYW1lJyk7XHJcbiAqXHJcbiAqIC8vIENyZWF0ZSBhIGZvcm0gY29udHJvbCB3aXRoIHZhbGlkYXRpb246XHJcbiAqIGNvbnN0IGFnZSA9IGZvcm1Db250cm9sKDAsIHtcclxuICogICB2YWxpZGF0b3I6ICgpID0+ICh2YWx1ZSkgPT4gdmFsdWUgPj0gMTggPyAnJyA6ICdNdXN0IGJlIGF0IGxlYXN0IDE4JyxcclxuICogfSk7XHJcbiAqXHJcbiAqIC8vIENyZWF0ZSBhIGRlcml2ZWQgZm9ybSBjb250cm9sIChlcXVpdmFsZW50IHRvIHRoZSBhYm92ZSwgYnV0IG1vcmUgZXhwbGljaXQpOlxyXG4gKiAgY29uc3QgdXNlciA9IHNpZ25hbCh7IG5hbWU6ICdKb2huIERvZScsIGFnZTogMzAgfSk7XHJcbiAqICBjb25zdCBuYW1lID0gZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCB7XHJcbiAqICAgIGZyb206ICh1KSA9PiB1Lm5hbWUsXHJcbiAqICAgIG9uQ2hhbmdlOiAobmV3TmFtZSkgPT4gdXNlci51cGRhdGUodSA9PiAoey4uLnUsIG5hbWU6IG5ld05hbWV9KSlcclxuICogIH0pKTtcclxuICpcclxuICogLy8gQ3JlYXRlIGEgZm9ybSBncm91cCB3aXRoIG5lc3RlZCBjb250cm9sczpcclxuICogY29uc3QgdXNlciA9IHNpZ25hbCh7IG5hbWU6ICdKb2huIERvZScsIGFnZTogMzAgfSk7XHJcbiAqIGNvbnN0IGZvcm0gPSBmb3JtR3JvdXAodXNlciwge1xyXG4gKiAgbmFtZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnbmFtZScpKSxcclxuICogIGFnZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnYWdlJykpLFxyXG4gKiB9KVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1Db250cm9sPFxyXG4gIFQsXHJcbiAgVFBhcmVudCA9IHVuZGVmaW5lZCxcclxuICBUQ29udHJvbFR5cGUgZXh0ZW5kcyBDb250cm9sVHlwZSA9ICdjb250cm9sJyxcclxuICBUUGFydGlhbFZhbHVlID0gVCB8IHVuZGVmaW5lZCxcclxuPihcclxuICBpbml0aWFsOiBEZXJpdmVkU2lnbmFsPFRQYXJlbnQsIFQ+IHwgVCxcclxuICBvcHQ/OiBDcmVhdGVGb3JtQ29udHJvbE9wdGlvbnM8VCwgVENvbnRyb2xUeXBlPixcclxuKTogRm9ybUNvbnRyb2xTaWduYWw8VCwgVFBhcmVudCwgVENvbnRyb2xUeXBlLCBUUGFydGlhbFZhbHVlPiB7XHJcbiAgY29uc3QgdmFsdWUgPSBpc1NpZ25hbChpbml0aWFsKSA/IGluaXRpYWwgOiBzaWduYWwoaW5pdGlhbCwgb3B0KTtcclxuICBjb25zdCBpbml0aWFsVmFsdWUgPSBzaWduYWwodW50cmFja2VkKHZhbHVlKSk7XHJcbiAgY29uc3QgZXEgPSBvcHQ/LmVxdWFsID8/IE9iamVjdC5pcztcclxuXHJcbiAgY29uc3QgZGlydHlFcSA9IG9wdD8uZGlydHlFcXVhbGl0eSA/PyBlcTtcclxuXHJcbiAgY29uc3QgZGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiBvcHQ/LmRpc2FibGU/LigpID8/IGZhbHNlKTtcclxuICBjb25zdCByZWFkb25seSA9IGNvbXB1dGVkKCgpID0+IG9wdD8ucmVhZG9ubHk/LigpID8/IGZhbHNlKTtcclxuXHJcbiAgY29uc3QgZGlydHkgPSBjb21wdXRlZCgoKSA9PiAhZGlydHlFcSh2YWx1ZSgpLCBpbml0aWFsVmFsdWUoKSkpO1xyXG5cclxuICBjb25zdCB0b3VjaGVkID0gc2lnbmFsKGZhbHNlKTtcclxuXHJcbiAgY29uc3QgdmFsaWRhdG9yID0gY29tcHV0ZWQoKCkgPT4gb3B0Py52YWxpZGF0b3I/LigpID8/ICgoKSA9PiAnJykpO1xyXG5cclxuICBjb25zdCBlcnJvciA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmIChvcHQ/Lm92ZXJyaWRlVmFsaWRhdGlvbikgcmV0dXJuIG9wdC5vdmVycmlkZVZhbGlkYXRpb24oKTtcclxuICAgIGlmIChkaXNhYmxlZCgpIHx8IHJlYWRvbmx5KCkpIHJldHVybiAnJztcclxuICAgIHJldHVybiB2YWxpZGF0b3IoKSh2YWx1ZSgpKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgbWFya0FzVG91Y2hlZCA9ICgpID0+IHtcclxuICAgIHRvdWNoZWQuc2V0KHRydWUpO1xyXG4gICAgb3B0Py5vblRvdWNoZWQ/LigpO1xyXG4gIH07XHJcbiAgY29uc3QgbWFya0FsbEFzVG91Y2hlZCA9IG1hcmtBc1RvdWNoZWQ7XHJcblxyXG4gIGNvbnN0IG1hcmtBc1ByaXN0aW5lID0gKCkgPT4gdG91Y2hlZC5zZXQoZmFsc2UpO1xyXG4gIGNvbnN0IG1hcmtBbGxBc1ByaXN0aW5lID0gbWFya0FzUHJpc3RpbmU7XHJcblxyXG4gIGNvbnN0IGxhYmVsID0gY29tcHV0ZWQoKCkgPT4gb3B0Py5sYWJlbD8uKCkgPz8gJycpO1xyXG5cclxuICBjb25zdCBwYXJ0aWFsVmFsdWUgPSBjb21wdXRlZCgoKSA9PiAoZGlydHkoKSA/IHZhbHVlKCkgOiB1bmRlZmluZWQpKTtcclxuXHJcbiAgY29uc3QgaW50ZXJuYWxSZWNvbmNpbGUgPSAobmV3VmFsdWU6IFQsIGZvcmNlID0gZmFsc2UpID0+IHtcclxuICAgIGNvbnN0IGlzRGlydHkgPSB1bnRyYWNrZWQoZGlydHkpO1xyXG5cclxuICAgIGlmICghaXNEaXJ0eSB8fCBmb3JjZSkge1xyXG4gICAgICAvLyB2ZXJ5IGRhbmdlcm91cyB1c2Ugb2YgdW50cmFja2VkIGhlcmUsIGRvbid0IGRvIHRoaXMgZXZlcnl3aGVyZSA6KVxyXG4gICAgICAvLyB0aGFua3MgdG8gIHUvc3luYWx4IGZvciB0aGUgaWRlYSB0byB1c2UgdW50cmFja2VkIGhlcmVcclxuXHJcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XHJcbiAgICAgICAgaW5pdGlhbFZhbHVlLnNldChuZXdWYWx1ZSk7XHJcbiAgICAgICAgdmFsdWUuc2V0KG5ld1ZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgcGVuZGluZyA9IGNvbXB1dGVkKCgpID0+IG9wdD8ucGVuZGluZz8uKCkgPz8gZmFsc2UpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgaWQ6IG9wdD8uaWQ/LigpID8/IGdlbmVyYXRlSUQoKSxcclxuICAgIHZhbHVlLFxyXG4gICAgZGlydHksXHJcbiAgICB0b3VjaGVkLFxyXG4gICAgZXJyb3IsXHJcbiAgICBsYWJlbCxcclxuICAgIHJlcXVpcmVkOiBjb21wdXRlZCgoKSA9PiBvcHQ/LnJlcXVpcmVkPy4oKSA/PyBmYWxzZSksXHJcbiAgICBkaXNhYmxlZCxcclxuICAgIHJlYWRvbmx5LFxyXG4gICAgcGVuZGluZyxcclxuICAgIHZhbGlkOiBjb21wdXRlZCgoKSA9PiAhcGVuZGluZygpICYmICFlcnJvcigpKSxcclxuICAgIGhpbnQ6IGNvbXB1dGVkKCgpID0+IG9wdD8uaGludD8uKCkgPz8gJycpLFxyXG4gICAgbWFya0FzVG91Y2hlZCxcclxuICAgIG1hcmtBbGxBc1RvdWNoZWQsXHJcbiAgICBtYXJrQXNQcmlzdGluZSxcclxuICAgIG1hcmtBbGxBc1ByaXN0aW5lLFxyXG4gICAgZnJvbTogKGlzU2lnbmFsKGluaXRpYWwpID8gaW5pdGlhbC5mcm9tIDogdW5kZWZpbmVkKSBhcyBGb3JtQ29udHJvbFNpZ25hbDxcclxuICAgICAgVCxcclxuICAgICAgVFBhcmVudCxcclxuICAgICAgVENvbnRyb2xUeXBlXHJcbiAgICA+Wydmcm9tJ10sXHJcbiAgICByZWNvbmNpbGU6IChuZXdWYWx1ZTogVCkgPT4gaW50ZXJuYWxSZWNvbmNpbGUobmV3VmFsdWUpLFxyXG4gICAgZm9yY2VSZWNvbmNpbGU6IChuZXdWYWx1ZTogVCkgPT4gaW50ZXJuYWxSZWNvbmNpbGUobmV3VmFsdWUsIHRydWUpLFxyXG4gICAgcmVzZXQ6ICgpID0+IHtcclxuICAgICAgb3B0Py5vblJlc2V0Py4oKTtcclxuICAgICAgdmFsdWUuc2V0KHVudHJhY2tlZChpbml0aWFsVmFsdWUpKTtcclxuICAgIH0sXHJcbiAgICByZXNldFdpdGhJbml0aWFsOiAoaW5pdGlhbDogVCkgPT4ge1xyXG4gICAgICBvcHQ/Lm9uUmVzZXQ/LigpO1xyXG4gICAgICBpbml0aWFsVmFsdWUuc2V0KGluaXRpYWwpO1xyXG4gICAgICB2YWx1ZS5zZXQoaW5pdGlhbCk7XHJcbiAgICB9LFxyXG4gICAgZXF1YWw6IGVxLFxyXG4gICAgY29udHJvbFR5cGU6IChvcHQ/LmNvbnRyb2xUeXBlID8/ICdjb250cm9sJykgYXMgVENvbnRyb2xUeXBlLFxyXG4gICAgcGFydGlhbFZhbHVlOiBwYXJ0aWFsVmFsdWUgYXMgU2lnbmFsPFRQYXJ0aWFsVmFsdWU+LFxyXG4gIH07XHJcbn1cclxuIl19","import { computed, linkedSignal, untracked, } from '@angular/core';\nimport { derived } from '@mmstack/primitives';\nimport { formControl, } from './form-control';\nimport { mergeArray } from './util';\nfunction createReconcileChildren(factory, opt) {\n return (length, source, prev) => {\n if (!prev) {\n const nextControls = [];\n for (let i = 0; i < length; i++) {\n nextControls.push(factory(derived(source, i, { equal: opt?.equal }), i));\n }\n return nextControls;\n }\n if (length === prev.length)\n return prev;\n const next = [...prev];\n if (length < prev.length) {\n next.splice(length);\n }\n else if (length > prev.length) {\n for (let i = prev.length; i < length; i++) {\n next.push(factory(derived(source, i, { equal: opt?.equal }), i));\n }\n }\n return next;\n };\n}\nexport function formArray(initial, factory, opt) {\n const eq = opt?.equal ?? Object.is;\n const arrayEqual = (a, b) => {\n if (a.length !== b.length)\n return false;\n if (!a.length)\n return true;\n return a.every((v, i) => eq(v, b[i]));\n };\n const min = computed(() => opt?.min?.() ?? 0, ...(ngDevMode ? [{ debugName: \"min\" }] : []));\n const max = computed(() => opt?.max?.() ?? Number.MAX_SAFE_INTEGER, ...(ngDevMode ? [{ debugName: \"max\" }] : []));\n const arrayOptions = {\n ...opt,\n equal: arrayEqual,\n dirtyEquality: (a, b) => a.length === b.length,\n controlType: 'array',\n };\n const ctrl = formControl(initial, arrayOptions);\n const length = computed(() => ctrl.value().length, ...(ngDevMode ? [{ debugName: \"length\" }] : []));\n const reconcileChildren = createReconcileChildren(factory, { equal: eq });\n // linkedSignal used to re-use previous value so that only length changes are affected and existing controls are kept, but updated\n const children = linkedSignal({\n source: () => length(),\n computation: (len, prev) => reconcileChildren(len, ctrl.value, prev?.value),\n });\n const ownError = computed(() => ctrl.error(), ...(ngDevMode ? [{ debugName: \"ownError\" }] : []));\n const error = computed(() => {\n const own = ownError();\n if (own)\n return own;\n if (!children().length)\n return '';\n return children()\n .map((c, idx) => (c.error() ? `${idx}: ${c.error()}` : ''))\n .filter(Boolean)\n .join('\\n');\n }, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n const dirty = computed(() => {\n if (ctrl.dirty())\n return true;\n if (!children().length)\n return false;\n return children().some((c) => c.dirty());\n }, ...(ngDevMode ? [{ debugName: \"dirty\" }] : []));\n const markAllAsTouched = () => {\n ctrl.markAllAsTouched();\n for (const c of untracked(children)) {\n c.markAllAsTouched();\n }\n };\n const markAllAsPristine = () => {\n ctrl.markAllAsPristine();\n for (const c of untracked(children)) {\n c.markAllAsPristine();\n }\n };\n const toPartialValue = opt?.toPartialValue ?? ((v) => v);\n const partialValue = computed(() => {\n if (!dirty())\n return undefined;\n return children().map((c) => {\n const pv = c.partialValue();\n if (pv)\n return pv;\n if (c.controlType === 'control')\n return undefined;\n // return full value for child objects/arrays as this cannot be partially patched without idx\n return toPartialValue(c.value());\n });\n }, ...(ngDevMode ? [{ debugName: \"partialValue\" }] : []));\n const touched = computed(() => ctrl.touched() ||\n !!(children().length && children().some((c) => c.touched())), ...(ngDevMode ? [{ debugName: \"touched\" }] : []));\n const reconcile = (newValue) => {\n const ctrls = untracked(children);\n for (let i = 0; i < newValue.length; i++) {\n ctrls.at(i)?.reconcile(newValue[i]); // reconcile existing controls that are relevant addition/removal will be handled after ctrl.reconcile through linkedSignal\n }\n ctrl.reconcile(mergeArray(newValue, untracked(ctrl.value)));\n };\n const forceReconcile = (newValue) => {\n const ctrls = untracked(children);\n for (let i = 0; i < newValue.length; i++) {\n ctrls.at(i)?.forceReconcile(newValue[i]);\n }\n ctrl.forceReconcile(newValue);\n };\n const childrenValid = computed(() => {\n if (!children().length)\n return true;\n return children().every((d) => d.valid());\n }, ...(ngDevMode ? [{ debugName: \"childrenValid\" }] : []));\n const childrenPending = computed(() => !!children().length && children().some((d) => d.pending()), ...(ngDevMode ? [{ debugName: \"childrenPending\" }] : []));\n return {\n ...ctrl,\n ownError,\n error,\n valid: computed(() => ctrl.valid() && childrenValid()),\n pending: computed(() => ctrl.pending() || childrenPending()),\n touched,\n children,\n dirty,\n markAllAsTouched,\n markAllAsPristine,\n min,\n max,\n partialValue,\n canAdd: computed(() => !ctrl.disabled() && !ctrl.readonly() && length() < max()),\n canRemove: computed(() => !ctrl.disabled() && !ctrl.readonly() && length() > min()),\n reconcile,\n forceReconcile,\n reset: () => {\n for (const c of untracked(children)) {\n c.reset();\n }\n ctrl.reset();\n },\n resetWithInitial: (initial) => {\n const ctrls = untracked(children);\n for (let i = 0; i < initial.length; i++) {\n ctrls.at(i)?.resetWithInitial(initial[i]);\n }\n ctrl.resetWithInitial(initial);\n },\n push: (next) => ctrl.value.update((cur) => [...cur, next]),\n remove: (idx) => ctrl.value.update((cur) => cur.filter((_, i) => i !== idx)),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hcnJheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0vY29yZS9zcmMvbGliL2Zvcm0tYXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixZQUFZLEVBQ1osU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQXNCLE1BQU0scUJBQXFCLENBQUM7QUFDbEUsT0FBTyxFQUNMLFdBQVcsR0FHWixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUF3Q3BDLFNBQVMsdUJBQXVCLENBSTlCLE9BQXNFLEVBQ3RFLEdBQXVDO0lBRXZDLE9BQU8sQ0FDTCxNQUFjLEVBQ2QsTUFBMkIsRUFDM0IsSUFBeUIsRUFDTCxFQUFFO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUV4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hDLFlBQVksQ0FBQyxJQUFJLENBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN0RCxDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXhDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUV2QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixDQUFDO2FBQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkUsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQVV2QixPQUEwQyxFQUMxQyxPQUFzRSxFQUN0RSxHQUF1RDtJQUV2RCxNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFFbkMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUU7UUFDcEMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFM0IsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQztJQUVGLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLCtDQUFDLENBQUM7SUFDOUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsK0NBQUMsQ0FBQztJQUVwRSxNQUFNLFlBQVksR0FBMkM7UUFDM0QsR0FBRyxHQUFHO1FBQ04sS0FBSyxFQUFFLFVBQVU7UUFDakIsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTTtRQUM5QyxXQUFXLEVBQUUsT0FBTztLQUNyQixDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUN0QixPQUFPLEVBQ1AsWUFBWSxDQUNzQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxrREFBQyxDQUFDO0lBRW5ELE1BQU0saUJBQWlCLEdBQUcsdUJBQXVCLENBQy9DLE9BQU8sRUFDUCxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FDZCxDQUFDO0lBRUYsa0lBQWtJO0lBQ2xJLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBNkI7UUFDeEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRTtRQUN0QixXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO0tBQzVFLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLG9EQUFDLENBQUM7SUFFOUMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQVcsRUFBRTtRQUNsQyxNQUFNLEdBQUcsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUN2QixJQUFJLEdBQUc7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLE9BQU8sUUFBUSxFQUFFO2FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUMxRCxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLENBQUMsaURBQUMsQ0FBQztJQUVILE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNyQyxPQUFPLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxpREFBQyxDQUFDO0lBRUgsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLEVBQUU7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUcsR0FBRyxFQUFFLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUMvQixPQUFPLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzFCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QixJQUFJLEVBQUU7Z0JBQUUsT0FBTyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLFNBQVM7Z0JBQUUsT0FBTyxTQUFTLENBQUM7WUFFbEQsOEZBQThGO1lBQzlGLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyx3REFBQyxDQUFDO0lBRUgsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUN0QixHQUFHLEVBQUUsQ0FDSCxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ2QsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsbURBQy9ELENBQUM7SUFFRixNQUFNLFNBQVMsR0FBRyxDQUFDLFFBQWEsRUFBRSxFQUFFO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVsQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMkhBQTJIO1FBQ2xLLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQyxDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFhLEVBQUUsRUFBRTtRQUN2QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUM7SUFFRixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDcEMsT0FBTyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUMseURBQUMsQ0FBQztJQUVILE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FDOUIsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQywyREFDakUsQ0FBQztJQUVGLE9BQU87UUFDTCxHQUFHLElBQUk7UUFDUCxRQUFRO1FBQ1IsS0FBSztRQUNMLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ3RELE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzVELE9BQU87UUFDUCxRQUFRO1FBQ1IsS0FBSztRQUNMLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsR0FBRztRQUNILEdBQUc7UUFDSCxZQUFZO1FBQ1osTUFBTSxFQUFFLFFBQVEsQ0FDZCxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FDL0Q7UUFDRCxTQUFTLEVBQUUsUUFBUSxDQUNqQixHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FDL0Q7UUFDRCxTQUFTO1FBQ1QsY0FBYztRQUNkLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDVixLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWixDQUFDO1lBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsQ0FBQztRQUNELGdCQUFnQixFQUFFLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDakMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3hDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQzlELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBsaW5rZWRTaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGRlcml2ZWQsIHR5cGUgRGVyaXZlZFNpZ25hbCB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG5pbXBvcnQge1xyXG4gIGZvcm1Db250cm9sLFxyXG4gIHR5cGUgQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zLFxyXG4gIHR5cGUgRm9ybUNvbnRyb2xTaWduYWwsXHJcbn0gZnJvbSAnLi9mb3JtLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyB0eXBlIFNpZ25hbFZhbHVlIH0gZnJvbSAnLi9zaWduYWwtdmFsdWUudHlwZSc7XHJcbmltcG9ydCB7IG1lcmdlQXJyYXkgfSBmcm9tICcuL3V0aWwnO1xyXG5cclxuZXhwb3J0IHR5cGUgRm9ybUFycmF5U2lnbmFsPFxyXG4gIFQsXHJcbiAgVEluZGl2aWR1YWxTdGF0ZSBleHRlbmRzIEZvcm1Db250cm9sU2lnbmFsPFxyXG4gICAgVCxcclxuICAgIGFueSxcclxuICAgIGFueSxcclxuICAgIGFueVxyXG4gID4gPSBGb3JtQ29udHJvbFNpZ25hbDxULCBhbnksIGFueSwgYW55PixcclxuICBUUGFyZW50ID0gdW5kZWZpbmVkLFxyXG4+ID0gRm9ybUNvbnRyb2xTaWduYWw8XHJcbiAgVFtdLFxyXG4gIFRQYXJlbnQsXHJcbiAgJ2FycmF5JyxcclxuICB8IEV4Y2x1ZGU8U2lnbmFsVmFsdWU8VEluZGl2aWR1YWxTdGF0ZVsncGFydGlhbFZhbHVlJ10+LCBudWxsIHwgdW5kZWZpbmVkPltdXHJcbiAgfCB1bmRlZmluZWRcclxuPiAmIHtcclxuICBvd25FcnJvcjogU2lnbmFsPHN0cmluZz47XHJcbiAgY2hpbGRyZW46IFNpZ25hbDxUSW5kaXZpZHVhbFN0YXRlW10+O1xyXG4gIHB1c2g6ICh2YWx1ZTogVCkgPT4gdm9pZDsgLy8gYWRkIG5ldyBjb250cm9sIHdpdGggdmFsdWVcclxuICByZW1vdmU6IChpbmRleDogbnVtYmVyKSA9PiB2b2lkOyAvLyByZW1vdmUgYXQgaW5kZXhcclxuICBtaW46IFNpZ25hbDxudW1iZXI+OyAvLyBmb3IgZGlzcGxheSBwdXJwb3Nlc1xyXG4gIG1heDogU2lnbmFsPG51bWJlcj47IC8vIGZvciBkaXNwbGF5IHB1cnBvc2VzXHJcbiAgY2FuQWRkOiBTaWduYWw8Ym9vbGVhbj47IC8vIGRpc2FibGUgYWRkIGJ1dHRvbiBpZiBmYWxzZVxyXG4gIGNhblJlbW92ZTogU2lnbmFsPGJvb2xlYW4+OyAvLyBkaXNhYmxlIHJlbW92ZSBidXR0b25zIGlmIGZhbHNlXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBDcmVhdGVGb3JtQXJyYXlTaWduYWxPcHRpb25zPFxyXG4gIFQsXHJcbiAgVEluZGl2aWR1YWxTdGF0ZSBleHRlbmRzIEZvcm1Db250cm9sU2lnbmFsPFQsIGFueSwgYW55LCBhbnk+LFxyXG4+ID0gT21pdDxDcmVhdGVGb3JtQ29udHJvbE9wdGlvbnM8VFtdPiwgJ2VxdWFsJz4gJiB7XHJcbiAgbWluPzogKCkgPT4gbnVtYmVyO1xyXG4gIG1heD86ICgpID0+IG51bWJlcjtcclxuICBlcXVhbD86IChhOiBULCBiOiBUKSA9PiBib29sZWFuO1xyXG4gIHRvUGFydGlhbFZhbHVlPzogKFxyXG4gICAgdjogVCxcclxuICApID0+IEV4Y2x1ZGU8U2lnbmFsVmFsdWU8VEluZGl2aWR1YWxTdGF0ZVsncGFydGlhbFZhbHVlJ10+LCBudWxsIHwgdW5kZWZpbmVkPjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVJlY29uY2lsZUNoaWxkcmVuPFxyXG4gIFQsXHJcbiAgVEluZGl2aWR1YWxTdGF0ZSBleHRlbmRzIEZvcm1Db250cm9sU2lnbmFsPFQsIGFueSwgYW55LCBhbnk+LFxyXG4+KFxyXG4gIGZhY3Rvcnk6ICh2YWw6IERlcml2ZWRTaWduYWw8VFtdLCBUPiwgaWR4OiBudW1iZXIpID0+IFRJbmRpdmlkdWFsU3RhdGUsXHJcbiAgb3B0OiB7IGVxdWFsOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbiB9LFxyXG4pIHtcclxuICByZXR1cm4gKFxyXG4gICAgbGVuZ3RoOiBudW1iZXIsXHJcbiAgICBzb3VyY2U6IFdyaXRhYmxlU2lnbmFsPFRbXT4sXHJcbiAgICBwcmV2PzogVEluZGl2aWR1YWxTdGF0ZVtdLFxyXG4gICk6IFRJbmRpdmlkdWFsU3RhdGVbXSA9PiB7XHJcbiAgICBpZiAoIXByZXYpIHtcclxuICAgICAgY29uc3QgbmV4dENvbnRyb2xzID0gW107XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbmV4dENvbnRyb2xzLnB1c2goXHJcbiAgICAgICAgICBmYWN0b3J5KGRlcml2ZWQoc291cmNlLCBpLCB7IGVxdWFsOiBvcHQ/LmVxdWFsIH0pLCBpKSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbmV4dENvbnRyb2xzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsZW5ndGggPT09IHByZXYubGVuZ3RoKSByZXR1cm4gcHJldjtcclxuXHJcbiAgICBjb25zdCBuZXh0ID0gWy4uLnByZXZdO1xyXG5cclxuICAgIGlmIChsZW5ndGggPCBwcmV2Lmxlbmd0aCkge1xyXG4gICAgICBuZXh0LnNwbGljZShsZW5ndGgpO1xyXG4gICAgfSBlbHNlIGlmIChsZW5ndGggPiBwcmV2Lmxlbmd0aCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gcHJldi5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG5leHQucHVzaChmYWN0b3J5KGRlcml2ZWQoc291cmNlLCBpLCB7IGVxdWFsOiBvcHQ/LmVxdWFsIH0pLCBpKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV4dDtcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybUFycmF5PFxyXG4gIFQsXHJcbiAgVEluZGl2aWR1YWxTdGF0ZSBleHRlbmRzIEZvcm1Db250cm9sU2lnbmFsPFxyXG4gICAgVCxcclxuICAgIGFueSxcclxuICAgIGFueSxcclxuICAgIGFueVxyXG4gID4gPSBGb3JtQ29udHJvbFNpZ25hbDxULCBhbnksIGFueSwgYW55PixcclxuICBUUGFyZW50ID0gdW5kZWZpbmVkLFxyXG4+KFxyXG4gIGluaXRpYWw6IFRbXSB8IERlcml2ZWRTaWduYWw8VFBhcmVudCwgVFtdPixcclxuICBmYWN0b3J5OiAodmFsOiBEZXJpdmVkU2lnbmFsPFRbXSwgVD4sIGlkeDogbnVtYmVyKSA9PiBUSW5kaXZpZHVhbFN0YXRlLFxyXG4gIG9wdD86IENyZWF0ZUZvcm1BcnJheVNpZ25hbE9wdGlvbnM8VCwgVEluZGl2aWR1YWxTdGF0ZT4sXHJcbik6IEZvcm1BcnJheVNpZ25hbDxULCBUSW5kaXZpZHVhbFN0YXRlLCBUUGFyZW50PiB7XHJcbiAgY29uc3QgZXEgPSBvcHQ/LmVxdWFsID8/IE9iamVjdC5pcztcclxuXHJcbiAgY29uc3QgYXJyYXlFcXVhbCA9IChhOiBUW10sIGI6IFRbXSkgPT4ge1xyXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKCFhLmxlbmd0aCkgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgcmV0dXJuIGEuZXZlcnkoKHYsIGkpID0+IGVxKHYsIGJbaV0pKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBtaW4gPSBjb21wdXRlZCgoKSA9PiBvcHQ/Lm1pbj8uKCkgPz8gMCk7XHJcbiAgY29uc3QgbWF4ID0gY29tcHV0ZWQoKCkgPT4gb3B0Py5tYXg/LigpID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcclxuXHJcbiAgY29uc3QgYXJyYXlPcHRpb25zOiBDcmVhdGVGb3JtQ29udHJvbE9wdGlvbnM8VFtdLCAnYXJyYXknPiA9IHtcclxuICAgIC4uLm9wdCxcclxuICAgIGVxdWFsOiBhcnJheUVxdWFsLFxyXG4gICAgZGlydHlFcXVhbGl0eTogKGEsIGIpID0+IGEubGVuZ3RoID09PSBiLmxlbmd0aCxcclxuICAgIGNvbnRyb2xUeXBlOiAnYXJyYXknLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGN0cmwgPSBmb3JtQ29udHJvbDxUW10sIFRQYXJlbnQsICdhcnJheSc+KFxyXG4gICAgaW5pdGlhbCxcclxuICAgIGFycmF5T3B0aW9ucyxcclxuICApIHNhdGlzZmllcyBGb3JtQ29udHJvbFNpZ25hbDxUW10sIFRQYXJlbnQsICdhcnJheSc+O1xyXG5cclxuICBjb25zdCBsZW5ndGggPSBjb21wdXRlZCgoKSA9PiBjdHJsLnZhbHVlKCkubGVuZ3RoKTtcclxuXHJcbiAgY29uc3QgcmVjb25jaWxlQ2hpbGRyZW4gPSBjcmVhdGVSZWNvbmNpbGVDaGlsZHJlbjxULCBUSW5kaXZpZHVhbFN0YXRlPihcclxuICAgIGZhY3RvcnksXHJcbiAgICB7IGVxdWFsOiBlcSB9LFxyXG4gICk7XHJcblxyXG4gIC8vIGxpbmtlZFNpZ25hbCB1c2VkIHRvIHJlLXVzZSBwcmV2aW91cyB2YWx1ZSBzbyB0aGF0IG9ubHkgbGVuZ3RoIGNoYW5nZXMgYXJlIGFmZmVjdGVkIGFuZCBleGlzdGluZyBjb250cm9scyBhcmUga2VwdCwgYnV0IHVwZGF0ZWRcclxuICBjb25zdCBjaGlsZHJlbiA9IGxpbmtlZFNpZ25hbDxudW1iZXIsIFRJbmRpdmlkdWFsU3RhdGVbXT4oe1xyXG4gICAgc291cmNlOiAoKSA9PiBsZW5ndGgoKSxcclxuICAgIGNvbXB1dGF0aW9uOiAobGVuLCBwcmV2KSA9PiByZWNvbmNpbGVDaGlsZHJlbihsZW4sIGN0cmwudmFsdWUsIHByZXY/LnZhbHVlKSxcclxuICB9KTtcclxuXHJcbiAgY29uc3Qgb3duRXJyb3IgPSBjb21wdXRlZCgoKSA9PiBjdHJsLmVycm9yKCkpO1xyXG5cclxuICBjb25zdCBlcnJvciA9IGNvbXB1dGVkKCgpOiBzdHJpbmcgPT4ge1xyXG4gICAgY29uc3Qgb3duID0gb3duRXJyb3IoKTtcclxuICAgIGlmIChvd24pIHJldHVybiBvd247XHJcbiAgICBpZiAoIWNoaWxkcmVuKCkubGVuZ3RoKSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gY2hpbGRyZW4oKVxyXG4gICAgICAubWFwKChjLCBpZHgpID0+IChjLmVycm9yKCkgPyBgJHtpZHh9OiAke2MuZXJyb3IoKX1gIDogJycpKVxyXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXHJcbiAgICAgIC5qb2luKCdcXG4nKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgZGlydHkgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAoY3RybC5kaXJ0eSgpKSByZXR1cm4gdHJ1ZTtcclxuICAgIGlmICghY2hpbGRyZW4oKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBjaGlsZHJlbigpLnNvbWUoKGMpID0+IGMuZGlydHkoKSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IG1hcmtBbGxBc1RvdWNoZWQgPSAoKSA9PiB7XHJcbiAgICBjdHJsLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIGZvciAoY29uc3QgYyBvZiB1bnRyYWNrZWQoY2hpbGRyZW4pKSB7XHJcbiAgICAgIGMubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgY29uc3QgbWFya0FsbEFzUHJpc3RpbmUgPSAoKSA9PiB7XHJcbiAgICBjdHJsLm1hcmtBbGxBc1ByaXN0aW5lKCk7XHJcbiAgICBmb3IgKGNvbnN0IGMgb2YgdW50cmFja2VkKGNoaWxkcmVuKSkge1xyXG4gICAgICBjLm1hcmtBbGxBc1ByaXN0aW5lKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgdG9QYXJ0aWFsVmFsdWUgPSBvcHQ/LnRvUGFydGlhbFZhbHVlID8/ICgodjogVCkgPT4gdik7XHJcbiAgY29uc3QgcGFydGlhbFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKCFkaXJ0eSgpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIGNoaWxkcmVuKCkubWFwKChjKSA9PiB7XHJcbiAgICAgIGNvbnN0IHB2ID0gYy5wYXJ0aWFsVmFsdWUoKTtcclxuICAgICAgaWYgKHB2KSByZXR1cm4gcHY7XHJcbiAgICAgIGlmIChjLmNvbnRyb2xUeXBlID09PSAnY29udHJvbCcpIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAvLyByZXR1cm4gZnVsbCB2YWx1ZSBmb3IgIGNoaWxkIG9iamVjdHMvYXJyYXlzIGFzIHRoaXMgY2Fubm90IGJlIHBhcnRpYWxseSBwYXRjaGVkIHdpdGhvdXQgaWR4XHJcbiAgICAgIHJldHVybiB0b1BhcnRpYWxWYWx1ZShjLnZhbHVlKCkpO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHRvdWNoZWQgPSBjb21wdXRlZChcclxuICAgICgpID0+XHJcbiAgICAgIGN0cmwudG91Y2hlZCgpIHx8XHJcbiAgICAgICEhKGNoaWxkcmVuKCkubGVuZ3RoICYmIGNoaWxkcmVuKCkuc29tZSgoYykgPT4gYy50b3VjaGVkKCkpKSxcclxuICApO1xyXG5cclxuICBjb25zdCByZWNvbmNpbGUgPSAobmV3VmFsdWU6IFRbXSkgPT4ge1xyXG4gICAgY29uc3QgY3RybHMgPSB1bnRyYWNrZWQoY2hpbGRyZW4pO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY3RybHMuYXQoaSk/LnJlY29uY2lsZShuZXdWYWx1ZVtpXSk7IC8vIHJlY29uY2lsZSBleGlzdGluZyBjb250cm9scyB0aGF0IGFyZSByZWxldmFudCBhZGRpdGlvbi9yZW1vdmFsIHdpbGwgYmUgaGFuZGxlZCBhZnRlciBjdHJsLnJlY29uY2lsZSB0aHJvdWdoIGxpbmtlZFNpZ25hbFxyXG4gICAgfVxyXG5cclxuICAgIGN0cmwucmVjb25jaWxlKG1lcmdlQXJyYXkobmV3VmFsdWUsIHVudHJhY2tlZChjdHJsLnZhbHVlKSkpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGZvcmNlUmVjb25jaWxlID0gKG5ld1ZhbHVlOiBUW10pID0+IHtcclxuICAgIGNvbnN0IGN0cmxzID0gdW50cmFja2VkKGNoaWxkcmVuKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1ZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGN0cmxzLmF0KGkpPy5mb3JjZVJlY29uY2lsZShuZXdWYWx1ZVtpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3RybC5mb3JjZVJlY29uY2lsZShuZXdWYWx1ZSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgY2hpbGRyZW5WYWxpZCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICghY2hpbGRyZW4oKS5sZW5ndGgpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGNoaWxkcmVuKCkuZXZlcnkoKGQpID0+IGQudmFsaWQoKSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGNoaWxkcmVuUGVuZGluZyA9IGNvbXB1dGVkKFxyXG4gICAgKCkgPT4gISFjaGlsZHJlbigpLmxlbmd0aCAmJiBjaGlsZHJlbigpLnNvbWUoKGQpID0+IGQucGVuZGluZygpKSxcclxuICApO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4uY3RybCxcclxuICAgIG93bkVycm9yLFxyXG4gICAgZXJyb3IsXHJcbiAgICB2YWxpZDogY29tcHV0ZWQoKCkgPT4gY3RybC52YWxpZCgpICYmIGNoaWxkcmVuVmFsaWQoKSksXHJcbiAgICBwZW5kaW5nOiBjb21wdXRlZCgoKSA9PiBjdHJsLnBlbmRpbmcoKSB8fCBjaGlsZHJlblBlbmRpbmcoKSksXHJcbiAgICB0b3VjaGVkLFxyXG4gICAgY2hpbGRyZW4sXHJcbiAgICBkaXJ0eSxcclxuICAgIG1hcmtBbGxBc1RvdWNoZWQsXHJcbiAgICBtYXJrQWxsQXNQcmlzdGluZSxcclxuICAgIG1pbixcclxuICAgIG1heCxcclxuICAgIHBhcnRpYWxWYWx1ZSxcclxuICAgIGNhbkFkZDogY29tcHV0ZWQoXHJcbiAgICAgICgpID0+ICFjdHJsLmRpc2FibGVkKCkgJiYgIWN0cmwucmVhZG9ubHkoKSAmJiBsZW5ndGgoKSA8IG1heCgpLFxyXG4gICAgKSxcclxuICAgIGNhblJlbW92ZTogY29tcHV0ZWQoXHJcbiAgICAgICgpID0+ICFjdHJsLmRpc2FibGVkKCkgJiYgIWN0cmwucmVhZG9ubHkoKSAmJiBsZW5ndGgoKSA+IG1pbigpLFxyXG4gICAgKSxcclxuICAgIHJlY29uY2lsZSxcclxuICAgIGZvcmNlUmVjb25jaWxlLFxyXG4gICAgcmVzZXQ6ICgpID0+IHtcclxuICAgICAgZm9yIChjb25zdCBjIG9mIHVudHJhY2tlZChjaGlsZHJlbikpIHtcclxuICAgICAgICBjLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICAgY3RybC5yZXNldCgpO1xyXG4gICAgfSxcclxuICAgIHJlc2V0V2l0aEluaXRpYWw6IChpbml0aWFsOiBUW10pID0+IHtcclxuICAgICAgY29uc3QgY3RybHMgPSB1bnRyYWNrZWQoY2hpbGRyZW4pO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluaXRpYWwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjdHJscy5hdChpKT8ucmVzZXRXaXRoSW5pdGlhbChpbml0aWFsW2ldKTtcclxuICAgICAgfVxyXG4gICAgICBjdHJsLnJlc2V0V2l0aEluaXRpYWwoaW5pdGlhbCk7XHJcbiAgICB9LFxyXG4gICAgcHVzaDogKG5leHQpID0+IGN0cmwudmFsdWUudXBkYXRlKChjdXIpID0+IFsuLi5jdXIsIG5leHRdKSxcclxuICAgIHJlbW92ZTogKGlkeCkgPT5cclxuICAgICAgY3RybC52YWx1ZS51cGRhdGUoKGN1cikgPT4gY3VyLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaWR4KSksXHJcbiAgfTtcclxufVxyXG4iXX0=","import { computed, isSignal, signal, untracked, } from '@angular/core';\nimport { isDerivation, toFakeSignalDerivation, } from '@mmstack/primitives';\nimport { formControl, } from './form-control';\nimport { mergeIfObject } from './util';\n/**\n * Creates a `FormGroupSignal`, which aggregates a set of child form controls into a single object.\n *\n * @typeParam T - The type of the form group's value (an object).\n * @typeParam TDerivations - A record where keys are the names of the child controls and values are the `FormControlSignal` instances.\n * @typeParam TParent - The type of the parent form control's value (if this group is nested within another group or array).\n * @param initial - The initial value of the form group (or a `WritableSignal` or `DerivedSignal` if the group is nested).\n * @param providedChildren - An object containing the child `FormControlSignal` instances, or a function that returns such an object.\n * Using a function allows for dynamic creation of child controls (e.g., in response to changes in other signals).\n * @param options - Optional configuration options for the form group.\n * @returns A `FormGroupSignal` instance.\n *\n * @example\n * // Create a simple form group:\n * const user = signal({ name: 'John Doe', age: 30 });\n * const form = formGroup(user, {\n * name: formControl(derived(user, 'name')),\n * age: formControl(derived(user, 'age')),\n * })\n *\n * // Create a nested form group:\n * const user = signal({ name: 'John', age: 30, address: {street: \"Some street\"} });\n *\n * const address = derived(user, 'address');\n * const userForm = formGroup(user, {\n * name: formControl(derived(user, 'name')),\n * age: formControl(derived(user, 'age')),\n * address: formGroup(address, {\n * street: formControl(derived(address, (address) => address.street), {\n * validator: () => (value) => value ? \"\" : \"required!\"\n * }) // you can create deeply nested structures.\n * })\n * });\n *\n * // Create a form group with dynamically created children replaced rare FormRecord requirements.\n * const showAddress = signal(false);\n * type Characteristic = {\n * valueType: 'string';\n * value: string;\n * } | {\n * valueType: 'number';\n * value: number;\n * }\n * const char = signal<Characteristic>({ valueType: 'string', value: '' });\n * const charForm = formGroup(char, () => {\n * if (char().valueType === 'string) return createStringControl(char);\n * return createNumberControl(char);\n * });\n *\n */\nexport function formGroup(initial, providedChildren, opt) {\n const valueSignal = isSignal(initial) ? initial : signal(initial);\n // we fake a derivation if not present, so that .from is present on the signal\n const value = isDerivation(valueSignal)\n ? valueSignal\n : toFakeSignalDerivation(valueSignal);\n // we allow for a function/signal to be passed, this case should only be used if the child controls change dependent upon something, say if a formControl is flipped into a formGroup.\n const children = typeof providedChildren === 'function'\n ? computed(() => providedChildren())\n : computed(() => providedChildren);\n // array allows for easier handling\n const derivationsArray = computed(() => Object.values(children()), ...(ngDevMode ? [{ debugName: \"derivationsArray\" }] : []));\n const childrenDirty = computed(() => !!derivationsArray().length && derivationsArray().some((d) => d.dirty()), ...(ngDevMode ? [{ debugName: \"childrenDirty\" }] : []));\n // by default dont compare object references, just use childrenDirtySignal\n const baseDirtyEq = opt?.dirtyEquality ?? opt?.equal ?? (() => true);\n // function which calls a signal becomes a signal\n const dirtyEquality = (a, b) => {\n return baseDirtyEq(a, b) && !childrenDirty();\n };\n // group control\n const ctrl = formControl(value, {\n ...opt,\n dirtyEquality,\n controlType: 'group',\n readonly: () => {\n // readonly if is readonly or all children are readonly\n if (opt?.readonly?.())\n return true;\n return (!!derivationsArray().length &&\n derivationsArray().every((d) => d.readonly()));\n },\n disable: () => {\n if (opt?.disable?.())\n return true;\n return (!!derivationsArray().length &&\n derivationsArray().every((d) => d.disabled()));\n },\n });\n const childrenTouched = computed(() => !!derivationsArray().length &&\n derivationsArray().some((d) => d.touched()), ...(ngDevMode ? [{ debugName: \"childrenTouched\" }] : []));\n const touched = computed(() => ctrl.touched() || childrenTouched(), ...(ngDevMode ? [{ debugName: \"touched\" }] : []));\n const childError = computed(() => {\n if (!derivationsArray().length)\n return '';\n return derivationsArray()\n .map((d) => (d.error() ? `${d.label()}: ${d.error()}` : ''))\n .filter(Boolean)\n .join('\\n');\n }, ...(ngDevMode ? [{ debugName: \"childError\" }] : []));\n const error = computed(() => {\n const ownError = ctrl.error();\n if (ownError)\n return ownError;\n return childError() ? 'INVALID' : '';\n }, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n const markAllAsTouched = () => {\n ctrl.markAllAsTouched();\n for (const ctrl of untracked(derivationsArray)) {\n ctrl.markAllAsTouched();\n }\n };\n const markAllAsPristine = () => {\n ctrl.markAllAsPristine();\n for (const ctrl of untracked(derivationsArray)) {\n ctrl.markAllAsPristine();\n }\n };\n const reconcile = (newValue) => {\n // set the children values based on the derivation of the new value\n for (const ctrl of untracked(derivationsArray)) {\n const from = ctrl.from;\n if (!from)\n continue;\n ctrl.reconcile(from(newValue));\n }\n ctrl.reconcile(mergeIfObject(newValue, untracked(value)));\n };\n const forceReconcile = (newValue) => {\n for (const ctrl of untracked(derivationsArray)) {\n const from = ctrl.from;\n if (!from)\n continue;\n ctrl.forceReconcile(from(newValue));\n }\n ctrl.forceReconcile(newValue);\n };\n const createBaseValueFn = opt?.createBasePartialValue;\n const basePartialValue = createBaseValueFn\n ? computed(() => createBaseValueFn(ctrl.value()))\n : computed(() => ({}));\n const partialValue = computed(() => {\n const obj = {\n ...basePartialValue(),\n };\n if (!ctrl.dirty())\n return obj;\n for (const [key, ctrl] of Object.entries(children())) {\n const pv = ctrl.partialValue();\n if (pv === undefined)\n continue;\n obj[key] = pv;\n }\n return obj;\n }, ...(ngDevMode ? [{ debugName: \"partialValue\" }] : []));\n const childrenValid = computed(() => {\n if (!derivationsArray().length)\n return true;\n return derivationsArray().every((d) => d.valid());\n }, ...(ngDevMode ? [{ debugName: \"childrenValid\" }] : []));\n const childrenPending = computed(() => !!derivationsArray().length &&\n derivationsArray().some((d) => d.pending()), ...(ngDevMode ? [{ debugName: \"childrenPending\" }] : []));\n return {\n ...ctrl,\n children,\n partialValue,\n reconcile,\n forceReconcile,\n ownError: ctrl.error,\n touched,\n error,\n valid: computed(() => ctrl.valid() && childrenValid()),\n pending: computed(() => ctrl.pending() || childrenPending()),\n markAllAsPristine,\n markAllAsTouched,\n reset: () => {\n for (const ctrl of untracked(derivationsArray)) {\n ctrl.reset();\n }\n ctrl.reset();\n },\n resetWithInitial: (initial) => {\n for (const ctrl of untracked(derivationsArray)) {\n const from = ctrl.from;\n if (from)\n ctrl.resetWithInitial(from(initial));\n else\n ctrl.reset();\n }\n ctrl.resetWithInitial(initial);\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0vY29yZS9zcmMvbGliL2Zvcm0tZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsWUFBWSxFQUNaLHNCQUFzQixHQUV2QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxXQUFXLEdBR1osTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBZ0V2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlERztBQUNILE1BQU0sVUFBVSxTQUFTLENBS3ZCLE9BQTBELEVBQzFELGdCQUFxRCxFQUNyRCxHQUE2QztJQUU3QyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLDhFQUE4RTtJQUM5RSxNQUFNLEtBQUssR0FBRyxZQUFZLENBQWEsV0FBVyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxXQUFXO1FBQ2IsQ0FBQyxDQUFDLHNCQUFzQixDQUFhLFdBQVcsQ0FBQyxDQUFDO0lBRXBELHNMQUFzTDtJQUN0TCxNQUFNLFFBQVEsR0FDWixPQUFPLGdCQUFnQixLQUFLLFVBQVU7UUFDcEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUV2QyxtQ0FBbUM7SUFDbkMsTUFBTSxnQkFBZ0IsR0FB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SUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUN2QixJQUFJLElBQUk7b0JBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOztvQkFDMUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BCLENBQUM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBpc1NpZ25hbCxcclxuICBzaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgaXNEZXJpdmF0aW9uLFxyXG4gIHRvRmFrZVNpZ25hbERlcml2YXRpb24sXHJcbiAgdHlwZSBEZXJpdmVkU2lnbmFsLFxyXG59IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG5pbXBvcnQge1xyXG4gIGZvcm1Db250cm9sLFxyXG4gIHR5cGUgQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zLFxyXG4gIHR5cGUgRm9ybUNvbnRyb2xTaWduYWwsXHJcbn0gZnJvbSAnLi9mb3JtLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyB0eXBlIFNpZ25hbFZhbHVlIH0gZnJvbSAnLi9zaWduYWwtdmFsdWUudHlwZSc7XHJcbmltcG9ydCB7IG1lcmdlSWZPYmplY3QgfSBmcm9tICcuL3V0aWwnO1xyXG5cclxudHlwZSBBbnlPYmplY3QgPSBSZWNvcmQ8UHJvcGVydHlLZXksIGFueT47XHJcblxyXG4vKipcclxuICogRXh0cmFjdHMgdGhlIHBhcnRpYWwgdmFsdWUgdHlwZXMgZnJvbSBhIHJlY29yZCBvZiBgRm9ybUNvbnRyb2xTaWduYWxgIGluc3RhbmNlcy5cclxuICogVGhpcyBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgYHBhcnRpYWxWYWx1ZWAgdHlwZSBmb3IgYEZvcm1Hcm91cFNpZ25hbGAuXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxudHlwZSBEZXJpdmF0aW9uUGFydGlhbFZhbHVlczxcclxuICBURGVyaXZhdGlvbnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBGb3JtQ29udHJvbFNpZ25hbDxhbnksIGFueSwgYW55LCBhbnk+PixcclxuPiA9IHtcclxuICBbSyBpbiBrZXlvZiBURGVyaXZhdGlvbnNdOiBFeGNsdWRlPFxyXG4gICAgU2lnbmFsVmFsdWU8VERlcml2YXRpb25zW0tdWydwYXJ0aWFsVmFsdWUnXT4sXHJcbiAgICB1bmRlZmluZWRcclxuICA+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBncm91cCBvZiBmb3JtIGNvbnRyb2xzLCBzaW1pbGFyIHRvIEFuZ3VsYXIncyBgRm9ybUdyb3VwYC4gIEl0IGFnZ3JlZ2F0ZXNcclxuICogdGhlIHZhbHVlcyBhbmQgc3RhdGVzIG9mIGl0cyBjaGlsZCBjb250cm9scyBpbnRvIGEgc2luZ2xlIG9iamVjdC5cclxuICpcclxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGZvcm0gZ3JvdXAncyB2YWx1ZSAoYW4gb2JqZWN0KS5cclxuICogQHR5cGVQYXJhbSBURGVyaXZhdGlvbnMgLSBBIHJlY29yZCB3aGVyZSBrZXlzIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGNoaWxkIGNvbnRyb2xzIGFuZCB2YWx1ZXMgYXJlIHRoZSBgRm9ybUNvbnRyb2xTaWduYWxgIGluc3RhbmNlcy5cclxuICogQHR5cGVQYXJhbSBUUGFyZW50IC0gVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGNvbnRyb2wncyB2YWx1ZSAoaWYgdGhpcyBncm91cCBpcyBuZXN0ZWQpLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRm9ybUdyb3VwU2lnbmFsPFxyXG4gIFQsXHJcbiAgVERlcml2YXRpb25zIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2xTaWduYWw8YW55LCBULCBhbnksIGFueT4+LFxyXG4gIFRQYXJlbnQgPSB1bmRlZmluZWQsXHJcbj4gPSBGb3JtQ29udHJvbFNpZ25hbDxcclxuICBULFxyXG4gIFRQYXJlbnQsXHJcbiAgJ2dyb3VwJyxcclxuICBQYXJ0aWFsPERlcml2YXRpb25QYXJ0aWFsVmFsdWVzPFREZXJpdmF0aW9ucz4+XHJcbj4gJiB7XHJcbiAgLyoqXHJcbiAgICogQSBzaWduYWwgdGhhdCBob2xkcyBhIHJlY29yZCBvZiB0aGUgY2hpbGQgZm9ybSBjb250cm9scy4gIFRoZSBrZXlzIGFyZSB0aGUgbmFtZXNcclxuICAgKiBvZiB0aGUgY29udHJvbHMsIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgYEZvcm1Db250cm9sU2lnbmFsYCBpbnN0YW5jZXMuXHJcbiAgICovXHJcbiAgY2hpbGRyZW46IFNpZ25hbDxURGVyaXZhdGlvbnM+O1xyXG4gIC8qKlxyXG4gICAqIEEgc2lnbmFsIHRoYXQgaG9sZHMgdGhlIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZSBvZiB0aGUgZ3JvdXAgaXRzZWxmIChleGNsdWRpbmcgY2hpbGQgZXJyb3JzKS5cclxuICAgKi9cclxuICBvd25FcnJvcjogU2lnbmFsPHN0cmluZz47XHJcbn07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBgRm9ybUdyb3VwU2lnbmFsYC4gIEV4dGVuZHMgYENyZWF0ZUZvcm1Db250cm9sT3B0aW9uc2AuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDcmVhdGVGb3JtR3JvdXBPcHRpb25zPFxyXG4gIFQsXHJcbiAgVERlcml2YXRpb25zIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2xTaWduYWw8YW55LCBULCBhbnksIGFueT4+LFxyXG4+ID0gQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zPFQsICdncm91cCc+ICYge1xyXG4gIC8qKlxyXG4gICAqIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGJhc2Ugb2JqZWN0IGZvciB0aGUgYHBhcnRpYWxWYWx1ZWAgc2lnbmFsLlxyXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJlLXBvcHVsYXRlIHRoZSBwYXJ0aWFsIHZhbHVlIHdpdGggZGVmYXVsdCB2YWx1ZXMgb3JcclxuICAgKiB0byBwZXJmb3JtIGN1c3RvbSBsb2dpYyBiZWZvcmUgbWVyZ2luZyBpbiB0aGUgcGFydGlhbCB2YWx1ZXMgZnJvbSBjaGlsZCBjb250cm9scy5cclxuICAgKi9cclxuICBjcmVhdGVCYXNlUGFydGlhbFZhbHVlPzogKFxyXG4gICAgdmFsdWU6IFQsXHJcbiAgKSA9PiBQYXJ0aWFsPERlcml2YXRpb25QYXJ0aWFsVmFsdWVzPFREZXJpdmF0aW9ucz4+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBgRm9ybUdyb3VwU2lnbmFsYCwgd2hpY2ggYWdncmVnYXRlcyBhIHNldCBvZiBjaGlsZCBmb3JtIGNvbnRyb2xzIGludG8gYSBzaW5nbGUgb2JqZWN0LlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgZm9ybSBncm91cCdzIHZhbHVlIChhbiBvYmplY3QpLlxyXG4gKiBAdHlwZVBhcmFtIFREZXJpdmF0aW9ucyAtICBBIHJlY29yZCB3aGVyZSBrZXlzIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGNoaWxkIGNvbnRyb2xzIGFuZCB2YWx1ZXMgYXJlIHRoZSBgRm9ybUNvbnRyb2xTaWduYWxgIGluc3RhbmNlcy5cclxuICogQHR5cGVQYXJhbSBUUGFyZW50IC0gVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGNvbnRyb2wncyB2YWx1ZSAoaWYgdGhpcyBncm91cCBpcyBuZXN0ZWQgd2l0aGluIGFub3RoZXIgZ3JvdXAgb3IgYXJyYXkpLlxyXG4gKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBmb3JtIGdyb3VwIChvciBhIGBXcml0YWJsZVNpZ25hbGAgb3IgYERlcml2ZWRTaWduYWxgIGlmIHRoZSBncm91cCBpcyBuZXN0ZWQpLlxyXG4gKiBAcGFyYW0gcHJvdmlkZWRDaGlsZHJlbiAtIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBjaGlsZCBgRm9ybUNvbnRyb2xTaWduYWxgIGluc3RhbmNlcywgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgc3VjaCBhbiBvYmplY3QuXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgYSBmdW5jdGlvbiBhbGxvd3MgZm9yIGR5bmFtaWMgY3JlYXRpb24gb2YgY2hpbGQgY29udHJvbHMgKGUuZy4sIGluIHJlc3BvbnNlIHRvIGNoYW5nZXMgaW4gb3RoZXIgc2lnbmFscykuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZm9ybSBncm91cC5cclxuICogQHJldHVybnMgQSBgRm9ybUdyb3VwU2lnbmFsYCBpbnN0YW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gQ3JlYXRlIGEgc2ltcGxlIGZvcm0gZ3JvdXA6XHJcbiAqICBjb25zdCB1c2VyID0gc2lnbmFsKHsgbmFtZTogJ0pvaG4gRG9lJywgYWdlOiAzMCB9KTtcclxuICogIGNvbnN0IGZvcm0gPSBmb3JtR3JvdXAodXNlciwge1xyXG4gKiAgbmFtZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnbmFtZScpKSxcclxuICogIGFnZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnYWdlJykpLFxyXG4gKiAgfSlcclxuICpcclxuICogLy8gQ3JlYXRlIGEgbmVzdGVkIGZvcm0gZ3JvdXA6XHJcbiAqICBjb25zdCB1c2VyID0gc2lnbmFsKHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwLCBhZGRyZXNzOiB7c3RyZWV0OiBcIlNvbWUgc3RyZWV0XCJ9IH0pO1xyXG4gKlxyXG4gKiBjb25zdCBhZGRyZXNzID0gZGVyaXZlZCh1c2VyLCAnYWRkcmVzcycpO1xyXG4gKiBjb25zdCB1c2VyRm9ybSA9IGZvcm1Hcm91cCh1c2VyLCB7XHJcbiAqICAgbmFtZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnbmFtZScpKSxcclxuICogICBhZ2U6IGZvcm1Db250cm9sKGRlcml2ZWQodXNlciwgJ2FnZScpKSxcclxuICogICBhZGRyZXNzOiBmb3JtR3JvdXAoYWRkcmVzcywge1xyXG4gKiAgICAgICBzdHJlZXQ6IGZvcm1Db250cm9sKGRlcml2ZWQoYWRkcmVzcywgKGFkZHJlc3MpID0+IGFkZHJlc3Muc3RyZWV0KSwge1xyXG4gKiAgICAgICAgICAgdmFsaWRhdG9yOiAoKSA9PiAodmFsdWUpID0+IHZhbHVlID8gXCJcIiA6IFwicmVxdWlyZWQhXCJcclxuICogICAgICAgfSkgLy8geW91IGNhbiBjcmVhdGUgZGVlcGx5IG5lc3RlZCBzdHJ1Y3R1cmVzLlxyXG4gKiAgIH0pXHJcbiAqIH0pO1xyXG4gKlxyXG4gKiAvLyBDcmVhdGUgYSBmb3JtIGdyb3VwIHdpdGggZHluYW1pY2FsbHkgY3JlYXRlZCBjaGlsZHJlbiByZXBsYWNlZCByYXJlIEZvcm1SZWNvcmQgcmVxdWlyZW1lbnRzLlxyXG4gKiBjb25zdCBzaG93QWRkcmVzcyA9IHNpZ25hbChmYWxzZSk7XHJcbiAqIHR5cGUgQ2hhcmFjdGVyaXN0aWMgPSB7XHJcbiAqICB2YWx1ZVR5cGU6ICdzdHJpbmcnO1xyXG4gKiAgdmFsdWU6IHN0cmluZztcclxuICogfSB8IHtcclxuICogIHZhbHVlVHlwZTogJ251bWJlcic7XHJcbiAqICB2YWx1ZTogbnVtYmVyO1xyXG4gKiB9XHJcbiAqIGNvbnN0IGNoYXIgPSBzaWduYWw8Q2hhcmFjdGVyaXN0aWM+KHsgdmFsdWVUeXBlOiAnc3RyaW5nJywgdmFsdWU6ICcnIH0pO1xyXG4gKiBjb25zdCBjaGFyRm9ybSA9IGZvcm1Hcm91cChjaGFyLCAoKSA9PiB7XHJcbiAqICBpZiAoY2hhcigpLnZhbHVlVHlwZSA9PT0gJ3N0cmluZykgcmV0dXJuIGNyZWF0ZVN0cmluZ0NvbnRyb2woY2hhcik7XHJcbiAqICByZXR1cm4gY3JlYXRlTnVtYmVyQ29udHJvbChjaGFyKTtcclxuICogfSk7XHJcbiAqXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZm9ybUdyb3VwPFxyXG4gIFQsXHJcbiAgVERlcml2YXRpb25zIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2xTaWduYWw8YW55LCBULCBhbnksIGFueT4+LFxyXG4gIFRQYXJlbnQgPSB1bmRlZmluZWQsXHJcbj4oXHJcbiAgaW5pdGlhbDogRGVyaXZlZFNpZ25hbDxUUGFyZW50LCBUPiB8IFQgfCBXcml0YWJsZVNpZ25hbDxUPixcclxuICBwcm92aWRlZENoaWxkcmVuOiAoKCkgPT4gVERlcml2YXRpb25zKSB8IFREZXJpdmF0aW9ucyxcclxuICBvcHQ/OiBDcmVhdGVGb3JtR3JvdXBPcHRpb25zPFQsIFREZXJpdmF0aW9ucz4sXHJcbik6IEZvcm1Hcm91cFNpZ25hbDxULCBURGVyaXZhdGlvbnMsIFRQYXJlbnQ+IHtcclxuICBjb25zdCB2YWx1ZVNpZ25hbCA9IGlzU2lnbmFsKGluaXRpYWwpID8gaW5pdGlhbCA6IHNpZ25hbChpbml0aWFsKTtcclxuICAvLyB3ZSBmYWtlIGEgZGVyaXZhdGlvbiBpZiBub3QgcHJlc2VudCwgc28gdGhhdCAuZnJvbSBpcyBwcmVzZW50IG9uIHRoZSBzaWduYWxcclxuICBjb25zdCB2YWx1ZSA9IGlzRGVyaXZhdGlvbjxUUGFyZW50LCBUPih2YWx1ZVNpZ25hbClcclxuICAgID8gdmFsdWVTaWduYWxcclxuICAgIDogdG9GYWtlU2lnbmFsRGVyaXZhdGlvbjxUUGFyZW50LCBUPih2YWx1ZVNpZ25hbCk7XHJcblxyXG4gIC8vIHdlIGFsbG93IGZvciBhIGZ1bmN0aW9uL3NpZ25hbCB0byBiZSBwYXNzZWQsIHRoaXMgY2FzZSBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBjaGlsZCBjb250cm9scyBjaGFuZ2UgZGVwZW5kZW50IHVwb24gc29tZXRoaW5nLCBzYXkgaWYgYSBmb3JtQ29udHJvbCBpcyBmbGlwcGVkIGludG8gYSBmb3JtR3JvdXAuXHJcbiAgY29uc3QgY2hpbGRyZW4gPVxyXG4gICAgdHlwZW9mIHByb3ZpZGVkQ2hpbGRyZW4gPT09ICdmdW5jdGlvbidcclxuICAgICAgPyBjb21wdXRlZCgoKSA9PiBwcm92aWRlZENoaWxkcmVuKCkpXHJcbiAgICAgIDogY29tcHV0ZWQoKCkgPT4gcHJvdmlkZWRDaGlsZHJlbik7XHJcblxyXG4gIC8vIGFycmF5IGFsbG93cyBmb3IgZWFzaWVyIGhhbmRsaW5nXHJcbiAgY29uc3QgZGVyaXZhdGlvbnNBcnJheSA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC52YWx1ZXMoY2hpbGRyZW4oKSkpO1xyXG5cclxuICBjb25zdCBjaGlsZHJlbkRpcnR5ID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PlxyXG4gICAgICAhIWRlcml2YXRpb25zQXJyYXkoKS5sZW5ndGggJiYgZGVyaXZhdGlvbnNBcnJheSgpLnNvbWUoKGQpID0+IGQuZGlydHkoKSksXHJcbiAgKTtcclxuXHJcbiAgLy8gYnkgZGVmYXVsdCBkb250IGNvbXBhcmUgb2JqZWN0IHJlZmVyZW5jZXMsIGp1c3QgdXNlIGNoaWxkcmVuRGlydHlTaWduYWxcclxuICBjb25zdCBiYXNlRGlydHlFcSA9IG9wdD8uZGlydHlFcXVhbGl0eSA/PyBvcHQ/LmVxdWFsID8/ICgoKSA9PiB0cnVlKTtcclxuXHJcbiAgLy8gZnVuY3Rpb24gd2hpY2ggY2FsbHMgYSBzaWduYWwgYmVjb21lcyBhIHNpZ25hbFxyXG4gIGNvbnN0IGRpcnR5RXF1YWxpdHkgPSAoYTogVCwgYjogVCkgPT4ge1xyXG4gICAgcmV0dXJuIGJhc2VEaXJ0eUVxKGEsIGIpICYmICFjaGlsZHJlbkRpcnR5KCk7XHJcbiAgfTtcclxuXHJcbiAgLy8gZ3JvdXAgY29udHJvbFxyXG4gIGNvbnN0IGN0cmwgPSBmb3JtQ29udHJvbDxULCBUUGFyZW50LCAnZ3JvdXAnPih2YWx1ZSwge1xyXG4gICAgLi4ub3B0LFxyXG4gICAgZGlydHlFcXVhbGl0eSxcclxuICAgIGNvbnRyb2xUeXBlOiAnZ3JvdXAnLFxyXG4gICAgcmVhZG9ubHk6ICgpID0+IHtcclxuICAgICAgLy8gcmVhZG9ubHkgaWYgaXMgcmVhZG9ubHkgb3IgYWxsIGNoaWxkcmVuIGFyZSByZWFkb25seVxyXG4gICAgICBpZiAob3B0Py5yZWFkb25seT8uKCkpIHJldHVybiB0cnVlO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICEhZGVyaXZhdGlvbnNBcnJheSgpLmxlbmd0aCAmJlxyXG4gICAgICAgIGRlcml2YXRpb25zQXJyYXkoKS5ldmVyeSgoZCkgPT4gZC5yZWFkb25seSgpKVxyXG4gICAgICApO1xyXG4gICAgfSxcclxuICAgIGRpc2FibGU6ICgpID0+IHtcclxuICAgICAgaWYgKG9wdD8uZGlzYWJsZT8uKCkpIHJldHVybiB0cnVlO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICEhZGVyaXZhdGlvbnNBcnJheSgpLmxlbmd0aCAmJlxyXG4gICAgICAgIGRlcml2YXRpb25zQXJyYXkoKS5ldmVyeSgoZCkgPT4gZC5kaXNhYmxlZCgpKVxyXG4gICAgICApO1xyXG4gICAgfSxcclxuICB9KSBzYXRpc2ZpZXMgRm9ybUNvbnRyb2xTaWduYWw8VCwgVFBhcmVudCwgJ2dyb3VwJz47XHJcblxyXG4gIGNvbnN0IGNoaWxkcmVuVG91Y2hlZCA9IGNvbXB1dGVkKFxyXG4gICAgKCkgPT5cclxuICAgICAgISFkZXJpdmF0aW9uc0FycmF5KCkubGVuZ3RoICYmXHJcbiAgICAgIGRlcml2YXRpb25zQXJyYXkoKS5zb21lKChkKSA9PiBkLnRvdWNoZWQoKSksXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgdG91Y2hlZCA9IGNvbXB1dGVkKCgpID0+IGN0cmwudG91Y2hlZCgpIHx8IGNoaWxkcmVuVG91Y2hlZCgpKTtcclxuXHJcbiAgY29uc3QgY2hpbGRFcnJvciA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICghZGVyaXZhdGlvbnNBcnJheSgpLmxlbmd0aCkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIGRlcml2YXRpb25zQXJyYXkoKVxyXG4gICAgICAubWFwKChkKSA9PiAoZC5lcnJvcigpID8gYCR7ZC5sYWJlbCgpfTogJHtkLmVycm9yKCl9YCA6ICcnKSlcclxuICAgICAgLmZpbHRlcihCb29sZWFuKVxyXG4gICAgICAuam9pbignXFxuJyk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGVycm9yID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3Qgb3duRXJyb3IgPSBjdHJsLmVycm9yKCk7XHJcbiAgICBpZiAob3duRXJyb3IpIHJldHVybiBvd25FcnJvcjtcclxuICAgIHJldHVybiBjaGlsZEVycm9yKCkgPyAnSU5WQUxJRCcgOiAnJztcclxuICB9KTtcclxuXHJcbiAgY29uc3QgbWFya0FsbEFzVG91Y2hlZCA9ICgpID0+IHtcclxuICAgIGN0cmwubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgZm9yIChjb25zdCBjdHJsIG9mIHVudHJhY2tlZChkZXJpdmF0aW9uc0FycmF5KSkge1xyXG4gICAgICBjdHJsLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBtYXJrQWxsQXNQcmlzdGluZSA9ICgpID0+IHtcclxuICAgIGN0cmwubWFya0FsbEFzUHJpc3RpbmUoKTtcclxuICAgIGZvciAoY29uc3QgY3RybCBvZiB1bnRyYWNrZWQoZGVyaXZhdGlvbnNBcnJheSkpIHtcclxuICAgICAgY3RybC5tYXJrQWxsQXNQcmlzdGluZSgpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHJlY29uY2lsZSA9IChuZXdWYWx1ZTogVCkgPT4ge1xyXG4gICAgLy8gc2V0IHRoZSBjaGlsZHJlbiB2YWx1ZXMgYmFzZWQgb24gdGhlIGRlcml2YXRpb24gb2YgdGhlIG5ldyB2YWx1ZVxyXG4gICAgZm9yIChjb25zdCBjdHJsIG9mIHVudHJhY2tlZChkZXJpdmF0aW9uc0FycmF5KSkge1xyXG4gICAgICBjb25zdCBmcm9tID0gY3RybC5mcm9tO1xyXG4gICAgICBpZiAoIWZyb20pIGNvbnRpbnVlO1xyXG4gICAgICBjdHJsLnJlY29uY2lsZShmcm9tKG5ld1ZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICBjdHJsLnJlY29uY2lsZShtZXJnZUlmT2JqZWN0KG5ld1ZhbHVlLCB1bnRyYWNrZWQodmFsdWUpKSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZm9yY2VSZWNvbmNpbGUgPSAobmV3VmFsdWU6IFQpID0+IHtcclxuICAgIGZvciAoY29uc3QgY3RybCBvZiB1bnRyYWNrZWQoZGVyaXZhdGlvbnNBcnJheSkpIHtcclxuICAgICAgY29uc3QgZnJvbSA9IGN0cmwuZnJvbTtcclxuICAgICAgaWYgKCFmcm9tKSBjb250aW51ZTtcclxuICAgICAgY3RybC5mb3JjZVJlY29uY2lsZShmcm9tKG5ld1ZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICBjdHJsLmZvcmNlUmVjb25jaWxlKG5ld1ZhbHVlKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBjcmVhdGVCYXNlVmFsdWVGbiA9IG9wdD8uY3JlYXRlQmFzZVBhcnRpYWxWYWx1ZTtcclxuXHJcbiAgY29uc3QgYmFzZVBhcnRpYWxWYWx1ZTogU2lnbmFsPFxyXG4gICAgUGFydGlhbDxEZXJpdmF0aW9uUGFydGlhbFZhbHVlczxURGVyaXZhdGlvbnM+PlxyXG4gID4gPSBjcmVhdGVCYXNlVmFsdWVGblxyXG4gICAgPyBjb21wdXRlZCgoKSA9PiBjcmVhdGVCYXNlVmFsdWVGbihjdHJsLnZhbHVlKCkpKVxyXG4gICAgOiBjb21wdXRlZCgoKSA9PiAoe30pKTtcclxuXHJcbiAgY29uc3QgcGFydGlhbFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3Qgb2JqOiBQYXJ0aWFsPERlcml2YXRpb25QYXJ0aWFsVmFsdWVzPFREZXJpdmF0aW9ucz4+ID0ge1xyXG4gICAgICAuLi5iYXNlUGFydGlhbFZhbHVlKCksXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghY3RybC5kaXJ0eSgpKSByZXR1cm4gb2JqO1xyXG5cclxuICAgIGZvciAoY29uc3QgW2tleSwgY3RybF0gb2YgT2JqZWN0LmVudHJpZXMoY2hpbGRyZW4oKSkpIHtcclxuICAgICAgY29uc3QgcHYgPSBjdHJsLnBhcnRpYWxWYWx1ZSgpO1xyXG5cclxuICAgICAgaWYgKHB2ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xyXG4gICAgICAob2JqIGFzIEFueU9iamVjdClba2V5XSA9IHB2O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYmo7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGNoaWxkcmVuVmFsaWQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAoIWRlcml2YXRpb25zQXJyYXkoKS5sZW5ndGgpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGRlcml2YXRpb25zQXJyYXkoKS5ldmVyeSgoZCkgPT4gZC52YWxpZCgpKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgY2hpbGRyZW5QZW5kaW5nID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PlxyXG4gICAgICAhIWRlcml2YXRpb25zQXJyYXkoKS5sZW5ndGggJiZcclxuICAgICAgZGVyaXZhdGlvbnNBcnJheSgpLnNvbWUoKGQpID0+IGQucGVuZGluZygpKSxcclxuICApO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4uY3RybCxcclxuICAgIGNoaWxkcmVuLFxyXG4gICAgcGFydGlhbFZhbHVlLFxyXG4gICAgcmVjb25jaWxlLFxyXG4gICAgZm9yY2VSZWNvbmNpbGUsXHJcbiAgICBvd25FcnJvcjogY3RybC5lcnJvcixcclxuICAgIHRvdWNoZWQsXHJcbiAgICBlcnJvcixcclxuICAgIHZhbGlkOiBjb21wdXRlZCgoKSA9PiBjdHJsLnZhbGlkKCkgJiYgY2hpbGRyZW5WYWxpZCgpKSxcclxuICAgIHBlbmRpbmc6IGNvbXB1dGVkKCgpID0+IGN0cmwucGVuZGluZygpIHx8IGNoaWxkcmVuUGVuZGluZygpKSxcclxuICAgIG1hcmtBbGxBc1ByaXN0aW5lLFxyXG4gICAgbWFya0FsbEFzVG91Y2hlZCxcclxuICAgIHJlc2V0OiAoKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgY3RybCBvZiB1bnRyYWNrZWQoZGVyaXZhdGlvbnNBcnJheSkpIHtcclxuICAgICAgICBjdHJsLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICAgY3RybC5yZXNldCgpO1xyXG4gICAgfSxcclxuICAgIHJlc2V0V2l0aEluaXRpYWw6IChpbml0aWFsOiBUKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgY3RybCBvZiB1bnRyYWNrZWQoZGVyaXZhdGlvbnNBcnJheSkpIHtcclxuICAgICAgICBjb25zdCBmcm9tID0gY3RybC5mcm9tO1xyXG4gICAgICAgIGlmIChmcm9tKSBjdHJsLnJlc2V0V2l0aEluaXRpYWwoZnJvbShpbml0aWFsKSk7XHJcbiAgICAgICAgZWxzZSBjdHJsLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICAgY3RybC5yZXNldFdpdGhJbml0aWFsKGluaXRpYWwpO1xyXG4gICAgfSxcclxuICB9O1xyXG59XHJcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW1zdGFjay1mb3JtLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mb3JtL2NvcmUvc3JjL21tc3RhY2stZm9ybS1jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mmstack-form-core.mjs","sources":["../tmp-esm2022/lib/util.js","../tmp-esm2022/lib/form-control.js","../tmp-esm2022/lib/form-array.js","../tmp-esm2022/lib/form-group.js","../tmp-esm2022/mmstack-form-core.js"],"sourcesContent":["/**\n * Merges two arrays element by element using the `mergeIfObject` logic.\n *\n * The resulting array will have the same length as the `next` array.\n * For each index `i`, the element in the resulting array is determined by:\n * `mergeIfObject(prev[i], next[i])`.\n * If `prev` is shorter than `next`, `prev[i]` will be `undefined` for the out-of-bounds indices.\n *\n * @template {any[]} T The array type being merged.\n * @param {T} prev The previous array.\n * @param {T} next The next array.\n * @returns {T} A new array containing the merged elements.\n * @example\n * const prev = [1, { id: 1, name: \"A\" }, [10], \"extraPrev\"];\n * const next = [2, { id: 1, status: \"B\" }, [20, 21], missing , { id: 2 }];\n *\n * mergeArray(prev, next);\n * // Result approx:\n * // [\n * // 2, // Primitive replaced\n * // { id: 1, name: \"A\", status: \"B\" }, // Objects shallow-merged\n * // [20, 21], // Arrays replaced (via mergeIfObject -> mergeArray)\n * // undefined, // Primitive replaced by missing item in sparse 'next' array\n * // { id: 2 } // Added from 'next' (prev[4] was undefined)\n * // ]\n */\nexport function mergeArray(prev, next) {\n return next.map((item, index) => mergeIfObject(prev[index], item));\n}\n/**\n * Merges two values (`prev`, `next`), prioritizing `next` in most cases.\n *\n * Behavior:\n * - If both `prev` and `next` are non-null, non-array objects, it performs a **shallow merge**\n * (`{ ...prev, ...next }`), where properties from `next` overwrite those in `prev`.\n * - If both `prev` and `next` are arrays, it delegates to `mergeArray` for element-wise merging.\n * - In all other scenarios (type mismatch, primitives, null involved, array mixed with object),\n * it simply returns the `next` value.\n *\n * @template T The type of the values being merged.\n * @param {T | undefined} prev The previous value (can be undefined if accessed out of array bounds).\n * @param {T} next The next value.\n * @returns {T} The merged result based on the rules above.\n */\nexport function mergeIfObject(prev, next) {\n if (typeof prev !== typeof next)\n return next;\n if (typeof prev !== 'object' || typeof next !== 'object')\n return next;\n if (prev === null || next === null)\n return next;\n if (Array.isArray(prev) && Array.isArray(next))\n return mergeArray(prev, next);\n if (Array.isArray(prev) || Array.isArray(next))\n return next;\n return { ...prev, ...next };\n}\n/**\n * Generates a unique ID using crypto.randomUUID if available,\n * otherwise falls back to a non-secure random string.\n * @returns {string}\n */\nexport function generateID() {\n if (globalThis.crypto?.randomUUID) {\n return globalThis.crypto.randomUUID();\n }\n return Math.random().toString(36).substring(2);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0vY29yZS9zcmMvbGliL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFrQixJQUFPLEVBQUUsSUFBTztJQUMxRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFhLEVBQUUsQ0FDekMsYUFBYSxDQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FDdkMsQ0FBQztBQUNULENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUksSUFBTyxFQUFFLElBQU87SUFDL0MsSUFBSSxPQUFPLElBQUksS0FBSyxPQUFPLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM3QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEUsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDaEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRTVELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFVBQVU7SUFDeEIsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIE1lcmdlcyB0d28gYXJyYXlzIGVsZW1lbnQgYnkgZWxlbWVudCB1c2luZyB0aGUgYG1lcmdlSWZPYmplY3RgIGxvZ2ljLlxyXG4gKlxyXG4gKiBUaGUgcmVzdWx0aW5nIGFycmF5IHdpbGwgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIGBuZXh0YCBhcnJheS5cclxuICogRm9yIGVhY2ggaW5kZXggYGlgLCB0aGUgZWxlbWVudCBpbiB0aGUgcmVzdWx0aW5nIGFycmF5IGlzIGRldGVybWluZWQgYnk6XHJcbiAqIGBtZXJnZUlmT2JqZWN0KHByZXZbaV0sIG5leHRbaV0pYC5cclxuICogSWYgYHByZXZgIGlzIHNob3J0ZXIgdGhhbiBgbmV4dGAsIGBwcmV2W2ldYCB3aWxsIGJlIGB1bmRlZmluZWRgIGZvciB0aGUgb3V0LW9mLWJvdW5kcyBpbmRpY2VzLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUge2FueVtdfSBUIFRoZSBhcnJheSB0eXBlIGJlaW5nIG1lcmdlZC5cclxuICogQHBhcmFtIHtUfSBwcmV2IFRoZSBwcmV2aW91cyBhcnJheS5cclxuICogQHBhcmFtIHtUfSBuZXh0IFRoZSBuZXh0IGFycmF5LlxyXG4gKiBAcmV0dXJucyB7VH0gQSBuZXcgYXJyYXkgY29udGFpbmluZyB0aGUgbWVyZ2VkIGVsZW1lbnRzLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBjb25zdCBwcmV2ID0gWzEsIHsgaWQ6IDEsIG5hbWU6IFwiQVwiIH0sIFsxMF0sICAgICAgICBcImV4dHJhUHJldlwiXTtcclxuICogY29uc3QgbmV4dCA9IFsyLCB7IGlkOiAxLCBzdGF0dXM6IFwiQlwiIH0sIFsyMCwgMjFdLCAgbWlzc2luZyAgLCB7IGlkOiAyIH1dO1xyXG4gKlxyXG4gKiBtZXJnZUFycmF5KHByZXYsIG5leHQpO1xyXG4gKiAvLyBSZXN1bHQgYXBwcm94OlxyXG4gKiAvLyBbXHJcbiAqIC8vICAgMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJpbWl0aXZlIHJlcGxhY2VkXHJcbiAqIC8vICAgeyBpZDogMSwgbmFtZTogXCJBXCIsIHN0YXR1czogXCJCXCIgfSwgLy8gT2JqZWN0cyBzaGFsbG93LW1lcmdlZFxyXG4gKiAvLyAgIFsyMCwgMjFdLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXJyYXlzIHJlcGxhY2VkICh2aWEgbWVyZ2VJZk9iamVjdCAtPiBtZXJnZUFycmF5KVxyXG4gKiAvLyAgIHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJpbWl0aXZlIHJlcGxhY2VkIGJ5IG1pc3NpbmcgaXRlbSBpbiBzcGFyc2UgJ25leHQnIGFycmF5XHJcbiAqIC8vICAgeyBpZDogMiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGRlZCBmcm9tICduZXh0JyAocHJldls0XSB3YXMgdW5kZWZpbmVkKVxyXG4gKiAvLyBdXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBcnJheTxUIGV4dGVuZHMgYW55W10+KHByZXY6IFQsIG5leHQ6IFQpOiBUIHtcclxuICByZXR1cm4gbmV4dC5tYXAoKGl0ZW0sIGluZGV4KTogVFtudW1iZXJdID0+XHJcbiAgICBtZXJnZUlmT2JqZWN0PFRbbnVtYmVyXT4ocHJldltpbmRleF0sIGl0ZW0pLFxyXG4gICkgYXMgVDtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1lcmdlcyB0d28gdmFsdWVzIChgcHJldmAsIGBuZXh0YCksIHByaW9yaXRpemluZyBgbmV4dGAgaW4gbW9zdCBjYXNlcy5cclxuICpcclxuICogQmVoYXZpb3I6XHJcbiAqIC0gSWYgYm90aCBgcHJldmAgYW5kIGBuZXh0YCBhcmUgbm9uLW51bGwsIG5vbi1hcnJheSBvYmplY3RzLCBpdCBwZXJmb3JtcyBhICoqc2hhbGxvdyBtZXJnZSoqXHJcbiAqIChgeyAuLi5wcmV2LCAuLi5uZXh0IH1gKSwgd2hlcmUgcHJvcGVydGllcyBmcm9tIGBuZXh0YCBvdmVyd3JpdGUgdGhvc2UgaW4gYHByZXZgLlxyXG4gKiAtIElmIGJvdGggYHByZXZgIGFuZCBgbmV4dGAgYXJlIGFycmF5cywgaXQgZGVsZWdhdGVzIHRvIGBtZXJnZUFycmF5YCBmb3IgZWxlbWVudC13aXNlIG1lcmdpbmcuXHJcbiAqIC0gSW4gYWxsIG90aGVyIHNjZW5hcmlvcyAodHlwZSBtaXNtYXRjaCwgcHJpbWl0aXZlcywgbnVsbCBpbnZvbHZlZCwgYXJyYXkgbWl4ZWQgd2l0aCBvYmplY3QpLFxyXG4gKiBpdCBzaW1wbHkgcmV0dXJucyB0aGUgYG5leHRgIHZhbHVlLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB0aGUgdmFsdWVzIGJlaW5nIG1lcmdlZC5cclxuICogQHBhcmFtIHtUIHwgdW5kZWZpbmVkfSBwcmV2IFRoZSBwcmV2aW91cyB2YWx1ZSAoY2FuIGJlIHVuZGVmaW5lZCBpZiBhY2Nlc3NlZCBvdXQgb2YgYXJyYXkgYm91bmRzKS5cclxuICogQHBhcmFtIHtUfSBuZXh0IFRoZSBuZXh0IHZhbHVlLlxyXG4gKiBAcmV0dXJucyB7VH0gVGhlIG1lcmdlZCByZXN1bHQgYmFzZWQgb24gdGhlIHJ1bGVzIGFib3ZlLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSWZPYmplY3Q8VD4ocHJldjogVCwgbmV4dDogVCk6IFQge1xyXG4gIGlmICh0eXBlb2YgcHJldiAhPT0gdHlwZW9mIG5leHQpIHJldHVybiBuZXh0O1xyXG4gIGlmICh0eXBlb2YgcHJldiAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIG5leHQgIT09ICdvYmplY3QnKSByZXR1cm4gbmV4dDtcclxuICBpZiAocHJldiA9PT0gbnVsbCB8fCBuZXh0ID09PSBudWxsKSByZXR1cm4gbmV4dDtcclxuICBpZiAoQXJyYXkuaXNBcnJheShwcmV2KSAmJiBBcnJheS5pc0FycmF5KG5leHQpKSByZXR1cm4gbWVyZ2VBcnJheShwcmV2LCBuZXh0KTtcclxuICBpZiAoQXJyYXkuaXNBcnJheShwcmV2KSB8fCBBcnJheS5pc0FycmF5KG5leHQpKSByZXR1cm4gbmV4dDtcclxuXHJcbiAgcmV0dXJuIHsgLi4ucHJldiwgLi4ubmV4dCB9O1xyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgdW5pcXVlIElEIHVzaW5nIGNyeXB0by5yYW5kb21VVUlEIGlmIGF2YWlsYWJsZSxcclxuICogb3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gYSBub24tc2VjdXJlIHJhbmRvbSBzdHJpbmcuXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVJRCgpIHtcclxuICBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8/LnJhbmRvbVVVSUQpIHtcclxuICAgIHJldHVybiBnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21VVUlEKCk7XHJcbiAgfVxyXG4gIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XHJcbn1cclxuIl19","import { computed, isSignal, signal, untracked, } from '@angular/core';\nimport { generateID } from './util';\n/**\n * Creates a `FormControlSignal`, a reactive form control that holds a value and tracks its\n * validity, dirty state, touched state, and other metadata.\n *\n * @typeParam T - The type of the form control's value.\n * @typeParam TParent - The type of the parent form control's value (if this control is part of a group or array).\n * @typeParam TControlType - The type of the control. Defaults to `'control'`.\n * @typeParam TPartialValue - The type of value when patching\n * @param initial - The initial value of the control, or a `DerivedSignal` if this control is part of a `formGroup` or `formArray`.\n * @param options - Optional configuration options for the control.\n * @returns A `FormControlSignal` instance.\n *\n * @example\n * // Create a simple form control:\n * const name = formControl('Initial Name');\n *\n * // Create a form control with validation:\n * const age = formControl(0, {\n * validator: () => (value) => value >= 18 ? '' : 'Must be at least 18',\n * });\n *\n * // Create a derived form control (equivalent to the above, but more explicit):\n * const user = signal({ name: 'John Doe', age: 30 });\n * const name = formControl(derived(user, {\n * from: (u) => u.name,\n * onChange: (newName) => user.update(u => ({...u, name: newName}))\n * }));\n *\n * // Create a form group with nested controls:\n * const user = signal({ name: 'John Doe', age: 30 });\n * const form = formGroup(user, {\n * name: formControl(derived(user, 'name')),\n * age: formControl(derived(user, 'age')),\n * })\n */\nexport function formControl(initial, opt) {\n const value = isSignal(initial) ? initial : signal(initial, opt);\n const initialValue = signal(untracked(value), ...(ngDevMode ? [{ debugName: \"initialValue\" }] : []));\n const eq = opt?.equal ?? Object.is;\n const dirtyEq = opt?.dirtyEquality ?? eq;\n const disabled = computed(() => opt?.disable?.() ?? false, ...(ngDevMode ? [{ debugName: \"disabled\" }] : []));\n const readonly = computed(() => opt?.readonly?.() ?? false, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n const dirty = computed(() => !dirtyEq(value(), initialValue()), ...(ngDevMode ? [{ debugName: \"dirty\" }] : []));\n const touched = signal(false, ...(ngDevMode ? [{ debugName: \"touched\" }] : []));\n const validator = computed(() => opt?.validator?.() ?? (() => ''), ...(ngDevMode ? [{ debugName: \"validator\" }] : []));\n const error = computed(() => {\n if (opt?.overrideValidation)\n return opt.overrideValidation();\n if (disabled() || readonly())\n return '';\n return validator()(value());\n }, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n const markAsTouched = () => {\n touched.set(true);\n opt?.onTouched?.();\n };\n const markAllAsTouched = markAsTouched;\n const markAsPristine = () => touched.set(false);\n const markAllAsPristine = markAsPristine;\n const label = computed(() => opt?.label?.() ?? '', ...(ngDevMode ? [{ debugName: \"label\" }] : []));\n const partialValue = computed(() => (dirty() ? value() : undefined), ...(ngDevMode ? [{ debugName: \"partialValue\" }] : []));\n const internalReconcile = (newValue, force = false) => {\n const isDirty = untracked(dirty);\n if (!isDirty || force) {\n // very dangerous use of untracked here, don't do this everywhere :)\n // thanks to u/synalx for the idea to use untracked here\n untracked(() => {\n initialValue.set(newValue);\n value.set(newValue);\n });\n }\n };\n const pending = computed(() => opt?.pending?.() ?? false, ...(ngDevMode ? [{ debugName: \"pending\" }] : []));\n return {\n id: opt?.id?.() ?? generateID(),\n value,\n dirty,\n touched,\n error,\n label,\n required: computed(() => opt?.required?.() ?? false),\n disabled,\n readonly,\n pending,\n valid: computed(() => !pending() && !error()),\n hint: computed(() => opt?.hint?.() ?? ''),\n markAsTouched,\n markAllAsTouched,\n markAsPristine,\n markAllAsPristine,\n from: (isSignal(initial) ? initial.from : undefined),\n reconcile: (newValue) => internalReconcile(newValue),\n forceReconcile: (newValue) => internalReconcile(newValue, true),\n reset: () => {\n opt?.onReset?.();\n value.set(untracked(initialValue));\n },\n resetWithInitial: (initial) => {\n opt?.onReset?.();\n initialValue.set(initial);\n value.set(initial);\n },\n equal: eq,\n controlType: (opt?.controlType ?? 'control'),\n partialValue: partialValue,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybS9jb3JlL3NyYy9saWIvZm9ybS1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEdBS1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQTRHcEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQU16QixPQUFzQyxFQUN0QyxHQUErQztJQUUvQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyx3REFBQyxDQUFDO0lBQzlDLE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUVuQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQztJQUV6QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksS0FBSyxvREFBQyxDQUFDO0lBQzNELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxLQUFLLG9EQUFDLENBQUM7SUFFNUQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLFlB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QUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FJMUM7UUFDVCxTQUFTLEVBQUUsQ0FBQyxRQUFXLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUN2RCxjQUFjLEVBQUUsQ0FBQyxRQUFXLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFDbEUsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNWLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELGdCQUFnQixFQUFFLENBQUMsT0FBVSxFQUFFLEVBQUU7WUFDL0IsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxLQUFLLEVBQUUsRUFBRTtRQUNULFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxXQUFXLElBQUksU0FBUyxDQUFpQjtRQUM1RCxZQUFZLEVBQUUsWUFBcUM7S0FDcEQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIGlzU2lnbmFsLFxyXG4gIHNpZ25hbCxcclxuICB1bnRyYWNrZWQsXHJcbiAgdHlwZSBDcmVhdGVTaWduYWxPcHRpb25zLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHR5cGUgVmFsdWVFcXVhbGl0eUZuLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHR5cGUgRGVyaXZlZFNpZ25hbCB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG5pbXBvcnQgeyBnZW5lcmF0ZUlEIH0gZnJvbSAnLi91dGlsJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIHRoZSB0eXBlIG9mIGEgZm9ybSBjb250cm9sLlxyXG4gKiAtIGBjb250cm9sYDogQSBzaW5nbGUgZm9ybSBjb250cm9sIChlLmcuLCBhbiBpbnB1dCBmaWVsZCkuXHJcbiAqIC0gYGFycmF5YDogQW4gYXJyYXkgb2YgZm9ybSBjb250cm9scyAobGlrZSBBbmd1bGFyJ3MgYEZvcm1BcnJheWApLlxyXG4gKiAtIGBncm91cGA6IEEgZ3JvdXAgb2YgZm9ybSBjb250cm9scyAobGlrZSBBbmd1bGFyJ3MgYEZvcm1Hcm91cGApLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ29udHJvbFR5cGUgPSAnY29udHJvbCcgfCAnYXJyYXknIHwgJ2dyb3VwJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgcmVhY3RpdmUgZm9ybSBjb250cm9sLiAgSXQgaG9sZHMgdGhlIHZhbHVlLCB2YWxpZGF0aW9uIHN0YXR1cywgYW5kIG90aGVyXHJcbiAqIG1ldGFkYXRhIGZvciBhIGZvcm0gZmllbGQuICBUaGlzIGlzIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyByZWFjdGl2ZSBmb3Jtc1xyXG4gKiB3aXRoIHNpZ25hbHMuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBmb3JtIGNvbnRyb2wncyB2YWx1ZS5cclxuICogQHR5cGVQYXJhbSBUUGFyZW50IC0gVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGNvbnRyb2wncyB2YWx1ZSAoaWYgdGhpcyBjb250cm9sIGlzIHBhcnQgb2YgYSBncm91cCBvciBhcnJheSkuIERlZmF1bHRzIHRvIGB1bmRlZmluZWRgLlxyXG4gKiBAdHlwZVBhcmFtIFRDb250cm9sVHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBjb250cm9sICgnY29udHJvbCcsICdhcnJheScsIG9yICdncm91cCcpLiBEZWZhdWx0cyB0byAnY29udHJvbCcuXHJcbiAqIEB0eXBlUGFyYW0gVFBhcnRpYWxWYWx1ZSAtICBUaGUgdHlwZSBvZiB0aGUgcGFydGlhbCB2YWx1ZSwgdXNlZCBmb3IgcGF0Y2hpbmcuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBGb3JtQ29udHJvbFNpZ25hbDxcclxuICBULFxyXG4gIFRQYXJlbnQgPSB1bmRlZmluZWQsXHJcbiAgVENvbnRyb2xUeXBlIGV4dGVuZHMgQ29udHJvbFR5cGUgPSAnY29udHJvbCcsXHJcbiAgVFBhcnRpYWxWYWx1ZSA9IFQgfCB1bmRlZmluZWQsXHJcbj4gPSB7XHJcbiAgLyoqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb250cm9sLiBVc2VkIGZvciB0cmFja2luZyBpbiBgQGZvcmAgbG9vcHMuICovXHJcbiAgaWQ6IHN0cmluZztcclxuICAvKiogVGhlIG1haW4gdmFsdWUgc2lnbmFsIGZvciB0aGUgY29udHJvbC4gKi9cclxuICB2YWx1ZTogV3JpdGFibGVTaWduYWw8VD47XHJcbiAgLyoqIEEgc2lnbmFsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udHJvbCdzIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQuICovXHJcbiAgZGlydHk6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKiogQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250cm9sIGhhcyBiZWVuIGludGVyYWN0ZWQgd2l0aCAoZS5nLiwgYmx1cnJlZCkuICovXHJcbiAgdG91Y2hlZDogU2lnbmFsPGJvb2xlYW4+O1xyXG4gIC8qKiBBIHNpZ25hbCBjb250YWluaW5nIHRoZSBjdXJyZW50IHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZSAoZW1wdHkgc3RyaW5nIGlmIHZhbGlkKS4gKi9cclxuICBlcnJvcjogU2lnbmFsPHN0cmluZz47XHJcbiAgLyoqIEEgc2lnbmFsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udHJvbCBpcyBwZW5kaW5nICovXHJcbiAgcGVuZGluZzogU2lnbmFsPGJvb2xlYW4+O1xyXG4gIC8qKiBBIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuICovXHJcbiAgLyoqIEEgc2lnbmFsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udHJvbCBpcyBpbiBhIHZhbGlkIHN0YXRlICh3aXRob3V0IGVycm9ycyAmIG5vdCBwZW5kaW5nKSAqL1xyXG4gIHZhbGlkOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgZGlzYWJsZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKiogQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250cm9sIGlzIHJlYWQtb25seS4gKi9cclxuICByZWFkb25seTogU2lnbmFsPGJvb2xlYW4+O1xyXG4gIC8qKiBBIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgcmVxdWlyZWQuICovXHJcbiAgcmVxdWlyZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKiogQSBzaWduYWwgY29udGFpbmluZyB0aGUgbGFiZWwgZm9yIHRoZSBjb250cm9sLiAqL1xyXG4gIGxhYmVsOiBTaWduYWw8c3RyaW5nPjtcclxuICAvKiogQSBzaWduYWwgY29udGFpbmluZyB0aGUgaGludCB0ZXh0IGZvciB0aGUgY29udHJvbC4gKi9cclxuICBoaW50OiBTaWduYWw8c3RyaW5nPjtcclxuICAvKiogTWFya3MgdGhlIGNvbnRyb2wgYXMgdG91Y2hlZC4gKi9cclxuICBtYXJrQXNUb3VjaGVkOiAoKSA9PiB2b2lkO1xyXG4gIC8qKiBNYXJrcyB0aGUgY29udHJvbCBhbmQgYWxsIGl0cyBjaGlsZCBjb250cm9scyAoaWYgYW55KSBhcyB0b3VjaGVkLiAqL1xyXG4gIG1hcmtBbGxBc1RvdWNoZWQ6ICgpID0+IHZvaWQ7XHJcbiAgLyoqIE1hcmtzIHRoZSBjb250cm9sIGFzIHByaXN0aW5lIChub3QgdG91Y2hlZCkuICovXHJcbiAgbWFya0FzUHJpc3RpbmU6ICgpID0+IHZvaWQ7XHJcbiAgLyoqIE1hcmtzIHRoZSBjb250cm9sIGFuZCBhbGwgaXRzIGNoaWxkIGNvbnRyb2xzIChpZiBhbnkpIGFzIHByaXN0aW5lLiAqL1xyXG4gIG1hcmtBbGxBc1ByaXN0aW5lOiAoKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIFJlc2V0cyB0aGUgY29udHJvbCB0byBhIG5ldyB2YWx1ZSBhbmQgc2V0cyBhIG5ldyBpbml0aWFsIHZhbHVlLiBUaGlzIGlzIGludGVuZGVkIGZvclxyXG4gICAqIHNjZW5hcmlvcyB3aGVyZSB0aGUgdW5kZXJseWluZyBkYXRhIGlzIHVwZGF0ZWQgZXh0ZXJuYWxseSAoZS5nLiwgZGF0YSBjb21pbmcgZnJvbVxyXG4gICAqIHRoZSBzZXJ2ZXIpLiAgSWYgdGhlIGNvbnRyb2wgaXMgbm90IGRpcnR5LCB0aGUgdmFsdWUgaXMgdXBkYXRlZC4gSWYgdGhlIGNvbnRyb2wgKmlzKlxyXG4gICAqIGRpcnR5LCB0aGUgdmFsdWUgaXMgKm5vdCogdXBkYXRlZCAocHJlc2VydmluZyB1c2VyIGNoYW5nZXMpLlxyXG4gICAqL1xyXG4gIHJlY29uY2lsZTogKG5ld1ZhbHVlOiBUKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIFNpbWlsYXIgdG8gYHJlY29uY2lsZWAsIGJ1dCBmb3JjZXMgdGhlIHVwZGF0ZSBldmVuIGlmIHRoZSBjb250cm9sIGlzIGRpcnR5LlxyXG4gICAqL1xyXG4gIGZvcmNlUmVjb25jaWxlOiAobmV3VmFsdWU6IFQpID0+IHZvaWQ7XHJcbiAgLyoqIFJlc2V0cyB0aGUgY29udHJvbCdzIHZhbHVlIHRvIGl0cyBpbml0aWFsIHZhbHVlLiAqL1xyXG4gIHJlc2V0OiAoKSA9PiB2b2lkO1xyXG4gIC8qKiBSZXNldHMgdGhlIGNvbnRyb2wncyB2YWx1ZSBhbmQgaW5pdGlhbCB2YWx1ZS4gKi9cclxuICByZXNldFdpdGhJbml0aWFsOiAoaW5pdGlhbDogVCkgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBUaGUgZGVyaXZhdGlvbiBmdW5jdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGlzIGNvbnRyb2wgaWYgaXQncyBwYXJ0IG9mIGEgYGZvcm1Hcm91cGAgb3IgYGZvcm1BcnJheWAuXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZnJvbT86IERlcml2ZWRTaWduYWw8VFBhcmVudCwgVD5bJ2Zyb20nXTtcclxuICAvKiogVGhlIGVxdWFsaXR5IGZ1bmN0aW9uIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMuIERlZmF1bHRzIHRvIGBPYmplY3QuaXNgLiAqL1xyXG4gIGVxdWFsOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbjtcclxuICAvKiogVGhlIHR5cGUgb2YgdGhlIGNvbnRyb2wgKCdjb250cm9sJywgJ2FycmF5Jywgb3IgJ2dyb3VwJykuICovXHJcbiAgY29udHJvbFR5cGU6IFRDb250cm9sVHlwZTtcclxuICAvKipcclxuICAgKiBBIHNpZ25hbCByZXByZXNlbnRpbmcgdGhlIHBhcnRpYWwgdmFsdWUgb2YgdGhlIGNvbnRyb2wsIHN1aXRhYmxlIGZvciBwYXRjaGluZyBkYXRhIG9uIGEgc2VydmVyLlxyXG4gICAqIEl0IGNvbnRhaW5zIHRoZSBjaGFuZ2VkIHZhbHVlIGlmIGBkaXJ0eWAgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIHBhcnRpYWxWYWx1ZTogU2lnbmFsPFRQYXJ0aWFsVmFsdWU+O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zPFxyXG4gIFQsXHJcbiAgVENvbnRyb2xUeXBlIGV4dGVuZHMgQ29udHJvbFR5cGUgPSBDb250cm9sVHlwZSxcclxuPiA9IENyZWF0ZVNpZ25hbE9wdGlvbnM8VD4gJiB7XHJcbiAgdmFsaWRhdG9yPzogKCkgPT4gKHZhbHVlOiBUKSA9PiBzdHJpbmc7XHJcbiAgb25Ub3VjaGVkPzogKCkgPT4gdm9pZDtcclxuICBkaXNhYmxlPzogKCkgPT4gYm9vbGVhbjtcclxuICByZWFkb25seT86ICgpID0+IGJvb2xlYW47XHJcbiAgcmVxdWlyZWQ/OiAoKSA9PiBib29sZWFuO1xyXG4gIGxhYmVsPzogKCkgPT4gc3RyaW5nO1xyXG4gIGlkPzogKCkgPT4gc3RyaW5nO1xyXG4gIGhpbnQ/OiAoKSA9PiBzdHJpbmc7XHJcbiAgZGlydHlFcXVhbGl0eT86IFZhbHVlRXF1YWxpdHlGbjxUPjtcclxuICBvblJlc2V0PzogKCkgPT4gdm9pZDtcclxuICBjb250cm9sVHlwZT86IFRDb250cm9sVHlwZTtcclxuICBvdmVycmlkZVZhbGlkYXRpb24/OiAoKSA9PiBzdHJpbmc7XHJcbiAgcGVuZGluZz86ICgpID0+IGJvb2xlYW47XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGBGb3JtQ29udHJvbFNpZ25hbGAsIGEgcmVhY3RpdmUgZm9ybSBjb250cm9sIHRoYXQgaG9sZHMgYSB2YWx1ZSBhbmQgdHJhY2tzIGl0c1xyXG4gKiB2YWxpZGl0eSwgZGlydHkgc3RhdGUsIHRvdWNoZWQgc3RhdGUsIGFuZCBvdGhlciBtZXRhZGF0YS5cclxuICpcclxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGZvcm0gY29udHJvbCdzIHZhbHVlLlxyXG4gKiBAdHlwZVBhcmFtIFRQYXJlbnQgLSBUaGUgdHlwZSBvZiB0aGUgcGFyZW50IGZvcm0gY29udHJvbCdzIHZhbHVlIChpZiB0aGlzIGNvbnRyb2wgaXMgcGFydCBvZiBhIGdyb3VwIG9yIGFycmF5KS5cclxuICogQHR5cGVQYXJhbSBUQ29udHJvbFR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgY29udHJvbC4gRGVmYXVsdHMgdG8gYCdjb250cm9sJ2AuXHJcbiAqIEB0eXBlUGFyYW0gVFBhcnRpYWxWYWx1ZSAtIFRoZSB0eXBlIG9mIHZhbHVlIHdoZW4gcGF0Y2hpbmdcclxuICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgY29udHJvbCwgb3IgYSBgRGVyaXZlZFNpZ25hbGAgaWYgdGhpcyBjb250cm9sIGlzIHBhcnQgb2YgYSBgZm9ybUdyb3VwYCBvciBgZm9ybUFycmF5YC5cclxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBjb250cm9sLlxyXG4gKiBAcmV0dXJucyBBIGBGb3JtQ29udHJvbFNpZ25hbGAgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIENyZWF0ZSBhIHNpbXBsZSBmb3JtIGNvbnRyb2w6XHJcbiAqIGNvbnN0IG5hbWUgPSBmb3JtQ29udHJvbCgnSW5pdGlhbCBOYW1lJyk7XHJcbiAqXHJcbiAqIC8vIENyZWF0ZSBhIGZvcm0gY29udHJvbCB3aXRoIHZhbGlkYXRpb246XHJcbiAqIGNvbnN0IGFnZSA9IGZvcm1Db250cm9sKDAsIHtcclxuICogICB2YWxpZGF0b3I6ICgpID0+ICh2YWx1ZSkgPT4gdmFsdWUgPj0gMTggPyAnJyA6ICdNdXN0IGJlIGF0IGxlYXN0IDE4JyxcclxuICogfSk7XHJcbiAqXHJcbiAqIC8vIENyZWF0ZSBhIGRlcml2ZWQgZm9ybSBjb250cm9sIChlcXVpdmFsZW50IHRvIHRoZSBhYm92ZSwgYnV0IG1vcmUgZXhwbGljaXQpOlxyXG4gKiAgY29uc3QgdXNlciA9IHNpZ25hbCh7IG5hbWU6ICdKb2huIERvZScsIGFnZTogMzAgfSk7XHJcbiAqICBjb25zdCBuYW1lID0gZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCB7XHJcbiAqICAgIGZyb206ICh1KSA9PiB1Lm5hbWUsXHJcbiAqICAgIG9uQ2hhbmdlOiAobmV3TmFtZSkgPT4gdXNlci51cGRhdGUodSA9PiAoey4uLnUsIG5hbWU6IG5ld05hbWV9KSlcclxuICogIH0pKTtcclxuICpcclxuICogLy8gQ3JlYXRlIGEgZm9ybSBncm91cCB3aXRoIG5lc3RlZCBjb250cm9sczpcclxuICogY29uc3QgdXNlciA9IHNpZ25hbCh7IG5hbWU6ICdKb2huIERvZScsIGFnZTogMzAgfSk7XHJcbiAqIGNvbnN0IGZvcm0gPSBmb3JtR3JvdXAodXNlciwge1xyXG4gKiAgbmFtZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnbmFtZScpKSxcclxuICogIGFnZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnYWdlJykpLFxyXG4gKiB9KVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1Db250cm9sPFxyXG4gIFQsXHJcbiAgVFBhcmVudCA9IHVuZGVmaW5lZCxcclxuICBUQ29udHJvbFR5cGUgZXh0ZW5kcyBDb250cm9sVHlwZSA9ICdjb250cm9sJyxcclxuICBUUGFydGlhbFZhbHVlID0gVCB8IHVuZGVmaW5lZCxcclxuPihcclxuICBpbml0aWFsOiBEZXJpdmVkU2lnbmFsPFRQYXJlbnQsIFQ+IHwgVCxcclxuICBvcHQ/OiBDcmVhdGVGb3JtQ29udHJvbE9wdGlvbnM8VCwgVENvbnRyb2xUeXBlPixcclxuKTogRm9ybUNvbnRyb2xTaWduYWw8VCwgVFBhcmVudCwgVENvbnRyb2xUeXBlLCBUUGFydGlhbFZhbHVlPiB7XHJcbiAgY29uc3QgdmFsdWUgPSBpc1NpZ25hbChpbml0aWFsKSA/IGluaXRpYWwgOiBzaWduYWwoaW5pdGlhbCwgb3B0KTtcclxuICBjb25zdCBpbml0aWFsVmFsdWUgPSBzaWduYWwodW50cmFja2VkKHZhbHVlKSk7XHJcbiAgY29uc3QgZXEgPSBvcHQ/LmVxdWFsID8/IE9iamVjdC5pcztcclxuXHJcbiAgY29uc3QgZGlydHlFcSA9IG9wdD8uZGlydHlFcXVhbGl0eSA/PyBlcTtcclxuXHJcbiAgY29uc3QgZGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiBvcHQ/LmRpc2FibGU/LigpID8/IGZhbHNlKTtcclxuICBjb25zdCByZWFkb25seSA9IGNvbXB1dGVkKCgpID0+IG9wdD8ucmVhZG9ubHk/LigpID8/IGZhbHNlKTtcclxuXHJcbiAgY29uc3QgZGlydHkgPSBjb21wdXRlZCgoKSA9PiAhZGlydHlFcSh2YWx1ZSgpLCBpbml0aWFsVmFsdWUoKSkpO1xyXG5cclxuICBjb25zdCB0b3VjaGVkID0gc2lnbmFsKGZhbHNlKTtcclxuXHJcbiAgY29uc3QgdmFsaWRhdG9yID0gY29tcHV0ZWQoKCkgPT4gb3B0Py52YWxpZGF0b3I/LigpID8/ICgoKSA9PiAnJykpO1xyXG5cclxuICBjb25zdCBlcnJvciA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmIChvcHQ/Lm92ZXJyaWRlVmFsaWRhdGlvbikgcmV0dXJuIG9wdC5vdmVycmlkZVZhbGlkYXRpb24oKTtcclxuICAgIGlmIChkaXNhYmxlZCgpIHx8IHJlYWRvbmx5KCkpIHJldHVybiAnJztcclxuICAgIHJldHVybiB2YWxpZGF0b3IoKSh2YWx1ZSgpKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgbWFya0FzVG91Y2hlZCA9ICgpID0+IHtcclxuICAgIHRvdWNoZWQuc2V0KHRydWUpO1xyXG4gICAgb3B0Py5vblRvdWNoZWQ/LigpO1xyXG4gIH07XHJcbiAgY29uc3QgbWFya0FsbEFzVG91Y2hlZCA9IG1hcmtBc1RvdWNoZWQ7XHJcblxyXG4gIGNvbnN0IG1hcmtBc1ByaXN0aW5lID0gKCkgPT4gdG91Y2hlZC5zZXQoZmFsc2UpO1xyXG4gIGNvbnN0IG1hcmtBbGxBc1ByaXN0aW5lID0gbWFya0FzUHJpc3RpbmU7XHJcblxyXG4gIGNvbnN0IGxhYmVsID0gY29tcHV0ZWQoKCkgPT4gb3B0Py5sYWJlbD8uKCkgPz8gJycpO1xyXG5cclxuICBjb25zdCBwYXJ0aWFsVmFsdWUgPSBjb21wdXRlZCgoKSA9PiAoZGlydHkoKSA/IHZhbHVlKCkgOiB1bmRlZmluZWQpKTtcclxuXHJcbiAgY29uc3QgaW50ZXJuYWxSZWNvbmNpbGUgPSAobmV3VmFsdWU6IFQsIGZvcmNlID0gZmFsc2UpID0+IHtcclxuICAgIGNvbnN0IGlzRGlydHkgPSB1bnRyYWNrZWQoZGlydHkpO1xyXG5cclxuICAgIGlmICghaXNEaXJ0eSB8fCBmb3JjZSkge1xyXG4gICAgICAvLyB2ZXJ5IGRhbmdlcm91cyB1c2Ugb2YgdW50cmFja2VkIGhlcmUsIGRvbid0IGRvIHRoaXMgZXZlcnl3aGVyZSA6KVxyXG4gICAgICAvLyB0aGFua3MgdG8gIHUvc3luYWx4IGZvciB0aGUgaWRlYSB0byB1c2UgdW50cmFja2VkIGhlcmVcclxuXHJcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XHJcbiAgICAgICAgaW5pdGlhbFZhbHVlLnNldChuZXdWYWx1ZSk7XHJcbiAgICAgICAgdmFsdWUuc2V0KG5ld1ZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgcGVuZGluZyA9IGNvbXB1dGVkKCgpID0+IG9wdD8ucGVuZGluZz8uKCkgPz8gZmFsc2UpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgaWQ6IG9wdD8uaWQ/LigpID8/IGdlbmVyYXRlSUQoKSxcclxuICAgIHZhbHVlLFxyXG4gICAgZGlydHksXHJcbiAgICB0b3VjaGVkLFxyXG4gICAgZXJyb3IsXHJcbiAgICBsYWJlbCxcclxuICAgIHJlcXVpcmVkOiBjb21wdXRlZCgoKSA9PiBvcHQ/LnJlcXVpcmVkPy4oKSA/PyBmYWxzZSksXHJcbiAgICBkaXNhYmxlZCxcclxuICAgIHJlYWRvbmx5LFxyXG4gICAgcGVuZGluZyxcclxuICAgIHZhbGlkOiBjb21wdXRlZCgoKSA9PiAhcGVuZGluZygpICYmICFlcnJvcigpKSxcclxuICAgIGhpbnQ6IGNvbXB1dGVkKCgpID0+IG9wdD8uaGludD8uKCkgPz8gJycpLFxyXG4gICAgbWFya0FzVG91Y2hlZCxcclxuICAgIG1hcmtBbGxBc1RvdWNoZWQsXHJcbiAgICBtYXJrQXNQcmlzdGluZSxcclxuICAgIG1hcmtBbGxBc1ByaXN0aW5lLFxyXG4gICAgZnJvbTogKGlzU2lnbmFsKGluaXRpYWwpID8gaW5pdGlhbC5mcm9tIDogdW5kZWZpbmVkKSBhcyBGb3JtQ29udHJvbFNpZ25hbDxcclxuICAgICAgVCxcclxuICAgICAgVFBhcmVudCxcclxuICAgICAgVENvbnRyb2xUeXBlXHJcbiAgICA+Wydmcm9tJ10sXHJcbiAgICByZWNvbmNpbGU6IChuZXdWYWx1ZTogVCkgPT4gaW50ZXJuYWxSZWNvbmNpbGUobmV3VmFsdWUpLFxyXG4gICAgZm9yY2VSZWNvbmNpbGU6IChuZXdWYWx1ZTogVCkgPT4gaW50ZXJuYWxSZWNvbmNpbGUobmV3VmFsdWUsIHRydWUpLFxyXG4gICAgcmVzZXQ6ICgpID0+IHtcclxuICAgICAgb3B0Py5vblJlc2V0Py4oKTtcclxuICAgICAgdmFsdWUuc2V0KHVudHJhY2tlZChpbml0aWFsVmFsdWUpKTtcclxuICAgIH0sXHJcbiAgICByZXNldFdpdGhJbml0aWFsOiAoaW5pdGlhbDogVCkgPT4ge1xyXG4gICAgICBvcHQ/Lm9uUmVzZXQ/LigpO1xyXG4gICAgICBpbml0aWFsVmFsdWUuc2V0KGluaXRpYWwpO1xyXG4gICAgICB2YWx1ZS5zZXQoaW5pdGlhbCk7XHJcbiAgICB9LFxyXG4gICAgZXF1YWw6IGVxLFxyXG4gICAgY29udHJvbFR5cGU6IChvcHQ/LmNvbnRyb2xUeXBlID8/ICdjb250cm9sJykgYXMgVENvbnRyb2xUeXBlLFxyXG4gICAgcGFydGlhbFZhbHVlOiBwYXJ0aWFsVmFsdWUgYXMgU2lnbmFsPFRQYXJ0aWFsVmFsdWU+LFxyXG4gIH07XHJcbn1cclxuIl19","import { computed, linkedSignal, untracked, } from '@angular/core';\nimport { derived } from '@mmstack/primitives';\nimport { formControl, } from './form-control';\nimport { mergeArray } from './util';\nfunction createReconcileChildren(factory, opt) {\n return (length, source, prev) => {\n if (!prev) {\n const nextControls = [];\n for (let i = 0; i < length; i++) {\n nextControls.push(factory(derived(source, i, { equal: opt?.equal }), i));\n }\n return nextControls;\n }\n if (length === prev.length)\n return prev;\n const next = [...prev];\n if (length < prev.length) {\n next.splice(length);\n }\n else if (length > prev.length) {\n for (let i = prev.length; i < length; i++) {\n next.push(factory(derived(source, i, { equal: opt?.equal }), i));\n }\n }\n return next;\n };\n}\nexport function formArray(initial, factory, opt) {\n const eq = opt?.equal ?? Object.is;\n const arrayEqual = (a, b) => {\n if (a.length !== b.length)\n return false;\n if (!a.length)\n return true;\n return a.every((v, i) => eq(v, b[i]));\n };\n const min = computed(() => opt?.min?.() ?? 0, ...(ngDevMode ? [{ debugName: \"min\" }] : []));\n const max = computed(() => opt?.max?.() ?? Number.MAX_SAFE_INTEGER, ...(ngDevMode ? [{ debugName: \"max\" }] : []));\n const arrayOptions = {\n ...opt,\n equal: arrayEqual,\n dirtyEquality: (a, b) => a.length === b.length,\n controlType: 'array',\n };\n const ctrl = formControl(initial, arrayOptions);\n const length = computed(() => ctrl.value().length, ...(ngDevMode ? [{ debugName: \"length\" }] : []));\n const reconcileChildren = createReconcileChildren(factory, { equal: eq });\n // linkedSignal used to re-use previous value so that only length changes are affected and existing controls are kept, but updated\n const children = linkedSignal({\n source: () => length(),\n computation: (len, prev) => reconcileChildren(len, ctrl.value, prev?.value),\n });\n const ownError = computed(() => ctrl.error(), ...(ngDevMode ? [{ debugName: \"ownError\" }] : []));\n const error = computed(() => {\n const own = ownError();\n if (own)\n return own;\n if (!children().length)\n return '';\n return children()\n .map((c, idx) => (c.error() ? `${idx}: ${c.error()}` : ''))\n .filter(Boolean)\n .join('\\n');\n }, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n const dirty = computed(() => {\n if (ctrl.dirty())\n return true;\n if (!children().length)\n return false;\n return children().some((c) => c.dirty());\n }, ...(ngDevMode ? [{ debugName: \"dirty\" }] : []));\n const markAllAsTouched = () => {\n ctrl.markAllAsTouched();\n for (const c of untracked(children)) {\n c.markAllAsTouched();\n }\n };\n const markAllAsPristine = () => {\n ctrl.markAllAsPristine();\n for (const c of untracked(children)) {\n c.markAllAsPristine();\n }\n };\n const toPartialValue = opt?.toPartialValue ?? ((v) => v);\n const partialValue = computed(() => {\n if (!dirty())\n return undefined;\n return children().map((c) => {\n const pv = c.partialValue();\n if (pv)\n return pv;\n if (c.controlType === 'control')\n return undefined;\n // return full value for child objects/arrays as this cannot be partially patched without idx\n return toPartialValue(c.value());\n });\n }, ...(ngDevMode ? [{ debugName: \"partialValue\" }] : []));\n const touched = computed(() => ctrl.touched() ||\n !!(children().length && children().some((c) => c.touched())), ...(ngDevMode ? [{ debugName: \"touched\" }] : []));\n const reconcile = (newValue) => {\n const ctrls = untracked(children);\n for (let i = 0; i < newValue.length; i++) {\n ctrls.at(i)?.reconcile(newValue[i]); // reconcile existing controls that are relevant addition/removal will be handled after ctrl.reconcile through linkedSignal\n }\n ctrl.reconcile(mergeArray(newValue, untracked(ctrl.value)));\n };\n const forceReconcile = (newValue) => {\n const ctrls = untracked(children);\n for (let i = 0; i < newValue.length; i++) {\n ctrls.at(i)?.forceReconcile(newValue[i]);\n }\n ctrl.forceReconcile(newValue);\n };\n const childrenValid = computed(() => {\n if (!children().length)\n return true;\n return children().every((d) => d.valid());\n }, ...(ngDevMode ? [{ debugName: \"childrenValid\" }] : []));\n const childrenPending = computed(() => !!children().length && children().some((d) => d.pending()), ...(ngDevMode ? [{ debugName: \"childrenPending\" }] : []));\n return {\n ...ctrl,\n ownError,\n error,\n valid: computed(() => ctrl.valid() && childrenValid()),\n pending: computed(() => ctrl.pending() || childrenPending()),\n touched,\n children,\n dirty,\n markAllAsTouched,\n markAllAsPristine,\n min,\n max,\n partialValue,\n canAdd: computed(() => !ctrl.disabled() && !ctrl.readonly() && length() < max()),\n canRemove: computed(() => !ctrl.disabled() && !ctrl.readonly() && length() > min()),\n reconcile,\n forceReconcile,\n reset: () => {\n for (const c of untracked(children)) {\n c.reset();\n }\n ctrl.reset();\n },\n resetWithInitial: (initial) => {\n const ctrls = untracked(children);\n for (let i = 0; i < initial.length; i++) {\n ctrls.at(i)?.resetWithInitial(initial[i]);\n }\n ctrl.resetWithInitial(initial);\n },\n push: (next) => ctrl.value.update((cur) => [...cur, next]),\n remove: (idx) => ctrl.value.update((cur) => cur.filter((_, i) => i !== idx)),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hcnJheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0vY29yZS9zcmMvbGliL2Zvcm0tYXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixZQUFZLEVBQ1osU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQXNCLE1BQU0scUJBQXFCLENBQUM7QUFDbEUsT0FBTyxFQUNMLFdBQVcsR0FHWixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUF3Q3BDLFNBQVMsdUJBQXVCLENBSTlCLE9BQXNFLEVBQ3RFLEdBQXVDO0lBRXZDLE9BQU8sQ0FDTCxNQUFjLEVBQ2QsTUFBMkIsRUFDM0IsSUFBeUIsRUFDTCxFQUFFO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUV4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hDLFlBQVksQ0FBQyxJQUFJLENBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN0RCxDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXhDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUV2QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekIsSUFB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QUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQzlELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBsaW5rZWRTaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGRlcml2ZWQsIHR5cGUgRGVyaXZlZFNpZ25hbCB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG5pbXBvcnQge1xyXG4gIGZvcm1Db250cm9sLFxyXG4gIHR5cGUgQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zLFxyXG4gIHR5cGUgRm9ybUNvbnRyb2xTaWduYWwsXHJcbn0gZnJvbSAnLi9mb3JtLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyB0eXBlIFNpZ25hbFZhbHVlIH0gZnJvbSAnLi9zaWduYWwtdmFsdWUudHlwZSc7XHJcbmltcG9ydCB7IG1lcmdlQXJyYXkgfSBmcm9tICcuL3V0aWwnO1xyXG5cclxuZXhwb3J0IHR5cGUgRm9ybUFycmF5U2lnbmFsPFxyXG4gIFQsXHJcbiAgVEluZGl2aWR1YWxTdGF0ZSBleHRlbmRzIEZvcm1Db250cm9sU2lnbmFsPFxyXG4gICAgVCxcclxuICAgIGFueSxcclxuICAgIGFueSxcclxuICAgIGFueVxyXG4gID4gPSBGb3JtQ29udHJvbFNpZ25hbDxULCBhbnksIGFueSwgYW55PixcclxuICBUUGFyZW50ID0gdW5kZWZpbmVkLFxyXG4+ID0gRm9ybUNvbnRyb2xTaWduYWw8XHJcbiAgVFtdLFxyXG4gIFRQYXJlbnQsXHJcbiAgJ2FycmF5JyxcclxuICB8IEV4Y2x1ZGU8U2lnbmFsVmFsdWU8VEluZGl2aWR1YWxTdGF0ZVsncGFydGlhbFZhbHVlJ10+LCBudWxsIHwgdW5kZWZpbmVkPltdXHJcbiAgfCB1bmRlZmluZWRcclxuPiAmIHtcclxuICBvd25FcnJvcjogU2lnbmFsPHN0cmluZz47XHJcbiAgY2hpbGRyZW46IFNpZ25hbDxUSW5kaXZpZHVhbFN0YXRlW10+O1xyXG4gIHB1c2g6ICh2YWx1ZTogVCkgPT4gdm9pZDsgLy8gYWRkIG5ldyBjb250cm9sIHdpdGggdmFsdWVcclxuICByZW1vdmU6IChpbmRleDogbnVtYmVyKSA9PiB2b2lkOyAvLyByZW1vdmUgYXQgaW5kZXhcclxuICBtaW46IFNpZ25hbDxudW1iZXI+OyAvLyBmb3IgZGlzcGxheSBwdXJwb3Nlc1xyXG4gIG1heDogU2lnbmFsPG51bWJlcj47IC8vIGZvciBkaXNwbGF5IHB1cnBvc2VzXHJcbiAgY2FuQWRkOiBTaWduYWw8Ym9vbGVhbj47IC8vIGRpc2FibGUgYWRkIGJ1dHRvbiBpZiBmYWxzZVxyXG4gIGNhblJlbW92ZTogU2lnbmFsPGJvb2xlYW4+OyAvLyBkaXNhYmxlIHJlbW92ZSBidXR0b25zIGlmIGZhbHNlXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBDcmVhdGVGb3JtQXJyYXlTaWduYWxPcHRpb25zPFxyXG4gIFQsXHJcbiAgVEluZGl2aWR1YWxTdGF0ZSBleHRlbmRzIEZvcm1Db250cm9sU2lnbmFsPFQsIGFueSwgYW55LCBhbnk+LFxyXG4+ID0gT21pdDxDcmVhdGVGb3JtQ29udHJvbE9wdGlvbnM8VFtdPiwgJ2VxdWFsJz4gJiB7XHJcbiAgbWluPzogKCkgPT4gbnVtYmVyO1xyXG4gIG1heD86ICgpID0+IG51bWJlcjtcclxuICBlcXVhbD86IChhOiBULCBiOiBUKSA9PiBib29sZWFuO1xyXG4gIHRvUGFydGlhbFZhbHVlPzogKFxyXG4gICAgdjogVCxcclxuICApID0+IEV4Y2x1ZGU8U2lnbmFsVmFsdWU8VEluZGl2aWR1YWxTdGF0ZVsncGFydGlhbFZhbHVlJ10+LCBudWxsIHwgdW5kZWZpbmVkPjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVJlY29uY2lsZUNoaWxkcmVuPFxyXG4gIFQsXHJcbiAgVEluZGl2aWR1YWxTdGF0ZSBleHRlbmRzIEZvcm1Db250cm9sU2lnbmFsPFQsIGFueSwgYW55LCBhbnk+LFxyXG4+KFxyXG4gIGZhY3Rvcnk6ICh2YWw6IERlcml2ZWRTaWduYWw8VFtdLCBUPiwgaWR4OiBudW1iZXIpID0+IFRJbmRpdmlkdWFsU3RhdGUsXHJcbiAgb3B0OiB7IGVxdWFsOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbiB9LFxyXG4pIHtcclxuICByZXR1cm4gKFxyXG4gICAgbGVuZ3RoOiBudW1iZXIsXHJcbiAgICBzb3VyY2U6IFdyaXRhYmxlU2lnbmFsPFRbXT4sXHJcbiAgICBwcmV2PzogVEluZGl2aWR1YWxTdGF0ZVtdLFxyXG4gICk6IFRJbmRpdmlkdWFsU3RhdGVbXSA9PiB7XHJcbiAgICBpZiAoIXByZXYpIHtcclxuICAgICAgY29uc3QgbmV4dENvbnRyb2xzID0gW107XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbmV4dENvbnRyb2xzLnB1c2goXHJcbiAgICAgICAgICBmYWN0b3J5KGRlcml2ZWQoc291cmNlLCBpLCB7IGVxdWFsOiBvcHQ/LmVxdWFsIH0pLCBpKSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbmV4dENvbnRyb2xzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsZW5ndGggPT09IHByZXYubGVuZ3RoKSByZXR1cm4gcHJldjtcclxuXHJcbiAgICBjb25zdCBuZXh0ID0gWy4uLnByZXZdO1xyXG5cclxuICAgIGlmIChsZW5ndGggPCBwcmV2Lmxlbmd0aCkge1xyXG4gICAgICBuZXh0LnNwbGljZShsZW5ndGgpO1xyXG4gICAgfSBlbHNlIGlmIChsZW5ndGggPiBwcmV2Lmxlbmd0aCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gcHJldi5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG5leHQucHVzaChmYWN0b3J5KGRlcml2ZWQoc291cmNlLCBpLCB7IGVxdWFsOiBvcHQ/LmVxdWFsIH0pLCBpKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV4dDtcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybUFycmF5PFxyXG4gIFQsXHJcbiAgVEluZGl2aWR1YWxTdGF0ZSBleHRlbmRzIEZvcm1Db250cm9sU2lnbmFsPFxyXG4gICAgVCxcclxuICAgIGFueSxcclxuICAgIGFueSxcclxuICAgIGFueVxyXG4gID4gPSBGb3JtQ29udHJvbFNpZ25hbDxULCBhbnksIGFueSwgYW55PixcclxuICBUUGFyZW50ID0gdW5kZWZpbmVkLFxyXG4+KFxyXG4gIGluaXRpYWw6IFRbXSB8IERlcml2ZWRTaWduYWw8VFBhcmVudCwgVFtdPixcclxuICBmYWN0b3J5OiAodmFsOiBEZXJpdmVkU2lnbmFsPFRbXSwgVD4sIGlkeDogbnVtYmVyKSA9PiBUSW5kaXZpZHVhbFN0YXRlLFxyXG4gIG9wdD86IENyZWF0ZUZvcm1BcnJheVNpZ25hbE9wdGlvbnM8VCwgVEluZGl2aWR1YWxTdGF0ZT4sXHJcbik6IEZvcm1BcnJheVNpZ25hbDxULCBUSW5kaXZpZHVhbFN0YXRlLCBUUGFyZW50PiB7XHJcbiAgY29uc3QgZXEgPSBvcHQ/LmVxdWFsID8/IE9iamVjdC5pcztcclxuXHJcbiAgY29uc3QgYXJyYXlFcXVhbCA9IChhOiBUW10sIGI6IFRbXSkgPT4ge1xyXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKCFhLmxlbmd0aCkgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgcmV0dXJuIGEuZXZlcnkoKHYsIGkpID0+IGVxKHYsIGJbaV0pKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBtaW4gPSBjb21wdXRlZCgoKSA9PiBvcHQ/Lm1pbj8uKCkgPz8gMCk7XHJcbiAgY29uc3QgbWF4ID0gY29tcHV0ZWQoKCkgPT4gb3B0Py5tYXg/LigpID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcclxuXHJcbiAgY29uc3QgYXJyYXlPcHRpb25zOiBDcmVhdGVGb3JtQ29udHJvbE9wdGlvbnM8VFtdLCAnYXJyYXknPiA9IHtcclxuICAgIC4uLm9wdCxcclxuICAgIGVxdWFsOiBhcnJheUVxdWFsLFxyXG4gICAgZGlydHlFcXVhbGl0eTogKGEsIGIpID0+IGEubGVuZ3RoID09PSBiLmxlbmd0aCxcclxuICAgIGNvbnRyb2xUeXBlOiAnYXJyYXknLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGN0cmwgPSBmb3JtQ29udHJvbDxUW10sIFRQYXJlbnQsICdhcnJheSc+KFxyXG4gICAgaW5pdGlhbCxcclxuICAgIGFycmF5T3B0aW9ucyxcclxuICApIHNhdGlzZmllcyBGb3JtQ29udHJvbFNpZ25hbDxUW10sIFRQYXJlbnQsICdhcnJheSc+O1xyXG5cclxuICBjb25zdCBsZW5ndGggPSBjb21wdXRlZCgoKSA9PiBjdHJsLnZhbHVlKCkubGVuZ3RoKTtcclxuXHJcbiAgY29uc3QgcmVjb25jaWxlQ2hpbGRyZW4gPSBjcmVhdGVSZWNvbmNpbGVDaGlsZHJlbjxULCBUSW5kaXZpZHVhbFN0YXRlPihcclxuICAgIGZhY3RvcnksXHJcbiAgICB7IGVxdWFsOiBlcSB9LFxyXG4gICk7XHJcblxyXG4gIC8vIGxpbmtlZFNpZ25hbCB1c2VkIHRvIHJlLXVzZSBwcmV2aW91cyB2YWx1ZSBzbyB0aGF0IG9ubHkgbGVuZ3RoIGNoYW5nZXMgYXJlIGFmZmVjdGVkIGFuZCBleGlzdGluZyBjb250cm9scyBhcmUga2VwdCwgYnV0IHVwZGF0ZWRcclxuICBjb25zdCBjaGlsZHJlbiA9IGxpbmtlZFNpZ25hbDxudW1iZXIsIFRJbmRpdmlkdWFsU3RhdGVbXT4oe1xyXG4gICAgc291cmNlOiAoKSA9PiBsZW5ndGgoKSxcclxuICAgIGNvbXB1dGF0aW9uOiAobGVuLCBwcmV2KSA9PiByZWNvbmNpbGVDaGlsZHJlbihsZW4sIGN0cmwudmFsdWUsIHByZXY/LnZhbHVlKSxcclxuICB9KTtcclxuXHJcbiAgY29uc3Qgb3duRXJyb3IgPSBjb21wdXRlZCgoKSA9PiBjdHJsLmVycm9yKCkpO1xyXG5cclxuICBjb25zdCBlcnJvciA9IGNvbXB1dGVkKCgpOiBzdHJpbmcgPT4ge1xyXG4gICAgY29uc3Qgb3duID0gb3duRXJyb3IoKTtcclxuICAgIGlmIChvd24pIHJldHVybiBvd247XHJcbiAgICBpZiAoIWNoaWxkcmVuKCkubGVuZ3RoKSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gY2hpbGRyZW4oKVxyXG4gICAgICAubWFwKChjLCBpZHgpID0+IChjLmVycm9yKCkgPyBgJHtpZHh9OiAke2MuZXJyb3IoKX1gIDogJycpKVxyXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXHJcbiAgICAgIC5qb2luKCdcXG4nKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgZGlydHkgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAoY3RybC5kaXJ0eSgpKSByZXR1cm4gdHJ1ZTtcclxuICAgIGlmICghY2hpbGRyZW4oKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBjaGlsZHJlbigpLnNvbWUoKGMpID0+IGMuZGlydHkoKSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IG1hcmtBbGxBc1RvdWNoZWQgPSAoKSA9PiB7XHJcbiAgICBjdHJsLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIGZvciAoY29uc3QgYyBvZiB1bnRyYWNrZWQoY2hpbGRyZW4pKSB7XHJcbiAgICAgIGMubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgY29uc3QgbWFya0FsbEFzUHJpc3RpbmUgPSAoKSA9PiB7XHJcbiAgICBjdHJsLm1hcmtBbGxBc1ByaXN0aW5lKCk7XHJcbiAgICBmb3IgKGNvbnN0IGMgb2YgdW50cmFja2VkKGNoaWxkcmVuKSkge1xyXG4gICAgICBjLm1hcmtBbGxBc1ByaXN0aW5lKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgdG9QYXJ0aWFsVmFsdWUgPSBvcHQ/LnRvUGFydGlhbFZhbHVlID8/ICgodjogVCkgPT4gdik7XHJcbiAgY29uc3QgcGFydGlhbFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKCFkaXJ0eSgpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIGNoaWxkcmVuKCkubWFwKChjKSA9PiB7XHJcbiAgICAgIGNvbnN0IHB2ID0gYy5wYXJ0aWFsVmFsdWUoKTtcclxuICAgICAgaWYgKHB2KSByZXR1cm4gcHY7XHJcbiAgICAgIGlmIChjLmNvbnRyb2xUeXBlID09PSAnY29udHJvbCcpIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAvLyByZXR1cm4gZnVsbCB2YWx1ZSBmb3IgIGNoaWxkIG9iamVjdHMvYXJyYXlzIGFzIHRoaXMgY2Fubm90IGJlIHBhcnRpYWxseSBwYXRjaGVkIHdpdGhvdXQgaWR4XHJcbiAgICAgIHJldHVybiB0b1BhcnRpYWxWYWx1ZShjLnZhbHVlKCkpO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHRvdWNoZWQgPSBjb21wdXRlZChcclxuICAgICgpID0+XHJcbiAgICAgIGN0cmwudG91Y2hlZCgpIHx8XHJcbiAgICAgICEhKGNoaWxkcmVuKCkubGVuZ3RoICYmIGNoaWxkcmVuKCkuc29tZSgoYykgPT4gYy50b3VjaGVkKCkpKSxcclxuICApO1xyXG5cclxuICBjb25zdCByZWNvbmNpbGUgPSAobmV3VmFsdWU6IFRbXSkgPT4ge1xyXG4gICAgY29uc3QgY3RybHMgPSB1bnRyYWNrZWQoY2hpbGRyZW4pO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY3RybHMuYXQoaSk/LnJlY29uY2lsZShuZXdWYWx1ZVtpXSk7IC8vIHJlY29uY2lsZSBleGlzdGluZyBjb250cm9scyB0aGF0IGFyZSByZWxldmFudCBhZGRpdGlvbi9yZW1vdmFsIHdpbGwgYmUgaGFuZGxlZCBhZnRlciBjdHJsLnJlY29uY2lsZSB0aHJvdWdoIGxpbmtlZFNpZ25hbFxyXG4gICAgfVxyXG5cclxuICAgIGN0cmwucmVjb25jaWxlKG1lcmdlQXJyYXkobmV3VmFsdWUsIHVudHJhY2tlZChjdHJsLnZhbHVlKSkpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGZvcmNlUmVjb25jaWxlID0gKG5ld1ZhbHVlOiBUW10pID0+IHtcclxuICAgIGNvbnN0IGN0cmxzID0gdW50cmFja2VkKGNoaWxkcmVuKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1ZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGN0cmxzLmF0KGkpPy5mb3JjZVJlY29uY2lsZShuZXdWYWx1ZVtpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3RybC5mb3JjZVJlY29uY2lsZShuZXdWYWx1ZSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgY2hpbGRyZW5WYWxpZCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICghY2hpbGRyZW4oKS5sZW5ndGgpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGNoaWxkcmVuKCkuZXZlcnkoKGQpID0+IGQudmFsaWQoKSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGNoaWxkcmVuUGVuZGluZyA9IGNvbXB1dGVkKFxyXG4gICAgKCkgPT4gISFjaGlsZHJlbigpLmxlbmd0aCAmJiBjaGlsZHJlbigpLnNvbWUoKGQpID0+IGQucGVuZGluZygpKSxcclxuICApO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4uY3RybCxcclxuICAgIG93bkVycm9yLFxyXG4gICAgZXJyb3IsXHJcbiAgICB2YWxpZDogY29tcHV0ZWQoKCkgPT4gY3RybC52YWxpZCgpICYmIGNoaWxkcmVuVmFsaWQoKSksXHJcbiAgICBwZW5kaW5nOiBjb21wdXRlZCgoKSA9PiBjdHJsLnBlbmRpbmcoKSB8fCBjaGlsZHJlblBlbmRpbmcoKSksXHJcbiAgICB0b3VjaGVkLFxyXG4gICAgY2hpbGRyZW4sXHJcbiAgICBkaXJ0eSxcclxuICAgIG1hcmtBbGxBc1RvdWNoZWQsXHJcbiAgICBtYXJrQWxsQXNQcmlzdGluZSxcclxuICAgIG1pbixcclxuICAgIG1heCxcclxuICAgIHBhcnRpYWxWYWx1ZSxcclxuICAgIGNhbkFkZDogY29tcHV0ZWQoXHJcbiAgICAgICgpID0+ICFjdHJsLmRpc2FibGVkKCkgJiYgIWN0cmwucmVhZG9ubHkoKSAmJiBsZW5ndGgoKSA8IG1heCgpLFxyXG4gICAgKSxcclxuICAgIGNhblJlbW92ZTogY29tcHV0ZWQoXHJcbiAgICAgICgpID0+ICFjdHJsLmRpc2FibGVkKCkgJiYgIWN0cmwucmVhZG9ubHkoKSAmJiBsZW5ndGgoKSA+IG1pbigpLFxyXG4gICAgKSxcclxuICAgIHJlY29uY2lsZSxcclxuICAgIGZvcmNlUmVjb25jaWxlLFxyXG4gICAgcmVzZXQ6ICgpID0+IHtcclxuICAgICAgZm9yIChjb25zdCBjIG9mIHVudHJhY2tlZChjaGlsZHJlbikpIHtcclxuICAgICAgICBjLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICAgY3RybC5yZXNldCgpO1xyXG4gICAgfSxcclxuICAgIHJlc2V0V2l0aEluaXRpYWw6IChpbml0aWFsOiBUW10pID0+IHtcclxuICAgICAgY29uc3QgY3RybHMgPSB1bnRyYWNrZWQoY2hpbGRyZW4pO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluaXRpYWwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjdHJscy5hdChpKT8ucmVzZXRXaXRoSW5pdGlhbChpbml0aWFsW2ldKTtcclxuICAgICAgfVxyXG4gICAgICBjdHJsLnJlc2V0V2l0aEluaXRpYWwoaW5pdGlhbCk7XHJcbiAgICB9LFxyXG4gICAgcHVzaDogKG5leHQpID0+IGN0cmwudmFsdWUudXBkYXRlKChjdXIpID0+IFsuLi5jdXIsIG5leHRdKSxcclxuICAgIHJlbW92ZTogKGlkeCkgPT5cclxuICAgICAgY3RybC52YWx1ZS51cGRhdGUoKGN1cikgPT4gY3VyLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaWR4KSksXHJcbiAgfTtcclxufVxyXG4iXX0=","import { computed, isSignal, signal, untracked, } from '@angular/core';\nimport { isDerivation, toFakeSignalDerivation, } from '@mmstack/primitives';\nimport { formControl, } from './form-control';\nimport { mergeIfObject } from './util';\n/**\n * Creates a `FormGroupSignal`, which aggregates a set of child form controls into a single object.\n *\n * @typeParam T - The type of the form group's value (an object).\n * @typeParam TDerivations - A record where keys are the names of the child controls and values are the `FormControlSignal` instances.\n * @typeParam TParent - The type of the parent form control's value (if this group is nested within another group or array).\n * @param initial - The initial value of the form group (or a `WritableSignal` or `DerivedSignal` if the group is nested).\n * @param providedChildren - An object containing the child `FormControlSignal` instances, or a function that returns such an object.\n * Using a function allows for dynamic creation of child controls (e.g., in response to changes in other signals).\n * @param options - Optional configuration options for the form group.\n * @returns A `FormGroupSignal` instance.\n *\n * @example\n * // Create a simple form group:\n * const user = signal({ name: 'John Doe', age: 30 });\n * const form = formGroup(user, {\n * name: formControl(derived(user, 'name')),\n * age: formControl(derived(user, 'age')),\n * })\n *\n * // Create a nested form group:\n * const user = signal({ name: 'John', age: 30, address: {street: \"Some street\"} });\n *\n * const address = derived(user, 'address');\n * const userForm = formGroup(user, {\n * name: formControl(derived(user, 'name')),\n * age: formControl(derived(user, 'age')),\n * address: formGroup(address, {\n * street: formControl(derived(address, (address) => address.street), {\n * validator: () => (value) => value ? \"\" : \"required!\"\n * }) // you can create deeply nested structures.\n * })\n * });\n *\n * // Create a form group with dynamically created children replaced rare FormRecord requirements.\n * const showAddress = signal(false);\n * type Characteristic = {\n * valueType: 'string';\n * value: string;\n * } | {\n * valueType: 'number';\n * value: number;\n * }\n * const char = signal<Characteristic>({ valueType: 'string', value: '' });\n * const charForm = formGroup(char, () => {\n * if (char().valueType === 'string) return createStringControl(char);\n * return createNumberControl(char);\n * });\n *\n */\nexport function formGroup(initial, providedChildren, opt) {\n const valueSignal = isSignal(initial) ? initial : signal(initial);\n // we fake a derivation if not present, so that .from is present on the signal\n const value = isDerivation(valueSignal)\n ? valueSignal\n : toFakeSignalDerivation(valueSignal);\n // we allow for a function/signal to be passed, this case should only be used if the child controls change dependent upon something, say if a formControl is flipped into a formGroup.\n const children = typeof providedChildren === 'function'\n ? computed(() => providedChildren())\n : computed(() => providedChildren);\n // array allows for easier handling\n const derivationsArray = computed(() => Object.values(children()), ...(ngDevMode ? [{ debugName: \"derivationsArray\" }] : []));\n const childrenDirty = computed(() => !!derivationsArray().length && derivationsArray().some((d) => d.dirty()), ...(ngDevMode ? [{ debugName: \"childrenDirty\" }] : []));\n // by default dont compare object references, just use childrenDirtySignal\n const baseDirtyEq = opt?.dirtyEquality ?? opt?.equal ?? (() => true);\n // function which calls a signal becomes a signal\n const dirtyEquality = (a, b) => {\n return baseDirtyEq(a, b) && !childrenDirty();\n };\n // group control\n const ctrl = formControl(value, {\n ...opt,\n dirtyEquality,\n controlType: 'group',\n readonly: () => {\n // readonly if is readonly or all children are readonly\n if (opt?.readonly?.())\n return true;\n return (!!derivationsArray().length &&\n derivationsArray().every((d) => d.readonly()));\n },\n disable: () => {\n if (opt?.disable?.())\n return true;\n return (!!derivationsArray().length &&\n derivationsArray().every((d) => d.disabled()));\n },\n });\n const childrenTouched = computed(() => !!derivationsArray().length &&\n derivationsArray().some((d) => d.touched()), ...(ngDevMode ? [{ debugName: \"childrenTouched\" }] : []));\n const touched = computed(() => ctrl.touched() || childrenTouched(), ...(ngDevMode ? [{ debugName: \"touched\" }] : []));\n const childError = computed(() => {\n if (!derivationsArray().length)\n return '';\n return derivationsArray()\n .map((d) => (d.error() ? `${d.label()}: ${d.error()}` : ''))\n .filter(Boolean)\n .join('\\n');\n }, ...(ngDevMode ? [{ debugName: \"childError\" }] : []));\n const error = computed(() => {\n const ownError = ctrl.error();\n if (ownError)\n return ownError;\n return childError() ? 'INVALID' : '';\n }, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n const markAllAsTouched = () => {\n ctrl.markAllAsTouched();\n for (const ctrl of untracked(derivationsArray)) {\n ctrl.markAllAsTouched();\n }\n };\n const markAllAsPristine = () => {\n ctrl.markAllAsPristine();\n for (const ctrl of untracked(derivationsArray)) {\n ctrl.markAllAsPristine();\n }\n };\n const reconcile = (newValue) => {\n // set the children values based on the derivation of the new value\n for (const ctrl of untracked(derivationsArray)) {\n const from = ctrl.from;\n if (!from)\n continue;\n ctrl.reconcile(from(newValue));\n }\n ctrl.reconcile(mergeIfObject(newValue, untracked(value)));\n };\n const forceReconcile = (newValue) => {\n for (const ctrl of untracked(derivationsArray)) {\n const from = ctrl.from;\n if (!from)\n continue;\n ctrl.forceReconcile(from(newValue));\n }\n ctrl.forceReconcile(newValue);\n };\n const createBaseValueFn = opt?.createBasePartialValue;\n const basePartialValue = createBaseValueFn\n ? computed(() => createBaseValueFn(ctrl.value()))\n : computed(() => ({}));\n const partialValue = computed(() => {\n const obj = {\n ...basePartialValue(),\n };\n if (!ctrl.dirty())\n return obj;\n for (const [key, ctrl] of Object.entries(children())) {\n const pv = ctrl.partialValue();\n if (pv === undefined)\n continue;\n obj[key] = pv;\n }\n return obj;\n }, ...(ngDevMode ? [{ debugName: \"partialValue\" }] : []));\n const childrenValid = computed(() => {\n if (!derivationsArray().length)\n return true;\n return derivationsArray().every((d) => d.valid());\n }, ...(ngDevMode ? [{ debugName: \"childrenValid\" }] : []));\n const childrenPending = computed(() => !!derivationsArray().length &&\n derivationsArray().some((d) => d.pending()), ...(ngDevMode ? [{ debugName: \"childrenPending\" }] : []));\n return {\n ...ctrl,\n children,\n partialValue,\n reconcile,\n forceReconcile,\n ownError: ctrl.error,\n touched,\n error,\n valid: computed(() => ctrl.valid() && childrenValid()),\n pending: computed(() => ctrl.pending() || childrenPending()),\n markAllAsPristine,\n markAllAsTouched,\n reset: () => {\n for (const ctrl of untracked(derivationsArray)) {\n ctrl.reset();\n }\n ctrl.reset();\n },\n resetWithInitial: (initial) => {\n for (const ctrl of untracked(derivationsArray)) {\n const from = ctrl.from;\n if (from)\n ctrl.resetWithInitial(from(initial));\n else\n ctrl.reset();\n }\n ctrl.resetWithInitial(initial);\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0vY29yZS9zcmMvbGliL2Zvcm0tZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsWUFBWSxFQUNaLHNCQUFzQixHQUV2QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxXQUFXLEdBR1osTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBZ0V2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlERztBQUNILE1BQU0sVUFBVSxTQUFTLENBS3ZCLE9BQTBELEVBQzFELGdCQUFxRCxFQUNyRCxHQUE2QztJQUU3QyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLDhFQUE4RTtJQUM5RSxNQUFNLEtBQUssR0FBRyxZQUFZLENBQWEsV0FBVyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxXQUFXO1FBQ2IsQ0FBQyxDQUFDLHNCQUFzQixDQUFhLFdBQVcsQ0FBQyxDQUFDO0lBRXBELHNMQUFzTDtJQUN0TCxNQUFNLFFBQVEsR0FDWixPQUFPLGdCQUFnQixLQUFLLFVBQVU7UUFDcEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUV2QyxtQ0FBbUM7SUFDbkMsTUFBTSxnQkFBZ0IsR0FB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SUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUN2QixJQUFJLElBQUk7b0JBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOztvQkFDMUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BCLENBQUM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBpc1NpZ25hbCxcclxuICBzaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgaXNEZXJpdmF0aW9uLFxyXG4gIHRvRmFrZVNpZ25hbERlcml2YXRpb24sXHJcbiAgdHlwZSBEZXJpdmVkU2lnbmFsLFxyXG59IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG5pbXBvcnQge1xyXG4gIGZvcm1Db250cm9sLFxyXG4gIHR5cGUgQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zLFxyXG4gIHR5cGUgRm9ybUNvbnRyb2xTaWduYWwsXHJcbn0gZnJvbSAnLi9mb3JtLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyB0eXBlIFNpZ25hbFZhbHVlIH0gZnJvbSAnLi9zaWduYWwtdmFsdWUudHlwZSc7XHJcbmltcG9ydCB7IG1lcmdlSWZPYmplY3QgfSBmcm9tICcuL3V0aWwnO1xyXG5cclxudHlwZSBBbnlPYmplY3QgPSBSZWNvcmQ8UHJvcGVydHlLZXksIGFueT47XHJcblxyXG4vKipcclxuICogRXh0cmFjdHMgdGhlIHBhcnRpYWwgdmFsdWUgdHlwZXMgZnJvbSBhIHJlY29yZCBvZiBgRm9ybUNvbnRyb2xTaWduYWxgIGluc3RhbmNlcy5cclxuICogVGhpcyBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgYHBhcnRpYWxWYWx1ZWAgdHlwZSBmb3IgYEZvcm1Hcm91cFNpZ25hbGAuXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxudHlwZSBEZXJpdmF0aW9uUGFydGlhbFZhbHVlczxcclxuICBURGVyaXZhdGlvbnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBGb3JtQ29udHJvbFNpZ25hbDxhbnksIGFueSwgYW55LCBhbnk+PixcclxuPiA9IHtcclxuICBbSyBpbiBrZXlvZiBURGVyaXZhdGlvbnNdOiBFeGNsdWRlPFxyXG4gICAgU2lnbmFsVmFsdWU8VERlcml2YXRpb25zW0tdWydwYXJ0aWFsVmFsdWUnXT4sXHJcbiAgICB1bmRlZmluZWRcclxuICA+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBncm91cCBvZiBmb3JtIGNvbnRyb2xzLCBzaW1pbGFyIHRvIEFuZ3VsYXIncyBgRm9ybUdyb3VwYC4gIEl0IGFnZ3JlZ2F0ZXNcclxuICogdGhlIHZhbHVlcyBhbmQgc3RhdGVzIG9mIGl0cyBjaGlsZCBjb250cm9scyBpbnRvIGEgc2luZ2xlIG9iamVjdC5cclxuICpcclxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGZvcm0gZ3JvdXAncyB2YWx1ZSAoYW4gb2JqZWN0KS5cclxuICogQHR5cGVQYXJhbSBURGVyaXZhdGlvbnMgLSBBIHJlY29yZCB3aGVyZSBrZXlzIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGNoaWxkIGNvbnRyb2xzIGFuZCB2YWx1ZXMgYXJlIHRoZSBgRm9ybUNvbnRyb2xTaWduYWxgIGluc3RhbmNlcy5cclxuICogQHR5cGVQYXJhbSBUUGFyZW50IC0gVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGNvbnRyb2wncyB2YWx1ZSAoaWYgdGhpcyBncm91cCBpcyBuZXN0ZWQpLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRm9ybUdyb3VwU2lnbmFsPFxyXG4gIFQsXHJcbiAgVERlcml2YXRpb25zIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2xTaWduYWw8YW55LCBULCBhbnksIGFueT4+LFxyXG4gIFRQYXJlbnQgPSB1bmRlZmluZWQsXHJcbj4gPSBGb3JtQ29udHJvbFNpZ25hbDxcclxuICBULFxyXG4gIFRQYXJlbnQsXHJcbiAgJ2dyb3VwJyxcclxuICBQYXJ0aWFsPERlcml2YXRpb25QYXJ0aWFsVmFsdWVzPFREZXJpdmF0aW9ucz4+XHJcbj4gJiB7XHJcbiAgLyoqXHJcbiAgICogQSBzaWduYWwgdGhhdCBob2xkcyBhIHJlY29yZCBvZiB0aGUgY2hpbGQgZm9ybSBjb250cm9scy4gIFRoZSBrZXlzIGFyZSB0aGUgbmFtZXNcclxuICAgKiBvZiB0aGUgY29udHJvbHMsIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgYEZvcm1Db250cm9sU2lnbmFsYCBpbnN0YW5jZXMuXHJcbiAgICovXHJcbiAgY2hpbGRyZW46IFNpZ25hbDxURGVyaXZhdGlvbnM+O1xyXG4gIC8qKlxyXG4gICAqIEEgc2lnbmFsIHRoYXQgaG9sZHMgdGhlIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZSBvZiB0aGUgZ3JvdXAgaXRzZWxmIChleGNsdWRpbmcgY2hpbGQgZXJyb3JzKS5cclxuICAgKi9cclxuICBvd25FcnJvcjogU2lnbmFsPHN0cmluZz47XHJcbn07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBgRm9ybUdyb3VwU2lnbmFsYC4gIEV4dGVuZHMgYENyZWF0ZUZvcm1Db250cm9sT3B0aW9uc2AuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDcmVhdGVGb3JtR3JvdXBPcHRpb25zPFxyXG4gIFQsXHJcbiAgVERlcml2YXRpb25zIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2xTaWduYWw8YW55LCBULCBhbnksIGFueT4+LFxyXG4+ID0gQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zPFQsICdncm91cCc+ICYge1xyXG4gIC8qKlxyXG4gICAqIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGJhc2Ugb2JqZWN0IGZvciB0aGUgYHBhcnRpYWxWYWx1ZWAgc2lnbmFsLlxyXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJlLXBvcHVsYXRlIHRoZSBwYXJ0aWFsIHZhbHVlIHdpdGggZGVmYXVsdCB2YWx1ZXMgb3JcclxuICAgKiB0byBwZXJmb3JtIGN1c3RvbSBsb2dpYyBiZWZvcmUgbWVyZ2luZyBpbiB0aGUgcGFydGlhbCB2YWx1ZXMgZnJvbSBjaGlsZCBjb250cm9scy5cclxuICAgKi9cclxuICBjcmVhdGVCYXNlUGFydGlhbFZhbHVlPzogKFxyXG4gICAgdmFsdWU6IFQsXHJcbiAgKSA9PiBQYXJ0aWFsPERlcml2YXRpb25QYXJ0aWFsVmFsdWVzPFREZXJpdmF0aW9ucz4+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBgRm9ybUdyb3VwU2lnbmFsYCwgd2hpY2ggYWdncmVnYXRlcyBhIHNldCBvZiBjaGlsZCBmb3JtIGNvbnRyb2xzIGludG8gYSBzaW5nbGUgb2JqZWN0LlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgZm9ybSBncm91cCdzIHZhbHVlIChhbiBvYmplY3QpLlxyXG4gKiBAdHlwZVBhcmFtIFREZXJpdmF0aW9ucyAtICBBIHJlY29yZCB3aGVyZSBrZXlzIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGNoaWxkIGNvbnRyb2xzIGFuZCB2YWx1ZXMgYXJlIHRoZSBgRm9ybUNvbnRyb2xTaWduYWxgIGluc3RhbmNlcy5cclxuICogQHR5cGVQYXJhbSBUUGFyZW50IC0gVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGNvbnRyb2wncyB2YWx1ZSAoaWYgdGhpcyBncm91cCBpcyBuZXN0ZWQgd2l0aGluIGFub3RoZXIgZ3JvdXAgb3IgYXJyYXkpLlxyXG4gKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBmb3JtIGdyb3VwIChvciBhIGBXcml0YWJsZVNpZ25hbGAgb3IgYERlcml2ZWRTaWduYWxgIGlmIHRoZSBncm91cCBpcyBuZXN0ZWQpLlxyXG4gKiBAcGFyYW0gcHJvdmlkZWRDaGlsZHJlbiAtIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBjaGlsZCBgRm9ybUNvbnRyb2xTaWduYWxgIGluc3RhbmNlcywgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgc3VjaCBhbiBvYmplY3QuXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgYSBmdW5jdGlvbiBhbGxvd3MgZm9yIGR5bmFtaWMgY3JlYXRpb24gb2YgY2hpbGQgY29udHJvbHMgKGUuZy4sIGluIHJlc3BvbnNlIHRvIGNoYW5nZXMgaW4gb3RoZXIgc2lnbmFscykuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZm9ybSBncm91cC5cclxuICogQHJldHVybnMgQSBgRm9ybUdyb3VwU2lnbmFsYCBpbnN0YW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gQ3JlYXRlIGEgc2ltcGxlIGZvcm0gZ3JvdXA6XHJcbiAqICBjb25zdCB1c2VyID0gc2lnbmFsKHsgbmFtZTogJ0pvaG4gRG9lJywgYWdlOiAzMCB9KTtcclxuICogIGNvbnN0IGZvcm0gPSBmb3JtR3JvdXAodXNlciwge1xyXG4gKiAgbmFtZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnbmFtZScpKSxcclxuICogIGFnZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnYWdlJykpLFxyXG4gKiAgfSlcclxuICpcclxuICogLy8gQ3JlYXRlIGEgbmVzdGVkIGZvcm0gZ3JvdXA6XHJcbiAqICBjb25zdCB1c2VyID0gc2lnbmFsKHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwLCBhZGRyZXNzOiB7c3RyZWV0OiBcIlNvbWUgc3RyZWV0XCJ9IH0pO1xyXG4gKlxyXG4gKiBjb25zdCBhZGRyZXNzID0gZGVyaXZlZCh1c2VyLCAnYWRkcmVzcycpO1xyXG4gKiBjb25zdCB1c2VyRm9ybSA9IGZvcm1Hcm91cCh1c2VyLCB7XHJcbiAqICAgbmFtZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnbmFtZScpKSxcclxuICogICBhZ2U6IGZvcm1Db250cm9sKGRlcml2ZWQodXNlciwgJ2FnZScpKSxcclxuICogICBhZGRyZXNzOiBmb3JtR3JvdXAoYWRkcmVzcywge1xyXG4gKiAgICAgICBzdHJlZXQ6IGZvcm1Db250cm9sKGRlcml2ZWQoYWRkcmVzcywgKGFkZHJlc3MpID0+IGFkZHJlc3Muc3RyZWV0KSwge1xyXG4gKiAgICAgICAgICAgdmFsaWRhdG9yOiAoKSA9PiAodmFsdWUpID0+IHZhbHVlID8gXCJcIiA6IFwicmVxdWlyZWQhXCJcclxuICogICAgICAgfSkgLy8geW91IGNhbiBjcmVhdGUgZGVlcGx5IG5lc3RlZCBzdHJ1Y3R1cmVzLlxyXG4gKiAgIH0pXHJcbiAqIH0pO1xyXG4gKlxyXG4gKiAvLyBDcmVhdGUgYSBmb3JtIGdyb3VwIHdpdGggZHluYW1pY2FsbHkgY3JlYXRlZCBjaGlsZHJlbiByZXBsYWNlZCByYXJlIEZvcm1SZWNvcmQgcmVxdWlyZW1lbnRzLlxyXG4gKiBjb25zdCBzaG93QWRkcmVzcyA9IHNpZ25hbChmYWxzZSk7XHJcbiAqIHR5cGUgQ2hhcmFjdGVyaXN0aWMgPSB7XHJcbiAqICB2YWx1ZVR5cGU6ICdzdHJpbmcnO1xyXG4gKiAgdmFsdWU6IHN0cmluZztcclxuICogfSB8IHtcclxuICogIHZhbHVlVHlwZTogJ251bWJlcic7XHJcbiAqICB2YWx1ZTogbnVtYmVyO1xyXG4gKiB9XHJcbiAqIGNvbnN0IGNoYXIgPSBzaWduYWw8Q2hhcmFjdGVyaXN0aWM+KHsgdmFsdWVUeXBlOiAnc3RyaW5nJywgdmFsdWU6ICcnIH0pO1xyXG4gKiBjb25zdCBjaGFyRm9ybSA9IGZvcm1Hcm91cChjaGFyLCAoKSA9PiB7XHJcbiAqICBpZiAoY2hhcigpLnZhbHVlVHlwZSA9PT0gJ3N0cmluZykgcmV0dXJuIGNyZWF0ZVN0cmluZ0NvbnRyb2woY2hhcik7XHJcbiAqICByZXR1cm4gY3JlYXRlTnVtYmVyQ29udHJvbChjaGFyKTtcclxuICogfSk7XHJcbiAqXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZm9ybUdyb3VwPFxyXG4gIFQsXHJcbiAgVERlcml2YXRpb25zIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2xTaWduYWw8YW55LCBULCBhbnksIGFueT4+LFxyXG4gIFRQYXJlbnQgPSB1bmRlZmluZWQsXHJcbj4oXHJcbiAgaW5pdGlhbDogRGVyaXZlZFNpZ25hbDxUUGFyZW50LCBUPiB8IFQgfCBXcml0YWJsZVNpZ25hbDxUPixcclxuICBwcm92aWRlZENoaWxkcmVuOiAoKCkgPT4gVERlcml2YXRpb25zKSB8IFREZXJpdmF0aW9ucyxcclxuICBvcHQ/OiBDcmVhdGVGb3JtR3JvdXBPcHRpb25zPFQsIFREZXJpdmF0aW9ucz4sXHJcbik6IEZvcm1Hcm91cFNpZ25hbDxULCBURGVyaXZhdGlvbnMsIFRQYXJlbnQ+IHtcclxuICBjb25zdCB2YWx1ZVNpZ25hbCA9IGlzU2lnbmFsKGluaXRpYWwpID8gaW5pdGlhbCA6IHNpZ25hbChpbml0aWFsKTtcclxuICAvLyB3ZSBmYWtlIGEgZGVyaXZhdGlvbiBpZiBub3QgcHJlc2VudCwgc28gdGhhdCAuZnJvbSBpcyBwcmVzZW50IG9uIHRoZSBzaWduYWxcclxuICBjb25zdCB2YWx1ZSA9IGlzRGVyaXZhdGlvbjxUUGFyZW50LCBUPih2YWx1ZVNpZ25hbClcclxuICAgID8gdmFsdWVTaWduYWxcclxuICAgIDogdG9GYWtlU2lnbmFsRGVyaXZhdGlvbjxUUGFyZW50LCBUPih2YWx1ZVNpZ25hbCk7XHJcblxyXG4gIC8vIHdlIGFsbG93IGZvciBhIGZ1bmN0aW9uL3NpZ25hbCB0byBiZSBwYXNzZWQsIHRoaXMgY2FzZSBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBjaGlsZCBjb250cm9scyBjaGFuZ2UgZGVwZW5kZW50IHVwb24gc29tZXRoaW5nLCBzYXkgaWYgYSBmb3JtQ29udHJvbCBpcyBmbGlwcGVkIGludG8gYSBmb3JtR3JvdXAuXHJcbiAgY29uc3QgY2hpbGRyZW4gPVxyXG4gICAgdHlwZW9mIHByb3ZpZGVkQ2hpbGRyZW4gPT09ICdmdW5jdGlvbidcclxuICAgICAgPyBjb21wdXRlZCgoKSA9PiBwcm92aWRlZENoaWxkcmVuKCkpXHJcbiAgICAgIDogY29tcHV0ZWQoKCkgPT4gcHJvdmlkZWRDaGlsZHJlbik7XHJcblxyXG4gIC8vIGFycmF5IGFsbG93cyBmb3IgZWFzaWVyIGhhbmRsaW5nXHJcbiAgY29uc3QgZGVyaXZhdGlvbnNBcnJheSA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC52YWx1ZXMoY2hpbGRyZW4oKSkpO1xyXG5cclxuICBjb25zdCBjaGlsZHJlbkRpcnR5ID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PlxyXG4gICAgICAhIWRlcml2YXRpb25zQXJyYXkoKS5sZW5ndGggJiYgZGVyaXZhdGlvbnNBcnJheSgpLnNvbWUoKGQpID0+IGQuZGlydHkoKSksXHJcbiAgKTtcclxuXHJcbiAgLy8gYnkgZGVmYXVsdCBkb250IGNvbXBhcmUgb2JqZWN0IHJlZmVyZW5jZXMsIGp1c3QgdXNlIGNoaWxkcmVuRGlydHlTaWduYWxcclxuICBjb25zdCBiYXNlRGlydHlFcSA9IG9wdD8uZGlydHlFcXVhbGl0eSA/PyBvcHQ/LmVxdWFsID8/ICgoKSA9PiB0cnVlKTtcclxuXHJcbiAgLy8gZnVuY3Rpb24gd2hpY2ggY2FsbHMgYSBzaWduYWwgYmVjb21lcyBhIHNpZ25hbFxyXG4gIGNvbnN0IGRpcnR5RXF1YWxpdHkgPSAoYTogVCwgYjogVCkgPT4ge1xyXG4gICAgcmV0dXJuIGJhc2VEaXJ0eUVxKGEsIGIpICYmICFjaGlsZHJlbkRpcnR5KCk7XHJcbiAgfTtcclxuXHJcbiAgLy8gZ3JvdXAgY29udHJvbFxyXG4gIGNvbnN0IGN0cmwgPSBmb3JtQ29udHJvbDxULCBUUGFyZW50LCAnZ3JvdXAnPih2YWx1ZSwge1xyXG4gICAgLi4ub3B0LFxyXG4gICAgZGlydHlFcXVhbGl0eSxcclxuICAgIGNvbnRyb2xUeXBlOiAnZ3JvdXAnLFxyXG4gICAgcmVhZG9ubHk6ICgpID0+IHtcclxuICAgICAgLy8gcmVhZG9ubHkgaWYgaXMgcmVhZG9ubHkgb3IgYWxsIGNoaWxkcmVuIGFyZSByZWFkb25seVxyXG4gICAgICBpZiAob3B0Py5yZWFkb25seT8uKCkpIHJldHVybiB0cnVlO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICEhZGVyaXZhdGlvbnNBcnJheSgpLmxlbmd0aCAmJlxyXG4gICAgICAgIGRlcml2YXRpb25zQXJyYXkoKS5ldmVyeSgoZCkgPT4gZC5yZWFkb25seSgpKVxyXG4gICAgICApO1xyXG4gICAgfSxcclxuICAgIGRpc2FibGU6ICgpID0+IHtcclxuICAgICAgaWYgKG9wdD8uZGlzYWJsZT8uKCkpIHJldHVybiB0cnVlO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICEhZGVyaXZhdGlvbnNBcnJheSgpLmxlbmd0aCAmJlxyXG4gICAgICAgIGRlcml2YXRpb25zQXJyYXkoKS5ldmVyeSgoZCkgPT4gZC5kaXNhYmxlZCgpKVxyXG4gICAgICApO1xyXG4gICAgfSxcclxuICB9KSBzYXRpc2ZpZXMgRm9ybUNvbnRyb2xTaWduYWw8VCwgVFBhcmVudCwgJ2dyb3VwJz47XHJcblxyXG4gIGNvbnN0IGNoaWxkcmVuVG91Y2hlZCA9IGNvbXB1dGVkKFxyXG4gICAgKCkgPT5cclxuICAgICAgISFkZXJpdmF0aW9uc0FycmF5KCkubGVuZ3RoICYmXHJcbiAgICAgIGRlcml2YXRpb25zQXJyYXkoKS5zb21lKChkKSA9PiBkLnRvdWNoZWQoKSksXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgdG91Y2hlZCA9IGNvbXB1dGVkKCgpID0+IGN0cmwudG91Y2hlZCgpIHx8IGNoaWxkcmVuVG91Y2hlZCgpKTtcclxuXHJcbiAgY29uc3QgY2hpbGRFcnJvciA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICghZGVyaXZhdGlvbnNBcnJheSgpLmxlbmd0aCkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIGRlcml2YXRpb25zQXJyYXkoKVxyXG4gICAgICAubWFwKChkKSA9PiAoZC5lcnJvcigpID8gYCR7ZC5sYWJlbCgpfTogJHtkLmVycm9yKCl9YCA6ICcnKSlcclxuICAgICAgLmZpbHRlcihCb29sZWFuKVxyXG4gICAgICAuam9pbignXFxuJyk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGVycm9yID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3Qgb3duRXJyb3IgPSBjdHJsLmVycm9yKCk7XHJcbiAgICBpZiAob3duRXJyb3IpIHJldHVybiBvd25FcnJvcjtcclxuICAgIHJldHVybiBjaGlsZEVycm9yKCkgPyAnSU5WQUxJRCcgOiAnJztcclxuICB9KTtcclxuXHJcbiAgY29uc3QgbWFya0FsbEFzVG91Y2hlZCA9ICgpID0+IHtcclxuICAgIGN0cmwubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgZm9yIChjb25zdCBjdHJsIG9mIHVudHJhY2tlZChkZXJpdmF0aW9uc0FycmF5KSkge1xyXG4gICAgICBjdHJsLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBtYXJrQWxsQXNQcmlzdGluZSA9ICgpID0+IHtcclxuICAgIGN0cmwubWFya0FsbEFzUHJpc3RpbmUoKTtcclxuICAgIGZvciAoY29uc3QgY3RybCBvZiB1bnRyYWNrZWQoZGVyaXZhdGlvbnNBcnJheSkpIHtcclxuICAgICAgY3RybC5tYXJrQWxsQXNQcmlzdGluZSgpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHJlY29uY2lsZSA9IChuZXdWYWx1ZTogVCkgPT4ge1xyXG4gICAgLy8gc2V0IHRoZSBjaGlsZHJlbiB2YWx1ZXMgYmFzZWQgb24gdGhlIGRlcml2YXRpb24gb2YgdGhlIG5ldyB2YWx1ZVxyXG4gICAgZm9yIChjb25zdCBjdHJsIG9mIHVudHJhY2tlZChkZXJpdmF0aW9uc0FycmF5KSkge1xyXG4gICAgICBjb25zdCBmcm9tID0gY3RybC5mcm9tO1xyXG4gICAgICBpZiAoIWZyb20pIGNvbnRpbnVlO1xyXG4gICAgICBjdHJsLnJlY29uY2lsZShmcm9tKG5ld1ZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICBjdHJsLnJlY29uY2lsZShtZXJnZUlmT2JqZWN0KG5ld1ZhbHVlLCB1bnRyYWNrZWQodmFsdWUpKSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZm9yY2VSZWNvbmNpbGUgPSAobmV3VmFsdWU6IFQpID0+IHtcclxuICAgIGZvciAoY29uc3QgY3RybCBvZiB1bnRyYWNrZWQoZGVyaXZhdGlvbnNBcnJheSkpIHtcclxuICAgICAgY29uc3QgZnJvbSA9IGN0cmwuZnJvbTtcclxuICAgICAgaWYgKCFmcm9tKSBjb250aW51ZTtcclxuICAgICAgY3RybC5mb3JjZVJlY29uY2lsZShmcm9tKG5ld1ZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICBjdHJsLmZvcmNlUmVjb25jaWxlKG5ld1ZhbHVlKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBjcmVhdGVCYXNlVmFsdWVGbiA9IG9wdD8uY3JlYXRlQmFzZVBhcnRpYWxWYWx1ZTtcclxuXHJcbiAgY29uc3QgYmFzZVBhcnRpYWxWYWx1ZTogU2lnbmFsPFxyXG4gICAgUGFydGlhbDxEZXJpdmF0aW9uUGFydGlhbFZhbHVlczxURGVyaXZhdGlvbnM+PlxyXG4gID4gPSBjcmVhdGVCYXNlVmFsdWVGblxyXG4gICAgPyBjb21wdXRlZCgoKSA9PiBjcmVhdGVCYXNlVmFsdWVGbihjdHJsLnZhbHVlKCkpKVxyXG4gICAgOiBjb21wdXRlZCgoKSA9PiAoe30pKTtcclxuXHJcbiAgY29uc3QgcGFydGlhbFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3Qgb2JqOiBQYXJ0aWFsPERlcml2YXRpb25QYXJ0aWFsVmFsdWVzPFREZXJpdmF0aW9ucz4+ID0ge1xyXG4gICAgICAuLi5iYXNlUGFydGlhbFZhbHVlKCksXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghY3RybC5kaXJ0eSgpKSByZXR1cm4gb2JqO1xyXG5cclxuICAgIGZvciAoY29uc3QgW2tleSwgY3RybF0gb2YgT2JqZWN0LmVudHJpZXMoY2hpbGRyZW4oKSkpIHtcclxuICAgICAgY29uc3QgcHYgPSBjdHJsLnBhcnRpYWxWYWx1ZSgpO1xyXG5cclxuICAgICAgaWYgKHB2ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xyXG4gICAgICAob2JqIGFzIEFueU9iamVjdClba2V5XSA9IHB2O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYmo7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGNoaWxkcmVuVmFsaWQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAoIWRlcml2YXRpb25zQXJyYXkoKS5sZW5ndGgpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGRlcml2YXRpb25zQXJyYXkoKS5ldmVyeSgoZCkgPT4gZC52YWxpZCgpKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgY2hpbGRyZW5QZW5kaW5nID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PlxyXG4gICAgICAhIWRlcml2YXRpb25zQXJyYXkoKS5sZW5ndGggJiZcclxuICAgICAgZGVyaXZhdGlvbnNBcnJheSgpLnNvbWUoKGQpID0+IGQucGVuZGluZygpKSxcclxuICApO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4uY3RybCxcclxuICAgIGNoaWxkcmVuLFxyXG4gICAgcGFydGlhbFZhbHVlLFxyXG4gICAgcmVjb25jaWxlLFxyXG4gICAgZm9yY2VSZWNvbmNpbGUsXHJcbiAgICBvd25FcnJvcjogY3RybC5lcnJvcixcclxuICAgIHRvdWNoZWQsXHJcbiAgICBlcnJvcixcclxuICAgIHZhbGlkOiBjb21wdXRlZCgoKSA9PiBjdHJsLnZhbGlkKCkgJiYgY2hpbGRyZW5WYWxpZCgpKSxcclxuICAgIHBlbmRpbmc6IGNvbXB1dGVkKCgpID0+IGN0cmwucGVuZGluZygpIHx8IGNoaWxkcmVuUGVuZGluZygpKSxcclxuICAgIG1hcmtBbGxBc1ByaXN0aW5lLFxyXG4gICAgbWFya0FsbEFzVG91Y2hlZCxcclxuICAgIHJlc2V0OiAoKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgY3RybCBvZiB1bnRyYWNrZWQoZGVyaXZhdGlvbnNBcnJheSkpIHtcclxuICAgICAgICBjdHJsLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICAgY3RybC5yZXNldCgpO1xyXG4gICAgfSxcclxuICAgIHJlc2V0V2l0aEluaXRpYWw6IChpbml0aWFsOiBUKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgY3RybCBvZiB1bnRyYWNrZWQoZGVyaXZhdGlvbnNBcnJheSkpIHtcclxuICAgICAgICBjb25zdCBmcm9tID0gY3RybC5mcm9tO1xyXG4gICAgICAgIGlmIChmcm9tKSBjdHJsLnJlc2V0V2l0aEluaXRpYWwoZnJvbShpbml0aWFsKSk7XHJcbiAgICAgICAgZWxzZSBjdHJsLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICAgY3RybC5yZXNldFdpdGhJbml0aWFsKGluaXRpYWwpO1xyXG4gICAgfSxcclxuICB9O1xyXG59XHJcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW1zdGFjay1mb3JtLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mb3JtL2NvcmUvc3JjL21tc3RhY2stZm9ybS1jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmstack/form-core",
3
- "version": "20.4.0",
3
+ "version": "20.4.1",
4
4
  "keywords": [
5
5
  "angular",
6
6
  "signals",
@@ -19,11 +19,11 @@
19
19
  },
20
20
  "homepage": "https://github.com/mihajm/mmstack/blob/master/packages/form/core",
21
21
  "dependencies": {
22
- "@mmstack/primitives": "^20.4.0",
22
+ "@mmstack/primitives": "^20.4.1",
23
23
  "tslib": "^2.3.0"
24
24
  },
25
25
  "peerDependencies": {
26
- "@angular/core": "~20.1.0"
26
+ "@angular/core": ">=20 <21"
27
27
  },
28
28
  "sideEffects": false,
29
29
  "module": "fesm2022/mmstack-form-core.mjs",