blob: adf2e8403d8b0010efed517ee80dd2cc1ab3e84d [file] [log] [blame]
{"version":3,"file":"flex-layout-core.umd.min.js","sources":["../../src/lib/core/media-marshaller/media-marshaller.ts","../../node_modules/tslib/tslib.es6.js","../../src/lib/core/browser-provider.ts","../../src/lib/core/add-alias.ts","../../src/lib/utils/layout-validator.ts","../../src/lib/utils/object-extend.ts","../../src/lib/core/breakpoints/breakpoint-tools.ts","../../src/lib/core/utils/sort.ts","../../src/lib/core/match-media/match-media.ts","../../src/lib/core/media-marshaller/print-hook.ts","../../src/lib/core/utils/array.ts","../../src/lib/core/media-observer/media-observer.ts","../../src/lib/utils/auto-prefixer.ts","../../src/lib/core/basis-validator/basis-validator.ts","../../src/lib/core/module.ts","../../src/lib/core/media-change.ts","../../src/lib/core/stylesheet-map/stylesheet-map.ts","../../src/lib/core/tokens/library-config.ts","../../src/lib/core/tokens/server-token.ts","../../src/lib/core/tokens/breakpoint-token.ts","../../src/lib/core/base/base2.ts","../../src/lib/core/breakpoints/data/break-points.ts","../../src/lib/core/breakpoints/data/orientation-break-points.ts","../../src/lib/core/breakpoints/break-points-token.ts","../../src/lib/core/breakpoints/break-point-registry.ts","../../src/lib/core/match-media/mock/mock-match-media.ts","../../src/lib/core/media-trigger/media-trigger.ts","../../src/lib/core/style-utils/style-utils.ts","../../src/lib/core/style-builder/style-builder.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Injectable} from '@angular/core';\n\nimport {merge, Observable, Subject, Subscription} from 'rxjs';\nimport {filter, tap} from 'rxjs/operators';\n\nimport {BreakPoint} from '../breakpoints/break-point';\nimport {sortDescendingPriority} from '../utils/sort';\nimport {BreakPointRegistry} from '../breakpoints/break-point-registry';\nimport {MatchMedia} from '../match-media/match-media';\nimport {MediaChange} from '../media-change';\n\nimport {PrintHook, HookTarget} from './print-hook';\nimport {mergeAlias} from '../add-alias';\n\ntype ClearCallback = () => void;\ntype UpdateCallback = (val: any) => void;\ntype Builder = UpdateCallback | ClearCallback;\n\ntype ValueMap = Map<string, string>;\ntype BreakpointMap = Map<string, ValueMap>;\ntype ElementMap = Map<HTMLElement, BreakpointMap>;\ntype ElementKeyMap = WeakMap<HTMLElement, Set<string>>;\ntype SubscriptionMap = Map<string, Subscription>;\ntype WatcherMap = WeakMap<HTMLElement, SubscriptionMap>;\ntype BuilderMap = WeakMap<HTMLElement, Map<string, Builder>>;\n\nexport interface ElementMatcher {\n element: HTMLElement;\n key: string;\n value: any;\n}\n\n/**\n * MediaMarshaller - register responsive values from directives and\n * trigger them based on media query events\n */\n@Injectable({providedIn: 'root'})\nexport class MediaMarshaller {\n private activatedBreakpoints: BreakPoint[] = [];\n private elementMap: ElementMap = new Map();\n private elementKeyMap: ElementKeyMap = new WeakMap();\n private watcherMap: WatcherMap = new WeakMap(); // special triggers to update elements\n private updateMap: BuilderMap = new WeakMap(); // callback functions to update styles\n private clearMap: BuilderMap = new WeakMap(); // callback functions to clear styles\n\n private subject: Subject<ElementMatcher> = new Subject();\n\n get activatedAlias(): string {\n return this.activatedBreakpoints[0] ? this.activatedBreakpoints[0].alias : '';\n }\n\n constructor(protected matchMedia: MatchMedia,\n protected breakpoints: BreakPointRegistry,\n protected hook: PrintHook) {\n this.observeActivations();\n }\n\n /**\n * Update styles on breakpoint activates or deactivates\n * @param mc\n */\n onMediaChange(mc: MediaChange) {\n const bp: BreakPoint | null = this.findByQuery(mc.mediaQuery);\n if (bp) {\n mc = mergeAlias(mc, bp);\n\n if (mc.matches && this.activatedBreakpoints.indexOf(bp) === -1) {\n this.activatedBreakpoints.push(bp);\n this.activatedBreakpoints.sort(sortDescendingPriority);\n\n this.updateStyles();\n\n } else if (!mc.matches && this.activatedBreakpoints.indexOf(bp) !== -1) {\n // Remove the breakpoint when it's deactivated\n this.activatedBreakpoints.splice(this.activatedBreakpoints.indexOf(bp), 1);\n this.activatedBreakpoints.sort(sortDescendingPriority);\n\n this.updateStyles();\n }\n }\n }\n\n /**\n * initialize the marshaller with necessary elements for delegation on an element\n * @param element\n * @param key\n * @param updateFn optional callback so that custom bp directives don't have to re-provide this\n * @param clearFn optional callback so that custom bp directives don't have to re-provide this\n * @param extraTriggers other triggers to force style updates (e.g. layout, directionality, etc)\n */\n init(element: HTMLElement,\n key: string,\n updateFn?: UpdateCallback,\n clearFn?: ClearCallback,\n extraTriggers: Observable<any>[] = []): void {\n\n initBuilderMap(this.updateMap, element, key, updateFn);\n initBuilderMap(this.clearMap, element, key, clearFn);\n\n this.buildElementKeyMap(element, key);\n this.watchExtraTriggers(element, key, extraTriggers);\n }\n\n /**\n * get the value for an element and key and optionally a given breakpoint\n * @param element\n * @param key\n * @param bp\n */\n getValue(element: HTMLElement, key: string, bp?: string): any {\n const bpMap = this.elementMap.get(element);\n if (bpMap) {\n const values = bp !== undefined ? bpMap.get(bp) : this.getActivatedValues(bpMap, key);\n if (values) {\n return values.get(key);\n }\n }\n return undefined;\n }\n\n /**\n * whether the element has values for a given key\n * @param element\n * @param key\n */\n hasValue(element: HTMLElement, key: string): boolean {\n const bpMap = this.elementMap.get(element);\n if (bpMap) {\n const values = this.getActivatedValues(bpMap, key);\n if (values) {\n return values.get(key) !== undefined || false;\n }\n }\n return false;\n }\n\n /**\n * Set the value for an input on a directive\n * @param element the element in question\n * @param key the type of the directive (e.g. flex, layout-gap, etc)\n * @param bp the breakpoint suffix (empty string = default)\n * @param val the value for the breakpoint\n */\n setValue(element: HTMLElement, key: string, val: any, bp: string): void {\n let bpMap: BreakpointMap | undefined = this.elementMap.get(element);\n if (!bpMap) {\n bpMap = new Map().set(bp, new Map().set(key, val));\n this.elementMap.set(element, bpMap);\n } else {\n const values = (bpMap.get(bp) || new Map()).set(key, val);\n bpMap.set(bp, values);\n this.elementMap.set(element, bpMap);\n }\n const value = this.getValue(element, key);\n if (value !== undefined) {\n this.updateElement(element, key, value);\n }\n }\n\n /** Track element value changes for a specific key */\n trackValue(element: HTMLElement, key: string): Observable<ElementMatcher> {\n return this.subject\n .asObservable()\n .pipe(filter(v => v.element === element && v.key === key));\n }\n\n /** update all styles for all elements on the current breakpoint */\n updateStyles(): void {\n this.elementMap.forEach((bpMap, el) => {\n const keyMap = new Set(this.elementKeyMap.get(el)!);\n let valueMap = this.getActivatedValues(bpMap);\n\n if (valueMap) {\n valueMap.forEach((v, k) => {\n this.updateElement(el, k, v);\n keyMap.delete(k);\n });\n }\n\n keyMap.forEach(k => {\n valueMap = this.getActivatedValues(bpMap, k);\n if (valueMap) {\n const value = valueMap.get(k);\n this.updateElement(el, k, value);\n } else {\n this.clearElement(el, k);\n }\n });\n\n });\n }\n\n /**\n * clear the styles for a given element\n * @param element\n * @param key\n */\n clearElement(element: HTMLElement, key: string): void {\n const builders = this.clearMap.get(element);\n if (builders) {\n const clearFn: ClearCallback = builders.get(key) as ClearCallback;\n if (!!clearFn) {\n clearFn();\n this.subject.next({element, key, value: ''});\n }\n }\n }\n\n /**\n * update a given element with the activated values for a given key\n * @param element\n * @param key\n * @param value\n */\n updateElement(element: HTMLElement, key: string, value: any): void {\n const builders = this.updateMap.get(element);\n if (builders) {\n const updateFn: UpdateCallback = builders.get(key) as UpdateCallback;\n if (!!updateFn) {\n updateFn(value);\n this.subject.next({element, key, value});\n }\n }\n }\n\n /**\n * release all references to a given element\n * @param element\n */\n releaseElement(element: HTMLElement): void {\n const watcherMap = this.watcherMap.get(element);\n if (watcherMap) {\n watcherMap.forEach(s => s.unsubscribe());\n this.watcherMap.delete(element);\n }\n const elementMap = this.elementMap.get(element);\n if (elementMap) {\n elementMap.forEach((_, s) => elementMap.delete(s));\n this.elementMap.delete(element);\n }\n }\n\n /**\n * trigger an update for a given element and key (e.g. layout)\n * @param element\n * @param key\n */\n triggerUpdate(element: HTMLElement, key?: string): void {\n const bpMap = this.elementMap.get(element);\n if (bpMap) {\n const valueMap = this.getActivatedValues(bpMap, key);\n if (valueMap) {\n if (key) {\n this.updateElement(element, key, valueMap.get(key));\n } else {\n valueMap.forEach((v, k) => this.updateElement(element, k, v));\n }\n }\n }\n }\n\n /** Cross-reference for HTMLElement with directive key */\n private buildElementKeyMap(element: HTMLElement, key: string) {\n let keyMap = this.elementKeyMap.get(element);\n if (!keyMap) {\n keyMap = new Set();\n this.elementKeyMap.set(element, keyMap);\n }\n keyMap.add(key);\n }\n\n /**\n * Other triggers that should force style updates:\n * - directionality\n * - layout changes\n * - mutationobserver updates\n */\n private watchExtraTriggers(element: HTMLElement,\n key: string,\n triggers: Observable<any>[]) {\n if (triggers && triggers.length) {\n let watchers = this.watcherMap.get(element);\n if (!watchers) {\n watchers = new Map();\n this.watcherMap.set(element, watchers);\n }\n const subscription = watchers.get(key);\n if (!subscription) {\n const newSubscription = merge(...triggers).subscribe(() => {\n const currentValue = this.getValue(element, key);\n this.updateElement(element, key, currentValue);\n });\n watchers.set(key, newSubscription);\n }\n }\n }\n\n /** Breakpoint locator by mediaQuery */\n private findByQuery(query: string) {\n return this.breakpoints.findByQuery(query);\n }\n\n /**\n * get the fallback breakpoint for a given element, starting with the current breakpoint\n * @param bpMap\n * @param key\n */\n private getActivatedValues(bpMap: BreakpointMap, key?: string): ValueMap | undefined {\n for (let i = 0; i < this.activatedBreakpoints.length; i++) {\n const activatedBp = this.activatedBreakpoints[i];\n const valueMap = bpMap.get(activatedBp.alias);\n if (valueMap) {\n if (key === undefined || valueMap.has(key)) {\n return valueMap;\n }\n }\n }\n const lastHope = bpMap.get('');\n return (key === undefined || lastHope && lastHope.has(key)) ? lastHope : undefined;\n }\n\n /**\n * Watch for mediaQuery breakpoint activations\n */\n private observeActivations() {\n const target = this as unknown as HookTarget;\n const queries = this.breakpoints.items.map(bp => bp.mediaQuery);\n\n this.matchMedia\n .observe(this.hook.withPrintQuery(queries))\n .pipe(\n tap(this.hook.interceptEvents(target)),\n filter(this.hook.blockPropagation())\n )\n .subscribe(this.onMediaChange.bind(this));\n }\n\n}\n\nfunction initBuilderMap(map: BuilderMap,\n element: HTMLElement,\n key: string,\n input?: UpdateCallback | ClearCallback): void {\n if (input !== undefined) {\n let oldMap = map.get(element);\n if (!oldMap) {\n oldMap = new Map();\n map.set(element, oldMap);\n }\n oldMap.set(key, input);\n }\n}\n\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {APP_BOOTSTRAP_LISTENER, PLATFORM_ID, InjectionToken} from '@angular/core';\nimport {DOCUMENT, isPlatformBrowser} from '@angular/common';\n\n/**\n * Find all of the server-generated stylings, if any, and remove them\n * This will be in the form of inline classes and the style block in the\n * head of the DOM\n */\nexport function removeStyles(_document: Document, platformId: Object) {\n return () => {\n if (isPlatformBrowser(platformId)) {\n const elements = Array.from(_document.querySelectorAll(`[class*=${CLASS_NAME}]`));\n\n // RegExp constructor should only be used if passing a variable to the constructor.\n // When using static regular expression it is more performant to use reg exp literal.\n // This is also needed to provide Safari 9 compatibility, please see\n // https://stackoverflow.com/questions/37919802 for more discussion.\n const classRegex = /\\bflex-layout-.+?\\b/g;\n elements.forEach(el => {\n el.classList.contains(`${CLASS_NAME}ssr`) && el.parentNode ?\n el.parentNode.removeChild(el) : el.className.replace(classRegex, '');\n });\n }\n };\n}\n\n/**\n * Provider to remove SSR styles on the browser\n */\nexport const BROWSER_PROVIDER = {\n provide: <InjectionToken<(() => void)[]>>APP_BOOTSTRAP_LISTENER,\n useFactory: removeStyles,\n deps: [DOCUMENT, PLATFORM_ID],\n multi: true\n};\n\nexport const CLASS_NAME = 'flex-layout-';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {MediaChange} from './media-change';\nimport {BreakPoint} from './breakpoints/break-point';\n\n/**\n * For the specified MediaChange, make sure it contains the breakpoint alias\n * and suffix (if available).\n */\nexport function mergeAlias(dest: MediaChange, source: BreakPoint | null): MediaChange {\n dest = dest ? dest.clone() : new MediaChange();\n if (source) {\n dest.mqAlias = source.alias;\n dest.mediaQuery = source.mediaQuery;\n dest.suffix = source.suffix as string;\n dest.priority = source.priority as number;\n }\n return dest;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nexport const INLINE = 'inline';\nexport const LAYOUT_VALUES = ['row', 'column', 'row-reverse', 'column-reverse'];\n\n/**\n * Validate the direction|'direction wrap' value and then update the host's inline flexbox styles\n */\nexport function buildLayoutCSS(value: string) {\n let [direction, wrap, isInline] = validateValue(value);\n return buildCSS(direction, wrap, isInline);\n }\n\n/**\n * Validate the value to be one of the acceptable value options\n * Use default fallback of 'row'\n */\nexport function validateValue(value: string): [string, string, boolean] {\n value = value ? value.toLowerCase() : '';\n let [direction, wrap, inline] = value.split(' ');\n\n // First value must be the `flex-direction`\n if (!LAYOUT_VALUES.find(x => x === direction)) {\n direction = LAYOUT_VALUES[0];\n }\n\n if (wrap === INLINE) {\n wrap = (inline !== INLINE) ? inline : '';\n inline = INLINE;\n }\n\n return [direction, validateWrapValue(wrap), !!inline];\n}\n\n/**\n * Determine if the validated, flex-direction value specifies\n * a horizontal/row flow.\n */\nexport function isFlowHorizontal(value: string): boolean {\n let [flow, ] = validateValue(value);\n return flow.indexOf('row') > -1;\n}\n\n/**\n * Convert layout-wrap='<value>' to expected flex-wrap style\n */\nexport function validateWrapValue(value: string) {\n if (!!value) {\n switch (value.toLowerCase()) {\n case 'reverse':\n case 'wrap-reverse':\n case 'reverse-wrap':\n value = 'wrap-reverse';\n break;\n\n case 'no':\n case 'none':\n case 'nowrap':\n value = 'nowrap';\n break;\n\n // All other values fallback to 'wrap'\n default:\n value = 'wrap';\n break;\n }\n }\n return value;\n}\n\n/**\n * Build the CSS that should be assigned to the element instance\n * BUG:\n * 1) min-height on a column flex container won’t apply to its flex item children in IE 10-11.\n * Use height instead if possible; height : <xxx>vh;\n *\n * This way any padding or border specified on the child elements are\n * laid out and drawn inside that element's specified width and height.\n */\nfunction buildCSS(direction: string, wrap: string | null = null, inline = false) {\n return {\n 'display': inline ? 'inline-flex' : 'flex',\n 'box-sizing': 'border-box',\n 'flex-direction': direction,\n 'flex-wrap': !!wrap ? wrap : null\n };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Extends an object with the *enumerable* and *own* properties of one or more source objects,\n * similar to Object.assign.\n *\n * @param dest The object which will have properties copied to it.\n * @param sources The source objects from which properties will be copied.\n */\nexport function extendObject(dest: any, ...sources: any[]): any {\n if (dest == null) {\n throw TypeError('Cannot convert undefined or null to object');\n }\n\n for (let source of sources) {\n if (source != null) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n dest[key] = source[key];\n }\n }\n }\n }\n\n return dest;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {BreakPoint} from './break-point';\nimport {extendObject} from '../../utils/object-extend';\n\nconst ALIAS_DELIMITERS = /(\\.|-|_)/g;\nfunction firstUpperCase(part: string) {\n let first = part.length > 0 ? part.charAt(0) : '';\n let remainder = (part.length > 1) ? part.slice(1) : '';\n return first.toUpperCase() + remainder;\n}\n\n/**\n * Converts snake-case to SnakeCase.\n * @param name Text to UpperCamelCase\n */\nfunction camelCase(name: string): string {\n return name\n .replace(ALIAS_DELIMITERS, '|')\n .split('|')\n .map(firstUpperCase)\n .join('');\n}\n\n/**\n * For each breakpoint, ensure that a Suffix is defined;\n * fallback to UpperCamelCase the unique Alias value\n */\nexport function validateSuffixes(list: BreakPoint[]): BreakPoint[] {\n list.forEach((bp: BreakPoint) => {\n if (!bp.suffix) {\n bp.suffix = camelCase(bp.alias); // create Suffix value based on alias\n bp.overlapping = !!bp.overlapping; // ensure default value\n }\n });\n return list;\n}\n\n/**\n * Merge a custom breakpoint list with the default list based on unique alias values\n * - Items are added if the alias is not in the default list\n * - Items are merged with the custom override if the alias exists in the default list\n */\nexport function mergeByAlias(defaults: BreakPoint[], custom: BreakPoint[] = []): BreakPoint[] {\n const dict: {[key: string]: BreakPoint} = {};\n defaults.forEach(bp => {\n dict[bp.alias] = bp;\n });\n // Merge custom breakpoints\n custom.forEach((bp: BreakPoint) => {\n if (dict[bp.alias]) {\n extendObject(dict[bp.alias], bp);\n } else {\n dict[bp.alias] = bp;\n }\n });\n\n return validateSuffixes(Object.keys(dict).map(k => dict[k]));\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\ninterface WithPriority {\n priority?: number;\n}\n\n/** HOF to sort the breakpoints by descending priority */\nexport function sortDescendingPriority<T extends WithPriority>(a: T | null, b: T | null): number {\n const priorityA = a ? a.priority || 0 : 0;\n const priorityB = b ? b.priority || 0 : 0;\n return priorityB - priorityA;\n}\n\n/** HOF to sort the breakpoints by ascending priority */\nexport function sortAscendingPriority<T extends WithPriority>(a: T, b: T): number {\n const pA = a.priority || 0;\n const pB = b.priority || 0;\n return pA - pB;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Inject, Injectable, NgZone, PLATFORM_ID} from '@angular/core';\nimport {DOCUMENT, isPlatformBrowser} from '@angular/common';\nimport {BehaviorSubject, Observable, merge, Observer} from 'rxjs';\nimport {filter} from 'rxjs/operators';\n\nimport {MediaChange} from '../media-change';\n\n/**\n * MediaMonitor configures listeners to mediaQuery changes and publishes an Observable facade to\n * convert mediaQuery change callbacks to subscriber notifications. These notifications will be\n * performed within the ng Zone to trigger change detections and component updates.\n *\n * NOTE: both mediaQuery activations and de-activations are announced in notifications\n */\n@Injectable({providedIn: 'root'})\nexport class MatchMedia {\n /** Initialize source with 'all' so all non-responsive APIs trigger style updates */\n readonly source = new BehaviorSubject<MediaChange>(new MediaChange(true));\n registry = new Map<string, MediaQueryList>();\n\n constructor(protected _zone: NgZone,\n @Inject(PLATFORM_ID) protected _platformId: Object,\n @Inject(DOCUMENT) protected _document: any) {\n }\n\n /**\n * Publish list of all current activations\n */\n get activations(): string[] {\n const results: string[] = [];\n this.registry.forEach((mql: MediaQueryList, key: string) => {\n if (mql.matches) {\n results.push(key);\n }\n });\n return results;\n }\n\n /**\n * For the specified mediaQuery?\n */\n isActive(mediaQuery: string): boolean {\n const mql = this.registry.get(mediaQuery);\n return !!mql ? mql.matches : false;\n }\n\n /**\n * External observers can watch for all (or a specific) mql changes.\n *\n * If a mediaQuery is not specified, then ALL mediaQuery activations will\n * be announced.\n */\n observe(): Observable<MediaChange>;\n observe(mediaQueries: string[]): Observable<MediaChange>;\n observe(mediaQueries: string[], filterOthers: boolean): Observable<MediaChange>;\n\n /**\n * External observers can watch for all (or a specific) mql changes.\n * Typically used by the MediaQueryAdaptor; optionally available to components\n * who wish to use the MediaMonitor as mediaMonitor$ observable service.\n *\n * Use deferred registration process to register breakpoints only on subscription\n * This logic also enforces logic to register all mediaQueries BEFORE notify\n * subscribers of notifications.\n */\n observe(mqList?: string[], filterOthers = false): Observable<MediaChange> {\n if (mqList && mqList.length) {\n const matchMedia$: Observable<MediaChange> = this._observable$.pipe(\n filter((change: MediaChange) => {\n return !filterOthers ? true : (mqList.indexOf(change.mediaQuery) > -1);\n })\n );\n const registration$: Observable<MediaChange> = new Observable((observer: Observer<MediaChange>) => { // tslint:disable-line:max-line-length\n const matches: Array<MediaChange> = this.registerQuery(mqList);\n if (matches.length) {\n const lastChange = matches.pop()!;\n matches.forEach((e: MediaChange) => {\n observer.next(e);\n });\n this.source.next(lastChange); // last match is cached\n }\n observer.complete();\n });\n return merge(registration$, matchMedia$);\n }\n\n return this._observable$;\n }\n\n /**\n * Based on the BreakPointRegistry provider, register internal listeners for each unique\n * mediaQuery. Each listener emits specific MediaChange data to observers\n */\n registerQuery(mediaQuery: string | string[]) {\n const list = Array.isArray(mediaQuery) ? mediaQuery : [mediaQuery];\n const matches: MediaChange[] = [];\n\n buildQueryCss(list, this._document);\n\n list.forEach((query: string) => {\n const onMQLEvent = (e: MediaQueryListEvent) => {\n this._zone.run(() => this.source.next(new MediaChange(e.matches, query)));\n };\n\n let mql = this.registry.get(query);\n if (!mql) {\n mql = this.buildMQL(query);\n mql.addListener(onMQLEvent);\n this.registry.set(query, mql);\n }\n\n if (mql.matches) {\n matches.push(new MediaChange(true, query));\n }\n });\n\n return matches;\n }\n\n /**\n * Call window.matchMedia() to build a MediaQueryList; which\n * supports 0..n listeners for activation/deactivation\n */\n protected buildMQL(query: string): MediaQueryList {\n return constructMql(query, isPlatformBrowser(this._platformId));\n }\n\n protected _observable$ = this.source.asObservable();\n}\n\n/**\n * Private global registry for all dynamically-created, injected style tags\n * @see prepare(query)\n */\nconst ALL_STYLES: { [key: string]: any } = {};\n\n/**\n * For Webkit engines that only trigger the MediaQueryList Listener\n * when there is at least one CSS selector for the respective media query.\n *\n * @param mediaQueries\n * @param _document\n */\nfunction buildQueryCss(mediaQueries: string[], _document: Document) {\n const list = mediaQueries.filter(it => !ALL_STYLES[it]);\n if (list.length > 0) {\n const query = list.join(', ');\n\n try {\n const styleEl = _document.createElement('style');\n\n styleEl.setAttribute('type', 'text/css');\n if (!(styleEl as any).styleSheet) {\n const cssText = `\n/*\n @angular/flex-layout - workaround for possible browser quirk with mediaQuery listeners\n see http://bit.ly/2sd4HMP\n*/\n@media ${query} {.fx-query-test{ }}\n`;\n styleEl.appendChild(_document.createTextNode(cssText));\n }\n\n _document.head!.appendChild(styleEl);\n\n // Store in private global registry\n list.forEach(mq => ALL_STYLES[mq] = styleEl);\n\n } catch (e) {\n console.error(e);\n }\n }\n}\n\nfunction constructMql(query: string, isBrowser: boolean): MediaQueryList {\n const canListen = isBrowser && !!(<Window>window).matchMedia('all').addListener;\n\n return canListen ? (<Window>window).matchMedia(query) : {\n matches: query === 'all' || query === '',\n media: query,\n addListener: () => {\n },\n removeListener: () => {\n }\n } as unknown as MediaQueryList;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Inject, Injectable} from '@angular/core';\n\nimport {mergeAlias} from '../add-alias';\nimport {MediaChange} from '../media-change';\nimport {BreakPoint} from '../breakpoints/break-point';\nimport {LAYOUT_CONFIG, LayoutConfigOptions} from '../tokens/library-config';\nimport {BreakPointRegistry, OptionalBreakPoint} from '../breakpoints/break-point-registry';\nimport {sortDescendingPriority} from '../utils/sort';\n\n/**\n * Interface to apply PrintHook to call anonymous `target.updateStyles()`\n */\nexport interface HookTarget {\n activatedBreakpoints: BreakPoint[];\n updateStyles(): void;\n}\n\nconst PRINT = 'print';\nexport const BREAKPOINT_PRINT = {\n alias: PRINT,\n mediaQuery: PRINT,\n priority: 1000\n};\n\n/**\n * PrintHook - Use to intercept print MediaQuery activations and force\n * layouts to render with the specified print alias/breakpoint\n *\n * Used in MediaMarshaller and MediaObserver\n */\n@Injectable({providedIn: 'root'})\nexport class PrintHook {\n constructor(\n protected breakpoints: BreakPointRegistry,\n @Inject(LAYOUT_CONFIG) protected layoutConfig: LayoutConfigOptions) {\n }\n\n /** Add 'print' mediaQuery: to listen for matchMedia activations */\n withPrintQuery(queries: string[]): string[] {\n return [...queries, PRINT];\n }\n\n /** Is the MediaChange event for any 'print' @media */\n isPrintEvent(e: MediaChange): Boolean {\n return e.mediaQuery.startsWith(PRINT);\n }\n\n /** What is the desired mqAlias to use while printing? */\n get printAlias(): string[] {\n return this.layoutConfig.printWithBreakpoints || [];\n }\n\n /** Lookup breakpoints associated with print aliases. */\n get printBreakPoints(): BreakPoint[] {\n return this.printAlias\n .map(alias => this.breakpoints.findByAlias(alias))\n .filter(bp => bp !== null) as BreakPoint[];\n }\n\n /** Lookup breakpoint associated with mediaQuery */\n getEventBreakpoints({mediaQuery}: MediaChange): BreakPoint[] {\n const bp = this.breakpoints.findByQuery(mediaQuery);\n const list = bp ? [...this.printBreakPoints, bp] : this.printBreakPoints;\n\n return list.sort(sortDescendingPriority);\n }\n\n /** Update event with printAlias mediaQuery information */\n updateEvent(event: MediaChange): MediaChange {\n let bp: OptionalBreakPoint = this.breakpoints.findByQuery(event.mediaQuery);\n if (this.isPrintEvent(event)) {\n // Reset from 'print' to first (highest priority) print breakpoint\n bp = this.getEventBreakpoints(event)[0];\n event.mediaQuery = bp ? bp.mediaQuery : '';\n }\n return mergeAlias(event, bp);\n }\n\n /**\n * Prepare RxJs filter operator with partial application\n * @return pipeable filter predicate\n */\n interceptEvents(target: HookTarget) {\n return (event: MediaChange) => {\n if (this.isPrintEvent(event)) {\n if (event.matches && !this.isPrinting) {\n this.startPrinting(target, this.getEventBreakpoints(event));\n target.updateStyles();\n\n } else if (!event.matches && this.isPrinting) {\n this.stopPrinting(target);\n target.updateStyles();\n }\n } else {\n this.collectActivations(event);\n }\n };\n }\n\n /** Stop mediaChange event propagation in event streams */\n blockPropagation() {\n return (event: MediaChange): boolean => {\n return !(this.isPrinting || this.isPrintEvent(event));\n };\n }\n\n /**\n * Save current activateBreakpoints (for later restore)\n * and substitute only the printAlias breakpoint\n */\n protected startPrinting(target: HookTarget, bpList: OptionalBreakPoint[]) {\n this.isPrinting = true;\n target.activatedBreakpoints = this.queue.addPrintBreakpoints(bpList);\n }\n\n /** For any print de-activations, reset the entire print queue */\n protected stopPrinting(target: HookTarget) {\n target.activatedBreakpoints = this.deactivations;\n this.deactivations = [];\n this.queue.clear();\n this.isPrinting = false;\n }\n\n /**\n * To restore pre-Print Activations, we must capture the proper\n * list of breakpoint activations BEFORE print starts. OnBeforePrint()\n * is not supported; so 'print' mediaQuery activations must be used.\n *\n * > But activated breakpoints are deactivated BEFORE 'print' activation.\n *\n * Let's capture all de-activations using the following logic:\n *\n * When not printing:\n * - clear cache when activating non-print breakpoint\n * - update cache (and sort) when deactivating\n *\n * When printing:\n * - sort and save when starting print\n * - restore as activatedTargets and clear when stop printing\n */\n collectActivations(event: MediaChange) {\n if (!this.isPrinting) {\n if (!event.matches) {\n const bp = this.breakpoints.findByQuery(event.mediaQuery);\n if (bp) { // Deactivating a breakpoint\n this.deactivations.push(bp);\n this.deactivations.sort(sortDescendingPriority);\n }\n } else {\n this.deactivations = [];\n }\n }\n }\n\n /** Is this service currently in Print-mode ? */\n private isPrinting = false;\n private queue: PrintQueue = new PrintQueue();\n private deactivations: BreakPoint[] = [];\n\n}\n\n// ************************************************************************\n// Internal Utility class 'PrintQueue'\n// ************************************************************************\n\n/**\n * Utility class to manage print breakpoints + activatedBreakpoints\n * with correct sorting WHILE printing\n */\nclass PrintQueue {\n /** Sorted queue with prioritized print breakpoints */\n printBreakpoints: BreakPoint[] = [];\n\n addPrintBreakpoints(bpList: OptionalBreakPoint[]): BreakPoint[] {\n bpList.push(BREAKPOINT_PRINT);\n bpList.sort(sortDescendingPriority);\n bpList.forEach(bp => this.addBreakpoint(bp));\n\n return this.printBreakpoints;\n }\n\n /** Add Print breakpoint to queue */\n addBreakpoint(bp: OptionalBreakPoint) {\n if (!!bp) {\n const bpInList = this.printBreakpoints.find(it => it.mediaQuery === bp.mediaQuery);\n if (bpInList === undefined) {\n // If this is a `printAlias` breakpoint, then append. If a true 'print' breakpoint,\n // register as highest priority in the queue\n this.printBreakpoints = isPrintBreakPoint(bp) ? [bp, ...this.printBreakpoints]\n : [...this.printBreakpoints, bp];\n }\n }\n }\n\n /** Restore original activated breakpoints and clear internal caches */\n clear() {\n this.printBreakpoints = [];\n }\n}\n\n// ************************************************************************\n// Internal Utility methods\n// ************************************************************************\n\n/** Only support intercept queueing if the Breakpoint is a print @media query */\nfunction isPrintBreakPoint(bp: OptionalBreakPoint) {\n return bp ? bp.mediaQuery.startsWith(PRINT) : false;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/** Wraps the provided value in an array, unless the provided value is an array. */\nexport function coerceArray<T>(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value];\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Injectable, OnDestroy} from '@angular/core';\nimport {Subject, asapScheduler, Observable, of} from 'rxjs';\nimport {debounceTime, filter, map, switchMap, takeUntil} from 'rxjs/operators';\n\nimport {mergeAlias} from '../add-alias';\nimport {MediaChange} from '../media-change';\nimport {MatchMedia} from '../match-media/match-media';\nimport {PrintHook} from '../media-marshaller/print-hook';\nimport {BreakPointRegistry, OptionalBreakPoint} from '../breakpoints/break-point-registry';\n\nimport {sortDescendingPriority} from '../utils/sort';\nimport {coerceArray} from '../utils/array';\n\n\n/**\n * MediaObserver enables applications to listen for 1..n mediaQuery activations and to determine\n * if a mediaQuery is currently activated.\n *\n * Since a breakpoint change will first deactivate 1...n mediaQueries and then possibly activate\n * 1..n mediaQueries, the MediaObserver will debounce notifications and report ALL *activations*\n * in 1 event notification. The reported activations will be sorted in descending priority order.\n *\n * This class uses the BreakPoint Registry to inject alias information into the raw MediaChange\n * notification. For custom mediaQuery notifications, alias information will not be injected and\n * those fields will be ''.\n *\n * Note: Developers should note that only mediaChange activations (not de-activations)\n * are announced by the MediaObserver.\n *\n * @usage\n *\n * // RxJS\n * import { filter } from 'rxjs/operators';\n * import { MediaObserver } from '@angular/flex-layout';\n *\n * @Component({ ... })\n * export class AppComponent {\n * status: string = '';\n *\n * constructor(mediaObserver: MediaObserver) {\n * const media$ = mediaObserver.asObservable().pipe(\n * filter((changes: MediaChange[]) => true) // silly noop filter\n * );\n *\n * media$.subscribe((changes: MediaChange[]) => {\n * let status = '';\n * changes.forEach( change => {\n * status += `'${change.mqAlias}' = (${change.mediaQuery}) <br/>` ;\n * });\n * this.status = status;\n * });\n *\n * }\n * }\n */\n@Injectable({providedIn: 'root'})\nexport class MediaObserver implements OnDestroy {\n\n /**\n * @deprecated Use `asObservable()` instead.\n * @breaking-change 8.0.0-beta.25\n * @deletion-target v8.0.0-beta.26\n */\n readonly media$: Observable<MediaChange>;\n\n /** Filter MediaChange notifications for overlapping breakpoints */\n filterOverlaps = false;\n\n constructor(protected breakpoints: BreakPointRegistry,\n protected matchMedia: MatchMedia,\n protected hook: PrintHook) {\n this._media$ = this.watchActivations();\n this.media$ = this._media$.pipe(\n filter((changes: MediaChange[]) => changes.length > 0),\n map((changes: MediaChange[]) => changes[0])\n );\n }\n\n /**\n * Completes the active subject, signalling to all complete for all\n * MediaObserver subscribers\n */\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n // ************************************************\n // Public Methods\n // ************************************************\n\n /**\n * Observe changes to current activation 'list'\n */\n asObservable(): Observable<MediaChange[]> {\n return this._media$;\n }\n\n /**\n * Allow programmatic query to determine if one or more media query/alias match\n * the current viewport size.\n * @param value One or more media queries (or aliases) to check.\n * @returns Whether any of the media queries match.\n */\n isActive(value: string | string[]): boolean {\n const aliases = splitQueries(coerceArray(value));\n return aliases.some(alias => {\n const query = toMediaQuery(alias, this.breakpoints);\n return this.matchMedia.isActive(query);\n });\n }\n\n // ************************************************\n // Internal Methods\n // ************************************************\n\n /**\n * Register all the mediaQueries registered in the BreakPointRegistry\n * This is needed so subscribers can be auto-notified of all standard, registered\n * mediaQuery activations\n */\n private watchActivations() {\n const queries = this.breakpoints.items.map(bp => bp.mediaQuery);\n return this.buildObservable(queries);\n }\n\n /**\n * Only pass/announce activations (not de-activations)\n *\n * Since multiple-mediaQueries can be activation in a cycle,\n * gather all current activations into a single list of changes to observers\n *\n * Inject associated (if any) alias information into the MediaChange event\n * - Exclude mediaQuery activations for overlapping mQs. List bounded mQ ranges only\n * - Exclude print activations that do not have an associated mediaQuery\n *\n * NOTE: the raw MediaChange events [from MatchMedia] do not\n * contain important alias information; as such this info\n * must be injected into the MediaChange\n */\n private buildObservable(mqList: string[]): Observable<MediaChange[]> {\n const hasChanges = (changes: MediaChange[]) => {\n const isValidQuery = (change: MediaChange) => (change.mediaQuery.length > 0);\n return (changes.filter(isValidQuery).length > 0);\n };\n const excludeOverlaps = (changes: MediaChange[]) => {\n return !this.filterOverlaps ? changes : changes.filter(change => {\n const bp = this.breakpoints.findByQuery(change.mediaQuery);\n return !bp ? true : !bp.overlapping;\n });\n };\n\n /**\n */\n return this.matchMedia\n .observe(this.hook.withPrintQuery(mqList))\n .pipe(\n filter((change: MediaChange) => change.matches),\n debounceTime(0, asapScheduler),\n switchMap(_ => of(this.findAllActivations())),\n map(excludeOverlaps),\n filter(hasChanges),\n takeUntil(this.destroyed$)\n );\n }\n\n /**\n * Find all current activations and prepare single list of activations\n * sorted by descending priority.\n */\n private findAllActivations(): MediaChange[] {\n const mergeMQAlias = (change: MediaChange) => {\n let bp: OptionalBreakPoint = this.breakpoints.findByQuery(change.mediaQuery);\n return mergeAlias(change, bp);\n };\n const replaceWithPrintAlias = (change: MediaChange) => {\n return this.hook.isPrintEvent(change) ? this.hook.updateEvent(change) : change;\n };\n\n return this.matchMedia\n .activations\n .map(query => new MediaChange(true, query))\n .map(replaceWithPrintAlias)\n .map(mergeMQAlias)\n .sort(sortDescendingPriority);\n }\n\n private readonly _media$: Observable<MediaChange[]>;\n private readonly destroyed$ = new Subject<void>();\n}\n\n/**\n * Find associated breakpoint (if any)\n */\nfunction toMediaQuery(query: string, locator: BreakPointRegistry) {\n const bp = locator.findByAlias(query) || locator.findByQuery(query);\n return bp ? bp.mediaQuery : query;\n}\n\n/**\n * Split each query string into separate query strings if two queries are provided as comma\n * separated.\n */\nfunction splitQueries(queries: string[]): string[] {\n return queries.map((query: string) => query.split(','))\n .reduce((a1: string[], a2: string[]) => a1.concat(a2))\n .map(query => query.trim());\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Applies CSS prefixes to appropriate style keys.\n *\n * Note: `-ms-`, `-moz` and `-webkit-box` are no longer supported. e.g.\n * {\n * display: -webkit-flex; NEW - Safari 6.1+. iOS 7.1+, BB10\n * display: flex; NEW, Spec - Firefox, Chrome, Opera\n * // display: -webkit-box; OLD - iOS 6-, Safari 3.1-6, BB7\n * // display: -ms-flexbox; TWEENER - IE 10\n * // display: -moz-flexbox; OLD - Firefox\n * }\n */\nexport function applyCssPrefixes(target: {[key: string]: any | null}) {\n for (let key in target) {\n let value = target[key] || '';\n\n switch (key) {\n case 'display':\n if (value === 'flex') {\n target['display'] = [\n '-webkit-flex',\n 'flex'\n ];\n } else if (value === 'inline-flex') {\n target['display'] = [\n '-webkit-inline-flex',\n 'inline-flex'\n ];\n } else {\n target['display'] = value;\n }\n break;\n\n case 'align-items':\n case 'align-self':\n case 'align-content':\n case 'flex':\n case 'flex-basis':\n case 'flex-flow':\n case 'flex-grow':\n case 'flex-shrink':\n case 'flex-wrap':\n case 'justify-content':\n target['-webkit-' + key] = value;\n break;\n\n case 'flex-direction':\n value = value || 'row';\n target['-webkit-flex-direction'] = value;\n target['flex-direction'] = value;\n break;\n\n case 'order':\n target['order'] = target['-webkit-' + key] = isNaN(+value) ? '0' : value;\n break;\n }\n }\n return target;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n /**\n * The flex API permits 3 or 1 parts of the value:\n * - `flex-grow flex-shrink flex-basis`, or\n * - `flex-basis`\n */\nexport function validateBasis(basis: string, grow = '1', shrink = '1'): string[] {\n let parts = [grow, shrink, basis];\n\n let j = basis.indexOf('calc');\n if (j > 0) {\n parts[2] = _validateCalcValue(basis.substring(j).trim());\n let matches = basis.substr(0, j).trim().split(' ');\n if (matches.length == 2) {\n parts[0] = matches[0];\n parts[1] = matches[1];\n }\n } else if (j == 0) {\n parts[2] = _validateCalcValue(basis.trim());\n } else {\n let matches = basis.split(' ');\n parts = (matches.length === 3) ? matches : [\n grow, shrink, basis\n ];\n }\n\n return parts;\n}\n\n\n/**\n * Calc expressions require whitespace before & after any expression operators\n * This is a simple, crude whitespace padding solution.\n * - '3 3 calc(15em + 20px)'\n * - calc(100% / 7 * 2)\n * - 'calc(15em + 20px)'\n * - 'calc(15em+20px)'\n * - '37px'\n * = '43%'\n */\nfunction _validateCalcValue(calc: string): string {\n return calc.replace(/[\\s]/g, '').replace(/[\\/\\*\\+\\-]/g, ' $& ');\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {NgModule} from '@angular/core';\n\nimport {BROWSER_PROVIDER} from './browser-provider';\n\n/**\n * *****************************************************************\n * Define module for the MediaQuery API\n * *****************************************************************\n */\n\n@NgModule({\n providers: [BROWSER_PROVIDER]\n})\nexport class CoreModule {\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nexport type MediaQuerySubscriber = (changes: MediaChange) => void;\n\n/**\n * Class instances emitted [to observers] for each mql notification\n */\nexport class MediaChange {\n property: string = '';\n value: any;\n\n /**\n * @param matches whether the mediaQuery is currently activated\n * @param mediaQuery e.g. (min-width: 600px) and (max-width: 959px)\n * @param mqAlias e.g. gt-sm, md, gt-lg\n * @param suffix e.g. GtSM, Md, GtLg\n * @param priority the priority of activation for the given breakpoint\n */\n constructor(public matches = false,\n public mediaQuery = 'all',\n public mqAlias = '',\n public suffix = '',\n public priority = 0) {\n }\n\n /** Create an exact copy of the MediaChange */\n clone(): MediaChange {\n return new MediaChange(this.matches, this.mediaQuery, this.mqAlias, this.suffix);\n }\n}\n\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Injectable} from '@angular/core';\n\n/**\n * Utility to emulate a CSS stylesheet\n *\n * This utility class stores all of the styles for a given HTML element\n * as a readonly `stylesheet` map.\n */\n@Injectable({providedIn: 'root'})\nexport class StylesheetMap {\n\n readonly stylesheet = new Map<HTMLElement, Map<string, string|number>>();\n\n /**\n * Add an individual style to an HTML element\n */\n addStyleToElement(element: HTMLElement, style: string, value: string|number) {\n const stylesheet = this.stylesheet.get(element);\n if (stylesheet) {\n stylesheet.set(style, value);\n } else {\n this.stylesheet.set(element, new Map([[style, value]]));\n }\n }\n\n /**\n * Clear the virtual stylesheet\n */\n clearStyles() {\n this.stylesheet.clear();\n }\n\n /**\n * Retrieve a given style for an HTML element\n */\n getStyleForElement(el: HTMLElement, styleName: string): string {\n const styles = this.stylesheet.get(el);\n let value = '';\n if (styles) {\n const style = styles.get(styleName);\n if (typeof style === 'number' || typeof style === 'string') {\n value = style + '';\n }\n }\n return value;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {InjectionToken} from '@angular/core';\n\n/** a set of configuration options for FlexLayoutModule */\nexport interface LayoutConfigOptions {\n addFlexToParent?: boolean;\n addOrientationBps?: boolean;\n disableDefaultBps?: boolean;\n disableVendorPrefixes?: boolean;\n serverLoaded?: boolean;\n useColumnBasisZero?: boolean;\n printWithBreakpoints?: string[];\n mediaTriggerAutoRestore?: boolean;\n ssrObserveBreakpoints?: string[];\n}\n\nexport const DEFAULT_CONFIG: LayoutConfigOptions = {\n addFlexToParent: true,\n addOrientationBps: false,\n disableDefaultBps: false,\n disableVendorPrefixes: false,\n serverLoaded: false,\n useColumnBasisZero: true,\n printWithBreakpoints: [],\n mediaTriggerAutoRestore: true,\n ssrObserveBreakpoints: [],\n};\n\nexport const LAYOUT_CONFIG = new InjectionToken<LayoutConfigOptions>(\n 'Flex Layout token, config options for the library', {\n providedIn: 'root',\n factory: () => DEFAULT_CONFIG\n });\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Token that is provided to tell whether the FlexLayoutServerModule\n * has been included in the bundle\n *\n * NOTE: This can be manually provided to disable styles when using SSR\n */\nexport const SERVER_TOKEN = new InjectionToken<boolean>(\n 'FlexLayoutServerLoaded', {\n providedIn: 'root',\n factory: () => false\n });\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {InjectionToken} from '@angular/core';\nimport {BreakPoint} from '../breakpoints/break-point';\n\nexport const BREAKPOINT = new InjectionToken<BreakPoint|BreakPoint[]|null>(\n 'Flex Layout token, collect all breakpoints into one provider', {\n providedIn: 'root',\n factory: () => null\n });\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {ElementRef, OnChanges, OnDestroy, SimpleChanges} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\nimport {StyleDefinition, StyleUtils} from '../style-utils/style-utils';\nimport {StyleBuilder} from '../style-builder/style-builder';\nimport {MediaMarshaller} from '../media-marshaller/media-marshaller';\nimport {buildLayoutCSS} from '../../utils/layout-validator';\n\nexport abstract class BaseDirective2 implements OnChanges, OnDestroy {\n\n protected DIRECTIVE_KEY = '';\n protected inputs: string[] = [];\n /** The most recently used styles for the builder */\n protected mru: StyleDefinition = {};\n protected destroySubject: Subject<void> = new Subject();\n\n /** Access to host element's parent DOM node */\n protected get parentElement(): HTMLElement | null {\n return this.elementRef.nativeElement.parentElement;\n }\n\n /** Access to the HTMLElement for the directive */\n protected get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n /** Access to the activated value for the directive */\n get activatedValue(): string {\n return this.marshal.getValue(this.nativeElement, this.DIRECTIVE_KEY);\n }\n set activatedValue(value: string) {\n this.marshal.setValue(this.nativeElement, this.DIRECTIVE_KEY, value,\n this.marshal.activatedAlias);\n }\n\n /** Cache map for style computation */\n protected styleCache: Map<string, StyleDefinition> = new Map();\n\n protected constructor(protected elementRef: ElementRef,\n protected styleBuilder: StyleBuilder,\n protected styler: StyleUtils,\n protected marshal: MediaMarshaller) {\n }\n\n /** For @Input changes */\n ngOnChanges(changes: SimpleChanges) {\n Object.keys(changes).forEach(key => {\n if (this.inputs.indexOf(key) !== -1) {\n const bp = key.split('.').slice(1).join('.');\n const val = changes[key].currentValue;\n this.setValue(val, bp);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroySubject.next();\n this.destroySubject.complete();\n this.marshal.releaseElement(this.nativeElement);\n }\n\n /** Register with central marshaller service */\n protected init(extraTriggers: Observable<any>[] = []): void {\n this.marshal.init(\n this.elementRef.nativeElement,\n this.DIRECTIVE_KEY,\n this.updateWithValue.bind(this),\n this.clearStyles.bind(this),\n extraTriggers\n );\n }\n\n /** Add styles to the element using predefined style builder */\n protected addStyles(input: string, parent?: Object) {\n const builder = this.styleBuilder;\n const useCache = builder.shouldCache;\n\n let genStyles: StyleDefinition | undefined = this.styleCache.get(input);\n\n if (!genStyles || !useCache) {\n genStyles = builder.buildStyles(input, parent);\n if (useCache) {\n this.styleCache.set(input, genStyles);\n }\n }\n\n this.mru = {...genStyles};\n this.applyStyleToElement(genStyles);\n builder.sideEffect(input, genStyles, parent);\n }\n\n /** Remove generated styles from an element using predefined style builder */\n protected clearStyles() {\n Object.keys(this.mru).forEach(k => {\n this.mru[k] = '';\n });\n this.applyStyleToElement(this.mru);\n this.mru = {};\n }\n\n /** Force trigger style updates on DOM element */\n protected triggerUpdate() {\n this.marshal.triggerUpdate(this.nativeElement, this.DIRECTIVE_KEY);\n }\n\n /**\n * Determine the DOM element's Flexbox flow (flex-direction).\n *\n * Check inline style first then check computed (stylesheet) style.\n * And optionally add the flow value to element's inline style.\n */\n protected getFlexFlowDirection(target: HTMLElement, addIfMissing = false): string {\n if (target) {\n const [value, hasInlineValue] = this.styler.getFlowDirection(target);\n\n if (!hasInlineValue && addIfMissing) {\n const style = buildLayoutCSS(value);\n const elements = [target];\n this.styler.applyStyleToElements(style, elements);\n }\n\n return value.trim();\n }\n\n return 'row';\n }\n\n /** Applies styles given via string pair or object map to the directive element */\n protected applyStyleToElement(style: StyleDefinition,\n value?: string | number,\n element: HTMLElement = this.nativeElement) {\n this.styler.applyStyleToElement(element, style, value);\n }\n\n protected setValue(val: any, bp: string): void {\n this.marshal.setValue(this.nativeElement, this.DIRECTIVE_KEY, val, bp);\n }\n\n protected updateWithValue(input: string) {\n this.addStyles(input);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {BreakPoint} from '../break-point';\n\n/**\n * NOTE: Smaller ranges have HIGHER priority since the match is more specific\n */\nexport const DEFAULT_BREAKPOINTS: BreakPoint[] = [\n {\n alias: 'xs',\n mediaQuery: 'screen and (min-width: 0px) and (max-width: 599.99px)',\n priority: 1000,\n },\n {\n alias: 'sm',\n mediaQuery: 'screen and (min-width: 600px) and (max-width: 959.99px)',\n priority: 900,\n },\n {\n alias: 'md',\n mediaQuery: 'screen and (min-width: 960px) and (max-width: 1279.99px)',\n priority: 800,\n },\n {\n alias: 'lg',\n mediaQuery: 'screen and (min-width: 1280px) and (max-width: 1919.99px)',\n priority: 700,\n },\n {\n alias: 'xl',\n mediaQuery: 'screen and (min-width: 1920px) and (max-width: 4999.99px)',\n priority: 600,\n },\n {\n alias: 'lt-sm',\n overlapping: true,\n mediaQuery: 'screen and (max-width: 599.99px)',\n priority: 950,\n },\n {\n alias: 'lt-md',\n overlapping: true,\n mediaQuery: 'screen and (max-width: 959.99px)',\n priority: 850,\n },\n {\n alias: 'lt-lg',\n overlapping: true,\n mediaQuery: 'screen and (max-width: 1279.99px)',\n priority: 750,\n },\n {\n alias: 'lt-xl',\n overlapping: true,\n priority: 650,\n mediaQuery: 'screen and (max-width: 1919.99px)',\n },\n {\n alias: 'gt-xs',\n overlapping: true,\n mediaQuery: 'screen and (min-width: 600px)',\n priority: -950,\n },\n {\n alias: 'gt-sm',\n overlapping: true,\n mediaQuery: 'screen and (min-width: 960px)',\n priority: -850,\n }, {\n alias: 'gt-md',\n overlapping: true,\n mediaQuery: 'screen and (min-width: 1280px)',\n priority: -750,\n },\n {\n alias: 'gt-lg',\n overlapping: true,\n mediaQuery: 'screen and (min-width: 1920px)',\n priority: -650,\n }\n];\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BreakPoint} from '../break-point';\n\n/* tslint:disable */\nconst HANDSET_PORTRAIT = '(orientation: portrait) and (max-width: 599.99px)';\nconst HANDSET_LANDSCAPE = '(orientation: landscape) and (max-width: 959.99px)';\n\nconst TABLET_PORTRAIT = '(orientation: portrait) and (min-width: 600px) and (max-width: 839.99px)';\nconst TABLET_LANDSCAPE = '(orientation: landscape) and (min-width: 960px) and (max-width: 1279.99px)';\n\nconst WEB_PORTRAIT = '(orientation: portrait) and (min-width: 840px)';\nconst WEB_LANDSCAPE = '(orientation: landscape) and (min-width: 1280px)';\n\nexport const ScreenTypes = {\n 'HANDSET' : `${HANDSET_PORTRAIT}, ${HANDSET_LANDSCAPE}`,\n 'TABLET' : `${TABLET_PORTRAIT} , ${TABLET_LANDSCAPE}`,\n 'WEB' : `${WEB_PORTRAIT}, ${WEB_LANDSCAPE} `,\n\n 'HANDSET_PORTRAIT' : `${HANDSET_PORTRAIT}`,\n 'TABLET_PORTRAIT' : `${TABLET_PORTRAIT} `,\n 'WEB_PORTRAIT' : `${WEB_PORTRAIT}`,\n\n 'HANDSET_LANDSCAPE' : `${HANDSET_LANDSCAPE}]`,\n 'TABLET_LANDSCAPE' : `${TABLET_LANDSCAPE}`,\n 'WEB_LANDSCAPE' : `${WEB_LANDSCAPE}`\n};\n\n/**\n * Extended Breakpoints for handset/tablets with landscape or portrait orientations\n */\nexport const ORIENTATION_BREAKPOINTS : BreakPoint[] = [\n {'alias': 'handset', priority: 2000, 'mediaQuery': ScreenTypes.HANDSET},\n {'alias': 'handset.landscape', priority: 2000, 'mediaQuery': ScreenTypes.HANDSET_LANDSCAPE},\n {'alias': 'handset.portrait', priority: 2000, 'mediaQuery': ScreenTypes.HANDSET_PORTRAIT},\n\n {'alias': 'tablet', priority: 2100, 'mediaQuery': ScreenTypes.TABLET},\n {'alias': 'tablet.landscape', priority: 2100, 'mediaQuery': ScreenTypes.TABLET},\n {'alias': 'tablet.portrait', priority: 2100, 'mediaQuery': ScreenTypes.TABLET_PORTRAIT},\n\n {'alias': 'web', priority: 2200, 'mediaQuery': ScreenTypes.WEB, overlapping : true },\n {'alias': 'web.landscape', priority: 2200, 'mediaQuery': ScreenTypes.WEB_LANDSCAPE, overlapping : true },\n {'alias': 'web.portrait', priority: 2200, 'mediaQuery': ScreenTypes.WEB_PORTRAIT, overlapping : true }\n];\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {inject, InjectionToken} from '@angular/core';\nimport {BreakPoint} from './break-point';\nimport {BREAKPOINT} from '../tokens/breakpoint-token';\nimport {DEFAULT_BREAKPOINTS} from '../breakpoints/data/break-points';\nimport {ORIENTATION_BREAKPOINTS} from '../breakpoints/data/orientation-break-points';\nimport {mergeByAlias} from '../breakpoints/breakpoint-tools';\nimport {LAYOUT_CONFIG} from '../tokens/library-config';\n\n/**\n * Injection token unique to the flex-layout library.\n * Use this token when build a custom provider (see below).\n */\nexport const BREAKPOINTS =\n new InjectionToken<BreakPoint[]>('Token (@angular/flex-layout) Breakpoints', {\n providedIn: 'root',\n factory: () => {\n const breakpoints: any = inject(BREAKPOINT);\n const layoutConfig = inject(LAYOUT_CONFIG);\n const bpFlattenArray: BreakPoint[] = [].concat.apply([], (breakpoints || [])\n .map((v: BreakPoint | BreakPoint[]) => Array.isArray(v) ? v : [v]));\n const builtIns = (layoutConfig.disableDefaultBps ? [] : DEFAULT_BREAKPOINTS)\n .concat(layoutConfig.addOrientationBps ? ORIENTATION_BREAKPOINTS : []);\n\n return mergeByAlias(builtIns, bpFlattenArray);\n }\n });\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Injectable, Inject} from '@angular/core';\n\nimport {BreakPoint} from './break-point';\nimport {BREAKPOINTS} from './break-points-token';\nimport {sortAscendingPriority} from '../utils/sort';\n\nexport type OptionalBreakPoint = BreakPoint | null;\n\n/**\n * Registry of 1..n MediaQuery breakpoint ranges\n * This is published as a provider and may be overridden from custom, application-specific ranges\n *\n */\n@Injectable({providedIn: 'root'})\nexport class BreakPointRegistry {\n readonly items: BreakPoint[];\n\n constructor(@Inject(BREAKPOINTS) list: BreakPoint[]) {\n this.items = [...list].sort(sortAscendingPriority);\n }\n\n /**\n * Search breakpoints by alias (e.g. gt-xs)\n */\n findByAlias(alias: string): OptionalBreakPoint {\n return !alias ? null : this.findWithPredicate(alias, (bp) => bp.alias == alias);\n }\n\n findByQuery(query: string): OptionalBreakPoint {\n return this.findWithPredicate(query, (bp) => bp.mediaQuery == query);\n }\n\n /**\n * Get all the breakpoints whose ranges could overlapping `normal` ranges;\n * e.g. gt-sm overlaps md, lg, and xl\n */\n get overlappings(): BreakPoint[] {\n return this.items.filter(it => it.overlapping == true);\n }\n\n /**\n * Get list of all registered (non-empty) breakpoint aliases\n */\n get aliases(): string[] {\n return this.items.map(it => it.alias);\n }\n\n /**\n * Aliases are mapped to properties using suffixes\n * e.g. 'gt-sm' for property 'layout' uses suffix 'GtSm'\n * for property layoutGtSM.\n */\n get suffixes(): string[] {\n return this.items.map(it => !!it.suffix ? it.suffix : '');\n }\n\n /**\n * Memoized lookup using custom predicate function\n */\n private findWithPredicate(key: string,\n searchFn: (bp: BreakPoint) => boolean): OptionalBreakPoint {\n let response = this.findByMap.get(key);\n if (!response) {\n response = this.items.find(searchFn) || null;\n this.findByMap.set(key, response);\n }\n return response || null;\n\n }\n\n /**\n * Memoized BreakPoint Lookups\n */\n private readonly findByMap = new Map<String, OptionalBreakPoint>();\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Inject, Injectable, NgZone, PLATFORM_ID} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nimport {MatchMedia} from '../match-media';\nimport {BreakPointRegistry} from '../../breakpoints/break-point-registry';\n\n/**\n * MockMatchMedia mocks calls to the Window API matchMedia with a build of a simulated\n * MockMediaQueryListener. Methods are available to simulate an activation of a mediaQuery\n * range and to clearAll mediaQuery listeners.\n */\n@Injectable()\nexport class MockMatchMedia extends MatchMedia {\n\n\n autoRegisterQueries = true; // Used for testing BreakPoint registrations\n useOverlaps = false; // Allow fallback to overlapping mediaQueries\n\n constructor(_zone: NgZone,\n @Inject(PLATFORM_ID) _platformId: Object,\n @Inject(DOCUMENT) _document: any,\n private _breakpoints: BreakPointRegistry) {\n super(_zone, _platformId, _document);\n }\n\n /** Easy method to clear all listeners for all mediaQueries */\n clearAll() {\n this.registry.forEach((mql: MediaQueryList) => {\n (mql as MockMediaQueryList).destroy();\n });\n this.registry.clear();\n this.useOverlaps = false;\n }\n\n /** Feature to support manual, simulated activation of a mediaQuery. */\n activate(mediaQuery: string, useOverlaps = false): boolean {\n useOverlaps = useOverlaps || this.useOverlaps;\n mediaQuery = this._validateQuery(mediaQuery);\n\n if (useOverlaps || !this.isActive(mediaQuery)) {\n this._deactivateAll();\n\n this._registerMediaQuery(mediaQuery);\n this._activateWithOverlaps(mediaQuery, useOverlaps);\n }\n\n return this.hasActivated;\n }\n\n /** Converts an optional mediaQuery alias to a specific, valid mediaQuery */\n _validateQuery(queryOrAlias: string) {\n const bp = this._breakpoints.findByAlias(queryOrAlias);\n return (bp && bp.mediaQuery) || queryOrAlias;\n }\n\n /**\n * Manually onMediaChange any overlapping mediaQueries to simulate\n * similar functionality in the window.matchMedia()\n */\n private _activateWithOverlaps(mediaQuery: string, useOverlaps: boolean): boolean {\n if (useOverlaps) {\n const bp = this._breakpoints.findByQuery(mediaQuery);\n const alias = bp ? bp.alias : 'unknown';\n\n // Simulate activation of overlapping lt-<XXX> ranges\n switch (alias) {\n case 'lg' :\n this._activateByAlias('lt-xl');\n break;\n case 'md' :\n this._activateByAlias('lt-xl, lt-lg');\n break;\n case 'sm' :\n this._activateByAlias('lt-xl, lt-lg, lt-md');\n break;\n case 'xs' :\n this._activateByAlias('lt-xl, lt-lg, lt-md, lt-sm');\n break;\n }\n\n // Simulate activation of overlapping gt-<xxxx> mediaQuery ranges\n switch (alias) {\n case 'xl' :\n this._activateByAlias('gt-lg, gt-md, gt-sm, gt-xs');\n break;\n case 'lg' :\n this._activateByAlias('gt-md, gt-sm, gt-xs');\n break;\n case 'md' :\n this._activateByAlias('gt-sm, gt-xs');\n break;\n case 'sm' :\n this._activateByAlias('gt-xs');\n break;\n }\n }\n // Activate last since the responsiveActivation is watching *this* mediaQuery\n return this._activateByQuery(mediaQuery);\n }\n\n /**\n *\n */\n private _activateByAlias(aliases: string) {\n const activate = (alias: string) => {\n const bp = this._breakpoints.findByAlias(alias);\n this._activateByQuery(bp ? bp.mediaQuery : alias);\n };\n aliases.split(',').forEach(alias => activate(alias.trim()));\n }\n\n /**\n *\n */\n private _activateByQuery(mediaQuery: string) {\n const mql: MockMediaQueryList = this.registry.get(mediaQuery) as MockMediaQueryList;\n\n if (mql && !this.isActive(mediaQuery)) {\n this.registry.set(mediaQuery, mql.activate());\n }\n return this.hasActivated;\n }\n\n /** Deactivate all current MQLs and reset the buffer */\n private _deactivateAll() {\n this.registry.forEach((it: MediaQueryList) => {\n (it as MockMediaQueryList).deactivate();\n });\n return this;\n }\n\n /** Insure the mediaQuery is registered with MatchMedia */\n private _registerMediaQuery(mediaQuery: string) {\n if (!this.registry.has(mediaQuery) && this.autoRegisterQueries) {\n this.registerQuery(mediaQuery);\n }\n }\n\n /**\n * Call window.matchMedia() to build a MediaQueryList; which\n * supports 0..n listeners for activation/deactivation\n */\n protected buildMQL(query: string): MediaQueryList {\n return new MockMediaQueryList(query);\n }\n\n protected get hasActivated() {\n return this.activations.length > 0;\n }\n\n}\n\n/**\n * Special internal class to simulate a MediaQueryList and\n * - supports manual activation to simulate mediaQuery matching\n * - manages listeners\n */\nexport class MockMediaQueryList implements MediaQueryList {\n private _isActive = false;\n private _listeners: MediaQueryListListener[] = [];\n\n get matches(): boolean {\n return this._isActive;\n }\n\n get media(): string {\n return this._mediaQuery;\n }\n\n constructor(private _mediaQuery: string) {\n }\n\n /**\n * Destroy the current list by deactivating the\n * listeners and clearing the internal list\n */\n destroy() {\n this.deactivate();\n this._listeners = [];\n }\n\n /** Notify all listeners that 'matches === TRUE' */\n activate(): MockMediaQueryList {\n if (!this._isActive) {\n this._isActive = true;\n this._listeners.forEach((callback) => {\n const cb: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) = callback!;\n cb.call(null, this);\n });\n }\n return this;\n }\n\n /** Notify all listeners that 'matches === false' */\n deactivate(): MockMediaQueryList {\n if (this._isActive) {\n this._isActive = false;\n this._listeners.forEach((callback) => {\n const cb: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) = callback!;\n cb.call(null, this);\n });\n }\n return this;\n }\n\n /** Add a listener to our internal list to activate later */\n addListener(listener: MediaQueryListListener) {\n if (this._listeners.indexOf(listener) === -1) {\n this._listeners.push(listener);\n }\n if (this._isActive) {\n const cb: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) = listener!;\n cb.call(null, this);\n }\n }\n\n /** Don't need to remove listeners in the testing environment */\n removeListener(_: MediaQueryListListener | null) {\n }\n\n addEventListener<K extends keyof MediaQueryListEventMap>(\n _: K,\n __: (this: MediaQueryList,\n ev: MediaQueryListEventMap[K]) => any,\n ___?: boolean | AddEventListenerOptions): void;\n\n addEventListener(\n _: string,\n __: EventListenerOrEventListenerObject,\n ___?: boolean | AddEventListenerOptions) {\n }\n\n removeEventListener<K extends keyof MediaQueryListEventMap>(\n _: K,\n __: (this: MediaQueryList,\n ev: MediaQueryListEventMap[K]) => any,\n ___?: boolean | EventListenerOptions): void;\n\n removeEventListener(\n _: string,\n __: EventListenerOrEventListenerObject,\n ___?: boolean | EventListenerOptions) {\n }\n\n dispatchEvent(_: Event): boolean {\n return false;\n }\n\n onchange: MediaQueryListListener = null;\n}\n\n/**\n * Pre-configured provider for MockMatchMedia\n */\nexport const MockMatchMediaProvider = { // tslint:disable-line:variable-name\n provide: MatchMedia,\n useClass: MockMatchMedia\n};\n\ntype MediaQueryListListener = ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null;\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {DOCUMENT, isPlatformBrowser} from '@angular/common';\n\nimport {fromEvent, Subscription} from 'rxjs';\nimport {take} from 'rxjs/operators';\n\nimport {mergeAlias} from '../add-alias';\nimport {MediaChange} from '../media-change';\nimport {MatchMedia} from '../match-media/match-media';\nimport {BreakPointRegistry, OptionalBreakPoint} from '../breakpoints/break-point-registry';\nimport {sortDescendingPriority} from '../utils/sort';\nimport {LAYOUT_CONFIG, LayoutConfigOptions} from '../tokens/library-config';\n\n/**\n * Class\n */\n@Injectable({providedIn: 'root'})\nexport class MediaTrigger {\n\n constructor(\n protected breakpoints: BreakPointRegistry,\n protected matchMedia: MatchMedia,\n @Inject(LAYOUT_CONFIG) protected layoutConfig: LayoutConfigOptions,\n @Inject(PLATFORM_ID) protected _platformId: Object,\n @Inject(DOCUMENT) protected _document: any) {\n }\n\n /**\n * Manually activate range of breakpoints\n * @param list array of mediaQuery or alias strings\n */\n activate(list: string[]) {\n list = list.map(it => it.trim()); // trim queries\n\n this.saveActivations();\n this.deactivateAll();\n this.setActivations(list);\n\n this.prepareAutoRestore();\n }\n\n /**\n * Restore original, 'real' breakpoints and emit events\n * to trigger stream notification\n */\n restore() {\n if (this.hasCachedRegistryMatches) {\n const extractQuery = (change: MediaChange) => change.mediaQuery;\n const list = this.originalActivations.map(extractQuery);\n try {\n\n this.deactivateAll();\n this.restoreRegistryMatches();\n this.setActivations(list);\n\n } finally {\n this.originalActivations = [];\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n }\n }\n\n // ************************************************\n // Internal Methods\n // ************************************************\n\n /**\n * Whenever window resizes, immediately auto-restore original\n * activations (if we are simulating activations)\n */\n private prepareAutoRestore() {\n const isBrowser = isPlatformBrowser(this._platformId) && this._document;\n const enableAutoRestore = isBrowser && this.layoutConfig.mediaTriggerAutoRestore;\n\n if (enableAutoRestore) {\n const resize$ = fromEvent(window, 'resize').pipe(take(1));\n this.resizeSubscription = resize$.subscribe(this.restore.bind(this));\n }\n }\n\n /**\n * Notify all matchMedia subscribers of de-activations\n *\n * Note: we must force 'matches' updates for\n * future matchMedia::activation lookups\n */\n private deactivateAll() {\n const list = this.currentActivations;\n\n this.forceRegistryMatches(list, false);\n this.simulateMediaChanges(list, false);\n }\n\n /**\n * Cache current activations as sorted, prioritized list of MediaChanges\n */\n private saveActivations() {\n if (!this.hasCachedRegistryMatches) {\n const toMediaChange = (query: string) => new MediaChange(true, query);\n const mergeMQAlias = (change: MediaChange) => {\n const bp: OptionalBreakPoint = this.breakpoints.findByQuery(change.mediaQuery);\n return mergeAlias(change, bp);\n };\n\n this.originalActivations = this.currentActivations\n .map(toMediaChange)\n .map(mergeMQAlias)\n .sort(sortDescendingPriority);\n\n this.cacheRegistryMatches();\n }\n }\n\n /**\n * Force set manual activations for specified mediaQuery list\n */\n private setActivations(list: string[]) {\n if (!!this.originalRegistry) {\n this.forceRegistryMatches(list, true);\n }\n this.simulateMediaChanges(list);\n }\n\n /**\n * For specified mediaQuery list manually simulate activations or deactivations\n */\n private simulateMediaChanges(queries: string[], matches = true) {\n const toMediaQuery = (query: string) => {\n const locator = this.breakpoints;\n const bp = locator.findByAlias(query) || locator.findByQuery(query);\n return bp ? bp.mediaQuery : query;\n };\n const emitChangeEvent = (query: string) => this.emitChangeEvent(matches, query);\n\n queries.map(toMediaQuery).forEach(emitChangeEvent);\n }\n\n /**\n * Replace current registry with simulated registry...\n * Note: this is required since MediaQueryList::matches is 'readOnly'\n */\n private forceRegistryMatches(queries: string[], matches: boolean) {\n const registry = new Map<string, MediaQueryList>();\n queries.forEach(query => {\n registry.set(query, {matches: matches} as MediaQueryList);\n });\n\n this.matchMedia.registry = registry;\n }\n\n /**\n * Save current MatchMedia::registry items.\n */\n private cacheRegistryMatches() {\n const target = this.originalRegistry;\n\n target.clear();\n this.matchMedia.registry.forEach((value: MediaQueryList, key: string) => {\n target.set(key, value);\n });\n this.hasCachedRegistryMatches = true;\n }\n\n /**\n * Restore original, 'true' registry\n */\n private restoreRegistryMatches() {\n const target = this.matchMedia.registry;\n\n target.clear();\n this.originalRegistry.forEach((value: MediaQueryList, key: string) => {\n target.set(key, value);\n });\n\n this.originalRegistry.clear();\n this.hasCachedRegistryMatches = false;\n }\n\n /**\n * Manually emit a MediaChange event via the MatchMedia to MediaMarshaller and MediaObserver\n */\n private emitChangeEvent(matches: boolean, query: string) {\n this.matchMedia.source.next(new MediaChange(matches, query));\n }\n\n private get currentActivations() {\n return this.matchMedia.activations;\n }\n\n private hasCachedRegistryMatches = false;\n private originalActivations: MediaChange[] = [];\n private originalRegistry: Map<string, MediaQueryList> = new Map<string, MediaQueryList>();\n\n private resizeSubscription!: Subscription;\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Inject, Injectable, Optional, PLATFORM_ID} from '@angular/core';\nimport {isPlatformBrowser, isPlatformServer} from '@angular/common';\n\nimport {applyCssPrefixes} from '../../utils/auto-prefixer';\nimport {StylesheetMap} from '../stylesheet-map/stylesheet-map';\nimport {SERVER_TOKEN} from '../tokens/server-token';\nimport {LAYOUT_CONFIG, LayoutConfigOptions} from '../tokens/library-config';\n\n@Injectable({providedIn: 'root'})\nexport class StyleUtils {\n\n constructor(@Optional() private _serverStylesheet: StylesheetMap,\n @Optional() @Inject(SERVER_TOKEN) private _serverModuleLoaded: boolean,\n @Inject(PLATFORM_ID) private _platformId: Object,\n @Inject(LAYOUT_CONFIG) private layoutConfig: LayoutConfigOptions) {}\n\n /**\n * Applies styles given via string pair or object map to the directive element\n */\n applyStyleToElement(element: HTMLElement,\n style: StyleDefinition | string,\n value: string | number | null = null) {\n let styles: StyleDefinition = {};\n if (typeof style === 'string') {\n styles[style] = value;\n style = styles;\n }\n styles = this.layoutConfig.disableVendorPrefixes ? style : applyCssPrefixes(style);\n this._applyMultiValueStyleToElement(styles, element);\n }\n\n /**\n * Applies styles given via string pair or object map to the directive's element\n */\n applyStyleToElements(style: StyleDefinition, elements: HTMLElement[] = []) {\n const styles = this.layoutConfig.disableVendorPrefixes ? style : applyCssPrefixes(style);\n elements.forEach(el => {\n this._applyMultiValueStyleToElement(styles, el);\n });\n }\n\n /**\n * Determine the DOM element's Flexbox flow (flex-direction)\n *\n * Check inline style first then check computed (stylesheet) style\n */\n getFlowDirection(target: HTMLElement): [string, string] {\n const query = 'flex-direction';\n let value = this.lookupStyle(target, query);\n const hasInlineValue = this.lookupInlineStyle(target, query) ||\n (isPlatformServer(this._platformId) && this._serverModuleLoaded) ? value : '';\n\n return [value || 'row', hasInlineValue];\n }\n\n /**\n * Find the DOM element's raw attribute value (if any)\n */\n lookupAttributeValue(element: HTMLElement, attribute: string): string {\n return element.getAttribute(attribute) || '';\n }\n\n /**\n * Find the DOM element's inline style value (if any)\n */\n lookupInlineStyle(element: HTMLElement, styleName: string): string {\n return isPlatformBrowser(this._platformId) ?\n element.style.getPropertyValue(styleName) : this._getServerStyle(element, styleName);\n }\n\n /**\n * Determine the inline or inherited CSS style\n * NOTE: platform-server has no implementation for getComputedStyle\n */\n lookupStyle(element: HTMLElement, styleName: string, inlineOnly = false): string {\n let value = '';\n if (element) {\n let immediateValue = value = this.lookupInlineStyle(element, styleName);\n if (!immediateValue) {\n if (isPlatformBrowser(this._platformId)) {\n if (!inlineOnly) {\n value = getComputedStyle(element).getPropertyValue(styleName);\n }\n } else {\n if (this._serverModuleLoaded) {\n value = this._serverStylesheet.getStyleForElement(element, styleName);\n }\n }\n }\n }\n\n // Note: 'inline' is the default of all elements, unless UA stylesheet overrides;\n // in which case getComputedStyle() should determine a valid value.\n return value ? value.trim() : '';\n }\n\n /**\n * Applies the styles to the element. The styles object map may contain an array of values\n * Each value will be added as element style\n * Keys are sorted to add prefixed styles (like -webkit-x) first, before the standard ones\n */\n private _applyMultiValueStyleToElement(styles: StyleDefinition,\n element: HTMLElement) {\n Object.keys(styles).sort().forEach(key => {\n const el = styles[key];\n const values: (string | number | null)[] = Array.isArray(el) ? el : [el];\n values.sort();\n for (let value of values) {\n value = value ? value + '' : '';\n if (isPlatformBrowser(this._platformId) || !this._serverModuleLoaded) {\n isPlatformBrowser(this._platformId) ?\n element.style.setProperty(key, value) : this._setServerStyle(element, key, value);\n } else {\n this._serverStylesheet.addStyleToElement(element, key, value);\n }\n }\n });\n }\n\n private _setServerStyle(element: any, styleName: string, styleValue?: string|null) {\n styleName = styleName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n const styleMap = this._readStyleAttribute(element);\n styleMap[styleName] = styleValue || '';\n this._writeStyleAttribute(element, styleMap);\n }\n\n private _getServerStyle(element: any, styleName: string): string {\n const styleMap = this._readStyleAttribute(element);\n return styleMap[styleName] || '';\n }\n\n private _readStyleAttribute(element: any): {[name: string]: string} {\n const styleMap: {[name: string]: string} = {};\n const styleAttribute = element.getAttribute('style');\n if (styleAttribute) {\n const styleList = styleAttribute.split(/;+/g);\n for (let i = 0; i < styleList.length; i++) {\n const style = styleList[i].trim();\n if (style.length > 0) {\n const colonIndex = style.indexOf(':');\n if (colonIndex === -1) {\n throw new Error(`Invalid CSS style: ${style}`);\n }\n const name = style.substr(0, colonIndex).trim();\n styleMap[name] = style.substr(colonIndex + 1).trim();\n }\n }\n }\n return styleMap;\n }\n\n private _writeStyleAttribute(element: any, styleMap: {[name: string]: string}) {\n let styleAttrValue = '';\n for (const key in styleMap) {\n const newValue = styleMap[key];\n if (newValue) {\n styleAttrValue += key + ':' + styleMap[key] + ';';\n }\n }\n element.setAttribute('style', styleAttrValue);\n }\n}\n\n/**\n * Definition of a css style. Either a property name (e.g. \"flex-basis\") or an object\n * map of property name and value (e.g. {display: 'none', flex-order: 5})\n */\nexport type StyleDefinition = { [property: string]: string | number | null };\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {StyleDefinition} from '../style-utils/style-utils';\n\n/** A class that encapsulates CSS style generation for common directives */\nexport abstract class StyleBuilder {\n\n /** Whether to cache the generated output styles */\n shouldCache = true;\n\n /** Build the styles given an input string and configuration object from a host */\n abstract buildStyles(input: string, parent?: Object): StyleDefinition;\n\n /**\n * Run a side effect computation given the input string and the computed styles\n * from the build task and the host configuration object\n * NOTE: This should be a no-op unless an algorithm is provided in a subclass\n */\n sideEffect(_input: string, _styles: StyleDefinition, _parent?: Object) {\n }\n}\n"],"names":["MediaMarshaller","__extends","d","b","__","this","constructor","extendStatics","prototype","Object","create","removeStyles","_document","platformId","isPlatformBrowser","classRegex_1","Array","from","querySelectorAll","CLASS_NAME","forEach","el","classList","contains","parentNode","removeChild","className","replace","mergeAlias","dest","source","clone","MediaChange","mqAlias","alias","mediaQuery","suffix","priority","buildLayoutCSS","value","_a","validateValue","buildCSS","toLowerCase","split","direction","wrap","inline","LAYOUT_VALUES","find","x","INLINE","validateWrapValue","display","box-sizing","flex-direction","flex-wrap","extendObject","sources","_i","arguments","length","TypeError","sources_1","key","hasOwnProperty","firstUpperCase","part","first","charAt","remainder","slice","toUpperCase","camelCase","name","ALIAS_DELIMITERS","map","join","validateSuffixes","list","bp","overlapping","mergeByAlias","defaults","custom","dict","keys","k","sortDescendingPriority","a","priorityA","sortAscendingPriority","buildQueryCss","mediaQueries","filter","it","ALL_STYLES","query","styleEl_1","createElement","setAttribute","styleSheet","cssText","appendChild","createTextNode","mq","e","console","error","constructMql","isBrowser","matchMedia","addListener","matches","media","removeListener","isPrintBreakPoint","startsWith","PRINT","coerceArray","isArray","toMediaQuery","locator","findByAlias","findByQuery","splitQueries","queries","reduce","a1","a2","concat","trim","applyCssPrefixes","target","isNaN","validateBasis","basis","grow","shrink","parts","j","indexOf","_validateCalcValue","substring","substr","calc","initBuilderMap","element","input","undefined","oldMap","get","Map","set","setPrototypeOf","__proto__","p","__assign","assign","t","s","i","n","call","apply","BROWSER_PROVIDER","provide","APP_BOOTSTRAP_LISTENER","useFactory","deps","DOCUMENT","PLATFORM_ID","multi","CoreModule","type","NgModule","args","providers","property","StylesheetMap","stylesheet","addStyleToElement","style","clearStyles","clear","getStyleForElement","styleName","styles","Injectable","providedIn","DEFAULT_CONFIG","addFlexToParent","addOrientationBps","disableDefaultBps","disableVendorPrefixes","serverLoaded","useColumnBasisZero","printWithBreakpoints","mediaTriggerAutoRestore","ssrObserveBreakpoints","LAYOUT_CONFIG","InjectionToken","factory","SERVER_TOKEN","BREAKPOINT","BaseDirective2","elementRef","styleBuilder","styler","marshal","DIRECTIVE_KEY","inputs","mru","destroySubject","Subject","styleCache","defineProperty","nativeElement","parentElement","getValue","setValue","activatedAlias","ngOnChanges","changes","_this","val","currentValue","ngOnDestroy","next","complete","releaseElement","init","extraTriggers","updateWithValue","bind","addStyles","parent","builder","useCache","shouldCache","genStyles","buildStyles","tslib_1.__assign","applyStyleToElement","sideEffect","triggerUpdate","getFlexFlowDirection","addIfMissing","getFlowDirection","elements","applyStyleToElements","DEFAULT_BREAKPOINTS","HANDSET_PORTRAIT","TABLET_PORTRAIT","TABLET_LANDSCAPE","WEB_PORTRAIT","WEB_LANDSCAPE","ScreenTypes","HANDSET","TABLET","WEB","HANDSET_LANDSCAPE","ORIENTATION_BREAKPOINTS","BREAKPOINTS","breakpoints","inject","layoutConfig","bpFlattenArray","v","BreakPointRegistry","findByMap","items","sort","findWithPredicate","searchFn","response","decorators","Inject","MatchMedia","_zone","_platformId","BehaviorSubject","registry","_observable$","asObservable","results","mql","push","isActive","observe","mqList","filterOthers","matchMedia$","pipe","change","registration$","Observable","observer","registerQuery","lastChange","pop","merge","onMQLEvent","run","buildMQL","NgZone","MockMatchMedia","_super","_breakpoints","autoRegisterQueries","useOverlaps","tslib_1.__extends","clearAll","destroy","activate","_validateQuery","_deactivateAll","_registerMediaQuery","_activateWithOverlaps","hasActivated","queryOrAlias","_activateByAlias","_activateByQuery","aliases","deactivate","has","MockMediaQueryList","activations","_mediaQuery","_isActive","_listeners","onchange","callback","listener","_","addEventListener","___","removeEventListener","dispatchEvent","MockMatchMediaProvider","useClass","BREAKPOINT_PRINT","PrintHook","isPrinting","queue","PrintQueue","deactivations","withPrintQuery","isPrintEvent","printAlias","getEventBreakpoints","printBreakPoints","updateEvent","event","interceptEvents","startPrinting","updateStyles","stopPrinting","collectActivations","blockPropagation","bpList","activatedBreakpoints","addPrintBreakpoints","printBreakpoints","addBreakpoint","MediaObserver","hook","filterOverlaps","destroyed$","_media$","watchActivations","media$","some","buildObservable","hasChanges","isValidQuery","excludeOverlaps","debounceTime","asapScheduler","switchMap","of","findAllActivations","takeUntil","mergeMQAlias","replaceWithPrintAlias","MediaTrigger","hasCachedRegistryMatches","originalActivations","originalRegistry","saveActivations","deactivateAll","setActivations","prepareAutoRestore","restore","extractQuery","restoreRegistryMatches","resizeSubscription","unsubscribe","resize$","fromEvent","window","take","subscribe","currentActivations","forceRegistryMatches","simulateMediaChanges","toMediaChange","cacheRegistryMatches","emitChangeEvent","StyleUtils","_serverStylesheet","_serverModuleLoaded","_applyMultiValueStyleToElement","lookupStyle","hasInlineValue","lookupInlineStyle","isPlatformServer","lookupAttributeValue","attribute","getAttribute","getPropertyValue","_getServerStyle","inlineOnly","getComputedStyle","values","values_1","setProperty","_setServerStyle","styleValue","styleMap","_readStyleAttribute","_writeStyleAttribute","styleAttribute","styleList","colonIndex","Error","name_1","styleAttrValue","Optional","Boolean","StyleBuilder","_input","_styles","_parent","elementMap","elementKeyMap","WeakMap","watcherMap","updateMap","clearMap","subject","observeActivations","onMediaChange","mc","splice","updateFn","clearFn","buildElementKeyMap","watchExtraTriggers","bpMap","getActivatedValues","hasValue","updateElement","trackValue","keyMap","Set","valueMap","delete","clearElement","builders","add","triggers","watchers","newSubscription","activatedBp","lastHope","tap"],"mappings":";;;;;;;keCuBA,SAAgBC,GAAUC,EAAGC,GAEzB,QAASC,KAAOC,KAAKC,YAAcJ,EADnCK,EAAcL,EAAGC,GAEjBD,EAAEM,UAAkB,OAANL,EAAaM,OAAOC,OAAOP,IAAMC,EAAGI,UAAYL,EAAEK,UAAW,GAAIJ,ICXnF,QAAgBO,GAAaC,EAAqBC,GAChD,MAAA,YACE,GAAIC,EAAAA,kBAAkBD,GAAa,CACvC,GAMYE,GAAa,sBANFC,OAAMC,KAAKL,EAAUM,iBAAiB,WAAWC,EAAxE,MAOeC,QAAO,SAACC,GACfA,EAAGC,UAAUC,SAAYJ,EAAjC,QAAqDE,EAAGG,WAC9CH,EAAGG,WAAWC,YAAYJ,GAAMA,EAAGK,UAAUC,QAAQZ,EAAY,QCb3E,QAAgBa,GAAWC,EAAmBC,GAQ5C,MAPAD,GAAOA,EAAOA,EAAKE,QAAU,GAAIC,GAC7BF,IACFD,EAAKI,QAAUH,EAAOI,MACtBL,EAAKM,WAAaL,EAAOK,WACzBN,EAAKO,OAASN,EAAa,OAC3BD,EAAKQ,SAAWP,EAAe,UAE1BD,ECTT,QAAgBS,GAAeC,GACzB,GAAAC,GAANC,EAAAF,EACE,OAAOG,GADTF,EAAA,GAAAA,EAAA,GAAAA,EAAA,IAQA,QAAgBC,GAAcF,GAC5BA,EAAQA,EAAQA,EAAMI,cAAgB,EAClC,IAAAH,GAAND,EAAAK,MAAA,KAAOC,EAAPL,EAAA,GAAkBM,EAAlBN,EAAA,GAAwBO,EAAxBP,EAAA,EAYE,OATKQ,GAAcC,KAAI,SAACC,GAAK,MAAAA,KAAML,MACjCA,EAAYG,EAAc,IAGxBF,IAASK,IACXL,EAAQC,IAAWI,EAAUJ,EAAS,GACtCA,EAASI,IAGHN,EAAWO,EAAkBN,KAASC,GAehD,QAAgBK,GAAkBb,GAChC,GAAMA,EACJ,OAAQA,EAAMI,eACZ,IAAK,UACL,IAAK,eACL,IAAK,eACHJ,EAAQ,cACR,MAEF,KAAK,KACL,IAAK,OACL,IAAK,SACHA,EAAQ,QACR,MAGF,SACEA,EAAQ,OAId,MAAOA,GAYT,QAASG,GAASG,EAAmBC,EAA4BC,GAC/D,WADF,KAAAD,IAAqCA,EAArC,UAAA,KAAAC,IAAiEA,GAAjE,IAEIM,QAAWN,EAAS,cAAgB,OACpCO,aAAc,aACdC,iBAAkBV,EAClBW,YAAeV,GAAc,MC3EjC,QAAgBW,GAAa5B,GAA7B,IAAwC,GAAxC6B,MAAAC,EAAA,EAAwCA,EAAxCC,UAAAC,OAAwCF,IAAAD,EAAxCC,EAAA,GAAAC,UAAAD,EACE,IAAY,MAAR9B,EACF,KAAMiC,WAAU,6CAGlB,KAAmB,GAArBtB,GAAA,EAAqBuB,EAArBL,EAAqBlB,EAArBuB,EAAAF,OAAqBrB,IAAS,CAAvB,GAAIV,GAAXiC,EAAAvB,EACI,IAAc,MAAVV,EACF,IAAK,GAAIkC,KAAOlC,GACVA,EAAOmC,eAAeD,KACxBnC,EAAKmC,GAAOlC,EAAOkC,IAM3B,MAAOnC,GClBT,QAASqC,GAAeC,GACxB,GAAMC,GAAQD,EAAKN,OAAS,EAAIM,EAAKE,OAAO,GAAK,GAC3CC,EAAaH,EAAKN,OAAS,EAAKM,EAAKI,MAAM,GAAK,EACpD,OAAOH,GAAMI,cAAgBF,EAO/B,QAASG,GAAUC,GACjB,MAAOA,GACF/C,QAAQgD,EAAkB,KAC1B/B,MAAM,KACNgC,IAAIV,GACJW,KAAK,IAOZ,QAAgBC,GAAiBC,GAO/B,MANAA,GAAK3D,QAAO,SAAE4D,GACPA,EAAG5C,SACN4C,EAAG5C,OAASqC,EAAUO,EAAG9C,OACzB8C,EAAGC,cAAgBD,EAAGC,eAGnBF,EAQT,QAAgBG,GAAaC,EAAwBC,OAArD,KAAAA,IAAqDA,KACrD,IAAQC,KAaN,OAZAF,GAAS/D,QAAO,SAAC4D,GACfK,EAAKL,EAAG9C,OAAS8C,IAGnBI,EAAOhE,QAAO,SAAE4D,GACVK,EAAKL,EAAG9C,OACVuB,EAAa4B,EAAKL,EAAG9C,OAAQ8C,GAE7BK,EAAKL,EAAG9C,OAAS8C,IAIdF,EAAiBrE,OAAO6E,KAAKD,GAAMT,IAAG,SAACW,GAAK,MAAAF,GAAKE,MCjD1D,QAAgBC,GAA+CC,EAAatF,GAC5E,GAAQuF,GAAYD,EAAIA,EAAEpD,UAAY,EAAI,CAExC,QADkBlC,EAAIA,EAAEkC,UAAY,EAAI,GACrBqD,EAIrB,QAAgBC,GAA8CF,EAAMtF,GAGlE,OAFWsF,EAAEpD,UAAY,IACdlC,EAAEkC,UAAY,GCgI3B,QAASuD,GAAcC,EAAwBjF,GAC/C,GAAQmE,GAAOc,EAAaC,OAAM,SAACC,GAAM,OAACC,GAAWD,IACnD,IAAIhB,EAAKlB,OAAS,EAAG,CACvB,GAAUoC,GAAQlB,EAAKF,KAAK,KAExB,KACJ,GAAYqB,GAAUtF,EAAUuF,cAAc,QAGxC,IADAD,EAAQE,aAAa,OAAQ,aACxB,EAAiBC,WAAY,CACxC,GAAcC,GAAU,2IAKfL,EALT,wBAOQC,GAAQK,YAAY3F,EAAU4F,eAAeF,IAG/C1F,EAAc,KAAE2F,YAAYL,GAG5BnB,EAAK3D,QAAO,SAACqF,GAAM,MAAAT,IAAWS,GAAMP,IAEpC,MAAOQ,GACPC,QAAQC,MAAMF,KAKpB,QAASG,GAAaZ,EAAea,GAGnC,MAFkBA,MAAe,OAAiBC,WAAW,OAAOC,YAEjD,OAAiBD,WAAWd,IAC7CgB,QAAmB,QAAVhB,GAA6B,KAAVA,EAC5BiB,MAAOjB,EACPe,YAAW,aAEXG,eAAc,cCuBlB,QAASC,GAAkBpC,GACzB,QAAOA,GAAKA,EAAG7C,WAAWkF,WAAWC,IC5MvC,QAAgBC,GAAehF,GAC7B,MAAOvB,OAAMwG,QAAQjF,GAASA,GAASA,GC+LzC,QAASkF,GAAaxB,EAAeyB,GACrC,GAAQ1C,GAAK0C,EAAQC,YAAY1B,IAAUyB,EAAQE,YAAY3B,EAC7D,OAAOjB,GAAKA,EAAG7C,WAAa8D,EAO9B,QAAS4B,GAAaC,GACpB,MAAOA,GAAQlD,IAAG,SAAEqB,GAAkB,MAAAA,GAAMrD,MAAM,OACnCmF,OAAM,SAAEC,EAAcC,GAAiB,MAAAD,GAAGE,OAAOD,KACjDrD,IAAG,SAACqB,GAAS,MAAAA,GAAMkC,SClMpC,QAAgBC,GAAiBC,GAC/B,IAAK,GAAIrE,KAAOqE,GAAQ,CAC1B,GAAQ9F,GAAQ8F,EAAOrE,IAAQ,EAE3B,QAAQA,GACN,IAAK,UAEDqE,EAAgB,QADJ,SAAV9F,GAEA,eACA,QAEiB,gBAAVA,GAEP,sBACA,eAGkBA,CAEtB,MAEF,KAAK,cACL,IAAK,aACL,IAAK,gBACL,IAAK,OACL,IAAK,aACL,IAAK,YACL,IAAK,YACL,IAAK,cACL,IAAK,YACL,IAAK,kBACH8F,EAAO,WAAarE,GAAOzB,CAC3B,MAEF,KAAK,iBACHA,EAAQA,GAAS,MACjB8F,EAAO,0BAA4B9F,EACnC8F,EAAO,kBAAoB9F,CAC3B,MAEF,KAAK,QACH8F,EAAc,MAAIA,EAAO,WAAarE,GAAOsE,OAAO/F,GAAS,IAAMA,GAIzE,MAAO8F,GCnDT,QAAgBE,GAAcC,EAAeC,EAAYC,OAAzD,KAAAD,IAA6CA,EAA7C,SAAA,KAAAC,IAAyDA,EAAzD,IACA,IAAMC,IAASF,EAAMC,EAAQF,GAEvBI,EAAIJ,EAAMK,QAAQ,OACtB,IAAID,EAAI,EAAG,CACTD,EAAM,GAAKG,EAAmBN,EAAMO,UAAUH,GAAGT,OACrD,IAAQlB,GAAUuB,EAAMQ,OAAO,EAAGJ,GAAGT,OAAOvF,MAAM,IACxB,IAAlBqE,EAAQpD,SACV8E,EAAM,GAAK1B,EAAQ,GACnB0B,EAAM,GAAK1B,EAAQ,QAEhB,IAAS,GAAL2B,EACTD,EAAM,GAAKG,EAAmBN,EAAML,YAC/B,CACT,GAAQlB,GAAUuB,EAAM5F,MAAM,IAC1B+F,GAA4B,IAAnB1B,EAAQpD,OAAgBoD,GAC3BwB,EAAMC,EAAQF,GAItB,MAAOG,GAcT,QAASG,GAAmBG,GAC1B,MAAOA,GAAKtH,QAAQ,QAAS,IAAIA,QAAQ,cAAe,Qb0S1D,QAASuH,GAAetE,EACAuE,EACAnF,EACAoF,GACtB,OAAcC,KAAVD,EAAqB,CAC3B,GAAQE,GAAS1E,EAAI2E,IAAIJ,EAChBG,KACHA,EAAS,GAAIE,KACb5E,EAAI6E,IAAIN,EAASG,IAEnBA,EAAOG,IAAIzF,EAAKoF,ICpVpB,GAAI7I,GAAgB,SAASL,EAAGC,GAI5B,OAHAI,EAAgBE,OAAOiJ,iBAChBC,uBAA2B3I,QAAS,SAAUd,EAAGC,GAAKD,EAAEyJ,UAAYxJ,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIyJ,KAAKzJ,GAAOA,EAAE8D,eAAe2F,KAAI1J,EAAE0J,GAAKzJ,EAAEyJ,MACpD1J,EAAGC,IASjB0J,EAAW,WAQlB,MAPAA,GAAWpJ,OAAOqJ,QAAU,SAAkBC,GAC1C,IAAK,GAAIC,GAAGC,EAAI,EAAGC,EAAItG,UAAUC,OAAQoG,EAAIC,EAAGD,IAAK,CACjDD,EAAIpG,UAAUqG,EACd,KAAK,GAAIL,KAAKI,GAAOvJ,OAAOD,UAAUyD,eAAekG,KAAKH,EAAGJ,KAAIG,EAAEH,GAAKI,EAAEJ,IAE9E,MAAOG,IAEJF,EAASO,MAAM/J,KAAMuD,YCDnByG,GACXC,QAAyCC,EAAsB,uBAC/DC,WAAY7J,EACZ8J,MAAOC,EAAAA,SAAUC,EAAAA,aACjBC,OAAO,GAGIzJ,EAAa,eY1B1B0J,EAAA,WAAA,QAAAA,MAIA,sBAJAC,KAACC,EAAAA,SAADC,OACEC,WAAYZ,OAGdQ,kBCEE,QAAF7I,GAAqBiF,EACA9E,EACAF,EACAG,EACAC,OAJrB,KAAA4E,IAAqBA,GAArB,OACA,KAAA9E,IAAqBA,EAArB,WACA,KAAAF,IAAqBA,EAArB,QACA,KAAAG,IAAqBA,EAArB,QACA,KAAAC,IAAqBA,EAArB,GAJqBhC,KAArB4G,QAAqBA,EACA5G,KAArB8B,WAAqBA,EACA9B,KAArB4B,QAAqBA,EACA5B,KAArB+B,OAAqBA,EACA/B,KAArBgC,SAAqBA,EAdnBhC,KAAF6K,SAAqB,GAqBrB,MAHElJ,GAAFxB,UAAAuB,MAAE,WACE,MAAO,IAAIC,GAAY3B,KAAK4G,QAAS5G,KAAK8B,WAAY9B,KAAK4B,QAAS5B,KAAK+B,SAE7EJ,KCnBAmJ,EAAA,WAAA,QAAAA,KAGW9K,KAAX+K,WAAwB,GAAI5B,KAlB5B,MAuBE2B,GAAF3K,UAAA6K,kBAAE,SAAkBlC,EAAsBmC,EAAe/I,GACzD,GAAU6I,GAAa/K,KAAK+K,WAAW7B,IAAIJ,EACnCiC,GACFA,EAAW3B,IAAI6B,EAAO/I,GAEtBlC,KAAK+K,WAAW3B,IAAIN,EAAS,GAAIK,OAAM8B,EAAO/I,OAOlD4I,EAAF3K,UAAA+K,YAAE,WACElL,KAAK+K,WAAWI,SAMlBL,EAAF3K,UAAAiL,mBAAE,SAAmBpK,EAAiBqK,GACtC,GAAUC,GAAStL,KAAK+K,WAAW7B,IAAIlI,GAC/BkB,EAAQ,EACZ,IAAIoJ,EAAQ,CAChB,GAAYL,GAAQK,EAAOpC,IAAImC,EACJ,iBAAVJ,IAAuC,gBAAVA,KACtC/I,EAAQ+I,EAAQ,IAGpB,MAAO/I,mBApCXuI,KAACc,EAAAA,WAADZ,OAAaa,WAAY,gHAfzBV,KCsBaW,GACXC,iBAAiB,EACjBC,mBAAmB,EACnBC,mBAAmB,EACnBC,uBAAuB,EACvBC,cAAc,EACdC,oBAAoB,EACpBC,wBACAC,yBAAyB,EACzBC,0BAGWC,EAAgB,GAAIC,GAAAA,eAC7B,qDACEZ,WAAY,OACZa,QAAO,WAAQ,MAAAZ,MCtBRa,EAAe,GAAIF,GAAAA,eAC9B,0BACEZ,WAAY,OACZa,QAAO,WAAQ,OAAA,KCRNE,EAAa,GAAIH,GAAAA,eAC5B,gEACEZ,WAAY,OACZa,QAAO,WAAQ,MAAA,SfNNvJ,EAAS,SACTH,GAAiB,MAAO,SAAU,cAAe,+BgBqC5D,QAAF6J,GAAkCC,EACAC,EACAC,EACAC,GAHA5M,KAAlCyM,WAAkCA,EACAzM,KAAlC0M,aAAkCA,EACA1M,KAAlC2M,OAAkCA,EACA3M,KAAlC4M,QAAkCA,EA/BtB5M,KAAZ6M,cAA4B,GAChB7M,KAAZ8M,UAEY9M,KAAZ+M,OACY/M,KAAZgN,eAA4C,GAAIC,GAAAA,QAsBpCjN,KAAZkN,WAAuD,GAAI/D,KAyG3D,MA5HE/I,QAAF+M,eAAgBX,EAAhBrM,UAAA,qBAAE,WACE,MAAOH,MAAKyM,WAAWW,cAAcC,+CAIvCjN,OAAF+M,eAAgBX,EAAhBrM,UAAA,qBAAE,WACE,MAAOH,MAAKyM,WAAWW,+CAIzBhN,OAAF+M,eAAMX,EAANrM,UAAA,sBAAE,WACE,MAAOH,MAAK4M,QAAQU,SAAStN,KAAKoN,cAAepN,KAAK6M,oBAExD,SAAmB3K,GACjBlC,KAAK4M,QAAQW,SAASvN,KAAKoN,cAAepN,KAAK6M,cAAe3K,EAC5DlC,KAAK4M,QAAQY,iDAajBhB,EAAFrM,UAAAsN,YAAE,SAAYC,GAAZ,GAAFC,GAAA3N,IACII,QAAO6E,KAAKyI,GAAS3M,QAAO,SAAC4C,GAC3B,IAAkC,IAA9BgK,EAAKb,OAAOtE,QAAQ7E,GAAa,CAC3C,GAAcgB,GAAKhB,EAAIpB,MAAM,KAAK2B,MAAM,GAAGM,KAAK,KAClCoJ,EAAMF,EAAQ/J,GAAKkK,YACzBF,GAAKJ,SAASK,EAAKjJ,OAKzB6H,EAAFrM,UAAA2N,YAAE,WACE9N,KAAKgN,eAAee,OACpB/N,KAAKgN,eAAegB,WACpBhO,KAAK4M,QAAQqB,eAAejO,KAAKoN,gBAIzBZ,EAAZrM,UAAA+N,KAAE,SAAeC,OAAjB,KAAAA,IAAiBA,MACbnO,KAAK4M,QAAQsB,KACXlO,KAAKyM,WAAWW,cAChBpN,KAAK6M,cACL7M,KAAKoO,gBAAgBC,KAAKrO,MAC1BA,KAAKkL,YAAYmD,KAAKrO,MACtBmO,IAKM3B,EAAZrM,UAAAmO,UAAE,SAAoBvF,EAAewF,GACrC,GAAUC,GAAUxO,KAAK0M,aACf+B,EAAWD,EAAQE,YAErBC,EAAyC3O,KAAKkN,WAAWhE,IAAIH,EAE5D4F,IAAcF,IACjBE,EAAYH,EAAQI,YAAY7F,EAAOwF,GACnCE,GACFzO,KAAKkN,WAAW9D,IAAIL,EAAO4F,IAI/B3O,KAAK+M,IAAT8B,KAAmBF,GACf3O,KAAK8O,oBAAoBH,GACzBH,EAAQO,WAAWhG,EAAO4F,EAAWJ,IAI7B/B,EAAZrM,UAAA+K,YAAE,WAAA,GAAFyC,GAAA3N,IACII,QAAO6E,KAAKjF,KAAK+M,KAAKhM,QAAO,SAACmE,GAC5ByI,EAAKZ,IAAI7H,GAAK,KAEhBlF,KAAK8O,oBAAoB9O,KAAK+M,KAC9B/M,KAAK+M,QAIGP,EAAZrM,UAAA6O,cAAE,WACEhP,KAAK4M,QAAQoC,cAAchP,KAAKoN,cAAepN,KAAK6M,gBAS5CL,EAAZrM,UAAA8O,qBAAE,SAA+BjH,EAAqBkH,GAClD,OADJ,KAAAA,IAAsDA,GAAtD,GACQlH,EAAQ,CACJ,GAAA7F,GAAZnC,KAAA2M,OAAAwC,iBAAAnH,GAAa9F,EAAbC,EAAA,EAEM,KAFNA,EAAA,IAE6B+M,EAAc,CAC3C,GAAcjE,GAAQhJ,EAAeC,GACvBkN,GAAYpH,EAClBhI,MAAK2M,OAAO0C,qBAAqBpE,EAAOmE,GAG1C,MAAOlN,GAAM4F,OAGf,MAAO,OAIC0E,EAAZrM,UAAA2O,oBAAE,SAA8B7D,EACA/I,EACA4G,OAAhC,KAAAA,IAAgCA,EAAuB9I,KAAKoN,eACxDpN,KAAK2M,OAAOmC,oBAAoBhG,EAASmC,EAAO/I,IAGxCsK,EAAZrM,UAAAoN,SAAE,SAAmBK,EAAUjJ,GAC3B3E,KAAK4M,QAAQW,SAASvN,KAAKoN,cAAepN,KAAK6M,cAAee,EAAKjJ,IAG3D6H,EAAZrM,UAAAiO,gBAAE,SAA0BrF,GACxB/I,KAAKsO,UAAUvF,IAEnByD,KCxIa8C,IAETzN,MAAO,KACPC,WAAY,wDACZE,SAAU,MAGVH,MAAO,KACPC,WAAY,0DACZE,SAAU,MAGVH,MAAO,KACPC,WAAY,2DACZE,SAAU,MAGVH,MAAO,KACPC,WAAY,4DACZE,SAAU,MAGVH,MAAO,KACPC,WAAY,4DACZE,SAAU,MAGVH,MAAO,QACP+C,aAAa,EACb9C,WAAY,mCACZE,SAAU,MAGVH,MAAO,QACP+C,aAAa,EACb9C,WAAY,mCACZE,SAAU,MAGVH,MAAO,QACP+C,aAAa,EACb9C,WAAY,oCACZE,SAAU,MAGVH,MAAO,QACP+C,aAAa,EACb5C,SAAU,IACVF,WAAY,sCAGZD,MAAO,QACP+C,aAAa,EACb9C,WAAY,gCACZE,UAAW,MAGXH,MAAO,QACP+C,aAAa,EACb9C,WAAY,gCACZE,UAAW,MAEXH,MAAO,QACP+C,aAAa,EACb9C,WAAY,iCACZE,UAAW,MAGXH,MAAO,QACP+C,aAAa,EACb9C,WAAY,iCACZE,UAAW,MCxETuN,EAAoB,oDAGpBC,EAAoB,2EACpBC,EAAoB,6EAEpBC,EAAoB,iDACpBC,EAAoB,mDAEbC,GACXC,QAAyBN,EAA3B,uDACEO,OAAyBN,EAA3B,MAAgDC,EAC9CM,IAAyBL,EAA3B,KAA4CC,EAA5C,IAEEJ,iBAAsB,GAAGA,EACzBC,gBAAyBA,EAA3B,IACEE,aAAsB,GAAGA,EAEzBM,kBAAyBA,sDACzBP,iBAAsB,GAAGA,EACzBE,cAAsB,GAAGA,GAMdM,IACVpO,MAAS,UAAsBG,SAAU,IAAMF,WAAc8N,EAAYC,UACzEhO,MAAS,oBAAsBG,SAAU,IAAMF,WAAc8N,EAAYI,oBACzEnO,MAAS,mBAAsBG,SAAU,IAAMF,WAAc8N,EAAYL,mBAEzE1N,MAAS,SAAsBG,SAAU,KAAMF,WAAc8N,EAAYE,SACzEjO,MAAS,mBAAsBG,SAAU,KAAMF,WAAc8N,EAAYE,SACzEjO,MAAS,kBAAsBG,SAAU,KAAMF,WAAc8N,EAAYJ,kBAEzE3N,MAAS,MAAsBG,SAAU,KAAMF,WAAc8N,EAAYG,IAAKnL,aAAc,IAC5F/C,MAAS,gBAAsBG,SAAU,KAAMF,WAAc8N,EAAYD,cAAe/K,aAAc,IACtG/C,MAAS,eAAsBG,SAAU,KAAMF,WAAc8N,EAAYF,aAAc9K,aAAc,IhBtClGN,EAAmB,YiBUZ4L,EACX,GAAI9D,GAAAA,eAA6B,4CAC/BZ,WAAY,OACZa,QAAO,WACX,GAAY8D,GAAmBC,EAAAA,OAAO7D,GAC1B8D,EAAeD,EAAAA,OAAOjE,GACtBmE,KAAkCzI,OAAOkC,UAAWoG,OACvD5L,IAAG,SAAEgM,GAAiC,MAAA5P,OAAMwG,QAAQoJ,GAAKA,GAAKA,KAIjE,OAAO1L,IAHWwL,EAAazE,qBAAyB0D,GACrDzH,OAAOwI,EAAa1E,kBAAoBsE,MAEbK,MCXpCE,EAAA,WAIE,QAAFA,GAAmC9L,GAwDhB1E,KAAnByQ,UAA+B,GAAItH,KAvD/BnJ,KAAK0Q,MAAYhM,EAArBR,QAA2ByM,KAAKrL,GAzBhC,MA+BEkL,GAAFrQ,UAAAmH,YAAE,SAAYzF,GACV,MAAQA,GAAe7B,KAAK4Q,kBAAkB/O,EAAK,SAAG8C,GAAO,MAAAA,GAAG9C,OAASA,IAAzD,MAGlB2O,EAAFrQ,UAAAoH,YAAE,SAAY3B,GACV,MAAO5F,MAAK4Q,kBAAkBhL,EAAK,SAAGjB,GAAO,MAAAA,GAAG7C,YAAc8D,KAOhExF,OAAF+M,eAAMqD,EAANrQ,UAAA,oBAAE,WACE,MAAOH,MAAK0Q,MAAMjL,OAAM,SAACC,GAAM,MAAkB,IAAlBA,EAAGd,+CAMpCxE,OAAF+M,eAAMqD,EAANrQ,UAAA,eAAE,WACE,MAAOH,MAAK0Q,MAAMnM,IAAG,SAACmB,GAAM,MAAAA,GAAG7D,yCAQjCzB,OAAF+M,eAAMqD,EAANrQ,UAAA,gBAAE,WACE,MAAOH,MAAK0Q,MAAMnM,IAAG,SAACmB,GAAM,MAAEA,GAAG3D,OAAS2D,EAAG3D,OAAS,sCAMhDyO,EAAVrQ,UAAAyQ,kBAAE,SAA0BjN,EACtBkN,GACN,GAAQC,GAAW9Q,KAAKyQ,UAAUvH,IAAIvF,EAKlC,OAJKmN,KACHA,EAAW9Q,KAAK0Q,MAAM9N,KAAKiO,IAAa,KACxC7Q,KAAKyQ,UAAUrH,IAAIzF,EAAKmN,IAEnBA,GAAY,qBArDvBrG,KAACc,EAAAA,WAADZ,OAAaa,WAAY,+CAIzBf,KAAA9J,MAAAoQ,aAAAtG,KAAeuG,EAAAA,OAAfrG,MAAsBuF,4HAxBtBM,KhBqBAS,GAAA,WAME,QAAFA,GAAwBC,EACqBC,EACH5Q,GAFlBP,KAAxBkR,MAAwBA,EACqBlR,KAA7CmR,YAA6CA,EACHnR,KAA1CO,UAA0CA,EAL/BP,KAAXyB,OAAoB,GAAI2P,GAAAA,gBAA6B,GAAIzP,IAAY,IACnE3B,KAAFqR,SAAa,GAAIlI,KA6GLnJ,KAAZsR,aAA2BtR,KAAKyB,OAAO8P,eAtIvC,MAmCEnR,QAAF+M,eAAM8D,EAAN9Q,UAAA,mBAAE,WACF,GAAUqR,KAMN,OALAxR,MAAKqR,SAAStQ,QAAO,SAAE0Q,EAAqB9N,GACtC8N,EAAI7K,SACN4K,EAAQE,KAAK/N,KAGV6N,mCAMTP,EAAF9Q,UAAAwR,SAAE,SAAS7P,GACX,GAAU2P,GAAMzR,KAAKqR,SAASnI,IAAIpH,EAC9B,SAAS2P,GAAMA,EAAI7K,SAsBrBqK,EAAF9Q,UAAAyR,QAAE,SAAQC,EAAmBC,GAA3B,GAAFnE,GAAA3N,IACI,QADJ,KAAA8R,IAA6BA,GAA7B,GACQD,GAAUA,EAAOrO,OAAQ,CACjC,GAAYuO,GAAuC/R,KAAKsR,aAAaU,KAC3DvM,EAAAA,OAAM,SAAEwM,GACN,OAAQH,GAAuBD,EAAOrJ,QAAQyJ,EAAOnQ,aAAe,KAGpEoQ,EAAyC,GAAIC,GAAAA,WAAU,SAAEC,GACrE,GAAcxL,GAA8B+G,EAAK0E,cAAcR,EACvD,IAAIjL,EAAQpD,OAAQ,CAC5B,GAAgB8O,GAAa1L,EAAQ2L,KAC3B3L,GAAQ7F,QAAO,SAAEsF,GACf+L,EAASrE,KAAK1H,KAEhBsH,EAAKlM,OAAOsM,KAAKuE,GAEnBF,EAASpE,YAEX,OAAOwE,GAAAA,MAAMN,EAAeH,GAG9B,MAAO/R,MAAKsR,cAOdL,EAAF9Q,UAAAkS,cAAE,SAAcvQ,GAAd,GAAF6L,GAAA3N,KACU0E,EAAO/D,MAAMwG,QAAQrF,GAAcA,GAAcA,GACjD8E,IAqBN,OAnBArB,GAAcb,EAAM1E,KAAKO,WAEzBmE,EAAK3D,QAAO,SAAE6E,GAClB,GAAY6M,GAAU,SAAIpM,GAClBsH,EAAKuD,MAAMwB,IAAG,WAAO,MAAA/E,GAAKlM,OAAOsM,KAAK,GAAIpM,GAAY0E,EAAEO,QAAShB,OAG/D6L,EAAM9D,EAAK0D,SAASnI,IAAItD,EACvB6L,KACHA,EAAM9D,EAAKgF,SAAS/M,GACpB6L,EAAI9K,YAAY8L,GAChB9E,EAAK0D,SAASjI,IAAIxD,EAAO6L,IAGvBA,EAAI7K,SACNA,EAAQ8K,KAAK,GAAI/P,IAAY,EAAMiE,MAIhCgB,GAOCqK,EAAZ9Q,UAAAwS,SAAE,SAAmB/M,GACjB,MAAOY,GAAaZ,EAAOnF,EAAAA,kBAAkBT,KAAKmR,8BA9GtD1G,KAACc,EAAAA,WAADZ,OAAaa,WAAY,+CAdzBf,KAA4BmI,EAAAA,SAqB5BnI,KAA0DrK,OAA1D2Q,aAAAtG,KAAeuG,EAAAA,OAAfrG,MAAsBL,EAAAA,iBACtBG,SAAAzB,GAAA+H,aAAAtG,KAAeuG,EAAAA,OAAfrG,MAAsBN,EAAAA,2LA7BtB4G,KA6IMtL,MiB3HNkN,GAAA,SAAAC,GAOE,QAAFD,GAAc3B,EACqBC,EACH5Q,EACVwS,GAHpB,GAAFpF,GAIImF,EAJJhJ,KAAA9J,KAIUkR,EAAOC,EAAa5Q,IAJ9BP,WAGsB2N,GAAtBoF,aAAsBA,EANpBpF,EAAFqF,qBAAwB,EACtBrF,EAAFsF,aAAgB,IAsIhB,MA1IoCC,GAApCL,EAAAC,GAcED,EAAF1S,UAAAgT,SAAE,WACEnT,KAAKqR,SAAStQ,QAAO,SAAE0Q,GACrB,EAA4B2B,YAE9BpT,KAAKqR,SAASlG,QACdnL,KAAKiT,aAAc,GAIrBJ,EAAF1S,UAAAkT,SAAE,SAASvR,EAAoBmR,GAW3B,WAXJ,KAAAA,IAA+BA,GAA/B,GACIA,EAAcA,GAAejT,KAAKiT,YAClCnR,EAAa9B,KAAKsT,eAAexR,IAE7BmR,GAAgBjT,KAAK2R,SAAS7P,KAChC9B,KAAKuT,iBAELvT,KAAKwT,oBAAoB1R,GACzB9B,KAAKyT,sBAAsB3R,EAAYmR,IAGlCjT,KAAK0T,cAIdb,EAAF1S,UAAAmT,eAAE,SAAeK,GACjB,GAAUhP,GAAK3E,KAAK+S,aAAazL,YAAYqM,EACzC,OAAQhP,IAAMA,EAAG7C,YAAe6R,GAO1Bd,EAAV1S,UAAAsT,sBAAE,SAA8B3R,EAAoBmR,GAChD,GAAIA,EAAa,CACrB,GAAYtO,GAAK3E,KAAK+S,aAAaxL,YAAYzF,GACnCD,EAAQ8C,EAAKA,EAAG9C,MAAQ,SAG9B,QAAQA,GACN,IAAK,KACH7B,KAAK4T,iBAAiB,QACtB,MACF,KAAK,KACH5T,KAAK4T,iBAAiB,eACtB,MACF,KAAK,KACH5T,KAAK4T,iBAAiB,sBACtB,MACF,KAAK,KACH5T,KAAK4T,iBAAiB,8BAK1B,OAAQ/R,GACN,IAAK,KACH7B,KAAK4T,iBAAiB,6BACtB,MACF,KAAK,KACH5T,KAAK4T,iBAAiB,sBACtB,MACF,KAAK,KACH5T,KAAK4T,iBAAiB,eACtB,MACF,KAAK,KACH5T,KAAK4T,iBAAiB,UAK5B,MAAO5T,MAAK6T,iBAAiB/R,IAMvB+Q,EAAV1S,UAAAyT,iBAAE,SAAyBE,GAAzB,GAAFnG,GAAA3N,KACUqT,EAAQ,SAAIxR,GACtB,GAAY8C,GAAKgJ,EAAKoF,aAAazL,YAAYzF,EACzC8L,GAAKkG,iBAAiBlP,EAAKA,EAAG7C,WAAaD,GAE7CiS,GAAQvR,MAAM,KAAKxB,QAAO,SAACc,GAAS,MAAAwR,GAASxR,EAAMiG,WAM7C+K,EAAV1S,UAAA0T,iBAAE,SAAyB/R,GAC3B,GAAU2P,GAA0BzR,KAAKqR,SAASnI,IAAIpH,EAKlD,OAHI2P,KAAQzR,KAAK2R,SAAS7P,IACxB9B,KAAKqR,SAASjI,IAAItH,EAAY2P,EAAI4B,YAE7BrT,KAAK0T,cAINb,EAAV1S,UAAAoT,eAAE,WAIE,MAHA,MAAKlC,SAAStQ,QAAO,SAAE2E,GACrB,EAA2BqO,eAE7B,MAIMlB,EAAV1S,UAAAqT,oBAAE,SAA4B1R,IACrB9B,KAAKqR,SAAS2C,IAAIlS,IAAe9B,KAAKgT,qBACzChT,KAAKqS,cAAcvQ,IAQb+Q,EAAZ1S,UAAAwS,SAAE,SAAmB/M,GACjB,MAAO,IAAIqO,IAAmBrO,IAGhCxF,OAAF+M,eAAgB0F,EAAhB1S,UAAA,oBAAE,WACE,MAAOH,MAAKkU,YAAY1Q,OAAS,kDAxIrCiH,KAACc,EAAAA,iDAXDd,KAA4BmI,EAAAA,SAmB5BnI,KAAgDrK,OAAhD2Q,aAAAtG,KAAeuG,EAAAA,OAAfrG,MAAsBL,EAAAA,iBACtBG,SAAAzB,GAAA+H,aAAAtG,KAAeuG,EAAAA,OAAfrG,MAAsBN,EAAAA,cAhBtBI,KAAQ+F,KAkJRqC,GA1IoC5B,kBA6JlC,QAAFgD,GAAsBE,GAAAnU,KAAtBmU,YAAsBA,EAXZnU,KAAVoU,WAAsB,EACZpU,KAAVqU,cAyFErU,KAAFsU,SAAqC,KACrC,MAxFElU,QAAF+M,eAAM8G,EAAN9T,UAAA,eAAE,WACE,MAAOH,MAAKoU,2CAGdhU,OAAF+M,eAAM8G,EAAN9T,UAAA,aAAE,WACE,MAAOH,MAAKmU,6CAUdF,EAAF9T,UAAAiT,QAAE,WACEpT,KAAK+T,aACL/T,KAAKqU,eAIPJ,EAAF9T,UAAAkT,SAAE,WAAA,GAAF1F,GAAA3N,IAQI,OAPKA,MAAKoU,YACRpU,KAAKoU,WAAY,EACjBpU,KAAKqU,WAAWtT,QAAO,SAAEwT,GACf,EACLzK,KAAK,KAAM6D,MAGX3N,MAITiU,EAAF9T,UAAA4T,WAAE,WAAA,GAAFpG,GAAA3N,IAQI,OAPIA,MAAKoU,YACPpU,KAAKoU,WAAY,EACjBpU,KAAKqU,WAAWtT,QAAO,SAAEwT,GACf,EACLzK,KAAK,KAAM6D,MAGX3N,MAITiU,EAAF9T,UAAAwG,YAAE,SAAY6N,GAIV,IAH2C,IAAvCxU,KAAKqU,WAAW7L,QAAQgM,IAC1BxU,KAAKqU,WAAW3C,KAAK8C,GAEnBxU,KAAKoU,UAAW,CACV,EACLtK,KAAK,KAAM9J,QAKlBiU,EAAF9T,UAAA2G,eAAE,SAAe2N,KASfR,EAAF9T,UAAAuU,iBAAE,SACID,EACA1U,EACA4U,KASJV,EAAF9T,UAAAyU,oBAAE,SACIH,EACA1U,EACA4U,KAGJV,EAAF9T,UAAA0U,cAAE,SAAcJ,GACZ,OAAO,GAIXR,KAKaa,IACX7K,QAASgH,GACT8D,SAAUlC,IhB/ON5L,GAAQ,QACD+N,IACXnT,MAAOoF,GACPnF,WAAYmF,GACZjF,SAAU,KASZiT,GAAA,WAEE,QAAFA,GACgB9E,EACuBE,GADvBrQ,KAAhBmQ,YAAgBA,EACuBnQ,KAAvCqQ,aAAuCA,EAyH7BrQ,KAAVkV,YAAuB,EACblV,KAAVmV,MAA8B,GAAIC,IACxBpV,KAAVqV,iBApKA,MA6CEJ,GAAF9U,UAAAmV,eAAE,SAAe7N,GACb,MAAWA,GAAfI,QAAwBZ,MAItBgO,EAAF9U,UAAAoV,aAAE,SAAalP,GACX,MAAOA,GAAEvE,WAAWkF,WAAWC,KAIjC7G,OAAF+M,eAAM8H,EAAN9U,UAAA,kBAAE,WACE,MAAOH,MAAKqQ,aAAarE,0DAI3B5L,OAAF+M,eAAM8H,EAAN9U,UAAA,wBAAE,WAAA,GAAFwN,GAAA3N,IACI,OAAOA,MAAKwV,WACPjR,IAAG,SAAC1C,GAAS,MAAA8L,GAAKwC,YAAY7I,YAAYzF,KAC1C4D,OAAM,SAACd,GAAM,MAAO,QAAPA,qCAIpBsQ,EAAF9U,UAAAsV,oBAAE,SAAoBtT,GAAtB,GAAuBL,GAAvBK,EAAAL,WACU6C,EAAK3E,KAAKmQ,YAAY5I,YAAYzF,EAGxC,QAFa6C,EAAS3E,KAAK0V,iBAA/B7N,QAAiDlD,IAAM3E,KAAK0V,kBAE5C/E,KAAKxL,IAInB8P,EAAF9U,UAAAwV,YAAE,SAAYC,GACd,GAAQjR,GAAyB3E,KAAKmQ,YAAY5I,YAAYqO,EAAM9T,WAMhE,OALI9B,MAAKuV,aAAaK,KAEpBjR,EAAK3E,KAAKyV,oBAAoBG,GAAO,GACrCA,EAAM9T,WAAa6C,EAAKA,EAAG7C,WAAa,IAEnCP,EAAWqU,EAAOjR,IAO3BsQ,EAAF9U,UAAA0V,gBAAE,SAAgB7N,GAAhB,GAAF2F,GAAA3N,IACI,OAAA,UAAQ4V,GACFjI,EAAK4H,aAAaK,GAChBA,EAAMhP,UAAY+G,EAAKuH,YACzBvH,EAAKmI,cAAc9N,EAAQ2F,EAAK8H,oBAAoBG,IACpD5N,EAAO+N,iBAEGH,EAAMhP,SAAW+G,EAAKuH,aAChCvH,EAAKqI,aAAahO,GAClBA,EAAO+N,gBAGTpI,EAAKsI,mBAAmBL,KAM9BX,EAAF9U,UAAA+V,iBAAE,WAAA,GAAFvI,GAAA3N,IACI,OAAA,UAAQ4V,GACN,QAASjI,EAAKuH,YAAcvH,EAAK4H,aAAaK,MAQxCX,EAAZ9U,UAAA2V,cAAE,SAAwB9N,EAAoBmO,GAC1CnW,KAAKkV,YAAa,EAClBlN,EAAOoO,qBAAuBpW,KAAKmV,MAAMkB,oBAAoBF,IAIrDlB,EAAZ9U,UAAA6V,aAAE,SAAuBhO,GACrBA,EAAOoO,qBAAuBpW,KAAKqV,cACnCrV,KAAKqV,iBACLrV,KAAKmV,MAAMhK,QACXnL,KAAKkV,YAAa,GAoBpBD,EAAF9U,UAAA8V,mBAAE,SAAmBL,GACjB,IAAK5V,KAAKkV,WACR,GAAKU,EAAMhP,QAOT5G,KAAKqV,qBAPa,CAC1B,GAAc1Q,GAAK3E,KAAKmQ,YAAY5I,YAAYqO,EAAM9T,WAC1C6C,KACF3E,KAAKqV,cAAc3D,KAAK/M,GACxB3E,KAAKqV,cAAc1E,KAAKxL,qBApHlCsF,KAACc,EAAAA,WAADZ,OAAaa,WAAY,+CAxBzBf,KAAQ+F,IA4BR/F,SAAAzB,GAAA+H,aAAAtG,KAAOuG,EAAAA,OAAPrG,MAAcwB,0IAzCd8I,mBAgLA,QAAAG,KAEEpV,KAAFsW,oBA2BA,MAzBElB,GAAFjV,UAAAkW,oBAAE,SAAoBF,GAApB,GAAFxI,GAAA3N,IAKI,OAJAmW,GAAOzE,KAAKsD,IACZmB,EAAOxF,KAAKxL,GACZgR,EAAOpV,QAAO,SAAC4D,GAAM,MAAAgJ,GAAK4I,cAAc5R,KAEjC3E,KAAKsW,kBAIdlB,EAAFjV,UAAAoW,cAAE,SAAc5R,GACZ,GAAMA,EAAI,KAESqE,KADAhJ,KAAKsW,iBAAiB1T,KAAI,SAAC8C,GAAM,MAAAA,GAAG5D,aAAe6C,EAAG7C,eAIrE9B,KAAKsW,iBAAmBvP,EAAkBpC,IAAOA,GAAzDkD,OAAgE7H,KAAKsW,kBACnDtW,KAAKsW,iBADvBzO,QACyClD,OAMvCyQ,EAAFjV,UAAAgL,MAAE,WACEnL,KAAKsW,qBAETlB,KE/IAoB,GAAA,WAaE,QAAFA,GAAwBrG,EACAzJ,EACA+P,GAFAzW,KAAxBmQ,YAAwBA,EACAnQ,KAAxB0G,WAAwBA,EACA1G,KAAxByW,KAAwBA,EAJtBzW,KAAF0W,gBAAmB,EA0HA1W,KAAnB2W,WAAgC,GAAI1J,GAAAA,QArHhCjN,KAAK4W,QAAU5W,KAAK6W,mBACpB7W,KAAK8W,OAAS9W,KAAK4W,QAAQ5E,KACzBvM,EAAAA,OAAM,SAAEiI,GAA2B,MAAAA,GAAQlK,OAAS,IACpDe,EAAAA,IAAG,SAAEmJ,GAA2B,MAAAA,GAAQ,MAjF9C,MAyFE8I,GAAFrW,UAAA2N,YAAE,WACE9N,KAAK2W,WAAW5I,OAChB/N,KAAK2W,WAAW3I,YAUlBwI,EAAFrW,UAAAoR,aAAE,WACE,MAAOvR,MAAK4W,SASdJ,EAAFrW,UAAAwR,SAAE,SAASzP,GAAT,GAAFyL,GAAA3N,IAEI,OADgBwH,GAAaN,EAAYhF,IAC1B6U,KAAI,SAAClV,GACxB,GAAY+D,GAAQwB,EAAavF,EAAO8L,EAAKwC,YACvC,OAAOxC,GAAKjH,WAAWiL,SAAS/L,MAa5B4Q,EAAVrW,UAAA0W,iBAAE,WACF,GAAUpP,GAAUzH,KAAKmQ,YAAYO,MAAMnM,IAAG,SAACI,GAAM,MAAAA,GAAG7C,YACpD,OAAO9B,MAAKgX,gBAAgBvP,IAiBtB+O,EAAVrW,UAAA6W,gBAAE,SAAwBnF,GAAxB,GAAFlE,GAAA3N,KACUiX,EAAU,SAAIvJ,GACxB,GAAYwJ,GAAY,SAAIjF,GAAwB,MAACA,GAAOnQ,WAAW0B,OAAS,EAC1E,OAAQkK,GAAQjI,OAAOyR,GAAc1T,OAAS,GAE1C2T,EAAe,SAAIzJ,GACvB,MAAQC,GAAK+I,eAA2BhJ,EAAQjI,OAAM,SAACwM,GAC7D,GAActN,GAAKgJ,EAAKwC,YAAY5I,YAAY0K,EAAOnQ,WAC/C,QAAQ6C,IAAaA,EAAGC,cAFI8I,EAQhC,OAAO1N,MAAK0G,WACPkL,QAAQ5R,KAAKyW,KAAKnB,eAAezD,IACjCG,KACGvM,EAAAA,OAAM,SAAEwM,GAAwB,MAAAA,GAAOrL,UACvCwQ,EAAAA,aAAa,EAAGC,EAAAA,eAChBC,EAAAA,UAAS,SAAC7C,GAAK,MAAA8C,GAAAA,GAAG5J,EAAK6J,wBACvBjT,EAAAA,IAAI4S,GACJ1R,EAAAA,OAAOwR,GACPQ,EAAAA,UAAUzX,KAAK2W,cAQjBH,EAAVrW,UAAAqX,mBAAE,WAAA,GAAF7J,GAAA3N,KACU0X,EAAY,SAAIzF,GAEpB,MAAO1Q,GAAW0Q,EADWtE,EAAKwC,YAAY5I,YAAY0K,EAAOnQ,cAG7D6V,EAAqB,SAAI1F,GAC7B,MAAOtE,GAAK8I,KAAKlB,aAAatD,GAAUtE,EAAK8I,KAAKd,YAAY1D,GAAUA,EAG1E,OAAOjS,MAAK0G,WACPwN,YACA3P,IAAG,SAACqB,GAAS,MAAA,IAAIjE,IAAY,EAAMiE,KACnCrB,IAAIoT,GACJpT,IAAImT,GACJ/G,KAAKxL,mBAjIdsF,KAACc,EAAAA,WAADZ,OAAaa,WAAY,+CA/CzBf,KAAQ+F,IAFR/F,KAAQwG,KACRxG,KAAQwK,wJAdRuB,KeuBAoB,GAAA,WAGE,QAAFA,GACgBzH,EACAzJ,EACuB2J,EACFc,EACH5Q,GAJlBP,KAAhBmQ,YAAgBA,EACAnQ,KAAhB0G,WAAgBA,EACuB1G,KAAvCqQ,aAAuCA,EACFrQ,KAArCmR,YAAqCA,EACHnR,KAAlCO,UAAkCA,EAuKxBP,KAAV6X,0BAAqC,EAC3B7X,KAAV8X,uBACU9X,KAAV+X,iBAA0D,GAAI5O,KAxM9D,MAsCEyO,GAAFzX,UAAAkT,SAAE,SAAS3O,GACPA,EAAOA,EAAKH,IAAG,SAACmB,GAAM,MAAAA,GAAGoC,SAEzB9H,KAAKgY,kBACLhY,KAAKiY,gBACLjY,KAAKkY,eAAexT,GAEpB1E,KAAKmY,sBAOPP,EAAFzX,UAAAiY,QAAE,WACE,GAAIpY,KAAK6X,yBAA0B,CACvC,GAAYQ,GAAY,SAAIpG,GAAwB,MAAAA,GAAOnQ,YAC/C4C,EAAO1E,KAAK8X,oBAAoBvT,IAAI8T,EAC1C,KAEErY,KAAKiY,gBACLjY,KAAKsY,yBACLtY,KAAKkY,eAAexT,WAGpB1E,KAAK8X,uBACD9X,KAAKuY,oBACPvY,KAAKuY,mBAAmBC,iBAcxBZ,EAAVzX,UAAAgY,mBAAE,WAIE,GAHkB1X,EAAAA,kBAAkBT,KAAKmR,cAAgBnR,KAAKO,WACvBP,KAAKqQ,aAAapE,wBAElC,CAC3B,GAAYwM,GAAUC,EAAAA,UAAUC,OAAQ,UAAU3G,KAAK4G,EAAAA,KAAK,GACtD5Y,MAAKuY,mBAAqBE,EAAQI,UAAU7Y,KAAKoY,QAAQ/J,KAAKrO,SAU1D4X,EAAVzX,UAAA8X,cAAE,WACF,GAAUvT,GAAO1E,KAAK8Y,kBAElB9Y,MAAK+Y,qBAAqBrU,GAAM,GAChC1E,KAAKgZ,qBAAqBtU,GAAM,IAM1BkT,EAAVzX,UAAA6X,gBAAE,WAAA,GAAFrK,GAAA3N,IACI,KAAKA,KAAK6X,yBAA0B,CACxC,GAAYoB,GAAa,SAAIrT,GAAkB,MAAA,IAAIjE,IAAY,EAAMiE,IACzD8R,EAAY,SAAIzF,GAEpB,MAAO1Q,GAAW0Q,EADatE,EAAKwC,YAAY5I,YAAY0K,EAAOnQ,aAIrE9B,MAAK8X,oBAAsB9X,KAAK8Y,mBAC3BvU,IAAI0U,GACJ1U,IAAImT,GACJ/G,KAAKxL,GAEVnF,KAAKkZ,yBAODtB,EAAVzX,UAAA+X,eAAE,SAAuBxT,GACf1E,KAAK+X,kBACT/X,KAAK+Y,qBAAqBrU,GAAM,GAElC1E,KAAKgZ,qBAAqBtU,IAMpBkT,EAAVzX,UAAA6Y,qBAAE,SAA6BvR,EAAmBb,GAAhD,GAAF+G,GAAA3N,SAAA,KAAA4G,IAAkDA,GAAlD,EACA,IAAUQ,GAAY,SAAIxB,GAC1B,GAAYyB,GAAUsG,EAAKwC,YACfxL,EAAK0C,EAAQC,YAAY1B,IAAUyB,EAAQE,YAAY3B,EAC7D,OAAOjB,GAAKA,EAAG7C,WAAa8D,GAExBuT,EAAe,SAAIvT,GAAkB,MAAA+H,GAAKwL,gBAAgBvS,EAAShB,GAEzE6B,GAAQlD,IAAI6C,GAAcrG,QAAQoY,IAO5BvB,EAAVzX,UAAA4Y,qBAAE,SAA6BtR,EAAmBb,GAClD,GAAUyK,GAAW,GAAIlI,IACrB1B,GAAQ1G,QAAO,SAAC6E,GACdyL,EAASjI,IAAIxD,GAAQgB,QAASA,MAGhC5G,KAAK0G,WAAW2K,SAAWA,GAMrBuG,EAAVzX,UAAA+Y,qBAAE,WACF,GAAUlR,GAAShI,KAAK+X,gBAEpB/P,GAAOmD,QACPnL,KAAK0G,WAAW2K,SAAStQ,QAAO,SAAEmB,EAAuByB,GACvDqE,EAAOoB,IAAIzF,EAAKzB,KAElBlC,KAAK6X,0BAA2B,GAM1BD,EAAVzX,UAAAmY,uBAAE,WACF,GAAUtQ,GAAShI,KAAK0G,WAAW2K,QAE/BrJ,GAAOmD,QACPnL,KAAK+X,iBAAiBhX,QAAO,SAAEmB,EAAuByB,GACpDqE,EAAOoB,IAAIzF,EAAKzB,KAGlBlC,KAAK+X,iBAAiB5M,QACtBnL,KAAK6X,0BAA2B,GAM1BD,EAAVzX,UAAAgZ,gBAAE,SAAwBvS,EAAkBhB,GACxC5F,KAAK0G,WAAWjF,OAAOsM,KAAK,GAAIpM,GAAYiF,EAAShB,KAGvDxF,OAAF+M,eAAcyK,EAAdzX,UAAA,0BAAE,WACE,MAAOH,MAAK0G,WAAWwN,4DA5K3BzJ,KAACc,EAAAA,WAADZ,OAAaa,WAAY,+CAPzBf,KAAQ+F,IADR/F,KAAQwG,KAcRxG,SAAAzB,GAAA+H,aAAAtG,KAAOuG,EAAAA,OAAPrG,MAAcwB,OACd1B,KAAkDrK,OAAlD2Q,aAAAtG,KAAOuG,EAAAA,OAAPrG,MAAcL,EAAAA,iBACdG,SAAAzB,GAAA+H,aAAAtG,KAAOuG,EAAAA,OAAPrG,MAAcN,EAAAA,iNA/BduN,KCeAwB,GAAA,WAGE,QAAFA,GAAkCC,EACsBC,EACbnI,EACEd,GAHXrQ,KAAlCqZ,kBAAkCA,EACsBrZ,KAAxDsZ,oBAAwDA,EACbtZ,KAA3CmR,YAA2CA,EACEnR,KAA7CqQ,aAA6CA,EArB7C,MA0BE+I,GAAFjZ,UAAA2O,oBAAE,SAAoBhG,EACAmC,EACA/I,OAAtB,KAAAA,IAAsBA,EAAtB,KACA,IAAQoJ,KACiB,iBAAVL,KACTK,EAAOL,GAAS/I,EAChB+I,EAAQK,GAEVA,EAAStL,KAAKqQ,aAAaxE,sBAAwBZ,EAAQlD,EAAiBkD,GAC5EjL,KAAKuZ,+BAA+BjO,EAAQxC,IAM9CsQ,EAAFjZ,UAAAkP,qBAAE,SAAqBpE,EAAwBmE,GAA7C,GAAFzB,GAAA3N,SAAA,KAAAoP,IAA+CA,KAC/C,IAAU9D,GAAStL,KAAKqQ,aAAaxE,sBAAwBZ,EAAQlD,EAAiBkD,EAClFmE,GAASrO,QAAO,SAACC,GACf2M,EAAK4L,+BAA+BjO,EAAQtK,MAShDoY,EAAFjZ,UAAAgP,iBAAE,SAAiBnH,GACnB,GACQ9F,GAAQlC,KAAKwZ,YAAYxR,EADf,kBAERyR,EAAiBzZ,KAAK0Z,kBAAkB1R,EAFhC,mBAGb2R,EAAAA,iBAAiB3Z,KAAKmR,cAAgBnR,KAAKsZ,oBAAuBpX,EAAQ,EAE3E,QAAQA,GAAS,MAAOuX,IAM1BL,EAAFjZ,UAAAyZ,qBAAE,SAAqB9Q,EAAsB+Q,GACzC,MAAO/Q,GAAQgR,aAAaD,IAAc,IAM5CT,EAAFjZ,UAAAuZ,kBAAE,SAAkB5Q,EAAsBuC,GACtC,MAAO5K,GAAAA,kBAAkBT,KAAKmR,aAC5BrI,EAAQmC,MAAM8O,iBAAiB1O,GAAarL,KAAKga,gBAAgBlR,EAASuC,IAO9E+N,EAAFjZ,UAAAqZ,YAAE,SAAY1Q,EAAsBuC,EAAmB4O,OAAvD,KAAAA,IAAuDA,GAAvD,EACA,IAAQ/X,GAAQ,EACZ,IAAI4G,EAAS,EACU5G,EAAQlC,KAAK0Z,kBAAkB5Q,EAASuC,MAEvD5K,EAAAA,kBAAkBT,KAAKmR,aACpB8I,IACH/X,EAAQgY,iBAAiBpR,GAASiR,iBAAiB1O,IAGjDrL,KAAKsZ,sBACPpX,EAAQlC,KAAKqZ,kBAAkBjO,mBAAmBtC,EAASuC,KAQnE,MAAOnJ,GAAQA,EAAM4F,OAAS,IAQxBsR,EAAVjZ,UAAAoZ,+BAAE,SAAuCjO,EACAxC,GADvC,GAAF6E,GAAA3N,IAEII,QAAO6E,KAAKqG,GAAQqF,OAAO5P,QAAO,SAAC4C,GACvC,GAAY3C,GAAKsK,EAAO3H,GACZwW,EAAqCxZ,MAAMwG,QAAQnG,GAAMA,GAAMA,EACrEmZ,GAAOxJ,MACP,KAAkB,GAAxBrN,GAAA,EAAwB8W,EAAxBD,EAAwB7W,EAAxB8W,EAAA5W,OAAwBF,IAAQ,CAArB,GAAIpB,GAAfkY,EAAA9W,EACQpB,GAAQA,EAAQA,EAAQ,GAAK,GACzBzB,EAAAA,kBAAkBkN,EAAKwD,eAAiBxD,EAAK2L,oBAC/C7Y,EAAAA,kBAAkBkN,EAAKwD,aACrBrI,EAAQmC,MAAMoP,YAAY1W,EAAKzB,GAASyL,EAAK2M,gBAAgBxR,EAASnF,EAAKzB,GAE7EyL,EAAK0L,kBAAkBrO,kBAAkBlC,EAASnF,EAAKzB,OAMvDkX,EAAVjZ,UAAAma,gBAAE,SAAwBxR,EAAcuC,EAAmBkP,GACvDlP,EAAYA,EAAU/J,QAAQ,kBAAmB,SAASgB,aAC9D,IAAUkY,GAAWxa,KAAKya,oBAAoB3R,EAC1C0R,GAASnP,GAAakP,GAAc,GACpCva,KAAK0a,qBAAqB5R,EAAS0R,IAG7BpB,EAAVjZ,UAAA6Z,gBAAE,SAAwBlR,EAAcuC,GAEpC,MADiBrL,MAAKya,oBAAoB3R,GAC1BuC,IAAc,IAGxB+N,EAAVjZ,UAAAsa,oBAAE,SAA4B3R,GAC9B,GAAU0R,MACAG,EAAiB7R,EAAQgR,aAAa,QAC5C,IAAIa,EAEF,IAAK,GADCC,GAAYD,EAAepY,MAAM,OAC9BqH,EAAI,EAAGA,EAAIgR,EAAUpX,OAAQoG,IAAK,CACjD,GAAcqB,GAAQ2P,EAAUhR,GAAG9B,MAC3B,IAAImD,EAAMzH,OAAS,EAAG,CAC9B,GAAgBqX,GAAa5P,EAAMzC,QAAQ,IACjC,KAAoB,IAAhBqS,EACF,KAAM,IAAIC,OAAM,sBAAsB7P,EAElD,IAAgB8P,GAAO9P,EAAMtC,OAAO,EAAGkS,GAAY/S,MACzC0S,GAASO,GAAQ9P,EAAMtC,OAAOkS,EAAa,GAAG/S,QAIpD,MAAO0S,IAGDpB,EAAVjZ,UAAAua,qBAAE,SAA6B5R,EAAc0R,GAC7C,GAAQQ,GAAiB,EACrB,KAAK,GAAMrX,KAAO6W,GAAU,CACTA,EAAS7W,KAExBqX,GAAkBrX,EAAM,IAAM6W,EAAS7W,GAAO,KAGlDmF,EAAQ/C,aAAa,QAASiV,mBAvJlCvQ,KAACc,EAAAA,WAADZ,OAAaa,WAAY,+CAJzBf,KAAQK,EAARiG,aAAAtG,KAOewQ,EAAAA,aACfxQ,KAAAyQ,QAAAnK,aAAAtG,KAAewQ,EAAAA,WAAfxQ,KAA2BuG,EAAAA,OAA3BrG,MAAkC2B,OAClC7B,KAAwDrK,OAAxD2Q,aAAAtG,KAAeuG,EAAAA,OAAfrG,MAAsBL,EAAAA,iBACtBG,SAAAzB,GAAA+H,aAAAtG,KAAeuG,EAAAA,OAAfrG,MAAsBwB,sLArBtBiN,mBCUA,QAAA+B,KAGEnb,KAAF0O,aAAgB,EAYhB,MAFEyM,GAAFhb,UAAA4O,WAAE,SAAWqM,EAAgBC,EAA0BC,KAEvDH,K5BkBAxb,GAAA,WAeE,QAAFA,GAAwB+G,EACAyJ,EACAsG,GAFAzW,KAAxB0G,WAAwBA,EACA1G,KAAxBmQ,YAAwBA,EACAnQ,KAAxByW,KAAwBA,EAfdzW,KAAVoW,wBACUpW,KAAVub,WAAmC,GAAIpS,KAC7BnJ,KAAVwb,cAAyC,GAAIC,SACnCzb,KAAV0b,WAAmC,GAAID,SAC7Bzb,KAAV2b,UAAkC,GAAIF,SAC5Bzb,KAAV4b,SAAiC,GAAIH,SAE3Bzb,KAAV6b,QAA6C,GAAI5O,GAAAA,QAS7CjN,KAAK8b,qBA7DT,MAsDE1b,QAAF+M,eAAMxN,EAANQ,UAAA,sBAAE,WACE,MAAOH,MAAKoW,qBAAqB,GAAKpW,KAAKoW,qBAAqB,GAAGvU,MAAQ,oCAa7ElC,EAAFQ,UAAA4b,cAAE,SAAcC,GAChB,GAAUrX,GAAwB3E,KAAKuH,YAAYyU,EAAGla,WAC9C6C,KACFqX,EAAKza,EAAWya,EAAIrX,GAEhBqX,EAAGpV,UAAsD,IAA3C5G,KAAKoW,qBAAqB5N,QAAQ7D,IAClD3E,KAAKoW,qBAAqB1E,KAAK/M,GAC/B3E,KAAKoW,qBAAqBzF,KAAKxL,GAE/BnF,KAAK+V,gBAEKiG,EAAGpV,UAAsD,IAA3C5G,KAAKoW,qBAAqB5N,QAAQ7D,KAE1D3E,KAAKoW,qBAAqB6F,OAAOjc,KAAKoW,qBAAqB5N,QAAQ7D,GAAK,GACxE3E,KAAKoW,qBAAqBzF,KAAKxL,GAE/BnF,KAAK+V,kBAaXpW,EAAFQ,UAAA+N,KAAE,SAAKpF,EACAnF,EACAuY,EACAC,EACAhO,OAAP,KAAAA,IAAOA,MAEHtF,EAAe7I,KAAK2b,UAAW7S,EAASnF,EAAKuY,GAC7CrT,EAAe7I,KAAK4b,SAAU9S,EAASnF,EAAKwY,GAE5Cnc,KAAKoc,mBAAmBtT,EAASnF,GACjC3D,KAAKqc,mBAAmBvT,EAASnF,EAAKwK,IASxCxO,EAAFQ,UAAAmN,SAAE,SAASxE,EAAsBnF,EAAagB,GAC9C,GAAU2X,GAAQtc,KAAKub,WAAWrS,IAAIJ,EAClC,IAAIwT,EAAO,CACf,GAAYnC,OAAgBnR,KAAPrE,EAAmB2X,EAAMpT,IAAIvE,GAAM3E,KAAKuc,mBAAmBD,EAAO3Y,EACjF,IAAIwW,EACF,MAAOA,GAAOjR,IAAIvF,KAWxBhE,EAAFQ,UAAAqc,SAAE,SAAS1T,EAAsBnF,GACjC,GAAU2Y,GAAQtc,KAAKub,WAAWrS,IAAIJ,EAClC,IAAIwT,EAAO,CACf,GAAYnC,GAASna,KAAKuc,mBAAmBD,EAAO3Y,EAC9C,IAAIwW,EACF,WAA2BnR,KAApBmR,EAAOjR,IAAIvF,KAAsB,EAG5C,OAAO,GAUThE,EAAFQ,UAAAoN,SAAE,SAASzE,EAAsBnF,EAAaiK,EAAUjJ,GACxD,GAAQ2X,GAAmCtc,KAAKub,WAAWrS,IAAIJ,EAC3D,IAAKwT,EAGE,CACX,GAAYnC,IAAUmC,EAAMpT,IAAIvE,IAAO,GAAIwE,MAAOC,IAAIzF,EAAKiK,EACrD0O,GAAMlT,IAAIzE,EAAIwV,GACdna,KAAKub,WAAWnS,IAAIN,EAASwT,OAL7BA,IAAQ,GAAInT,MAAMC,IAAIzE,GAAI,GAAIwE,MAAMC,IAAIzF,EAAKiK,IAC7C5N,KAAKub,WAAWnS,IAAIN,EAASwT,EAMnC,IAAUpa,GAAQlC,KAAKsN,SAASxE,EAASnF,OACvBqF,KAAV9G,GACFlC,KAAKyc,cAAc3T,EAASnF,EAAKzB,IAKrCvC,EAAFQ,UAAAuc,WAAE,SAAW5T,EAAsBnF,GAC/B,MAAO3D,MAAK6b,QACPtK,eACAS,KAAKvM,EAAAA,OAAM,SAAC8K,GAAK,MAAAA,GAAEzH,UAAYA,GAAWyH,EAAE5M,MAAQA,MAI3DhE,EAAFQ,UAAA4V,aAAE,WAAA,GAAFpI,GAAA3N,IACIA,MAAKub,WAAWxa,QAAO,SAAEub,EAAOtb,GACpC,GAAY2b,GAAS,GAAIC,KAAIjP,EAAK6N,cAActS,IAAIlI,IAC1C6b,EAAWlP,EAAK4O,mBAAmBD,EAEnCO,IACFA,EAAS9b,QAAO,SAAEwP,EAAGrL,GACnByI,EAAK8O,cAAczb,EAAIkE,EAAGqL,GAC1BoM,EAAOG,OAAO5X,KAIlByX,EAAO5b,QAAO,SAACmE,GAEb,GADA2X,EAAWlP,EAAK4O,mBAAmBD,EAAOpX,GAC5B,CACtB,GAAgBhD,GAAQ2a,EAAS3T,IAAIhE,EAC3ByI,GAAK8O,cAAczb,EAAIkE,EAAGhD,OAE1ByL,GAAKoP,aAAa/b,EAAIkE,QAY9BvF,EAAFQ,UAAA4c,aAAE,SAAajU,EAAsBnF,GACrC,GAAUqZ,GAAWhd,KAAK4b,SAAS1S,IAAIJ,EACnC,IAAIkU,EAAU,CAClB,GAAYb,GAAyBa,EAAS9T,IAAIvF,EACtCwY,KACJA,IACAnc,KAAK6b,QAAQ9N,MAAMjF,QAA3BA,EAAoCnF,IAApCA,EAAyCzB,MAAO,QAW9CvC,EAAFQ,UAAAsc,cAAE,SAAc3T,EAAsBnF,EAAazB,GACnD,GAAU8a,GAAWhd,KAAK2b,UAAUzS,IAAIJ,EACpC,IAAIkU,EAAU,CAClB,GAAYd,GAA2Bc,EAAS9T,IAAIvF,EACxCuY,KACJA,EAASha,GACTlC,KAAK6b,QAAQ9N,MAAMjF,QAA3BA,EAAoCnF,IAApCA,EAAyCzB,MAAzCA,OASEvC,EAAFQ,UAAA8N,eAAE,SAAenF,GACjB,GAAU4S,GAAa1b,KAAK0b,WAAWxS,IAAIJ,EACnC4S,KACFA,EAAW3a,QAAO,SAAC4I,GAAK,MAAAA,GAAE6O,gBAC1BxY,KAAK0b,WAAWoB,OAAOhU,GAE7B,IAAUyS,GAAavb,KAAKub,WAAWrS,IAAIJ,EACnCyS,KACFA,EAAWxa,QAAO,SAAE0T,EAAG9K,GAAM,MAAA4R,GAAWuB,OAAOnT,KAC/C3J,KAAKub,WAAWuB,OAAOhU,KAS3BnJ,EAAFQ,UAAA6O,cAAE,SAAclG,EAAsBnF,GAApC,GAAFgK,GAAA3N,KACUsc,EAAQtc,KAAKub,WAAWrS,IAAIJ,EAClC,IAAIwT,EAAO,CACf,GAAYO,GAAW7c,KAAKuc,mBAAmBD,EAAO3Y,EAC5CkZ,KACElZ,EACF3D,KAAKyc,cAAc3T,EAASnF,EAAKkZ,EAAS3T,IAAIvF,IAE9CkZ,EAAS9b,QAAO,SAAEwP,EAAGrL,GAAM,MAAAyI,GAAK8O,cAAc3T,EAAS5D,EAAGqL,QAO1D5Q,EAAVQ,UAAAic,mBAAE,SAA2BtT,EAAsBnF,GACnD,GAAQgZ,GAAS3c,KAAKwb,cAActS,IAAIJ,EAC/B6T,KACHA,EAAS,GAAIC,KACb5c,KAAKwb,cAAcpS,IAAIN,EAAS6T,IAElCA,EAAOM,IAAItZ,IASLhE,EAAVQ,UAAAkc,mBAAE,SAA2BvT,EACAnF,EACAuZ,GAF3B,GAAFvP,GAAA3N,IAGI,IAAIkd,GAAYA,EAAS1Z,OAAQ,CACrC,GAAU2Z,GAAWnd,KAAK0b,WAAWxS,IAAIJ,EAC9BqU,KACHA,EAAW,GAAIhU,KACfnJ,KAAK0b,WAAWtS,IAAIN,EAASqU,GAG/B,KADqBA,EAASjU,IAAIvF,GACf,CACzB,GAAcyZ,GAAkB5K,EAAAA,MAAhCzI,UAAA,GAAyCmT,GAAUrE,UAAS,WAC5D,GAAgBhL,GAAeF,EAAKL,SAASxE,EAASnF,EAC5CgK,GAAK8O,cAAc3T,EAASnF,EAAKkK,IAEnCsP,GAAS/T,IAAIzF,EAAKyZ,MAMhBzd,EAAVQ,UAAAoH,YAAE,SAAoB3B,GAClB,MAAO5F,MAAKmQ,YAAY5I,YAAY3B,IAQ9BjG,EAAVQ,UAAAoc,mBAAE,SAA2BD,EAAsB3Y,GAC/C,IAAK,GAAIiG,GAAI,EAAGA,EAAI5J,KAAKoW,qBAAqB5S,OAAQoG,IAAK,CAC/D,GAAYyT,GAAcrd,KAAKoW,qBAAqBxM,GACxCiT,EAAWP,EAAMpT,IAAImU,EAAYxb,MACvC,IAAIgb,QACU7T,KAARrF,GAAqBkZ,EAAS7I,IAAIrQ,IACpC,MAAOkZ,GAIjB,GAAUS,GAAWhB,EAAMpT,IAAI,GAC3B,YAAgBF,KAARrF,GAAqB2Z,GAAYA,EAAStJ,IAAIrQ,GAAQ2Z,MAAWtU,IAMnErJ,EAAVQ,UAAA2b,mBAAE,WACF,GAAU9T,GAAM,KACNP,EAAUzH,KAAKmQ,YAAYO,MAAMnM,IAAG,SAACI,GAAM,MAAAA,GAAG7C,YAEpD9B,MAAK0G,WACAkL,QAAQ5R,KAAKyW,KAAKnB,eAAe7N,IACjCuK,KACGuL,EAAAA,IAAIvd,KAAKyW,KAAKZ,gBAAgB7N,IAC9BvC,EAAAA,OAAOzF,KAAKyW,KAAKP,qBAEpB2C,UAAU7Y,KAAK+b,cAAc1N,KAAKrO,uBA1S3CyK,KAACc,EAAAA,WAADZ,OAAaa,WAAY,+CA5BzBf,KAAQwG,KADRxG,KAAQ+F,IAIR/F,KAAQwK;kJAlBRtV"}